Abilitazione e disabilitazione degli interruzioni

Se il driver gestisce gli interruzioni del dispositivo, deve fornire funzioni di callback evtInterruptEnable e EvtInterruptDisable che abilitano e disabilitano gli interruzioni. In genere, queste funzioni di callback vengono eseguite nel DIRQL del dispositivo e devono eseguire qualsiasi operazione necessaria per abilitare e disabilitare il meccanismo di interruzione di un dispositivo. Per gli interruzioni a livello passivo, queste funzioni di callback vengono eseguite in IRQL = PASSIVE_LEVEL mantenendo il blocco di interruzione a livello passivo.

Se il driver deve eseguire operazioni aggiuntive correlate all'abilitazione o alla disabilitazione degli interruzioni e se queste operazioni aggiuntive non possono essere eseguite in IRQL = DIRQL, il driver può anche fornire funzioni di callback EvtDeviceD0EntryPostInterruptsEnabled e EvtDeviceD0ExitPreInterruptsDisablets . Queste due funzioni di callback vengono eseguite in IRQL = PASSIVE_LEVEL senza blocchi di interruzione e possono chiamare i metodi dell'oggetto framework non disponibili in IRQL = DIRQL.

Il framework chiama le funzioni di callback EvtInterruptEnable e EvtDeviceD0EntryPostInterruptsEnabled ogni volta che il dispositivo entra nello stato di lavoro (D0), dopo che il framework ha chiamato la funzione di callback EvtDeviceD0Entry del driver.

Il framework chiama le funzioni di callback evtDeviceD0ExitPreInterruptsDisabled e EvtInterruptDisable callback ogni volta che il dispositivo lascia lo stato di lavoro, prima che il framework chiami la funzione di callback evtDeviceD0Exit del driver. Per altre informazioni su quando il framework chiama le funzioni di callback di un driver, vedere Scenari di PnP e Power Management.

Non è necessario presupporre che un dispositivo userà le stesse risorse di interruzione ogni volta che il framework chiama la funzione di callback EvtInterruptEnable del driver. A volte il gestore PnP ridistribuisce le risorse di sistema e potrebbe assegnare nuove risorse di interruzione al dispositivo.

Il driver può chiamare WdfInterruptGetInfo per determinare le risorse di interruzione di un dispositivo. Il driver può chiamare WdfInterruptGetDevice per determinare il dispositivo a cui appartiene un oggetto di interruzione. Alcuni driver potrebbero chiamare WdfInterruptWdmGetInterrupt.

Per abilitare e disabilitare direttamente gli interruzioni, il driver può chiamare le funzioni di callback degli eventi WdfInterruptEnable e WdfInterruptDisable del driver, che chiamano le funzioni di callback degli eventi EvtInterruptEnable e EvtInterruptDisable. Tuttavia, la maggior parte dei driver deve consentire al framework di chiamare le funzioni di callback EvtInterruptEnable e EvtInterruptDisable in tempi appropriati.