poRegisterDeviceForIdleDetection 函数 (ntifs.h)
PoRegisterDeviceForIdleDetection 例程启用或取消空闲检测,并为设备设置空闲超时值。
语法
PULONG PoRegisterDeviceForIdleDetection(
[in] PDEVICE_OBJECT DeviceObject,
[in] ULONG ConservationIdleTime,
[in] ULONG PerformanceIdleTime,
[in] DEVICE_POWER_STATE State
);
参数
[in] DeviceObject
指向驱动程序为设备创建的 DEVICE_OBJECT 的指针。 此参数可以指向 PDO) (物理设备对象,也可以指向 FDO) (功能设备对象。
[in] ConservationIdleTime
设置系统电源策略优化节能时应用的超时值 (秒) 。 指定零以在保护策略生效时禁用空闲检测。
[in] PerformanceIdleTime
设置系统电源策略针对性能进行优化时应用的超时值 (秒) 。 指定零以在性能策略生效时禁用空闲检测。
[in] State
指定满足 ConservationIdleTime 或 PerformanceIdleTime 时,在IRP_MN_SET_POWER请求中请求的设备电源状态。 可能的值为 DEVICE_POWER_STATE 值。
返回值
PoRegisterDeviceForIdleDetection 返回指向空闲计数器的指针,以指示已启用空闲检测。 它返回 NULL 指示已禁用空闲检测、无法分配空闲计数器,或者一个或两个超时值无效。
注解
PoRegisterDeviceForIdleDetection 使驱动程序能够使用 电源管理器提供的空闲检测机制。 驱动程序出于以下任一原因调用 PoRegisterDeviceForIdleDetection :
- 为设备启用空闲检测并设置初始空闲超时值。
- 更改设备的空闲超时值。
- 禁用设备的空闲检测。
启用设备进行空闲检测后,驱动程序会在设备处于使用状态时调用 PoSetDeviceBusy ,传递 PoRegisterDeviceForIdleDetection 返回的非 NULL 空闲指针。 调用 PoSetDeviceBusy 会重启空闲倒计时。 请注意,驱动程序不得将 NULL 指针传递给 PoSetDeviceBusy。
每当设备满足当前空闲超时值时,电源管理器就会向设备堆栈顶部发送IRP_MN_SET_POWER请求,指定设备电源状态。 为了响应 IRP,每个驱动程序在电源状态转换之前执行任何特定于设备的任务,然后将 IRP 传递给下一个较低的驱动程序。 当 IRP 到达总线驱动程序时,该驱动程序会将设备置于所请求的较低功率状态并完成 IRP。
PoRegisterDeviceForIdleDetection 为保护和性能设置超时值。 当系统电源策略针对保护进行优化时,会应用 ConservationIdleTime 值;当系统电源策略针对性能进行优化时, 将应用 PerformanceIdleTime 值。 通常,适用的策略取决于电源:当使用交流电源运行时,系统优化性能,当耗尽电池时,系统会针对节能进行优化。
某些设备可以将超时值指定为 -1,以对其设备类使用标准电源策略超时值。 标准超时值为受支持的标准设备类提供更好的系统集成。 目前,WDM 支持FILE_DEVICE_DISK和FILE_DEVICE_MASS_STORAGE类型的设备使用此功能。 如果为不受支持的类型的设备指定了 -1,则 PoRegisterDeviceForIdleDetection 返回 NULL。 有关设备类型的信息,请参阅 指定设备类型。
每个设备只能设置一个空闲检测。 对 PoRegisterDeviceForIdleDetection 的后续调用会更改空闲检测值。
如果 ConservationIdleTime 和 PerformanceIdleTime 均为零,则此例程将取消设备的所有空闲检测并返回 NULL。
PoRegisterDeviceForIdleDetection 使驱动程序无需执行其自己的空闲检测。 但是,驱动程序也可以实现自己的空闲检测。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 |
目标平台 | 通用 |
标头 | ntifs.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |