Condividi tramite


Non consentire un'operazione di I/O veloce in una routine di callback preoperazione

In determinate circostanze, un driver minifilter potrebbe scegliere di impedire un'operazione di I/O veloce anziché completarla. La rimozione di un'operazione di I/O veloce impedisce l'uso del percorso di I/O rapido per l'operazione.

Come per completare un'operazione di I/O, non consentire un'operazione di I/O veloce significa arrestare l'elaborazione e restituirla alla gestione filtri. Tuttavia, non consentire un'operazione di I/O veloce è diversa dal completamento. Se un driver minifilter non consente un'operazione di I/O rapida rilasciata dal gestore di I/O, il gestore di I/O può riemettere nuovamente la stessa operazione di un'operazione basata su IRP equivalente.

Quando una routine di preoperazione del driver minifilter non consente un'operazione di I/O veloce, 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.

Un driver minifilter non consente un'operazione di I/O veloce restituendo FLT_PREOP_DISALLOW_FASTIO dalla routine di callback di preoperazione per l'operazione.

La routine di callback di preoperazione non deve impostare il campo IoStatus.Status della struttura dei dati di callback, perché la gestione filtri imposta automaticamente questo campo su STATUS_FLT_DISALLOW_FAST_IO.

FLT_PREOP_DISALLOW_FASTIO può essere restituito solo per operazioni di I/O veloci. Per determinare se un'operazione è un'operazione di I/O veloce, vedere FLT_IS_FASTIO_OPERATION.

I driver minifilter non possono restituire FLT_PREOP_DISALLOW_FASTIO per operazioni di IRP_MJ_SHUTDOWN, IRP_MJ_VOLUME_MOUNT o IRP_MJ_VOLUME_DISMOUNT.