ATTRIBUTE _ RECORD _ HEADER-Struktur
[Diese Struktur ist nur für Version 3 von NTFS-Volumes gültig. sie kann in zukünftigen Versionen geändert werden.]
Stellt einen Attributdatensatz dar.
Syntax
typedef struct _ATTRIBUTE_RECORD_HEADER {
ATTRIBUTE_TYPE_CODE TypeCode;
ULONG RecordLength;
UCHAR FormCode;
UCHAR NameLength;
USHORT NameOffset;
USHORT Flags;
USHORT Instance;
union {
struct {
ULONG ValueLength;
USHORT ValueOffset;
UCHAR Reserved[2];
} Resident;
struct {
VCN LowestVcn;
VCN HighestVcn;
USHORT MappingPairsOffset;
UCHAR Reserved[6];
LONGLONG AllocatedLength;
LONGLONG FileSize;
LONGLONG ValidDataLength;
LONGLONG TotalAllocated;
} Nonresident;
} Form;
} ATTRIBUTE_RECORD_HEADER, *PATTRIBUTE_RECORD_HEADER;
Member
-
TypeCode
-
Der Attributtypcode.
Wert Bedeutung - $STANDARD _ INFORMATIONEN
- 0x10
Dateiattribute (z. B. schreibgeschützt und archivieren), Zeitstempel (z. B. Dateierstellung und letzte Änderung) und die Anzahl der hardlinks. - $ATTRIBUTE _ LIST
- 0x20
Eine Liste der Attribute, aus denen die Datei besteht, und der Dateiverweis des MFT-Dateidatensatz, in dem sich jedes Attribut befindet. - $FILE _ NAME
- 0x30
Der Name der Datei in Unicode-Zeichen. - $OBJECT _ ID-0x40
Ein vom Linkverfolgungsdienst zugewiesener 64-Byte-Objektbezeichner. - $VOLUME _ NAME
- 0x60
Die Volumebezeichnung. In der $Volume vorhanden. - $VOLUME _ INFORMATION
- 0X70
Die Volumeinformationen. In der $Volume vorhanden. - $DATA
- 0x80
Der Inhalt der Datei. - $INDEX _ ROOT-0x90
Wird zum Implementieren der Dateinamenzuordnung für große Verzeichnisse verwendet. - $INDEX _
- ZUORDNUNGs 0xA0
Wird zum Implementieren der Dateinamenzuordnung für große Verzeichnisse verwendet. - $BITMAP
- 0xB0
Ein Bitmapindex für ein großes Verzeichnis. - $REPARSE _ POINT
- 0xC0
Die Reparsepunktdaten. -
Recordlength
-
Die Größe des Attributdatensatz in Bytes. Dieser Wert gibt die erforderliche Größe für die Datensatzvariante an und wird immer auf die nächste Quadwordgrenze gerundet.
-
FormCode
-
Der Attributformularcode.
Wert Bedeutung - RESIDENT _ FORMULAR
- 0X00
Der Wert ist im Dateidatensatz enthalten und folgt unmittelbar auf den Attributdatensatzheader. - NONRESIDENT _ FORMULAR
- 0X01
Der Wert ist in anderen Sektoren auf dem Datenträger enthalten. -
NameLength
-
Die Größe des optionalen Attributnamens in Zeichen oder 0, wenn kein Attributname vor liegt. Die maximale Länge des Attributnamens beträgt 255 Zeichen.
-
NameOffset
-
Der Offset des Attributnamens vom Anfang des Attributdatensatzes in Bytes. Wenn das NameLength-Member 0 ist, ist dieser Member nicht definiert.
-
Flags
-
Die Attributflags.
-
ATTRIBUTE _ FLAG _ COMPRESSION _ MASK (0x00FF)
-
ATTRIBUTE _ FLAG _ SPARSE (0x8000)
-
ATTRIBUTE _ FLAG _ ENCRYPTED (0x4000)
-
-
Instanz
-
Die eindeutige Instanz für dieses Attribut im Dateidatensatz.
-
Form
-
Wenn der FormCode-Member RESIDENT _ FORM ist, ist die Union eine Resident-Struktur. Wenn FormCode NONRESIDENT _ FORM ist, ist die Union eine nonresident-Struktur.
-
Wohnsitz
-
-
ValueLength
-
Die Größe des Attributwerts in Bytes.
-
ValueOffset
-
Der Offset zum Wert vom Anfang des Attributdatensatz in Bytes.
-
Reserved
-
Reserviert.
-
-
Nonresident
-
-
LowestVcn
-
Die niedrigste virtuelle Clusternummer (VCN), die von diesem Attributdatensatz abgedeckt wird.
-
HighestVcn
-
Der höchste VCN, der von diesem Attributdatensatz abgedeckt wird.
-
MappingPairsOffset
-
Der Offset zum Zuordnungspaararray vom Anfang des Attributdatensatz in Bytes. Weitere Informationen finden Sie in den Hinweisen.
-
Reserved
-
Reserviert.
-
AllocatedLength
-
Die zugeordnete Größe der Datei in Bytes. Dieser Wert ist ein sogar vielfaches der Clustergröße. Dieser Member ist ungültig, wenn das LowestVcn-Member ungleich 0 (null) ist.
-
FileSize
-
Die Dateigröße (höchstes Byte, das gelesen werden kann, plus 1) in Bytes. Dieser Member ist ungültig, wenn LowestVcn ungleich 0 (null) ist.
-
ValidDataLength
-
Die gültige Datenlänge (höchstes initialisiertes Byte plus 1) in Bytes. Dieser Wert wird auf die nächste Clustergrenze gerundet. Dieser Member ist ungültig, wenn LowestVcn ungleich 0 (null) ist.
-
TotalAllocated
-
Die Gesamtsumme, die für die Datei zugeordnet ist (die Summe der zugeordneten Cluster).
-
-
Hinweise
Beachten Sie, dass keine zugeordnete Headerdatei für diese -Struktur enthalten ist.
Diese Strukturdefinition ist nur für Hauptversion 3 und Nebenversion 0 oder 1 gültig, wie von FSCTL _ GET NTFS VOLUME DATA _ _ _ gemeldet.
Attributdatensätze werden immer an einer Quadwordgrenze ausgerichtet.
Wenn das Attribut nichtresident ist, enthält der Attributdatensatzheader eine Liste von Abrufinformationen, die eine Zuordnung zwischen VCN und logischer Clusternummer (LOGICAL Cluster Number, LCN) für das Attribut ermöglicht. Wenn die Abrufinformationen nicht in das Basisdateisegment passen, können sie selbst in einem externen Dateidatensatzsegment gespeichert werden. Wenn er immer noch nicht in ein externes Dateidatensatzsegment passt, gibt es eine Bereitstellung in der Attributliste, die mehrere Einträge für ein Attribut enthält, das zusätzliche Abrufinformationen erfordert.
Das Zuordnungspaararray wird in komprimierter Form gespeichert und setzt voraus, dass die Informationen dekomprimiert und vom System zwischengespeichert werden. Sie besteht aus einer Reihe von NextVcn-/CurrentLcn-Paaren. Wenn eine Datei z. B. eine einzelne Ausführung von 8 Clustern ab LCN 128 aufweise und die Datei bei LowestVcn 0 beginnt, hat das Array der Zuordnungspaare nur einen Eintrag, also NextVcn=8 und CurrentLcn=128. Das Array ist ein Bytestream, der die Änderungen an den Arbeitsvariablen speichert, wenn es sequenziell verarbeitet wird. Der Bytestream ist wie folgt als nullendpunktr terminierten Datenstrom mit Dreiern zu interpretieren:
count byte = v + (l * 16)
Wobei v die Anzahl der geänderten VCN-Bytes in niedriger Reihenfolge und l die Anzahl der geänderten low-order LCN-Bytes ist.
Der Dekomprimierungsalgorithmus lautet wie folgt:
- Initialisieren Sie NextVcn auf
Attribute->LowestVcnund CurrentLcn auf 0. - Initialisieren Sie den Bytestreamzeiger auf
(PCHAR)Attribute + Attribute->AttributeForm->Nonresident->MappingPairsOffset. - Legen Sie CurrentVcn auf NextVcn fest.
- Liest das nächste Byte aus dem Stream. Wenn es 0 ist, brechen Sie ab. else extrahieren Sie v und l wie zuvor beschrieben.
- Interpretieren Sie die nächsten v Bytes als Menge mit Vorsignieren, bei der zuerst das niedrig geordnete Byte angegeben wird. Entpacken Sie es sign-extended in 64 Bits, und fügen Sie es NextVcn hinzu.
- Interpretieren Sie die nächsten l Bytes als Menge mit Vorsignieren, und zuerst das niedrig geordnete Byte. Entpacken Sie die Anmeldung in 64 Bits, und fügen Sie sie CurrentLcn hinzu. Wenn dies einen CurrentLcn von 0 erzeugt, werden die VCNs von CurrentVcn zu NextVcn-1 nicht zugewiesen.
- Aktualisieren Sie die zwischengespeicherten Zuordnungsinformationen aus CurrentVcn, NextVcn und CurrentLcn.
- Fahren Sie mit Schritt 3 fort.