Bibliotheken und Header

Kernelmodustreiber verwenden die systemeigenen Systemdiensteroutinen, indem sie die Nt- und Zw-Einstiegspunkte in der Ntoskrnl.exe Dynamic Link Library (DLL) aufrufen. Diese DLL enthält die tatsächlichen Implementierungen dieser Routinen. Um auf diese Einstiegspunkte zuzugreifen, verknüpft ein Treiber statisch mit der Bibliothek Ntoskrnl.lib, die im Windows Driver Kit (WDK) verfügbar ist. Bei den in Ntoskrnl.lib implementierten Routinen handelt es sich um Stubs, die zur Laufzeit dynamisch mit den Einstiegspunkten in Ntoskrnl.exe verknüpft werden.

In der WDK-Dokumentation werden einige, aber nicht alle Zw-Einstiegspunkte in Ntoskrnl.exe beschrieben. Beschreibungen der Zw-Routinen , die von Treibern aufgerufen werden können, finden Sie unter ZwXxx-Routinen.

Die meisten dokumentierten Zw-Routinen werden in der Wdm.h-Headerdatei im WDK definiert, aber einige sind in anderen Headerdateien definiert, z. B. Ntddk.h und Ntifs.h.

In der Regel rufen Benutzermodusanwendungen die Nt - und Zw-Routinen nicht auf. Stattdessen kann eine Anwendung eine Win32-Routine aufrufen, z. B . CreateFile, die dann eine systemeigene Systemdienstroutine aufruft, z. B. NtCreateFile oder ZwCreateFile, um den angeforderten Vorgang auszuführen. Eine Anwendung im Benutzermodus kann jedoch direkt eine Nt - oder Zw-Routine aufrufen, um einen Vorgang auszuführen, der von den Win32-Routinen nicht unterstützt wird.

Benutzermodusanwendungen verwenden die systemeigenen Systemdiensteroutinen, indem sie die Einstiegspunkte in der Ntdll.dll Dynamic Link-Bibliothek aufrufen. Diese Einstiegspunkte konvertieren Aufrufe von Nt - und Zw-Routinen in Systemaufrufe, die in den Kernelmodus eingeschlossen werden. Um auf diese Einstiegspunkte zuzugreifen, verknüpft eine Anwendung im Benutzermodus statisch mit der Bibliothek Ntdll.lib, die im WDK verfügbar ist. Bei den in Ntdll.lib implementierten Routinen handelt es sich um Stubs, die zur Laufzeit dynamisch mit den Einstiegspunkten in Ntdll.dll verknüpfen.

Die Windows SDK-Dokumentation beschreibt einige, aber nicht alle nt-Einstiegspunkte in "Ntdll.lib". Die meisten dokumentierten NT-Routinen werden in der Winternl.h-Headerdatei im Windows SDK definiert. Diese Dokumentation macht wenig Erwähnung der Zw-Einstiegspunkte, und keine Headerdateien im Windows SDK enthalten Definitionen von Zw-Routinen.

Mit einigen geringfügigen Ausnahmen verfügt jeder Einstiegspunkt in Ntdll.dll für eine Nt-Routine über einen übereinstimmenden Einstiegspunkt für eine Zw-Routine . In der Dokumentation für das WDK und das Windows SDK wird empfohlen, dass Anwendungsentwickler das Aufrufen nicht dokumentierter Nt-Einstiegspunkte vermeiden, und warnt, dass die Zw-Einstiegspunkte in Ntdll.dll in einer zukünftigen Version von Windows verschwinden könnten. Anwendungsentwickler, die die Zw-Routinen aus dem Benutzermodus aufrufen, sollten auf dieses Auftreten vorbereitet sein.

Beschreibungen der NT-Routinen , die von Anwendungen aufgerufen werden können, finden Sie unter Winternl, winternl.h-Header und Sonstiges Low-Level Clientsupport. Einige Referenzseiten für Nt-Routinen in der Dokumentation zum Windows SDK bezeichnen die Routinen als "veraltet" und empfehlen Lesern, die entsprechenden Win32-Routinen anstelle der veralteten Nt-Routinen zu verwenden.

Eine Anwendung im Benutzermodus kann die Einstiegspunkte in Ntoskrnl.exe nicht aufrufen, und ein Kernelmodustreiber kann die Einstiegspunkte in Ntdll.dll nicht aufrufen.