在 mac OS X 上挂载批准回调

2024-04-26

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

So,

  1. 还有其他方法可以获取安装批准回调或授权设备吗?
  2. 我如何在内核模式下处理它?

提前致谢。


在 kext 中,您可以通过以下方式获取文件系统挂载回调的授权回调mpo_mount_check_mountMAC (TrustedBSD) 策略框架中的回调。您可以决定安装是否应该继续进行。我怀疑您不会从以下位置获得有关登录用户的任何信息cred参数,因为 mount 系统调用可能是由以 root 身份运行的守护进程启动的。我不知道你是什么actually尝试这样做,因此这可能不是针对您的具体情况解决问题的最佳方法。

/**
  @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 X 版本之间经常发生变化,因此您可能需要在运行时检查 OS X 版本并针对不同版本使用不同的函数。您还需要及时了解 Apple 发布的所有测试版,看看它们是否会破坏您的代码。

抛开这些,下面是实际使用它的方法:

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

还可以找到很多信息在头文件中 http://www.opensource.apple.com/source/xnu/xnu-2782.1.97/security/mac_policy.h.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 mac OS X 上挂载批准回调 的相关文章

随机推荐