Uso delle routine di completamento di IRP
Nota
Per garantire affidabilità e prestazioni ottimali, usare i driver minifilter del file system con il supporto di Filter Manager anziché i driver di filtro del file system legacy. Per convertire il driver legacy in un driver minifilter, vedere Linee guida per la conversione dei driver di filtro legacy.
I driver di filtro del file system usano routine di completamento simili a quelle usate dai driver di dispositivo. Una routine di completamento esegue l'elaborazione del completamento in un'istanza di IRP. Qualsiasi routine del driver che passa un'IRP fino al driver di livello inferiore successivo può registrare facoltativamente una routine di completamento per l'IRP chiamando IoSetCompletionRoutine prima di chiamare IoCallDriver.
Ogni routine di completamento di IRP è definita come segue:
NTSTATUS
(*PIO_COMPLETION_ROUTINE) (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
Le routine di completamento vengono chiamate a IRQL <= DISPATCH_LEVEL, in un contesto di thread arbitrario.
Poiché possono essere chiamati in IRQL DISPATCH_LEVEL, le routine di completamento non possono chiamare routine in modalità kernel che devono essere chiamate a un IRQL inferiore, ad esempio IoDeleteDevice. Per lo stesso motivo, tutte le strutture di dati usate in una routine di completamento devono essere allocate da un pool non di pagine.
Questa sezione illustra gli argomenti seguenti:
Modalità di esecuzione dell'elaborazione del completamento
Controllo del flag PendingReturned
Restituzione dello stato dalle routine di completamento
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per