PCIDriverKit 权利检查失败将 KEXT 迁移到 DEXT

如何解决PCIDriverKit 权利检查失败将 KEXT 迁移到 DEXT

kernel: DK: MyDriver-0x100000f45: provider entitlements check failed
kernel: DK: IOUserServer(com.MyDriver-0x100000f45)::exit(Entitlements check failed)
kernel: (com.MyDriver.dext) Kernel requested exit (Entitlements check failed)

我正在尝试使用 PCIDriverKit 创建驱动程序。找不到任何合理的示例代码。

我的问题是我正在尝试访问所有设备,即使我已将它们的掩码正确放入 Info.plist (0x12345678&0x000000000)com.apple.developer.driverkit = TRUEcom.apple.developer.driverkit.transport.pci 权利。

对于大多数设备,我在 macOS 日志中收到上述错误。在 A KEXT 中,我之前使用的同一个掩码效果很好。

当然禁用SIP,开启系统扩展开发者模式。

我目前正在 XCode 中使用“签名以在本地运行”选项,因为这是一个开发阶段。

如何获得 DEXT 以打开 Mac 上的所有 PCI 设备?

编辑: 根据 codesign -d --entitlements -

,这些是 DEXT 的权利
▒▒qq<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>com.apple.developer.driverkit</key>
        <true/>
        <key>com.apple.developer.driverkit.transport.pci</key>
        <array>
                <dict>
                        <key>IOPCIPrimaryMatch</key>
                        <string>0x12345678&amp;0x00000000</string>
                </dict>
        </array>
        <key>com.apple.security.app-sandbox</key>
        <true/>
        <key>com.apple.security.get-task-allow</key>
        <true/>
</dict>
</plist>

amfid 日志:

amfid: [com.apple.MobileFileIntegrity:amfid] Basic requirement validation failed,error: (null)
amfid: /Library/SystemExtensions/{SOME_GUID}/com.MyDriver.dext/com.MyDriver signature not valid: -67050

解决方法

对于为什么在您的情况下出现问题,我没有 100% 的答案。要在 未修改 系统上加载 dex,在对 dex 进行代码设计时,您肯定需要以下内容:

  • 使用“Developer ID Application”证书身份签名并进行公证,或使用“Apple Developer”证书签名
  • 嵌入式代码签名权利,包括通用 DriverKit 权利、任何特定于系列的权利以及与用户客户端访问相关的权利(如有必要)。
  • 来自 Apple 的配置文件匹配:
    1. 您在 dex 中嵌入的代码签名权利。
    2. 您用于对 dex 进行签名的代码签名身份的类型和特定实例。
    3. dext 的应用程序和捆绑 ID。
    4. 如果使用 Apple 开发人员签名身份,则为您将在其上测试 dex 的 Mac 的硬件 ID。

对于本地测试,您可以尝试以下方法来临时解决代码签名问题:

  • 禁用系统完整性保护 (SIP)。出于 DriverKit 扩展的目的,这会禁用一些代码签名检查。
  • 禁用特定于 DriverKit 的权利检查。这将关闭检查许多特定于家庭的权利。要禁用检查,请在 0x8000 内核引导参数中设置标志 dk,这是一个位域。请注意,除非您设置标志 0x1,否则 DriverKit 将被完全禁用。因此,请使用 dk=0x8001 禁用 DriverKit 权利检查。
  • 禁用 AMFI 检查。如果您尝试声明需要在配置文件中启用的权利,AMFI 通常会终止您的进程。您可以使用 amfi_get_out_of_my_way=1 内核引导参数禁用 AMFI。

显然,您对配置文件的控制有限,因为其中的权利必须得到 Apple 的批准。 (因此,如果您打算公开发布您的 dext,我通常建议您尝试在开始对 dex 进行全面开发之前尝试确定您可能需要哪些权利,并请求它们来自 Apple。这个过程可能需要几个月的时间。) 因此,当您没有这些配置文件时,了解所需的解决方法的确切最小组合会很有趣,但我没有详尽无遗对此进行了测试。我意识到这对于在等待 Apple 授予缺失的权利的同时让您的 dext 尽可能接近发货并没有多大帮助。希望有一天我可以系统地探索和记录所有这些。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-