Condividi tramite


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:

  1. Impostando il campo IoStatus.Status della struttura dei dati di callback sul valore NTSTATUS finale per l'operazione.

  2. 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:

  1. Impostando il campo IoStatus.Status della struttura dei dati di callback sul valore NTSTATUS finale per l'operazione.

  2. 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.