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:

  1. Initialisieren Sie NextVcn auf Attribute->LowestVcn und CurrentLcn auf 0.
  2. Initialisieren Sie den Bytestreamzeiger auf (PCHAR)Attribute + Attribute->AttributeForm->Nonresident->MappingPairsOffset .
  3. Legen Sie CurrentVcn auf NextVcn fest.
  4. Liest das nächste Byte aus dem Stream. Wenn es 0 ist, brechen Sie ab. else extrahieren Sie v und l wie zuvor beschrieben.
  5. 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.
  6. 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.
  7. Aktualisieren Sie die zwischengespeicherten Zuordnungsinformationen aus CurrentVcn, NextVcn und CurrentLcn.
  8. Fahren Sie mit Schritt 3 fort.

Siehe auch

Masterdateitabelle