Annullamento di IRP
I driver in cui i provider di integrazione potrebbero rimanere in coda per un intervallo indefinito (pertanto un utente potrebbe annullare una richiesta di I/O inviata in precedenza) devono avere una o più routine Annulla per completare le richieste di I/O annullate dall'utente. Ad esempio, tastiera, mouse, parallelo, seriale e driver di dispositivo audio (o driver sovrapposti) e i driver del file system devono avere routine Cancel .
I driver per Microsoft Windows XP e i sistemi operativi successivi possono usare code IRP annullate anziché implementare le proprie routine Cancel .
Per "annullare un IRP" significa completare l'IRP il più rapidamente possibile mantenendo comunque l'integrità del sistema. Per una descrizione generale del completamento di IRP, vedere Completamento dei provider di integrazione.
Il processo di annullamento inizia quando il sistema o un driver chiama IoCancelIrp. Questa routine viene chiamata per ogni IRP associato al thread che non è ancora stato completato completamente. Il sistema annulla i runtime di integrazione non elaborati se il thread che ha avviato la richiesta di I/O viene chiuso. I driver possono annullare solo i runtime di integrazione creati (vedere Creazione di runtime di integrazione per i driver Lower-Level).
Se un IRP annullato non viene completato entro 5 minuti, il gestore di I/O considera il timeout di IRP. Tali provider di integrazione vengono disassociati dal thread e viene registrato un errore per il dispositivo proprietario dell'IRP. È necessario assicurarsi che tutte le richieste che potrebbero richiedere molto tempo per essere completate nel driver siano annullabili. Per garantire che le richieste potenzialmente lunghe siano annullabili, è possibile usare code IRP non sicure o Kernel-Mode Driver Framework, che astrae l'annullamento dallo sviluppatore del driver.
In questa sezione vengono forniti gli argomenti seguenti:
Introduzione alle routine di annullamento
Registrazione di una routine di annullamento
Sincronizzazione dell'annullamento di IRP
Implementazione di una routine Cancel
Punti da considerare quando si annullano i runtime di integrazione