さまざまなバージョンの Windows 用のドライバーを作成する場合は、次のセクションで、Windows Driver Kit (WDK)、Visual Studio、MSBuild を使用してこれらのドライバーをビルドする方法に関するいくつかのガイドラインを示します。
ユーザー モード ドライバーとカーネル モード ドライバーの両方のビルドに適用されるガイドライン
- WDK が提供するターゲット構成とプラットフォームを使用してドライバーをビルドします。 ターゲットにする Windows のバージョンをサポートする WDK の最新バージョンを常に使用します。 WDK とオペレーティング システムのバージョンのサポートについては、Windows ドライバー キットのプレビュー バージョンのインストールと Windows ドライバー キットのダウンロードを参照してください。
- ドライバーを 1 つのバージョンの Windows でのみ実行する必要がある場合は、ターゲットの Windows バージョンに一致するターゲット構成とプラットフォームのドライバーをビルドします。
- ドライバーを複数のバージョンの Windows で実行し、新しいバージョンでのみ使用できる機能がない場合は、ドライバーでサポートする最も古いバージョンのドライバーをビルドします。
Windows 7、Windows 8、または Windows 8.1 を対象としている場合は、Configuration Manager を使用して TargetVersion を設定するか、 <TargetVersion>Windows7</TargetVersion>
などの.vcxproj ファイルで手動で設定します。
Windows 10 または Windows 11 を対象としている場合は、<TargetVersion>Windows10</TargetVersion> <_NT_TARGET_VERSION>0xA000006</_NT_TARGET_VERSION>
など、TargetVersion と _NT_TARGET_VERSION の両方を設定します。
_NT_TARGET_VERSION値は、#define NTDDI_WIN10_RS5 0x0A000006
などのフォーム NTDDI_WIN10_*
の Sdkddkver.h ヘッダー ファイルに一覧表示されます。
カーネル モード ドライバーのビルドに適用されるガイドライン
カーネル モード ドライバーを複数のバージョンの 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 とリンクする必要があります。
MSBuild または Visual Studio を使用して 、$(KernelBufferOverflowLib) リンカー オプションをオーバーライドする方法は 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 でプロジェクト ファイルを開き、ドライバーをビルドできます。