電源ポリシーの所有権
デバイスごとに、デバイスのドライバーの 1 つ (および 1 つだけ) がデバイスの電源ポリシー所有者である必要があります。 電源ポリシー所有者は、デバイスの適切なデバイスの電源状態を決定し、デバイスの電源状態が変化する必要があるたびにデバイスのドライバー スタックにリクエストを送信します。
フレームワーク ベースのドライバーには、デバイスの電源状態の変更を要求するコードは含まれず、これはフレームワークにはそのコードが用意されているためです。 デフォルトでは、システムがシステムスリープ状態になると、フレームワークはデバイスのバスのドライバーにデバイスの電源状態を D3 に下げるように要求します。 (ドライバーは、デバイスがウェイクアップ機能を提供する場合、フレームワークがデバイスのスリープ状態を D1 または D2 に設定するように、デフォルトの動作を変更できます)。システム電源が動作中 (S0) 状態に戻ると、フレームワークはバス ドライバーに対して、デバイスを動作中 (D0) 状態に復元するように要求します。
電源ポリシー所有者は、次のデバイス機能の有効化と無効化も担当します:
デバイスがアイドル状態でシステムが動作中 (S0) 状態にあるときに、低電力 (スリープ) 状態に入る機能
デバイスの外部イベントを検出したときにスリープ状態から復帰する機能
外部イベントを検出したときにシステムスリープ状態からシステム全体をウェイクアップするデバイスの機能
デバイスでこれらのアイドル状態の電源ダウン機能とシステム ウェイクアップ機能がサポートされている場合、電源ポリシー所有者は WdfDeviceInitSetPowerPolicyEventCallbacksを呼び出して、電源ポリシー イベント コールバック関数のセットを登録することもできます。
デフォルトでは、フレームワーク ベースのドライバーの場合、デバイスの関数 ドライバーは電源ポリシーの所有者です。 (カーネル モード関数ドライバーがなく、バス ドライバーがWdfPdoInitAssignRawDeviceを呼び出 した場合、バス ドライバーは電源ポリシー所有者です)。 ドライバー スタックの電源ポリシー所有者を変更したい場合は、デフォルトの電源ポリシー所有者は WdfDeviceInitSetPowerPolicyOwnershipを呼び出して所有権を無効にする必要があります。また、電源ポリシー所有者になるドライバーは、WdfDeviceInitSetPowerPolicyOwnershipを呼び出して所有権を有効にする必要があります。
このフレームワークは、電源ポリシー所有者に対して次の作業を行います:
ドライバーとドライバー スタックの残りの部分の間のすべての電源ポリシー通信を処理します。 たとえば、ドライバーは、フレームワークがリクエストを行うため、バス ドライバーにデバイスの電源状態の変更を要求する必要はありません。
ドライバーが電源ポリシー イベント コールバック関数を登録する場合、デバイスが低電力状態から復帰する機能を有効または無効にするタイミングになったときに、フレームワークはこれらを呼び出します。
ドライバーがユーザーによるアイドル設定とスリープ解除設定の変更を許可する場合、フレームワークは、デバイス マネージャーに表示されるプロパティ シート ページの形式でユーザー インターフェイスを提供します。
電源ポリシー所有者の責任の詳細については、次のトピックを参照してください: