问题标签 [macos-system-extension]
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.
macos - 在 ACM DEXT(IOUserUSBSerial) 的情况下如何调用 handleInterruptPacket 覆盖方法?
在 ACM Dext 中,handleInterruptPacket覆盖方法没有被系统调用。请让我知道有什么遗漏。
iig 文件:
cpp文件:
但是如果发送到中断 EP 的 AsyncIO 请求能够得到响应 AsyncIO 完成(CompleteAsyncIO)。请查看如何访问 CompleteAsyncIO 中的 IOMemoryBufferDescriptor,它是在中断 EP 上通过 AsyncIO 发送的
ipc - macOS 上带有系统扩展的 IPC
我需要在系统扩展和应用程序之间通信数据/消息(这不是系统扩展的容器应用程序)。
推荐哪种 IPC 机制?套接字通信是否同样适用?
macos - MacOS 网络扩展相当于内核扩展?
随着 Big Sur 的发布 - 网络内核扩展现在正式无法访问。但是,我在新的网络扩展 API 中找不到我需要的等效功能。
在我的 NKE(网络内核扩展)中 - 我能够通过挂钩套接字绑定和/或重写该应用程序的传出数据包的源 IP 来控制特定应用程序中数据包的路由。这样做我可以控制这些数据包为该应用程序通过哪个接口(所谓的拆分隧道)。
我看不到如何用新的 API 做类似的事情。新的 API 是否为此用例提供?可能吗?
macos - 有没有办法在不加入 Apple 开发者计划的情况下将网络扩展功能添加到 macOS 应用程序?
我想构建一个过滤特定网络请求的 macOS 应用程序,因此我需要添加 NetworkExtensions 功能。但在添加 NetworkExtensions 功能后,我收到以下消息:
上述消息出处的图片:https ://i.stack.imgur.com/H46gE.png
该平台以及您是否是 Apple Developer Program 的成员,可能会限制您的应用程序可用的功能
该文档没有明确说明哪些功能需要成为 Apple Developer Program 的一部分。我也不明白为什么我需要成为 Apple Developer Program 的一部分才能在我自己的计算机上编写软件。请注意,至少据我所知,NetworkExtensions 功能不依赖于 Apple 的任何服务(与 HealthKit 或 Game Center 不同)。
那么有没有办法在不加入 Apple Developer Program 的情况下为 macOS 应用程序添加网络扩展功能?
driverkit - 如何从 DriverKit 驱动程序保存配置
我需要从 DriverKit 驱动程序中保存一些配置。我正在阅读如何在会话之间保存 kext 配置,在这种情况下,似乎首选的方法是从用户登陆应用程序中保存配置。由于 DriverKit 驱动程序位于用户领域,是否有更简单的方法可以做到这一点,或者首选解决方案与 kexts 相同吗?
最好将配置保存在某个持久的位置,即使安装 Dext 的应用程序已从系统中删除,这样在卸载应用程序然后重新安装时也能够保留配置。
macos - macOS 系统扩展:使用配置文件进行授权和签名
我有一个用于 USB 设备驱动程序的 macOS 系统扩展。当我禁用 SIP 并使用我的代码签名身份(使用终端的“安全查找身份”从我的 Apple ID 生成)手动签名时,它可以工作 - 如此处所述:https ://github.com/knightsc/USBApp/issues/1
我可以激活和停用 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:
这是我生成配置文件的过程:
注册一个新的配置文件 - 我在最底部的“分发”下选择“开发人员 ID”。这也是我生成的证书的用途。
生成配置文件 - 配置文件类型“Mac”,我选择一个 App ID。
选择证书 - 选择与分发模式兼容的证书。
附加权利 - 选择权利“Mac Dev ID 配置文件/Mac Direct Dist 配置文件的 DriverKit 和系统扩展模板”,这会导致“扩展权利”显示为“com.apple.developer.driverkit”设置为“true”
审查、命名和生成。- 供应配置文件名称 - 选择一个名称并生成,然后下载并安装。
更新 3:
我提交了一个支持请求,最后得到了回复“我们已联系 DriverKit 权利筛选器以更新您的权利模板以包含 USB 传输权利”希望这是进展!
macos - 如何以编程方式卸载安装 DriverKit 系统扩展的应用程序
我有一个在启动时安装 DriverKit 系统扩展的应用程序。
如果我随后将此应用程序拖到 Bin 中,/Applications
则会提示我该应用程序还管理系统扩展,并且系统扩展也将被删除。
我想要一个卸载程序来删除该应用程序。我尝试使用 删除卸载程序中的应用程序rm -rf
,但系统扩展名未删除。
我还尝试了trash
终端实用程序(可以安装brew install trash
)来检查是否可以从卸载程序中使用类似的东西,但没有运气。
有没有办法以编程方式删除应用程序以及应用程序安装的系统扩展。
macos - DriverKit - 访问 SuspendDevice() 等效的集线器
我为 USB 设备编写了一个 DriverKit,它似乎运行良好。它是来自现有 KExt 的端口。
在 KExt 中,我可以在 IOUsbDevice 上调用 SuspendDevice(true),它会告诉集线器挂起设备所连接的端口。
我在 DriverKit 中找不到方法。我错过了什么?我查看了 USBDriverKit 和 DriverKit 中的标题(尤其是 IOUSBHostDevice.iig)。
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)
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 是否与我在代码中所做的事情有关?