共用方式為


EVT_WDF_INTERRUPT_ISR回呼函式 (wdfinterrupt.h)

[適用於 KMDF 和 UMDF]

驅動程式的 EvtInterruptIsr 事件回呼函式會服務硬體中斷。

語法

EVT_WDF_INTERRUPT_ISR EvtWdfInterruptIsr;

BOOLEAN EvtWdfInterruptIsr(
  [in] WDFINTERRUPT Interrupt,
  [in] ULONG MessageID
)
{...}

參數

[in] Interrupt

架構中斷物件的句柄。

[in] MessageID

如果裝置使用訊息訊號中斷 (MSIS),此參數就是識別裝置硬體中斷訊息的訊息編號。 否則,此值為 0。

返回值

如果函式服務硬體中斷,EvtInterruptIsr 回呼函式必須傳回 true TRUE。 否則,此函式必須傳回 FALSE

備註

若要註冊 EvtInterruptIsr 回呼函式,您的驅動程式必須先將回呼函式的位址放在 WDF_INTERRUPT_CONFIG 結構中,才能呼叫 WdfInterruptCreate

EvtInterruptIsr 回呼函式是架構型驅動程式的中斷服務例程 (ISR),會在硬體中斷發生時呼叫。

如果中斷不是來自這個 EvtInterruptIsr 回呼函式服務的硬體,驅動程式必須傳回 false 。 如果正在共享中斷向量,系統會呼叫另一個中斷服務例程。

如果驅動程式尚未要求中斷物件的被動層級處理,則在呼叫 EvtInterruptIsr 回呼函式之前,架構會將處理器的 IRQL 提高到裝置的 IRQL (DIRQL),並取得中斷物件 WDF_INTERRUPT_CONFIG 結構中指定的驅動程式所指定的微調鎖定。

因為 EvtInterruptIsr 回呼函式在相對較高的 IRQL 上執行,所以它可以呼叫極少數的架構物件方法或系統例程。 此外,此回呼函式無法存取可分頁 程式代碼

一般而言,EvtInterruptIsr 回呼函式會清除硬體中斷,並儲存回呼函式傳回後可能遺失的任何資訊,而系統會降低 IRQL(因為降低 IRQL 可讓其他中斷發生)。 架構型驅動程式會在中斷物件的 內容空間中儲存中斷的相關信息,

驅動程式通常會提供 EvtInterruptDpc 回呼函式,以在較低的 IRQL 處理已儲存的資訊。 (有幾個驅動程式提供一或多個 EvtDpcFunc 回呼函式,而不是 EvtInterruptDpc 回呼函式。如需排程執行 EvtInterruptDpc 回呼函式的相關信息,請參閱 維護中斷

EvtInterruptIsr 回呼函式必須能夠在 EvtInterruptDpc 回呼函式執行之前,服務數個中斷。 因此,驅動程式可能必須儲存來自數個中斷的中斷數據,而 EvtInterruptIsrEvtInterruptDpc 回呼函式,可能必須判斷驅動程式已完全處理哪些中斷數據,且尚未處理。

從 KMDF 1.11 版開始,您的驅動程式可以提供 被動層級中斷處理。 如果驅動程式已要求中斷物件的被動層級處理,則在呼叫該中斷的 EvtInterruptIsr IRQL = PASSIVE_LEVEL回呼函式之前,架構會取得驅動程式在中斷物件 WDF_INTERRUPT_CONFIG 結構中設定的被動層級中斷鎖定。 如同在 DIRQL 的中斷處理,驅動程式的 EvtInterruptIsr 函式仍應儲存中斷的相關信息,以供稍後處理。

支援被動層級中斷處理的驅動程式可以提供 EvtInterruptWorkItemEvtInterruptDpc 回呼函式來處理儲存的資訊。

如需在架構型驅動程式中處理中斷的詳細資訊,請參閱 處理硬體中斷

需求

要求 價值
目標平臺 普遍
最低 KMDF 版本 1.0
最低 UMDF 版本 2.0
標題 wdfinterrupt.h (包括 Wdf.h)
IRQL (請參閱一節。

另請參閱

EvtDpcFunc

EvtInterruptDpc

WDF_INTERRUPT_CONFIG

WdfInterruptCreate

WdfInterruptGetDevice

WdfInterruptGetInfo

WdfInterruptWdmGetInterrupt