共用方式為


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

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

傳回值

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

備註

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

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

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

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

規格需求

需求
目標平台 Universal
最小 KMDF 版本 1.0
最低UMDF版本 2.0
標頭 wdfinterrupt.h (包含 Wdf.h)
IRQL (請參閱<註解>區段)。

另請參閱

EvtDpcFunc

EvtInterruptDpc

WDF_INTERRUPT_CONFIG

WdfInterruptCreate

WdfInterruptGetDevice

WdfInterruptGetInfo

WdfInterruptWdmGetInterrupt