选择加入即时空闲超时

本主题讨论当不再需要电源时,Windows 8 驱动程序可用于选择即时断电状态的 ImmediateIdle 注册表值。

除了 PortCls Registry Power Settings 中讨论的默认电源设置外,Windows 8 还引入了一个也位于关联驱动程序的 PowerSettings 注册表项中的 ImmediateIdle 注册表值。

此 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 状态的设备电源 IRP。 如果未提供状态,则使用 D3 的默认值。

如果驱动程序选择加入即时空闲电源管理,则必须确保系统的电源引擎插件 (PEP) 包含防止不必要且持续为连续接收的 IRP 启动和关闭适配器所需的逻辑。 应应用一些驻留规则,以针对批次 I/O 请求使设备保持通电。

此外,Windows 7 中引入的接口允许驱动程序以编程方式启用或禁用空闲电源管理,当驱动程序未选择加入即时空闲电源管理时,仍会继续得到遵循。 这是通过 IPortClsPower::SetIdlePowerManagement 方法完成的,并且会替代注册表中的设置,除非 ImmediateIdle 设置为 1 (TRUE)。