啟用和停用中斷
如果您的驅動程式處理裝置中斷,它必須提供 EvtInterruptEnable 和 EvtInterruptDisable 回呼函式,以啟用和停用中斷。 一般而言,這些回呼函式會在裝置的 DIRQL 上執行,而且必須執行任何必要動作,才能啟用和停用裝置的中斷機制。 對於 被動層級中斷,這些回呼函式會在 IRQL = PASSIVE_LEVEL執行,同時保留被動層級中斷鎖定。
如果您的驅動程式必須執行與啟用或停用中斷相關的其他作業,而且如果無法在 IRQL = DIRQL 上執行這些額外作業,驅動程式也可以提供 EvtDeviceD0EntryPostInterruptsEnabled 和 EvtDeviceD0ExitPreInterruptsDisabled 回呼函式。 這兩個回呼函式會在 IRQL = PASSIVE_LEVEL執行,且不會保留中斷鎖定,而且可以在 IRQL = DIRQL 呼叫無法使用的架構物件方法。
架構會在架構呼叫驅動程式的 EvtInterruptEnable 和 EvtDeviceD0EntryPostInterruptsEnabled 回呼函式時,每次裝置進入其運作 (D0) 狀態之後,架構呼叫驅動程式的 EvtDeviceD0Entry 回 呼函式。
架構會在架構呼叫驅動程式的 EvtDeviceD0ExitPreInterruptsDisabled 和 EvtInterruptDisable 回呼函式,每次裝置離開其工作狀態之前,架構會先呼叫驅動程式的 EvtDeviceD0Exit 回 呼函式。 如需架構何時呼叫驅動程式回呼函式的詳細資訊,請參閱 PnP 和電源管理案例。
您不得假設每次架構呼叫驅動程式的 EvtInterruptEnable 回呼函式時,裝置都會使用相同的中斷資源。 有時候,PnP 管理員 會轉散發系統資源,而且可能會將新的中斷資源指派給您的裝置。
驅動程式可以呼叫 WdfInterruptGetInfo 來判斷裝置的中斷資源。 驅動程式可以呼叫 WdfInterruptGetDevice 來判斷中斷物件所屬的裝置。 (幾個驅動程式可能會呼叫 WdfInterruptWdmGetInterrupt.)
若要直接啟用和停用中斷,驅動程式可以呼叫中斷物件的 WdfInterruptEnable 和 WdfInterruptDisable 方法,該方法會呼叫驅動程式的 EvtInterruptEnable 和 EvtInterruptDisable 事件回呼函式。 不過,大部分驅動程式應該只允許架構在適當的時間呼叫 EvtInterruptEnable 和 EvtInterruptDisable 回呼函式。