KSERVICE_ROUTINE回调函数 (wdm.h)

ISR (InterruptService 例程) 快速为设备中断提供服务,并在必要时计划接收数据的中断后处理。

语法

KSERVICE_ROUTINE KserviceRoutine;

BOOLEAN KserviceRoutine(
  [in] _KINTERRUPT *Interrupt,
  [in] PVOID ServiceContext
)
{...}

参数

[in] Interrupt

调用方提供的指向中断的 KINTERRUPT 结构的指针。

[in] ServiceContext

调用方提供的指向上下文信息的指针,在对 IoConnectInterrupt 或 IoConnectInterruptEx 的先前调用中指定。

返回值

如果例程确定中断不是来自驱动程序的某个设备,则必须返回 FALSE。 否则,例程必须为中断提供服务并返回 TRUE

注解

若要为特定的中断矢量和处理器相关性注册 ISR,驱动程序必须调用 IoConnectInterruptIoConnectInterruptEx

驱动程序的 InterruptService 例程 (ISR) 在某个系统分配的 DIRQL 中断上下文中执行,由 IoConnectInterruptSynchronizeIrql 参数指定。 (DIRQL 值较高的其他设备可能会中断 ISR.)

在系统调用 ISR 之前,它将获取中断的旋转锁 (SpinLock 参数到 IoConnectInterrupt) ,因此 ISR 不能在另一个处理器上同时执行。 ISR 返回后,系统会释放旋转锁。

ISR 必须首先通过检查 Context 提供的上下文信息来确定中断是否来自驱动程序的某个设备。 如果中断不是来自驱动程序的某个设备,则例程必须立即返回 FALSE ,以便 I/O 管理器可以调用为同一处理器和中断向量注册了 ISR 的其他驱动程序。

有关实现 ISR 的详细信息,请参阅 中断服务例程

示例

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

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

KSERVICE_ROUTINE MyInterruptService;

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

_Use_decl_annotations_
BOOLEAN
  MyInterruptService(
    struct _KINTERRUPT  *Interrupt,
    PVOID  ServiceContext
    )
  {
      // Function body
  }

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

要求

要求
目标平台 桌面
标头 wdm.h(包括 Wdm.h、Ntddk.h、Ntifs.h)
IRQL 在 DIRQL (调用,请参阅) “备注”部分。