在 KEXT 中,我正在通过 vnode 或文件范围侦听器侦听文件关闭。对于某些(非常少的)文件,我需要将文件路径发送到我的系统守护程序,它会进行一些处理(这必须在守护程序中发生)并将结果返回给 KEXT。在我得到守护进程的响应之前,需要阻止文件关闭调用。根据结果,我需要在近距离通话中进行一些操作并成功返回近距离通话。论坛上有很多关于KEXT通信相关话题的讨论。但它们不是决定性的,而且看起来很老(2002 年左右)。这个需求可以通过FtlSendMessage(...)
Win32 API 来处理。我正在寻找 Mac 上的等价物
以下是我看过并想总结一下我的理解:
- Mach 消息:提供非常好的双向通信方式,使用发送者和回复端口以及队列机制。但是,mach 消息 API(例如
mach_msg
、mach_port_allocate
、bootstrap_look_up
)似乎不是 KPI。mach_msg_send_from_kernel
可以使用mach API ,但仅此一项对双向通信没有帮助。我的理解对吗? - IOUserClient:这似乎更多地与从用户空间到 KEXT 的通信有关,然后从 KEXT 进行一些回调。我没有找到一种方法来启动从 KEXT 到守护程序的通信,然后等待守护程序的结果。我错过了什么吗?
- 套接字:这可能是最后一个选项,因为我必须实现从 KEXT 到守护进程的整个双向通信通道。
ioct
l/sysctl
: 我对他们了解不多。根据我的阅读,它不推荐使用,特别是对于双向通信- RPC-Mig:同样我对它们了解不多。从我所看到的看起来很复杂。不确定这是否是推荐的方式。
- KUNCUserNotification:这似乎只是从 KEXT 向用户提供通知。它不符合我的要求。
支持的平台是(10.5 起)。因此,查看要求,有人可以就该主题提出建议并提供一些指示吗?
提前致谢。