라이브러리 및 헤더
커널 모드 드라이버는 Ntoskrnl.exe DLL(동적 연결 라이브러리)에서 Nt 및 Zw 진입점을 호출하여 네이티브 시스템 서비스 루틴을 사용합니다. 이 DLL에는 이러한 루틴의 실제 구현이 포함되어 있습니다. 이러한 진입점에 액세스하기 위해 드라이버는 WDK(Windows 드라이버 키트)에서 사용할 수 있는 Ntoskrnl.lib 라이브러리에 정적으로 연결됩니다. Ntoskrnl.lib에서 구현되는 루틴은 런타임에 Ntoskrnl.exe 진입점에 동적으로 연결되는 스텁입니다.
WDK 설명서에서는 Ntoskrnl.exe Zw 진입점의 일부(전부는 아님)를 설명합니다. 드라이버에서 호출할 수 있는 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 진입점을 호출하지 않도록 권장하고, 이후 버전의 Windows에서 Zw 진입점이 Ntdll.dll 사라질 수 있음을 경고합니다. 사용자 모드에서 Zw 루틴을 호출하는 애플리케이션 개발자는 이 발생에 대비해야 합니다.
애플리케이션에서 호출할 수 있는 Nt 루틴에 대한 설명은 Winternl, winternl.h헤더 및 기타 Low-Level 클라이언트 지원을 참조하세요. Windows SDK 설명서의 Nt 루틴에 대한 일부 참조 페이지는 루틴에 "사용되지 않음"으로 레이블을 지정하고 독자에게 사용되지 않는 Nt 루틴 대신 동등한 Win32 루틴을 사용하도록 권고합니다.
사용자 모드 애플리케이션은 Ntoskrnl.exe 진입점을 호출할 수 없으며 커널 모드 드라이버는 Ntdll.dll 진입점을 호출할 수 없습니다.