仮想ドライブをホストして I/O をインターセプトするか、ハード ドライブ上の特定のフォルダーへの I/O 呼び出しをインターセプトして、ファイルを 2 番目の場所に書き込むなど、その呼び出しに対して任意の処理を実行したいと考えています。たとえば、Notepad.exe がファイルを C:\Data\test.txt に書き込む場合、そのファイル名とファイルのデータにアクセスしたいと思います。同様に、ユーザーが C:\Data\test.txt を読み取ろうとしたとき、または C:\Data のディレクトリ リストを取得しようとしたときに、任意のコードを実行したいと考えています。
理想的には、ファイルが作成、更新、削除、または開かれたとき、および誰かが (コマンドラインまたはシェルから) ディレクトリの一覧を作成したときのハンドラーが必要です。
FileSystemWatcher を使用して書き込み部分を実行できますが、ディスクの「読み取り」を傍受することはできません。そこで、次に MS Detours と EasyHook を調べました。コンピューター上のすべてのプロセスを監視し、それらすべてで OpenFile にフックする必要があるため、これは実際には機能しません。この動作はコマンドラインからも存在する必要があるため、シェル拡張機能は使用したくありません。つまり、File System MiniFilter ドライバーを作成するか、C++ で独自のインストール可能なファイル システムを作成する必要があります。
これの一部を C++ で使用できます。ただし、ドライバーに関することは頭を悩ませていますが、最終的に残りのコードのほとんどは、理想的には C# である必要があります。
特定のフォルダまたは仮想ドライブへの I/O をインターセプトする簡単な方法はありますか? 答えが EasyHook または MiniFilter である場合、サンプルを持っている人はいますか? 特に EasyHook には 2000 年代後半のサンプルしかなく、それ以降 API が変更されています。ありがとう!