用户控制设备空闲和唤醒模式

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

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

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

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

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

如果用户修改了设备的设置,框架会更新设备的电源状态以匹配新设置(如有必要)。 例如,如果用户在设备处于低功率状态时禁用设备的空闲停电功能,因为它处于空闲状态,框架会将设备返回到其工作状态。

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

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

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

仅当驱动程序在适当的设置结构中将 UserControlOfIdleSettingsUserControlOfWakeSettings 成员设置为 IdleAllowUserControlWakeAllowUserControl,并将 Enabled 成员设置为 WdfTrueWdfUseDefault 时,该框架才会检查 WdfDefaultIdleInWorkingStateWdfDefaultWakeFromSleepState 注册表值。