WDF を使用したドライバーの開発
このトピックでは、カーネル モード ドライバー フレームワーク (KMDF) ドライバーの開発に使用するフレームワーク オブジェクトの概要について説明します。 示されている場合を除き、同じオブジェクトを使用して、UMDF バージョン 2 以降のユーザー モード ドライバー フレームワーク (UMDF) ドライバーを開発します。
Windows Driver Framework (WDF) ドライバーは、DriverEntry ルーチン と、フレームワーク ベースのドライバーが使用するWindows Driver Framework オブジェクトによって定義される一連のイベント コールバック関数で構成されます。 コールバック関数は、フレームワークがエクスポートするオブジェクト メソッドを呼び出します。 Windows Driver Kit (WDK) には、ドライバーのイベント コールバック関数を実装する方法を示すサンプル WDF ドライバーが含まれています。 これらのサンプルは、Windowsデベロッパー センター - ハードウェアからダウンロードすることができます。 ご使用いただけるサンプルについては、「KMDF ドライバーのサンプル」と「UMDF ドライバーのサンプル」をご参照ください。
WDF ドライバーを作成するときは、通常、次の操作を行います。
フレームワーク ドライバー オブジェクトを使用してドライバーを表示します。
ドライバーの DriverEntry ルーチンは、ドライバーを表すフレームワーク ドライバー オブジェクトを作成する WdfDriverCreateを呼び出す必要があります。 WdfDriverCreateメソッドは、ドライバーのEvtDriverDeviceAddコールバック関数も登録し、このコールバック関数は、プラグ アンド プレイ (PnP) マネージャーがドライバーがサポートするデバイスの存在を報告するたびにフレームワークによって呼び出されます。
ドライバーで PnP と電源管理をサポートするには、フレームワーク デバイス オブジェクトを使用します。
ドライバーがサポートする各デバイスのフレームワーク デバイス オブジェクトを作成するには、すべてのドライバーが WdfDeviceCreate を呼び出す>必要があります。 デバイスは、コンピューターに接続されているハードウェアの一部にすることも、ソフトウェアのみのデバイスにすることもできます。 フレームワーク デバイス オブジェクトは PnP および電源管理操作をサポートし、ドライバーは、デバイスが動作状態に入るか、または離れたときにドライバーに通知するイベント コールバック関数を登録できます。
フレームワーク デバイス オブジェクトの詳細については、「ドライバーでの PnP と電源管理のサポート」をご参照ください。
フレームワーク キュー オブジェクト とフレームワーク要求オブジェクトを使用して、ドライバーでの I/O 操作をサポートします。
アプリケーションまたは他のドライバーから読み取り、書き込み、またはデバイス I/O 制御要求を受け取るドライバーはすべて、WdfIoQueueCreateを呼び出して、I/O キューを表すフレームワーク キュー オブジェクトを作成する必要があります。 通常、ドライバーは、I/O キューごとに 1 つ以上の要求ハンドラーを登録します。 I/O マネージャーがドライバーに I/O 要求を送信すると、フレームワークは要求のフレームワーク要求オブジェクトを作成し、要求オブジェクトを I/O キューに配置し、ドライバーの要求ハンドラーのいずれかを呼び出して、要求が使用可能であることをドライバーに通知します。 ドライバーは I/O 要求を取得し、要求の再キュー、完了、キャンセル、または転送を行うことができます。
フレームワークのキュー オブジェクトと要求オブジェクトの使用の詳細については、「フレームワーク キュー オブジェクト」と「フレームワーク要求オブジェクト」をご参照ください。
フレームワーク割り込みオブジェクトを使用して、、デバイスの割り込みを処理します。
デバイスの割り込みを処理するドライバーは、割り込みごとにフレームワーク割り込みオブジェクトを作成し、コールバック関数を登録するWdfInterruptCreateを呼び出す必要があります。 これらのコールバック関数は、割り込みを有効および無効にし、割り込みの割り込みサービス ルーチン (ISR) および遅延プロシージャ呼び出し (DPC) として機能します。
フレームワーク割り込みオブジェクトの詳細については、「ハードウェア割り込みの処理」をご参照ください。
KMDF ドライバーは、フレームワークのDMA イネーブラー オブジェクトとDMA トランザクション オブジェクトを使用して、デバイスのダイレクト メモリ アクセス (DMA) 操作を処理できます。
KMDF ドライバーのデバイスで DMA 操作がサポートされている場合、ドライバーはWdfDmaEnablerCreate を呼び出して DMA イネーブラー オブジェクトを作成しWdfDmaTransactionCreate を呼び出して 1 つ以上の DMA トランザクション オブジェクトを作成する必要があります。 DMA トランザクション オブジェクトは、DMA 操作を 実行するようにデバイス ハードウェアをプログラムする EvtProgramDma コールバック関数を定義します。
DMA 操作のサポートの詳細については、「フレームワーク ベースのドライバーでの DMA 操作の処理」をご参照ください。
フレームワークの I/O ターゲット オブジェクト を使用して、他のドライバーに I/O 要求を送信します。
I/O 要求を他のドライバー (通常はドライバー スタック内の次の下位ドライバー) に渡すには、ドライバーが I/O ターゲット オブジェクトに要求を送信します。
I/O ターゲット オブジェクトの詳細については、「I/O ターゲットの使用」をご参照ください。
KMDF ドライバーは、フレームワークの WMI プロバイダー オブジェクトとWMI インスタンス オブジェクトを使用して、Windows Management Instrumentation (WMI) 機能をサポートできます。
ほとんどの KMDF ドライバーは WMI をサポートし、WdfWmiInstanceCreate を呼び出してして、WMI データを送受信するコールバック関数を登録する必要があります。
WMI の詳細については、「フレームワーク ベースのドライバーでの WMI のサポート」をご参照ください。
フレームワークの同期機能を使用します。
すべてのドライバーは、マルチプロセッサの同期の問題を認識し、フレームワークが提供する同期手法 を使用する必要があります。
フレームワークが提供する追加のオブジェクトと機能を使用します。
フレームワークには、ドライバーが使用できる追加のオブジェクトが用意されています。 これらのオブジェクトの詳細については、「WDFサポート オブジェクト 」をご参照ください。