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
驱动程序以前作为 ExAllocateTimer 例程的 CallbackContext 参数提供的上下文值。
返回值
无
备注
作为一个选项,驱动程序可以在回调参数中提供指向 ExTimerCallback 例程的指针,该参数将驱动程序传递给 ExAllocateTimer 例程。 计时器过期后,操作系统将调用 ExTimerCallback 例程。
若要启动计时器操作,驱动程序会将计时器对象作为输入参数传递给 ExSetTimer 例程。 计时器过期后,操作系统将安排 ExTimerCallback 例程运行。
计时器对象是可等待的对象。 驱动程序线程可以调用 KeWaitForSingleObject 或 KeWaitForMultipleObjects 等例程来等待计时器过期。 当计时器过期时,操作系统会向计时器对象发出信号。
计时器可能会在过期之前取消。 驱动程序可以调用 ExCancelTimer 例程来显式取消计时器。 如果驱动程序调用 ExSetTimer 例程以在此对象上以前设置的计时器过期之前启动计时器对象上的新计时器,则此调用将隐式取消上一个计时器,然后启动新的计时器。
ExTimerCallback 例程可以调用 ExSetTimer 或 ExDeleteTimer 等例程。 如果 ExTimerCallback 例程调用 ExDeleteTimer,则此调用中提供的 Wait 参数必须为 FALSE。 有关详细信息,请参阅 删除 System-Allocated Timer 对象。
在多处理器系统中,定期计时器连续两次过期的 ExTimerCallback 回调可能同时在两个不同的处理器上运行。
有关详细信息,请参阅 ExXxxTimer 例程和EX_TIMER对象。
示例
若要定义 ExTimerCallback 回调例程,必须首先提供一个函数声明,用于标识要定义的回调例程的类型。 Windows 为驱动程序提供了一组回调函数类型。 使用回调函数类型声明函数可帮助 驱动程序的代码分析、 静态驱动程序验证程序 (SDV) 和其他验证工具查找错误,这是编写 Windows 操作系统驱动程序的要求。
例如,若要定义名为 MyExTimerCallback
的 ExTimerCallback 回调例程,请使用 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 调用。 |