■20357 / ) |
Re[19]: フロッピードライブを開いた時のイベント取得について |
□投稿者/ れい (630回)-(2008/06/09(Mon) 18:31:02)
|
■No20340 (じゅで さん) に返信 > 上記の何通りかのやり方というと > どのような感じのものがあるでしょうか?
えーと。 極めて普通の方法です。 OSの仕組みを考えて、 上から順番に実現できそうな層・コンポーネントを探していくだけです。
> そして、フックするとして、どのメッセージをフックするのが良いのか > というのと、フックなんかしなくてもAPIが用意されていたりします?
当然、最初にAPIを探しますが、 「ドライブを開いたときに呼ばれる通知」 なんてものは無いでしょう。
なら、何とかして無理やり処理を割り込ませるしかない。
エクスプローラーでAを開こうとしたときに、 OSの各コンポーネントがどう振舞っているか、 その各コンポーネントとのどこに割り込ませたらいいかを考え、 一番うまく出来そうなのを選べばよいかと。
以下、かなり馬鹿らしいものも含まれてますが。
いちばんUI寄りな「画面」だと、例えば 「画面のキャプチャからAを開いていると認識する」 とか言うのも絶対できないわけではないですね。当然却下ですが。
エクスプローラをフックという手もありますね。 バージョン依存とかレイアウト依存がきついので、 絶対出来ないわけではないですが、私は嫌ですねぇ。
で、私なら次はシェル周りを調べるでしょう。 残念ながら私はシェルを殆ど扱ったことがないので…。もう忘れました。 もしかしたらなにか方法があるかもしれません。
で、シェルがだめなら次はWin32サブシステムを見ます。 が、これは殆どいじれないので…却下。
するともうカーネルに入っちゃいますね。 一番上はファイルシステムフィルタドライバ。 Aへのアクセスを拾って解析しちゃうフィルタ。 たぶんこの策が一番楽でしょう。 実際作るなら、フィルタドライバとVB6で通信することになりますね。 もうそれをVB6と言えるかどうか謎ですが。
次はstorageクラスドライバやfloppyデバイスドライバへのフィルタ。 もしくはデバイスドライバ自体の置き換え。 ドライブ番号を付け替えて自作のドライバに回してもいい。 これもまぁ殆どのことができます。
さらに激しいことをするなら、 FDDドライブの挿入検知スイッチとかシークランプから電気的にシグナルをとって、 それをデジタルI/Oなどで取得してもいい。 専用ハードと工作が必要ですが、プログラムはVB6でOK。
そうなってくるともういっそのこと、 USBの電気式ロックを作ってFDDに取り付けちゃったらいい。 VB6でUSBとか出来ますしね。
まぁこんな感じで、金と時間と能力が無限にあれば、何でも出来ます。 が、どれもかなりつらいですね。 現実的じゃない。
最後の「USBロック」なら3万円+一週間程度でできるかなぁ… フィルタドライバなら1ヶ月とかでしょうか。 そんなHandMade感あふれるプロダクツを業務に使うのはどうかと思いますが。
あ。そうそう。 SCSIのフロッピーで、Aドライブとして使えるものがあります。 で、その中に「メディアのロック」ができる物があったかと思います。 それを使えばVB6からDeviceIoControlでFDDの交換防止ができるはずですが。
|
|