UMDF での電源ポリシーの所有権

警告

UMDF 2 は UMDF の最新バージョンであり、UMDF 1 よりも優先されます。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して作成する必要があります。 UMDF 1 には新機能が追加されておらず、Windows 10 の新しいバージョンでは UMDF 1 のサポートが制限されています。 ユニバーサル Windows ドライバーでは、UMDF 2 を使用する必要があります。

アーカイブされた UMDF 1 サンプルは「Windows 11, version 22H2 - May 2022 Driver Samples Update」にあります。

詳しくは、UMDFの概要をご覧ください。

デバイスごとに、デバイスのドライバーの 1 つ (および 1 つだけ) がデバイスの電源ポリシー所有者である必要があります。 電源ポリシー所有者は、デバイスの適切なデバイスの電源状態を決定し、デバイスの電源状態が変化する必要があるたびにデバイスのドライバー スタックにリクエストを送信します。

フレームワーク ベースのドライバーには、デバイスの電源状態の変更を要求するコードは含まれず、これはフレームワークにはそのコードが用意されているためです。 デフォルトでは、システムがシステムスリープ状態になると、フレームワークはデバイスのバスのドライバーにデバイスの電源状態を D3 に下げるように要求します。 (ドライバーは、デバイスがウェイクアップ機能を提供する場合、フレームワークがデバイスのスリープ状態を D1 または D2 に設定するように、デフォルトの動作を変更できます)。システム電源が動作中 (S0) 状態に戻ると、フレームワークはバス ドライバーに対して、デバイスを動作中 (D0) 状態に復元するように要求します。

電源ポリシー所有者は、次のデバイス機能の有効化と無効化も担当します:

  • デバイスがアイドル状態でシステムが動作中 (S0) 状態にあるときに、低電力 (スリープ) 状態に入る機能

  • デバイスの外部イベントを検出したときにスリープ状態から復帰する機能

  • 外部イベントを検出したときにシステムスリープ状態からシステム全体をウェイクアップするデバイスの機能

デバイスでこれらのアイドル状態のパワーダウン機能とシステム ウェイクアップ機能がサポートされている場合、電源ポリシー所有者は、電源ポリシー イベント コールバック関数のセットを定義するフレームワークのIPowerPolicyCallbackWakeFromS0IPowerPolicyCallbackWakeFromSxインターフェイスもサポートできます。

デフォルトでは、UMDF ベースのドライバーは電源ポリシー所有者ではありません。 デバイスのカーネル モード関数ドライバーは、デフォルトの電源ポリシー所有者です。 (カーネル モード関数ドライバーがなく、バス ドライバーがWdfPdoInitAssignRawDeviceを呼び出 した場合、バス ドライバーは電源ポリシー所有者です)。 UMDF ベースのドライバーをドライバー スタックの電源ポリシー所有者にしたい場合、ドライバーは IWDFDeviceInitialize::SetPowerPolicyOwnershipを呼び出す必要があり、カーネル モードのデフォルトの電源ポリシー所有者は、所有権を無効にするためにWdfDeviceInitSetPowerPolicyOwnershipを呼び出す必要があります。

また、USB デバイス用のUMDF ベースのドライバーを提供する場合と、ドライバーを電源ポリシー所有者にしたい場合は、ドライバーの INF ファイルに、レジストリの WinUsbPowerPolicyOwnershipDisabled 値を設定する INF AddReg directiveを含める必要があります。 このREG_DWORD-sized値が 0 以外の数値に設定されている場合は、WinUSBドライバーがデバイスの電源ポリシー所有者になる機能を無効にします。 次の例に示すように、AddReg ディレクティブは INF DDInstall.HW sectionに含まれている必要があります。

[MyDriver_Install.NT.hw]
AddReg=MyDriver_AddReg

[MyDriver_AddReg]
HKR,,"WinUsbPowerPolicyOwnershipDisabled",0x00010001,1

このフレームワークは、電源ポリシー所有者に対して次の作業を行います:

  • ドライバーとドライバー スタックの残りの部分の間のすべての電源ポリシー通信を処理します。 たとえば、ドライバーは、フレームワークがリクエストを行うため、バス ドライバーにデバイスの電源状態の変更を要求する必要はありません。

  • ドライバーが電源ポリシー イベント コールバック関数を登録する場合、デバイスが低電力状態から復帰する機能を有効または無効にするタイミングになったときに、フレームワークはこれらを呼び出します。

  • ドライバーがユーザーによるアイドル設定とスリープ解除設定の変更を許可する場合、フレームワークは、デバイス マネージャーに表示されるプロパティ シート ページの形式でユーザー インターフェイスを提供します。

電源ポリシー所有者の責任の詳細については、次のトピックを参照してください: