ディスクダンプの作り方 – プログラミング – Home

ディスクダンプの作り方
 
通知
すべてクリア

[解決済] ディスクダンプの作り方


ぴょぴょ
 ぴょぴょ
(@ぴょぴょ)
ゲスト
結合: 17年前
投稿: 82
Topic starter  

また、お世話になります。

質問はディスク上(HDD,FDDなど)のクラスタデータを直接読み出したいです。
目的はディスク上の16進数ダンプリストを表示したり、うっかりミスで
削除してしまったファイルを探すため。

簡単な削除復活ツールを作ってみたいのです。
いま一番教えて欲しいのがディスク上のセクタ?クラスタ?からデータを
直接読む方法です。探しましたが思うように見つかりませんでした。

Windows XP Home SP2
VC++2003(SDK)

よろしくお願いします。


引用未解決
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

CreateFile でドライブないしデバイスを開いて ReadFile/WriteFile するだけ
http://msdn.microsoft.com/ja-jp/library/cc429198.aspx


返信引用
ぴょぴょ
 ぴょぴょ
(@ぴょぴょ)
ゲスト
結合: 17年前
投稿: 82
Topic starter  

情報ありがとうございます。

いろいろと調べて次のリンクが見つかりました。
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 関数でエラーになってしまいます。
何が原因でしょうか?


返信引用
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

そのサンプルは試していないけど、俺マシンで \\.\C: は問題なく開けるし
ブートセクターやルートディレクトリを読んでみたら期待通りの値が得られる

> 試してみましたが実行時にエラーが出ます。
GetLastError を調べるくらいはやったかい?
サンプル鵜呑み無変更では何の意味もないぞ

...リンク先サンプルには致命的な誤りがあるが、たぶんそのせい
困ったら MSDN 原文をあたろう。
日本語版によくある誤訳が原文には当然ないし、解説が改められていたりする
サンプルのどこが悪いかもここでわかるはずだ
http://msdn.microsoft.com/en-us/library/aa363858.aspx


返信引用
ぴょぴょ
 ぴょぴょ
(@ぴょぴょ)
ゲスト
結合: 17年前
投稿: 82
Topic starter  

> GetLastError を調べるくらいはやったかい?
調べたら32が返されました。
この値から[ファイルが別の処理で使われているため、アクセスできません]
となり理由が分かりませんでした。

> ...リンク先サンプルには致命的な誤りがあるが、たぶんそのせい
何処か分かりました。
CreateFile関数にFILE_SHARE_WRITEフラグを付けたら正常にオープンできた。

> サンプル鵜呑み無変更では何の意味もないぞ
痛感しました。

> サンプルのどこが悪いかもここでわかるはずだ
MSDN解説の[テープドライブ]の上にFILE_SHARE_WRITEフラグについて
書いてありました。

朝早くからありがとうございました。
これで解決です。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました