Файлы заголовков в комплекте драйверов Windows
Пакет драйверов Windows (WDK) содержит все файлы заголовков (H-файлы), необходимые для сборки драйверов в режиме ядра и в пользовательском режиме. Файлы заголовков находятся в папке Include в папке установки WDK. Пример: C:\Program Files (x86)\Windows Kits\10\Include.
Файлы заголовков содержат сведения о версии, поэтому вы можете использовать один и тот же набор файлов заголовков независимо от того, в какой версии Windows будет работать драйвер.
Константы, представляющие версии Windows
Файлы заголовков в WDK содержат условные инструкции, указывающие программные элементы, доступные только в определенных версиях операционной системы Windows. Элементы с управлением версиями включают функции, перечисления, структуры и элементы структуры.
Чтобы указать элементы программирования, доступные в каждой версии операционной системы, файлы заголовков содержат условные выражения препроцессора, которые сравнивают значение NTDDI_VERSION с набором предопределенных значений констант, определенных в sdkddkver.h.
Ниже приведены предопределенные значения констант, представляющие версии операционной системы Microsoft Windows.
Константа | Версия операционной системы |
---|---|
NTDDI_WIN10 |
Windows 10 |
NTDDI_WINBLUE |
Windows 8.1 |
NTDDI_WIN8 |
Windows 8 |
NTDDI_WIN7 |
Windows 7 |
NTDDI_WS08SP4 |
Windows Server 2008 с пакетом обновления 4 (SP4) |
NTDDI_WS08SP3 |
Windows Server 2008 с пакетом обновления 3 (SP3) |
NTDDI_WS08SP2 |
Windows Server 2008 с пакетом обновления 2 (SP2) |
NTDDI_WS08 |
Windows Server 2008 |
В файлах заголовков WDK можно увидеть множество примеров элементов DDI для конкретной версии. Это условное объявление отображается в Wdm.h, который представляет собой файл заголовка, который может быть включен драйвером режима ядра.
#if (NTDDI_VERSION >= NTDDI_WIN7)
_Must_inspect_result_
NTKERNELAPI
NTSTATUS
KeSetTargetProcessorDpcEx (
_Inout_ PKDPC Dpc,
_In_ PPROCESSOR_NUMBER ProcNumber
);
#endif
В этом примере видно, что функция KeSetTargetProcessorDpcEx доступна только в Windows 7 и более поздних версиях Windows.
Это условное объявление отображается в Winspool.h, который представляет собой файл заголовка, который может быть включен драйвером пользовательского режима.
#if (NTDDI_VERSION >= NTDDI_WIN7)
...
BOOL
WINAPI
GetPrintExecutionData(
_Out_ PRINT_EXECUTION_DATA *pData
);
#endif // (NTDDI_VERSION >= NTDDI_WIN7)
В примере видно, что функция GetPrintExecutionData доступна только в Windows 7 и более поздних версиях Windows.
Файлы заголовков для платформы драйвера режима ядра
WDK поддерживает несколько версий Windows, а также несколько версий платформы драйверов режима ядра (KMDF) и пользовательского режима driver Framework (UMDF). Сведения о версиях в файлах заголовков WDK относятся к версиям Windows, но не к версиям KMDF или UMDF. Файлы заголовков для разных версий KMDF и UMDF размещаются в отдельных каталогах.