次の方法で共有


デバイスが低電力状態に移行する場合

デバイスは、次のうちいずれかが発生した場合に、作業状態 (D0) から低電力状態に移行します。

  • デバイスがアイドル (アクセスされない) 状態であり、システムを作業状態 (S0) にしたままで低電力アイドル状態に移行できる場合。

  • システムの電源状態が作業状態 (S0) から低電力状態に変更された場合。(ドライバーは、WdfDeviceGetSystemPowerAction を呼び出して、システムの電源状態が変更されようとしている理由を調べることができます)。

デバイスをサポートする各関数ドライバーおよびフィルター ドライバーについて、フレームワークは、ドライバー スタックでの順位が高いものから順に、1 ドライバーずつ次の処理を行います。

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

  2. デバイスの電源管理された I/O キューをすべて停止して、キューの EvtIoStop コールバック関数 (存在する場合) を呼び出します。

  3. ドライバーがデバイスの電源ポリシー所有者である場合は、ドライバーの EvtDeviceArmWakeFromS0EvtDeviceArmWakeFromSxEvtDeviceArmWakeFromSxWithReason のいずれかのコールバック関数を呼び出します。

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

  5. ドライバーの EvtDeviceD0ExitPreInterruptsDisabled コールバック関数 (存在する場合) を呼び出してから、各割り込みに対してドライバーの EvtInterruptDisable コールバック関数 (存在する場合) を呼び出し、ドライバーがデバイスの割り込みを無効化できるようにします。

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

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