【问题标题】:Read file extended attributes from macOS kernel extension从 macOS 内核扩展读取文件扩展属性
【发布时间】:2018-07-08 02:43:45
【问题描述】:

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

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

【问题讨论】:

    标签: macos kernel-extension


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-03-11
      • 2018-08-08
      • 2016-04-06
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多