问题标签 [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 投票
1 回答
101 浏览

macos - DriverKit IOUSBHostInterface 的 CopyPipe 失败并出现 kIOReturnError (0xe00002bc)

为了我自己的启迪,我正在尝试使用 DriverKit 系统扩展从 USB 音频接口读取一些音频数据。

IOProviderClass的是IOUSBHostInterface。我可以成功Open()的接口,但CopyPipe()返回kIOReturnError0xe00002bc)。为什么我不能复制管道?

为了能够完全打开界面,我必须匹配,AppleUSBAudio所以我IOKitPersonalities明确匹配bConfigurationValue, bInterfaceNumber, idVendor,idProductbcdDevice键。此列表可能不是最少的。

ioreg我通常可以看到接口(有时只有我匹配的接口,尽管我认为这是一种退化的情况)。AppleUserUSBHostHIDDevice我在其他一些界面上看到了一个孩子。这可能是问题吗?通常,该设备既是 USBAudio 又是 HID 没有问题。我也试图不成功地匹配 HID。

0 投票
1 回答
98 浏览

macos - DriverKit 是否适用于自定义 USB 设备来控制麦克风音量(无流)?

我想寻求有关如何在 MacOS 上与自定义 USB HID 设备进行理想通信的指导。

用例 通过外部 USB HID 设备修改麦克风音量。

问题 我可以为此使用 DriverKit (HIDDriverKit) 还是需要使用 IOKit?我在这里读过一些关于音频限制的内容,但不确定究竟是什么不受支持。

DriverKit 不支持处理音频或通过蓝牙或 Wi-Fi 进行无线通信的 USB 设备。对于这些类型的设备,使用 IOKit 创建内核扩展。—来源

DriverKit 在我的情况下是否仍然有效,因为我不发送音频流而只控制音量?

非常感谢!干杯,汤姆

0 投票
2 回答
249 浏览

macos - macOS M1 上虚拟文件系统 (VFS) 内核扩展的替代方案

我们为 macOS 上的虚拟文件系统 (VFS)开发了内核扩展 (KEXT) ,以将我们的软件与 Adob​​e InDesign 或 Microsoft Word 等外部​​程序集成。我们的许多客户都在使用我们的软件和 KEXT。

因为看起来 KEXT 已被弃用,并且可能会在 macOS 的未来版本中完全删除,尤其是在基于 Apple Silicon 的计算机上。参见 Apple 在其 安全指南中的公告:

“这就是为什么强烈鼓励开发人员在 kext 支持从 macOS 中删除之前采用系统扩展,以用于未来使用 Apple 芯片的 Mac 计算机”

因此,我们目前正在研究可能的替代方案。

Apple 建议迁移到系统扩展而不是 KEXT。然而,我们发现唯一与 VFS 相关的 API 是实现一个基于NSFileProviderReplicatedExtension的文件提供程序

不幸的是,它NSFileProviderReplicatedExtension有几个缺陷:

  1. 文件可以在云端或下载。不能只下载/读取文件的一部分。这对我们来说是一个很大的性能问题,因为我们处理的是大图像(> 1GB)。我们集成的程序通常只读取图像的一部分,例如嵌入的预览。API 不提供访问文件的选定块(随机访问文件)的方法。
  2. 文件提供程序通过 了解文件系统内容enumerators。因此,必须首先枚举(列出)文件夹内的所有内容。否则无法访问。但是,我们无法枚举我们的 VFS。我们 VFS 的大部分内容都是完全动态的。它仅在客户端第一次访问时才存在。此类动态内容还包括动态参数,例如客户端的区域设置或将放置图像的框的大小。由于我们事先不知道这些参数,因此我们无法提前枚举 VFS 的内容。

这意味着,NSFileProviderReplicatedExtension在其当前状态下,它不能替代“真正的”VFS,因此我们不能将其用作当前 VFS KEXT 的替代品。

我的问题:

  1. Apple 是否也允许在(基于 Apple Silicon/M1 的)操作系统的未来版本中进行内核扩展?或者至少有一个明确的截止日期?
  2. 如果不是,Apple 官方建议替代基于 KEXT 的 VFS 解决方案是什么?
  3. NSFileProviderReplicatedExtension 的 API 是否会被改进以表现得像一个“真实”的文件系统,从而使上述缺陷不再是问题?

非常感谢您的任何回答或评论!

最好的祝福,

迈克尔

0 投票
2 回答
247 浏览

macos - 使用 macOS 网络扩展过滤到特定 IP 的传出 TCP 流量

我正在使用网络扩展来过滤到特定 IP 的传出 TCP 流量:

但是,我也会收到我不感兴趣的 IP 的回调:

此外,当我尝试拦截 TCP 流量和 UDP,在 NENetworkRule 构造函数中提供“.all”而不是“.TCP”时,我开始接收来自和发往许多不同 IP 的出站和入站流量。

我究竟做错了什么?谢谢。

0 投票
1 回答
192 浏览

c++ - DEXT 在 macOS 10.15.7 上崩溃

我在 macOS 11 上成功构建并运行了 Apple 的示例Communicateing Between a DriverKit Extension and a Client App,这意味着我可以安装 DEXT 并通过它的客户端控制它。虽然在 macOS 10.15.7 上,我可以构建它并安装 DEXT,但 DEXT 崩溃。

systemextensionsclt 的输出:

但是当操作系统尝试运行 DEXT 时,它本身显然会崩溃:

注意:相同构建的二进制文件在 macOS 11 上运行良好。

我在使用 Xcode 12.4 (12D4e) 的 macOS 11.4 (20F71) 和 10.15.7 (19H1217) 上。理想情况下,DEXT 也应该在 macOS 10.15 上运行。

这是 macOS 10.15.7 上 DriverKit.framework 中的错误,还是我以不正确的方式设置项目?

0 投票
0 回答
62 浏览

macos - macOS 启用降低透明度选项,停靠栏和菜单栏除外

我想在除停靠栏和菜单栏之外的 macOS 上启用降低透明度选项。有没有办法在 macOS big sur 中实现这一点?

0 投票
1 回答
39 浏览

macos - Codesign 未设置正确的权利

我的项目由主应用程序、端点安全扩展和 findersync 扩展组成。当我尝试在发布模式下构建它时,findersync 扩展是使用主应用程序的权利而不是它自己的权利构建的。我没有看到端点安全的这个问题。我正在使用“开发人员 ID 应用程序”签名身份进行签名。

当我查看构建日志时,我看到它--entitlement在代码符号中使用,并且作为参数传递的文件也具有正确的权利。当我尝试使用标志手动运行 codesign 命令时--entitlement,我仍然无法获得正确的权利。

系统扩展和 findersync 的协同设计方式有什么不同吗?为了获得正确的权利,我需要进行哪些更改?

0 投票
1 回答
39 浏览

macos - Mac Endpoint 安全性 - 防止用户删除钥匙串项目

我正在尝试端点安全系统扩展,以防止用户删除我的应用数据。我使用“ ES_EVENT_TYPE_AUTH_UNLINK”来阻止用户删除应用程序文件。

我试图弄清楚如何阻止用户删除钥匙串项目。

0 投票
0 回答
25 浏览

kernel-extension - 端点安全 - 阻止用户以写入模式打开文件

我尝试了 WWDC 中给出的示例应用程序。使用“ES_EVENT_TYPE_AUTH_OPEN”我可以停止使用 echo 写入文件。但是,如果我使用 vim 或文本编辑并编辑文件,它会保存更改。

我尝试了“ES_EVENT_TYPE_AUTHSIGNAL”、“ES_EVENT_TYPE_AUTH_UNLINK”、“ES_EVENT_TYPE_AUTH_TRUNCATE”,但没有运气。

0 投票
1 回答
44 浏览

macos - 从不同的用户进程调用时 IOPCIDevice 无效

我正在使用 Apple 的DriverKitUserClientSample代码作为基础,但我正在尝试使用PCIDriverKit. 在我的MyClass::Start方法中,我成功地从提供者那里获得,并IOPCIDevice调用它,获得正确的值。当我使用. 我将指向 this 的指针保存为结构中的成员。Open()GetBusDeviceFunction()MyClass::StartDriverKitSampleAppIOPCIDeviceMyClass::IVars

安装 DEXT 后,我想使用我正在编写的用户程序访问同一设备,该程序调用不同的方法MyClass::Foo。但是当我尝试运行相同的两个函数Open()和/或GetBusDeviceFunction()从我的方法运行时,MyClass::Foo我会遇到内核崩溃。使用 LLDB,我看到在访问对象时我得到了 GPF IOPCIDevice,即使我仍然可以MyClass::IVars毫无问题地访问结构的其他成员(整数、字符等)。

我究竟做错了什么?有什么提示吗?