次の方法で共有


異なるバージョンの Windows に対するドライバーのビルド

さまざまなバージョンの 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 でプロジェクト ファイルを開き、ドライバーをビルドできます。