IRP_MN_POWER_SEQUENCE
此 IRP 返回设备的电源序列值。
主代码
发送时
驱动程序将此 IRP 作为优化发送,以确定其设备是否实际进入了特定的电源状态。 对此 IRP 的支持是可选的。
若要发送此 IRP,驱动程序必须调用 IoAllocateIrp 来分配 IRP,并指定主要 IRP 代码 IRP_MJ_POWER 和次要 IRP 代码 IRP_MN_POWER_SEQUENCE。 然后,驱动程序必须调用 IoCallDriver (Windows Vista) 或 PoCallDriver (Windows Server 2003、Windows XP 和 Windows 2000) ,才能将 IRP 传递到下一个较低的驱动程序。 电源管理器无法发送此 IRP。
此 IRP 的发送方必须在 IRQL <= DISPATCH_LEVEL 运行。
输入参数
无。
输出参数
Parameters.PowerSequence 指向具有以下成员 的POWER_SEQUENCE 结构:
SequenceD1
设备处于电源状态 D1 或更低状态的次数。
SequenceD2
设备处于电源状态 D2 或更低状态的次数。
序列值跟踪设备处于相应电源状态或较低功率状态的最小次数。
每次设备进入相应的电源状态或较低功率状态时,总线驱动程序都会递增 SequenceD1、 SequenceD2 和 SequenceD3 中的值。
I/O 状态块
驱动程序将 Irp-IoStatus.Status> 设置为 STATUS_SUCCESS 以指示它已返回请求的信息,或将 STATUS_NOT_IMPLEMENTED 设置为指示它不支持此 IRP。
Operation
此 IRP 返回设备的电源序列值。 总线驱动程序可以选择处理它:函数和筛选器驱动程序可以选择发送它。
对于需要很长时间才能更改状态的设备,此 IRP 提供了有用的优化。 每次设备更改其电源状态时,其总线驱动程序都会递增该电源状态的序列值。 总线驱动程序在启动时初始化序列值,并随后不断递增它们;无需将其重置为零。
设备策略所有者可以在关闭设备之前发送一次此 IRP 以获取序列值,并在将电源还原到设备时再次获取新值。 通过比较这两组值,驱动程序可以确定设备是否实际进入了低功率状态。 如果设备未断电,驱动程序可以在设备返回到 D0 状态时避免耗时的重新初始化。
例如,如果设备在达到 D2 状态时需要很长时间才能恢复电源,则驱动程序可以在将设备状态设置为 D2 或更低之前存储 SequenceD2 值。 稍后,当设备恢复电源时,驱动程序可以将新的 SequenceD2 值与其存储值进行比较,以确定设备状态是否实际低于 D2。 如果值匹配,则设备实际上没有进入电源状态 D2 或更低状态,驱动程序可以避免重新初始化设备。
要求
标头 |
Wdm.h(包括 Wdm.h、Ntddk.h 或 Ntifs.h) |