KeCancelTimer 函数 (wdm.h)

KeCancelTimer 例程在计时器间隔(如果已设置)过期之前将计时器对象取消排队。

语法

BOOLEAN KeCancelTimer(
  [in, out] PKTIMER unnamedParam1
);

参数

[in, out] unnamedParam1

指向初始化的计时器对象的指针,调用方为其提供存储。

返回值

如果指定的计时器对象在系统计时器队列中, KeCancelTimer 将返回 TRUE

注解

如果计时器对象当前位于系统计时器队列中,则会将其从队列中删除。 如果 DPC 对象与计时器相关联,则也会取消该对象。 否则,不会执行任何操作。

如果计时器仍在计时器队列中,则例程返回 TRUE 。 非periodic 计时器在过期后立即从系统队列中删除。 因此,对于非长期计时器,如果计时器 DPC 已排队, KeCancelTimer 将返回 FALSE 。 定期计时器始终位于计时器队列中,因此 KeCancelTimer 始终为定期计时器返回 TRUE

请注意,已运行的 DPC 将运行到完成。 在释放 DPC 使用的任何资源之前,驱动程序必须确保 DPC 已完成。 对于非periodic 计时器,可以使用同步基元(如事件对象)在驱动程序和 DPC 之间同步。 驱动程序可以检查 KeCancelTimer 的返回代码,以确定 DPC 是否正在运行。 如果是这样,DPC 可以在退出前发出事件信号,驱动程序可以等待该事件重置为未发出信号的状态。

由于对于定期计时器 ,KeCancelTimer 始终返回 TRUE,驱动程序必须使用其他技术等待 DPC 完成。 使用 KeFlushQueuedDpcs 例程阻止,直到执行 DPC。

驱动程序不需要同步存储在全局变量或驱动程序对象扩展中的数据。 在解除分配其中任一区域之前,系统会自动调用 KeFlushQueuedDpcs

有关计时器对象的详细信息,请参阅 计时器对象和 DPC

要求

要求
最低受支持的客户端 从 Windows 2000 开始可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDI (storport) IrqlKeDispatchLte (wdm)

另请参阅

KeInitializeTimer

KeReadStateTimer

KeSetTimer