KeCancelTimer 函数 (wdm.h)
KeCancelTimer 例程在计时器间隔(如果已设置)过期之前取消对计时器对象进行排队。
语法
BOOLEAN KeCancelTimer(
[in, out] PKTIMER unnamedParam1
);
参数
[in, out] unnamedParam1
指向调用方为其提供存储的已初始化计时器对象的指针。
返回值
如果指定的计时器对象位于系统计时器队列中,则 KeCancelTimer 返回 TRUE。
言论
如果计时器对象当前位于系统计时器队列中,则会将其从队列中删除。 如果 DPC 对象与计时器关联,也会取消它。 否则,不执行任何作。
如果计时器仍在计时器队列中,则例程返回 TRUE。 一旦非性能计时器过期,就会从系统队列中删除。 因此,对于非性能计时器,KeCancelTimer 如果计时器 DPC 已排队,则返回 FALSE。 定期计时器始终位于计时器队列中,因此,KeCancelTimer 始终返回定期计时器 TRUE。
请注意,正在运行的 DPC 将运行到完成。 驱动程序必须确保 DPC 在释放 DPC 使用的任何资源之前已完成。 对于非性能计时器,可以使用同步基元(如事件对象)在驱动程序和 DPC 之间同步。 驱动程序可以检查 KeCancelTimer 的返回代码,以确定 DPC 是否正在运行。 如果是这样,DPC 可以在退出之前向事件发出信号,驱动程序可以等待该事件重置为未发出信号的状态。
由于对于定期计时器 KeCancelTimer 始终返回 TRUE,驱动程序必须使用不同的技术等待 DPC 完成。 使用 KeFlushQueuedDpcs 例程阻止,直到 DPC 执行。
驱动程序不需要同步存储在全局变量或驱动程序对象扩展中的数据。 在解除分配其中任一区域之前,系统会自动调用 KeFlushQueuedDpcs。
有关计时器对象的详细信息,请参阅 计时器对象和 DPC。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 2000 开始可用。 |
目标平台 | 普遍 |
标头 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 符合性规则 | HwStorPortProhibitedDIs(storport),IrqlKeDispatchLte(wdm) |