커널 모드 드라이버는 Ntoskrnl.exe DLL(동적 연결 라이브러리)에서 Nt 및 Zw 진입점을 호출하여 네이티브 시스템 서비스 루틴을 사용합니다. 이 DLL에는 이러한 루틴의 실제 구현이 포함됩니다. 이러한 진입점에 액세스하기 위해 드라이버는 WDK(Windows 드라이버 키트)에서 사용할 수 있는 Ntoskrnl.lib 라이브러리에 정적으로 연결됩니다. Ntoskrnl.lib에서 구현되는 루틴은 런타임에 Ntoskrnl.exe 진입점에 동적으로 연결되는 스텁입니다.
WDK 설명서에서는 Ntoskrnl.exeZw 진입점의 일부(전부는 아님)를 설명합니다. 드라이버에서 호출할 수 있는 Zw 루틴에 대한 설명은 ZwXxx 루틴을 참조하세요.
문서화된 대부분의 Zw 루틴은 WDK의 Wdm.h 헤더 파일에 정의되어 있지만 Ntddk.h 및 Ntifs.h와 같은 다른 헤더 파일에는 몇 가지가 정의되어 있습니다.
일반적으로 사용자 모드 애플리케이션은 Nt 및 Zw 루틴을 호출하지 않습니다. 대신 애플리케이션은 CreateFile과 같은 Win32 루틴을 호출한 다음, NtCreateFile 또는 ZwCreateFile과 같은 네이티브 시스템 서비스 루틴을 호출하여 요청된 작업을 수행할 수 있습니다. 그러나 사용자 모드 애플리케이션은 Nt 또는 Zw 루틴을 직접 호출하여 Win32 루틴에서 지원되지 않는 작업을 수행할 수 있습니다.
사용자 모드 애플리케이션은 Ntdll.dll 동적 링크 라이브러리의 진입점을 호출하여 네이티브 시스템 서비스 루틴을 사용합니다. 이러한 진입점은 Nt 및 Zw 루틴에 대한 호출을 커널 모드로 트래핑된 시스템 호출로 변환합니다. 이러한 진입점에 액세스하기 위해 사용자 모드 애플리케이션은 WDK에서 사용할 수 있는 Ntdll.lib 라이브러리에 정적으로 연결됩니다. Ntdll.lib에서 구현되는 루틴은 런타임에 Ntdll.dll 진입점에 동적으로 연결되는 스텁입니다.
Windows SDK 설명서에서는 Ntdll.lib의 Nt 진입점 중 일부만 설명합니다. 문서화된 대부분의 Nt 루틴은 Windows SDK의 Winternl.h 헤더 파일에 정의됩니다. 이 설명서에서는 Zw 진입점에 대해 거의 언급하지 않으며 Windows SDK의 헤더 파일에 는 Zw 루틴에 대한 정의가 포함되어 있지 않습니다.
몇 가지 사소한 예외가 있는 경우 Nt 루틴에 대한 Ntdll.dll 각 진입점에는 Zw 루틴에 대해 일치하는 진입점이 있습니다. WDK 및 Windows SDK 설명서에서는 애플리케이션 개발자가 문서화되지 않은 Nt 진입점을 호출하지 않도록 권장하며, Zw 진입점이 이후 버전의 Windows에서 Ntdll.dll 사라질 수 있음을 경고합니다. 사용자 모드에서 Zw 루틴을 호출하는 애플리케이션 개발자는 이 항목에 대비해야 합니다.
애플리케이션에서 호출할 수 있는 Nt 루틴에 대한 설명은 Winternl, winternl.h헤더 및 기타 Low-Level 클라이언트 지원을 참조하세요. Windows SDK 설명서의 Nt 루틴에 대한 일부 참조 페이지는 루틴에 "사용되지 않음"으로 레이블을 지정하고 더 이상 사용되지 않는 Nt 루틴 대신 동등한 Win32 루틴을 사용하도록 독자에게 권고합니다.
사용자 모드 애플리케이션은 Ntoskrnl.exe진입점을 호출할 수 없으며 커널 모드 드라이버는 Ntdll.dll진입점을 호출할 수 없습니다.