啟用和停用中斷

如果您的驅動程式處理裝置中斷,它必須提供 EvtInterruptEnableEvtInterruptDisable 回呼函式,以啟用和停用中斷。 一般而言,這些回呼函式會在裝置的 DIRQL 上執行,而且必須執行任何必要動作,才能啟用和停用裝置的中斷機制。 對於 被動層級中斷,這些回呼函式會在 IRQL = PASSIVE_LEVEL執行,同時保留被動層級中斷鎖定。

如果您的驅動程式必須執行與啟用或停用中斷相關的其他作業,而且如果無法在 IRQL = DIRQL 上執行這些額外作業,驅動程式也可以提供 EvtDeviceD0EntryPostInterruptsEnabledEvtDeviceD0ExitPreInterruptsDisabled 回呼函式。 這兩個回呼函式會在 IRQL = PASSIVE_LEVEL執行,且不會保留中斷鎖定,而且可以在 IRQL = DIRQL 呼叫無法使用的架構物件方法。

架構會在架構呼叫驅動程式的 EvtInterruptEnableEvtDeviceD0EntryPostInterruptsEnabled 回呼函式時,每次裝置進入其運作 (D0) 狀態之後,架構呼叫驅動程式的 EvtDeviceD0Entry 回 呼函式。

架構會在架構呼叫驅動程式的 EvtDeviceD0ExitPreInterruptsDisabledEvtInterruptDisable 回呼函式,每次裝置離開其工作狀態之前,架構會先呼叫驅動程式的 EvtDeviceD0Exit 回 呼函式。 如需架構何時呼叫驅動程式回呼函式的詳細資訊,請參閱 PnP 和電源管理案例

您不得假設每次架構呼叫驅動程式的 EvtInterruptEnable 回呼函式時,裝置都會使用相同的中斷資源。 有時候,PnP 管理員 會轉散發系統資源,而且可能會將新的中斷資源指派給您的裝置。

驅動程式可以呼叫 WdfInterruptGetInfo 來判斷裝置的中斷資源。 驅動程式可以呼叫 WdfInterruptGetDevice 來判斷中斷物件所屬的裝置。 (幾個驅動程式可能會呼叫 WdfInterruptWdmGetInterrupt.)

若要直接啟用和停用中斷,驅動程式可以呼叫中斷物件的 WdfInterruptEnableWdfInterruptDisable 方法,該方法會呼叫驅動程式的 EvtInterruptEnableEvtInterruptDisable 事件回呼函式。 不過,大部分驅動程式應該只允許架構在適當的時間呼叫 EvtInterruptEnableEvtInterruptDisable 回呼函式。