Header files in the Windows Driver Kit
The Windows Driver Kit (WDK) contains all the header files (.h files) that you need to build kernel-mode and user-mode drivers. Header files are in the Include folder in your WDK installation folder. Example: C:\Program Files (x86)\Windows Kits\10\Include.
The header files contain version information so that you can use the same set of header files regardless of which version of Windows your driver will run on.
Constants that represent Windows versions
Header files in the WDK contain conditional statements that specify programming elements that are available only in certain versions of the Windows operating system. The versioned elements include functions, enumerations, structures, and structure members.
To specify the programming elements that are available in each operating system version, the header files contain preprocessor conditionals that compare the value of NTDDI_VERSION with a set of predefined constant values that are defined in Sdkddkver.h.
Here are the predefined constant values that represent versions of the Microsoft Windows operating system.
Constant | Operating system version |
---|---|
NTDDI_WIN10 |
Windows 10 |
NTDDI_WINBLUE |
Windows 8.1 |
NTDDI_WIN8 |
Windows 8 |
NTDDI_WIN7 |
Windows 7 |
NTDDI_WS08SP4 |
Windows Server 2008 with SP4 |
NTDDI_WS08SP3 |
Windows Server 2008 with SP3 |
NTDDI_WS08SP2 |
Windows Server 2008 with SP2 |
NTDDI_WS08 |
Windows Server 2008 |
You can see many examples of version-specific DDI elements in the WDK header files. This conditional declaration appears in Wdm.h, which is a header file that might be included by a kernel-mode driver.
#if (NTDDI_VERSION >= NTDDI_WIN7)
_Must_inspect_result_
NTKERNELAPI
NTSTATUS
KeSetTargetProcessorDpcEx (
_Inout_ PKDPC Dpc,
_In_ PPROCESSOR_NUMBER ProcNumber
);
#endif
In the example you can see that the KeSetTargetProcessorDpcEx function is available only in Windows 7 and later versions of Windows.
This conditional declaration appears in Winspool.h, which is a header file that might be included by a user-mode driver.
#if (NTDDI_VERSION >= NTDDI_WIN7)
...
BOOL
WINAPI
GetPrintExecutionData(
_Out_ PRINT_EXECUTION_DATA *pData
);
#endif // (NTDDI_VERSION >= NTDDI_WIN7)
In the example can see that the GetPrintExecutionData function is available only in Windows 7 and later versions of Windows.
Header files for the Kernel Mode Driver Framework
The WDK supports several versions of Windows, and it also supports several versions of the Kernel Mode Driver Framework (KMDF) and User Mode Driver Framework (UMDF). The versioning information in the WDK header files pertains to Windows versions, but not to KMDF or UMDF versions. Header files for different versions of KMDF and UMDF are placed in separate directories.