他のプログラムのラッパー/ランチャーとして機能するCで記述された小さなコマンドラインアプリケーションがあります(xargsを考えてください)。このアプリケーションは、FreeBSD / Linux(fork()/ exec()経由)およびWindows(CreateProcess())でコンパイルするように作成されています。子アプリケーションのコマンドライン引数をインターセプト、インジェクト、またはその他の方法で操作できることに加えて、子プログラムのファイルシステムアクティビティ(またはその子など)をインターセプトする簡単な方法があるかどうか疑問に思いました。私は主に、読み取りまたは書き込みのいずれかでアクセスされるファイル名だけに関心があり、そのファイルの内容には関心がなく、インターセプトを可能な限り軽量にしたいと考えています。
上からいくつかの関連するキーワードをグーグルで検索すると、Win32でこれを行う方法はたくさんあるようです。ファイルシステムフィルタードライバーからPEインポートテーブルヘッダーの改ざんまで。これらはどれも些細なことではなく、ラッパープログラムの実行可能ファイル内に自己完結できるものではありません(たとえば、ほとんどの場合、メインの実行可能ファイルと一緒に追加のDLLまたはドライバーファイルが必要になります)。また、可能であれば、これをWindows XP〜7で動作させたいと思います。 、UACまたは他のプラットフォームデルタをハックする必要はありません。これは私の子プロセスなので、そのアクティビティを安全に監視できるはずです:)
Linuxにはinotify()がありますが、これは私の子プロセスのみに関係なく、一般的なファイルシステムアクセスを監視します。FreeBSDのkqueue()についても同じことが言えます。これらは、ラッパーの複数のインスタンスが異なるプログラムを実行している可能性があり、それぞれが自分の子のファイルシステムアクティビティを相互に明確にする必要があるSMPの場合にも分類されます。
SOコミュニティが提供しなければならないかもしれない提案を確かに感謝します。