Funzione FltGetTunneledName (fltkernel.h)
La routine
Sintassi
NTSTATUS FLTAPI FltGetTunneledName(
[in] PFLT_CALLBACK_DATA CallbackData,
[in] PFLT_FILE_NAME_INFORMATION FileNameInformation,
[out] PFLT_FILE_NAME_INFORMATION *RetTunneledFileNameInformation
);
Parametri
[in] CallbackData
Puntatore alla struttura dei dati di callback per l'operazione di I/O (FLT_CALLBACK_DATA). Questo parametro è obbligatorio e non può essere NULL.
[in] FileNameInformation
Puntatore a una struttura FLT_FILE_NAME_INFORMATION contenente informazioni sul nome normalizzate restituite da una chiamata precedente a FltGetFileNameInformation, FltGetFileNameInformationUnsafeo FltGetDestinationFileNameInformation per il file.
[out] RetTunneledFileNameInformation
Puntatore a una variabile allocata dal chiamante che riceve l'indirizzo di una struttura appena allocata contenente il nome del file sottoposto a tunneling. Se non viene trovato alcun nome sottoposto a tunneling, questa variabile riceve NULL. Questo parametro è obbligatorio e non può essere NULL all'input.
Valore restituito
FltGetTunneledName restituisce STATUS_SUCCESS se viene trovato il nome sottoposto a tunneling o se non è presente alcun nome sottoposto a tunneling per il file. In caso contrario, restituisce un valore NTSTATUS, ad esempio quanto segue:
Codice restituito | Descrizione |
---|---|
STATUS_INSUFFICIENT_RESOURCES | FltGetTunneledName rilevato un errore di allocazione del pool. Si tratta di un codice di errore. |
Osservazioni
I file system, ad esempio NTFS e FAT, usano una cache di tunnel per volume per conservare brevemente i nomi di file e altri metadati per i file che vengono rinominati, collegati o eliminati. Il tunneling dei nomi file può causare il componente finale nelle informazioni sul nome file normalizzate restituite da una chiamata di preoperazione a FltGetFileNameInformation, FltGetFileNameInformationUnsafeo FltGetDestinationFileNameInformation da invalidare.
Se un driver minifiltro recupera le informazioni sul nome file normalizzato nella routine di callback preoperatoria (PFLT_PRE_OPERATION_CALLBACK) per una creazione (IRP_MJ_CREATE), un collegamento rigido (IRP_MJ_SET_INFORMATION con FILE_INFORMATION_CLASS impostato su FileLinkInformation) o un'operazione di ridenominazione (IRP_MJ_SET_INFORMATION con FILE_INFORMATION_CLASS impostata su FileRenameInformation), deve chiamare FltGetTunneledName dalla routine di callback postoperation (PFLT_POST_OPERATION_CALLBACK) per recuperare le informazioni sul nome file corrette per il file.
Solo le informazioni sul nome file normalizzate sono interessate dal tunneling. Gestione filtri non è in grado di garantire che il componente finale venga normalizzato fino a quando non è stata effettivamente eseguita l'operazione di creazione, collegamento rigido o ridenominazione, perché il tunneling può causare la modifica di un nome breve in un nome lungo. Pertanto, un driver minifiltro deve chiamare FltGetTunneledName dalla routine di callback di postoperazione per determinare se le informazioni sul nome file normalizzate recuperate nella routine di callback preoperazione sono valide.
Per altre informazioni sul nome file normalizzato, vedere FLT_FILE_NAME_INFORMATION.
I driver minifilter che recuperano solo informazioni sul nome file breve o aperto non devono chiamare FltGetTunneledName.
Dopo aver chiamato
Nota
Il tunneling dei nomi file influisce solo sulle operazioni di creazione, collegamento rigido e ridenominazione in questo modo. Non influisce su altre operazioni di I/O, ad esempio lettura e scrittura.
Le operazioni abbinate seguenti possono causare il tunneling del nome file nome:
- delete( nome)/create( nome)
- delete( nome)/rename(origine, nome )
- rename( nome, newname)/create( nome)
- rename(name, newname)/rename(source, name)
Se non viene trovato alcun nome sottoposto a tunneling per il file, il parametro RetTunneledFileNameInformation
Dopo una chiamata riuscita a FltGetTunneledName, il chiamante è responsabile del rilascio del RetTunneledFileNameInformation e FileNameInformation quando non sono più necessari chiamando FltReleaseFileNameInformation.
FltGetTunneledName deve essere chiamato solo dalla routine di callback di un driver minifilter per IRP_MJ_CREATE o IRP_MJ_SET_INFORMATION. La chiamata di FltGetTunneledName da una routine di callback postoperatoria per qualsiasi altro tipo di operazione di I/O o chiamata da una routine di callback di preoperazione è un errore di programmazione.
Il chiamante non deve modificare il contenuto della struttura restituita nel parametro RetTunneledFileNameInformation, perché questa struttura viene memorizzata nella cache da Gestione filtri in modo che tutti i driver minifiltro possano usarlo.
Il tunneling dei file consente la compatibilità con i programmi che si basano su file system per mantenere le meta-informazioni sui file per un breve periodo di tempo; ad esempio, per il processo di salvataggio sicuro. Il tunneling mantiene l'associazione tra il nome di un file lungo e breve (8,3). Quando un nome file viene rimosso da una directory (rinominare o eliminare), la relativa coppia di nomi brevi e lunghi e il tempo di creazione vengono salvati in una cache del tunnel, con chiave con il nome rimosso. Quando un nome viene aggiunto a una directory (rinominare o creare), viene eseguita una ricerca nella cache per determinare se sono presenti informazioni da ripristinare. La cache è efficace per ogni istanza di una directory. Se una directory viene eliminata, la cache viene rimossa.
Fabbisogno
Requisito | Valore |
---|---|
piattaforma di destinazione | Universale |
intestazione |
fltkernel.h (include Fltkernel.h) |
libreria |
FltMgr.lib |
dll | Fltmgr.sys |
IRQL | <= APC_LEVEL |
Vedere anche
FltGetDestinationFileNameInformation
FltGetFileNameInformationUnsafe