裝置進入Low-Power狀態

裝置會離開其運作 (D0) 狀態,並在發生下列其中一項時進入低電源狀態:

  • 裝置閒置 (也就是說,未存取) ,而且能夠在系統維持運作 (S0) 狀態時進入低電源閒置狀態。

  • 系統的電源狀態已從其運作 (S0) 狀態變更為低電源狀態。 (Drivers 可以呼叫 WdfDeviceGetSystemPowerAction ,以判斷系統電源狀態變更的原因。)

針對每個支援裝置的函式和篩選驅動程式,架構會依序執行下列動作,一次一個驅動程式,從驅動程式堆疊中最高的驅動程式開始:

  1. 如果驅動程式使用自我管理 I/O,架構會呼叫驅動程式的 EvtDeviceSelfManagedIoSuspend 回呼函式。

  2. 架構會停止所有驅動程式的電源受控 I/O 佇列,並在存在) 時呼叫其 EvtIoStop 回呼函式 (。

  3. 如果驅動程式是裝置的電源原則擁有者,架構會呼叫其 EvtDeviceArmWakeFromS0EvtDeviceArmWakeFromSxEvtDeviceArmWakeFromSxWithReason 回呼函式。

  4. 如果硬體和驅動程式支援 DMA,架構會呼叫驅動程式的 EvtDmaEnablerSelfManagedIoStopEvtDmaEnablerFlushEvtDmaEnablerDisable 回呼函式,如果每個建立的 DMA 通道都 () 。

  5. 如果驅動程式存在) ,則架構會呼叫驅動程式的 EvtDeviceD0ExitPreInterruptsDisabled 回呼函式 (,然後呼叫驅動程式的 EvtInterruptDisable 回呼函式 (如果每個中斷) 存在,則驅動程式可以停用裝置中斷。

  6. 如果驅動程式存在) ,架構會呼叫驅動程式的 EvtDeviceD0Exit 回呼函式 (。

匯流排驅動程式是堆疊中最後呼叫的驅動程式。 當架構呼叫匯流排驅動程式的 EvtDeviceD0Exit 回呼函式時,回呼函式會將裝置的電源狀態 (匯流排的子裝置) 為低電源狀態。 除非電源原則擁有者已指定不同的低電源狀態,否則架構會指定 D3 低電源狀態。

注意

匯流排驅動程式用來設定子裝置電源狀態的方法是匯流排特定的。 例如,PCI 匯流排電源管理規格會定義 16 位電源管理控制項/狀態暫存器, (PMCSR) 。 最低兩個位 (「PowerState」) 會決定裝置的目前電源狀態,並用來將裝置設定為新的電源狀態。 pci.sys當 PDO 收到IRP_MN_SET_POWER/D3 時,它會讀取 PMCSR、將 PowerState 位變更為 11b (電源等級 D3) ,然後回寫 PMCSR。