Funzione FltCancelFileOpen (fltkernel.h)

Un driver minifilter può usare la routine FltCancelFileOpen per chiudere un file appena aperto o creato.

Sintassi

VOID FLTAPI FltCancelFileOpen(
  [in] PFLT_INSTANCE Instance,
  [in] PFILE_OBJECT  FileObject
);

Parametri

[in] Instance

Puntatore dell'istanza opaca per il chiamante. Questo parametro è obbligatorio e non può essere NULL.

[in] FileObject

Puntatore a oggetti file per il file. Questo parametro è obbligatorio e non può essere NULL.

Valore restituito

nessuno

Osservazioni

Se un driver minifilter determina che un'operazione di apertura o creazione di file (IRP_MJ_CREATE) deve avere esito negativo dopo che il file system ha già completato l'operazione con un valore NTSTATUS riuscito, ad esempio STATUS_SUCCESS, il driver minifilter può chiamare FltCancelFileOpen dalla routine di callback post-create per chiudere il file.

Nota Anche se STATUS_REPARSE è un valore NTSTATUS riuscito, non è necessario chiamare FltCancelFileOpen per un'operazione di creazione completata con STATUS_REPARSE, perché questo valore di stato indica che il file non è stato aperto correttamente.
 
Una chiamata riuscita a FltCancelFileOpen ha l'effetto seguente: Per i driver minifilter e i filtri legacy che si trovano sopra il chiamante nello stack di istanze del driver minifilter, la richiesta di creazione sembra non riuscita. A quelli che si trovano sotto il chiamante, il file sembra essere stato aperto (o creato) e quindi chiuso.

Si noti che FltCancelFileOpen non annulla alcuna modifica al file. Ad esempio, FltCancelFileOpen non elimina un file appena creato o ripristina un file sovrascritto o sostituito allo stato precedente.

FltCancelFileOpen deve essere chiamato prima che vengano creati handle per il file. I chiamanti possono controllare il membro Flags della struttura FILE_OBJECT a cui punta il parametro FileObject . Se il flag FO_HANDLE_CREATED è impostato, significa che sono stati creati uno o più handle per il file, pertanto non è possibile chiamare FltCancelFileOpen.

FltCancelFileOpen imposta il flag FO_FILE_OPEN_CANCELLED nel membro Flags dell'oggetto file a cui punta FileObject . Questo flag indica che l'operazione di creazione è stata annullata e verrà inviata una richiesta di chiusura (IRP_MJ_CLOSE) per questo oggetto file.

Una volta annullata l'operazione di creazione, non può essere ristampata. Per altre informazioni, vedere FltReissueSynchronousIo.

FltCancelFileOpen può essere chiamato solo dalla routine di callback post-create di un driver minifilter. La chiamata a FltCancelFileOpen da una routine di callback di postoperazione (PFLT_POST_OPERATION_CALLBACK) per qualsiasi altro tipo di operazione di I/O o da una routine di callback di preoperazione (PFLT_PRE_OPERATION_CALLBACK) è un errore di programmazione.

I chiamanti di FltCancelFileOpen devono essere in esecuzione nel PASSIVE_LEVEL IRQL. Tuttavia, è possibile che i driver minifilter chiamino questa routine da una routine di callback post-creazione, perché è garantito che le routine di callback post-create vengano chiamate al PASSIVE_LEVEL IRQL, nel contesto del thread che ha originato la richiesta di IRP_MJ_CREATE.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione fltkernel.h (include Fltkernel.h)
Libreria FltMgr.lib
DLL Fltmgr.sys
IRQL PASSIVE_LEVEL (vedere la sezione Osservazioni)

Vedi anche

FILE_OBJECT

FLT_CALLBACK_DATA

FLT_IS_REISSUED_IO

FLT_PARAMETERS per IRP_MJ_CREATE

FltReissueSynchronousIo

FltSetCallbackDataDirty

IRP_MJ_CLOSE

IRP_MJ_CREATE

IoCancelFileOpen

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK