共用方式為


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執行作業,則可以 使用架構工作專案

許多驅動程式不會提供 EvtDpcFunc 回呼函式,而是針對其裝置所支援的每個中斷類型提供單一 EvtInterruptDpc 回呼函式。 如果您的驅動程式為每個裝置建立多個 架構佇列物件 ,您可以考慮針對每個佇列使用不同的 DPC 物件和 EvtDpcFunc 回呼函式。

若要排程 EvtDpcFunc 回呼函式的執行,驅動程式必須呼叫 WdfDpcEnqueue。 驅動程式通常會從 EvtInterruptIsr 回呼函式呼叫 WdfDpcEnqueue

當驅動程式呼叫 WdfDpcEnqueue 時,系統會將 DPC 物件新增至系統的 DPC 佇列。 如果系統未執行較高優先順序的工作,它會從佇列中移除物件,並呼叫物件的 EvtDpcFunc 回呼函式。

如果物件已排入佇列,系統就不會將 DPC 物件新增至 DPC 佇列。 系統呼叫 EvtDpcFunc 回呼函式之前,可能會呼叫 EvtInterruptIsr 回呼函式數次。 因此, EvtDpcFunc 回呼函式必須能夠處理來自數個中斷的資訊,而且必須處理自上次呼叫後發生的所有中斷。

一般而言,必須同步處理驅動程式 EvtDpcFunc 回呼函式的執行,以及執行其他回呼函式。 如需詳細資訊,請參閱 同步處理中斷程序代碼

若要取得 DPC 物件的父物件的句柄, EvtDpcFunc 回呼函式可以呼叫 WdfDpcGetParentObject。 若要取得 DPC 對象基礎 KDPC 結構的指標, EvtDpcFunc 回呼函式可以呼叫 WdfDpcWdmGetDpc

如需使用 EvtDpcFunc 回呼函式的詳細資訊,請參閱 維護中斷

規格需求

需求
目標平台 Universal
最低 KMDF 版本 1.0
標頭 wdfdpc.h (包含 Wdf.h)
IRQL DISPATCH_LEVEL

另請參閱

EvtInterruptDpc

EvtInterruptIsr

WDF_DPC_CONFIG

WdfDpcCreate

WdfDpcEnqueue

WdfDpcGetParentObject

WdfDpcWdmGetDpc