NTFS ボリューム上の未使用のクラスターをすべて読み取るプログラムを作成したいと考えています。(誤って切り捨てられたファイルからデータを回復しようとしています)。
このページによると、ボリュームハンドルで SetFilePointer() と ReadFile() を呼び出して、ボリューム上の各論理クラスターを通過できます。しかし、どのクラスターがファイルによって使用されていて、どのクラスターが空いているかを知るにはどうすればよいでしょうか?
NTFS ボリューム上の未使用のクラスターをすべて読み取るプログラムを作成したいと考えています。(誤って切り捨てられたファイルからデータを回復しようとしています)。
このページによると、ボリュームハンドルで SetFilePointer() と ReadFile() を呼び出して、ボリューム上の各論理クラスターを通過できます。しかし、どのクラスターがファイルによって使用されていて、どのクラスターが空いているかを知るにはどうすればよいでしょうか?
FSCTL_GET_VOLUME_BITMAPは、まさにあなたが探しているものであり、かなり速いはずです。これは、多くのコンポーネントが単一のファイルを、たとえば大きな連続したスペースにデフラグするために使用するものです。
NTFSボリューム上のすべての未使用のクラスターを取得するには、すべてのファイルとストリームのすべての割り当てのマップを作成する必要があります。非常駐ファイル属性のexntentリストを解析する必要があるため、これは非常に複雑です。そしてMFT。
ただし、切り捨てられたファイルに対してIOCTLまたはfsutilファイルのqueryallocrangesを使用して、最後のエクステント以降を読み取ることができます。現在のファイルが終了する場所を計算すると、ファイルのたるみが生じます。
これは、ファイルが圧縮またはEFS暗号化されていない場合です。
無料または商用のデータ回復プログラムは、ここでより迅速な方法です。