次の方法で共有


デバイスが低電力状態になる

次のいずれかの状況になると、デバイスは動作 (D0) 状態を終了し、低電力状態に移行します。

  • デバイスはアイドル (アクセスなし) 状態であり、システムが動作 (S0) 状態にある間に、低電力アイドル状態に移行可能になった。

  • システムの電力状態が動作 (S0) 状態から低電力状態に変わった。 (ドライバーは WdfDeviceGetSystemPowerAction を呼び出して、システムの電力状態が変化している理由を特定できます。)

デバイスをサポートする機能とフィルター ドライバーごとに、フレームワークは、ドライバー スタックの最上位にあるドライバーから始めて、一度に 1 つのドライバーずつ、以下の一連の手順を進めていきます。

  1. ドライバーが自己管理 I/O を使用している場合、フレームワークはドライバーの EvtDeviceSelfManagedIoSuspend コールバック関数を呼び出します。

  2. フレームワークは、ドライバーの電源管理 I/O キューをすべて停止し、EvtIoStop コールバック関数 (存在する場合) を呼び出します。

  3. ドライバーがデバイスの電源ポリシーの所有者である場合、フレームワークはその EvtDeviceArmWakeFromS0EvtDeviceArmWakeFromSx、または EvtDeviceArmWakeFromSxWithReason コールバック関数を呼び出します。

  4. ハードウェアとドライバーが DMA をサポートしている場合、フレームワークは、作成された各 DMA チャネルのドライバーの EvtDmaEnablerSelfManagedIoStopEvtDmaEnablerFlushEvtDmaEnablerDisable コールバック関数 (存在する場合) を呼び出します。

  5. フレームワークは、ドライバーの EvtDeviceD0ExitPreInterruptsDisabled コールバック関数 (存在する場合) を呼び出した後、ドライバーがデバイスの割り込みを無効にできるように、割り込みごとにドライバーの EvtInterruptDisable コールバック関数 (存在する場合) を呼び出します。

  6. フレームワークは、ドライバーの EvtDeviceD0Exit コールバック関数 (存在する場合) を呼び出します。

バス ドライバーは、スタック内の最後に呼び出されるドライバーです。 フレームワークがバス ドライバーの EvtDeviceD0Exit コールバック関数を呼び出すと、コールバック関数はデバイス (バスの子デバイス) の電力状態を低電力状態に設定します。 電力ポリシーの所有者が別の低電力状態を指定しない限り、フレームワークは D3 低電力状態を指定します。

Note

バス ドライバーが子デバイスの電力状態を設定するために使用する方法は、バス固有です。 たとえば、PCI バス電源管理仕様では、16 ビットの電源管理制御/ステータス レジスタ (PMCSR) が定義されています。 最下位の 2 ビット (「PowerState」) はどちらもデバイスの現在の電力状態を特定し、デバイスを新しい電力状態に設定するために使用されます。 pci.sys PDO は IRP_MN_SET_POWER/D3 を受信すると、PMCSR を読み取り、PowerState ビットを 11b (電力レベル D3) に変更して、PMCSR を書き戻します。