Hostwinds Blog

Suchergebnisse für:


Windows NTFS -Streams Ausgewähltes Bild

Windows NTFS -Streams

durch: Karlito Bonnevie  /  Kann 24, 2022


Seit 1995 das Microsoft Windows NTFS Dateisystem hat Streams unterstützt.Tatsächlich sind alle NTFS -Dateien tatsächlich Streams.Was wir normalerweise als Datei in NTFS betrachten, wird genauer als Standarddatenstrom bezeichnet.Ein Standarddatenstrom ist unbenannt.Was ist ein unbenannter Datenstrom?Betrachten Sie das voll qualifizierte Dateiname -Format von NTFs:

file-name:stream-name:stream-type

Von links nach rechts haben wir:

  • Dateinamen: Der Name der "Datei" (d. H. Standarddatenstrom).
  • Streamname: Der Name einer alternativen (benannten) Datenströme, die an angehängt sind Dateinamen (Eine Datei kann mehrere Streams haben).
  • Stream-Typ: Für jeden Stream gibt es seinen Typ an, wobei $ data am häufigsten ist.Ein Stream von Typ $ Data kann alles enthalten, was eine normale Datei enthalten kann.Eine Liste möglicher Stream -Typen finden Sie unter Streamtypen.

Ein Beispiel folgt:

myTextFile.txt

Dies ist ein Standarddatenstrom.Wie bereits erwähnt, sind Standarddatenströme unbenannt.Dies ist in seinem voll qualifizierten Dateinamenformular zu sehen:

myTextFile.txt::$DATA

Die Tatsache, dass es nichts zwischen den beiden Kolons gibt (: :) zeigt, dass dies ein unbenannter Datenstrom ist.Für einen Standarddatenstrom müssen wir den voll qualifizierten Dateinamen nicht verwenden, obwohl wir können.Beispielsweise öffnen die folgenden zwei Befehle aus der Windows -Eingabeaufforderung genau den gleichen Standarddatenstrom:

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

Um die Dinge zu vereinfachen, verwenden wir den Begriff "Datei" anstelle des genaueren "Standarddatenstroms".

Sie können einen benannten Stream in einer Datei mit normalem NTFS erstellen Regeln der Namensgebung.Führen Sie beispielsweise aus der Eingabeaufforderung Folgendes aus:

notepad foo.docx:bar.txt

Wählen Ja Auf die Frage, ob Sie eine neue Datei erstellen möchten.Geben Sie als nächstes den folgenden Inhalt ein:

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

Speichern und beenden Sie den Notizblock.

Wenn Sie den Befehl DIR ausführen, sehen Sie eine Datei namens Foo.docx, deren Größe interessanterweise 0 Bytes ist.Wenn Sie jedoch den Befehl DIR /R ausführen, sehen Sie den genannten Datenstrom, den Sie gerade erstellt haben, dessen Größe 80 Bytes beträgt:

Diese beiden Stream -Größen sind in diesem Stream Foo.docx keinen Inhalt, während Stream foo.docx: bar.txt 80 Bytes -Inhalte hat.Um dies zu erleichtern, fügen Sie den Standarddatenstrom wie folgt einige Inhalte hinzu:

notepad foo.docx

Geben Sie den folgenden Text ein:

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

Speichern und beenden Sie den Notizblock.

Führen Sie erneut Dir /R aus und beachten Sie, dass der Standarddatenstrom Foo.docx jetzt 120 Datenbytes enthält:

Aus diesem Grund können wir feststellen, dass die beiden Streams 200 Bytes auf dem Volumen verbrauchen.Das Ausführen des Befehls "Unedorned DIR" liefert jedoch etwas irreführende Informationen - dies impliziert, dass Foo.docx nur 120 Datenbytes enthält, was in dem Sinne ungenau istVolumen als verfügbarer freier Speicherplatz:

del foo.docx
dir /r

Die Moral der Geschichte besteht vielleicht darin, immer den /R -Schalter zu verwenden.Was wirft die Frage auf, wie finden Sie alle Dateien, die "versteckte" Streams enthalten?Dieses Thema wird als nächstes erörtert.

Verwenden von PowerShell, um Streams zu finden

Wenn wir den Begriff "Datei" mittlerer "Standarddatenstrom" und "Stream" Mean "Named Data Stream" zulassen, können wir PowerShell verwenden, um alle Dateien zu finden, die Streams wie folgt enthalten.

Öffnen Sie eine Eingabeaufforderung für PowerShell -Eingabeaufforderung und führen Sie den folgenden Befehl optional aus (dies unterdrückt möglicherweise einen ärgerlichen Dateizugriff verweigerte Fehlermeldungen):

$ErrorActionPreference = "SilentlyContinue"

Führen Sie als nächstes die folgenden Befehle aus:

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

Für das aktuelle Volumen wird eine Liste aller Dateien zurückgegeben, die einen oder mehrere Streams enthalten.Diese PowerShell -Pipeline wird wie folgt erklärt:

  • Get -childitem -Path \ -Recurse
    Beginnend im Stammverzeichnis (Ordner) wird alle Dateien auf dem Volumen abgerufen.
  • Get -item -stream *
    Erhält alle Datenströme, die einer Datei zugeordnet sind.Dateien (unbenannte Datenströme) geben ": $ data" als Wert der Stream -Eigenschaft zurück.Streams (benannte Datenströme) geben den Namen des Streams als Wert der Stream -Eigenschaft zurück (und ": $ Daten werden nicht zurückgegeben).
  • Wo -Objekt -Stream -ne ': $ data'
    Entfernt alle Dateien, deren Stream -Eigenschaft ": $ Data" lautet, so dass nur Dateien mit einem oder mehreren benannten Streams enthalten sind.
  • CONVERT-Pfad
    Ausgibt gut formatierte Dateipfade.

Verwenden von PowerShell zum Löschen von Streams

Aus einer Eingabeaufforderung von PowerShell können Sie die Stream -Bar.txt aus der Datei foo.docx wie folgt entfernen:

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

Wenn der Stream -Name Leerzeichen hat, müssen Sie Zitate verwenden, wie in:

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

Verwenden von Streams

Die ursprüngliche Absicht von NTFS -Streams war es, die Interoperabilität von Apple Macintosh -Datei zu ermöglichen, aber NTFS -Streams können sehr praktisch sein.Sie möchten beispielsweise detaillierte Informationen in Familienfotografien "einbetten":

Wenn die obige Bilddatei "Bobs Großvater.png" heißt, können Sie wie folgt einen Stream (mit PowerShell) mit detaillierten Bildinformationen hinzufügen:

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."

Um die Bildmetadaten anzuzeigen, die Sie gerade festgelegt haben, rennen Sie:

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

Beachten Sie, dass das Stream -Argument erfordert, dass Sie den genauen Namen des Streams kennen (Wildcards sind nicht zulässig).Denken Sie daran, dass Sie immer Streamnamen mit Get-iTEM erhalten können (was Platzhalter akzeptiert):

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

Sehen Sie sich für den gesuchten Stream -Namen die Stream -Eigenschaft in der resultierenden Ausgabe an:

Andere Verwendungen für NTFS -Streams können umfassen:

  • Speichern von Schlüsselwörtern im Zusammenhang mit einer Datei.
  • Bereitstellung von zusammenfassenden Informationen für eine Datei.
  • Verfassen und/oder Sounds mit einer Datei.
  • So ziemlich jede Dateimetadaten, an die Sie sich vorstellen können.

Zuletzt haben Sie vielleicht festgestellt, dass Ihr Volumen eine Reihe von Streams namens Zone enthält. Identifikator.Diese Streams werden im Allgemeinen von Windows für die Speicherung von URL -Sicherheitszonen verwendet, die feststellen, ob eine Datei vertrauenswürdig sein sollte oder nicht.Ein Beispiel, das zeigt, wie der Inhalt einer Zone angezeigt wird. Der Identifikator Stream folgt:

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

Und über die Windows -Eingabeaufforderung:

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

Hoffentlich haben Sie diesen Artikel interessant gefunden;Und vielleicht finden Sie einige interessante Verwendungszwecke, damit NTFS -Streams starten können.

Geschrieben von Karlito Bonnevie  /  Kann 24, 2022