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