exAllocateTimer 函数 (wdm.h)

ExAllocateTimer 例程分配并初始化计时器对象。

语法

PEX_TIMER ExAllocateTimer(
  [in, optional] PEXT_CALLBACK Callback,
  [in, optional] PVOID         CallbackContext,
  [in]           ULONG         Attributes
);

参数

[in, optional] Callback

指向驱动程序实现的 ExTimerCallback 回调例程的指针。 当计时器过期时,操作系统会调用此例程。 此参数是可选的,如果不需要回调例程,可以为 NULL

[in, optional] CallbackContext

Callback 参数指向的回调例程的上下文值。 操作系统将此值作为参数传递给 ExTimerCallback 回调例程(如果指定了一个)。 此参数通常是指向调用方定义的结构的指针,该结构包含回调例程使用的上下文信息。 此参数是可选的,如果不需要上下文信息,则可以将其设置为 NULL

[in] Attributes

计时器属性。 将此参数设置为零或以下一个或多个计时器标志位的按位 OR。

计时器标志位 说明
EX_TIMER_HIGH_RESOLUTION 高分辨率计时器。 通过使用更高分辨率的时钟驱动计时器,使计时器更加精确。
EX_TIMER_NO_WAKE 无唤醒计时器。 将唤醒处理器的计时器延迟设置为过期,直到计时器的过期时间加上其延迟容差超出。
EX_TIMER_NOTIFICATION 通知计时器。 使计时器成为通知计时器,而不是同步计时器。 如果未设置此标志,则计时器为同步计时器。
 

无论设置了哪些其他标志位,都可以设置EX_TIMER_NOTIFICATION标志位。

EX_TIMER_HIGH_RESOLUTION和EX_TIMER_NO_WAKE标志位互斥。 如果调用方设置这两个标志位,则例程 bug 会检查。

有关计时器属性的详细信息,请参阅备注。

返回值

如果调用成功,此例程将返回指向 EX_TIMER 结构的指针。 此结构是例程已分配和初始化的计时器对象。 如果调用失败,例程将返回 NULL

注解

此例程返回指向新计时器对象的指针。 若要使用计时器,调用驱动程序会在对 ExSetTimer、ExCancelTimerExDeleteTimer 例程的后续调用中提供此指针。 如果驱动程序提供指向 ExTimerCallback 回调例程的指针作为 ExAllocateTimer 例程的输入参数,则操作系统将此计时器对象作为输入参数传递给 ExTimerCallback 例程。

计时器可以是通知计时器,也可以是同步计时器。 当通知计时器发出信号时,所有等待线程都满足其等待。 此计时器的状态将保持信号状态,直到显式重置。 当同步计时器过期时,其状态将设置为已发出信号,直到释放单个等待线程。 然后,计时器将重置为无信号状态。

如果在属性中设置了EX_TIMER_HIGH_RESOLUTION标志位,操作系统会根据需要增加系统时钟的分辨率,以便计时器过期的时间更准确地对应于在 ExSetTimer 例程的 DueTimePeriod 参数中指定的名义过期时间。 有关详细信息,请参阅 高分辨率计时器

如果在 “属性”中设置了EX_TIMER_NO_WAKE标志位,则计时器将避免不必要地将处理器从低功耗状态唤醒。 有关详细信息,请参阅 无唤醒计时器

ExAllocateTimer 为计时器对象分配存储。 当不再需要此对象时,调用方负责通过调用 ExDeleteTimer 例程释放此对象。

Callback 参数是可选的。 不提供 ExTimerCallback 例程的驱动程序可以改为对计时器对象启动等待操作。 驱动程序线程可以调用 KeWaitForSingleObjectKeWaitForMultipleObjects 等例程来等待计时器过期。 计时器过期时,会向计时器对象发出信号。

有关详细信息,请参阅 ExXxxTimer 例程和EX_TIMER对象

要求

要求
最低受支持的客户端 从Windows 8.1开始可用。
目标平台 通用
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
Library Ntoskrnl.lib
IRQL <= DISPATCH_LEVEL

另请参阅

EX_TIMER

ExCancelTimer

ExDeleteTimer

ExSetTimer

ExTimerCallback