Encabezados y bibliotecas
Los controladores en modo kernel usan las rutinas nativas de servicios del sistema llamando a los puntos de entrada Nt y Zw en la biblioteca de vínculos dinámicos (DLL) de Ntoskrnl.exe. Este archivo DLL contiene las implementaciones reales de estas rutinas. Para acceder a estos puntos de entrada, un controlador se vincula estáticamente a la biblioteca Ntoskrnl.lib, que está disponible en el Kit de controladores de Windows (WDK). Las rutinas que se implementan en Ntoskrnl.lib son códigos auxiliares que se vinculan dinámicamente a los puntos de entrada de Ntoskrnl.exe en tiempo de ejecución.
En la documentación de WDK se describen algunos puntos de entrada de Zw en Ntoskrnl.exe. Para obtener descripciones de las rutinas Zw a las que pueden llamar los controladores, consulte ZwXxx Routines.
La mayoría de las rutinas zw documentadas se definen en el archivo de encabezado Wdm.h en WDK, pero algunos se definen en otros archivos de encabezado, como Ntddk.h y Ntifs.h.
Normalmente, las aplicaciones en modo de usuario no llaman a las rutinas Nt y Zw . En su lugar, una aplicación podría llamar a una rutina win32, como CreateFile, que luego llama a una rutina de servicios del sistema nativo, como NtCreateFile o ZwCreateFile, para realizar la operación solicitada. Sin embargo, una aplicación en modo de usuario podría llamar directamente a una rutina Nt o Zw para realizar una operación que no es compatible con las rutinas de Win32.
Las aplicaciones en modo de usuario usan las rutinas nativas de servicios del sistema mediante una llamada a los puntos de entrada de la biblioteca de vínculos dinámicos de Ntdll.dll. Estos puntos de entrada convierten las llamadas a rutinas Nt y Zw en llamadas del sistema que están atrapados en modo kernel. Para acceder a estos puntos de entrada, una aplicación en modo de usuario se vincula estáticamente a la biblioteca Ntdll.lib, que está disponible en WDK. Las rutinas que se implementan en Ntdll.lib son códigos auxiliares que se vinculan dinámicamente a los puntos de entrada de Ntdll.dll en tiempo de ejecución.
En la documentación de Windows SDK se describen algunos puntos de entrada nt, pero no todos, en Ntdll.lib. La mayoría de las rutinas nt documentadas se definen en el archivo de encabezado Winternl.h en Windows SDK. Esta documentación hace poca mención de los puntos de entrada zw , y ningún archivo de encabezado del SDK de Windows contiene definiciones de rutinas zw .
Con un par de excepciones menores, cada punto de entrada de Ntdll.dll para una rutina Nt tiene un punto de entrada coincidente para una rutina Zw . La documentación de WDK y Windows SDK recomienda que los desarrolladores de aplicaciones eviten llamar a puntos de entrada Nt no documentados y advierten de que los puntos de entrada Zw podrían desaparecer de Ntdll.dll en una versión futura de Windows. Los desarrolladores de aplicaciones que llaman a las rutinas zw desde el modo de usuario deben estar preparados para esta repetición.
Para obtener descripciones de las rutinas nt a las que pueden llamar las aplicaciones, consulte El encabezado Winternl, winternl.h y Varios Low-Level soporte técnico de cliente. Algunas páginas de referencia para las rutinas nt en la documentación de Windows SDK etiquetan las rutinas como "en desuso" y aconsejan a los lectores que usen las rutinas de Win32 equivalentes en lugar de las rutinas nt en desuso.
Una aplicación en modo de usuario no puede llamar a los puntos de entrada en Ntoskrnl.exe y un controlador en modo kernel no puede llamar a los puntos de entrada en Ntdll.dll.