Partager via


FILE_STREAM_INFORMATION structure (ntifs.h)

La structure FILE_STREAM_INFORMATION est utilisée pour énumérer les flux d’un fichier.

Syntaxe

typedef struct _FILE_STREAM_INFORMATION {
  ULONG         NextEntryOffset;
  ULONG         StreamNameLength;
  LARGE_INTEGER StreamSize;
  LARGE_INTEGER StreamAllocationSize;
  WCHAR         StreamName[1];
} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;

Membres

NextEntryOffset

Décalage de l’entrée FILE_STREAM_INFORMATION suivante. Ce membre est égal à zéro si aucune autre entrée ne suit celle-ci.

StreamNameLength

Longueur, en octets, de la chaîne StreamName .

StreamSize

Taille, en octets, du flux.

StreamAllocationSize

Taille d’allocation de flux de fichiers, en octets. En règle générale, cette valeur est un multiple de la taille du secteur ou du cluster de l’appareil physique sous-jacent.

StreamName[1]

Chaîne Unicode qui contient le nom du flux.

Remarques

La structure FILE_STREAM_INFORMATION est utilisée pour énumérer les flux d’un fichier. Cette opération peut être effectuée de l’une des manières suivantes :

  • En appelant FltQueryInformationFile ou ZwQueryInformationFile et en spécifiant FileStreamInformation pour le paramètre FileInformationClass . Au retour, la mémoire tampon FileInformation contient une structure FILE_STREAM_INFORMATION pour chaque flux de fichiers.

  • En envoyant une requête IRP_MJ_QUERY_INFORMATION au système de fichiers et en spécifiant FileStreamInformation pour le paramètre FileInformationClass . Au retour, Irp-AssociatedIrp.SystemBuffer> contient une structure FILE_STREAM_INFORMATION pour chaque flux de fichiers.

Aucun droit d’accès spécifique n’est requis pour interroger ces informations. Par conséquent, ces informations sont disponibles tant que le fichier est ouvert.

La prise en charge de l’énumération de flux dépend du système de fichiers. Si un système de fichiers ne prend pas en charge l’énumération de flux, il doit retourner STATUS_INVALID_PARAMETER ou STATUS_NOT_IMPLEMENTED pour ces demandes.

Si un système de fichiers prend en charge l’énumération de flux, mais que le fichier n’a pas d’autres flux que le flux de données par défaut, qui n’est pas nommé, le système de fichiers doit retourner une structure de FILE_STREAM_INFORMATION unique contenant « ::$DATA » ou une chaîne Unicode de longueur nulle en tant que StreamName.

NTFS retourne « ::$DATA » en tant que StreamName pour le flux de données par défaut.

Pour un flux de données nommé, NTFS ajoute « :$DATA » au nom du flux. Par exemple, pour un flux de données utilisateur portant le nom « Authors », NTFS retourne « :Authors :$DATA » en tant que StreamName.

Lors de l’appel d’une routine telle que ZwCreateFile pour ouvrir un flux de fichiers nommé, la partie « :$DATA » du nom peut être omise. Par exemple, pour ouvrir le flux « Authors » d’un fichier nommé « Book », l’appelant peut spécifier « Book :Authors » ou « Book :Authors :$DATA » comme nom de flux. Les deux noms sont équivalents.

La taille de la mémoire tampon passée dans le paramètre FileInformation à FltQueryInformationFile ou ZwQueryInformationFile doit être au moins sizeof (FILE_STREAM_INFORMATION). Si cette mémoire tampon n’est pas suffisamment grande pour contenir une structure FILE_STREAM_INFORMATION pour chaque flux de fichiers, FltQueryInformationFile ou ZwQueryInformationFile retourne STATUS_BUFFER_OVERFLOW ou STATUS_BUFFER_TOO_SMALL. Étant donné qu’un tel appel à FltQueryInformationFile ou ZwQueryInformationFile ne retourne pas la taille de mémoire tampon requise, les pilotes de filtre doivent effectuer un ou plusieurs appels supplémentaires à FltQueryInformationFile ou ZwQueryInformationFile, en passant une mémoire tampon plus grande dans chaque appel, jusqu’à ce que la mémoire tampon soit suffisamment grande.

La prise en charge des flux de données nommés est spécifique au système de fichiers. Les pilotes de filtre de système de fichiers peuvent déterminer si un système de fichiers prend en charge les flux nommés de l’une des manières suivantes :

  • En appelant FltQueryVolumeInformation ou ZwQueryVolumeInformationFile et en spécifiant FileFsAttributeInformation pour le paramètre FsInformationClass . Au retour, la mémoire tampon FsInformation contient une structure FILE_FS_ATTRIBUTE_INFORMATION. Si le bit FILE_NAMED_STREAMS est défini dans le membre FileSystemAttributes de cette structure, le système de fichiers prend en charge les flux nommés.

  • En envoyant une requête IRP_MJ_QUERY_VOLUME_INFORMATION au système de fichiers et en spécifiant FileFsAttributeInformation pour le paramètre FsInformationClass . Au retour, Irp-AssociatedIrp.SystemBuffer> contient une structure FILE_FS_ATTRIBUTE_INFORMATION. Si le bit FILE_NAMED_STREAMS est défini dans le membre FileSystemAttributes de cette structure, le système de fichiers prend en charge les flux nommés.

La structure FILE_STREAM_INFORMATION doit être alignée sur une limite LONGLONG (8 octets). Si une mémoire tampon contient au moins deux de ces structures, la valeur NextEntryOffset dans chaque entrée, à l’exception de la dernière, se situe sur une limite de 8 octets.

Configuration requise

Condition requise Valeur
En-tête ntifs.h (include Ntifs.h, Fltkernel.h)

Voir aussi

FltQueryInformationFile

FltQueryVolumeInformation

IRP_MJ_QUERY_INFORMATION

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwCreateFile

ZwQueryInformationFile

ZwQueryVolumeInformationFile