不知道为什么我的OS X kext与较低的探测分数匹配

时间:2015-09-30 22:46:26

标签: macos bluetooth iokit kernel-extension

我正在尝试有选择地屏蔽和禁用某些USB设备。为此,我编写了一个IOUSBInterface驱动程序,为idProductidVendorbcdDevice指定通配符。每当我想要禁用给定设备时,我将probeScore设置为0并返回。

probeScore方法几乎适用于所有情况,我可以看到我的驱动程序依次在system.log中考虑每个USB设备。但是在蓝牙USB主机控制器的情况下,内核将我的驱动程序连接到它,尽管我的探测分数为0.相比之下,如果我的驱动程序不存在,蓝牙USB主机控制器匹配探测分数为90,000。

我的驱动程序确实将OSBundleRequired指定为Root,但蓝牙USB主机控制器将OSBundleRequired指定为Safe Boot,这似乎将它们放在同一个立足点。另一方面,我有与其他人相同的Yosemite蓝牙问题,我的蓝牙鼠标直到我登录后才响应,这表明蓝牙USB主机控制器可能在启动之后才被加载。

1 个答案:

答案 0 :(得分:1)

完全重写了答案,因为我误解了这个问题

首先,from the horse's mouth

“请注意,您永远不应将自己的IOProbeScore属性添加到USB驱动程序的属性列表中。”

这可能就是为什么你对探测得分没有太大的喜悦。 (请注意,上述建议仅适用于USB设备;无视Thunderbolt等。)

如果修改你的个性匹配字典与所讨论的设备不匹配是不实际的(听起来你想在运行时决定,这是一个很好的理由)然后覆盖你的驱动程序的probe()方法并选择性地返回thisNULL取决于您是否希望您的(拦截器)驱动程序声明设备。从NULL返回probe()应始终有效 - 如果它造成问题,您的代码中很可能会出现错误。