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

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

返回值

如果函数服务硬件中断,则 EvtInterruptIsr 回调函数必须返回 true 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 回调函数的信息,请参阅 维护中断

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

从 KMDF 版本 1.11 开始,驱动程序可以提供 被动级中断处理。 如果驱动程序已请求对中断对象进行被动级别处理,则在调用中断的 EvtInterruptIsr IRQL = PASSIVE_LEVEL 回调函数之前,框架将获取驱动程序在中断对象的 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