PoQueryWatchdogTime 函数 (wdm.h)
PoQueryWatchdogTime 例程指示电源管理器是否为当前分配给设备堆栈的任何电源 IRP 启用了监视器超时计数器。
语法
BOOLEAN PoQueryWatchdogTime(
[in] PDEVICE_OBJECT Pdo,
[out] PULONG SecondsRemaining
);
参数
[in] Pdo
指向物理设备对象的指针 (PDO) 。 此参数指向表示物理设备的 DEVICE_OBJECT 结构。
[out] SecondsRemaining
指向例程将时间(以秒为单位)写入的位置的指针,该时间在设置下一个电源监视器超时之前保留。
返回值
如果当前已将已启用监视器的电源 IRP 分配给设备堆栈,则 PoQueryWatchdogTime 返回 TRUE。 否则,它将返回 FALSE。
注解
此例程使内核模式驱动程序能够监视监视器超时计数器,这些计数器由电源管理器启用,以跟踪其发出的电源 IRP。 如果当前启用了一个或多个监视器超时计数器,则例程将返回 TRUE 并提供下一次超时之前剩余的时间量。
例如,在关闭设备时遇到延迟的驱动程序可以调用此例程来确定驱动程序必须响应电源 IRP 之前剩余的时间,以防止受控关闭 (操作系统的 bug 检查) 。
电源管理器在向设备堆栈发出电源 IRP 时设置监视器超时计数器。 此计数器的超时期限通常为几分钟。 如果堆栈中的设备无响应并导致 IRP 在超时期限内停止,则电源管理器会将这种情况视为不可恢复的错误,并启动操作系统的受控关闭。
如果当前启用了多个电源监视器超时,则例程会将 *SecondsRemaining 设置为保留到下一次超时的时间。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从 Windows 7 开始可用。 |
目标平台 | 通用 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
Library | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |