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サポート オブジェクト 」をご参照ください。