Flux de fichiers (systèmes de fichiers locaux)

Un flux est une séquence d’octets. Dans le système de fichiers NTFS, les flux contiennent les données écrites dans un fichier et ceci donne plus d’informations sur un fichier que les attributs et les propriétés. Par exemple, vous pouvez créer un flux qui contient des mots clés de recherche ou l’identité du compte d’utilisateur qui crée un fichier.

Chaque flux associé à un fichier a sa propre taille d’allocation, sa taille réelle et sa longueur de données valide :

  • La taille d’allocation est la quantité d’espace disque réservée à un flux.
  • La taille réelle correspond au nombre d’octets utilisés par un appelant.
  • La longueur de données valide (VDL) correspond au nombre d’octets qui sont initialisés à partir de la taille d’allocation pour le flux.

Chaque flux conserve également son propre état pour la compression, le chiffrement et la fragmentation. L’attribut FILE_ATTRIBUTE_SPARSE_FILE sur le fichier est défini dans le membre dwFileAttributes de la structure WIN32_FIND_DATA retournée par les fonctions FindFirstFile, FindFirstFileEx et FindNextFile si l’un des flux a déjà été partiellement alloué. GetFileAttributes, GetFileAttributesEx, GetFileAttributesTransacted, GetFileInformationByHandleet GetFileInformationByHandleEx retournent l’état partiellement alloué du flux de données par défaut si aucun flux n’est spécifié.

Aucune donnée temporelle de fichier n’est associée à un flux. Les données temporelles d’un fichier sont mises à jour lorsque le flux d’un fichier est mis à jour.

Les verrouillages opportunistes sont conservés par flux. Les modes de partage sont également gérés par flux. Lorsque la suppression de l’accès est demandée sur un fichier, le système d’exploitation recherche l’accès de suppression sur tous les flux ouverts d’un fichier. Si un autre processus a ouvert un flux sans l’autorisation FILE_SHARE_DELETE, vous ne pouvez pas ouvrir le fichier pour l’accès à la suppression.

Si un fichier en cours de copie dispose d’un flux de données et que le redirecteur réseau est utilisé, le fichier ne peut être copié que si le client dispose à la fois de l’autorisation de lecture et de l’autorisation d’attributs de lecture.

Conventions d’affectation de noms pour les flux

Lorsqu’il est défini à partir de la ligne de commande de l’interpréteur de commandes Windows, le nom complet d’un flux est « filename:stream name:stream name:stream type », comme dans l’exemple suivant : « myfile.dat:stream1:$DATA ».

Tous les caractères légaux d’un nom de fichier sont également légaux pour le nom du flux, y compris les espaces. Pour plus d’informations, consultez Nommer un fichier. Le type de flux (également appelé code de type d’attribut) est interne au système de fichiers NTFS. Les utilisateurs ne peuvent donc pas créer de nouveaux types de flux, mais ils peuvent ouvrir des types de systèmes de fichiers NTFS existants. Les valeurs du spécificateur de type de flux commencent toujours par le symbole dollar ($). Pour obtenir la liste des types de flux, voir ci-dessous.

Par défaut, le flux de données par défaut n’est pas nommé. Pour spécifier entièrement le flux de données par défaut, utilisez « filename::$DATA », où $DATA est le type de flux. Il s’agit de l’équivalent de « filename ». Vous pouvez créer un flux nommé dans le fichier à l’aide des conventions d’affectation de noms de fichier. Notez que « $DATA » est un nom de flux légal. Par exemple, le nom complet d’un flux nommé « $DATA » sur un fichier nommé « sample » serait « sample:$DATA:$DATA ». Si vous avez créé un flux nommé « bar » sur le même fichier, son nom complet est « sample:bar:$DATA ».

Lors de la création et de l’utilisation de fichiers qui ont des noms à un caractère, mettez un point avant le nom de fichier et une barre oblique inverse après (.) ou utilisez un nom de chemin complet. La raison en est que Windows traite les noms de fichiers à un caractère comme des lettres de lecteur. Lorsqu’une lettre de lecteur est spécifiée avec un chemin relatif, deux-points sépare la lettre de lecteur du chemin d’accès. Lorsqu’il existe une ambiguïté quant à savoir si un nom à un caractère est une lettre de lecteur ou un nom de fichier, Windows suppose qu’il s’agit d’une lettre de lecteur si la chaîne qui suit les deux-points est un chemin d’accès valide, même si la lettre de lecteur n’est pas valide.

Types de flux

Voici la liste des types de flux NTFS, également appelés codes de type d’attribut. Certains des types de flux sont internes à NTFS et leur format n’est pas documenté.

Type de flux Description
::$ATTRIBUTE_LIST Contient une liste de tous les attributs qui composent le fichier et identifie l’emplacement de chaque attribut.
::$BITMAP Une bitmap utilisée par les index pour gérer l’espace libre d’arbre B d’un répertoire. L’arbre B est géré en blocs de 4 Ko (quelle que soit la taille du cluster) et permet de gérer l’allocation de ces blocs. Ce type de flux est présent sur chaque répertoire.
::$DATA Flux de données. Le flux de données par défaut n’a pas de nom. Les flux de données peuvent être énumérés à l’aide des fonctions FindFirstStreamW et FindNextStreamW.
::$EA Contient des données d’attributs étendus.
::$EA_INFORMATION Contient des informations de support sur les attributs étendus.
::$FILE_NAME Nom du fichier, en caractères Unicode. Cela inclut le nom court du fichier ainsi que tous les liens physiques.
::$INDEX_ALLOCATION Type de flux d’un répertoire. Permet d’implémenter l’allocation de nom de fichier pour les grands répertoires. Ce flux représente le répertoire lui-même et contient toutes les données du répertoire. Les modifications apportées aux flux de ce type sont enregistrées dans le journal des modifications NTFS. Le nom par défaut d’un type de flux $INDEX_ALLOCATION est $I30, de sorte que « DirName », « DirName::$INDEX_ALLOCATION » et « DirName:$I30:$INDEX_ALLOCATION » sont tous équivalents.
::$INDEX_ROOT Ce flux représente la racine de l’arbre B d’un index. Ce type de flux est présent sur chaque répertoire.
::$LOGGED_UTILITY_STREAM Semblable à ::$DATA, mais les opérations sont enregistrées dans le journal des modifications NTFS. Utilisé par EFS et Transactional NTFS (TxF). La paire « :StreamName:$StreamType » pour EFS est « :$EFS:$LOGGED_UTILITY_STREAM » et pour TxF est « :$TXF_DATA:$LOGGED_UTILITY_STREAM ».
::$OBJECT_ID ID de 16 octets utilisé pour identifier le fichier pour le service de suivi des liens.
::$REPARSE_POINT Données de point d’analyse.

 

Utilisation de flux