2

仮想ドライブをホストして 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 が変更されています。ありがとう!

4

1 に答える 1

1

XY問題のようです。あなたが望んでいるように見えるのは、再解析ポイントハンドラーです。

「ファイルを別の場所に書き込む」という例は単なるリンクであり、それらは既に存在しています。標準の再解析ポイント ハンドラーによって実装されます。

他に何をしたいのかを正確に指定することはできませんが、同様のことがカスタムの再解析ポイント ハンドラーによって実行できます。簡単に言うと、再解析ポイントはファイルの代わりの小さなデータであり、(1) 呼び出されるハンドラーを指定し、(2) そのハンドラーにカスタム データを提供します。たとえば、ファイルの実際の場所です。カスタムデータですので、お好きなフォーマットでご利用いただけます。

于 2014-05-19T09:06:53.097 に答える