确定正确的设备电源状态

电源策略所有者检查DEVICE_CAPABILITIES结构中的 DeviceState 数组,以确定每个系统电源状态的设备电源状态的有效范围。 数组列出了基础设备可以为每个系统电源状态支持的最高设备电源状态。

从此范围中选择特定状态时,请考虑以下事项:

  • 大多数设备在系统进入 S0 状态时进入 D0 状态。

  • 大多数设备在系统进入任何睡眠状态时进入 D3 状态。 但是,启用唤醒的设备可能需要改为输入 D1 或 D2(如果它支持此类状态)。 有关详细信息,请参阅 报告设备电源功能

  • 特殊规则适用于将保存休眠文件的设备。 如果系统 IRP 请求 PowerSystemHibernate,则保存休眠文件的设备不得关闭电源。 此类设备的电源策略所有者应请求设备电源状态 D3 并保存上下文,但设备的驱动程序不得关闭设备电源。

如果系统 IRP 请求 PowerSystemShutdown,驱动程序应检查 Irp-Parameters.Power.ShutdownType> 中的POWER_ACTION值,以确定状态更改的原因。 有关详细信息,请参阅 系统电源操作

即使设备已处于正确的设备电源状态,设备电源策略所有者也必须为每个系统设置电源 IRP 发送设备集电源 IRP。 如果驱动程序之前暂停了设备操作以响应查询电源 IRP,则设置电源 IRP 会通知它停止排队 IRP,并针对其当前电源状态恢复正常操作。 当设备处于 D3 状态时,会发生唯一的异常;在这种情况下,驱动程序无需发送针对 D3 的其他 IRP_MN_SET_POWER 请求。