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