NTFSの複数のデータランの先頭アドレスの算出
NTFSでは、MFTレコードにファイルのメタデータを格納していく。 そこに、ファイルのデータ本体の場所の先頭アドレスを示すパラメータがある。
ファイルがフラグメントを起こしてしまうと複数のデータランで構成されてしまう。 そのデータランの内の「ファイルの先頭アドレス」を表すパラメータの計算方法のメモが以下。
計算方法
パラメータの値のMSBが0の場合は、1つ前のデータラン内の「ファイルの先頭アドレス」にそのまま足しこむ。
今回出したいアドレス = 1つ前のデータラン内の「ファイルの先頭アドレス」 + パラメータの値
パラメータの値のMSBが1の場合は、パラメータの値をビット反転してから、1つ前のデータラン内の「ファイルの先頭アドレス」からその反転後の値を引く。
今回出したいアドレス = 1つ前のデータラン内の「ファイルの先頭アドレス」 - ビット反転後のパラメータの値
ビット反転は http://carumisu.hatenablog.com/entry/2015/10/27/114917 で行った。