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
-
属性レコードのサイズ (バイト単位)。 この値は、レコードバリアントに必要なサイズを反映し、常に最も近い quadword 境界に丸められます。
-
FormCode
-
属性フォーム コード。
値 説明 - RESIDENT_FORM
- 0x00
値はファイル レコードに含まれており、属性レコード ヘッダーの直後にあります。 - NONRESIDENT_FORM
- 0x01
値は、ディスク上の他のセクターに含まれています。 -
NameLength
-
省略可能な属性名のサイズ (文字単位)、属性名がない場合は 0。 属性名の最大長は 255 文字です。
-
NameOffset
-
属性レコードの先頭からの属性名のオフセット (バイト単位)。 NameLength メンバーが 0 の場合、このメンバーは未定義です。
-
Flags
-
属性フラグ。
-
ATTRIBUTE_FLAG_COMPRESSION_MASK (0x00FF)
-
ATTRIBUTE_FLAG_SPARSE (0x8000)
-
ATTRIBUTE_FLAG_ENCRYPTED (0x4000)
-
-
インスタンス
-
ファイル レコード内のこの属性の一意のインスタンス。
-
形式
-
FormCode メンバーがRESIDENT_FORM場合、共用体は常駐構造です。 FormCode がNONRESIDENT_FORMの場合、共用体は Nonresident 構造体です。
-
居住 者
-
-
ValueLength
-
属性値のサイズ (バイト単位)。
-
ValueOffset
-
属性レコードの先頭からの値へのオフセット (バイト単位)。
-
Reserved
-
予約済み。
-
-
Nonresident
-
-
LowestVcn
-
この属性レコードの対象となる最小の仮想クラスター番号 (VCN)。
-
HighestVcn
-
この属性レコードの対象となる最も高い VCN。
-
MappingPairsOffset
-
属性レコードの先頭からのマッピング ペア配列へのオフセット (バイト単位)。 詳細については、「解説」を参照してください。
-
Reserved
-
予約済み。
-
AllocatedLength
-
ファイルの割り当てられたサイズ (バイト単位)。 この値は、クラスター サイズの偶数倍です。 LowestVcn メンバーが 0 以外の場合、このメンバーは無効です。
-
FileSize
-
ファイル サイズ (読み取り可能な最大バイトに 1 を加算) (バイト単位)。 LowestVcn が 0 以外の場合、このメンバーは無効です。
-
ValidDataLength
-
有効なデータ長 (初期化された最大バイトに 1 を加算) (バイト単位)。 この値は、最も近いクラスター境界に丸められます。 LowestVcn が 0 以外の場合、このメンバーは無効です。
-
TotalAllocated
-
ファイルに割り当てられた合計 (割り当てられたクラスターの合計)。
-
-
解説
この構造体には、関連付けられたヘッダー ファイルがないことに注意してください。
この構造体定義は、 FSCTL_GET_NTFS_VOLUME_DATAによって報告されるメジャー バージョン 3 およびマイナー バージョン 0 または 1 に対してのみ有効です。
属性レコードは常に quadword 境界に配置されます。
属性が非residentの場合、属性レコード ヘッダーには、属性の VCN と論理クラスター番号 (LCN) の間のマッピングを提供する取得情報の一覧が含まれます。 取得情報が基本ファイル・セグメントに収まらない場合は、外部ファイル・レコード・セグメントに単独で保管することができます。 それでも 1 つの外部ファイル レコード セグメントに収まらない場合は、属性リストに、追加の取得情報を必要とする属性の複数のエントリを含める準備があります。
マッピング ペア配列は圧縮された形式で格納され、情報が圧縮解除され、システムによってキャッシュされていることを前提としています。 これは、一連の NextVcn/CurrentLcn ペアで構成されます。 たとえば、ファイルの実行が LCN 128 から 8 個のクラスターで、ファイルが LowestVcn 0 から始まる場合、マッピング ペア配列にはエントリが 1 つだけあり、NextVcn=8 と CurrentLcn=128 になります。 配列は、順番に処理されるときに、作業変数に対する変更を格納するバイト ストリームです。 バイト ストリームは、次のように、3 つの 0 で終わるストリームとして解釈されます。
count byte = v + (l * 16)
ここで、v は変更された低次 VCN バイトの数、l は変更された下位 LCN バイトの数です。
圧縮解除アルゴリズムは次のとおりです。
- NextVcn を に
Attribute->LowestVcn
初期化し、CurrentLcn を 0 に初期化します。 - へのバイト ストリーム ポインターを
(PCHAR)Attribute + Attribute->AttributeForm->Nonresident->MappingPairsOffset
初期化します。 - CurrentVcn を NextVcn に設定します。
- ストリームから次のバイトを読み取ります。 0 の場合は、中断します。それ以外の場合は、前に説明したように v と l を抽出します。
- 次の v バイトを符号付き数量として解釈し、下位バイトを最初に使用します。 それを 64 ビットに拡張して展開し、NextVcn に追加します。
- 次の l バイトを符号付き数量として解釈し、下位バイトを最初に使用します。 64 ビットに拡張して展開し、CurrentLcn に追加します。 これが 0 の CurrentLcn を生成する場合、CurrentVcn から NextVcn-1 への VCN は割り当て解除されます。
- CurrentVcn、NextVcn、CurrentLcn からキャッシュされたマッピング情報を更新します。
- 手順 3. に進みます。
関連項目