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

以下のセクションでは、異なるバージョンの Windows に対するドライバーの作成をしている方のために、Windows Driver Kit (WDK) 8.1 か WDK 8、Visual Studio、MSBuild を使ってドライバーをビルドするためのガイドラインをいくつか紹介しています。

ユーザー モード ドライバーとカーネル モード ドライバーをビルドする際の共通のガイドライン

  • WDK に備わっているターゲット構成とプラットフォームを使ってドライバーをビルドします。必ず、対象の Windows バージョンをサポートする最新バージョンの WDK を使ってください。たとえば、ドライバーを Windows XP 用にビルドするには、Windows 7 WDK を使う必要があります。 一方、Windows 8.1、Windows 8、Windows 7 のいずれかを対象にドライバーをビルドする場合は、WDK 8.1 と Visual Studio を使います。
  • ドライバーの実行環境となる Windows のバージョンが 1 つしかない場合は、対象となる Windows バージョンのターゲット構成とプラットフォーム用にドライバーをビルドします。たとえば、WDK 8.1 でのみ実行されるドライバーをビルドする場合は、構成マネージャーで Win8.1 を指定します。
  • 複数の Windows バージョンで実行する必要はあるものの、機能的には最も古いバージョンでよいという場合は、ドライバーでサポートする最古のバージョン用にドライバーをビルドします。たとえば、Windows Vista 以降のすべての Windows バージョンでドライバーを動作させる場合で、なおかつ Windows Vista に装備されている機能のみを使う場合は、プロジェクトの構成で Vista を指定します。

カーネル モード ドライバーをビルドする際のガイドライン

  • カーネル モード ドライバーを複数の Windows バージョンに対応させ、ドライバーから利用できる機能を動的に判断させる場合、最新バージョンのオペレーティング システム用のビルド構成を使ってドライバーをビルドします。たとえば、Windows 7 以降のすべての Windows バージョンをサポートする一方で、ドライバーが Windows 8.1 以降のバージョンで実行されている場合には Windows 8.1 で新たに導入された特定の機能を利用できるようにするには、ターゲット構成として Windows 8.1 (Win8.1) を指定します。

  • ドライバーから利用できる Windows のバージョンを実行時に調べるには、RtlIsNtDdiVersionAvailable 関数と RtlIsServicePackVersionInstalled 関数を使います。詳しくは、「異なるバージョンの 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> を探して、次の行を追加し、既定のリンカー オプションを上書きします。

    
       <KernelBufferOverflowLib>$(DDK_LIB_PATH)\BufferOverflowK.lib</KernelBufferOverflowLib>
    

    たとえば、ドライバーが Windows 8.1 と Windows 8 のデバッグ用ビルドとリリース用ビルドをサポートしている場合、構成セクションは次のようになります。

      <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 でプロジェクト ファイルを開き、ドライバーをビルドすることができます。

関連トピック

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

ドライバーのビルド