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

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

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

要求

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

另请参阅

KeCancelTimer

KeInitializeDpc

KeInitializeTimer

KeInitializeTimerEx

KeReadStateTimer

KeWaitForMultipleObjects

KeWaitForSingleObject