EVT_WDF_DPC回调函数 (wdfdpc.h)

[仅适用于 KMDF]

驱动程序的 EvtDpcFunc 回调函数在 IRQL = DISPATCH_LEVEL 执行驱动程序定义的操作。

语法

EVT_WDF_DPC EvtWdfDpc;

void EvtWdfDpc(
  [in] WDFDPC Dpc
)
{...}

参数

[in] Dpc

框架 DPC 对象的句柄。

返回值

备注

若要注册 EvtDpcFunc 回调函数,驱动程序必须将函数的地址置于 WDF_DPC_CONFIG 结构中,并调用 WdfDpcCreate

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

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

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

若要计划 EvtDpcFunc 回调函数的执行,驱动程序必须调用 WdfDpcEnqueue。 驱动程序通常从 EvtInterruptIsr 回调函数调用 WdfDpcEnqueue

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

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

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

若要获取 DPC 对象的父对象的句柄, EvtDpcFunc 回调函数可以调用 WdfDpcGetParentObject。 若要获取指向 DPC 对象的基础 KDPC 结构的指针, EvtDpcFunc 回调函数可以调用 WdfDpcWdmGetDpc

有关使用 EvtDpcFunc 回调函数的详细信息,请参阅 维护中断

要求

要求
目标平台 通用
最低 KMDF 版本 1.0
标头 wdfdpc.h (包括 Wdf.h)
IRQL DISPATCH_LEVEL

另请参阅

EvtInterruptDpc

EvtInterruptIsr

WDF_DPC_CONFIG

WdfDpcCreate

WdfDpcEnqueue

WdfDpcGetParentObject

WdfDpcWdmGetDpc