Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйверы в режиме ядра используют подпрограммы собственных системных служб путем вызова точек входа Nt и Zw в библиотеке динамических ссылок (DLL) Ntoskrnl.exe. Эта библиотека 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, во время выполнения.
В документации по пакету SDK для Windows описаны некоторые, но не все, точки входа Nt в Ntdll.lib. Большинство документированных подпрограмм Nt определены в файле заголовка Winternl.h в пакете SDK для Windows. В этой документации точки входа Zw упоминаются редко, и ни в одном из файлов заголовков в пакете Windows SDK нет определений подпрограмм Zw.
При использовании нескольких незначительных исключений каждая точка входа в Ntdll.dll для подпрограммы Nt имеет соответствующую точку входа для подпрограммы Zw . В документации по WDK и Windows SDK рекомендуется, чтобы разработчики приложений избегали вызова незадокументированных точек входа Nt, и предупреждается, что точки входа Zw могут исчезнуть из Ntdll.dll в будущей версии Windows. Разработчики приложений, которые вызывают подпрограммы Zw из пользовательского режима, должны быть подготовлены к этому случаю.
Описание подпрограмм Nt, которые могут вызываться приложениями, смотрите в Winternl, заголовке winternl.h и Разное Low-Level Поддержка клиентов. Некоторые справочные страницы для подпрограмм Nt в документации по пакету SDK для Windows помечают подпрограммы как "устаревшие" и советуют читателям использовать эквивалентные подпрограммы Win32 вместо устаревших подпрограмм Nt .
Приложение в пользовательском режиме не может вызывать точки входа в Ntoskrnl.exe, а драйвер режима ядра не может вызывать точки входа в Ntdll.dll.