Bibliothèques et en-têtes
Les pilotes en mode noyau utilisent les routines des services système natifs en appelant les points d’entrée Nt et Zw dans la bibliothèque de liens dynamiques (DLL) Ntoskrnl.exe. Cette DLL contient les implémentations réelles de ces routines. Pour accéder à ces points d’entrée, un pilote établit un lien statique vers la bibliothèque Ntoskrnl.lib, qui est disponible dans le Kit de pilotes Windows (WDK). Les routines implémentées dans Ntoskrnl.lib sont des stubs qui sont liés dynamiquement aux points d’entrée dans Ntoskrnl.exe au moment de l’exécution.
La documentation WDK décrit certains, mais pas tous, des points d’entrée Zw dans Ntoskrnl.exe. Pour obtenir une description des routines Zw qui peuvent être appelées par les pilotes, consultez Routines ZwXxx.
La plupart des routines Zw documentées sont définies dans le fichier d’en-tête Wdm.h du WDK, mais quelques-unes sont définies dans d’autres fichiers d’en-tête, tels que Ntddk.h et Ntifs.h.
En règle générale, les applications en mode utilisateur n’appellent pas les routines Nt et Zw . Au lieu de cela, une application peut appeler une routine Win32, telle que CreateFile, qui appelle ensuite une routine de services système natifs, telle que NtCreateFile ou ZwCreateFile, pour effectuer l’opération demandée. Toutefois, une application en mode utilisateur peut appeler directement une routine Nt ou Zw pour effectuer une opération qui n’est pas prise en charge par les routines Win32.
Les applications en mode utilisateur utilisent les routines des services système natifs en appelant les points d’entrée dans la bibliothèque de liens dynamiques Ntdll.dll. Ces points d’entrée convertissent les appels en routines Nt et Zw en appels système qui sont piégés en mode noyau. Pour accéder à ces points d’entrée, une application en mode utilisateur établit un lien statique vers la bibliothèque Ntdll.lib, qui est disponible dans le WDK. Les routines implémentées dans Ntdll.lib sont des stubs qui sont liés dynamiquement aux points d’entrée dans Ntdll.dll au moment de l’exécution.
La documentation du Kit de développement logiciel (SDK) Windows décrit certains points d’entrée Nt , mais pas tous, dans Ntdll.lib. La plupart des routines Nt documentées sont définies dans le fichier d’en-tête Winternl.h du Kit de développement logiciel (SDK) Windows. Cette documentation ne fait que peu mention des points d’entrée Zw, et aucun fichier d’en-tête dans le KIT de développement logiciel (SDK) Windows ne contient des définitions de routines Zw.
À quelques exceptions mineures près, chaque point d’entrée dans Ntdll.dll pour une routine Nt a un point d’entrée correspondant pour une routine Zw . La documentation relative au Kit de développement logiciel (SDK) WDK et Windows recommande aux développeurs d’applications d’éviter d’appeler des points d’entrée Nt non documentés et avertit que les points d’entrée Zw pourraient disparaître de Ntdll.dll dans une version ultérieure de Windows. Les développeurs d’applications qui appellent les routines Zw à partir du mode utilisateur doivent être préparés pour cet événement.
Pour obtenir des descriptions des routines Nt qui peuvent être appelées par les applications, consultez Winternl, winternl.h header et Divers Low-Level Support client. Certaines pages de référence pour les routines Nt dans la documentation du Kit de développement logiciel (SDK) Windows étiquettent les routines comme « dépréciées » et conseillent aux lecteurs d’utiliser les routines Win32 équivalentes au lieu des routines Nt dépréciées.
Une application en mode utilisateur ne peut pas appeler les points d’entrée dans Ntoskrnl.exe, et un pilote en mode noyau ne peut pas appeler les points d’entrée dans Ntdll.dll.