我开发了一个需要使用 kext 监视文件的系统,该系统在文件操作范围 (KAUTH_SCOPE_FILEOP) 中注册。在 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 的安装程序,该安装程序使用关联的“运行器”帮助应用程序。
当 filescope 报告 'runner' 执行时,文件路径是正确的,但报告的 pid 和 ppid 是父应用程序安装程序的,而不是辅助应用程序的。
测试时,向 VNode 范围注册 (KAUTH_SCOPE_VNODE) 会报告正确的 pid 和 ppid。
如苹果文档所述,文件操作范围可用于实现杀毒扫描程序。
在这种情况下,如果帮助应用程序的 pid 和 ppid 报告为其父应用程序的 pid 和 ppid,则可能无法检测到帮助应用程序。
有人可以告诉我在 Mavericks 中的文件操作范围注册时如何检索帮助应用程序的正确 pid 和 ppid 吗?