structure FLT_FILE_NAME_INFORMATION (fltkernel.h)

La structure FLT_FILE_NAME_INFORMATION contient des informations de nom de fichier.

Syntaxe

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;

Membres

Size

Taille, en octets, de la structure FLT_FILE_NAME_INFORMATION.

NamesParsed

Masque de bits d’indicateurs qui indiquent les composants de nom qui ont été analysés à partir de la chaîne Name par FltParseFileNameInformation. Notez que, lors de l’analyse de la chaîne Name , FltParseFileNameInformation définit cet indicateur pour chaque composant, que le composant soit présent dans la chaîne. Ces valeurs peuvent être combinées à l’aide de l’opérateur OR.

Indicateur Composant
FLTFL_FILE_NAME_PARSED_FINAL_COMPONENT FinalComponent
FLTFL_FILE_NAME_PARSED_EXTENSION Extension
FLTFL_FILE_NAME_PARSED_STREAM Flux
FLTFL_FILE_NAME_PARSED_PARENT_DIR ParentDir

Format

Format des informations de nom stockées dans le membre Name . Ce membre peut être l’une des valeurs suivantes. (Pour une explication de ces formats, consultez la section Remarques suivante.)

Valeur Signification
FLT_FILE_NAME_NORMALIZED Le membre Name contient le nom normalisé du fichier.
FLT_FILE_NAME_OPENED Le membre Name contient le nom utilisé lors de l’ouverture du fichier. Cette chaîne de nom n’est pas normalisée.
FLT_FILE_NAME_SHORT Le membre Name contient le nom court (8.3) du fichier. Le nom court d’un fichier n’inclut pas le nom du volume, le chemin du répertoire ou le nom du flux. Cette chaîne de nom n’est pas normalisée.

Name

UNICODE_STRING structure qui contient la chaîne de nom de fichier, mise en forme comme spécifié par le membre Format .

Volume

UNICODE_STRING structure qui contient le nom du volume analysé à partir de la chaîne Name . Si Format est FLT_FILE_NAME_SHORT, Volume.Length est égal à zéro.

Share

UNICODE_STRING structure qui contient le nom du partage réseau analysé à partir de la chaîne Name d’un fichier distant. Si Format est FLT_FILE_NAME_SHORT, Share.Length est égal à zéro.

Extension

UNICODE_STRING structure qui contient l’extension analysée à partir de la chaîne Name . Si aucune extension n’est trouvée, FltParseFileNameInformation définit Extension.Length sur zéro.

Stream

UNICODE_STRING structure qui contient le nom du flux analysé à partir de la chaîne Name . Si aucun nom de flux n’est trouvé ou si Format est FLT_FILE_NAME_SHORT, FltParseFileNameInformation définit Stream. Longueur à zéro.

FinalComponent

UNICODE_STRING structure qui contient le composant de nom final analysé à partir de la chaîne Name . Si aucun nom de composant final n’est trouvé ou si Format est FLT_FILE_NAME_SHORT, FltParseFileNameInformation définit FinalComponent.Length sur zéro.

ParentDir

UNICODE_STRING structure qui contient le nom de répertoire parent analysé à partir de la chaîne Name par FltParseFileNameInformation. Si aucun nom de répertoire parent n’est trouvé ou si Format est FLT_FILE_NAME_SHORT, FltParseFileNameInformation définit ParentDir.Length sur zéro.

Remarques

Le membre Name contient l’un des éléments suivants :

  • Nom normalisé du fichier
  • Nom ouvert du fichier
  • Nom court du fichier
Un nom de fichier est considéré comme normalisé si tous les éléments suivants sont true :
  • Il contient le chemin d’accès complet du répertoire pour le fichier, y compris le nom du volume, sauf si l’utilisateur a ouvert le fichier par ID de fichier, mais n’a pas de privilège de traverse pour l’ensemble du chemin d’accès. (Pour plus d’informations, consultez FltGetFileNameInformation.)
  • Le nom du volume est le nom de l’objet d’appareil non persistant du volume (par exemple, « \Device\HarddiskVolume1 »).
  • Tous les noms courts sont développés vers les noms longs équivalents.
  • Toutes les chaînes de fin « :$DATA » ou « ::$DATA » sont supprimées du nom du flux.
  • Tous les points de montage sont résolus.
Voici un exemple de nom de fichier normalisé pour un fichier local :
\Device\HarddiskVolume1\Documents and Settings\MyUser\My Documents\Test Results.txt:stream1

Voici un exemple de nom de fichier normalisé pour un fichier distant :

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

Le nom ouvert d’un fichier est le nom utilisé lors de l’ouverture du fichier. Comme le nom normalisé, il contient le chemin complet du répertoire du fichier, y compris le nom du volume. Il diffère du nom normalisé des manières suivantes :

  • Le chemin du répertoire du fichier peut contenir des noms courts ainsi que des noms longs.
  • Les chaînes de fin « :$DATA » et « ::$DATA » ne sont pas supprimées du nom du flux.
  • Les points de montage ne sont pas résolus.
Voici un exemple de nom de fichier ouvert pour un fichier local :
\Device\HarddiskVolume1\Docume~1\MyUser\MYDOCU~1\Test Results.txt:stream1:$DATA

Voici un exemple de nom de fichier ouvert pour un fichier distant :

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

Le nom court d’un fichier est le nom court (8.3) du composant final du nom de fichier. Étant donné qu’il est généré lors de l’ouverture du fichier, le nom court n’est pas disponible pour un objet de fichier non ouvert et il n’est pas disponible dans le chemin d’accès create dispatch (« pré-create »). Il n’est pas non plus disponible pour les objets de fichier de flux NTFS. Tous les fichiers ouverts n’ont pas de noms de fichiers courts. Par exemple, sur les partitions NTFS où la génération de nom de fichier court a été désactivée, aucun fichier n’a de noms de fichiers courts.

Voici un exemple de nom court pour un fichier :

TestRe~1.txt

Pour obtenir une structure FLT_FILE_NAME_INFORMATION pour un fichier, appelez FltGetFileNameInformation, FltGetFileNameInformationUnsafe ou FltGetDestinationFileNameInformation. Ces routines retournent un pointeur vers une structure FLT_FILE_NAME_INFORMATION appartenant au Gestionnaire de filtres qui est partagée par tous les minifiltres.

Note Ne modifiez pas le contenu des structures FLT_FILE_NAME_INFORMATION, car ces structures sont mises en cache par le Gestionnaire de filtres afin que tous les minifiltres puissent les utiliser. Si votre minifiltre doit modifier ces informations d’une manière ou d’une autre, il doit d’abord les copier dans une autre mémoire tampon.
 
Les systèmes de fichiers tels que NTFS et FAT utilisent un cache de tunnel par volume pour conserver brièvement les noms de fichiers et autres métadonnées pour les fichiers qui sont renommés, liés à ou supprimés. Ce tunneling de nom de fichier peut entraîner l’invalidation du composant final dans les informations de nom de fichier normalisées retournées par un appel de préopération à FltGetFileNameInformation, FltGetFileNameInformationUnsafe ou FltGetDestinationFileNameInformation . Si un minifiltre récupère des informations de nom de fichier normalisées dans la routine de rappel de préopération (PFLT_PRE_OPERATION_CALLBACK) pour une opération de création, de liaison matérielle ou de renommage, il doit appeler FltGetTunneledName à partir de sa routine de rappel postopératoire (PFLT_POST_OPERATION_CALLBACK) pour récupérer les informations de nom de fichier correctes pour le fichier.

Bien qu’elle contienne de nombreuses structures UNICODE_STRING , la structure FLT_FILE_NAME_INFORMATION n’occupe pas beaucoup d’espace en mémoire, car toutes les structures UNICODE_STRING d’une structure FLT_FILE_NAME_INFORMATION partagent une seule mémoire tampon.

Pour analyser le contenu de la chaîne Name , appelez FltParseFileNameInformation. Cette routine définit les valeurs des membres Extension, Stream, FinalComponent, ParentDir et NamesParsed de cette structure.

Les minifiltres sont chargés d’appeler FltReleaseFileNameInformation pour libérer la structure FLT_FILE_NAME_INFORMATION lorsqu’elle n’est plus nécessaire.

Configuration requise

Condition requise Valeur
En-tête fltkernel.h (inclure Fltkernel.h)

Voir aussi

FLT_FILE_NAME_OPTIONS

FltGetDestinationFileNameInformation

FltGetFileNameInformation

FltGetFileNameInformationUnsafe

FltGetTunneledName

FltParseFileName

FltParseFileNameInformation

FltReferenceFileNameInformation

FltReleaseFileNameInformation

PFLT_POST_OPERATION_CALLBACK

PFLT_PRE_OPERATION_CALLBACK

UNICODE_STRING