[僅適用於 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 回呼函式的詳細資訊,請參閱 服務中斷。
需求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
最低 KMDF 版本 | 1.0 |
標題 | wdfdpc.h (包括 Wdf.h) |
IRQL | DISPATCH_LEVEL |