次の方法で共有


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

各デバイスについて、いずれか (1 つだけ) のデバイスのドライバーを、デバイスの "電源ポリシー所有者" に指定する必要があります。電源ポリシー所有者は、適切なデバイス電源状態を判断し、デバイスの電源状態を変更する必要がある場合は、デバイスのドライバー スタックに要求を送信します。

フレームワークには、デバイスの電源状態の変更を要求するコードが用意されているため、フレームワークベースのドライバーにはこのコードが含まれていません。既定では、システムがスリープ状態に移行すると、フレームワークはデバイスの電源状態を D3 に下げるようデバイスのバスのドライバーに要求します (デバイスにスリープ解除機能が備わっている場合は、フレームワークがデバイスのスリープ状態を D1 または D2 に設定するように、ドライバーで既定の動作を変更できます)。システムの電源状態が作業状態 (S0) に戻ると、フレームワークは、デバイスを作業状態 (D0) に戻すようにバス ドライバーに要求します。

電源ポリシー所有者は、デバイスの次の機能の有効化または無効化も行います。

  • デバイスはアイドル状態であるが、システムが作業状態 (S0) である場合に、低電力 (スリープ) 状態に移行する機能

  • 外部イベントを検出したときに、スリープ状態を解除する機能

  • 外部イベントを検出したときに、システム全体のスリープ状態を解除する機能

デバイスがこのようなアイドル時の低電力化機能やシステムのスリープ解除機能を備えている場合、電源ポリシー所有者は、フレームワークの IPowerPolicyCallbackWakeFromS0 インターフェイスと IPowerPolicyCallbackWakeFromSx インターフェイスをサポートすることもできます。これらのインターフェイスでは、一連の電源ポリシー イベント コールバック関数が定義されています。

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

さらに、USB デバイス用の UMDF ベースのドライバーを電源ポリシー所有者にする場合は、レジストリの WinUsbPowerPolicyOwnershipDisabled 値を設定する INF AddReg ディレクティブがドライバーの INF ファイルに含まれている必要があります。この REG_DWORD 型の値が 0 以外の数値に設定されていると、WinUSB ドライバーはデバイスの電源ポリシー所有者になれません。AddReg ディレクティブは、次の例のように、INF DDInstall.HW セクションに存在する必要があります。

  [MyDriver_Install.NT.hw]
AddReg=MyDriver_AddReg

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

フレームワークは、電源ポリシー所有者に代わって次の操作を行います。

  • ドライバーと、ドライバー スタック内の他のドライバーとの間で、電源ポリシーに関するすべての通信を処理します。たとえば、ドライバーがバス ドライバーに対してデバイスの電源状態を変更するように要求する必要はありません。この要求はフレームワークによって行われます。

  • ドライバーが電源ポリシー イベント コールバック関数を登録している場合、デバイスの低電力状態を解除する機能を有効化または無効化する必要があるときに、フレームワークがこれらのコールバック関数を呼び出します。

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

電力ポリシー所有者の権限の詳細については、次のトピックを参照してください。

UMDF ベースのドライバーでのアイドル時の低電力化機能のサポート

UMDF ベースのドライバーでのシステムのスリープ解除のサポート

UMDF でのデバイスのアイドル状態およびスリープ解除動作のユーザーによる制御