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 版和更新版本中,您的驅動程式可以支援 被動層級中斷 ,並提供 EvtInterruptWorkItem 或 EvtInterruptDpc 回呼函式。 如果您的驅動程式支援被動層級中斷並提供 EvtInterruptDpc 回呼函式,則驅動程式無法從回呼內取得被動層級中斷鎖定。
大部分的驅動程式會針對每種中斷類型使用單一 EvtInterruptDpc 回呼函式。 如果您的驅動程式為每個裝置建立多個 架構佇列物件 ,您可以考慮針對每個佇列使用不同的 DPC 物件 和 EvtDpcFunc 回呼函式。
若要排程 EvtInterruptDpc 回呼函式的執行,驅動程式必須從 EvtInterruptIsr 回呼函式內呼叫 WdfInterruptQueueDpcForIsr。
當驅動程式排程 EvtInterruptDpc 回呼函式的執行時,系統會將 DPC 物件新增至系統的 DPC 佇列。 如果系統未執行較高優先順序的工作,它會從佇列中移除物件,並呼叫 EvtInterruptDpc 回呼函式。
如果物件已排入佇列,系統就不會將 DPC 物件新增至 DPC 佇列。 在系統呼叫 EvtInterruptDpc 回呼函式之前,可能會呼叫 EvtInterruptIsr 回呼函式數次。 因此, EvtInterruptDpc 回呼函式必須能夠處理來自數個中斷的資訊,而且必須處理自上次呼叫后發生的所有中斷。
一般而言,必須同步處理驅動程式 EvtInterruptDpc 回呼函式的執行,以及執行其他回呼函式。 如需詳細資訊,請參閱 同步處理中斷程序代碼。
如需在架構型驅動程式中處理中斷的詳細資訊,請參閱 處理硬體中斷。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
最低 KMDF 版本 | 1.0 |
最低UMDF版本 | 2.0 |
標頭 | wdfinterrupt.h (包含 Wdf.h) |
IRQL | (請參閱<註解>區段)。 |