问题标签 [driverkit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
78 浏览

objective-c - DriverKit 在安装程序安装激活后消失了

这真是一个奇怪的情况。我的应用程序是与我的 driverkit 驱动程序通信的用户代理,根据我们的设计,这个应用程序(名为 myAgent.app)会激活我的驱动程序(名为 myDriverKit),因为 myAgent.app 启动然后与 myDriverKit 通信。在我们的测试中,我通过一个 plist 手动加载它,内容是:

一切运行良好(当我们尚未获得授权时,在 SIP 关闭下)。

然后我们打包它,myDriverKit在安装过程中激活后看起来运行良好,安装后脚本最后写道:

然而重启后,myDriverKit 不再工作了!当我过去寻找它时它看起来像生存systemextensionctl list,但是检查控制台,通过日志流挂钩它,我再也找不到它了。除非我手动执行systemextensionctl reset并重新启动 myAgent.app 以使其能够永久存在。

我做了几个测试:

  1. 不要自动launchctl load myAgent,而是在安装完成后自己手动加载->它可以工作。
  2. chmod 644 com.myCom.myAgent.plist然后重新构建包 - >失败
  3. 不要在安全中允许 myDriverKit 然后在重新启动后允许它 -> 工作
  4. /usr/bin/sudo -u $USER /bin/launchctl load -S Aqua /Library/LaunchAgents/com.kensington.trackballworks.plist改为在安装后脚本中使用->失败

似乎 myAgent.app 由安装脚本启动与我自己启动不同。可能的根本原因是什么?它可能在 post 脚本中还是在 myAgent.app 激活过程中?如果有任何回复,请欣赏 Orz。

0 投票
2 回答
2153 浏览

macos - macOS 系统扩展:使用配置文件进行授权和签名

我有一个用于 USB 设备驱动程序的 macOS 系统扩展。当我禁用 SIP 并使用我的代码签名身份(使用终端的“安全查找身份”从我的 Apple ID 生成)手动签名时,它可以工作 - 如此处所述:https ://github.com/knightsc/USBApp/issues/1

我可以激活和停用 dext,并在激活时将其与设备一起使用 - 我所做的和最终得到的示例如下:

将无代码 KEXT 迁移到无代码 DEXT

和这里:

激活无代码 DEXT 后获取 OSSystemExtensionErrorCodeSignatureInvalid

我获得了 Apple 的授权,并按照他们概述的步骤创建了一个配置文件,然后下载并安装了它。然后,我按照 Apple 授权电子邮件中提到的步骤手动签署应用程序:https ://help.apple.com/xcode/mac/current/#/dev1bf96f17e

我重建了我的应用程序并停用了我的驱动程序的所有现有实例。当我尝试激活新驱动程序时,激活请求失败并出现权利错误:“Error Domain=OSSystemExtensionErrorDomain Code=8”,我知道这是权利/签名问题的指示。

  • 使用 Apple 的配置文件签署我的应用程序和驱动程序的正确方法是什么?

  • 我需要更新我的权利文件吗?这是我现有的文件:

应用程序

右旋

任何帮助,将不胜感激。

更新:

应用程序的 App ID 具有系统扩展能力,但没有额外的 DriverKit 能力。

dext 的 App ID 具有额外的 DriverKit 功能。

该应用程序的配置文件具有

Dext 的配置文件有

更新 2:

这是我生成配置文件的过程:

  1. 注册一个新的配置文件 - 我在最底部的“分发”下选择“开发人员 ID”。这也是我生成的证书的用途。

  2. 生成配置文件 - 配置文件类型“Mac”,我选择一个 App ID。

  3. 选择证书 - 选择与分发模式兼容的证书。

  4. 附加权利 - 选择权利“Mac Dev ID 配置文件/Mac Direct Dist 配置文件的 DriverKit 和系统扩展模板”,这会导致“扩展权利”显示为“com.apple.developer.driverkit”设置为“true”

  5. 审查、命名和生成。- 供应配置文件名称 - 选择一个名称并生成,然后下载并安装。

更新 3:

我提交了一个支持请求,最后得到了回复“我们已联系 DriverKit 权利筛选器以更新您的权利模板以包含 USB 传输权利”希望这是进展!

0 投票
1 回答
310 浏览

macos - 如何以编程方式卸载安装 DriverKit 系统扩展的应用程序

我有一个在启动时安装 DriverKit 系统扩展的应用程序。

如果我随后将此应用程序拖到 Bin 中,/Applications则会提示我该应用程序还管理系统扩展,并且系统扩展也将被删除。

我想要一个卸载程序来删除该应用程序。我尝试使用 删除卸载程序中的应用程序rm -rf,但系统扩展名未删除。

我还尝试了trash终端实用程序(可以安装brew install trash)来检查是否可以从卸载程序中使用类似的东西,但没有运气。

有没有办法以编程方式删除应用程序以及应用程序安装的系统扩展。

0 投票
0 回答
72 浏览

macos - DriverKit - 访问 SuspendDevice() 等效的集线器

我为 USB 设备编写了一个 DriverKit,它似乎运行良好。它是来自现有 KExt 的端口。

在 KExt 中,我可以在 IOUsbDevice 上调用 SuspendDevice(true),它会告诉集线器挂起设备所连接的端口。

我在 DriverKit 中找不到方法。我错过了什么?我查看了 USBDriverKit 和 DriverKit 中的标题(尤其是 IOUSBHostDevice.iig)。

0 投票
2 回答
590 浏览

macos - How to map memory in DriverKit using IOMemoryDescriptor::CreateMapping?

I am trying to learn more about DriverKit and memory management, and I read this question:

How to allocate memory in a DriverKit system extension and map it to another process?

And I would like to understand how to use IOMemoryDescriptor::CreateMapping.

I wrote a little app to test this where I do (very simplified code):

In my Kext user client class, I was doing (I am simplifying):

This is what I don't know how to reproduce in a DExt and where I think I really don't understand the basic of CreateMapping.

Or is what I used to do not possible?

In my driver, this is where I don't know how to use CreateMapping and IOMemoryMap so this buffer can be mapped to a memory location and updated with different values.

I can create an IOBufferMemoryDescriptor but how do I tie it to the buffer from my application? I also don't understand the various options for CreateMapping.

Please note that in another test app I have successfully used IOConnectMapMemory64()/CopyClientMemoryForType() but I would like to learn specifically about CreateMapping().

(I hope it is alright I edited this question a lot... still new to StackOverflow)

0 投票
1 回答
92 浏览

macos - ioreg 列出多个 dext

我使用 DriverKit 和 USBDriverKit 编写了一个似乎运行良好的系统扩展(在开发人员模式下运行,SIP 关闭,......仍在等待权利)。

当我插入我的 USB 设备并在终端中输入时,ioreg | grep com.myinc.mydriver我看到一个条目:

+-o IOUserServer(com.myinc.mydriver ... registered, matched, active, busy 0 (0ms), retain 13

我拔下设备并做另一个ioreg,我得到相同但保留 9。

如果我插入我的设备,那么另一个ioreg现在显示 2 个条目(前一个和一个新条目)。

这是正常的吗?为什么上一个还在活动?

在我的 dext 中,我检查了我的 Stop 和 free 函数是否被调用,我想不出我错过了什么。

有人可以向我解释一下或指出我可能忘记做什么吗?保留 9 是否与我在代码中所做的事情有关?

0 投票
1 回答
69 浏览

driverkit - IOBufferMemoryDe​​scriptor 是否应该被释放?

我正在查看IOBufferMemoryDescriptor. 它说“......除非另有说明,否则您还负责释放您分配的缓冲区。” .

IOBufferMemoryDescriptor::free也存在。我的问题是:我应该使用freerelease(或两者)进行清理吗?

0 投票
0 回答
139 浏览

macos - 使用带有新 VID/PID 的内置 dext 驱动程序?

苹果开发者文档说:

如果您的硬件完全使用基于标准的协议进行通信,您可以提供一个与您的硬件匹配的驱动程序到一个内置系统驱动程序。

如果 macOS 本身将驱动程序实现为 dext,这可能吗?

特别是,我有兴趣在我的应用程序中为具有自定义产品 ID 的 FTDI 设备提供支持。我了解 macOS 将 FTDI 驱动程序实现为 dext (/System/Library/DriverExtensions/com.apple.DriverKit-AppleUSBFTDI.dext)。

0 投票
1 回答
164 浏览

macos - 使用 com.apple.developer.driverkit.userclient-access 配置配置文件应该如何?

我们请求获得使用 bundle id 访问具有 bundle id的com.apple.developer.driverkit.userclient-accessDriverkit 驱动程序的权利的请求已得到处理,但我们不确定我们是否获得了正确的权利。当我们为应用程序生成一个新的配置文件并检查它时,配置文件中的权利会说:com.example.drivercom.example.appsecurity cms -D -i

读到这里,看起来com.apple.developer.driverkit.userclient-access键值应该是一个数组而不是一个布尔值(这里的注释表明它com.apple.developer.driverkit.userclient-access可以是一个布尔值,但只有当权利是用于与另一个 dext 通信的 dext 时)

配置文件中的上述权利是否正确?如果没有,权利应该如何?如果有人可以在配置文件中发布可以与 driverkit 驱动程序通信的应用程序的权利,那将非常有帮助。

0 投票
1 回答
66 浏览

macos - DriverKit 中可以将哪些选项传递给 IOService::Terminate

virtual kern_return_t IOService::Terminate(uint64_t options)说你可以传递一个带有选项的参数。我想知道有什么不同的选择?文档没有说什么。