Библиотеки и заголовки
Драйверы в режиме ядра используют собственные подпрограммы системных служб, вызывая точки входа Nt и Zw в библиотеке Ntoskrnl.exe динамической компоновки (DLL). Эта библиотека DLL содержит фактические реализации этих подпрограмм. Для доступа к этим точкам входа драйвер статически ссылается на библиотеку Ntoskrnl.lib, которая доступна в комплекте драйверов Windows (WDK). Подпрограммы, реализованные в Ntoskrnl.lib, представляют собой заглушки, которые динамически связываются с точками входа в Ntoskrnl.exe во время выполнения.
В документации по WDK описаны некоторые, но не все точки входа Zw в Ntoskrnl.exe. Описание подпрограмм Zw , которые могут вызываться драйверами, см. в разделе Подпрограммы ZwXxx.
Большинство задокументированных подпрограмм Zw определены в файле заголовка Wdm.h в WDK, но некоторые из них определены в других файлах заголовков, таких как Ntddk.h и Ntifs.h.
Как правило, приложения в пользовательском режиме не вызывают подпрограммы Nt и Zw . Вместо этого приложение может вызвать подпрограмму Win32, например CreateFile, которая затем вызывает собственную подпрограмму системных служб, например NtCreateFile или ZwCreateFile, для выполнения запрошенной операции. Однако приложение в пользовательском режиме может напрямую вызывать подпрограмму NT или Zw для выполнения операции, которая не поддерживается подпрограммами Win32.
Приложения в пользовательском режиме используют собственные подпрограммы системных служб, вызывая точки входа в библиотеке динамической компоновки Ntdll.dll. Эти точки входа преобразуют вызовы подпрограмм Nt и Zw в системные вызовы, которые находятся в режиме ядра. Для доступа к этим точкам входа приложение пользовательского режима статически связывается с библиотекой Ntdll.lib, доступной в WDK. Подпрограммы, реализованные в ntdll.lib, представляют собой заглушки, которые динамически связываются с точками входа в Ntdll.dll во время выполнения.
В документации windows SDK описаны некоторые, но не все, точки входа Nt в Ntdll.lib. Большинство задокументированных подпрограмм NT определены в файле заголовка Winternl.h в windows SDK. В этой документации содержится мало упоминание точек входа Zw, и никакие файлы заголовков в windows SDK не содержат определений подпрограмм Zw.
С несколькими незначительными исключениями каждая точка входа в Ntdll.dll для подпрограммы NT имеет соответствующую точку входа для подпрограммы Zw . В документации по WDK и Windows SDK рекомендуется, чтобы разработчики приложений не вызывали незадокументированные точки входа Nt и предупреждают о том, что точки входа Zw могут исчезнуть из Ntdll.dll в будущей версии Windows. Разработчики приложений, которые вызывают подпрограммы Zw из пользовательского режима, должны быть готовы к этому вхождений.
Описание подпрограмм NT , которые могут вызываться приложениями, см. в разделах Winternl, winternl.h header и Прочее Low-Level поддержки клиентов. Некоторые справочные страницы по подпрограммам Nt в документации по Windows SDK помечают подпрограммы как "нерекомендуемые" и советуют читателям использовать эквивалентные подпрограммы Win32 вместо устаревших подпрограмм NT .
Приложение в пользовательском режиме не может вызывать точки входа в Ntoskrnl.exe, а драйвер режима ядра не может вызывать точки входа в Ntdll.dll.