Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если вы пишете драйверы для разных версий Windows, в следующем разделе приведены некоторые рекомендации по созданию этих драйверов с помощью комплекта драйверов Windows (WDK), Visual Studio и MSBuild.
Рекомендации, применимые к созданию драйверов в пользовательском режиме и в режиме ядра
- Создайте драйверы с помощью целевых конфигураций и платформ, которые предоставляет WDK. Всегда используйте последнюю версию WDK, которая поддерживает целевую версию Windows. Дополнительные сведения о поддержке версий WDK и операционной системы см. в разделе "Установка предварительных версий пакета драйверов Windows " и скачивание комплекта драйверов Windows.
- Если драйвер должен работать только в одной версии Windows, создайте драйвер для целевой конфигурации и платформы, которая соответствует целевой версии Windows.
- Если вы хотите, чтобы драйвер выполнялся в нескольких версиях Windows, но без функций, доступных только в более новых версиях, создайте драйвер для старой версии, которую требуется поддерживать драйвер.
Если вы нацелены на Windows 7, Windows 8 или Windows 8.1, задайте TargetVersion с помощью Configuration Manager или вручную в файле .vcxproj, например <TargetVersion>Windows7</TargetVersion>
.
Если вы настраиваете Windows 10 или Windows 11, установите как TargetVersion, так и _NT_TARGET_VERSION, например <TargetVersion>Windows10</TargetVersion> <_NT_TARGET_VERSION>0xA000006</_NT_TARGET_VERSION>
.
_NT_TARGET_VERSION значения перечислены в файле заголовка Sdkddkver.h в форме NTDDI_WIN10_*
, например #define NTDDI_WIN10_RS5 0x0A000006
.
Рекомендации, применимые к созданию драйверов в режиме ядра
Если вы хотите, чтобы драйвер в режиме ядра выполнялся в нескольких версиях Windows и динамически определяет функции, доступные драйверу, создайте драйвер с помощью конфигурации сборки для последней версии операционной системы. Например, если вы хотите, чтобы драйвер поддерживал все версии Windows, начиная с Windows 8.1, но использовать некоторые функции, которые были впервые доступны в Windows 10 при запуске драйвера в Windows 10 или более поздних версиях операционной системы, укажите Windows 10 (Win10) в качестве целевой конфигурации.
Используйте функции RtlIsNtDdiVersionAvailable и RtlIsServicePackVersionInstalled , чтобы определить версию Windows, доступную драйверу во время выполнения. Дополнительные сведения см. в статье "Написание драйверов" для различных версий Windows.
Создайте прототипы для указателей на функции, которые драйвер должен вызывать условно.
Если у вас есть драйвер WDM или драйвер режима ядра, отличный от KMDF, и вы ориентированы на Windows 8.1 или Windows 8, но также хотите запустить на более ранних версиях Windows, необходимо переопределить параметр компоновщика $(KernelBufferOverflowLib). При выборе конфигураций Windows 8 или Windows 8.1 драйвер связан с BufferOverflowFastFailK.lib, который недоступен в более ранних версиях Windows. Для Windows 7 и Vista вместо этого необходимо связаться с BufferOverflowK.lib.
Существует два способа изменить параметр компоновки $(KernelBufferOverflowLib): с помощью MSBuild или Visual Studio.
Использование MSBuild:
msbuild /p:KernelBufferOverflowLib="C:\Program Files (x86)\Windows Kits\8.1\Lib\win8\km\x64\BufferOverflowK.lib" /p:platform=x64 /p:Configuration="Win8 Release" myDriver.sln
Использование Visual Studio:
Откройте файл проекта драйвера с помощью Блокнота или другого текстового редактора (*.vcxproj). В файле проекта найдите <PropertyGroup> для конфигураций, поддерживаемых драйвером, и добавьте следующую строку, чтобы переопределить параметр компоновщика по умолчанию:
XML <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
Например, если драйвер поддерживает отладочные и выпускные сборки Windows 8.1 и Windows 8, эти разделы конфигурации будут выглядеть следующим образом:
XML <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Debug|Win32'" Label="Configuration"> <TargetVersion>WindowsV6.3</TargetVersion> <UseDebugLibraries>true</UseDebugLibraries> <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib> <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> <ConfigurationType>Driver</ConfigurationType> <DriverType>KMDF</DriverType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8.1 Release|Win32'" Label="Configuration"> <TargetVersion>WindowsV6.3</TargetVersion> <UseDebugLibraries>false</UseDebugLibraries> <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib> <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> <ConfigurationType>Driver</ConfigurationType> <DriverType>KMDF</DriverType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Debug|Win32'" Label="Configuration"> <TargetVersion>Windows8</TargetVersion> <UseDebugLibraries>true</UseDebugLibraries> <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib> <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> <ConfigurationType>Driver</ConfigurationType> <DriverType>KMDF</DriverType> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Win8 Release|Win32'" Label="Configuration"> <TargetVersion>Windows8</TargetVersion> <UseDebugLibraries>false</UseDebugLibraries> <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib> <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset> <ConfigurationType>Driver</ConfigurationType> <DriverType>KMDF</DriverType> </PropertyGroup>
Элементы <KernelBufferOverflowLib> должны отображаться в файле проекта драйвера перед элементом, который импортирует Microsoft.Cpp.props, который импортирует набор инструментов.
После изменения и сохранения файла проекта драйвера можно открыть файл проекта в Visual Studio и создать драйвер.