C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 39 を表示中)
■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の交換防止ができるはずですが。
返信 編集キー/


管理者用

- Child Tree -