Condividi tramite


Errore di un'operazione di I/O in una routine di callback postperation

Una routine di callback del driver minifilter può non riuscire a eseguire un'operazione di I/O riuscita, ma semplicemente non riesce un'operazione di I/O che non annulla l'effetto dell'operazione. Il driver minifilter è responsabile dell'esecuzione di qualsiasi elaborazione necessaria per annullare l'operazione.

Ad esempio, una routine post-create del driver minifilter può non riuscire a eseguire un'operazione di IRP_MJ_CREATE riuscita eseguendo la procedura seguente:

  1. Chiamata di FltCancelFileOpen per chiudere il file creato o aperto dall'operazione di creazione. Si noti che FltCancelFileOpen non annulla alcuna modifica al file. Ad esempio, FltCancelFileOpen non elimina un file appena creato o ripristina un file troncato alle dimensioni precedenti.

  2. Impostando il campo IoStatus.Status della struttura dei dati di callback sul valore NTSTATUS finale per l'operazione. Questo valore deve essere un valore NTSTATUS valido, ad esempio STATUS_ACCESS_DENIED.

  3. Impostazione del campo IoStatus.Information della struttura dei dati di callback su zero.

  4. Restituzione di FLT_POSTOP_FINISHED_PROCESSING.

Quando si imposta il campo IoStatus.Status della struttura dati di callback sul valore NTSTATUS finale per l'operazione, il driver minifilter deve specificare un valore NTSTATUS valido. Si noti che i driver minifilter non possono specificare STATUS_FLT_DISALLOW_FAST_IO; solo la gestione filtri può usare questo valore NTSTATUS.

I chiamanti di FltCancelFileOpen devono essere in esecuzione in IRQL <= APC_LEVEL. Tuttavia, un driver minifilter può chiamare in modo sicuro questa routine da una routine di callback post-create, perché, per le operazioni di IRP_MJ_CREATE, la routine di callback di postperazione viene chiamata a IRQL = PASSIVE_LEVEL, nel contesto del thread che ha generato l'operazione di creazione.