Partager via


structure FILE_STREAM_INFORMATION (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 de 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 . Lors du 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. Lors du 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. Ainsi, 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 de flux de données par défaut, qui n’est pas nommé, le système de fichiers doit retourner une seule structure FILE_STREAM_INFORMATION contenant « ::$DATA » ou une chaîne Unicode de longueur nulle comme 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 » comme 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 « Auteurs » 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 taille de (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 infructueux à 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. En retour, la mémoire tampon FsInformation contient une structure FILE_FS_ATTRIBUTE_INFORMATION. Si le bit FILE_NAMED_STREAMS est défini dans le FileSystemAttributes membre 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. En retour, Irp->AssociatedIrp.SystemBuffer contient une structure FILE_FS_ATTRIBUTE_INFORMATION. Si le bit FILE_NAMED_STREAMS est défini dans le FileSystemAttributes membre 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 deux ou plusieurs de ces structures, la NextEntryOffset valeur dans chaque entrée, à l’exception du dernier, tombe sur une limite de 8 octets.

Exigences

Exigence Valeur
d’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