UMDF ドライバーでのアイドル電源切断のサポート
警告
UMDF 2 は UMDF の最新バージョンであり、UMDF 1 よりも優先されます。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して記述する必要があります。 UMDF 1 には新機能が追加されておらず、Windows 10 の新しいバージョンでは UMDF 1 のサポートが制限されています。 ユニバーサル Windows ドライバーでは、UMDF 2 を使用する必要があります。
アーカイブされた UMDF 1 サンプルは、「Windows 11、バージョン 22H2 - 2022 年 5 月 ドライバーサンプルの更新」でご確認いただけます。
詳しくは、「UMDF の概要」をご覧ください。
一部のデバイスは、システムが動作状態のままスリープ状態に入ることがあります。 このようなデバイスの場合、フレームワークは、デバイスがアイドル状態になった (使用されていない) 時間 (および設定可能な) 時間が経過した後、デバイスの電力低下を開始します。
これらのデバイスの一部では、外部イベントを検出したときにバス上でウェイクアップ信号をトリガーすることもできます。 バス ドライバーは、この信号に応答し、ドライバー スタックは、その動作状態にデバイスを復元します。 (外部イベントを検出しないデバイスはメイン動作状態へのデバイスの復元を開始するようフレームワークがバス ドライバーに要求するまで、低電力状態になります)。
デバイスがアイドル状態のときに電源を切断できる場合、電源ポリシー所有者は次の 2 つの手順を実行する必要があります。
IWDFDevice2::AssignS0IdleSettings または IWDFDevice3::AssignS0IdleSettingsEx を呼び出して次を指定します。
- デバイスが入力する低電力状態
- デバイスが電源状態を下げる前にアイドル状態にしたままにする必要がある時間
- デバイスが外部イベントを検出し、バスでウェイクアップ信号をトリガーできるかどうか
- ユーザーがデバイスのアイドル設定を制御できるかどうか
- アイドル タイムアウトの期間が経過したときに、フレームワークが D3cold 電源状態にデバイスを配置できるかどうか
ドライバーがフレームワークのバージョン 1.11 以降でビルドされている場合は、IWDFDevice2::AssignS0IdleSettings の代わりに IWDFDevice3::AssignS0IdleSettingsEx を呼び出すことができます。 上記の機能に加えて、IWDFDevice3::AssignS0IdleSettingsEx を使用すると、ドライバーで次の指定を行うことができます。
- デバイスのアイドル電源切断機能が有効か無効か
- システムが動作 (S0) 状態に戻ったときに、デバイスが動作 (D0) 状態に戻るかどうか
デバイスに必要な場合は、IPowerPolicyCallbackWakeFromS0 インターフェイスと次のイベント コールバック関数を実装します。
- IPowerPolicyCallbackWakeFromS0::OnArmWakeFromS0 は、デバイス ハードウェア (バスではない) が外部ウェイクアップ イベントに応答できるようにします。
- IPowerPolicyCallbackWakeFromS0::OnDisarmWakeFromS0 は、外部ウェイクアップ イベントに応答するデバイスの機能 (バスの機能ではありません) を無効にします。
- IPowerPolicyCallbackWakeFromS0::OnWakeFromS0Triggered は、バスがウェイク 信号を検出したことをドライバーに通知します。
フレームワークは、デバイスがアイドル状態であると見なし、次のすべての条件が満たされたときにアイドル時間のカウントを開始します。
- このデバイス インスタンス用に作成された電源管理キューには、キュー内で待機している要求やドライバーにディスパッチされる要求はありません。 要求がドライバーにディスパッチされ、ドライバーが I/O ターゲットに送信した場合、要求は引き続きキューに関連しており、デバイスはアイドル状態と見なされません。 電源管理されていないキュー内の要求は、デバイスのアイドル状態にはカウントされません。
- ドライバーが以前に IWDFDevice2::StopIdle を呼び出した場合、ドライバーは後で IWDFDevice2::ResumeIdle を呼び出します。
- 電源ポリシー所有者がバス ドライバーの場合、バス ドライバーの子デバイスは D0 にありません。
ドライバー (またはユーザー) がデバイスのアイドル電源切断を有効にする場合は、IWDFDevice2::StopIdle メソッドを使用する必要があります。 デバイスが動作 (D0) 状態の場合、このメソッドは、ドライバーが IWDFDevice2::ResumeIdle を呼び出すまで、デバイスがアイドル状態にならないようにします。 ドライバーが IWDFDevice2::StopIdle を呼び出すときにデバイスが低電力状態にあり、システムが動作 (S0) 状態の場合、フレームワークは、デバイスを動作 (D0) 状態に復元するようバス ドライバーに要求します。 ドライバーが IWDFDevice2::StopIdle を呼び出す必要がある場合の詳細については、メソッドのリファレンス ページを参照してください。
デバイスが低電力状態から復帰できる場合、デバイスのバスのドライバーはデバイスのスリープ解除に参加します。 カーネルモード バス ドライバーは、低電力状態から復帰するデバイスの機能を有効および無効にするために、バス アダプターで必要な処理を行います。
デバイスのアイドル機能を制御するレジストリ エントリの詳細については、「UMDF でのデバイスのアイドル状態とスリープ解除動作のユーザー制御」を参照してください。