次の方法で共有


ユーザー モード ドライバー フレームワークについてよく寄せられる質問

Windows Driver Framework (WDF) は、Windows オペレーティング システムで実行されるデバイス ドライバーの作成に使用できる一連のライブラリです。 WDF は、2 つのフレームワークでサポートされている単一のドライバーモデルを定義します。カーネル モード ドライバー フレームワーク (KMDF) とユーザー モード ドライバー フレームワーク (UMDF) です。 このトピックでは、UMDF に関してよく寄せられる質問に対する回答を示します。

UMDF ドライバーを実行できるオペレーティング システム

UMDF ドライバーは、次のオペレーティング システムで実行できます。

  • Windows 11
  • Windows 10
  • Windows 8.1
  • Windows 8
  • Windows 7
  • Windows Vista
  • Windows XP

UMDF の最新バージョンは何ですか?

UMDF バージョン 2.33 は、Windows 11 バージョン 21H2 以降に含まれています。

UMDF バージョン 2 と以前のバージョン 1.11 (1 ドット 11) の違いは何ですか?

UMDF バージョン 2 で記述されたドライバーは、C プログラミング言語で記述されています。 同じドライバーを KMDF 用に簡単にコンパイルできます。 さらに、UMDF バージョン 1 ドライバーは、COM プログラミング モデルに従って記述する必要があります。

詳しくは、「UMDF の概要」をご覧ください。

UMDF 2 をサポートしているオペレーティング システムはどれですか?

UMDF バージョン 2 ドライバーは、Windows 8.1 以降で実行されます。

Windows Driver Kit (WDK) 10 でビルドできる UMDF バージョンはどれですか?

Windows Driver Kit (WDK) 10 と Microsoft Visual Studio を使用して、UMDF 2.1、2.0、1.11、および 1.9 ドライバーをビルドできます。 これらの UMDF バージョンを使用してビルドされたドライバーを実行できる Windows のバージョンについては、「UMDF バージョン履歴」を参照してください。

ドライバーの一部をユーザー モードで、一部をカーネル モードで実行することはできますか?

はい。 ドライバーがカーネル モードのリソースや機能にアクセスする必要がある場合でも、ドライバーを 2 つの部分に分割できる場合があります。 この方法により、ユーザー モードでドライバーを開発して実行するいくつかの利点を活用することができます。

UMDF ドライバーは、カーネル モード ドライバーから I/O 要求を受信できます。 カーネル モード クライアントの詳細については、「UMDF 2 ドライバーでのカーネル モード クライアントのサポート」を参照してください。

ただし、KMDF と UMDF の間のパリティが向上した結果、ドライバーを分割する必要はほとんどありません。

どのフレームワークから始める必要がありますか?

UMDF 2 と KMDF の機能比較に関するページに記載されている、あまり一般的でない機能がドライバーに必要な場合には、KMDF を使用する必要があります。 それ以外のドライバーの場合には、UMDF を最初の選択とする必要があります。

UMDF から開始し、後に KMDF への移行を決定する場合には、「KMDF ドライバーを UMDF 2 ドライバーに変換する方法 (およびその逆)」で説明されているように、最小限の作業で行うことができます。

ユーザー モード ドライバーでセキュリティを処理する方法

UMDF ドライバーは、LocalService アカウントのセキュリティ資格情報で実行されるドライバー ホスト プロセスで実行されますが、ホスト プロセス自体は Windows サービスではありません。 したがって、ユーザー モード ドライバーは、他のユーザー モード サービスと同様に安全です。 UMDF ドライバーは、I/O 要求を発行するときに、必要に応じて、そのクライアント プロセスを偽装することができます。 偽装を使用すると、ドライバー スレッドをクライアントのセキュリティ コンテキストで実行できるため、システムはドライバー ホスト プロセスではなく、クライアントの ID に対してチェック アクセスを実行できます。

ユーザー モード ドライバーは、I/O 要求に対してのみクライアント プロセスを偽装でき、プラグ アンド プレイやその他のシステム メッセージには行えません。

ドライバーのインストール時に、INF ファイルはドライバーの最大の偽装レベルを設定します。 偽装は、"特権昇格" 攻撃を防ぐために、可能な限り低いレベルで設定する必要があります。 クライアント アプリケーションは、CreateFile 関数を呼び出すときに、偽装レベルを指定します。 その後、ドライバーは、個々の I/O 要求ごとにこの偽装レベルを要求します。

ユーザー モード ドライバーの速度は十分ですか?

UMDF 開発において、パフォーマンスは高い優先事項です。 待機時間と CPU 使用率はどちらも多少増加しますが、バス容量は UMDF がサポートするデバイスの種類の主な制限要因です。

ユーザー モード ドライバーとアプリケーションの違いは何ですか?

ユーザー モード ドライバーは、ドライバー マネージャーによって起動され、ドライバー ホスト プロセスで実行されます。 ドライバーの単一のインスタンスは、複数のアプリケーションからの同時要求を処理できます。 ドライバーと通信するために、アプリケーションは Win32 API を介してドライバーのデバイスに I/O 要求を発行します。 ユーザー モード ドライバーのプライマリ エントリ ポイントは、main() 関数ではなく、IDriverEntry インターフェイス (UMDF 1.11 以前) または DriverEntry ルーチン (UMDF 2.0 以降) です。

ドライバーには、I/O 要求とプラグ アンド プレイと電源通知に応答して呼び出される追加のインターフェイスまたはコールバックも含まれます。 UMDF ドライバーによって管理されるデバイスはシステムに統合され、プラグ アンド プレイと電源管理に参加します。

UMDF ドライバーをデバッグする方法

UMDF ドライバーは、ユーザー モード デバッガーまたはカーネル モード デバッガーを使用してデバッグできます。 詳細については、「WDF ドライバーのデバッグ」を参照してください。

UMDF バージョン 2.0 以降では、Wdfkd.dll デバッガー拡張機能ライブラリのコマンドの多くを使用して、UMDF ドライバーをデバッグできます。 コマンドの一覧については、「デバッガー拡張機能」を参照してください。 さらに、UMDF は、UMDF トレース ログ (または UMDF IFR) をカーネルの非ページ メモリに格納します。 IFR の詳細については、「フレームワークのイベント ロガーの使用」を参照してください。

UMDF のニュースグループはありますか?

以下のフォーラムにおける Windows ドライバーのすべての側面についてご説明します。