CreateFile
Windows では、すべてのディスク I/O は最終的にSetFilePointer
、 などの Win32 API 呼び出しを介して発生します。
さて、これらのディスク I/O の Win32 呼び出しをインターセプトし、動的にリンクされたすべての Windows アプリケーションに対して、実行時に独自のコードをフックすることは可能でしょうか? つまり、静的な C ライブラリではなく、Windows DLL を介して機能を取得するアプリケーションです。CreateFile
私が持っているいくつかの制約は次のとおりです。
ソース コードがない:傍受したいプロセスのソース コードがありません。
スレッド セーフ:フック コードが独自のメモリを動的に割り当てる場合があります。さらに、このメモリは複数のインターセプトされたプロセス (およびそのスレッド) と共有されるため、アクセスをシリアル化できるようにしたいと考えています。
条件付き委任とオーバーライド:私のフック コードでは、元の Win32 API 機能に委任するか、独自の機能を使用するか、またはその両方を使用するかを決定できるようにしたいと考えています。(C++ または Java のサブクラスのオーバーライド メソッドでのスーパー クラス メソッドのオプションの呼び出しによく似ています。)
通常のユーザー空間コード:デバイス ドライバーを作成する必要なく、上記のコードを実行できるようにしたいと考えています。
これが可能であれば、いくつかの指針をいただければ幸いです。ソースコードは必須ではありませんが、いつでも歓迎します!