keSetTimer 函数 (wdm.h)

KeSetTimer 例程将计时器对象设置为信号状态的绝对或相对间隔,并选择性地提供 CustomTimerDpc 例程,该间隔到期时要执行。

语法

BOOLEAN KeSetTimer(
  [in, out]      PKTIMER       Timer,
  [in]           LARGE_INTEGER DueTime,
  [in, optional] PKDPC         Dpc
);

参数

[in, out] Timer

指向使用 KeInitializeTimerKeInitializeTimerEx 初始化的计时器对象的指针。

[in] DueTime

指定计时器过期的绝对时间或相对时间。 如果 DueTime 参数的值为负值,则过期时间相对于当前系统时间。 否则,过期时间是绝对的。 过期时间以系统时间单位表示 (100 纳秒间隔) 。 绝对过期时间跟踪系统时间中的任何更改;相对过期时间不受系统时间更改的影响。

[in, optional] Dpc

指向由 KeInitializeDpc 初始化的 DPC 对象的指针。 此参数可选。

返回值

如果计时器对象已在系统计时器队列中, KeSetTimer 将返回 TRUE

注解

KeSetTimer 例程执行以下操作:

  • 计算过期时间。

  • 将计时器设置为无信号状态。

  • 在系统计时器队列中插入计时器对象。

如果计时器对象已在计时器队列中,则会在设置为新的过期时间之前隐式取消该对象。 在先前指定的 DueTime 过期之前调用 KeSetTimer 会取消计时器和对与上一个调用关联的 Dpc(如果有)的调用。

如果指定 了 Dpc 参数,则 DPC 对象与计时器对象相关联。 当计时器过期时,计时器对象将从系统计时器队列中删除,并且其状态设置为“已发出信号”。 如果 DPC 对象在设置计时器时与计时器相关联,则将 DPC 对象插入系统 DPC 队列中,在计时器间隔到期后,只要条件允许,就会立即执行该对象。

过期时间相对于系统时钟进行度量,操作系统在计时器过期时可以检测到的准确度受系统时钟粒度的限制。 有关详细信息,请参阅 计时器准确性

在任何给定时刻,只能对给定 DPC 对象的一个实例化进行排队。 为了避免潜在的争用情况,传递给 KeSetTimer 的 DPC 不应传递给 KeInsertQueueDpc

驱动程序必须取消其 Unload 例程中的任何活动计时器。 使用 KeCancelTimer 取消任何计时器。

KeSetTimer 的调用方可以为计时器指定一个过期时间。 若要设置定期计时器,请使用 KeSetTimerEx

有关计时器对象的详细信息,请参阅 计时器对象和 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)

另请参阅

KeCancelTimer

KeInitializeDpc

KeInitializeTimer

KeInitializeTimerEx

KeReadStateTimer

KeSetTimerEx

KeWaitForMultipleObjects