Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
[Cette structure est valide uniquement pour la version 3 des volumes NTFS ; elle peut être modifiée dans les versions ultérieures.]
Représente un enregistrement d’attribut.
Syntaxe
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;
Membres
-
TypeCode
-
Code de type d’attribut.
Valeur Signification - $STANDARD_INFORMATION
- 0x10
Attributs de fichier (tels que lecture seule et archive), horodatages (tels que la création et la dernière modification du fichier) et le nombre de liens physiques. - $ATTRIBUTE_LIST
- 0x20
Liste des attributs qui composent le fichier et référence de fichier de l’enregistrement de fichier MFT dans lequel se trouve chaque attribut. - $FILE_NAME
- 0x30
Nom du fichier, en caractères Unicode. - $OBJECT_ID
- 0x40
Identificateur d’objet de 64 octets attribué par le service de suivi des liens. - $VOLUME_NAME
- 0x60
Étiquette de volume. Présent dans le fichier $Volume. - $VOLUME_INFORMATION
- 0x70
Informations sur le volume. Présent dans le fichier $Volume. - $DATA
- 0x80
Contenu du fichier. - $INDEX_ROOT
- 0x90
Permet d’implémenter l’allocation de nom de fichier pour les grands répertoires. - $INDEX_ALLOCATION
- 0xA0
Permet d’implémenter l’allocation de nom de fichier pour les grands répertoires. - $BITMAP
- 0xB0
Index bitmap pour un répertoire volumineux. - $REPARSE_POINT
- 0xC0
Répare les données de point. -
RecordLength
-
Taille de l’enregistrement d’attribut, en octets. Cette valeur reflète la taille requise pour la variante d’enregistrement et est toujours arrondie à la limite quadword la plus proche.
-
FormCode
-
Code de formulaire d’attribut.
Valeur Signification - RESIDENT_FORM
- 0x00
La valeur est contenue dans l’enregistrement de fichier et suit immédiatement l’en-tête d’enregistrement d’attribut. - NONRESIDENT_FORM
- 0x01
La valeur est contenue dans d’autres secteurs sur le disque. -
NameLength
-
Taille du nom d’attribut facultatif, en caractères, ou 0 s’il n’existe aucun nom d’attribut. La longueur maximale du nom d’attribut est de 255 caractères.
-
NameOffset
-
Décalage du nom de l’attribut par rapport au début de l’enregistrement d’attribut, en octets. Si le membre NameLength est 0, ce membre n’est pas défini.
-
Indicateurs
-
Indicateurs d’attribut.
-
ATTRIBUTE_FLAG_COMPRESSION_MASK (0x00FF)
-
ATTRIBUTE_FLAG_SPARSE (0x8000)
-
ATTRIBUTE_FLAG_ENCRYPTED (0x4000)
-
-
Instance
-
Le instance unique pour cet attribut dans l’enregistrement de fichier.
-
Forme
-
Si le membre FormCode est RESIDENT_FORM, l’union est une structure résidente . Si FormCode est NONRESIDENT_FORM, l’union est une structure non-résidente .
-
Résident
-
-
ValueLength
-
Taille de la valeur de l’attribut, en octets.
-
ValueOffset
-
Décalage par rapport à la valeur à partir du début de l’enregistrement d’attribut, en octets.
-
Reserved
-
Réservé.
-
-
Non-résident
-
-
LowestVcn
-
Numéro de cluster virtuel (VCN) le plus bas couvert par cet enregistrement d’attribut.
-
HighestVcn
-
VcN le plus élevé couvert par cet enregistrement d’attribut.
-
MappingPairsOffset
-
Décalage vers le tableau de paires de mappage à partir du début de l’enregistrement d’attribut, en octets. Pour plus d'informations, consultez la section Notes.
-
Reserved
-
Réservé.
-
AllocationLength
-
Taille allouée du fichier, en octets. Cette valeur est un multiple pair de la taille du cluster. Ce membre n’est pas valide si le membre LowestVcn est différent de zéro.
-
FileSize
-
Taille de fichier (octet le plus élevé pouvant être lu plus 1), en octets. Ce membre n’est pas valide si LowestVcn est différent de zéro.
-
ValidDataLength
-
Longueur de données valide (octet initialisé le plus élevé plus 1), en octets. Cette valeur est arrondie à la limite de cluster la plus proche. Ce membre n’est pas valide si LowestVcn est différent de zéro.
-
TotalAllocated
-
Total alloué pour le fichier (somme des clusters alloués).
-
-
Notes
Notez qu’aucun fichier d’en-tête n’est associé à cette structure.
Cette définition de structure est valide uniquement pour la version majeure 3 et la version mineure 0 ou 1, comme indiqué par FSCTL_GET_NTFS_VOLUME_DATA.
Les enregistrements d’attribut sont toujours alignés sur une limite quadword.
Si l’attribut n’est pas réident, l’en-tête de l’enregistrement d’attribut contient une liste d’informations de récupération qui fournit un mappage entre VCN et le numéro de cluster logique (LCN) pour l’attribut. Si les informations de récupération ne s’intègrent pas dans le segment de fichier de base, elles peuvent être stockées dans un segment d’enregistrement de fichier externe par elles-mêmes. S’il ne s’intègre toujours pas dans un segment d’enregistrement de fichier externe, la liste des attributs contient plusieurs entrées pour un attribut qui nécessite des informations de récupération supplémentaires.
Le tableau de paires de mappage est stocké sous une forme compressée et suppose que les informations sont décompressées et mises en cache par le système. Il se compose d’une série de paires NextVcn/CurrentLcn. Par exemple, si un fichier a une seule exécution de 8 clusters à partir de LCN 128 et que le fichier commence à LowestVcn 0, le tableau de paires de mappage n’a qu’une seule entrée, à savoir NextVcn=8 et CurrentLcn=128. Le tableau est un flux d’octets qui stocke les modifications apportées aux variables de travail lorsqu’elles sont traitées séquentiellement. Le flux d’octets doit être interprété comme un flux de triples sans terminaison, comme suit :
nombre d’octets = v + (l * 16)
où v est le nombre d’octets VCN de faible ordre modifié et l est le nombre d’octets LCN de faible ordre modifié.
L’algorithme de décompression est le suivant :
- Initialisez NextVcn sur
Attribute->LowestVcnet CurrentLcn sur 0. - Initialisez le pointeur de flux d’octets vers
(PCHAR)Attribute + Attribute->AttributeForm->Nonresident->MappingPairsOffset. - Définissez CurrentVcn sur NextVcn.
- Lisez l’octet suivant à partir du flux. S’il est 0, alors arrêtez; sinon, extrayez v et l comme décrit précédemment.
- Interprétez les octets v suivants comme une quantité signée, en premier lieu l’octet de faible ordre. Décompressez la connexion étendue en 64 bits et ajoutez-la à NextVcn.
- Interprétez les octets l suivants comme une quantité signée, en premier lieu l’octet de faible ordre. Décompressez la connexion étendue en 64 bits et ajoutez-la à CurrentLcn. Si cela produit un CurrentLcn de 0, les réseaux virtuels de CurrentVcn vers NextVcn-1 ne sont pas alloués.
- Mettez à jour les informations de mappage mises en cache à partir de CurrentVcn, NextVcn et CurrentLcn.
- Passez à l’étape 3.
Voir aussi