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、ExCancelTimer 和 ExDeleteTimer 例程的后续调用中提供此指针。 如果驱动程序提供指向 ExTimerCallback 回调例程的指针作为 ExAllocateTimer 例程的输入参数,则操作系统将此计时器对象作为输入参数传递给 ExTimerCallback 例程。
计时器可以是通知计时器,也可以是同步计时器。 当通知计时器发出信号时,所有等待线程都满足其等待。 此计时器的状态将保持信号状态,直到显式重置。 当同步计时器过期时,其状态将设置为已发出信号,直到释放单个等待线程。 然后,计时器将重置为无信号状态。
如果在属性中设置了EX_TIMER_HIGH_RESOLUTION标志位,操作系统会根据需要增加系统时钟的分辨率,以便计时器过期的时间更准确地对应于在 ExSetTimer 例程的 DueTime 和 Period 参数中指定的名义过期时间。 有关详细信息,请参阅 高分辨率计时器。
如果在 “属性”中设置了EX_TIMER_NO_WAKE标志位,则计时器将避免不必要地将处理器从低功耗状态唤醒。 有关详细信息,请参阅 无唤醒计时器。
ExAllocateTimer 为计时器对象分配存储。 当不再需要此对象时,调用方负责通过调用 ExDeleteTimer 例程释放此对象。
Callback 参数是可选的。 不提供 ExTimerCallback 例程的驱动程序可以改为对计时器对象启动等待操作。 驱动程序线程可以调用 KeWaitForSingleObject 或 KeWaitForMultipleObjects 等例程来等待计时器过期。 计时器过期时,会向计时器对象发出信号。
有关详细信息,请参阅 ExXxxTimer 例程和EX_TIMER对象。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从Windows 8.1开始可用。 |
目标平台 | 通用 |
标头 | wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h) |
Library | Ntoskrnl.lib |
IRQL | <= DISPATCH_LEVEL |