共用方式為


建立插斷物件

處理裝置硬體中斷的 Windows Driver Frameworks (WDF) 驅動程式必須為每個裝置可支援的插斷建立架構中斷物件。 在 Windows 8 或更新版本的操作系統上執行的 Framework 版本 1.11 和更新版本中,Kernel-Mode Driver Framework (KMDF) 和 User-Mode Driver Framework (UMDF) 驅動程式可以建立需要 被動層級處理的中斷物件。 不過,除非您在系統晶片 (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
啟用硬體中斷。

EvtInterruptDisable
停用硬體中斷。

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

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

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

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

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

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

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

支援訊息訊號中斷

從 Windows Vista 開始,支援訊息信號中斷 (MSIS)。 若要讓作業系統支援裝置的 MSIs,驅動程式的 INF 檔案必須在登錄中設定一些值。 如需如何設定這些值的詳細資訊,請參閱登錄 中啟用 Message-Signaled 中斷

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

在 Windows 7 中,作業系統不支援每個裝置功能提出超過 910 個中斷訊息的資源請求。 在 Windows 8 中,作業系統不支援每個裝置功能有超過 2048 個中斷請求的資源要求。

如果裝置驅動程式超過此限制,裝置可能無法啟動。 若要在包含許多邏輯處理器的計算機中運行,驅動程式不應該為每個處理器請求多於一次的中斷。

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