Post

Windows 드라이버 키트의 헤더 파일

Windows 드라이버 키트의 헤더 파일

Header files in the Windows Driver Kit(원본 Microsoft Learn 링크)

아래는 위 문서의 번역이다.


Windows 드라이버 키트(WDK)의 API 참조 문서에는 커널 모드 및 유저 모드 드라이버를 빌드하는 데 필요한 모든 헤더 파일(.h 파일)이 포함되어 있다. 헤더 파일은 WDK 설치 폴더의 Include 폴더에 있다. 예: C:\Program Files (x86)\Windows Kits\10\Include.

헤더 파일에는 버전 정보가 포함되어 있어, 드라이버가 실행될 Windows 버전과 관계없이 동일한 헤더 파일 집합을 사용할 수 있다.

Windows 버전을 나타내는 상수

WDK의 헤더 파일에는 특정 Windows 운영체제 버전에서만 사용 가능한 프로그래밍 요소를 지정하는 조건문이 포함되어 있다. 버전이 지정된 요소에는 함수, 열거형, 구조체, 구조체 멤버 등이 있다.

각 운영체제 버전에서 사용 가능한 프로그래밍 요소를 지정하기 위해, 헤더 파일에는 NTDDI_VERSION 값을 Sdkddkver.h에 정의된 사전 정의 상수 값들과 비교하는 전처리기 조건문이 포함되어 있다.

다음은 Microsoft Windows 운영체제 버전을 나타내는 사전 정의 상수 값들이다.

상수운영체제 버전
NTDDI_WIN10Windows 10
NTDDI_WINBLUEWindows 8.1
NTDDI_WIN8Windows 8
NTDDI_WIN7Windows 7
NTDDI_WS08SP4Windows Server 2008 with SP4
NTDDI_WS08SP3Windows Server 2008 with SP3
NTDDI_WS08SP2Windows Server 2008 with SP2
NTDDI_WS08Windows Server 2008

WDK 헤더 파일에서 버전별 DDI 요소의 다양한 예시를 볼 수 있다. 다음 조건부 선언은 커널 모드 드라이버에 포함될 수 있는 헤더 파일인 Wdm.h에 나타난다.

1
2
3
4
5
6
7
8
9
#if (NTDDI_VERSION >= NTDDI_WIN7)
_Must_inspect_result_
NTKERNELAPI
NTSTATUS
KeSetTargetProcessorDpcEx (
    _Inout_ PKDPC Dpc,
    _In_ PPROCESSOR_NUMBER ProcNumber
    );
#endif

위 예시에서 KeSetTargetProcessorDpcEx 함수는 Windows 7 및 이후 버전에서만 사용 가능함을 알 수 있다.

다음 조건부 선언은 유저 모드 드라이버에 포함될 수 있는 헤더 파일인 Winspool.h에 나타난다.

1
2
3
4
5
6
7
8
9
#if (NTDDI_VERSION >= NTDDI_WIN7)
...
BOOL
WINAPI
GetPrintExecutionData(
    _Out_ PRINT_EXECUTION_DATA *pData
    );

#endif // (NTDDI_VERSION >= NTDDI_WIN7)

위 예시에서 GetPrintExecutionData 함수는 Windows 7 및 이후 버전에서만 사용 가능함을 알 수 있다.

커널 모드 드라이버 프레임워크의 헤더 파일

WDK는 여러 Windows 버전을 지원하며, 또한 여러 버전의 커널 모드 드라이버 프레임워크(KMDF) 및 유저 모드 드라이버 프레임워크(UMDF)도 지원한다. WDK 헤더 파일의 버전 정보는 Windows 버전에 관한 것이며, KMDF 또는 UMDF 버전에 관한 것은 아니다. KMDF와 UMDF의 서로 다른 버전을 위한 헤더 파일은 별도의 디렉터리에 배치된다.

This post is licensed under CC BY 4.0 by the author.