Partager via


structure ATTRIBUTE_RECORD_HEADER

[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)

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 :

  1. Initialisez NextVcn sur Attribute->LowestVcn et CurrentLcn sur 0.
  2. Initialisez le pointeur de flux d’octets vers (PCHAR)Attribute + Attribute->AttributeForm->Nonresident->MappingPairsOffset.
  3. Définissez CurrentVcn sur NextVcn.
  4. 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.
  5. 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.
  6. 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.
  7. Mettez à jour les informations de mappage mises en cache à partir de CurrentVcn, NextVcn et CurrentLcn.
  8. Passez à l’étape 3.

Voir aussi

Table de fichier maître