次の方法で共有


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 バイトの数です。

圧縮解除アルゴリズムは次のとおりです。

  1. NextVcn を に Attribute->LowestVcn 初期化し、CurrentLcn を 0 に初期化します。
  2. へのバイト ストリーム ポインターを (PCHAR)Attribute + Attribute->AttributeForm->Nonresident->MappingPairsOffset初期化します。
  3. CurrentVcn を NextVcn に設定します。
  4. ストリームから次のバイトを読み取ります。 0 の場合は、中断します。それ以外の場合は、前に説明したように vl を抽出します。
  5. 次の v バイトを符号付き数量として解釈し、下位バイトを最初に使用します。 それを 64 ビットに拡張して展開し、NextVcn に追加します。
  6. 次の l バイトを符号付き数量として解釈し、下位バイトを最初に使用します。 64 ビットに拡張して展開し、CurrentLcn に追加します。 これが 0 の CurrentLcn を生成する場合、CurrentVcn から NextVcn-1 への VCN は割り当て解除されます。
  7. CurrentVcn、NextVcn、CurrentLcn からキャッシュされたマッピング情報を更新します。
  8. 手順 3. に進みます。

関連項目

マスター ファイル テーブル