ファイルシステムには、さまざまな属性があります。
たとえば、ファイル、フォルダ、データ本体、管理情報、インデックス情報などです。
これらの情報は、それぞれ異なる役割を持っており、ファイルシステム内では属性やフラグによって識別されます。
ここで重要になるのが、属性ごとの構造の違いです。
ファイルシステム上では、共通のヘッダを持ちながら、その先に続く内容は属性によって異なる構造になっていることがあります。
そのため、まずは共通部分を持つ構造体として読み取り、属性の種類やサイズ、オフセットなどを確認します。
そのうえで、属性に応じた別の構造体へ再解釈し、内容を読み解いていきます。
つまり、バッファ上のデータそのものは変わりません。
変わるのは、そのバイト列をどの構造体として解釈するか、という点です。
同じメモリ上のデータであっても、最初は共通ヘッダとして読み、次にファイル属性、フォルダ属性、データ属性、インデックス属性などとして再解釈していく。
このような流れで、ファイルシステムの情報を読み書きできるようになっています。
この仕組みによって、最小限の読み出しで多くの情報を効率よく処理できます。
セクタを読み出し、バッファに展開し、その内容を属性ごとに再解釈する。
この流れを適切に組み立てることで、無駄な読み込みを減らし、解析速度を高めることができます。
ただし、NTFSは構造が複雑なファイルシステムです。
MFT、属性、データラン、インデックス、セキュリティ情報など、多くの管理構造が組み合わさっています。
そのため、高機能で柔軟な一方、解析や処理は重くなりやすい傾向があります。
この点は、USBメモリやSDカードなどで、今でもFAT32やexFATが使われる理由の一つでもあります。
FAT32なども、セクタ上の情報を構造体として解釈しながら読み書きする点では同じです。
ドライブがセクタ単位で情報をやり取りする以上、この基本的な考え方は共通しています。
しかし、FAT32はNTFSと比べると構造が非常に単純です。
管理情報も比較的軽量で、処理の負担が少ないため、USBメモリや小容量メディアのような用途では扱いやすい構造になっています。
つまり、ファイルシステムごとに複雑さや機能は異なりますが、基本は同じです。
セクタを読み出し、メモリ上に展開し、ヘッダを確認する。
そして、属性やフラグに応じて構造体を切り替えながら、同じバイト列を再解釈していく。
この属性別の再解釈こそが、ファイルシステム解析における重要な考え方になります。
