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 例程。
计时器对象是可等待的对象。 驱动程序线程可以调用例程,例如 KeWaitForSingleObject 或 KeWaitForMultipleObjects 等待计时器过期。 计时器过期时,作系统会向计时器对象发出信号。
计时器可能会在计时器过期之前取消。 驱动程序可以调用 ExCancelTimer 例程来显式取消计时器。 如果驱动程序调用 ExSetTimer 例程以在此对象上设置计时器过期之前启动计时器对象的新计时器,则此调用会隐式取消上一个计时器,然后启动新的计时器。
ExTimerCallback 例程可以调用例程,例如 ExSetTimer 或 ExDeleteTimer。 如果 ExTimerCallback 例程调用 ExDeleteTimer,则此调用中提供的 Wait 参数必须 FALSE。 有关详细信息,请参阅 删除 System-Allocated 计时器对象。
在多处理器系统中,对于定期计时器的两个连续过期,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调用。 |