首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mac上安装审批回调

在mac上安装审批回调
EN

Stack Overflow用户
提问于 2014-12-30 09:40:59
回答 1查看 698关注 0票数 2

我想在Mac上授权USB/CD。现在我使用DiskArbitration框架在用户模式下获得MountApprovalCallback。但是,这种回调的问题是,没有任何保证。如果我将得到回调,我将使用CFUserNotificationReceiveResponse()来接受用户的密码。但是当同时显示提示符时,用户可以打开DiskUtility并挂载设备。

所以,

  1. 是否有其他方法来获得挂载批准回调或授权设备?
  2. 如何在内核模式下处理它?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-01-03 12:36:27

在kext中,您可以通过MAC ( mpo_mount_check_mount )策略框架中的mpo_mount_check_mount回调获得文件系统挂载回调的授权回调。你可以决定坐骑是否应该在那里前进。我怀疑您不会从cred参数中获得任何有关登录用户的信息,因为安装syscall很可能是由以root身份运行的守护进程发起的。我不知道你到底想做什么,所以这可能不是解决你的具体情况的最好方法。

代码语言:javascript
复制
/**
  @brief Access control check for mounting a file system
  @param cred Subject credential
  @param vp Vnode that is to be the mount point
  @param vlabel Label associated with the vnode
  @param cnp Component name for vp
  @param vfc_name Filesystem type name

  Determine whether the subject identified by the credential can perform
  the mount operation on the target vnode.

  @return Return 0 if access is granted, otherwise an appropriate value for
  errno should be returned.
*/
typedef int mpo_mount_check_mount_t(
    kauth_cred_t cred,
    struct vnode *vp,
    struct label *vlabel,
    struct componentname *cnp,
    const char *vfc_name
);

请注意,这是一个不支持的 KPI,所以苹果说它可能会在未来的版本中消失或中断。实际上,策略回调函数签名在主要OS版本之间经常发生变化,因此您可能需要在运行时检查OS版本,并对不同版本使用不同的函数。您还需要了解苹果发布的任何betas,看看它们是否破坏了您的代码。

有了这些之后,下面是您实际使用它的方式:

  • 您需要链接到MAC框架KPI,因此将com.apple.kpi.dsep添加到kext的OSBundleLibraries字典中。(它使用达尔文版本控制,所以使用与其他com.apple.kpi.* bundle相同的版本)
  • #include 在您的代码中(它已经在Kernel.framework中提供)
  • 创建一个全局变量,或者在启动时分配一些内存来保存struct mac_policy_ops,并初始化您感兴趣的任何函数指针字段,例如mpo_mount_check_mount
  • 当您的kext启动时,使用mac_policy_register()注册您的策略并保存它返回的句柄。您需要使用mac_policy_conf结构来配置您的策略,其中您将mpc_ops设置为指向您的策略结构,将mpc_loadtime_flags设置为MPC_LOADTIME_FLAG_UNLOADOK,将mpc_name设置为您的kext的反向DNS标识符,将mpc_fullname设置为一个人类可读的字符串,并将其设置为零初始化其他所有内容。
  • 您将立即开始接收对回调的调用,可能同时来自多个线程和进程,因此请确保您的回调线程安全。
  • 在卸载之前,您的kext需要使用mac_policy_unregister()和从mac_policy_register()收到的句柄取消注册。

更多的信息可以找到在头文件中

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27702967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档