Condividi tramite


Funzione FltCancelFileOpen (fltkernel.h)

Un driver minifiltro 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 all'oggetto file per il file. Questo parametro è obbligatorio e non può essere NULL.

Valore restituito

Nessuno

Osservazioni

Se un driver minifiltro determina che un'operazione di creazione di file (IRP_MJ_CREATE) può 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-creazione per chiudere il file.

Nota Sebbene STATUS_REPARSE sia 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 minifiltri 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 con lo stato precedente.

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

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

Dopo l'annullamento dell'operazione di creazione, non può essere riemesso. Per altre informazioni, vedere FltReissueSynchronousIo.

FltCancelFileOpen può essere chiamato solo da una routine di callback post-creazione di un driver minifilter. La chiamata di FltCancelFileOpen da una routine di callback postoperativo (PFLT_POST_OPERATION_CALLBACK) per qualsiasi altro tipo di operazione di I/O o chiamandola da una routine di callback preoperatorio (PFLT_PRE_OPERATION_CALLBACK) è un errore di programmazione.

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

Fabbisogno

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)

Vedere 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