问题标签 [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.

0 投票
0 回答
66 浏览

macos - 在 ACM DEXT(IOUserUSBSerial) 的情况下如何调用 handleInterruptPacket 覆盖方法?

在 ACM Dext 中,handleInterruptPacket覆盖方法没有被系统调用。请让我知道有什么遗漏。

iig 文件:

cpp文件:

但是如果发送到中断 EP 的 AsyncIO 请求能够得到响应 AsyncIO 完成(CompleteAsyncIO)。请查看如何访问 CompleteAsyncIO 中的 IOMemoryBufferDescriptor,它是在中断 EP 上通过 AsyncIO 发送的

0 投票
1 回答
114 浏览

ipc - macOS 上带有系统扩展的 IPC

我需要在系统扩展和应用程序之间通信数据/消息(这不是系统扩展的容器应用程序)。

推荐哪种 IPC 机制?套接字通信是否同样适用?

0 投票
0 回答
146 浏览

macos - MacOS 网络扩展相当于内核扩展?

随着 Big Sur 的发布 - 网络内核扩展现在正式无法访问。但是,我在新的网络扩展 API 中找不到我需要的等效功能。

在我的 NKE(网络内核扩展)中 - 我能够通过挂钩套接字绑定和/或重写该应用程序的传出数据包的源 IP 来控制特定应用程序中数据包的路由。这样做我可以控制这些数据包为该应用程序通过哪个接口(所谓的拆分隧道)。

我看不到如何用新的 API 做类似的事情。新的 API 是否为此用例提供?可能吗?

0 投票
2 回答
856 浏览

macos - 有没有办法在不加入 Apple 开发者计划的情况下将网络扩展功能添加到 macOS 应用程序?

我想构建一个过滤特定网络请求的 macOS 应用程序,因此我需要添加 NetworkExtensions 功能。但在添加 NetworkExtensions 功能后,我收到以下消息:

上述消息出处的图片:https ://i.stack.imgur.com/H46gE.png

来自Apple 关于“为您的应用添加功能”的文档

该平台以及您是否是 Apple Developer Program 的成员,可能会限制您的应用程序可用的功能

该文档没有明确说明哪些功能需要成为 Apple Developer Program 的一部分。我也不明白为什么我需要成为 Apple Developer Program 的一部分才能在我自己的计算机上编写软件。请注意,至少据我所知,NetworkExtensions 功能不依赖于 Apple 的任何服务(与 HealthKit 或 Game Center 不同)。

那么有没有办法在不加入 Apple Developer Program 的情况下为 macOS 应用程序添加网络扩展功能?

0 投票
0 回答
55 浏览

driverkit - 如何从 DriverKit 驱动程序保存配置

我需要从 DriverKit 驱动程序中保存一些配置。我正在阅读如何在会话之间保存 kext 配置,在这种情况下,似乎首选的方法是从用户登陆应用程序中保存配置。由于 DriverKit 驱动程序位于用户领域,是否有更简单的方法可以做到这一点,或者首选解决方案与 kexts 相同吗?

最好将配置保存在某个持久的位置,即使安装 Dext 的应用程序已从系统中删除,这样在卸载应用程序然后重新安装时也能够保留配置。

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 是否与我在代码中所做的事情有关?