Completamento di un'operazione di I/O in una routine di callback preoperazione
Per completare un'operazione di I/O significa interrompere l'elaborazione per l'operazione, assegnarlo un valore NTSTATUS finale e restituirlo alla gestione filtri.
Quando un driver minifilter completa un'operazione di I/O, la gestione filtri esegue le operazioni seguenti:
Non invia l'operazione ai driver minifilter sotto il driver minifilter corrente, ai filtri legacy o al file system.
Chiama le routine di callback postoperation dei driver minifilter sopra il driver minifilter corrente nello stack di istanze del driver minifilter.
Non chiama la routine di callback postperazione del driver minifilter corrente per l'operazione, se presente.
Una routine di preoperazione del driver minifilter completa un'operazione di I/O eseguendo la procedura seguente:
Impostando il campo IoStatus.Status della struttura dei dati di callback sul valore NTSTATUS finale per l'operazione.
Restituzione di FLT_PREOP_COMPLETE.
Una routine di callback di preoperazione che completa un'operazione di I/O non può impostare un contesto di completamento non NULL (nel parametro di output CompletionContext ).
Un driver minifilter può anche completare un'operazione nella routine di lavoro per un'operazione di I/O con penna in precedenza eseguendo la procedura seguente:
Impostando il campo IoStatus.Status della struttura dei dati di callback sul valore NTSTATUS finale per l'operazione.
Passando FLT_PREOP_COMPLETE nel parametro CallbackStatus quando la routine di lavoro chiama FltCompletePendedPreOperation.
Quando si completa un'operazione di I/O, un driver minifilter deve impostare il campo IoStatus.Status della struttura dati di callback sul valore NTSTATUS finale per l'operazione, ma questo valore NTSTATUS non può essere STATUS_PENDING o STATUS_FLT_DISALLOW_FAST_IO. Per un'operazione di pulizia o chiusura, il campo deve essere STATUS_SUCCESS. Queste operazioni non possono essere completate con qualsiasi altro valore NTSTATUS.
Il completamento di un'operazione di I/O viene spesso definito esito positivo o negativo dell'operazione, a seconda del valore NTSTATUS:
Per eseguire un'operazione di I/O significa completarla con un valore NTSTATUS riuscito o informativo, ad esempio STATUS_SUCCESS.
Per eseguire un'operazione di I/O significa completarla con un errore o un valore NTSTATUS di avviso, ad esempio STATUS_INVALID_DEVICE_REQUEST o STATUS_BUFFER_OVERFLOW.
I valori NTSTATUS sono definiti in ntstatus.h. Questi valori rientrano in quattro categorie: esito positivo, informativo, avviso ed errore. Per altre informazioni su questi valori, vedere Uso di valori NTSTATUS.