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

Don't know why my OS X kext with a lower probe score is being matched

我正在尝试有选择地筛选和禁用某些 USB 设备。为此,我编写了一个 IOUSBInterface 驱动程序,它为 idProductidVendorbcdDevice 指定了通配符。任何时候我想要禁用给定的设备,我将probeScore设置为0和return。

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

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

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

首先,from the horse's mouth

"Note that you should never add your own IOProbeScore property to a USB driver's property list."

这可能就是您对探测分数不太满意的原因。 (请注意,以上建议仅适用于 USB 设备;忽略 Thunderbolt 等)

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