电源策略所有权

对于每个设备,一个 (,并且只有一个设备驱动程序) 必须是设备的 电源策略所有者。 电源策略所有者确定 设备的相应设备电源状态 ,并在设备的电源状态发生更改时向设备的驱动程序堆栈发送请求。

基于框架的驱动程序不包含请求更改设备电源状态的代码,因为框架提供了该代码。 默认情况下,每当系统进入 系统睡眠状态时,框架会要求驱动程序提供设备的总线,以将设备电源状态降低到 D3。 (如果设备提供唤醒功能,则驱动程序可以更改默认行为,以便框架将设备的睡眠状态设置为 D1 或 D2。) 当系统电源恢复到其 工作 (S0) 状态时,框架会请求总线驱动程序将设备还原到其工作 (D0) 状态。

电源策略所有者还负责启用和禁用以下设备功能:

  • 当设备处于空闲状态且系统保持工作 (S0 ) 状态 时,设备能够进入低功耗 (睡眠) 状态

  • 设备在检测到外部事件时能够从睡眠状态中唤醒自身

  • 设备在检测到外部事件时能够将整个系统从系统睡眠状态唤醒

如果设备支持这些空闲关机和系统唤醒功能,电源策略所有者还可以调用 WdfDeviceInitSetPowerPolicyEventCallbacks 来注册一组电源策略事件回调函数。

默认情况下,对于基于框架的驱动程序,设备的函数驱动程序是电源策略所有者。 (如果没有函数驱动程序,并且总线驱动程序已调用 WdfPdoInitAssignRawDevice,则总线驱动程序是电源策略所有者) 。 如果要更改驱动程序堆栈的电源策略所有者,默认电源策略所有者必须调用 WdfDeviceInitSetPowerPolicyOwnership 来禁用所有权,而将成为电源策略所有者的驱动程序必须调用 WdfDeviceInitSetPowerPolicyOwnership 才能启用所有权。

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

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

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

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

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