【问题标题】:Codeless kext, precluding HID manager for USB device takeover in OS X Big Sur无代码 kext,排除用于 OS X Big Sur 中 USB 设备接管的 HID 管理器
【发布时间】:2021-10-27 19:06:11
【问题描述】:

我已经对此进行了广泛的阅读,但我仍然感到困惑。 我正在尝试为需要直接读/写访问权限的 USB 设备调用 USBInterfaceOpen,但我得到了an exclusive access error

这里似乎有 2 个possibilities:1) 使用 HID 接口或 2) 执行 codeless kext 以在 OS X 的 HID 管理器之前到达设备。

所以可能性 1 不起作用,它不被识别为存储或网络设备,并且在 /dev 树中没有创建任何允许标准 POSIX 调用的内容。

而可能性 2 并不顺利。 Apple 似乎真的把事情锁定了,当我尝试加载我的无代码 kext(只有一个 .plist)时,我得到了“错误的代码签名”错误:

Authenticating extension failed: Bad code signature" UserInfo={NSLocalizedDescription=Authenticating extension failed: Kext com.blackrock.cerestim v1.0.0 in codeless kext bundle com.blackrock.cerestim at /private/var/db/KernelExtensionManagement/Staging/com.blackrock.cerestim.ohqHdy/Cerestim.kext:

我真的被困住了。有人有什么想法吗?

【问题讨论】:

    标签: macos usb hid iokit kernel-extension


    【解决方案1】:

    好的,这里发生了很多事情:

    1. 对于代码签名 kext,您需要:

      • 拥有 Developer ID 签名证书的特殊 kext 签名变体(由 Apple 授予特殊权限)
      • 使用此证书签署 kext
      • 使用altool(或notarytool)提交kext进行公证
    2. 从 Big Sur 开始,拥有无代码的 kext 不再足以防止 Apple 的驱动程序在早期启动期间捕获设备,因为由于分层的 kext“集合”,Apple 自己的 kext 现在在此早期阶段获得匹配的优先级(参见 @ 987654324@ 的手册页),其中第 3 方 kext 总是在“辅助”集合中结束,该集合在 Apple 的所有内容之后加载。

    3. 至少对于 HID 设备,您应该能够告诉 HID 子系统释放对设备的控制。您是否尝试过使用USBDeviceOpenSeize() 获得访问权限?

    如果以上内容不能回答您的问题,请为您的设备发布失败代码和ioreg -lirc IOUSBHostDevice 输出的子树。

    【讨论】:

    • 这个答案信息量很大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    相关资源
    最近更新 更多