初めまして。
自作ソフトを常駐させてある特定のフォルダを開こうとした瞬間にそのソフトによってパ
スワード認証を行わせるような感じのセキュリティソフト(?)を作ろうと考えているの
ですが、その際の「フォルダを開く瞬間」を検出する方法を色々調べたのですが見つから
なかったので、何かいい方法がありましたらご教授ください。
また、何か説明不足な点がございましたらご指摘ください。
開発環境:VC++6.0、WindowsXP Home
追加。
開発環境:VC++6.0 SDK
特定のソフトからとかならともかく、いかなるソフトから開いてもという事であれば、
ドライバでレベルで捕まえないと駄目なんではないかと思います。
フィルタードライバという言うのが多分、それにあたると思うので調べて見られてはどう
でしょう。
「explorer.exe に特定」してもいいんであれば、ゴリゴリ書けば Win32 API でもでき
るかもしれない。
むしろ、あらゆるソフトに効果を及ぼしてしまった時、何らかのアプリがこっそり
FindFirstFile を呼び出した時に、ユーザーの身に覚えのないところでダイアログがい
っぱい出ると、それはそれで困惑。
確かにシャノンさんの言う通りですね。
何でもかんでもとなるとプログラムの内部的な処理でフォルダを開こうとして時にまで
ダイアログが出てきて「何それ」と言うことになりそう。
苦労して作成しても利便性的には問題ありそうです。
んー
しかし、用途(認証をかけたい目的)にもよるけれど、プログラムからフォルダの中を
操作するのを防げないと意味がないとしたら、それはそれで難しい。
その場合、おそらく最もスマートな手段はファイルシステムドライバにフィルタを入れ
ることだと思うから、作るのが簡単じゃない(デバッグはそれ以上に簡単じゃないが)
というのはもちろんあるけれど。
それ以前に、「ダイアログを表示してパスワードを入力させる」というデザインを考え
直す必要がありそう(ちなみに、ドライバからダイアログは表示できない(と思う)の
で、ユーザーモードアプリを常駐させておいて、それとどうにかして通信して、ダイア
ログはユーザーモード側で出す必要があるような気もする)。
で、読み返してみたら、当初の書き込みには「ダイアログを表示する」とは一言も書い
てなかったことに気づいたので、その場でダイアログを出して入力させることをそもそ
も想定してなかったら、申し訳ない。
> プログラムからフォルダの中を操作するのを防げないと
×操作
○走査
でも、操作でもあながち間違いではない気がした。
> おそらく最もスマートな手段はファイルシステムドライバに
> フィルタを入れることだと思う
力技でもいいなら、全てのプロセスに DLL を潜り込ませて、フォルダを走査する全て
の API をフックするという手もあるけど、個人的には嫌。
#連投失礼
> ユーザーモードアプリを常駐させておいて、それとどうにかして通信して、
> ダイアログはユーザーモード側で出す必要があるような気もする
この場合、ユーザーモード側で動いているアプリを強制終了させられると困ってしまう
ので、その対策も必要かも。
例えば、通信に失敗したら強制的に認証失敗とみなすというのが考えられる。
ただ、こうすると、場合によっては、フォルダを開けないと致命的な状態に陥るシステ
ムサービスとかがあることも考えられる(最悪、OSが起動/終了できなくなる可能性
もある…まぁ、ファイルシステムドライバにフィルタ入れる時点で、ドライバにバグが
あったらOSもろとも死ぬ可能性はあるけれど)ので、設計は細心の注意を払って行わ
れたし。
返答が遅くなって申し訳ありません。
たくさんの丁寧なご指摘に感謝いたします。
なかなか自分にとってはかなり高度な話でしたので、色々調べながら読んでいたのです
が、まだまだ自分の知識不足だというのを痛感しました。自分がしようとしていることは
半ば無謀な気がして、それに作るだけの技術力もないと判断したので製作をしばらく断念
することにします。スキルアップしてから作るということで・・・。せっかく具体的な方法
を考えていただいたのに申し訳ないです。
[解決]にチェックし忘れました。