设备空闲和唤醒行为的用户控件

如果设备具有空闲电源关闭或唤醒功能,则可以决定是否应允许用户启用或禁用这些功能。

驱动程序可以使用 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 结构的成员来指定具有注册表访问权限的用户是否可以启用或禁用设备的空闲电源关闭功能。

驱动程序可以使用 WDF_DEVICE_POWER_POLICY_WAKE_SETTINGS 结构的成员来指定具有注册表访问权限的用户是否可以启用或禁用设备的唤醒功能。

这两种结构都允许驱动程序启用该功能、禁用该功能或让用户控制该功能。 若要让用户控制,在适当的设置结构中,驱动程序将 UserControlOfIdleSettingsUserControlOfWakeSettings 成员分别设置为 IdleAllowUserControlWakeAllowUserControl并将 Enabled 成员设置为 WdfTrueWdfUseDefault

如果驱动程序允许用户修改空闲和唤醒设置,框架会以属性表页的形式提供用户界面,设备管理器显示,以便用户可以启用或禁用空闲和唤醒功能。 (框架修改 IdleInWorkingStateWakeFromSleepState 注册表值。驱动程序及其安装文件 不得 读取或修改这些值。)

如果用户修改了设备的设置,框架会根据需要更新设备的电源状态以匹配新设置。 例如,如果用户禁用设备的空闲关闭功能,而设备由于处于空闲状态而处于低功耗状态,则框架会将设备返回到其工作状态。

如果驱动程序允许用户修改空闲和唤醒设置,框架默认启用这些设置。 某些驱动程序编写器可能希望在允许用户修改设置之前先禁用这些设置。

因此,对于 1.9 版及更高版本的 KMDF,框架提供两个驱动程序可定义的注册表值,名为 WdfDefaultIdleInWorkingStateWdfDefaultWakeFromSleepState,它们存储在设备的 Device Parameters\WDF 子项中的设备硬件密钥下。 值REG_DWORD类型,“0”表示禁用该功能,“1”表示已启用该功能。

驱动程序的 INF 文件可以使用 INF AddReg 指令 创建和设置 WdfDefaultIdleInWorkingStateWdfDefaultWakeFromSleepState 注册表值。 例如,如果驱动程序启用了设备的空闲电源关闭功能,但如果在安装设备时必须禁用该功能,则驱动程序的 INF 文件可以将 WdfDefaultIdleInWorkingState 设置为“0”。

仅当驱动程序在适当的设置结构中分别将 UserControlOfIdleSettings 或 UserControlOfWakeSettings 成员设置为 IdleAllowUserControl 或 WakeAllowUserControl并将 Enabled 成员设置为 WdfTrue 或 WdfUseDefault 时,框架才会检查 WdfDefaultInWorkingState 和 WdfDefault 注册表值。