Windows が削除を実行する前に、ファイルの削除を検出する方法はありますか? FileSystemWatcher クラスを見つけましたが、削除アクションが実行された後にのみイベントが発生しますが、ユーザー/プロセスが削除を選択したら、削除アクションをトラップしたいと考えています。ファイル システム テーブルを監視できますが、より良い方法を探しています。ご協力いただきありがとうございます。
3 に答える
ファイルシステムフィルタードライバーが必要です。ただし、答えがわからない場合は、おそらくそれを行うべきではないことを強くお勧めします。
http://msdn.microsoft.com/en-us/library/windows/hardware/gg462968.aspx
または、ICopyHookインターフェイスを試すこともできます。
http://msdn.microsoft.com/en-us/library/windows/desktop/bb776049%28v=vs.85%29.aspx
CopyCallbackメソッドでは、wFunc パラメータに FO_DELETE を使用して、削除操作を指定します。
短所: Windows シェルでのみ削除を防止します。
最も簡単な方法は、フックを使用してプロセスに通知を受け取る (そして最終的に停止する) ことだと思います。.NET では実行できないためDllImport
、P/Invoke には多くの構造と少数の関数が必要です。
NtSetFileInformation
(文書化されていない) 関数で仕事を始めましょう。これは、ファイルを削除する必要があるときに、他の何かによって呼び出される関数です (FileDispositionInformation
構造を使用して)。
問題は、その関数をどのようにフックするかです (運が良ければ、簡単ではありません)。Microsoft Detoursを使用することをお勧めします。例として、この記事を見てください。その問題は、無料ではないことです。別のソリューション (手頃な価格で .NET インターフェースを備えたもの) はDeviare ですが、無料版でさえ試したことがないので、それがどれほど優れているかはわかりません。他の誰かが良い傍受ツールを知っていれば...