Dateidatenströme (lokale Dateisysteme)

Ein Datenstrom stellt eine Abfolge von Bytes dar. Im NTFS-Dateisystem enthalten Datenströme die Daten, die in eine Datei geschrieben werden. Sie liefern mehr Informationen zu einer Datei als Attribute und Eigenschaften. Sie können beispielsweise einen Datenstrom erstellen, der Suchschlüsselwörter oder die Identität des Benutzerkontos enthält, unter dem eine Datei erstellt wurde.

Jeder Datenstrom, der einer Datei zugeordnet ist, hat seine eigene Zuordnungsgröße, tatsächliche Größe und gültige Datenlänge:

  • Die Zuordnungsgröße ist die Menge an Speicherplatz auf dem Datenträger, die für einen Datenstrom reserviert ist.
  • Die tatsächliche Größe entspricht der Anzahl von Bytes, die von einem Aufrufer verwendet werden.
  • Die gültige Datenlänge (Valid Data Length, VDL) entspricht der Anzahl von Bytes, die aus der Zuordnungsgröße für den Datenstrom initialisiert werden.

Jeder Datenstrom behält auch seinen eigenen Zustand bei, um Komprimierung, Verschlüsselung und geringe Dichte zu unterstützen. Das FILE_ATTRIBUTE_SPARSE_FILE-Attribut für die Datei wird im dwFileAttributes-Member der WIN32_FIND_DATA-Struktur festgelegt, die von der FindFirstFile-, FindFirstFileEx- und FindNextFile-Funktion zurückgegeben wird, wenn einer der Datenströme jemals über eine geringe Dichte verfügt hat. GetFileAttributes, GetFileAttributesEx, GetFileAttributesTransacted, GetFileInformationByHandle und GetFileInformationByHandleEx geben den Zustand geringer Dichte des Standarddatenstroms zurück, wenn kein Datenstrom angegeben ist.

Einem Datenstrom sind keine Dateizeitangaben zugeordnet. Die Dateizeitangaben für eine Datei werden aktualisiert, wenn ein Datenstrom in einer Datei aktualisiert wird.

Opportunistische Sperren werden pro Datenstrom verwaltet. Freigabemodi werden auch pro Datenstrom verwaltet. Wenn der Löschzugriff für eine Datei angefordert wird, überprüft das Betriebssystem bei jedem in der Datei geöffneten Datenstrom, ob darauf zugegriffen werden kann und ob er gelöscht werden darf. Wenn ein anderer Prozess einen Datenstrom ohne die FILE_SHARE_DELETE-Berechtigung geöffnet hat, können Sie die Datei nicht für den Löschzugriff öffnen.

Wenn eine Datei, die kopiert wird, über einen Datenstrom verfügt und der Netzwerk-Redirector verwendet wird, kann die Datei nur kopiert werden, wenn der Client sowohl über die Leseberechtigung als auch über die Berechtigung zum Lesen von Attributen verfügt.

Namenskonventionen für Datenströme

Wenn in der Befehlszeile der Windows-Shell angegeben, lautet der vollständige Name eines Datenstroms „Dateiname:Datenstromname:Datenstromtyp“, wie im folgenden Beispiel zu sehen: „myfile.dat:stream1:$DATA“.

Alle für Dateinamen zulässige Zeichen sind auch für Datenstromnamen zulässig, einschließlich Leerzeichen. Weitere Informationen finden Sie unter Benennen einer Datei. Der Datenstromtyp (auch Attributtypcode genannt) ist ein internes Merkmal des NTFS-Dateisystems. Benutzer können daher keine neuen Datenstromtypen erstellen, aber vorhandene NTFS-Dateisystemtypen öffnen. Spezifiziererwerte für Datenstromtypen beginnen immer mit dem Dollarzeichen ($). Eine Liste der Datenstromtypen finden Sie unten.

Der Standarddatenstrom hat standardmäßig keinen Namen. Um den Standarddatenstrom vollständig anzugeben, verwenden Sie „Dateiname::$DATA“, wobei $DATA dem Datenstromtyp entspricht. Dies entspricht „Dateiname“. Sie können einen benannten Datenstrom in der Datei unter Verwendung der Dateinamenskonventionen erstellen. Beachten Sie, dass „$DATA“ ein zulässiger Datenstromname ist. Der vollständige Name eines Datenstroms mit dem Namen „$DATA“ in einer Datei mit dem Namen „sample“ lautet beispielsweise „sample:$DATA:$DATA“. Wenn Sie einen Datenstrom namens „bar“ in derselben Datei erstellt haben, lautet der vollständige Name „sample:bar:$DATA“.

Wenn Sie Dateien erstellen und verwenden, deren Name aus nur einem Zeichen besteht, stellen Sie dem Dateinamen einen Punkt (.) gefolgt von einem umgekehrten Schrägstrich voran, oder verwenden Sie einen vollqualifizierten Pfadnamen. Der Grund dafür besteht darin, dass Windows aus einem Zeichen bestehende Dateinamen als Laufwerkbuchstaben behandelt. Wenn ein Laufwerkbuchstabe mit einem relativen Pfad angegeben ist, wird der Laufwerkbuchstabe durch einen Doppelpunkt vom Pfad getrennt. Wenn nicht klar ist, ob es sich bei einem aus nur einem Zeichen bestehenden Namen um einen Laufwerkbuchstaben oder einen Dateinamen handelt, geht Windows davon aus, dass es ein Laufwerkbuchstabe ist, wenn die auf den Doppelpunkt folgende Zeichenfolge ein gültiger Pfad ist, auch wenn der Laufwerkbuchstabe ungültig ist.

Datenstromtypen

Im Folgenden eine Liste der NTFS-Datenstromtypen, die auch als Attributtypcodes bezeichnet werden. Einige Datenstromtypen sind interne Merkmale von NTFS. Ihr Format ist nicht dokumentiert.

Datenstromtyp Beschreibung
::$ATTRIBUTE_LIST Enthält eine Liste aller Attribute, aus denen die Datei besteht, und gibt an, wo sich jedes Attribut befindet.
::$BITMAP Eine Bitmap, die von Indizes verwendet wird, um den freien Speicherplatz der B-Struktur für ein Verzeichnis zu verwalten. Die B-Struktur wird in 4 KB-Blöcken (unabhängig von der Clustergröße) verwaltet. Dieser Umstand wird genutzt, um die Zuordnung dieser Blöcke zu verwalten. Dieser Datenstromtyp ist in jedem Verzeichnis vorhanden.
::$DATA Datenstrom. Der Standarddatenstrom hat keinen Namen. Datenströme können mithilfe der FindFirstStreamW- und FindNextStreamW-Funktion aufgelistet werden.
::$EA Enthält erweiterte Attributdaten.
::$EA_INFORMATION Enthält unterstützende Informationen zu den erweiterten Attributen.
::$FILE_NAME Der Name der Datei in Unicode-Zeichen. Dazu gehören auch der Kurzname der Datei sowie feste Links.
::$INDEX_ALLOCATION Der Datenstromtyp eines Verzeichnisses. Wird verwendet, um die Dateinamenszuordnung für umfangreiche Verzeichnisse zu implementieren. Dieser Datenstrom stellt das Verzeichnis selbst dar und enthält alle Daten des Verzeichnisses. Änderungen an Datenströmen dieses Typs werden im NTFS-Änderungsjournal protokolliert. Der standardmäßige Datenstromname eines $INDEX_ALLOCATION-Datenstromtyps lautet „$I30“, sodass „DirName“, „DirName::$INDEX_ALLOCATION“ und „DirName:$I30:$INDEX_ALLOCATION“ gleichwertig sind.
::$INDEX_ROOT Dieser Datenstrom stellt den Stamm der B-Struktur eines Indexes dar. Dieser Datenstromtyp ist in jedem Verzeichnis vorhanden.
::$LOGGED_UTILITY_STREAM Ähnlich wie ::$DATA, allerdings werden Vorgänge im NTFS-Änderungsjournal protokolliert. Wird von EFS und Transactional NTFS (TxF) verwendet. Das „:StreamName:$StreamType“-Paar für EFS lautet „:$EFS:$LOGGED_UTILITY_STREAM“ und für TxF „:$TXF_DATA:$LOGGED_UTILITY_STREAM“.
::$OBJECT_ID Eine 16-Byte-ID, die zum Identifizieren der Datei für den Linküberwachungsdienst verwendet wird.
::$REPARSE_POINT Die Analysepunktdaten

 

Verwenden von Datenströmen