この記事では、User-Mode Driver Framework (UMDF) 2 を使用して ユニバーサル Windows ドライバー を作成する方法について説明します。 Microsoft Visual Studio テンプレートから始めて、別のコンピューターにドライバーを展開してインストールします。
[前提条件]
手順に従って Windows Driver Kit (WDK) をインストールします。 WDK をインストールすると、Windows 用のデバッグ ツールが含まれます。
Visual Studio 2022 をインストールします。 Visual Studio 2022 をインストールするときに、 C++ によるデスクトップ開発 ワークロードを選択し、[ 個々のコンポーネント ] で次の追加を選択します。
- MSVC v143 - VS 2022 C++ ARM64/ARM64EC Spectre対策済みライブラリ (最新)
- MSVC v143 - VS 2022 C++ x64/x86 Spectre 軽減ライブラリ (最新)
- 最新の v143 ビルド ツール (ARM64/ARM64EC) に対応した Spectre 軽減策付き C++ ATL
- Spectre 軽減策を使用した最新の v143 ビルド ツール用 C++ ATL (x86 および x64)
- Spectre 軽減策を使用した最新の v143 ビルド ツール用 C++ MFC (ARM64/ARM64EC)
- Spectre 軽減策を使用した最新の v143 ビルド ツール用 C++ MFC (x86 および x64)
- Windowsドライバ キット
ドライバーの作成とビルド
注
新しい KMDF ドライバーまたは UMDF ドライバーを作成するときは、32 文字以下のドライバー名を選択する必要があります。 この長さの制限は wdfglobals.h で定義されています。
Visual Studio を開きます。 [ ファイル ] メニューの [ 新しい > プロジェクト] を選択します。
[ 新しいプロジェクトの作成 ] ダイアログ ボックスで、左側のドロップダウンで [C++ ] を選択し、中央のドロップダウンで [Windows ] を選択し、右側のドロップダウンで [ ドライバー ] を選択します。
プロジェクトの種類の一覧から ユーザー モード ドライバー (UMDF V2) を選択します。 [次へ] を選択します。
ヒント
Visual Studio でドライバー プロジェクト テンプレートが見つからない場合、WDK Visual Studio 拡張機能が正しくインストールされませんでした。 この問題を解決するには、Visual Studio インストーラーを起動し、[変更] を選択し、[個々のコンポーネント] タブで Windows ドライバー キットを追加して、[変更] を選択します。
[ 新しいプロジェクトの構成 ] ダイアログ ボックスで、[ プロジェクト名 ] フィールドに「UmdfDriver」と入力します。
注
新しい KMDF ドライバーまたは UMDF ドライバーを作成するときは、32 文字以下のドライバー名を選択する必要があります。 この長さの制限は wdfglobals.h で定義されています。
[ 場所 ] フィールドに、新しいプロジェクトを作成するディレクトリを入力します。
[ ソリューションとプロジェクトを同じディレクトリに配置する ] をオンにして、[ 作成] を選択します。
Visual Studio では、1 つのプロジェクトとソリューションが作成されます。 ソリューション エクスプローラー ウィンドウで確認できます。 ([ソリューション エクスプローラー] ウィンドウが表示されない場合は、[表示] メニューから [ソリューション エクスプローラー] を選択します)。このソリューションには、UmdfDriver という名前のドライバー プロジェクトがあります。 ドライバーのソース コードを表示するには、[ ソース ファイル] の下にあるファイルのいずれかを開きます。 Driver.c と Device.c は、開始するのに適した場所です。
ソリューション エクスプローラー ウィンドウで、ソリューション 'UmdfDriver' (1/1 プロジェクト) を長押し (または右クリック) し、[Configuration Manager] を選択します。 ドライバー プロジェクトの構成とプラットフォームを選択します。 たとえば、[ デバッグ ] と [ x64] を選択します。
ソリューション エクスプローラー ウィンドウで、UmdfDriver を長押し (または右クリック) し、[プロパティ] を選択します。 [構成プロパティ] > [ドライバーの設定] > [全般] に移動し、ターゲット プラットフォームの既定値が [ユニバーサル] に設定されていることに注意してください。
ドライバーをビルドするには、[ビルド] メニューから [ソリューション の ビルド ] を選択します。 Microsoft Visual Studio の [出力] ウィンドウにビルドの進行状況が表示されます。 ([出力] ウィンドウが表示されない場合は、[表示] メニューから [出力] を選択します)。
ビルド出力に次のものが含まれていることを確認します。
> Driver is 'Universal'.ソリューションが正常にビルドされたことを確認したら、Visual Studio を閉じます。
ビルドされたドライバーを表示するには、エクスプローラーで UmdfDriver フォルダーに移動し、 x64\Debug\UmdfDriver に移動します。 ディレクトリには、次のファイルが含まれています。
- UmdfDriver.dll- ユーザー モード ドライバー ファイル
- Windows がドライバーのインストール時に使用する情報ファイル UmdfDriver.inf
ユニバーサル Windows ドライバーを展開してインストールする
通常、ドライバーをテストしてデバッグする場合、デバッガーとドライバーは別のコンピューターで実行されます。 デバッガーを実行するコンピューターは ホスト コンピューターと呼ばれ、ドライバーを実行するコンピューターは ターゲット コンピューターと呼ばれます。 ターゲット コンピューターは 、テスト コンピューターとも呼ばれます。
Important
ここまでは、Visual Studio を使用してホスト コンピューター上にドライバーをビルドしました。 次に、ターゲット コンピューターを構成する必要があります。 「ドライバーの展開とテスト用にコンピューターをプロビジョニングする (WDK 10)」の手順に従います。 次に、ドライバーの展開、インストール、読み込み、デバッグを行う準備ができました。
ホスト コンピューターで、Visual Studio でソリューションを開きます。 UmdfDriver フォルダー内のソリューション ファイル (UmdfDriver.sln) をダブルクリックできます。
ソリューション エクスプローラー ウィンドウで、UmdfDriver を長押し (または右クリック) し、[プロパティ] を選択します。
UmdfDriver プロパティ ページ ウィンドウで、次に示すように、ドライバーのインストール>展開>構成プロパティに移動します。
[デプロイ前に以前のドライバー バージョンを削除する] にチェックを入れます。
[ ターゲット デバイス名] で、テストとデバッグ用に構成したコンピューターの名前を選択します。
[ ハードウェア ID ドライバーの更新] を選択し、ドライバーのハードウェア ID を入力します。 この演習では、ハードウェア ID は Root\UmdfDriver です。 [OK] を選択.
注
この演習では、ハードウェア ID は実際のハードウェアを識別しません。 これは、ルート ノードの子として デバイス ツリー 内の場所が与えられる架空のデバイスを識別します。 実際のハードウェアの場合は、[ ハードウェア ID ドライバーの更新] を選択しないでください。代わりに、[ インストールして確認] を選択します。 ハードウェア ID は、ドライバーの情報 (INF) ファイルで確認できます。 ソリューション エクスプローラー ウィンドウで、UmdfDriver > ドライバー ファイルに移動し、UmdfDriver.inf をダブルクリックします。 ハードウェア ID は [Standard.NT$ARCH$] の下にあります。
[Standard.NT$ARCH$] %DeviceName%=MyDevice_Install,Root\UmdfDriver[ デバッグ ] メニューの [ デバッグの開始] を選択するか、キーボードの F5 キーを押します。
ドライバーが展開され、インストールされ、ターゲット コンピューターに読み込まれるまで待ちます。 これには数分かかる場合があります。
ドライバー モジュール フレームワーク (DMF) の使用
ドライバー モジュール フレームワーク (DMF) は、WDF ドライバー開発者向けの追加機能を有効にする WDF の拡張機能です。 これは、開発者があらゆる種類の WDF ドライバーをより迅速に記述するのに役立ちます。
フレームワークとしての DMF では、DMF モジュールと呼ばれる WDF オブジェクトを作成できます。 これらの DMF モジュールのコードは、異なるドライバー間で共有できます。 さらに、DMF は、ドライバー用に開発した DMF モジュールのライブラリをバンドルし、他のドライバー開発者に価値を提供すると感じています。
DMF は WDF を置き換えません。 DMF は、WDF で使用される 2 つ目のフレームワークです。 DMF を使用する開発者は、WDF とそのすべてのプリミティブを引き続き使用して、デバイス ドライバーを記述します。
詳細については、「 ドライバー モジュール フレームワーク (DMF)」を参照してください。