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
ouFltQueryInformationFile et en spécifiant FileStreamInformation pour le paramètre FileInformationClassZwQueryInformationFile . 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 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
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) |