File Streams (Lokale Dateisysteme)
Ein Stream ist eine Folge von Bytes. Im NTFS-Dateisystem enthalten Streams die Daten, die in eine Datei geschrieben werden und mehr Informationen zu einer Datei als Attribute und Eigenschaften enthalten. Beispielsweise können Sie einen Stream erstellen, der Suchbegriffe enthält, oder die Identität des Benutzerkontos, das eine Datei erstellt.
Jeder Stream, der einer Datei zugeordnet ist, verfügt über eine eigene Zuordnungsgröße, tatsächliche Größe und gültige Datenlänge:
- Die Zuordnungsgröße ist die Menge an Speicherplatz, die für einen Stream reserviert ist.
- Die tatsächliche Größe ist die Anzahl von Bytes, die von einem Aufrufer verwendet werden.
- Die gültige Datenlänge (VDL) ist die Anzahl von Bytes, die aus der Zuordnungsgröße für den Stream initialisiert werden.
Jeder Stream behält auch seinen eigenen Zustand für Komprimierung, Verschlüsselung und Sparseness bei. Das FILE _ ATTRIBUTE _ SPARSE _ FILE-Attribut für die Datei wird im dwFileAttributes-Member der WIN32 _ FIND _ DATA-Struktur festgelegt, die von den Funktionen FindFirstFile, FindFirstFileExund FindNextFile zurückgegeben wird, wenn einer der Streams jemals eine Sparse aufweisen sollte. GetFileAttributes, GetFileAttributesEx, GetFileAttributesTransacted, GetFileInformationByHandleund GetFileInformationByHandleEx geben den Sparsezustand des Standarddatenstroms zurück, wenn kein Stream angegeben ist.
Einem Stream sind keine Dateizeiten zugeordnet. Die Dateizeiten für eine Datei werden aktualisiert, wenn ein Stream in einer Datei aktualisiert wird.
Die Sperre wird pro Stream beibehalten. Freigabemodi werden auch pro Stream verwaltet. Wenn der Löschzugriff für eine Datei angefordert wird, überprüft das Betriebssystem, ob der Zugriff auf alle geöffneten Datenströme in einer Datei gelöscht wird. Wenn ein anderer Prozess einen Stream ohne die BERECHTIGUNG FILE _ SHARE _ DELETE geöffnet hat, können Sie die Datei nicht für den Löschzugriff öffnen.
Wenn eine zu kopierende Datei über einen Datenstrom verfügt und der Netzwerkumleitungsor 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 Streams
Bei Angabe über die Befehlszeile der Windows-Shell ist der vollständige Name eines Streams "Dateiname*:* Streamname : Streamtyp ", wie im folgenden Beispiel: "myfile.dat:stream1:$DATA".
Alle Zeichen, die für einen Dateinamen gelten, gelten auch für den Streamnamen, einschließlich Leerzeichen. Weitere Informationen finden Sie unter Benennen einer Datei. Der Streamtyp (auch als Attributtypcode bezeichnet) ist für das NTFS-Dateisystem intern. Benutzer können daher keine neuen Streamtypen erstellen, aber vorhandene NTFS-Dateisystemtypen öffnen. Streamtypspezifiziererwerte beginnen immer mit dem Dollarzeichen ($). Eine Liste der Streamtypen finden Sie unten.
Standardmäßig ist der Standarddatenstrom unbenannt. Um den Standarddatenstrom vollständig anzugeben, verwenden Sie "Dateiname::$DATA", wobei $DATA der Streamtyp ist. Dies entspricht "Dateiname". Sie können einen benannten Stream in der Datei erstellen, indem Sie die Dateinamenskonventionen verwenden. Beachten Sie, dass "$DATA" ein legaler Streamname ist. Der vollständige Name eines Streams mit dem Namen "$DATA" für eine Datei namens "sample" wäre beispielsweise "sample:$DATA:$DATA". Wenn Sie einen Stream mit dem Namen "bar" für dieselbe Datei erstellt haben, würde der vollständige Name "sample:bar:$DATA" sein.
Stellen Sie beim Erstellen und Arbeiten mit Dateien mit Einem-Zeichen-Namen dem Dateinamen einen Zeitraum voran, gefolgt von einem schrägen Schrägstrich (. oder verwenden Sie einen vollqualifizierten ) Pfadnamen. Der Grund dafür ist, dass Windows-Dateinamen als Laufwerkbuchstaben behandelt. Wenn ein Laufwerkbuchstaben mit einem relativen Pfad angegeben wird, trennt ein Doppelpunkt den Laufwerkbuchstaben vom Pfad. Wenn es mehrdeutig ist, ob ein Ein-Zeichen-Name ein Laufwerkbuchstaben oder ein Dateiname ist, geht Windows davon aus, dass es sich um einen Laufwerkbuchstaben handelt, wenn die Zeichenfolge nach dem Doppelpunkt ein gültiger Pfad ist, auch wenn der Laufwerkbuchstaben ungültig ist.
Streamtypen
Im Folgenden finden Sie die Liste der NTFS-Streamtypen, die auch als Attributtypcodes bezeichnet werden. Einige der Streamtypen sind in NTFS intern, und ihr Format ist nicht dokumentiert.
| Streamtyp | BESCHREIBUNG |
|---|---|
| ::$ATTRIBUTE _ LIST | Enthält eine Liste aller Attribute, aus denen die Datei besteht, und gibt an, wo sich die einzelnen Attribute befinden. |
| ::$BITMAP | Eine Bitmap, die von Indizes verwendet wird, um den freien B-Struktur-Speicherplatz für ein Verzeichnis zu verwalten. Die b-Struktur wird in 4-KB-Blocken (unabhängig von der Clustergröße) verwaltet, und dies wird verwendet, um die Zuordnung dieser Block zu verwalten. Dieser Streamtyp ist in jedem Verzeichnis vorhanden. |
| ::$DATA | Datenstrom. Der Standarddatenstrom hat keinen Namen. Datenströme können mithilfe der Funktionen FindFirstStreamW und FindNextStreamW aufzählt werden. |
| ::$EA | Enthält Daten zu erweiterten Attributen. |
| ::$EA _ INFORMATION | Enthält Unterstützungsinformationen zu den erweiterten Attributen. |
| ::$FILE _ NAME | Der Name der Datei in Unicode-Zeichen. Dies schließt den Kurznamen der Datei sowie alle hard-Links ein. |
| ::$INDEX _ ALLOCATION | Der Streamtyp eines Verzeichnisses. Wird zum Implementieren der Dateinamenzuordnung für große Verzeichnisse verwendet. Dieser Stream stellt das Verzeichnis selbst dar und enthält alle Daten des Verzeichnisses. Änderungen an Streams dieses Typs werden im NTFS-Änderungsjournal protokolliert. Der Standardstreamname eines $INDEX ALLOCATION-Streamtyps ist _ $I 30, sodass dirName", "DirName::$INDEX ALLOCATION" und _ "DirName:$I 30:$INDEX ALLOCATION" gleichwertig _ sind. |
| ::$INDEX _ ROOT | Dieser Stream stellt den Stamm der B-Struktur eines Indexes dar. Dieser Streamtyp ist in jedem Verzeichnis vorhanden. |
| ::$LOGGED UTILITY _ _ STREAM | Ähnlich wie ::$DATA, aber Vorgänge werden im NTFS-Änderungsjournal protokolliert. Wird von EFS und Transactional NTFS (TxF) verwendet. Das StreamType-Paar": StreamName :$" für EFS ist ":$EFS:$LOGGED UTILITY STREAM" und für _ _ TxF ist ":$TXF _ DATA:$LOGGED _ UTILITY _ STREAM". |
| _::$OBJECT-ID | Eine 16-Byte-ID, mit der die Datei für den Linkverfolgungsdienst identifiziert wird. |
| ::$REPARSE _ POINT | Die Reparsepunktdaten. |