问题标签 [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.
c++ - 如何创建 IOUSBHostPipe::CompleteAsyncIO 回调?
我正在编写一个 SystemExtension 来与 USB 设备通信。我最初的计划是创建一个Transfer
分配必要的IOMemoryDescriptor的类,然后传递我希望Transfer
该类与之通信的接口。我希望将AsyncIO完成后产生的回调发送给班级。如果我需要将多个读取排队,我可以创建更多此类的实例。在回调中,我将解包数据,然后提交另一个read。Transfer
completeCallback
我Transfer
用OSTypeAlloc(Transfer)
.
我面临的问题是创建 OSAction 失败并出现此堆栈跟踪:
如果我改为在连接 USB 设备时由系统实例化的类中定义、实现和创建回调(该类在 plist 中使用 key 指定IOUserClass
),则创建OSAction对象可以正常工作。
调用IOUSBHostInterface::Open
是IOUserClass
通过将指向 的指针IOUserClass
作为第一个参数传递给Open
. 这样做应该可以吗?或者是否要求该IOService
对象也是从AsyncIO
.
macos - 不在 USB DriverKit 的 Start 方法中调用
我正在编写一个 DriverKit dext 并且可以使用系统扩展框架激活它。我有 USB 的权利,即 com.apple.developer.driverkit设置为true com.apple.developer.driverkit.transport.usb已添加为字典但没有任何子值(它是空的)。
我期待在插入任何 USB 设备后被 dext 的 Start 方法调用,但我没有看到任何调用。
知道是否缺少任何步骤/配置吗?
macos - apple.developer.driverkit.transport.usb 的 idVendor
我正在阅读这篇内容丰富的帖子 如何设置“com.apple.developer.driverkit.transport.usb”权利?
我想问,我idVendor
从哪里得到这个?它的价值应该是多少?
c++ - 如何在 DriverKit 系统扩展中分配内存并将其映射到另一个进程?
我已在我的应用程序中分配内存并将其指针和大小传递给 IOConnectCallStructMethod
. 然后使用IOMemoryDescriptor::CreateMapping
我将此内存映射到 DriverKit 系统扩展进程,并且可以写入此映射的内存位置并从我的应用程序中读取数据。
我现在想对系统扩展中分配的内存做类似的事情,然后将其映射到使用系统扩展的应用程序。我想在系统扩展中创建一组内存缓冲区,然后从应用程序写入它,然后IOConnectCallScalarMethod
使用IOUSBHostPipe::AsyncIO
. 当CompleteAsyncIO
由于发送完成而出现回调时,我会通知应用程序现在可以将数据复制到发送的第一个缓冲区。这种机制可能可以使用IOConnectCallAsyncStructMethod
, 以及OSAction
在系统扩展中创建的对象来完成。我不明白的是如何将系统扩展中分配的内存映射到应用程序。
c++ - `new` 和 `delete` 可以在 DriverKit 驱动程序中使用吗?
DriverKit 提供IONewZero
和IOSafeDeleteNULL
. 那些不调用任何构造函数或析构函数。
假设我想在 ivars 结构中有一些课程。该类不需要继承自OSObject
nor IOService
。我应该如何构造这个对象?如果我将它作为ivars
结构中的成员,则不会调用我的类的构造函数。如果我在 ivars 结构中保留指向我的类的指针,我需要分配并调用类的构造函数。我可以使用new
/delete
吗?
swift - 如何杀死系统扩展或网络扩展?
所以我正在用 Swift 构建一个带有网络扩展的 macOS 应用程序。经过一些测试,扩展仍然作为系统中的一个进程。我可以停止,也可以终止应用程序,但我无法停止、终止或卸载网络扩展。网络扩展一次又一次地出现。
我重新启动了 macOS,但网络扩展仍然作为一个进程存在。如何从系统中完全删除它?
c++ - 如何访问 CompleteAsyncIO 中的 IOMemoryBufferDescriptor,它是通过 AsyncIO on Interrupt EP 发送的
我正在尝试使用 AsyncIO 为中断 EP 发送请求,对于 AsyncIO,我创建了 IOMemoryBufferDescriptor,一旦 IOMemoryBufferDescriptor,创建成功,我使用 GetAddressRange 并将地址存储在 dext 的 ivars 结构中。对于这个请求完成(CompleteAsyncIO)是使用action-> GetReference()调用的,我得到了ivars结构,我期待从USB设备接收到中断完成的数据,不幸的是我没有看到相关数据。在 Wireshark 中,我尝试调试接收到的数据是 16 个字节,而 CompleteAsyncIO 实际字节也是 16 个。
使用 IOMemoryBufferDescriptor 从设备接收中断数据的正确方法是什么?
为 CompleteAsyncIO 创建 OSAction
USB 中断 EP 的 IOMemoryBufferDescriptor 分配:
发送 AsyncIO 请求中断 EP
框架调用的 CompleteAsyncIO
如何使用我使用 AsyncIO 发送的 IOBufferMemoryDescriptor 获取从 USB 设备接收的实际数据以完成中断?我需要将地址映射到当前进程地址空间吗?
我看到带有USB过滤器的wireshark只有实际数据长度匹配。
Wireshark 日志 a1 20 00 00 01 00 02 00 03 00 00 00 00 00 00 00 (16 字节数据) "3029","32.105745","64.16.4","host","USB","40"," URB_INTERRUPT in (submitted)" "3030","32.169565","64.16.4","host","USB","56","URB_INTERRUPT in (完成)"
swift - 将参数从 App Delegate 传递到系统扩展,Mac OS
我正在创建一个系统扩展并将其捆绑在 Mac OS Catalina 上的 Mac 应用程序中。我已经成功构建了应用程序并请求我的应用程序委托 (Swift) 激活扩展。我的系统扩展可以成功运行。
我的问题是,我需要以某种方式将请求激活扩展的应用委托的附加参数传递给我的系统扩展的主要功能。具体来说,我正在尝试传递运行应用程序的用户的用户名。有没有办法将额外的参数从委托传递给扩展?
我无法从系统扩展中获取当前用户,因为扩展始终以 root 身份运行。所以获取当前用户将返回root。
来自应用委托的相关代码:
我的系统扩展的主要功能:
如果我能以某种方式接收传入的用户名argv
,那就太好了。我对其他解决方案持开放态度。底线是我需要以某种方式在两者之间传达这个用户名值。