不知道为什么我的 OS X kext 具有较低的探测分数被匹配
Don't know why my OS X kext with a lower probe score is being matched
我正在尝试有选择地筛选和禁用某些 USB 设备。为此,我编写了一个 IOUSBInterface
驱动程序,它为 idProduct
、idVendor
和 bcdDevice
指定了通配符。任何时候我不想要禁用给定的设备,我将probeScore
设置为0和return。
probeScore
方法几乎适用于所有情况,我可以看到我的驱动程序在 system.log
中依次考虑每个 USB 设备。但是在蓝牙 USB 主机控制器的情况下,尽管我的探测分数为 0,内核仍将我的驱动程序附加到它。相比之下,如果我的驱动程序不存在,蓝牙 USB 主机控制器匹配探测分数为 90,000。
的确,我的驱动程序将OSBundleRequired
指定为Root
,但蓝牙USB主机控制器将OSBundleRequired
指定为Safe Boot
,这似乎将它们放在同样的立足点。另一方面,我遇到了与其他人相同的 Yosemite 蓝牙问题,并且我的蓝牙鼠标在我登录后才响应,这表明蓝牙 USB 主机控制器可能在启动时间后才会加载。
完全重写了答案,因为我误解了问题
"Note that you should never add your own IOProbeScore property to a USB driver's property list."
这可能就是您对探测分数不太满意的原因。 (请注意,以上建议仅适用于 USB 设备;忽略 Thunderbolt 等)
如果修改你的个性匹配字典以不匹配有问题的设备是不切实际的(听起来你想在运行时决定,所以这是一个很好的理由)然后覆盖你的驱动程序的 probe()
方法和有选择地 return this
或 NULL
取决于您是否希望您的(拦截器)驱动程序声明该设备。从 probe()
返回 NULL
应该总是有效的——如果它造成了问题,你的代码中很可能某处有错误。
我正在尝试有选择地筛选和禁用某些 USB 设备。为此,我编写了一个 IOUSBInterface
驱动程序,它为 idProduct
、idVendor
和 bcdDevice
指定了通配符。任何时候我不想要禁用给定的设备,我将probeScore
设置为0和return。
probeScore
方法几乎适用于所有情况,我可以看到我的驱动程序在 system.log
中依次考虑每个 USB 设备。但是在蓝牙 USB 主机控制器的情况下,尽管我的探测分数为 0,内核仍将我的驱动程序附加到它。相比之下,如果我的驱动程序不存在,蓝牙 USB 主机控制器匹配探测分数为 90,000。
的确,我的驱动程序将OSBundleRequired
指定为Root
,但蓝牙USB主机控制器将OSBundleRequired
指定为Safe Boot
,这似乎将它们放在同样的立足点。另一方面,我遇到了与其他人相同的 Yosemite 蓝牙问题,并且我的蓝牙鼠标在我登录后才响应,这表明蓝牙 USB 主机控制器可能在启动时间后才会加载。
完全重写了答案,因为我误解了问题
"Note that you should never add your own IOProbeScore property to a USB driver's property list."
这可能就是您对探测分数不太满意的原因。 (请注意,以上建议仅适用于 USB 设备;忽略 Thunderbolt 等)
如果修改你的个性匹配字典以不匹配有问题的设备是不切实际的(听起来你想在运行时决定,所以这是一个很好的理由)然后覆盖你的驱动程序的 probe()
方法和有选择地 return this
或 NULL
取决于您是否希望您的(拦截器)驱动程序声明该设备。从 probe()
返回 NULL
应该总是有效的——如果它造成了问题,你的代码中很可能某处有错误。