EXT_CALLBACK回调函数 (wdm.h)

ExTimerCallback 回调例程在 EX_TIMER 计时器对象的时间间隔过期后运行。

语法

EXT_CALLBACK ExtCallback;

void ExtCallback(
  [in] PEX_TIMER Timer,
  [in] PVOID Context
)
{...}

参数

[in] Timer

指向 EX_TIMER 结构的指针。 此结构是以前由 ExAllocateTimer 例程分配的计时器对象。

[in] Context

驱动程序以前作为 CallbackContext 参数提供的 ExAllocateTimer 例程的上下文值。

返回值

没有

言论

作为选项,驱动程序可以在驱动程序传递给 ExAllocateTimer 例程的 Callback 参数中提供指向 ExTimerCallback 例程的指针。 计时器过期后,作系统将调用 ExTimerCallback 例程。

若要启动计时器作,驱动程序会将计时器对象作为输入参数传递给 ExSetTimer 例程。 计时器过期后,作系统会计划运行 ExTimerCallback 例程。

计时器对象是可等待的对象。 驱动程序线程可以调用例程,例如 KeWaitForSingleObjectKeWaitForMultipleObjects 等待计时器过期。 计时器过期时,作系统会向计时器对象发出信号。

计时器可能会在计时器过期之前取消。 驱动程序可以调用 ExCancelTimer 例程来显式取消计时器。 如果驱动程序调用 ExSetTimer 例程以在此对象上设置计时器过期之前启动计时器对象的新计时器,则此调用会隐式取消上一个计时器,然后启动新的计时器。

ExTimerCallback 例程可以调用例程,例如 ExSetTimerExDeleteTimer。 如果 ExTimerCallback 例程调用 ExDeleteTimer,则此调用中提供的 Wait 参数必须 FALSE。 有关详细信息,请参阅 删除 System-Allocated 计时器对象

在多处理器系统中,对于定期计时器的两个连续过期,ExTimerCallback 回调可能会同时在两个不同的处理器上运行。

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

例子

若要定义 ExTimerCallback 回调例程,必须首先提供一个函数声明,用于标识要定义的回调例程的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析静态驱动程序验证程序(SDV)和其他验证工具查找错误,这是为 Windows作系统编写驱动程序的要求。

例如,若要定义名为 MyExTimerCallbackExTimerCallback 回调例程,请使用EXT_CALLBACK函数类型,如以下代码示例所示:

EXT_CALLBACK  MyExTimerCallback;

然后,按如下所示实现回调例程:

_Use_decl_annotations_
VOID
  MyExTimerCallback(
    PEX_TIMER  Timer,
    PVOID  Context
    )
  {...}

EXT_CALLBACK函数类型在 Wdm.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 _Use_decl_annotations_ 注释添加到函数定义。 _Use_decl_annotations_ 批注可确保使用应用于头文件中EXT_CALLBACK函数类型的批注。 有关函数声明要求的详细信息,请参阅 使用 WDM 驱动程序的函数角色类型声明函数。 有关 _Use_decl_annotations_的详细信息,请参阅 批注函数行为

要求

要求 价值
最低支持的客户端 从 Windows 8.1 开始可用。
目标平台 桌面
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
IRQL 在DISPATCH_LEVEL调用。

另请参阅

EX_TIMER

ExAllocateTimer

ExCancelTimer

ExSetTimer

KeWaitForMultipleObjects

KeWaitForSingleObject