UMDF 中的電源原則擁有權

警告

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

針對每個裝置,一個 (,而且只有一個裝置驅動程式的) 必須是裝置的 電源原則擁有者。 電源原則擁有者會決定裝置的適當 裝置電源狀態 ,並在裝置電源狀態應變更時,將要求傳送至裝置的驅動程式堆疊。

架構型驅動程式不包含要求裝置電源狀態變更的程式碼,因為架構會提供該程式碼。 根據預設,每當系統進入 系統睡眠狀態時,架構會要求驅動程式讓裝置的匯流排將裝置電源狀態降低至 D3。 (您的驅動程式可以變更預設行為,讓架構將裝置的睡眠狀態設定為 D1 或 D2,如果裝置提供喚醒功能。) 當系統電源回到其 運作 (S0) 狀態時,架構會要求匯流排驅動程式將裝置還原至其工作 (D0) 狀態。

電源原則擁有者也負責啟用和停用下列裝置功能:

  • 當裝置處於閒置狀態且系統維持運作 (S0) 狀態時,裝置能夠進入低電源 (睡眠狀態) 狀態

  • 當裝置偵測到外來事件時,能夠從睡眠狀態喚醒自己

  • 當裝置偵測到外來事件時,從系統睡眠狀態喚醒整個系統的能力

如果您的裝置支援這些閒置電源和系統喚醒功能,電源原則擁有者也可以支援架構的 IPowerPolicyCallbackWakeFromS0IPowerPolicyCallbackWakeFromSx 介面,其定義一組電源原則事件回呼函式。

根據預設,UMDF 型驅動程式不是電源原則擁有者。 裝置的核心模式函式驅動程式是預設電源原則擁有者。 (如果沒有核心模式函式驅動程式,而匯流排驅動程式已呼叫 WdfPdoInitAssignRawDevice,則匯流排驅動程式是電源原則擁有者) 。 如果您想要以 UMDF 為基礎的驅動程式成為驅動程式堆疊的電源原則擁有者,驅動程式必須呼叫 IWDFDeviceInitialize::SetPowerPolicyOwnership,而核心模式預設電源原則擁有者必須呼叫 WdfDeviceInitSetPowerPolicyOwnership 來停用擁有權。

此外,如果您要為 USB 裝置提供 UMDF 型驅動程式,而且如果您想要讓驅動程式成為電源原則擁有者,驅動程式的 INF 檔案必須包含 INF AddReg 指示 詞,以設定登錄中的 WinUsbPowerPolicyOwnershipDisabled 值。 如果此REG_DWORD大小值設定為任何非零數位,則會停用 WinUSB 驅動程式成為裝置電源原則擁有者的能力。 AddReg 指示詞必須位於 INF DDInstall.HW 區段中,如下列範例所示。

[MyDriver_Install.NT.hw]
AddReg=MyDriver_AddReg

[MyDriver_AddReg]
HKR,,"WinUsbPowerPolicyOwnershipDisabled",0x00010001,1

架構會針對電源原則擁有者執行下列工作:

  • 它會處理驅動程式與驅動程式堆疊其餘部分之間的所有電源原則通訊。 例如,您的驅動程式不需要要求匯流排驅動程式變更裝置的電源狀態,因為架構會提出要求。

  • 如果您的驅動程式註冊電源原則事件回呼函式,則架構會在何時啟用或停用裝置從低電源狀態喚醒本身的能力時呼叫它們。

  • 如果您的驅動程式允許使用者修改閒置和喚醒設定,架構會以裝置管理員顯示的屬性工作表頁面形式提供使用者介面。

如需電源原則擁有者責任的詳細資訊,請參閱下列主題: