Condividi tramite


struttura FLT_FILE_NAME_INFORMATION (fltkernel.h)

La struttura FLT_FILE_NAME_INFORMATION contiene informazioni sul nome file.

Sintassi

typedef struct _FLT_FILE_NAME_INFORMATION {
  USHORT                     Size;
  FLT_FILE_NAME_PARSED_FLAGS NamesParsed;
  FLT_FILE_NAME_OPTIONS      Format;
  UNICODE_STRING             Name;
  UNICODE_STRING             Volume;
  UNICODE_STRING             Share;
  UNICODE_STRING             Extension;
  UNICODE_STRING             Stream;
  UNICODE_STRING             FinalComponent;
  UNICODE_STRING             ParentDir;
} FLT_FILE_NAME_INFORMATION, *PFLT_FILE_NAME_INFORMATION;

Membri

Size

Dimensioni, in byte, della struttura FLT_FILE_NAME_INFORMATION.

NamesParsed

Maschera di bit di flag che indicano quali componenti dei nomi sono stati analizzati dalla stringa NomeFltParseFileNameInformation. Si noti che, durante l'analisi della stringa Nome, FltParseFileNameInformation imposta questo flag per ogni componente, indipendentemente dal fatto che il componente sia presente nella stringa. Questi valori possono essere combinati usando l'operatore OR.

Bandiera Componente
FLTFL_FILE_NAME_PARSED_FINAL_COMPONENT FinalComponent
FLTFL_FILE_NAME_PARSED_EXTENSION dell'estensione
FLTFL_FILE_NAME_PARSED_STREAM Stream
FLTFL_FILE_NAME_PARSED_PARENT_DIR ParentDir

Format

Formato delle informazioni sul nome archiviate nel membro nome. Questo membro può essere uno dei valori seguenti. Per una spiegazione di questi formati, vedere la sezione Osservazioni seguente.

Valore Significato
FLT_FILE_NAME_NORMALIZED Il membro Nome contiene il nome normalizzato per il file.
FLT_FILE_NAME_OPENED Il membro Nome contiene il nome utilizzato all'apertura del file. Questa stringa del nome non è normalizzata.
FLT_FILE_NAME_SHORT Il membro Nome contiene il nome breve (8.3) del file. Il nome breve di un file non include il nome del volume, il percorso della directory o il nome del flusso. Questa stringa del nome non è normalizzata.

Name

UNICODE_STRING struttura che contiene la stringa del nome file, formattata come specificato dal membro Format.

Volume

UNICODE_STRING struttura che contiene il nome del volume analizzato dalla stringa Nome. Se formato è FLT_FILE_NAME_SHORT, Volume.Length è zero.

Share

UNICODE_STRING struttura che contiene il nome della condivisione di rete analizzato dalla stringa nome per un file remoto. Se Formato è FLT_FILE_NAME_SHORT, Share.Length è zero.

Extension

UNICODE_STRING struttura che contiene l'estensione analizzata dalla stringa Nome. Se non viene trovata alcuna estensione, FltParseFileNameInformation imposta Extension.Length su zero.

Stream

UNICODE_STRING struttura che contiene il nome del flusso analizzato dalla stringa nome. Se non viene trovato alcun nome di flusso o se Format è FLT_FILE_NAME_SHORT, FltParseFileNameInformation imposta Stream.Length su zero.

FinalComponent

UNICODE_STRING struttura che contiene il componente del nome finale analizzato dalla stringa Nome. Se non viene trovato alcun nome finale del componente o se Format è FLT_FILE_NAME_SHORT, FltParseFileNameInformation imposta FinalComponent.Length su zero.

ParentDir

UNICODE_STRING struttura che contiene il nome della directory padre analizzato dalla stringa NomeFltParseFileNameInformation. Se non viene trovato alcun nome di directory padre o se Format è FLT_FILE_NAME_SHORT, FltParseFileNameInformation imposta ParentDir.Length su zero.

Osservazioni

Il membro Nome contiene uno dei seguenti elementi:

  • Nome normalizzato per il file
  • Nome aperto per il file
  • Nome breve del file
Un nome di file viene considerato normalizzato se sono soddisfatte tutte le condizioni seguenti:
  • Contiene il percorso di directory completo per il file, incluso il nome del volume, a meno che l'utente non abbia aperto il file in base all'ID file, ma non abbia il privilegio di attraversamento per l'intero percorso. Per altre informazioni, vedere FltGetFileNameInformation.)
  • Il nome del volume è il nome dell'oggetto dispositivo non permanente del volume , ad esempio "\Device\HarddiskVolume1".
  • Tutti i nomi brevi vengono espansi in base ai nomi lunghi equivalenti.
  • Tutte le stringhe finali ":$DATA" o "::$DATA" vengono rimosse dal nome del flusso.
  • Tutti i punti di montaggio vengono risolti.
Di seguito è riportato un esempio di nome file normalizzato per un file locale:
\Device\HarddiskVolume1\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

Di seguito è riportato un esempio di nome file normalizzato per un file remoto:

\Device\LanManRedirector\MyServer\MyShare\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

Il nome aperto per un file è il nome utilizzato all'apertura del file. Come il nome normalizzato, contiene il percorso completo della directory per il file, incluso il nome del volume. Differisce dal nome normalizzato nei modi seguenti:

  • Il percorso della directory per il file può contenere nomi brevi e nomi lunghi.
  • Le stringhe finali ":$DATA" e "::$DATA" non vengono rimosse dal nome del flusso.
  • I punti di montaggio non vengono risolti.
Di seguito è riportato un esempio di nome file aperto per un file locale:
\Device\HarddiskVolume1\Docume~1\MyUser\MYDOCU~1\Test Results.txt:stream1:$DATA

Di seguito è riportato un esempio di nome file aperto per un file remoto:

\Device\LanManRedirector\MyServer\MyShare\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

Il nome breve per un file è il nome breve (8,3) per il componente finale del nome file. Poiché viene generato quando il file viene aperto, il nome breve non è disponibile per un oggetto file non aperto e non è disponibile nel percorso create dispatch ("pre-create"). Non è disponibile anche per gli oggetti file di flusso NTFS. Non tutti i file aperti hanno nomi di file brevi. Ad esempio, nelle partizioni NTFS in cui la generazione di nomi di file brevi è stata disabilitata, non sono presenti nomi di file brevi.

Di seguito è riportato un esempio di nome breve per un file:

TestRe~1.txt

Per ottenere una struttura FLT_FILE_NAME_INFORMATION per un file, chiamare FltGetFileNameInformation, FltGetFileNameInformationUnsafeo FltGetDestinationFileNameInformation. Queste routine restituiscono un puntatore a una struttura di FLT_FILE_NAME_INFORMATION di proprietà di Filter Manager condivisa da tutti i minifiltri.

Nota Non modificare il contenuto delle strutture di FLT_FILE_NAME_INFORMATION, perché queste strutture vengono memorizzate nella cache da Gestione filtri in modo che tutti i minifiltri possano usarli. Se il minifiltro deve modificare queste informazioni in qualche modo, deve prima copiare le informazioni in un altro buffer.
 
I file system, ad esempio NTFS e FAT, usano una cache di tunnel per volume per mantenere brevemente i nomi di file e altri metadati per i file che vengono rinominati, collegati o eliminati. Questo tunneling dei nomi di 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 minifilter recupera le informazioni sul nome file normalizzate nella routine di callback preoperazione (PFLT_PRE_OPERATION_CALLBACK) per un'operazione di creazione, collegamento rigido o ridenominazione, deve chiamare FltGetTunneledName dalla routine di callback di postoperazione (PFLT_POST_OPERATION_CALLBACK) per recuperare le informazioni corrette sul nome del file.

Sebbene contenga numerose strutture UNICODE_STRING, la struttura FLT_FILE_NAME_INFORMATION non occupa molto spazio in memoria perché tutte le strutture UNICODE_STRING in una struttura FLT_FILE_NAME_INFORMATION condividono un singolo buffer.

Per analizzare il contenuto della stringa nome, chiamare FltParseFileNameInformation. Questa routine imposta i valori di Extension, Stream, FinalComponent, ParentDire NamesParsed membri di questa struttura.

I minifiltri sono responsabili della chiamata FltReleaseFileNameInformation per rilasciare la struttura FLT_FILE_NAME_INFORMATION quando non è più necessaria.

Fabbisogno

Requisito Valore
intestazione fltkernel.h (include Fltkernel.h)

Vedere anche

FLT_FILE_NAME_OPTIONS

FltGetDestinationFileNameInformation

FltGetFileNameInformation

FltGetFileNameInformationUnsafe

FltGetTunneledName

FltParseFileName

FltParseFileNameInformation

FltReferenceFileNameInformation

FltReleaseFileNameInformation

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK

UNICODE_STRING