Freigeben über


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_INFORMATION
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 den Dateiverweis des MFT-Dateidatensatzes, in dem sich die einzelnen Attribute befinden.
$FILE_NAME
0x30
Der Name der Datei in Unicode-Zeichen.
$OBJECT_ID
0x40
Ein 64-Byte-Objektbezeichner, der vom Linknachverfolgungsdienst zugewiesen wird.
$VOLUME_NAME
0x60
Die Volumebezeichnung. In der $Volume-Datei vorhanden.
$VOLUME_INFORMATION
0x70
Die Volumeinformationen. In der $Volume-Datei vorhanden.
$DATA
0x80
Der Inhalt der Datei.
$INDEX_ROOT
0x90
Wird verwendet, um die Dateinamenzuordnung für große Verzeichnisse zu implementieren.
$INDEX_ALLOCATION
0xA0
Wird verwendet, um die Dateinamenzuordnung für große Verzeichnisse zu implementieren.
$BITMAP
0xB0
Ein Bitmapindex für ein großes Verzeichnis.
$REPARSE_POINT
0xC0
Die Analysepunktdaten.

 

Recordlength

Die Größe des Attributdatensatzes in Bytes. Dieser Wert spiegelt die erforderliche Größe für die Datensatzvariante wider und wird immer auf die nächstgelegene Quadword-Grenze gerundet.

FormCode

Der Attributformularcode.

Wert Bedeutung
RESIDENT_FORM
0x00
Der Wert ist im Dateidatensatz enthalten und folgt sofort dem Attributeintragsheader.
NONRESIDENT_FORM
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 vorhanden ist. Die maximale Länge des Attributnamens beträgt 255 Zeichen.

NameOffset

Der Offset des Attributnamens vom Anfang des Attributdatensatzes in Bytes. Wenn das NameLength-Element 0 ist, ist dieses Element nicht definiert.

Flags

Die Attributflags.

ATTRIBUTE_FLAG_COMPRESSION_MASK (0x00FF)

ATTRIBUTE_FLAG_SPARSE (0x8000)

ATTRIBUTE_FLAG_ENCRYPTED (0x4000)

Instanz

Die eindeutige instance für dieses Attribut im Dateidatensatz.

Form

Wenn das FormCode-Element 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 auf den Wert vom Anfang des Attributdatensatzes in Bytes.

Reserved

Reserviert.

Nichtresident

LowestVcn

Die niedrigste virtuelle Clusternummer (VCN), die von diesem Attributdatensatz abgedeckt wird.

HöchstesVcn

Der höchste VCN, der von diesem Attributdatensatz abgedeckt wird.

MappingPairsOffset

Der Offset zum Zuordnungspaararray vom Anfang des Attributdatensatzes in Bytes. Weitere Informationen finden Sie in den Hinweisen.

Reserved

Reserviert.

AllocatedLength

Die zugeordnete Größe der Datei in Bytes. Dieser Wert ist ein gerades Vielfaches der Clustergröße. Dieser Member ist ungültig, wenn das LowestVcn-Element nichtzero ist.

FileSize

Die Dateigröße (das höchste Byte, das gelesen werden kann, plus 1), in Bytes. Dieser Member ist ungültig, wenn LowestVcn nichtzero ist.

ValidDataLength

Die gültige Datenlänge (höchstes initialisiertes Byte plus 1) in Byte. Dieser Wert wird auf die nächste Clustergrenze gerundet. Dieser Member ist ungültig, wenn LowestVcn ungleich null ist.

TotalAllocated

Die Summe, die der Datei zugeordnet ist (die Summe der zugeordneten Cluster).

Bemerkungen

Beachten Sie, dass für diese Struktur keine zugeordnete Headerdatei vorhanden ist.

Diese Strukturdefinition gilt nur für Hauptversion 3 und Nebenversion 0 oder 1, wie von FSCTL_GET_NTFS_VOLUME_DATA gemeldet.

Attributdatensätze werden immer an einer Quadwordgrenze ausgerichtet.

Wenn das Attribut nicht ident ist, enthält der Attributdatensatzheader eine Liste mit Abrufinformationen, die eine Zuordnung zwischen VCN und der logischen Clusternummer (LCN) für das Attribut bereitstellt. Wenn die Abrufinformationen nicht in das Basisdateisegment passen, können sie selbst in einem externen Dateidatensatzsegment gespeichert werden. Wenn es immer noch nicht in ein externes Dateidatensatzsegment passt, gibt es in der Attributliste eine Bereitstellung, die mehrere Einträge für ein Attribut enthält, das zusätzliche Abrufinformationen erfordert.

Das Array der Zuordnungspaare wird in komprimierter Form gespeichert und geht davon aus, dass die Informationen vom System dekomprimiert und zwischengespeichert werden. Es besteht aus einer Reihe von NextVcn/CurrentLcn-Paaren. Wenn eine Datei beispielsweise eine einzelne Ausführung von 8 Clustern ab LCN 128 aufweist und die Datei bei LowestVcn 0 beginnt, hat das Zuordnungspaararray nur einen Eintrag, nämlich NextVcn=8 und CurrentLcn=128. Das Array ist ein Bytedatenstrom, der die Änderungen an den Arbeitsvariablen speichert, wenn sie sequenziell verarbeitet werden. Der Bytedatenstrom ist wie folgt als null beendeter Dreifachdatenstrom zu interpretieren:

count byte = v + (l * 16)

Dabei steht v für die Anzahl der geänderten VCN-Bytes niedriger Ordnung und l für die Anzahl geänderter LCN-Bytes niedriger Ordnung.

Der Dekomprimierungsalgorithmus lautet wie folgt:

  1. Initialisieren Sie NextVcn in 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. Lesen Sie das nächste Byte aus dem Stream. Wenn es 0 ist, dann brechen; else extrahieren v und l wie zuvor beschrieben.
  5. Interpretieren Sie die nächsten V-Bytes als signierte Menge, wobei zuerst das Byte in niedriger Reihenfolge angegeben ist. Entpacken Sie es sign-extended in 64 Bits, und fügen Sie es NextVcn hinzu.
  6. Interpretieren Sie die nächsten l Bytes als signierte Menge, wobei zuerst das Byte mit niedriger Reihenfolge angegeben ist. Entpacken Sie es sign-extended in 64 Bits, und fügen Sie es CurrentLcn hinzu. Wenn dadurch ein CurrentLcn von 0 erzeugt wird, sind die VCNs von CurrentVcn zu NextVcn-1 nicht zugeordnet.
  7. Aktualisieren Sie die zwischengespeicherten Zuordnungsinformationen aus CurrentVcn, NextVcn und CurrentLcn.
  8. Fahren Sie mit Schritt 3 fort.

Siehe auch

Masterdateitabelle