Bibliotecas e cabeçalhos

Os drivers no modo kernel usam as rotinas de serviços do sistema nativo chamando os pontos de entrada Nt e Zw na DLL (biblioteca de links dinâmicos) Ntoskrnl.exe. Essa DLL contém as implementações reais dessas rotinas. Para acessar esses pontos de entrada, um driver é vinculado estaticamente à biblioteca Ntoskrnl.lib, que está disponível no WDK (Windows Driver Kit). As rotinas implementadas em Ntoskrnl.lib são "stubs" que se vinculam dinamicamente, em tempo de execução, aos pontos de entrada em Ntoskrnl.exe.

A documentação do WDK descreve alguns, mas não todos, dos pontos de entrada Zw em Ntoskrnl.exe. Para obter descrições das rotinas Zw que podem ser chamadas por drivers, consulte ZwXxx Routines.

A maioria das rotinas de Zw documentadas são definidas no arquivo de cabeçalho Wdm.h no WDK, mas algumas são definidas em outros arquivos de cabeçalho, como Ntddk.h e Ntifs.h.

Normalmente, os aplicativos no modo de usuário não chamam as rotinas Nt e Zw . Em vez disso, um aplicativo pode chamar uma rotina Win32, como CreateFile, que então chama uma rotina de serviços de sistema nativo, como NtCreateFile ou ZwCreateFile, para executar a operação solicitada. No entanto, um aplicativo de modo de usuário pode chamar diretamente uma rotina Nt ou Zw para executar uma operação que não tem suporte nas rotinas do Win32.

Os aplicativos no modo de usuário usam as rotinas de serviços do sistema nativo chamando os pontos de entrada na biblioteca de vínculos dinâmicos Ntdll.dll. Esses pontos de entrada convertem chamadas em rotinas Nt e Zw em chamadas do sistema que estão presas no modo kernel. Para acessar esses pontos de entrada, um aplicativo no modo de usuário é vinculado estaticamente à biblioteca Ntdll.lib, que está disponível no WDK. As rotinas implementadas em Ntdll.lib são estruturas provisórias que se vinculam dinamicamente aos pontos de entrada no Ntdll.dll durante o tempo de execução.

A documentação do SDK do Windows descreve alguns, mas não todos, dos pontos de entrada Nt em Ntdll.lib. A maioria das rotinas Nt documentadas são definidas no arquivo de cabeçalho Winternl.h no SDK do Windows. Esta documentação faz pouca menção aos pontos de entrada Zw e nenhum arquivo de cabeçalho no SDK do Windows contém definições de rotinas Zw .

Com algumas exceções secundárias, cada ponto de entrada em Ntdll.dll para uma rotina Nt tem um ponto de entrada correspondente para uma rotina Zw . A documentação do WDK e do SDK do Windows recomenda que os desenvolvedores de aplicativos evitem chamar pontos de entrada Nt não documentados e avisa que os pontos de entrada Zw podem desaparecer de Ntdll.dll em uma versão futura do Windows. Os desenvolvedores de aplicativos que chamam as rotinas Zw do modo de usuário devem estar preparados para essa ocorrência.

Para obter descrições das rotinas Nt que podem ser chamadas por aplicativos, consulte Winternl, winternl.h header e Miscellaneous Low-Level Client Support. Algumas páginas de referência para rotinas Nt na documentação do SDK do Windows rotulam as rotinas como "preteridas" e aconselham os leitores a usar as rotinas equivalentes do Win32 em vez das rotinas Nt preteridas.

Um aplicativo de modo de usuário não pode chamar os pontos de entrada no Ntoskrnl.exee um driver no modo kernel não pode chamar os pontos de entrada no Ntdll.dll.