我正在尝试有选择地屏蔽和禁用某些USB设备。为此,我编写了一个IOUSBInterface
驱动程序,为idProduct
,idVendor
和bcdDevice
指定通配符。每当我不想要禁用给定设备时,我将probeScore
设置为0并返回。
probeScore
方法几乎适用于所有情况,我可以看到我的驱动程序依次在system.log
中考虑每个USB设备。但是在蓝牙USB主机控制器的情况下,内核将我的驱动程序连接到它,尽管我的探测分数为0.相比之下,如果我的驱动程序不存在,蓝牙USB主机控制器匹配探测分数为90,000。
我的驱动程序确实将OSBundleRequired
指定为Root
,但蓝牙USB主机控制器将OSBundleRequired
指定为Safe Boot
,这似乎将它们放在同一个立足点。另一方面,我有与其他人相同的Yosemite蓝牙问题,我的蓝牙鼠标直到我登录后才响应,这表明蓝牙USB主机控制器可能在启动之后才被加载。
答案 0 :(得分:1)
完全重写了答案,因为我误解了这个问题
“请注意,您永远不应将自己的IOProbeScore属性添加到USB驱动程序的属性列表中。”
这可能就是为什么你对探测得分没有太大的喜悦。 (请注意,上述建议仅适用于USB设备;无视Thunderbolt等。)
如果修改你的个性匹配字典与所讨论的设备不匹配是不实际的(听起来你想在运行时决定,这是一个很好的理由)然后覆盖你的驱动程序的probe()
方法并选择性地返回this
或NULL
取决于您是否希望您的(拦截器)驱动程序声明设备。从NULL
返回probe()
应始终有效 - 如果它造成问题,您的代码中很可能会出现错误。