共用方式為


支援閒置待機模式

某些裝置可以進入低功率(Dx)狀態,而系統仍處於運作中狀態(S0) 狀態。 從 Windows 8 開始,裝置可以在進入 Dx 狀態之前,轉換為低功率功能電源狀態(Fx)。 針對這類裝置,架構會在裝置閒置(未使用)一段預先設定的時間後,開始降低裝置或元件的電源。

其中有些裝置也可以在偵測到外部事件時,在公交車上觸發喚醒訊號。 總線驅動程式會回應此訊號,而驅動程式堆疊會將裝置還原至其工作狀態。 (在架構要求總線驅動程式起始將裝置還原至其工作狀態之前,不會偵測到外部事件的裝置仍處於低功率狀態。

如果您的裝置或元件可在閑置時關閉電源,則電源原則擁有者中的 EvtDriverDeviceAdd 回呼函式必須執行下列兩個步驟:

  1. 呼叫 WdfDeviceAssignS0IdleSettings 以指定:

    • 裝置將進入的低功率狀態
    • 裝置在電源狀態降低之前 必須保持閑置 的時間量
    • 裝置是否能偵測外部事件,並在總線上觸發喚醒信號
    • 使用者是否可以控制裝置的閑置設定
    • 裝置的閑置電源關閉功能是否已啟用或停用
    • 當系統回到其工作狀態時,裝置是否會回到其工作狀態 (D0) 狀態
    • 裝置的閒置逾時值是否取決於電源管理架構 (PoFx)
    • 架構是否能在閒置超時期間結束時,將裝置轉為 D3cold 電源狀態。

    如需這些設定的詳細資訊,請參閱 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 結構,以及 支援功能電源狀態

  2. 如果需要為您的裝置使用這些事件回呼函式,請呼叫 WdfDeviceInitSetPowerPolicyEventCallbacks 來註冊它們:

閑置狀態

架構會將裝置視為閑置,並在符合下列所有條件時開始計算閑置時間:

  • 針對此裝置實例建立的所有電源受控佇列中,都沒有任何要求正在等候或已被分派給驅動程式。 如果要求已分派至驅動程式,而驅動程式將它傳送至 I/O 目標,要求仍與佇列相關。 除非驅動程式使用 傳送和忘記選項來傳送 要求,否則裝置不會被視為閑置。 在非電源管理佇列中的請求不會計入裝置待機時間。
  • 如果驅動程式先前稱為 WdfDeviceStopIdle,則驅動程式隨後稱為 WdfDeviceResumeIdle
  • 如果電源原則擁有者是匯流排驅動程式,則匯流排驅動程式的子裝置都不是 D0。

如果您的驅動程式(或使用者)為您的裝置啟用閑置電源關閉功能,您可能必須使用 WdfDeviceStopIdle 方法。 如果裝置處於運作中狀態(D0),此方法會防止裝置閑著,直到驅動程式呼叫 WdfDeviceResumeIdle 為止。 如果當驅動程式呼叫 WdfDeviceStopIdle 時,裝置處於低功率狀態,而且如果系統處於運作中 (S0) 狀態,架構會要求總線驅動程式將裝置還原至其工作狀態 (D0) 狀態。 WdfDeviceStopIdle 的每個成功呼叫都必須與 WdfDeviceResumeIdle 的呼叫相符。 如需在調試程式中檢視電源參考計數的相關信息,請參閱 在WDF中偵錯電源參考流失

如需驅動程式何時可能必須呼叫 WdfDeviceStopIdle 的詳細資訊,請參閱 方法的參考頁面。

如果裝置可以從低功率狀態喚醒自己,則裝置總線的驅動程序會參與喚醒裝置。 總線驅動程式通常會提供 EvtDeviceEnableWakeAtBusEvtDeviceDisableWakeAtBus 回呼函式。 這些功能會在總線轉接器上執行任何必要動作,以啟用及停用裝置從低耗能狀態喚醒的能力。

如需控制裝置閑置功能之登錄專案的相關信息,請參閱 使用者控制裝置閑置和喚醒行為