问题标签 [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 回答
623 浏览

macos-catalina - 无法解析平台 macosx 的产品类型“com.apple.product-type.system-extension”(在目标 SimpleFirewallExtension 中)

我正在尝试 在 catalina beta 版本上从https://developer.apple.com/documentation/networkextension/filtering_network_traffic构建和运行 FirewallExtension 示例应用程序,但出现错误

无法为平台 macosx 解析产品类型“com.apple.product-type.system-extension”

使用 xcode 10.2 版知道这里遗漏了什么吗?这里需要一些特定的 xcode 版本吗?

0 投票
0 回答
224 浏览

macos - NEFilterProvider 记录网络活动

NEFilterProvider,或者更具体地说它的 2 个子类NEFilterDataProviderNEFilterPacketProvider,具有允许或拒绝网络活动的功能。但是,出于调试目的,我找不到任何登录活动的方法。

我知道文档是这样说的:

它在一个非常严格的沙箱中运行。沙盒通过阻止所有网络访问、IPC 和磁盘写入操作来防止过滤器数据提供程序扩展将网络内容移动到其地址空间之外。

但是在调试模式下有什么技巧可以记录这个吗?也许使用os_log或类似的东西?

0 投票
2 回答
1609 浏览

macos-catalina - 如何为 Mac OS catalina 编写驱动程序包扩展

我正在尝试为其中一个设备编写驱动程序套件扩展。我没有关于如何为 mac os Catalina 编写驱动程序包扩展的信息。我得到的唯一文档是

DriverKit 参考:https ://developer.apple.com/documentation/driverkit?language=objc

& WWDC 视频: https ://developer.apple.com/videos/play/wwdc2019/702/

是否有关于如何编写驱动程序工具包扩展和用于安装它的系统扩展的示例。提前致谢。

0 投票
0 回答
142 浏览

macos - 如何在转发数据之前使用网络系统扩展来操作数据

我有一个 macOS 产品,它使用网络内核扩展来获取网络数据并根据一些预定义的规则修改数据。

由于从 macOS 10.16 开始将不再支持 kexts,因此我必须移植我的解决方案以使用网络系统扩展。

我无法找出为此目的使用哪些 API。

我查看了内容过滤器下的 NEFilterPacketProvider,它可以为我提供数据包,并且基于我可以允许/拒绝/延迟的规则。但是是否有可能在允许之前执行一些计算并转发被操纵的数据?

NEFilterPacketHandler 以 const void 的形式提供 packetBytes,所以即使可以将 const 丢弃?此外,这里还有其他期望,例如 packetLength 依赖于这些字节保持不变。

0 投票
3 回答
1958 浏览

macos - 如何在 OSX catalina 中运行未签名的系统扩展?

如何在 OSX catalina 中运行未签名的系统扩展?

我正在尝试加载 Apple 提供的系统扩展 SimpleFirewall,以演示数据包过滤功能。

该项目编译,但我在运行期间收到此错误:

查了一下,意思是——

无效的代码签名或缺少权利

我禁用了 SIP,并关闭了 xcode 项目中的代码签名。我还能做些什么来运行它?我没有开发人员 ID.. 只是测试代码..

0 投票
1 回答
97 浏览

macos - 如何保护 Mac OS 系统扩展安全端点不被杀死

如何保护我的 macOS 系统扩展端点安全:

A.被用户(root用户)杀死

B. 由root用户卸载?

0 投票
1 回答
928 浏览

c++ - “NewUserClient”应该如何实现

我正在尝试与应用程序中的 dext 进行交互。我能够找到使用的服务,IOServiceOpen并且调用NewUserClient了我的 dext(我可以看到type传递的参数正在日志中输出)。在此之后,我有点失落。在这里阅读有关NewUserClient 的信息 ,我可以看到应该使用它Create来创建一个新的 Service 对象。

这里的讨论部分说字典中的键描述了新服务。propertiesKey

应该将此字典作为顶级条目放置在系统扩展的 plist 文件中,还是应该将字典与 key in 一起放置IOKitPersonalities

我可以将IOServiceDEXTEntitlements密钥保留为空值,以免对连接到系统扩展的应用程序的权利施加任何限制吗?

我的 plist 看起来像这样(MyUserClientProperties在两个地方有 key / dict)。

我是否需要SUPERDISPATCH作为最后一个参数传递给Create?

来自“OSX 和 iOS 内核编程”第 5 章第 81 页:

I/O Kit 设计的独创性在于用户客户端对象本身就是一个驱动程序对象:IOUserClient 类继承自 IOService,并且与任何其他 IOService 实例一样,每个用户客户端都有一个提供者类,对于用户客户端而言,它是应用程序正在控制的驱动程序的实例。

虽然上面可能只对 kext 正确(?)我会假设事情的工作方式与 dext 相同,

来自Create文档:使用 kIOUserClassKey 键指定您希望系统实例化的自定义 IOService 子类的名称。

为什么IOService需要实例化另一个类?这门课的目的是什么?是继承自我的类的提供者IOUserClient吗?如果是这样,我怎样才能使我的驱动程序实例(实现的那个NewUserClient)提供程序?

来自Create文档:使用kIOClassKey指定自定义IOUserClient子类的名称以返回给您的服务的客户端。

将创建并分配给 的第三个参数的类的类型是Create什么?如果是这样,那是我应该分配IOUserClient*指针的那个,它被传递给NewUserClient

无论我尝试什么,我总是得到一个断言,但我看不出是什么原因造成的。

0 投票
2 回答
950 浏览

c++ - kIOReturnNotPermitted 从 IOServiceOpen 连接到 SystemExtension IOService

我正在尝试创建到 SystemExtension IOService 的客户端连接。我可以看到我的IOUserClient子类已创建(init()并被Start(IOService*)调用),但返回代码来自IOServiceOpenreturns kIOReturnNotPermitted

我正在IOServiceOpen从创建激活请求的同一个应用程序中进行调用。

发出激活请求/调用的应用程序的权利IOServiceOpen

dext 的权利:

我的用户客户端:

LOG只是一个宏os_log(OS_LOG_DEFAULT, ...

NewUserClient执行:

连接系统扩展的代码:

编辑:

应用程序的Info.plist

dext的Info.plist:

0 投票
1 回答
1003 浏览

usb - 如何设置“com.apple.developer.driverkit.transport.usb”权限?

我不确定如何com.apple.developer.driverkit.transport.usb在我的 dext 权利文件中设置密钥。Info.plist 文件已经包含IOKitPersonalities字典,并且阅读com.apple.developer.driverkit.transport.usb字典看起来应该包含与IOKitPersonalities.

项目的权利文件与WWDC 视频中关于驱动程序套件的内容非常相似,将其设置为:

当我将其设置为 时<true/>,系统扩展启动。在看到应用程序的日志行之前,我确实看到了一些这样的行:

该权利是否应该仅反映IOKitPersonalities字典中的内容?

完全删除密钥后,我得到:

..所以我想钥匙一定在那里。

我正在查看与应用程序相关的日志行log stream --source | grep MyUserUSBInterfaceDriver

0 投票
1 回答
195 浏览

stl - 我可以在 DriverKit 驱动程序中使用 STL 吗?

例如,我可以std::vector在 macOS / XCode 的 DriverKit 驱动程序中使用吗?

DriverKit 有一些容器类,如https://developer.apple.com/documentation/driverkit/osarray?language=objcOSArray

如果我创建一个新的“DriverKit 驱动程序”项目并包含,<vector>那么我会遇到构建错误。这些错误来自包含<cstring>,错误是

No member named 'strcpy' in the global namespace

No member named 'strcat' in the global namespace