このトピックでは、カーネル モード ドライバー フレームワークを汎用ドライバー ペア モデルとして見ることができるという考え方について説明します。 このトピックを読む前に、「ミニドライバーとドライバーのペア」で提示されている概念を理解しておく必要があります。
Microsoft は長年にわたり、以下のパラダイムを使用する、テクノロジ固有のいくつかのドライバー モデルを作成してきました。
- ドライバーは、2 つの部分に分割されます。1 つは一般的なプロセスを処理し、もう 1 つは特定のデバイスに固有のプロセスを処理します。
- フレームワークと呼ばれる一般的な部分は、Microsoft によって作成されます。
- KMDF ドライバーと呼ばれる固有の部分は、Microsoft によって作成される場合も、独立系ハードウェア ベンダーによって作成される場合もあります。
ドライバー ペアのフレームワーク部分は、さまざまなドライバーに共通する一般的なタスクを実行します。 たとえば、フレームワークは、I/O 要求キュー、スレッド同期、および電源管理業務の大部分を処理できます。
フレームワークは KMDF ドライバーのディスパッチ テーブルを所有しているため、だれかが I/O 要求パケット (IRP) を (KMDF ドライバー、フレームワーク) ペアに送信すると、IRP はフレームワークに送られます。 フレームワークが IRP を単独で処理できる場合、KMDF ドライバーは関与しません。 フレームワークが IRP を単独で処理できない場合は、KMDF ドライバーによって実装されたイベント ハンドラーを呼び出すことによって支援を得ます。 以下に、KMDF ドライバーによって実装される可能性のあるイベント ハンドラーのいくつかの例を示します。
- EvtDevicePrepareHardware
- EvtIoRead
- EvtIoDeviceControl
- EvtInterruptIsr
- EvtInterruptDpc
- EvtDevicePnpStateChange
たとえば、USB 2.0 ホスト コントローラー ドライバーには、usbehci.sys という名前の固有の部分と、usbport.sys という名前の汎用の部分があります。 USB 2.0 ミニポート ドライバーと呼ばれる Usbehci.sys には、USB 2.0 ホスト コントローラーに固有のコードがあります。 USB ポート ドライバーと呼ばれる Usbport.sys には、USB 2.0 と USB 1.0 の両方に適用される一般的なコードがあります。 ドライバーのペア (usbehci.sys、usbport.sys) が組み合わされて、USB 2.0 ホスト コントローラー用の 1 つの WDM ドライバーが形成されます。
(固有、汎用) ドライバー ペアには、さまざまなデバイス テクノロジにわたってさまざまな名前があります。 ほとんどのデバイス固有のドライバーには、プレフィックス mini が付いています。 汎用ドライバーは、多くの場合、ポート ドライバーまたはクラス ドライバーと呼ばれます。 以下に、(固有、汎用) ペアのいくつかの例を示します。
- (ディスプレイ ミニポート ドライバー、ディスプレイ ポート ドライバー)
- (USB ミニポート ドライバー、USB ポート ドライバー)
- (バッテリ ミニクラス ドライバー、バッテリ クラス ドライバー)
- (HID ミニドライバー、HID クラス ドライバー)
- (ストレージ ミニポート ドライバー、ストレージ ポート ドライバー)
多くのドライバー ペア モデルが開発されるにつれて、ドライバーを作成するためのさまざまな方法のすべてを追跡することが困難になりました。 各モデルには、デバイス固有ドライバーと汎用ドライバーとの通信用に、独自のインターフェイスがあります。 あるデバイス テクノロジ (たとえばオーディオ) のドライバーを開発するために必要な知識の体系は、別のデバイス テクノロジ (たとえばストレージ) のドライバーの開発に必要な知識の体系とは大きく異なる場合があります。
開発者はしだいにカーネル モード ドライバー ペア用の単一の統合モデルがあることが望ましいと思うようになります。 Windows Vista で初めて利用できるようになったカーネル モード ドライバー フレームワーク (KMDF) は、そのニーズを満たしています。 KMDF に基づくドライバーは、テクノロジ固有のドライバー ペア モデルの多くに似たパラダイムを使用します。
- ドライバーは、2 つの部分に分割されます。1 つは一般的なプロセスを処理し、もう 1 つは特定のデバイスに固有のプロセスを処理します。
- Microsoft によって作成される汎用部分は、フレームワークと呼ばれます。
- Microsoft または独立系ハードウェア ベンダーによって作成される固有の部分は、KMDF ドライバーと呼ばれます。
USB 3.0 ホスト コントローラー ドライバーは、KMDF に基づくドライバーの例です。 この例では、ペアの両方のドライバーが Microsoft によって作成されています。 汎用ドライバーはフレームワークであり、デバイス固有のドライバーは USB 3.0 ホスト コントローラー ドライバーです。 次の図は、USB 3.0 ホスト コントローラーのデバイス ノードとデバイス スタックを示しています。
この図では、Usbxhci.sys が USB 3.0 ホスト コントローラー ドライバーです。 フレームワークである Wdf01000.sys とペアになっています。 (usbxhci.sys、wdf01000.sys) ペアは、USB 3.0 ホスト コントローラーのファンクション ドライバーとして機能する単一の WDM ドライバーを形成します。 ドライバーのペアは、デバイス スタック内の 1 つのレベルを占有し、1 つのデバイス オブジェクトによって表されることに注意してください。 (usbxhci.sys、wdf01000.sys) ペアを表す単一のデバイス オブジェクトは、USB 3.0 ホスト コントローラーのファンクション デバイス オブジェクト (FDO) です。
(KMDF ドライバー、フレームワーク) ペアでは、フレームワークは、さまざまなカーネル モード ドライバーに共通するタスクを処理します。 たとえば、フレームワークは、I/O 要求のキュー操作、スレッド同期、ほとんどのプラグ アンド プレイ タスク、およびほとんどの電源管理タスクを処理できます。 KMDF ドライバーは、特定のデバイスとの対話を必要とするタスクを処理します。 KMDF ドライバーは、フレームワークが必要に応じて呼び出すイベント ハンドラーを登録することによって、要求の処理に参加します。