Диаграмма неверна.
Хотя изначально существовали другие подсистемы (например, POSIX), которые обращались к ntdll.dll
(шлюз "Kernel Services") без прохождения через Win32 (kernel32.dll
, user32.dll
), все они теперь не функционируют.
Все современные приложения для Windows построены на Win32. Другие подсистемы больше не поддерживаются. В некоторых случаях (драйверы и системные утилиты времени загрузки, такие как chkdsk) код пишется непосредственно против нативного API, но эти сценарии очень редки.
Я не очень знаком с WinRT, но я думаю, что Win32 также подходит под него (или он может использовать комбинацию Win32 и прямых ntdll.dll
сервисов).
По словам Саша Гольдштейн ,
Затем приложение C ++ Metro будет по-прежнему загружать библиотеки Win32 DLL, такие как kernel32 и ntdll. Более того, WinRT API-интерфейсы обращаются к библиотекам Win32 - так что они являются не заменой, а оболочкой, разновидностью API, поверх Win32. (Историческая справка: в Windows раньше была функция, называемая «подсистемами среды», которую можно условно описать как разновидности API. WinRT не является подсистемой среды - это библиотека поверх подсистемы среды Win32.)