IO_TIMER_ROUTINE回调函数 (wdm.h)
IoTimer 例程是一个 DPC,如果已注册,则每秒调用一次。
语法
IO_TIMER_ROUTINE IoTimerRoutine;
void IoTimerRoutine(
[in] _DEVICE_OBJECT *DeviceObject,
[in, optional] PVOID Context
)
{...}
参数
[in] DeviceObject
调用方提供的指向 DEVICE_OBJECT 结构的指针。 这是目标设备的设备对象,以前由驱动程序的 AddDevice 例程创建。
[in, optional] Context
调用方提供的指向驱动程序定义的上下文信息的指针,在上一次调用 IoInitializeTimer中指定的。
返回值
没有
言论
驱动程序的 IoTimer 例程在 DPC 上下文中执行,at IRQL = DISPATCH_LEVEL。
驱动程序可以将 IoTimer 例程与创建的每个设备对象相关联。 (可以将单个 IoTimer 例程与多个设备对象一起使用,或者对每个设备对象使用单独的例程。若要注册 IoTimer 例程,驱动程序必须调用 IoInitializeTimer,并提供 IoTimer 例程的地址和设备对象指针。
若要将 IoTimer 例程排队以供执行,驱动程序例程必须调用 IoStartTimer。 系统每秒调用一次 IoTimer 例程,直到驱动程序调用 IoStopTimer。
有关 IoTimer 例程的详细信息,请参阅 IoTimer 例程。
例子
若要定义 IoTimer 回调例程,必须先提供一个函数声明来标识要定义的回调例程的类型。 Windows 为驱动程序提供一组回调函数类型。 使用回调函数类型声明函数有助于 驱动程序代码分析、静态驱动程序验证程序(SDV)和其他验证工具查找错误,这是为 Windows作系统编写驱动程序的要求。
例如,若要定义名为 MyIoTimer
的 IoTimer 回调例程,请使用IO_TIMER_ROUTINE类型,如以下代码示例所示:
IO_TIMER_ROUTINE MyIoTimer;
然后,按如下所示实现回调例程:
_Use_decl_annotations_
VOID
MyIoTimer(
struct DEVICE_OBJECT *DeviceObject,
PVOID Context
)
{
// Function body
}
IO_TIMER_ROUTINE函数类型在 Wdm.h 头文件中定义。 若要在运行代码分析工具时更准确地识别错误,请务必将 _Use_decl_annotations_
注释添加到函数定义。
_Use_decl_annotations_
批注可确保使用应用于头文件中IO_TIMER_ROUTINE函数类型的批注。 有关函数声明要求的详细信息,请参阅 使用 WDM 驱动程序的函数角色类型来声明函数。 有关 _Use_decl_annotations_
的信息,请参阅 批注函数行为。
要求
要求 | 价值 |
---|---|
目标平台 | 桌面 |
标头 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
IRQL | 在DISPATCH_LEVEL调用(请参阅“备注”部分)。 |