ファイル操作スコープ (KAUTH_SCOPE_FILEOP) に登録する kext でファイルの監視を必要とするシステムを開発しました。OSX 10.8 以前では、すべてが期待どおりに機能し、プログラムの実行により、実行を開始するプログラムの必要な pid、ppid、およびファイル名が提供されます。
vnode スコープでは、本「Mac OS X Internals」で推奨されているように、次のようにコールバックで pid を取得します。
data.pid = vfs_context_pid((vfs_context_t)arg0);
私が使用するファイルスコープの場合:-
proc_t self = proc_self();
data.pid = proc_pid(self);
proc_rele(self);
私が見ている Mavericks の問題は、アプリケーションが xpc を介してヘルパー アプリを生成するときに発生します。たとえば、パッケージ (.pkg) をインストールすると、関連する「ランナー」ヘルパー アプリケーションを使用する Apple のインストーラが起動します。
ファイルスコープが「ランナー」の実行を報告する場合、ファイルパスは正しいですが、報告される pid と ppid は親アプリのインストーラーのものであり、ヘルパー アプリケーションのものではありません。
テスト時に、VNode スコープ (KAUTH_SCOPE_VNODE) に登録すると、正しい pid と ppid が報告されます。
Apple のドキュメントに記載されているように、ファイル操作スコープを使用してウイルス対策スキャン プログラムを実装できます。
この状況で、ヘルパー アプリの pid と ppid がその親のものとして報告されると、ヘルパー アプリが検出されない可能性があります。
Mavericks でファイル操作スコープに登録されているときに、ヘルパー アプリケーションの正しい pid と ppid を取得する方法を教えてもらえますか?