KeSetTimerEx 函数 (wdm.h)

KeSetTimerEx 例程设置计时器对象设置为信号状态的绝对或相对间隔,可以选择提供 CustomTimerDpc 例程,以便在该间隔过期时执行,并选择性地为计时器提供重复间隔。

语法

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

参数

[in, out] Timer

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

[in] DueTime

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

[in] Period

指定计时器的可选重复间隔(以毫秒为单位)。 必须是大于或等于零的值。 如果此参数的值为零,则计时器是一个非长期计时器,不会自动自行重新排队。

[in, optional] Dpc

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

返回值

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

注解

KeSetTimerEx 例程执行以下操作:

  • 计算过期时间。

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

  • 设置计时器的重复间隔(如果已指定)。

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

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

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

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

DPC 例程无法解除分配定期计时器。 DPC 例程可以解除分配非定期计时器。

请注意,定期计时器过期后会自动重启。 因此,在多处理器计算机上,定期计时器的 DPC 可以在两个处理器上同时运行。

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

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

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

KeWaitForMultipleObjects

KeWaitForSingleObject