Condividi tramite


ATTRIBUTE_RECORD_HEADER struttura

[Questa struttura è valida solo per la versione 3 dei volumi NTFS; può essere modificata nelle versioni future.]

Rappresenta un record di attributo.

Sintassi

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;

Members

TypeCode

Codice del tipo di attributo.

Valore Significato
$STANDARD_INFORMATION
0x10
Attributi di file (ad esempio sola lettura e archivio), timestamp (ad esempio la creazione di file e l'ultima modifica) e il numero di collegamenti rigidi.
$ATTRIBUTE_LIST
0x20
Elenco di attributi che costituiscono il file e il riferimento al file del record di file MFT in cui si trova ogni attributo.
$FILE_NAME
0x30
Nome del file, in caratteri Unicode.
$OBJECT_ID
0x40
Identificatore dell'oggetto a 64 byte assegnato dal servizio di rilevamento collegamenti.
$VOLUME_NAME
0x60
Etichetta del volume. Presente nel file di $Volume.
$VOLUME_INFORMATION
0x70
Informazioni sul volume. Presente nel file di $Volume.
$DATA
0x80
Contenuto del file.
$INDEX_ROOT
0x90
Usato per implementare l'allocazione dei nomi dei nomi per le directory di grandi dimensioni.
$INDEX_ALLOCATION
0xa0
Usato per implementare l'allocazione dei nomi dei nomi per le directory di grandi dimensioni.
$BITMAP
0xB0
Indice bitmap per una directory di grandi dimensioni.
$REPARSE_POINT
0xC0
Dati del punto di ripristino.

 

Recordlength

Dimensioni del record dell'attributo, in byte. Questo valore riflette le dimensioni necessarie per la variante del record e viene sempre arrotondato al limite quadword più vicino.

FormCode

Codice del modulo dell'attributo.

Valore Significato
RESIDENT_FORM
0x00
Il valore è contenuto nel record di file e segue immediatamente l'intestazione del record dell'attributo.
NONRESIDENT_FORM
0x01
Il valore è contenuto in altri settori sul disco.

 

NameLength

Dimensioni del nome dell'attributo facoltativo, in caratteri o 0 se non è presente alcun nome di attributo. La lunghezza massima del nome dell'attributo è di 255 caratteri.

NameOffset

Offset del nome dell'attributo dall'inizio del record di attributo, in byte. Se il membro NameLength è 0, questo membro non è definito.

Flag

Flag di attributo.

ATTRIBUTE_FLAG_COMPRESSION_MASK (0x00FF )

ATTRIBUTE_FLAG_SPARSE (0x8000 )

ATTRIBUTE_FLAG_ENCRYPTED (0x4000 )

Istanza

Istanza univoca per questo attributo nel record di file.

Form

Se il membro FormCode è RESIDENT_FORM, l'unione è una struttura Resident . Se FormCode è NONRESIDENT_FORM, l'unione è una struttura nonresident .

Residente

ValueLength

Dimensioni del valore dell'attributo, in byte.

ValueOffset

Offset al valore dall'inizio del record dell'attributo, in byte.

Reserved

Riservato.

Nonresident

LowestVcn

Numero di cluster virtuale più basso (VCN) coperto da questo record di attributo.

HighestVcn

Il vcn più alto coperto da questo record di attributo.

MappingPairsOffset

Offset della matrice di coppie di mapping dall'inizio del record dell'attributo, in byte. Per altre informazioni, vedere la sezione Osservazioni.

Reserved

Riservato.

AllocateLength

Dimensione allocata del file, in byte. Questo valore è un numero pari a più dimensioni del cluster. Questo membro non è valido se il membro LowestVcn è diverso da zero.

Dimensione

Dimensioni del file (byte più elevate che possono essere letti più 1), in byte. Questo membro non è valido se LowestVcn è diverso da zero.

ValidDataLength

Lunghezza dei dati valida (byte inizializzato più 1) in byte. Questo valore viene arrotondato al limite del cluster più vicino. Questo membro non è valido se LowestVcn è diverso da zero.

TotalAllocated

Totale allocato per il file (somma dei cluster allocati).

Commenti

Si noti che non esiste alcun file di intestazione associato per questa struttura.

Questa definizione di struttura è valida solo per la versione principale 3 e secondaria 0 o 1, come indicato da FSCTL_GET_NTFS_VOLUME_DATA.

I record degli attributi sono sempre allineati su un limite quadword.

Se l'attributo non è rientro, l'intestazione del record dell'attributo contiene un elenco di informazioni di recupero che forniscono un mapping tra VCN e il numero di cluster logico (LCN) per l'attributo. Se le informazioni di recupero non rientrano nel segmento di file di base, possono essere archiviate in un segmento di record di file esterno da solo. Se non rientra ancora in un segmento di record di file esterno, è presente un provisioning nell'elenco di attributi per contenere più voci per un attributo che richiede informazioni aggiuntive sul recupero.

La matrice di coppie di mapping viene archiviata in un formato compresso e presuppone che le informazioni vengano decompresse e memorizzate nella cache dal sistema. È costituita da una serie di coppie NextVcn/CurrentLcn. Ad esempio, se un file ha una singola esecuzione di 8 cluster a partire da LCN 128 e il file inizia da LowestVcn 0, la matrice di coppie di mapping ha una sola voce, ovvero NextVcn=8 e CurrentLcn=128. La matrice è un flusso di byte che archivia le modifiche apportate alle variabili di lavoro durante l'elaborazione sequenziale. Il flusso di byte deve essere interpretato come un flusso con terminazione zero di triple, come indicato di seguito:

count byte = v + (l * 16)

dove v è il numero di byte VCN a basso ordine modificato e l è il numero di byte LCN modificati a basso ordine.

L'algoritmo di decompressione è il seguente:

  1. Inizializzare NextVcn su Attribute->LowestVcn e CurrentLcn su 0.
  2. Inizializzare il puntatore del flusso di byte a (PCHAR)Attribute + Attribute->AttributeForm->Nonresident->MappingPairsOffset.
  3. Impostare CurrentVcn su NextVcn.
  4. Leggere il byte successivo dal flusso. Se è 0, allora rompere; else estrarre v e l come descritto in precedenza.
  5. Interpretare i byte v successivi come quantità firmata, con il byte con ordine minimo prima. Decomprimere l'accesso esteso a 64 bit e aggiungerlo a NextVcn.
  6. Interpretare i byte l successivi come quantità firmata, con il byte di ordine basso per primo. Decomprimere l'accesso esteso a 64 bit e aggiungerlo a CurrentLcn. Se viene generato un valore CurrentLcn pari a 0, i VDN da CurrentVcn a NextVcn-1 non vengono allocati.
  7. Aggiornare le informazioni di mapping memorizzate nella cache da CurrentVcn, NextVcn e CurrentLcn.
  8. Andare al passaggio 3.

Vedi anche

Tabella file master