ユニバーサル Windows ドライバーの概要

[一部の情報はリリース前の製品に関することであり、正式版がリリースされるまでに大幅に変更される可能性があります。本書に記載された情報について、Microsoft は明示または黙示を問わずいかなる保証をするものでもありません。]

ユニバーサル Windows ドライバーは、Windows ドライバーで利用可能なインターフェイスのサブセットを使用します。このトピックでは、Windows 10 のユニバーサル Windows ドライバーをビルド、インストール、展開、およびデバッグする方法について説明します。

ユニバーサル Windows ドライバーについて

Windows 10 は、Windows の複数のエディションに共通する一連の API と DDI のインターフェイスを備えています。この一連のインターフェイスは、ユニバーサル Windows プラットフォーム (UWP) と呼ばれます。

ユニバーサル Windows ドライバーは、UWP ベースのエディションの Windows 10 にインストールして実行できる、カーネル モード ドライバーまたはユーザー モード ドライバーのバイナリです。該当するエディションとして、Windows 10 デスクトップ エディション (Home、Pro、Enterprise) や Windows 10 Mobile があります。

ユニバーサル Windows ドライバーは、UWP の一部であるデバイス ドライバー インターフェイス (DDI) のみを呼び出します。このような DDI には、MSDN のリファレンス ページで "ユニバーサル" というマークが付いています。

既存のドライバーが UWP 以外のインターフェイスを呼び出すかどうかを確認するには、ドライバーをユニバーサル Windows ドライバーとして再コンパイルします。UWP の一部ではないインターフェイスをドライバーが呼び出すと、コンパイラから ApiValidator エラーが表示されます。このような呼び出しは、MSDN のデスクトップ用 DDI のリファレンス ページに記載されている代替 DDI への置き換えが可能な場合があります。 適切な代替インターフェイスが見つからない場合は、フィードバックを送信してお知らせください。

適切な代替インターフェイスが存在しない場合は、回避策のコーディングが必要になることがあります。必要に応じて、統合された WDK のドライバー テンプレートから新しいユニバーサル Windows ドライバーを作成してください。

ユニバーサル INF ファイルを使用していない場合は、コンパイラから INF 検証エラーが表示されることもあります。

ユニバーサル Windows ドライバーでは、KMDFUMDF 2、または Windows Driver Model (WDM) を使うことができます。

ユニバーサル Windows ドライバーのビルド

Microsoft Visual Studio 2015 と Windows Driver Kit (WDK) 10 を使用すると、デスクトップ、モバイル、またはユニバーサルのドライバーをビルドできます。キットとツールは、Windows ハードウェア デベロッパー センターからダウンロードできます。

多くの場合、Windows 8.1 で動作する既存のカーネル モード ドライバーは、そのドライバーでユーザー モード コンポーネントを使用していない限り、ユニバーサル Windows ドライバーとして再コンパイルできます。 Windows 8.1 で動作する WDM ドライバーと KMDF ドライバーは、Windows 10 をターゲットとするユニバーサル Windows ドライバーとして再コンパイルでき、変換の必要はありません。

これに対し、既存のユーザー モード ドライバーをユニバーサル Windows ドライバーとしてコンパイルするには、変更が必要になることがあります。つまり、ドライバー パッケージには UWP の外部の依存関係が存在しないようにする必要があります。たとえば、Win32 API は、一部のみが UWP の内部に存在します。

Dn941241.wedge(ja-jp,VS.85).gif既存のドライバー プロジェクトのユニバーサル Windows ドライバー プロジェクトへの変換

  1. Visual Studio 2015 で、既存のドライバー プロジェクトを開きます。
  2. [ソリューション エクスプローラー] ウィンドウで、ソリューションを右クリックし、[構成マネージャー] をクリックします。 ターゲット オペレーティング システムを Windows 10 に設定します。
  3. ドライバー プロジェクトを右クリックし、[プロパティ] をクリックします。 [構成プロパティ] の [ドライバー] で、[ターゲット プラットフォーム][ユニバーサル] に設定されていることを確認します。 その他のオプションとして、デスクトップ エディションの Windows 10 でのみ動作するドライバーをビルドする [デスクトップ] や、Windows 10 Mobile でのみ動作するドライバーをビルドする [モバイル] があります。
  4. ドライバーをビルドします。リンカーのエラーが発生する場合があります。
  5. エラー ログを調べてエラーを 1 つずつ修正します。可能な代替 API については、マニュアルの個別のリファレンス ページを参照してください。代替 API を使用できない場合は、ドライバーの設計を変更することが必要になる場合があります。

Dn941241.wedge(ja-jp,VS.85).gifMicrosoft Visual Studio での新しいユニバーサル Windows ドライバー プロジェクトの作成

  1. テンプレート ([ファイル]、[新しいプロジェクト]、[テンプレート]、[Visual C++]、[Windows Driver] (Windows ドライバー)、[WDF] の順にクリック) から新しいドライバーを作成し、[User Mode Driver (UMDF V2)] (ユーザー モード ドライバー (UMDF V2)) または [Kernel Mode Driver (KMDF)] (カーネル モード ドライバー (KMDF)) を選択します。

  2. [ソリューション エクスプローラー] ウィンドウでプロジェクトを作成したら、ソリューションを右クリックして [構成マネージャー] をクリックします。 [アクティブ ソリューション構成] を目的のターゲット Windows バージョンに設定し、[アクティブ ソリューション プラットフォーム][Win32] または [x64] に設定します。 一覧に [ARM] が表示されない場合に ARM 用にビルドするには、[<新規作成>] を選択します。

    Windows 10 を選ぶと、ドライバー モデルの既定値は [ユニバーサル] になります。

    手動でドライバー モデルを変更するには、ドライバー プロジェクトを右クリックし、[プロパティ] をクリックします。 [構成プロパティ]、[ドライバーの設定]、[全般] の順にクリックし、[ターゲット プラットフォーム] のエントリを検索します。[ユニバーサル][デスクトップ]、または [モバイル] をクリックします。Visual Studio はこの設定を使用して、リンクするライブラリを決定します。

      Windows 10 より前のバージョンの Windows 用のユニバーサル Windows ドライバーをビルドすることはできません。

     

  3. 必要に応じて .inf ファイルを変更して、INF ファイルの Strings セクションにプロバイダーを指定します。%ManufacturerName% トークンとして指定されたプロバイダーは、後でこのセクションの定義に従って展開されます。 次に例を示します。

    Provider="Contoso"
    
  4. これで、ソリューションをビルドできるようになりました。 Visual Studio は、必要なライブラリに対してリンクし、.cat ファイル、.inf ファイル、およびドライバーのバイナリを生成します。

ドライバーのビルド時に Visual Studio で使用できる構成設定については、「WDK を使ったドライバーのビルド」をご覧ください。

ユニバーサル Windows ドライバーのインストール

  SetupAPI コンポーネントは UWP に含まれていないため、この API セットの関数をユニバーサル Windows ドライバーで呼び出すことはできません。

 

デスクトップ エディションの Windows 10 を実行しているデバイスにユニバーサル Windows ドライバーをインストールする場合は、引き続き INF ファイルを使用できますが、いくつかの注意事項があります。 ユニバーサル Windows ドライバーの INF ファイルには、次のいずれも含めることはできません。

  • Coinstallers
  • クラス インストーラー
  • RegisterDLL、DelFile、または DelReg ディレクティブ
  • HKR 以外の AddReg ディレクティブ

詳しくは、「ユニバーサル INF ファイルの使用」をご覧ください。

Windows 10 Mobile にユニバーサル Windows ドライバーをインストールする場合は、.spkg ファイルを使用できます。.spkg ("パッケージ ファイル") は、ドライバー パッケージを含むスタンドアロン モジュールです。 Windows 10 Mobile に展開しない場合は、パッケージ ファイルを生成する必要はありません。 ユニバーサル Windows ドライバーは、パッケージ ファイルがなくても、(ドライバーのソース コードの定義に従って) コンパイルできます。

WDK 10 には、パッケージ ファイルを生成する PkgGen というツールが付属しています。ドライバーをビルドする場合は、次の手順に従って Visual Studio で PkgGen を実行します。

Dn941241.wedge(ja-jp,VS.85).gifPkgGen を使用したパッケージ ファイルの生成

  1. ドライバー プロジェクトを右クリックし、[追加]、[新しい項目] の順にクリックします。 次に、[Visual C++]、[Windows Driver] (Windows ドライバー) の順にクリックし、[パッケージ マニフェスト] をクリックします。[追加] をクリックします。
  2. ドライバー プロジェクトに Package.pkg.xml という名前のファイルが追加されます。 ファイルを右クリックしてプロパティを選択すると、項目の種類が PkgGen であることを確認できます (このプロパティ ページで [ビルドから除外][はい] に設定すると、後でこのドライバー プロジェクトをビルドするときにパッケージ ファイルを生成しないようにすることができます)。 [OK] をクリックします。
  3. ドライバー プロジェクトを右クリックし、[プロパティ] をクリックします。[構成プロパティ] で、PackageGen ノードを開き、[バージョン] を任意のバージョンに変更します。
  4. 作業内容を保存し、管理者として Visual Studio を再起動します。
  5. ドライバーをビルドします。 必要なライブラリがリンクされ、.cat ファイル、.inf ファイル、ドライバーのバイナリ、および .spkg ファイルが生成されます。

パッケージ ファイルの内容を確認するには、ファイル名に .cab というサフィックスを追加して、その cab ファイルをエクスプローラーで開きます。

Visual Studio の外部での PkgGen の実行については、パッケージの作成に関するページをご覧ください。

モバイル ドライバー パッケージ (.spkg ファイル) をインストールするには、2 つのオプションがあります。

  • ターゲット システムの既存のパッケージを更新する場合、または新しいパッケージをターゲットに追加する場合は、IUTool.exe を使用して、.spkg ドライバー パッケージをインストールします。
  • モバイル OS イメージにパッケージを組み合わせる場合は、ImgGen を使用して、Full Flash Update (FFU) イメージに .spkg ドライバー パッケージを追加し、モバイル デバイスにフラッシュできるようにします。

Dn941241.wedge(ja-jp,VS.85).gifIUTool を使用した、モバイル ドライバー パッケージ (.spkg) の実行中のデバイスへの追加

  1. IUTool.exe は、WDK 10 の \tools\bin\<architecture> サブディレクトリにあります。

    モバイル デバイスを PC に接続します。 その後、管理者特権のコマンド プロンプトで次のコマンドを実行します。

    IUTool -p MyKmdfDriver.spkg
    
  2. 詳しくは、電話上のパッケージを更新する IUTool.exe に関するページと「テスト イメージへのドライバーの追加」をご覧ください。

Dn941241.wedge(ja-jp,VS.85).gifImgGen を使用した、ドライバー パッケージ (.spkg) のモバイル OS イメージ (.ffu) への追加

  1. Visual Studio をインストールしたら、スタート画面で [Visual Studio 2015] フォルダーをクリックします。[開発者コマンド プロンプト for VS2015] を右クリックし、[管理者として実行] をクリックします。
  2. ImgGen について詳しくは、ImgGen.cmd を使用した phone イメージのビルドに関するページをご覧ください。

モバイル OS イメージ (.ffu) のフラッシュ

デバイスにイメージをフラッシュするには、Microsoft から提供された FFUTool を使うか、カスタム OEM フラッシュ ツールを開発します。 詳しくは、.FFU イメージ ファイルのパッケージの更新に関するページをご覧ください。

ユニバーサル Windows ドライバーのデバッグ

Windows 10 以降では、KMDF ドライバーまたは UMDF ドライバーをビルドするときに、インフライト トレース レコーダーを通じて追加のドライバー デバッグ情報を取得するように設定できます。この機能をユニバーサル Windows ドライバーで利用できます。

さらに、Visual Studio の KMDF テンプレートを使用すると、ドライバーは Windows ソフトウェア トレース プリプロセッサ (WPP) を使ってトレース メッセージを書き込みます。ドライバーは、プロバイダー GUID を持つ ETW プロバイダーです。

ドライバーからトレース メッセージを送信するには、次のコードを使用します。

TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_DRIVER, "%!FUNC! Entry");

ETW ログにアクセスするには、TShell ツールで Tracelog を使うか、デバッガー セッションで ! wmitrace を使います。

電話で Tracelog を使うには

  1. ホスト コンピューターと電話間のカーネル モード デバッグ セッションを確立します。

  2. ホスト コンピューター上の TShell で、次のコマンドを入力します。

    exec-device tracelog -addautologger MyLogger05 -guid c:\SteveGuid.txt -level 4 -flag 0xF –kd
    
  3. 電話を再起動し、デバッガーでトレース メッセージを監視します。

既存のすべてのカーネル モード デバッグ トランスポートは、デスクトップ エディションの Windows 10 であれば引き続き動作します。ただし、Windows 10 Mobile をテストするには、ユーザー モード ドライバーとカーネル モード ドライバーのどちらでも、KDNET 経由でリモート デバッガー セッションを使う必要があります。詳しくは、Visual Studio のネットワーク ケーブル経由でのカーネル モード デバッグの手動設定に関するページをご覧ください。

関連トピック

WDK を使ったドライバーのビルド

ユニバーサル Windows ドライバーが動作する Windows 10 のエディション

テンプレートを使ったユニバーサル Windows ドライバー (UMDF 2) の作成

ユニバーサル Hello World ドライバー (KMDF) の作成

テンプレートを使ったユニバーサル Windows ドライバー (KMDF) の作成

ドライバーの展開およびテストのためのコンピューターのプロビジョニング (WDK 10)

ドライバーの開発に関する最新情報