共用方式為


建立中斷物件

處理裝置硬體中斷的 Windows Driver Frameworks (WDF) 驅動程式必須為每個裝置可支援的插斷建立架構中斷物件。 在 Windows 8 或更新版本的操作系統上執行的 Framework 版本 1.11 和更新版本中,Kernel-Mode Driver Framework (KMDF) 和 User-Mode Driver Framework (UMDF) 驅動程式可以建立需要 被動層級處理的中斷物件。 除非您要為 System on a Chip (SoC) 平台撰寫驅動程式,否則您的驅動程式應使用 DIRQL 中斷物件。

驅動程式通常會在其 EvtDriverDeviceAdd 回呼函式中建立架構中斷物件。 驅動程式也可以從其 EvtDevicePrepareHardware 回呼函式建立中斷物件。

框架會在隨插即用(PnP)管理員將系統資源(例如中斷向量)指派給裝置之前呼叫驅動程式的EvtDriverDeviceAdd回呼函式。 在 PnP 管理員指派資源之後,架構會將中斷資源儲存在裝置的中斷物件中。 ( 不支援隨插即用 的驅動程式無法使用中斷物件。

若要建立架構中斷物件,您的驅動程式必須初始化 WDF_INTERRUPT_CONFIG 結構,並將其傳遞至 WdfInterruptCreate 方法。

UMDF 支援下列類型的中斷:

  • 層級觸發 (共享或獨佔)
  • 邊沿觸發(僅限獨佔使用)
  • MSI(依定義是獨佔的)

注意 UMDF 不支援 共享 邊緣觸發的中斷。

從 UMDF 2.15 版開始,UMDF 支援簡單裝置(例如由 GPIO 針腳支援的硬體按鈕)的中斷,但這些裝置無法透過使用硬體暫存器來明確啟用或停用。 若要支援這類裝置,UMDF 驅動程式必須使用專屬的邊緣觸發中斷。

從 KMDF 1.15 版開始,KMDF 也支援這類裝置的中斷,而不需要 處理 Active-Both 中斷中所述的因應措施。

另外,在 WDF_INTERRUPT_CONFIG中,您的驅動程式會提供下列事件回呼函式的指標:

EvtInterruptEnable
啟用硬體中斷。

EvtInterrupt停用
停用硬體中斷。

EvtInterruptIsr
中斷服務例程 (ISR) 用於中斷。

EvtInterruptDPC
處理中斷的延遲程序呼叫(DPC)。

EvtInterruptWorkItem
被動層級中斷的工作項目

針對在 Windows 8 或更高版本作業系統上使用架構版本 1.11 或更新版本的驅動程式,驅動程式可以明確地將架構中斷物件的父代(無論是 DIRQL 或被動)設定為架構裝置物件或架構佇列物件。 如果驅動程式指定父系,驅動程式必須將中斷物件之 WDF_INTERRUPT_CONFIG 結構的 AutomaticSerialization 成員設定為 TRUE。 (回想一下,如果 自動串行化 為 TRUE,架構會同步處理中斷物件的 EvtInterruptDpcEvtInterruptWorkItem 回呼函式,以及中斷父物件下其他物件的回呼函式。

例如,驅動程式可能會將佇列指定為中斷的父系,以便將佇列的回呼與中斷的 EvtInterruptDpcEvtInterruptWorkItem 回呼同步處理。 在這裡設定中,架構會在刪除裝置物件時刪除佇列物件。

呼叫 WdfInterruptCreate之後,驅動程式可以選擇性地呼叫 WdfInterruptSetPolicyWdfInterruptSetExtendedPolicy 來指定其他中斷參數。 驅動程式通常會從其 EvtDriverDeviceAdd 回呼函式呼叫這些方法。

架構會在刪除中斷的父項之前,自動刪除該中斷。 可選擇地,驅動程式可以呼叫 WdfObjectDelete,以便提早刪除中斷。

支援訊息訊號岔斷

Windows Vista 和更新版本支援訊息訊號中斷 (MSI) 。 若要讓作業系統支援裝置的 MSIs,驅動程式的 INF 檔案必須在登錄中設定一些值。 如需有關如何設定這些值的詳細資訊,請參閱 在註冊表中啟用 Message-Signaled 中斷

您的驅動程式應該為裝置支援的每個中斷向量或 MSI 訊息建立架構中斷物件。 如果 PnP 管理員未授與裝置支援的所有中斷資源,驅動程式不會使用額外的中斷物件,而且不會呼叫其回呼函式。

在 Windows 7 中,作業系統不支援每個裝置函式超過 910 個中斷訊息的資源要求。 在 Windows 8 中,作業系統不支援針對每個裝置功能超過 2,048 個中斷的資源要求。

如果裝置驅動程式超過此限制,裝置可能無法啟動。 若要在含有多個邏輯處理器的電腦中運作,驅動程式不應該請求每個處理器發生多於一次的中斷。

驅動程式必須在不出錯的情況下,忍受系統重新平衡中斷資源,其中 PnP 管理員會從資源需求清單中指派任何一組替代中斷資源給裝置。 例如,裝置被指派的訊息中斷數目可能會比驅動程式所要求的少。 在最壞的情況下,驅動程式必須準備好僅使用一個中斷線來操作裝置。