Hostwinds Blog

Résultats de recherche pour:


Streams Windows NTFS L'image sélectionnée

Streams Windows NTFS

par: Karlito Bonnevie  /  Peut 24, 2022


Depuis 1995, le Microsoft Windows NTFS Le système de fichiers a pris en charge les flux.En fait, tous les "fichiers" NTFS sont réellement des flux.Ce que nous considérons normalement comme un fichier dans NTFS est plus précisément appelé un flux de données par défaut.Un flux de données par défaut n'est pas nommé.Qu'est-ce qu'un flux de données anonyme?Considérez le format de nom de fichier entièrement qualifié NTFS:

file-name:stream-name:stream-type

De gauche à droite, nous avons:

  • nom de fichier: Le nom du "fichier" (c'est-à-dire le flux de données par défaut).
  • nom de flux: Le nom de tout autre flux de données (nommé) joint à nom de fichier (un fichier peut avoir plusieurs flux).
  • type de flux: Pour tout flux, indique son type, les données $ étant les plus courantes.Un flux de données de type $ peut contenir tout ce qu'un fichier normal peut contenir.Pour une liste de types de flux possibles, voir Types de flux.

Un exemple suit:

myTextFile.txt

Il s'agit d'un flux de données par défaut.Comme mentionné, les flux de données par défaut ne sont pas nommés.Cela peut être vu dans sa forme de nom de fichier entièrement qualifiée:

myTextFile.txt::$DATA

Le fait qu'il n'y ait rien entre les deux colons (: :) indique qu'il s'agit d'un flux de données anonyme.Pour un flux de données par défaut, nous n'avons pas besoin d'utiliser le nom de fichier entièrement qualifié, bien que nous le pouvons.Par exemple, à partir de l'invite de commande Windows, les deux commandes suivantes s'ouvrent précisément le même flux de données par défaut:

notepad myTextFile.txt
notepad myTextFile.txt::$DATA

Pour simplifier les choses, nous utiliserons le terme "fichier" à la place du "flux de données par défaut" plus précis.

Vous pouvez créer un flux nommé dans un fichier en utilisant NTFS normal conventions de nommage.Par exemple, à partir de l'invite de commande, exécutez ce qui suit:

notepad foo.docx:bar.txt

Sélectionner Oui Lorsqu'on vous a demandé si vous souhaitez créer un nouveau fichier.Ensuite, saisissez le contenu suivant:

This is the named stream "bar.txt" that is in (attached to) the file "foo.docx".

Enregistrez et sortez le bloc-notes.

Lorsque vous exécutez la commande dir, vous verrez un fichier nommé foo.docx dont la taille, intéressant, est de 0 octets.Cependant, lorsque vous exécutez la commande dir / r, vous verrez le flux de données nommé que vous venez de créer, dont la taille est de 80 octets:

Ces deux tailles de flux ont un sens dans ce flux FOO.DOCX n'a pas de contenu tandis que Stream Foo.docx: Bar.txt a 80 octets de contenu.Pour aider à élucider cela, ajoutez du contenu au flux de données par défaut, comme suit:

notepad foo.docx

Entrez le texte suivant:

This is the default data stream (file) named "foo.docx", which has one named data stream attached to it, called "bar.txt".

Enregistrez et sortez le bloc-notes.

Exécutez à nouveau Dir / R et notez que le flux de données par défaut FOO.DOCX contient désormais 120 octets de données:

Pour cette raison, nous pouvons dire que les deux flux consomment 200 octets sur le volume.Cela dit, l'exécution de la commande DIR sans adoration fournit des informations quelque peu trompeuses - cela implique que FOO.DOCX ne contient que 120 octets de données, ce qui est inexact dans le sensVolume comme espace libre disponible:

del foo.docx
dir /r

La morale de l'histoire est peut-être d'utiliser toujours le commutateur / r.Ce qui soulève la question, comment trouvez-vous tous les fichiers contenant des flux "cachés"?Ce sujet est discuté ensuite.

Utiliser PowerShell pour trouver des flux

Si nous laissons le terme "fichier" signifie "Stream de données par défaut" et "Stream" signifie "Stream de données nommé", nous pouvons utiliser PowerShell pour trouver tous les fichiers contenant des flux comme suit.

Ouvrez une invite de commande PowerShell et exécutez éventuellement la commande suivante (cela supprime les messages d'erreur refusés du fichier éventuels):

$ErrorActionPreference = "SilentlyContinue"

Ensuite, exécutez les commandes suivantes:

Get-ChildItem -Path \ -Recurse | Get-Item -Stream * | Where-Object Stream -ne ':$DATA' | Convert-Path

Pour le volume actuel, cela renvoie une liste de tous les fichiers contenant un ou plusieurs flux.Ce pipeline PowerShell est expliqué comme suit:

  • Get-Childem -Path \ -recurse
    À partir du répertoire racine (dossier), obtient tous les fichiers sur le volume.
  • Get-item -stream *
    Obtient tous les flux de données associés à un fichier.Les fichiers (flux de données anonymes) retourneront ": $ data" comme valeur de la propriété du flux.Streams (Named Data Streams) renverra le nom du flux comme valeur de la propriété Stream (et ": $ Les données ne seront pas renvoyées).
  • Where-object stream -ne ': $ data'
    Supprime tous les fichiers dont la propriété Stream est ": $ data", ne laissant ainsi que des fichiers contenant un ou plusieurs flux nommés.
  • Convertir
    Sorti des chemins de fichier bien formatés.

Utilisation de PowerShell pour supprimer les flux

À partir d'une invite de commande PowerShell, vous pouvez supprimer le flux bar.txt du fichier foo.docx comme suit:

Remove-Item -Path .\foo.docx -Stream bar.txt

Si le nom du flux a des espaces, vous devez utiliser des citations, comme dans:

Remove-Item -Path ".\Bob's Grandfather.png" -Stream "Image Info.txt"

Utilisation des flux

L'intention d'origine des flux NTFS était de permettre l'interopérabilité du fichier Apple Macintosh, mais les flux NTFS peuvent être très utiles.Par exemple, vous souhaiterez peut-être «intégrer» des informations détaillées dans les fichiers photographiques de la famille:

Si le fichier image ci-dessus était nommé "Bob's Grandfather.png", vous pouvez ajouter un flux (en utilisant PowerShell) contenant des informations d'image détaillées, comme suit:

Set-Content -Path ".\Bob's Grandfather.png" -Stream "image-info.txt" -Value "This is Bob's grandfather (on his mother's side) in the Gold Rush Bar and Restaurant in Seattle, WA - circa 1856."

Pour afficher les métadonnées d'image que vous venez de définir, exécutez:

Get-Content -Path ".\Bob's Grandfather.png" -Stream "image-info.txt"

Notez que l'argument -stream nécessite que vous connaissiez le nom exact du ruisseau (les caractères génériques ne sont pas autorisés).Rappelez-vous que vous pouvez toujours obtenir des noms de flux à l'aide de Get-Item (qui accepte les wilkcards):

Get-Item -Path '.\Bob''s Grandfather.png' -Stream *

Pour le nom du flux recherché, regardez la propriété du flux dans la sortie résultante:

D'autres utilisations pour les flux NTFS peuvent inclure:

  • Stockage des mots clés liés à un fichier.
  • Fournir des informations récapitulatives pour un fichier.
  • Associer des polices et / ou des sons à un fichier.
  • À peu près toutes les métadonnées de fichier auxquelles vous pouvez penser.

Enfin, vous avez peut-être noté que votre volume contient un certain nombre de flux nommés Zone.Identifier.Ces flux sont généralement utilisés par Windows pour le stockage des zones de sécurité URL, qui déterminent si un fichier doit faire confiance ou non.Un exemple montrant comment afficher le contenu d'une zone.

Get-Content -Path .\sanders.net-May-2022.gz -Stream Zone.Identifier

Et via l'invite de commande Windows:

notepad sanders.net-May-2022.gz:Zone.Identifier

J'espère que vous avez trouvé cet article intéressant;Et vous trouverez peut-être des utilisations intéressantes pour les flux NTFS pour démarrer.

Écrit par Karlito Bonnevie  /  Peut 24, 2022