ファイルまたはディレクトリのコピーを検出する方法を教えてください。
(VC++6.0で開発したいと考えています)
目的は、指定したディレクトリからファイルを持ち出そうとした場合、こっそり管理者に通知するプログラムを作ろうと思っています。
以下は私が実験した内容ですが、不完全な方法です。
①FindFirstChangeNotification()を使う方法
監視対象のディレクトリ内でコピー操作を行う場合は検出可能ですが、
監視対象→監視対象外 にコピーした場合にどうにもなりません。
②シェル拡張(CopyHookHandlers)でフック
ディレクトリ(フォルダ)のコピー操作しか検出できません。
コールバック関数にコピー元、コピー先の情報が設定されてくるので、
理想的なI/Fなのですが。ファイルを監視できないので話しになりません。
使用するAPI、プログラム形態等をどなたかご教示ください。
FindFirstChangeNotifycation でダメってことは、ReadDirectoryChangesW でも似たようなもんでしょうね、たぶん…。
それらの関数の能力を超えたことをしたいとなると…フィルタドライバかなぁ。
シャノンさん情報ありがとうございます。
ReadDirectoryChangesW()も①同様のようです。
フィルタドライバのサンプルコード、どこかに落ちていませんか?
私が望むようなフィルタドライバって、プラットフォームの依存性は高そうですか?(XPで動くけど2000では動かないとか)
ちなみに、フィルタドライバってどのような単位で作るものですか?
a) 1つ
b) ファイルシステムの単位(NTFS、FAT...)
c) デバイスの種類(HDD,リムーバブルドライブ...)
どたなたかご教示ください。
ドライバの作り方は全っ然わかりません。ごめんなさい。
ただ、ウィルススキャナのように、プログラムがファイルにアクセスしようとしていることを検知して割り込み、スキャンを実行するというようなことは、ドライバを作らなければダメらしい、という話を聞いたことがあるだけです。
なお、ディスクドライバは作り方を一歩間違うだけでディスクを昇天させますので、くれぐれもご注意を…。
サンプルは提示できませんが、参考資料程度なら…
・ドライバ開発キット(DDK)
http://www.microsoft.com/whdc/devtools/ddk/default.mspx
・書籍
http://www.amazon.co.jp/exec/obidos/ASIN/4774116661/qid=1102648461/sr=1-5/ref=sr_1_10_5/249-8395646-0366714
http://www.amazon.co.jp/exec/obidos/ASIN/4881358618/qid=1102648519/sr=1-28/ref=sr_1_2_28/249-8395646-0366714
http://www.amazon.co.jp/exec/obidos/ASIN/4756133959/qid=1102648555/sr=1-43/ref=sr_1_2_43/249-8395646-0366714
http://www.amazon.co.jp/exec/obidos/ASIN/4756133967/qid=1102648461/sr=1-10/ref=sr_1_10_10/249-8395646-0366714
・掲示板
http://www.ouk.co.jp/ogawa/treecrsdx/index.cgi
シャノン様、情報提供ありがとうございます。
そうですよね...危険ですよね(^^;
ドライバを作ったとしても、VMWare内で動かしてみようと思います。
ありがとうございました
とりあえずクローズします
VMWareでOSの不正終了は防げても論理的にファイルシステムが壊れるのは別問題では。
VMware で仮想ディスクに実際の物理ディスクのパーティションを割り当てず、仮想 HDD ファイルをマウントしているなら、ぶっ壊れるのはそのイメージファイルだけで済む…ハズ。たぶん。無保証。
むかーしむかし、別ドライバの動作テストでホストまで不安定になったのは
設定がわるかったのか。ありがと。(提供環境だったので設定は分からなかった)
初めてDDKをインストールしてみましたが、英語版しかないのですね...
素人が立ち入る領域ではなさそうです (^^;
とりあえずフィルタドライバのサンプルソースはありました
ツイート | ![]() |