从 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 界面,表明您需要这些功能以及原因。我们中这样做的人越多,他们最终移除它们的可能性就越小。
我需要从 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 界面,表明您需要这些功能以及原因。我们中这样做的人越多,他们最终移除它们的可能性就越小。