共用方式為


ATTRIBUTE_RECORD_HEADER 結構

[此結構僅適用于 NTFS 磁片區第 3 版;未來版本可能會改變。

表示屬性記錄。

語法

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;

成員

TypeCode

屬性類型代碼。

意義
$STANDARD_INFORMATION
0x10
檔案屬性 (,例如唯讀和封存) 、時間戳記 (,例如檔案建立和上次修改) ,以及硬式連結計數。
$ATTRIBUTE_LIST
0x20
組成檔案的屬性清單,以及每個屬性所在的 MFT 檔案記錄檔案參考。
$FILE_NAME
0x30
Unicode 字元中的檔案名。
$OBJECT_ID
0x40
連結追蹤服務指派的 64 位元組物件識別碼。
$VOLUME_NAME
0x60
磁碟區標籤。 出現在 $Volume 檔案中。
$VOLUME_INFORMATION
0x70
磁片區資訊。 出現在 $Volume 檔案中。
$DATA
0x80
檔案的內容。
$INDEX_ROOT
0x90
用來實作大型目錄的檔案名配置。
$INDEX_ALLOCATION
0xA0
用來實作大型目錄的檔案名配置。
$BITMAP
0xB0
大型目錄的點陣圖索引。
$REPARSE_POINT
0xC0
重新分析點資料。

 

RecordLength

屬性記錄的大小,以位元組為單位。 這個值會反映記錄變體所需的大小,而且一律四捨五入到最接近的四字界限。

FormCode

屬性表單程式碼。

意義
RESIDENT_FORM
0x00
值包含在檔案記錄中,並緊接在屬性記錄標頭後面。
NONRESIDENT_FORM
0x01
此值包含在磁片上的其他磁區中。

 

NameLength

如果沒有屬性名稱,則為選擇性屬性名稱的大小、字元或 0。 屬性名稱長度上限為 255 個字元。

NameOffset

屬性名稱從屬性記錄開頭的位移,以位元組為單位。 如果 NameLength 成員為 0,則未定義這個成員。

旗標

屬性旗標。

ATTRIBUTE_FLAG_COMPRESSION_MASK (0x00FF)

ATTRIBUTE_FLAG_SPARSE (0x8000)

ATTRIBUTE_FLAG_ENCRYPTED (0x4000)

執行個體

檔案記錄中這個屬性的唯一實例。

表單

如果 FormCode 成員是RESIDENT_FORM,則聯集是 「駐留 」結構。 如果 FormCode 是NONRESIDENT_FORM,則聯集是 Nonresident 結構。

居民

ValueLength

屬性值的大小,以位元組為單位。

ValueOffset

屬性記錄開頭的值位移,以位元組為單位。

已保留

保留的。

Nonresident

LowestVcn

此屬性記錄涵蓋的最低虛擬叢集編號 (VCN) 。

HighestVcn

此屬性記錄涵蓋的最高 VCN。

MappingPairsOffset

對應配對陣列的位移,從屬性記錄的開頭開始,以位元組為單位。 如需詳細資訊,請參閱<備註>。

已保留

保留的。

AllocatedLength

檔案的配置大小,以位元組為單位。 這個值是叢集大小的偶數倍數。 如果 LowestVcn 成員為非零,則此成員無效。

FileSize

檔案大小 (可以讀取的最高位元組加上 1) ,以位元組為單位。 如果 LowestVcn 不是零,則此成員無效。

ValidDataLength

有效的資料長度 (最高初始化位元組加上 1) ,以位元組為單位。 此值會四捨五入到最接近的叢集界限。 如果 LowestVcn 為非零值,則這個成員無效。

TotalAllocated

配置給檔案的總 (配置叢集的總和) 。

備註

請注意,此結構沒有相關聯的標頭檔。

此結構定義僅適用于主要版本 3 和次要版本 0 或 1,如 FSCTL_GET_NTFS_VOLUME_DATA所報告。

屬性記錄一律會對齊四字界限。

如果屬性非必要,屬性記錄標頭會包含擷取資訊清單,以提供屬性的 VCN 與邏輯叢集編號之間的對應 (LCN) 。 如果擷取資訊不符合基底檔案區段,則可以單獨儲存在外部檔案記錄區段中。 如果它仍然無法放入一個外部檔案記錄區段,屬性清單中會有一個布建,以包含需要額外擷取資訊之屬性的多個專案。

對應組陣列會以壓縮形式儲存,並假設系統已解壓縮和快取資訊。 它包含一系列 NextVcn/CurrentLcn 配對。 例如,如果檔案有從 LCN 128 開始的單一執行 8 個叢集,而檔案從 LowestVcn 0 開始,則對應配對陣列只有一個專案,也就是 NextVcn=8 和 CurrentLcn=128。 陣列是位元組資料流程,會在循序處理時儲存工作變數的變更。 位元組資料流程會解譯為三倍的零終止資料流程,如下所示:

count byte = v + (l * 16)

其中 v 是已變更低序 VCN 位元組的數目, 而 l 是已變更低序 LCN 位元組的數目。

解壓縮演算法如下所示:

  1. 將 NextVcn 初始化為 , Attribute->LowestVcn 並將 CurrentLcn 初始化為 0。
  2. 初始化 的位元組資料流程指標 (PCHAR)Attribute + Attribute->AttributeForm->Nonresident->MappingPairsOffset
  3. 將 CurrentVcn 設定為 NextVcn。
  4. 從資料流程讀取下一個位元組。 如果是 0,則中斷;else 擷取 vl ,如先前所述。
  5. 先將下一個 v 位元組解譯為帶正負號的數量,並先使用低序位元組。 將它簽章解壓縮為 64 位,並將其新增至 NextVcn。
  6. 先將下一個 l 位元組解譯為帶正負號的數量,並先使用低序位元組。 將它簽章解壓縮為 64 位,並將其新增至 CurrentLcn。 如果這會產生 0 的 CurrentLcn,則會取消配置從 CurrentVcn 到 NextVcn–1 的 VCN。
  7. 從 CurrentVcn、NextVcn 和 CurrentLcn 更新快取的對應資訊。
  8. 移至步驟 3。

另請參閱

主要檔案資料表