EVT_WDF_INTERRUPT_ISR回调函数 (wdfinterrupt.h)

[适用于 KMDF 和 UMDF]

驱动程序的 EvtInterruptIsr 事件回调函数为硬件中断提供服务。

语法

EVT_WDF_INTERRUPT_ISR EvtWdfInterruptIsr;

BOOLEAN EvtWdfInterruptIsr(
  [in] WDFINTERRUPT Interrupt,
  [in] ULONG MessageID
)
{...}

参数

[in] Interrupt

框架中断对象的句柄。

[in] MessageID

如果设备使用消息信号中断 (MSI) ,则此参数是标识设备硬件中断消息的消息编号。 否则,此值为 0。

返回值

如果函数为硬件中断提供服务, 则 EvtInterruptIsr 回调函数必须返回 TRUE 。 否则,此函数必须返回 FALSE

注解

若要注册 EvtInterruptIsr 回调函数,驱动程序必须在调用 WdfInterruptCreate 之前将回调函数的地址置于 WDF_INTERRUPT_CONFIG 结构中。

EvtInterruptIsr 回调函数是基于框架的驱动程序中断服务例程, (ISR) ,在发生硬件中断时调用该例程。

如果中断不是来自此 EvtInterruptIsr 回调函数服务的硬件,则驱动程序必须返回 FALSE。 如果正在共享中断向量,系统会调用另一个中断服务例程。

如果驱动程序尚未请求中断对象的被动级别处理,则在调用 EvtInterruptIsr 回调函数之前,框架会将处理器的 IRQL 提升到设备的 IRQL (DIRQL) ,并获取驱动程序在中断对象的 WDF_INTERRUPT_CONFIG 结构中指定的旋转锁。

由于 EvtInterruptIsr 回调函数在相对较高的 IRQL 下执行,因此它可以调用极少数框架对象方法或系统例程。 此外,此回调函数无法访问 可分页 代码。

通常, EvtInterruptIsr 回调函数会清除硬件中断,并保存回调函数返回后可能丢失的任何信息,并且系统会降低 IRQL (,因为降低 IRQL 允许) 发生其他中断。 基于框架的驱动程序将有关中断的信息保存在中断对象的 上下文空间中。

驱动程序通常提供 EvtInterruptDpc 回调函数,以在较低的 IRQL 处处理保存的信息。 (几个驱动程序提供一个或多个 EvtDpcFunc 回调函数而不是 EvtInterruptDpc 回调函数。) 有关计划 EvtInterruptDpc 回调函数以供执行的信息,请参阅 服务中断

在 EvtInterruptDpc 回调函数执行之前,EvtInterruptIsr 回调函数必须能够处理多个中断。 因此,驱动程序可能必须存储来自多个中断的中断数据, EvtInterruptIsrEvtInterruptDpc 回调函数可能必须确定驱动程序已完全处理哪些中断数据,哪些中断数据尚未处理。

从 KMDF 版本 1.11 开始,驱动程序可以提供 被动级别中断处理。 如果驱动程序已请求中断对象的被动级别处理,则在 IRQL = PASSIVE_LEVEL 调用该中断的 EvtInterruptIsr 回调函数之前,框架会获取驱动程序在中断对象的 WDF_INTERRUPT_CONFIG 结构中配置的被动级别中断锁。 与 DIRQL 中的中断处理一样,驱动程序的 EvtInterruptIsr 函数仍应保存有关中断的信息,以供以后处理。

支持被动级别中断处理的驱动程序可以提供 EvtInterruptWorkItemEvtInterruptDpc 回调函数来处理保存的信息。

有关在基于框架的驱动程序中处理中断的详细信息,请参阅 处理硬件中断

要求

要求
目标平台 通用
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
标头 wdfinterrupt.h (包括 Wdf.h)
IRQL (请参见“备注”部分。)

另请参阅

EvtDpcFunc

EvtInterruptDpc

WDF_INTERRUPT_CONFIG

WdfInterruptCreate

WdfInterruptGetDevice

WdfInterruptGetInfo

WdfInterruptWdmGetInterrupt