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

框架为电源策略所有者执行以下工作:

  • 它处理驱动程序与驱动程序堆栈其余部分之间的所有电源策略通信。 例如,驱动程序不必请求总线驱动程序来更改设备的电源状态,因为框架发出请求。

  • 如果驱动程序注册了电源策略事件回调函数,框架会在启用或禁用设备从低功耗状态唤醒自身的能力时调用它们。

  • 如果驱动程序允许用户修改空闲和唤醒设置,框架会以属性表页的形式提供用户界面,设备管理器显示。

有关电源策略所有者的责任的详细信息,请参阅以下主题: