また、お世話になります。
質問はディスク上(HDD,FDDなど)のクラスタデータを直接読み出したいです。
目的はディスク上の16進数ダンプリストを表示したり、うっかりミスで
削除してしまったファイルを探すため。
簡単な削除復活ツールを作ってみたいのです。
いま一番教えて欲しいのがディスク上のセクタ?クラスタ?からデータを
直接読む方法です。探しましたが思うように見つかりませんでした。
Windows XP Home SP2
VC++2003(SDK)
よろしくお願いします。
CreateFile でドライブないしデバイスを開いて ReadFile/WriteFile するだけ
http://msdn.microsoft.com/ja-jp/library/cc429198.aspx
情報ありがとうございます。
いろいろと調べて次のリンクが見つかりました。
http://www.tri-field.com/progtips/tips10.html
このページはCD-ROM等の物理アクセスとなっていますが
HDDやFDDも同じ手順で行えますか?
試してみましたが実行時にエラーが出ます。
> Failed to open disk device.
> Press any key to exit.
コマンドラインでは Sample C: 0 としています。
ソース上では CreateFile 関数でエラーになってしまいます。
何が原因でしょうか?
そのサンプルは試していないけど、俺マシンで \\.\C: は問題なく開けるし
ブートセクターやルートディレクトリを読んでみたら期待通りの値が得られる
> 試してみましたが実行時にエラーが出ます。
GetLastError を調べるくらいはやったかい?
サンプル鵜呑み無変更では何の意味もないぞ
...リンク先サンプルには致命的な誤りがあるが、たぶんそのせい
困ったら MSDN 原文をあたろう。
日本語版によくある誤訳が原文には当然ないし、解説が改められていたりする
サンプルのどこが悪いかもここでわかるはずだ
http://msdn.microsoft.com/en-us/library/aa363858.aspx
> GetLastError を調べるくらいはやったかい?
調べたら32が返されました。
この値から[ファイルが別の処理で使われているため、アクセスできません]
となり理由が分かりませんでした。
> ...リンク先サンプルには致命的な誤りがあるが、たぶんそのせい
何処か分かりました。
CreateFile関数にFILE_SHARE_WRITEフラグを付けたら正常にオープンできた。
> サンプル鵜呑み無変更では何の意味もないぞ
痛感しました。
> サンプルのどこが悪いかもここでわかるはずだ
MSDN解説の[テープドライブ]の上にFILE_SHARE_WRITEフラグについて
書いてありました。
朝早くからありがとうございました。
これで解決です。