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

时间:2018-01-29 11:54:18

标签: macos kernel-extension

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

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

1 个答案:

答案 0 :(得分:1)

它不再是Apple官方公共KPI的一部分,但是com.apple.kpi.dsep捆绑包只出口了两套用于阅读和阅读的API。写xattrs。

<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提交雷达,要求将它们返回到公共界面,这表明您需要这些功能以及原因。我们这样做的人越多,他们最终删除它们的可能性就越小。