どのようにWindowsでのDeviceIoControl()を使用して、個々のセクタ/クラスタを読むには?

StackOverflow https://stackoverflow.com/questions/2350181

質問

Windowsが休止状態にするために準備をしている間に

私は私のラップトップを落とし、結果として、私は、ハードドライブ上のヘッドクラッシュを得ました。 (周りのA自由落下センサー次回のハードドライブおよび/またはラップトップを得るために私を教えています。)とにかく、データを回復しようとする代わりに、SpinRiteを実行すると、すべてのディスク上のすべての予備セクタがすべてのすべてのために、最大使用することになりました回復可能なセクタのこれまでのところ。代わりに、SpinRiteが、私はそれがすべての不良セクタがどこにあるか教えてくださいする以外無益な運動になるだろうと思いますまだ今起こっているが、使用するもう予備セクタがないからである。

とにかく、私はハードドライブからのサルベージデータにしようとするアプリケーションを書くことに計画しています。デフラグに私の過去の進出から、私は、任意のファイルの論理クラスタ番号を把握するFSCTL_GET_RETRIEVAL_POINTERSを使用することができることを知っています。

どのように私は、実際のクラスタのセクタを読み取るしようとして行くのですか? MSDNのリストディスク、ファイル、およびボリュームのデバイス制御コード用の貫通私の掘削は、私が実際のクラスタデータを取得する方法として私に飛び出す何もありませんでした。

万一私も、低レベルで読み取ろうと気にしませんか?私が代わりにSetFilePointer()とのReadFile()を実行しなければならないことは、ファイルに適切なクラスタにサイズのオフセットを取得し、クラスタサイズのチャンクを読み取るために呼び出す?

私は読んしようとしているファイルは、不良セクタがある場合は、

、NTFSが悪いとしてファイル全体をマークし、私は将来的には、ファイルへのアクセスを防ぐことができますか?もしそうなら、どのように悪いか死んとしてファイルをマークしていないNTFSを教えていますか? (HDを再マップする予備セクタの外に今あることを覚えておいてください。)

は/ dev /?

から読み取る方法を私の* nixの知識やフィギュアオフ万一Iダスト アップデート:私は自分の質問への答えを見つけました。 :-)ソリューションは、ファイルハンドルではなく、ボリュームハンドルにSetFilePointer()とのReadFile()を実行されます。

役に立ちましたか?

解決

私は自分の質問への答えを見つけました。 :-)ソリューションは、ファイルハンドルではなく、ボリュームハンドルにSetFilePointer()とのReadFile()を実行されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top