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

框架对电源策略所有者执行以下操作:

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

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

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

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