異なるバージョンの Windows に対するドライバーのビルド
以下のセクションでは、異なるバージョンの Windows 用にドライバーを作成している方のために、Windows Driver Kit (WDK)、Visual Studio、MSBuild を使ってドライバーをビルドするためのガイドラインをいくつか紹介しています。
ユーザー モード ドライバーとカーネル モード ドライバーをビルドする際の共通のガイドライン
- WDK が提供するターゲット構成とプラットフォームを使用してドライバーをビルドします。 対象とする Windows のバージョンをサポートする最新バージョンの WDK を常に使用してください。 WDK とオペレーティング システムのバージョン サポートについては、「プレビュー バージョンの Windows Driver Kit (WDK) のインストール」と「Windows Driver Kit のダウンロード」をご覧ください。
- ドライバーが 1 つのバージョンの Windows でのみ実行する必要がある場合は、ターゲットの Windows バージョンに一致するターゲット構成およびプラットフォーム用のドライバーをビルドします。
- ドライバーを複数のバージョンの Windows で実行したいが、新しいバージョンでのみ利用できる機能は備えていない場合は、ドライバーでサポートしたい最も古いバージョン用のドライバーをビルドします。
Windows 7、Windows 8、または Windows 8.1 がターゲットの場合は、構成マネージャーを使用して、または、.vcxproj ファイルに手動で TargetVersion を設定します (例: <TargetVersion>Windows7</TargetVersion>
)。
Windows 10 または Windows 11 がターゲットの場合は、TargetVersion と _NT_TARGET_VERSION の両方を設定します (例: <TargetVersion>Windows10</TargetVersion> <_NT_TARGET_VERSION>0xA000006</_NT_TARGET_VERSION>
)。
_NT_TARGET_VERSION 値は、形式 NTDDI_WIN10_*
で Sdkddkver.h ヘッダー ファイルに一覧表示されます (例: #define NTDDI_WIN10_RS5 0x0A000006
)。
カーネル モード ドライバーをビルドする際のガイドライン
カーネル モード ドライバーを複数のバージョンの Windows で実行し、ドライバーで利用できる機能を動的に決定する場合は、オペレーティング システムの最新バージョンのビルド構成を使用してドライバーをビルドします。 たとえば、ドライバーが Windows 8.1 以降のすべての Windows バージョンに対応するようにしたい一方で、ドライバーが 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 を使用する 2 つの方法があります。
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 でプロジェクト ファイルを開いてドライバーをビルドできます。