Restituzione dello stato dalle routine di invio

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.

Tranne quando si completa un'IRP, una routine di invio che non imposta una routine di completamento deve sempre restituire il valore NTSTATUS restituito da IoCallDriver. A meno che questo valore non sia STATUS_PENDING, deve corrispondere al valore di Irp-IoStatus.Status> impostato dal driver che ha completato l'IRP.

Una routine di invio che imposta una routine di completamento che potrebbe inviare l'IRP a una coda di lavoro deve eseguire una delle azioni seguenti:

  • Restituisce il valore NTSTATUS restituito da IoCallDriver.
  • Attendere che la routine di completamento segnali un evento e restituisca il valore di Irp-IoStatus.Status>.
  • Contrassegnare l'IRP in sospeso, pubblicarlo in una coda di lavoro e restituire STATUS_PENDING.
  • Se la routine di completamento potrebbe inviare l'IRP a una coda di lavoro, la routine di invio deve contrassegnare l'IRP in sospeso e restituire STATUS_PENDING.

Quale di questi comportamenti è corretta o anche possibile dipende dall'operazione specifica. Alcune operazioni, ad esempio le notifiche di modifica della directory, non possono essere effettuate sincrone; e alcune operazioni, ad esempio oplock, non possono essere effettuate asincrone.

Per altre informazioni sulla restituzione dello stato da una routine di invio, vedere Vincoli nelle routine di invio.