【发布时间】:2018-07-08 02:43:45
【问题描述】:
我需要从 kext 读取文件扩展属性。我查看了内核 api,但没有找到任何方法。
有没有可能从kext读取文件扩展属性,最好从文件vnode开始?
【问题讨论】:
我需要从 kext 读取文件扩展属性。我查看了内核 api,但没有找到任何方法。
有没有可能从kext读取文件扩展属性,最好从文件vnode开始?
【问题讨论】:
它不再是 Apple 官方公开 KPI 的一部分,但 com.apple.kpi.dsep 捆绑包导出的不是一组而是两组用于读取和写入 xattrs 的 API。
在<bsd/sys/vnode_if.h>:
extern errno_t VNOP_SETXATTR(vnode_t vp, const char *name, uio_t uio, int options, vfs_context_t ctx);
extern errno_t VNOP_GETXATTR(vnode_t vp, const char *name, uio_t uio, size_t *size, int options, vfs_context_t ctx);
这些(显然)使用了 uio 缓冲机制,这可能有点尴尬;或者,还有:
int mac_vnop_setxattr(struct vnode *, const char *, char *, size_t);
int mac_vnop_getxattr(struct vnode *, const char *, char *, size_t,
size_t *);
int mac_vnop_removexattr(struct vnode *, const char *);
这些在<security/mac_policy.h> 中声明,遗憾的是已从 macOS 10.13 SDK 的 Kernel.framework 中删除。这些函数仍然存在,头文件仍然是 xnu 源代码分发的一部分。它也至少在 10.5-10.12 SDK 中。从使用 10.12 或更早版本的 SDK 构建的 kext 调用 10.13 上的函数可以正常工作,尽管正如我所提到的,Apple 并未正式支持它。
如果您确实使用了这些 API,则值得向 Apple 提交一份雷达请求,要求将它们返回到公共界面,说明您需要这些功能以及原因。我们这样做的人越多,他们最终移除它们的可能性就越小。
【讨论】: