Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
[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:
- Inizializzare NextVcn su
Attribute->LowestVcne CurrentLcn su 0. - Inizializzare il puntatore del flusso di byte a
(PCHAR)Attribute + Attribute->AttributeForm->Nonresident->MappingPairsOffset. - Impostare CurrentVcn su NextVcn.
- Leggere il byte successivo dal flusso. Se è 0, allora rompere; else estrarre v e l come descritto in precedenza.
- 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.
- 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.
- Aggiornare le informazioni di mapping memorizzate nella cache da CurrentVcn, NextVcn e CurrentLcn.
- Andare al passaggio 3.
Vedi anche