EVT_WDF_INTERRUPT_ISR funzione di callback (wdfinterrupt.h)
[Si applica a KMDF e UMDF]
La funzione di callback dell'evento EvtInterruptIsr di un driver esegue un interrupt hardware.
Sintassi
EVT_WDF_INTERRUPT_ISR EvtWdfInterruptIsr;
BOOLEAN EvtWdfInterruptIsr(
[in] WDFINTERRUPT Interrupt,
[in] ULONG MessageID
)
{...}
Parametri
[in] Interrupt
Handle per un oggetto interrupt del framework.
[in] MessageID
Se il dispositivo usa interrupt con segnalazione messaggio (MSI), questo parametro è il numero di messaggio che identifica il messaggio di interruzione hardware del dispositivo. In caso contrario, questo valore è 0.
Valore restituito
La funzione di callback EvtInterruptIsr deve restituire TRUE se la funzione esegue l'interrupt hardware. In caso contrario, questa funzione deve restituire FALSE.
Commenti
Per registrare una funzione di callback EvtInterruptIsr , il driver deve inserire l'indirizzo della funzione di callback in una struttura di WDF_INTERRUPT_CONFIG prima di chiamare WdfInterruptCreate.
La funzione di callback EvtInterruptIsr è una routine del servizio di interruzione (ISR) basata su framework, che viene chiamata quando si verifica un interrupt hardware.
Se l'interrupt non proviene dall'hardware di cui viene eseguita la funzione di callback EvtInterruptIsr , il driver deve restituire FALSE. Se il vettore di interrupt viene condiviso, il sistema chiama un'altra routine del servizio interrupt.
Se il driver non ha richiesto la gestione a livello passivo per un oggetto interrupt, prima di chiamare la funzione di callback EvtInterruptIsr , il framework genera l'IRQL del processore all'IRQL (DIRQL) del dispositivo e acquisisce il blocco di rotazione specificato dal driver nella struttura WDF_INTERRUPT_CONFIG dell'oggetto interrupt.
Poiché la funzione di callback EvtInterruptIsr viene eseguita a un irQL relativamente elevato, può chiamare pochissimi metodi oggetto framework o routine di sistema. Inoltre, questa funzione di callback non può accedere al codice di paging .
In genere, la funzione di callback EvtInterruptIsr cancella l'interrupt hardware e salva tutte le informazioni che potrebbero andare perse dopo che la funzione di callback viene restituita e il sistema riduce l'IRQL (poiché l'abbassamento di IRQL consente interruzioni aggiuntive). I driver basati su framework salvano informazioni sull'interrupt nello spazio di contesto dell'oggetto interrupt.
I driver forniscono in genere una funzione di callback EvtInterruptDpc per elaborare le informazioni salvate in un IRQL inferiore. Alcuni driver forniscono una o più funzioni di callback EvtDpcFunc anziché una funzione di callback EvtInterruptDpc . Per informazioni sulla pianificazione di una funzione di callback EvtInterruptDpc per l'esecuzione, vedere Manutenzione di un interrupt.
La funzione di callback EvtInterruptIsr deve essere in grado di gestire diversi interrupt prima dell'esecuzione della funzione di callback EvtInterruptDpc . Pertanto, il driver potrebbe dover archiviare i dati di interruzione da diversi interrupt e le funzioni di callback EvtInterruptIsr eEvtInterruptDpc potrebbero dover determinare quali dati di interrupt sono stati completamente elaborati dal driver e che non lo ha.
A partire dalla versione 1.11 di KMDF, il driver può fornire la gestione degli interrupt a livello passivo. Se il driver ha richiesto la gestione a livello passivo per un oggetto interrupt, prima di chiamare la funzione di callback EvtInterruptIsr evtInterruptIsr in IRQL = PASSIVE_LEVEL, il framework acquisisce il blocco di interrupt a livello passivo configurato dal driver nella struttura di WDF_INTERRUPT_CONFIG dell'oggetto interrupt. Come per la gestione degli interrupt in DIRQL, la funzione EvtInterruptIsr del driver deve comunque salvare le informazioni sull'interrupt per un'elaborazione successiva.
I driver che supportano la gestione degli interrupt a livello passivo possono fornire un oggetto EvtInterruptWorkItem o una funzione di callback EvtInterruptDpc per elaborare le informazioni salvate.
Per altre informazioni sulla gestione degli interrupt nei driver basati su framework, vedere Gestione degli interrupt hardware.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Universale |
Versione KMDF minima | 1.0 |
Versione UMDF minima | 2,0 |
Intestazione | wdfinterrupt.h (include Wdf.h) |
IRQL | Vedere la sezione Note. |