本主题讨论当不再需要电源时,Windows 驱动程序可用于选择立即关闭电源状态的 ImmediateIdle 注册表值。
除了 PortCls 注册表电源设置中讨论的默认电源设置外,Windows 8 还引入了一个 ImmediateIdle 注册表值,该值也位于关联的驱动程序的 PowerSettings 注册表项中。
此 inf 文件演示如何设置 ImmediateIdle。
[MyAudioDevice.AddReg]
HKR,PowerSettings,ImmediateIdle,%REG_BINARY%, 0x00, 0x00, 0x00, 0x00
ImmediateIdle 的数据类型为 REG_DWORD,其默认值为“0”,相当于 FALSE。 在前面的语法片段中,十六进制值“0”表示设备在不再需要电源时不会立即关闭电源。
为使驱动程序选择立即关闭电源状态,当不再需要电源时,必须使用以下语法:
[MyAudioDevice.AddReg]
HKR,PowerSettings,ImmediateIdle,%REG_BINARY%, 0x01, 0x00, 0x00, 0x00
在前面的示例中,“1”的十六进制值等同于 TRUE,这意味着当不再需要电源时,设备将立即关闭电源。
当运行时电源管理框架调用 DevicePowerRequired 方法的回调时,指示设备不再需要电源时,PortCls 会请求 IdlePowerState 注册表值指示的 D 状态的设备 Power IRP。 如果未提供状态,则使用默认值 D3。
如果驱动程序选择立即空闲电源管理,则必须确保系统的电源引擎插件(PEP)包含防止不必要且持续为连续接收的 IRP 启动和关闭适配器所需的逻辑。 应应用一些驻留规则,以使设备为一批 I/O 请求提供动力。
此外,Windows 7 中引入的接口允许驱动程序以编程方式启用或禁用空闲电源管理,当驱动程序未选择立即空闲电源管理时,仍会继续受到尊重。 这是通过 IPortClsPower::SetIdlePowerManagement 方法完成的,并且会替代注册表中的设置,但 ImmediateIdle 设置为 1(TRUE)。