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

指定满足 ConservationIdleTimePerformanceIdleTime 时,在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 的后续调用会更改空闲检测值。

如果 ConservationIdleTimePerformanceIdleTime 均为零,则此例程将取消设备的所有空闲检测并返回 NULL。

PoRegisterDeviceForIdleDetection 使驱动程序无需执行其自己的空闲检测。 但是,驱动程序也可以实现自己的空闲检测。

要求

要求
最低受支持的客户端 Windows 2000
目标平台 通用
标头 ntifs.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= APC_LEVEL

另请参阅

IRP

IRP_MN_SET_POWER

PoSetDeviceBusy