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 上下文中执行,其值为 IRQL = DISPATCH_LEVEL。

驱动程序可以将 IoTimer 例程与其创建的每个设备对象相关联。 (可以将单个 IoTimer 例程与多个设备对象配合使用,也可以对每个设备对象使用单独的例程。) 若要注册 IoTimer 例程,驱动程序必须调用 IoInitializeTimer,并提供 IoTimer 例程的地址和设备对象指针。

若要将 IoTimer 例程排队以供执行,驱动程序例程必须调用 IoStartTimer。 系统每秒调用 IoTimer 例程一次,直到驱动程序调用 IoStopTimer

有关 IoTimer 例程的详细信息,请参阅 IoTimer 例程

示例

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

例如,若要定义名为 MyIoTimerIoTimer 回调例程,请使用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 (请参阅备注部分) 调用。