从 macOS 内核扩展读取文件扩展属性

Read file extended attributes from macOS kernel extension

我需要从 kext 读取文件的扩展属性。我查看了内核 api,但没有找到任何方法。

是否有可能从 kext 读取文件扩展属性,最好从文件 vnode 开始?

它不再是 Apple 官方 public 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 提交雷达请求将它们返回到 public 界面,表明您需要这些功能以及原因。我们中这样做的人越多,他们最终移除它们的可能性就越小。