プラットフォーム ツールセット

Windows Driver Kit (WDK) は、MSBuild プラットフォーム ツールセットの機能を生かして、ドライバー開発固有のツールとライブラリを提供します。 MSBuild プラットフォーム ツールセットの機能は拡張することができます。 使用する必要がある特定バージョンのプラットフォーム ツールセットは、PlatformToolset という MSBuild プロパティで制御されます。 プロジェクトは、プロジェクト ファイルで PlatformToolset プロパティを設定することで、ツールとライブラリを切り替えることができます。

Windows Driver Kit (WDK) 8.1 には、ドライバー開発用の次のプラットフォーム ツールセットが用意されています。

PlatformToolset (WDK 8.1) 用途
WindowsKernelModeDriver8.1 カーネル モードのドライバーとコンポーネント用。
WindowsUserModeDriver8.1 ユーザー モードのドライバーとコンポーネント用。
WindowsApplicationForDrivers8.1 各種アプリケーション用。 このプラットフォーム ツールセットは、Windows Driver Kit (WDK) for Windows 7 (WDK 7.1) で使用されるビルド オプションとの互換性を提供し、また、ドライバーと対話するユーザー モード アプリケーションの開発で一般的とされている既定の設定を使用します。 WDK 7 を使用してビルドされたプロジェクトを移行または変換する場合は、この設定を使用できます。
Visual Studio 2013 (v120) 各種の Windows アプリケーションで使用します (既定)。

Windows Driver Kit (WDK) 8 には、ドライバー開発用の次のプラットフォーム ツールセットが用意されていました。 この情報は参照用にのみ提供されています。

PlatformToolset (WDK 8) 用途
WindowsKernelModeDriver8.0 カーネル モードのドライバーとコンポーネント用。
WindowsUserModeDriver8.0 ユーザー モードのドライバーとコンポーネント用。
WindowsApplicationForDrivers8.0 各種アプリケーション用。 このプラットフォーム ツールセットは、WDK for Windows 7 (WDK 7.1) で使用されるビルド オプションとの互換性を提供します。 WDK 7 を使用してビルドされたプロジェクトを移行または変換する場合は、この設定を使用できます。
Visual Studio 2012 (v110) 各種の Windows アプリケーションで使用します (既定)。

Visual Studio で入手可能な Windows ドライバー テンプレートの 1 つからドライバーを作成すると、PlatformToolset プロパティが設定されます。 Visual Studio のドライバー プロジェクトのプロパティ ページを使用して、PlatformToolset を選択することもできます。 Visual Studio でのプラットフォーム ツールセットの設定

  1. ドライバー プロジェクトのプロパティ ページを開きます。 ソリューション エクスプローラーでドライバー プロジェクトを長押し (または右クリック) し、[プロパティ] を選びます。
  2. ドライバー プロジェクトのプロパティ ページで、Configuration PropertiesGeneral の順に選択します。
  3. ドロップダウン リストからプロジェクトの Platform Toolset プロパティを選択します。

例 - Visual Studio プロジェクト ファイル (.vcxproj) での PlatformToolset プロパティの設定

次の例で、プロジェクト ファイルでの PlatformToolset プロパティの設定方法を示します。

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"
      Label="Configuration">
  <ConfigurationType>Driver</ConfigurationType>
  <DriverType>KMDF</DriverType>
  <PlatformToolset>WindowsKernelModeDriver8.1</PlatformToolset>
</PropertyGroup>

ConfigurationType プロパティは、ビルドされるバイナリのターゲット拡張機能と出力の種類を制御します。 このプロパティに使用できる値の中には、ApplicationDynamicLibraryStaticLibraryUtility があります。

WDK には、カーネルモードのドライバーをビルドするために、Driver というこのプロパティ用の新しい値が導入されています。 このプロパティを Driver に設定すると、MSBuild で、拡張子 .sys が付くドライバー ファイルが生成されます。 この例では、PlatformToolset プロパティを WindowsKernelModeDriver8.1 に設定して、カーネルモードのドライバーをビルドします。 WindowsKernelModeDriver8.1 は、DriverConfigurationType を必要とする唯一の WDK プラットフォーム ツールセットです。 この例では、DriverType が KMDF に設定されています。

ドライバーの PlatformToolset プロパティについて

PlatformToolset は、プロパティ シート、ターゲット、ツール、タスクのセットであり、特定のプラットフォームのドライバーまたはカーネルモードのコンポーネントをビルドするために、連携してプラットフォームの拡張や変更を行います。 ドライバーと、関連するコンポーネントやアプリケーションの場合、プロジェクト ファイルで PlatformToolset プロパティを WindowsKernelModeDriver8.1WindowsUserModeDriver8.1WindowsApplicationForDrivers8.1 のいずれかに設定する必要があります。 これらのプラットフォーム ツールセットは、既存の Visual Studio C\C++ ツール チェーン コンパイラとリンカーを他の WDK 固有のビルド ツールで拡張し、WDK ヘッダーとライブラリをターゲットにするように設計されています。 WindowsApplicationForDrivers8.1 ツールセットは、WDK for Windows 7 (WDK 7.1) で使用可能だったビルド オプション設定との互換性を提供し、ドライバーと対話するユーザー モードのアプリケーションの開発に一般的とされている既定の設定も提供します。

プラットフォーム ツールセットには既定のプラットフォーム レベルの設定があり、ドライバー プロジェクトをビルドすることを目標としています。 コンパイラやリンカーなどのビルド ツール、WDK の INCLUDE パスや LIBRARY パスなどのシステム情報、Unicode または ANSI 文字列を使用してドライバー プロジェクトを構築するときに設定するさまざまなプロパティなどの機能設定には、既定のスイッチを使用します。 デスクトップ用の Windows アプリケーションを開発する場合は、WindowsKernelModeDriver8.1WindowsUserModeDriver8.1、または WindowsApplicationForDrivers8.1 プラットフォーム ツールセットを使用しないでください。 代わりに、Visual Studio 2013 (v120) プラットフォーム ツールセットを使用してください。

既定では、新しく作成された Win32 ユーザー モード C++ プロジェクトと Visual Studio 2013 に変換されたプロジェクトの両方で、PlatformToolset プロパティは Visual Studio 2013 (v120) です。 どちらの場合も、PlatformToolset プロパティはプロジェクト ファイルに書き込まれません。

ドライバーのプラットフォーム ツールセットのいずれかを選択すると、次のプロパティが設定されます。

  • ExecutablePath と NativeExecutablePath (PATH)
  • IncludePath (INCLUDE)
  • ReferencePath (LIBPATH)
  • LibraryPath (LIB)
  • SourcePath
  • ExcludedPath

UseEnvTRUE に設定されていない場合、PATH、LIB、INCLUDE、LIBPATH は、プラットフォーム ツールセットの対応するプロパティの値から設定されます。 UseEnvTRUE に設定されている場合は、古いビルド システムと同様に、PATH、INCLUDE、LIB、LIBPATH の環境変数の値が代わりに使用されます。

ドライバー固有のプラットフォーム ツールセットを有効にするファイルを WDK がインストールする場所

次の表は、ドライバー開発用のプラットフォーム ツールセットを有効にするために、WDK がファイルをインストールする場所をまとめたものです。

パス変数 説明

$(VCTargetsPath)

既定では、$(VCTargetsPath) はレジストリで $(MSBuildExtensionsPath)<em><FOLDER><MSBUILDSYNTAXVERSION>) として定義されます

新しいビルド プロセスが同じプラットフォームで使用される場合に備えて、バージョン番号が含まれます。これには新しい構文があり、新しい MSBuild が必要です。

<FOLDER>Microsoft.Cpp フォルダーで $(MSBuildExtensionsPath)\Microsoft.Cpp\4.0\v120 になります。

これは、ツール バージョンではなく構文バージョンと呼ばれています。 必要な構文をすべてサポートする最初の Microsoft.Build.Engine のアセンブリ バージョンです。 Microsoft.Cpp は、Visual Studio がプラットフォームを検索する唯一のフォルダーを示します。

$(VCTargetsPath)\Platforms$(Platform)\ImportAfter.props

通常はファイルを含まないオプションのフォルダー。 このフォルダーに MSBuild 形式ファイルを保存することで、プラットフォームをカスタマイズできます。 これらのファイルは、現時点で挿入されているフォルダーが示すように、プラットフォーム設定ファイルの下部にインポートされます。 この場所からファイルをインポートする順序は定義されていません。 MSBuild が作成するファイルは $(VCTargetsPath)\Platforms$(Platform)\ImportAfter\Microsoft.Cpp.<Platform>.WindowsKernelModeDriver8.1.props と Microsoft.Cpp.<Platform>.WindowsUserModeDriver8.1.props で、WDK 固有の props ファイルをいくつかインポートします。

$(VCTargetsPath)\Platforms$(Platform)\PlatformToolsets$(PlatformToolset)</p>

WDK の場合:

$(PlatformToolset) は、カーネル モード ドライバーのビルドでは WindowsKernelModeDriver8.1 に設定し、ユーザー モード ドライバーのビルドでは WindowsUserModeDriver8.1 に設定し、Windows 7 WDK (WDK 7) で使用するビルド オプションとの互換性を得るには、WindowsApplicationForDrivers8.1 に設定する必要があります。

PlatformToolset ディレクトリ

C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\v120\Platforms\Win32\PlatformToolsets\WindowsKernelModeDriver8.1 など。

PlatformToolsets ディレクトリを使用すると、後で他の種類のファイルを独自のサブフォルダーに追加できます。

Microsoft.Cpp.$(Platform).$(PlatformToolset).props

プラットフォーム ツールセット Props ファイル

ドライバーをビルドするために props ファイルをインポートします。 v120 props ファイルもインポートします。

Microsoft.Cpp.$(Platform).$(PlatformToolset).targets

プラットフォーム ツールセット Targets ファイル

ドライバーをビルドするために target ファイルをインポートします。 これらのファイルには、WDK タスクをプルするための <UsingTask> タグが含まれています。 この機能では、v120 targets もインポートされます。

$(WDKContentRoot)\build.props

すべてのドライバー固有の props ファイル。 これらのファイルには、ドライバーをビルドするための既定の設定が含まれています。

$(WDKContentRoot)\build*.targets

すべてのドライバー固有の targets ファイル。 このファイルは、ドライバーをビルドする targets を識別します。