@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

exFATディレクトリエントリ

exFATのディレクトリエントリは、1レコード16バイト長、先頭バイトの値でタイプが示されており、一般的なファイルなどは、それぞれ 85, C0, C1 というタイプの順序で並ぶということみたいですね。
例えばこれはDesert.jpgというファイルのexFATにおけるディレクトリエントリになります。

0x85で開始されるレコードは、「exFAT構造解析」によるとFileAttributes1(ファイル属性1)として、属性値やタイムスタンプを保持するレコードということのようです。

85 02 CC 37 20 00 00 00 8B 88 14 3B 8D 6E EE 3A
8B 88 14 3B 6F 00 A4 A4 A4 00 00 00 00 00 00 00

タイムスタンプには作成日時が二カ所あることになっているのですが、分解能などはもう少し調べてみないといけないところです。CWA順にタイムスタンプが記録されている後ろの「CreationTime (10ms)」となっている1バイト分のデータは何用?

C0 03 00 0A 69 63 00 00 75 E8 0C 00 00 00 00 00
00 00 00 00 20 00 00 00 75 E8 0C 00 00 00 00 00

タイプ 0xC0 のレコードでは、ファイルサイズが二カ所(黄緑部分)に保存されていますが、ファイルサイズ2の前にある4バイト(青色)が開始クラスタ位置(CL 32)ということで、C0 レコードを見れば開始クラスタ位置とサイズを確認できるということになります。

C1 00 44 00 65 00 73 00 65 00 72 00 74 00 2E 00
6A 00 70 00 67 00 00 00 00 00 00 00 00 00 00 00

タイプ 0xC1 のレコードにはファイル名が UTF-16LE で入っていることになります。ファイル名が長い場合には更に C1 レコードが追加されることになりますが、ファイル名の長さは 0xC0 レコード(FileNameLength)で管理されている構造みたいですね。単に「exFAT 構造解析」を参考に見比べているだけだったりはしますが(^^;;