機能ドライバーでの PnP と電源管理のサポート
ファンクション ドライバー はデバイスの操作を制御するため、デバイス ハードウェアにアクセスします。 これらのドライバーは、PnP および電源管理操作をサポートし、通常、デバイス オブジェクトを作成するときに、いくつかのイベント コールバック関数を登録する必要があります。
通常、関数ドライバーの EvtDriverDeviceAdd イベント コールバック関数は、WdfDeviceInitSetPnpPowerEventCallbacks を呼び出して、次のコールバック関数を登録します。
EvtDevicePrepareHardware は、デバイスのシステム割り当てリソースをドライバーに配信します。 ドライバーは、デバイスのバス相対メモリをプロセッサの仮想アドレス空間にマッピングするなどの操作を実行して、ドライバーからハードウェアにアクセスできるようにします。
EvtDeviceD0Entry は、ドライバーのデバイスが動作 (D0) 状態に入るたびに必要なファームウェアの読み込みなどの操作を実行します。
EvtDeviceD0Exit は、ドライバーのデバイスが動作 (D0) 状態を離れ、低電力状態に入るたびに必要な操作を実行します。
EvtDeviceReleaseHardware は、EvtDevicePrepareHardware が割り当てたシステム リソースを解放します。
すべてのフレームワーク定義コールバック関数と同様に、先のリストにあるコールバック関数も省略可能です。 ドライバーが必要な場合にのみ、それらを指定する必要があります。
関数ドライバーは、WdfDeviceSetPnpCapabilities と WdfDeviceSetPowerCapabilities を呼び出して、デバイスの PnP と電源管理機能をオペレーティング システムに報告できます。
通常、ほとんどの I/O 要求には、フレームワークの電源管理 I/O キューを使用します。 I/O キューが電源管理されている場合、フレームワークは、デバイスが動作 (D0) 状態の場合にのみ、ドライバーに要求を配信します。 電源管理 I/O キューの詳細については、「I/O キューの電源管理」を参照してください。
通常、デバイスのファンクション ドライバーは、ドライバー スタックの電源ポリシー所有者です。 電源ポリシー所有者は、デバイスの適切なデバイスの電源状態を決定し、デバイスの電源状態が変更されるたびにデバイスのドライバー スタックに要求を送信します。 フレームワーク ベースのドライバーの場合、フレームワークがこの役割を果たすため、デバイスの電源状態の変更を要求するためにドライバーにコードを提供する必要はありません。
電源ポリシー所有者には、アイドル状態のときにデバイスの低電力状態に入る機能と、動作 (S0) 状態のシステムの再メインを制御し、低電力状態から外部イベントを検出したときにウェイク信号を生成するデバイスの機能を制御するという 2 つの役割があります。 デバイスにアイドル状態またはウェイク機能がある場合、関数ドライバーは追加のコールバック関数を提供できます。 電源ポリシー所有者の役割の詳細については、「電源ポリシー所有権」を参照してください。