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