支援 UMDF 驅動程式中的閒置Power-Down

警告

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 消費者入門

有些裝置可以進入睡眠狀態,而系統仍處於其工作狀態。 針對這類裝置,架構會在裝置閒置後起始降低裝置的電源, (未針對預先決定的 (和) 可設定的時間量使用) 。

其中有些裝置也可以在偵測到外來事件時,在匯流排上觸發喚醒訊號。 匯流排驅動程式會回應此訊號,而驅動程式堆疊會將裝置還原為其工作狀態。 (在架構要求匯流排驅動程式起始將裝置還原至其工作狀態之前,不會偵測到外來事件的裝置仍處於低電源狀態。)

如果您的裝置可以在閒置時關閉電源, 電源原則擁有者 必須執行下列兩個步驟:

  1. 呼叫 IWDFDevice2::AssignS0IdleSettingsIWDFDevice3::AssignS0IdleSettingsEx 以指定:

    • 裝置將進入的低電源狀態
    • 裝置在電源狀態降低之前必須保持閒置的時間量
    • 裝置是否可以偵測外來事件,並在匯流排上觸發喚醒訊號
    • 使用者是否可以控制裝置的閒置設定
    • 當閒置逾時期間到期時,架構是否可以將裝置置於 D3cold 電源狀態

    如果您的驅動程式是以 1.11 版或更新版本的架構所建置,您可以呼叫 IWDFDevice3::AssignS0IdleSettingsEx ,而不是 IWDFDevice2::AssignS0IdleSettings。 除了上述功能之外, IWDFDevice3::AssignS0IdleSettingsEx 還允許驅動程式指定:

    • 裝置的閒置電源功能是否已啟用或停用
    • 當系統回到其運作 (S0) 狀態時,裝置是否會回到其工作 (D0) 狀態
  2. 如果您需要這些函式,請實作 IPowerPolicyCallbackWakeFromS0 介面和下列事件回呼函式:

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

  • 針對此裝置實例建立的電源受控佇列沒有任何要求在佇列中等候或分派至驅動程式。 如果要求已分派給驅動程式,而驅動程式將它傳送至 I/O 目標,要求仍與佇列相關,且裝置不會被視為閒置。 非電源受控佇列中的要求不會計入裝置閒置中。
  • 如果驅動程式先前稱為 IWDFDevice2::StopIdle,則驅動程式後續稱為 IWDFDevice2::ResumeIdle
  • 如果電源原則擁有者是匯流排驅動程式,則匯流排驅動程式的子裝置都不是 D0。

如果您的驅動程式 (或使用者) 啟用裝置的閒置電源,您可能必須使用 IWDFDevice2::StopIdle 方法。 如果裝置處於運作中 (D0) 狀態,這個方法會防止裝置閒置,直到驅動程式呼叫 IWDFDevice2::ResumeIdle為止。 如果裝置在驅動程式呼叫 IWDFDevice2::StopIdle時處於低電源狀態,而且如果系統處於其運作 (S0) 狀態,架構會要求匯流排驅動程式將裝置還原至其運作 (D0) 狀態。 如需驅動程式何時可能必須呼叫 IWDFDevice2::StopIdle的詳細資訊,請參閱方法的參考頁面。

如果裝置可以從低電源狀態喚醒自己,裝置匯流排的驅動程式會參與喚醒裝置。 核心模式匯流排驅動程式會在匯流排介面卡上執行任何必要動作,以啟用和停用裝置從低電源狀態喚醒的能力。

如需控制裝置閒置功能之登錄專案的相關資訊,請參閱 UMDF 中的裝置閒置和喚醒行為的使用者控制