如何将用户设置传递给驱动程序扩展 (MacOS)?
How to pass user setting to Driver Extension (MacOS)?
我正在编写一个驱动程序包扩展,其目标是阻止某些类别的 USB 设备,例如闪存驱动器。驱动程序应阻止(匹配到)相关设备 类 的任何设备,但列入白名单的设备除外(基于其供应商和产品 ID)。白名单可以由应用程序的用户动态设置。
问题是,如何将这些数据传递给驱动程序,如从文件或类似 Windows 注册表中读取的内容在 DriverKit 中不可用。棘手的部分是驱动程序需要白名单数据 before 设备匹配。
据我了解,通过从 Start() 方法返回错误并过早地从中返回,可以拒绝设备。我想到了在驱动程序 运行 此功能时发送数据,但是这是不可能的,因为在 Start 方法 returns.
之前,通过 IOUserClass 的通信不可用这是否可行?
- 据我所知,DriverKit 扩展无法通过初始
Start()
方法与用户 space 应用程序通信。正如您所说,IOUserClient
s 是用于用户 space 通信的机制,这些在服务启动和注册之前不可用。你可以让你的 driver 匹配IOResources
/IOUserResources
所以它总是被加载,但是每个匹配的服务都会启动你的 dext 的独立进程,我不知道有什么方法可以在这些实例之间直接通信。 如果我没理解错的话,您是在试图阻止 other drivers 获取设备。我认为您想到的解决方案不会帮助您解决这个问题。如果您 return 从Start()
成功, 您的 dext 将驱动设备。如果你return失败,没有driver为设备加载,因为匹配已经结束。所以其他 driver 永远不会有机会,不管设备是在你的 allow-list 还是 deny-list.- 它是 DriverKit 21(即 macOS Monterey)中的新功能,我还没有机会尝试它,但是有一个 API 用于读取文件,
OSMappedFile
。我想 DriverKit 沙箱会说明 dext 可以打开哪些文件,但这似乎是一个值得探索的途径,你是否可以通过这种方式打开配置文件。 - 请注意,其中的 none 将在早期启动期间为您提供帮助,如 your dext will never be considered for matching at that time. And you may not be able to get required entitlements from Apple to build a dext which matches USB device classes rather than specific product/vendor ID patterns. (Apologies for repeating myself,但其他用户可能会遇到此答案而没有意识到此问题。)