メディアが交換されたか調べる関数はありますか?

解決


あおぺん  2009-07-28 08:53:22  No: 146163  IP: 192.*.*.*

初めまして。VB.net(2005)をWindowsXPで使っている初心者です。
CDやMO等のメディアのデータを変換・表示するソフトを作成しています。

プログラムを実行中にメディアが交換されると、変換したデータと食い違うので、使用者がメディアを交換した事がわかるような関数がありましたら教えて下さい。

自分なりに調べたんですが、見つけることが出来ませんでした。
お忙しいとは思いますが、どなたかアドバイスして下さい。

編集 削除
オショウ  2009-07-28 09:39:46  No: 146164  IP: 192.*.*.*

直接的な回答ではありません。

入れ替えを検出する方法はありますが、それ以前にドライブを
ロックして、入れ替えさせないと言う方法もあります。

http://www.dev.pei.jp/programming/sdk/sdk70.html

こちらの方が楽と言うか、コード量少なくてすむ・・・

※  ただし、ロックしたまま、そのソフトが異常終了したよう
    な場合、アンロックだけ行うする別機能が必要・・・

    メディアの変更を検知する方法をインプリするか、ロック
    するか・・・ちょっと『う〜ん』ですネ!

以上。参考まで

編集 削除
あおぺん  2009-07-28 10:45:00  No: 146165  IP: 192.*.*.*

オショウ様
早速のアドバイスありがとうございます。
確かにロックをかければチェックの必要が無いので楽ですね。
でも、オショウ様がおっしゃられている通り、ソフトが異常終了する事も考慮しなければならないですね・・・。

入れ替えを検出させる場合の問題点はありますか?
たぶん、滅多な事で入れ替えは無いと思いますが、もしもの時の対応として考えています。
※注意文も書いておこうと思います。

編集 削除
オショウ  2009-07-28 11:36:14  No: 146166  IP: 192.*.*.*

これも直接的回答ではありません・・・

大昔?質の悪い?ドライブを使った場合、メディアチェンジの
検出ができない。と言うものがありました。ドライブにその機
能が無いのです。

自分で読み書きして(書きができないメディアも当然ある)、
チェンジされたかどうかを判断しないといけない・・・

固有の情報(1枚1枚完全に区別可能)があれば、それを頼り
にできるんですが、できない場合、ファイルの中身で勝負しな
いといけない。

要は、ファイルをオープンして所定の個所を読み、前回と一致
しないと、チェンジされた・・・

最近のドライブにそういうものがあるのかは、解りません。
が、あると考えます・・・

ので、ロックの方が逆に安全確実・・・

※  FDDは無理ですヨ!
    あくまでCD・MO・・・

●  一応、念のため・・・

    簡単には、メディアチェンジ時、WM_DEVICECHANGE
    メッセージが流れます。
    流れないデバイスもありますが・・・

    テストしてみて下さい。

以上。

編集 削除
あおぺん  2009-07-28 14:29:05  No: 146167  IP: 192.*.*.*

何度もご回答ありがとうございます!
ロックの方が簡単で楽そうなのですが・・・・。
どんなメディアが来るか分からないので。
今のところ予想されるのはCD・MOそしてFDなんです(涙)

今「WM_DEVICECHANGE」を調べていたらオショウ様の回答も有りましたね
どちらもFDには物理的に抜き差しした時は分からないようですね。
これは、やっぱりロックを使った方がいいという事でしょうか。
FDの場合は捨てるという方向・・もとい、改めて検討ということで(苦笑)
頑張ってみます。

編集 削除
オショウ  2009-07-28 16:17:57  No: 146168  IP: 192.*.*.*

FDは、ハードウェアの機構としてドライブ全面のイジェクトボタン
は何らのデジタル的スイッチでもなく、ハード的機構としてFDを押
し出す為だけの構造なので、OS的に通知をドライブから得ているの
では無い為、解りません。

ただ・・・
これも非常に狭い範囲の話ですが、SCSI接続のFDや、2ED規格
のもの(IBM PS/2,PS/55)は、FDの入れ替えを検知することができ
た・・・(はず・・・記憶の彼方・・・)

主流では無いので、FDは現時点で入れ替えを取得するのは、なかな
か手間のかかる話かと。

※  FDのデバイスドライバーにフィルダードライバかましてやれば
    検知可能かと思いますが、そんなドライバー作った人、見たこと
    ないし、FDすらもう搭載していないPCが増えているので、今
    更・・・と言うことろ。

    FDの入れ替えを検知する機能は、コストの無駄かも・・・

以上。蛇足でした。

編集 削除
あおぺん  2009-07-29 09:16:55  No: 146169  IP: 192.*.*.*

お返事が遅くなってすみません。
ロックの参考ページを一度見た時はちゃんと見れたので、「WM_DEVICECHANGE」の方を調べていたら、参考ページが見れなくなってしまいました。
昨日何度試しても(PCを変えたりもして)ダメだったので、今日も試したのですがダメでした  orz
オショウ様はご覧になれますか?

編集 削除
オショウ  2009-07-29 09:33:59  No: 146170  IP: 192.*.*.*

確かに見れないですね〜

Googleで『API CD ロック』検索したらヒットしますので
そのキャッシュで見て下さい。

別の記事では・・・
http://madia.world.coocan.jp/vb/vb_bbs/200212/200212_02120061.html

以上。

編集 削除
K.J.K.  2009-07-29 11:23:21  No: 146171  IP: 192.*.*.*

PC-AT互換機では、IDEで接続されたFDの挿入/取り外しの
信号は送られません。信号を送る線が繋がっていませんので...

# NECの98系ならば、繋げてありますので検知されます。
# いまどきのOSで使っていることはまずありませんが...

編集 削除
あおぺん  2009-07-29 16:38:16  No: 146172  IP: 192.*.*.*

オショウ様
Googleで検索したんですが、見に行けなかったので、別の記事を参考に作ってみます。

Win32 API Programing TipsがCDのロックに関してピッタリの事例を表示していたのに残念です。


K.J.K様
>いまどきのOSで使っていることはまずありませんが
まずないですよね、うちでは使ってますが(ですが、さすがに98を対象には作っていません)
1.2MB、512フォーマットも健在です(苦笑)

編集 削除
あおぺん  2009-07-29 16:49:03  No: 146173  IP: 192.*.*.*

オショウ様

すみません。
メディアを交換した事がわかるような関数が無いかが、質問内容だった事を失念しておりました。
教えて頂いた関数を使って出来無かった時はまた質問すればよい事でした。

長々と突き合わせてしまい本当に申し訳ありませんでした。
お陰様で知りたい関数が分かりました。
本当にありがとうございましたm(_  _)m

編集 削除