NTFSの複数のデータランの先頭アドレスの算出

NTFSでは、MFTレコードにファイルのメタデータを格納していく。 そこに、ファイルのデータ本体の場所の先頭アドレスを示すパラメータがある。

ファイルがフラグメントを起こしてしまうと複数のデータランで構成されてしまう。 そのデータランの内の「ファイルの先頭アドレス」を表すパラメータの計算方法のメモが以下。

計算方法

パラメータの値のMSBが0の場合は、1つ前のデータラン内の「ファイルの先頭アドレス」にそのまま足しこむ。

今回出したいアドレス = 1つ前のデータラン内の「ファイルの先頭アドレス」 + パラメータの値

パラメータの値のMSBが1の場合は、パラメータの値をビット反転してから、1つ前のデータラン内の「ファイルの先頭アドレス」からその反転後の値を引く。

今回出したいアドレス = 1つ前のデータラン内の「ファイルの先頭アドレス」 - ビット反転後のパラメータの値

ビット反転は http://carumisu.hatenablog.com/entry/2015/10/27/114917 で行った。