Мне кажется, что понятие "подсистема" несколько нечетко определено или, по крайней мере, используется с разными значениями в разных контекстах.
Согласно документации MSDN :
Подсистемы среды - это процессы Windows NT, которые эмулируют различные среды операционной системы. Руководитель Windows NT предоставляет общие службы, которые могут вызывать все подсистемы среды для выполнения основных функций операционной системы.
Windows Internals book говорит о следующих двух подсистемах:
- Подсистема Windows о которой она говорит - «эта [подсистема] особенная в том, что Windows не может работать без нее. (Она владеет клавиатурой, мышью и дисплеем, и она должна присутствовать даже на серверных системах без входа в систему интерактивных пользователей. На самом деле две другие ( какие две? ) подсистемы настроены на запуск по требованию, тогда как подсистема Windows всегда должна быть запущена. "
- Подсистема для Unix-приложений, также известная как SUA [ POSIX ] Подсистема
Теперь параметр / SUBSYSTEM, который можно отправить в компоновщик Microsoft VS C ++ в его документации , говорит, и я цитирую
Вы можете указать любую из следующих подсистем:
BOOT_APPLICATION
Приложение, которое работает в среде загрузки Windows. Для получения дополнительной информации о загрузочных приложениях см. О поставщике BCD WMI.
CONSOLE
Приложение в текстовом режиме Windows. Операционная система предоставляет консоль для консольных приложений.
Изображение расширяемого интерфейса прошивки (EFI)
Параметры подсистемы EFI описывают исполняемые образы, которые запускаются в среде Extensible Firmware Interface. Эта среда обычно поставляется вместе с оборудованием и выполняется до загрузки операционной системы. Основными различиями между типами изображений EFI являются расположение в памяти, в которое загружается изображение, и действие, которое выполняется при возврате вызова к изображению. Изображение EFI_APPLICATION выгружается при возврате элемента управления. EFI_BOOT_SERVICE_DRIVER или EFI_RUNTIME_DRIVER выгружается, только если элемент управления возвращается с кодом ошибки. Образ EFI_ROM выполняется из ПЗУ. Для получения дополнительной информации см. Спецификации на веб-сайте Unified EFI Forum.
NATIVE
Код, который выполняется без подсистемной среды, например, драйверы устройств режима ядра и собственные системные процессы. Этот параметр обычно зарезервирован для системных функций Windows.
POSIX
Приложение, которое работает в подсистеме POSIX в Windows.
WINDOWS
Приложение, которое работает в графической среде Windows. Это касается как настольных приложений, так и приложений Магазина Windows.
WindowsCE
Подсистема WINDOWSCE указывает, что приложение предназначено для запуска на устройстве с версией ядра Windows CE. Версии ядра включают PocketPC, Windows Mobile, Windows Phone 7, Windows CE V1.0-6.0R3 и Windows Embedded Compact 7.
Итак, поехали. Наконец, люди иногда говорят о подсистеме «Win32», которую я не знаю, следует ли мне понимать «подсистему« windows »или« консольную »подсистему в смысле опции компоновщика.
Возвращаясь к книге Windows Internals, в ней также говорится, что «каждый исполняемый образ (.exe) привязан к одной и только одной подсистеме», что объясняет необходимость указания подсистемы, для которой ваше приложение предназначено во время компоновки.