EVT_WDF_INTERRUPT_DPC回调函数 (wdfinterrupt.h)

[适用于 KMDF 和 UMDF]

驱动程序的 EvtInterruptDpc 事件回调函数处理驱动程序的 EvtInterruptIsr 回调函数存储的中断信息。

语法

EVT_WDF_INTERRUPT_DPC EvtWdfInterruptDpc;

void EvtWdfInterruptDpc(
  [in] WDFINTERRUPT Interrupt,
  [in] WDFOBJECT AssociatedObject
)
{...}

参数

[in] Interrupt

框架中断对象的句柄。

[in] AssociatedObject

驱动程序传递给 WdfInterruptCreate 的框架设备对象的句柄。

返回值

备注

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

驱动程序通常在其 EvtInterruptDpc 回调函数中完成 I/O 请求

EvtInterruptDpc 回调函数在DISPATCH_LEVEL执行,不得访问可分页代码。 如果 EvtInterruptDpc 回调函数必须在 IRQL = PASSIVE_LEVEL 执行操作,则可以 使用框架工作项

在 KMDF 版本 1.11 及更高版本中,驱动程序可以支持 被动级别中断 ,并提供 EvtInterruptWorkItemEvtInterruptDpc 回调函数。 如果驱动程序支持被动级别中断并提供 EvtInterruptDpc 回调函数,则驱动程序无法从回调内部获取被动级别中断锁。

大多数驱动程序对每种中断类型使用单个 EvtInterruptDpc 回调函数。 如果驱动程序为每个设备创建多个 框架队列对象 ,则可以考虑为每个队列使用单独的 DPC 对象EvtDpcFunc 回调函数。

若要计划执行 EvtInterruptDpc 回调函数,驱动程序必须从 EvtInterruptIsr 回调函数内部调用 WdfInterruptQueueDpcForIsr

当驱动程序计划 执行 EvtInterruptDpc 回调函数时,系统会将 DPC 对象添加到系统的 DPC 队列。 如果系统未执行优先级较高的任务,则会从队列中删除 对象,并调用 EvtInterruptDpc 回调函数。

如果对象已排队,则系统不会将 DPC 对象添加到 DPC 队列。 在系统调用 EvtInterruptDpc 回调函数之前,可能会多次调用 EvtInterruptIsr 回调函数。 因此, EvtInterruptDpc 回调函数必须能够处理来自多个中断的信息,并且必须处理自上次调用它以来发生的所有中断。

通常,需要将驱动程序的 EvtInterruptDpc 回调函数的执行与其他回调函数的执行同步。 有关详细信息,请参阅 同步中断代码

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

要求

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

另请参阅

EvtDpcFunc

EvtInterruptIsr

WDF_INTERRUPT_CONFIG

WdfInterruptCreate

WdfInterruptQueueDpcForIsr