如何手动将所有插入式USB设备连接到MacBook
我的问题是我想手动处理USB设备插入时的处理方式。我不想让操作系统对插入的USB设备做任何事情,只想在它们插入时通知我它们的类型和ID。从那里,我可以选择合适的驱动程序来应用它,或者用自定义代码手动处理它 我读过MacOS是如何处理USB的,上面说: 如果你想让你的驱动被选中,你所需要做的就是为你的驱动添加键值对,这样你的驱动就会得到很高的分数。通常只需输入供应商id/型号的密钥就足够了。但是,我认为您可以覆盖匹配方法(设备驱动程序是用一组受限的C++编写的)来给您的驱动程序一个非常高的分数 我还发现了以下3个库,用于获取有关USB驱动器中的内容的通知:如何手动将所有插入式USB设备连接到MacBook,c,swift,macos,usb,C,Swift,Macos,Usb,我的问题是我想手动处理USB设备插入时的处理方式。我不想让操作系统对插入的USB设备做任何事情,只想在它们插入时通知我它们的类型和ID。从那里,我可以选择合适的驱动程序来应用它,或者用自定义代码手动处理它 我读过MacOS是如何处理USB的,上面说: 如果你想让你的驱动被选中,你所需要做的就是为你的驱动添加键值对,这样你的驱动就会得到很高的分数。通常只需输入供应商id/型号的密钥就足够了。但是,我认为您可以覆盖匹配方法(设备驱动程序是用一组受限的C++编写的)来给您的驱动程序一个非常高的分数 我
var usb = require('usb')
usb.getDeviceList()
但我想,在操作系统已经选择并应用了默认驱动程序之后,这将解决插入式设备的问题。我想这样做:
usb.blockDefaultOSDeviceHandler()
usb.on('device:plugged_in', function(data){
if (data.type == 'keyboard') {
if (data.modelNumber == '123') {
// allow
usb.applyKeyboardDriver('abc', data.modelNumber)
usb.on('keyboard:event', logKeyboardEvent)
} else {
throw new Error('Unrecognized device')
}
}
})
我希望库能够中断操作系统的所有默认行为,这样我就可以自己处理插入USB设备时应该做的事情。原因之一是USB设备可能是一个键盘,它会自动开始输入一些键。我想知道这是一个键盘,需要一个密码和一个我预先批准的特定驱动程序。诸如此类
我想在操作系统应用其默认处理规则之前访问任何新插入的USB设备。然后能够编写代码,手动处理每个插入设备的操作
如果只有在C中才有可能,那么知道如何在C中实现这一点将比node.js更好
probe
函数,让它返回最高分数,以便覆盖所有其他驱动程序,并像正常一样实现驱动程序。是一些关于驱动程序选择和实例化过程的有用文档
在使用设备或任何服务提供商之前,必须找到其驱动程序并将其加载到内核中。I/O工具包定义了一个灵活的三阶段匹配过程,将候选驱动程序池缩小到一个或多个驱动程序。最终候选人(如果有多个候选人,则为m
然后加载ost(一个)并给予第一次机会来管理设备或服务提供商
每个被视为可加载内核扩展(KEXT)的设备驱动程序必须定义一个或多个个性,以指定它可以支持的设备类型
因为一个驱动程序可以包含多个匹配字典,每个字典为驱动程序定义不同的个性,所以可以为不同的设备加载相同的驱动程序代码。出于竞争的目的,I/O工具包将每个个性都视为一个驱动程序。如果在任何单一个性中,该系列所需的所有属性都匹配,则会加载驱动程序代码并为该设备提供运行机会
人格的一个共同特征是探索分数。探针分数是一个整数,反映驱动程序是否适合驱动特定设备。驾驶员的个性中可能有一个初始探针分数值,并且可以实现一个探针功能,该功能允许驾驶员根据其是否适合驾驶设备来修改该默认值。与其他匹配值一样,探测分数特定于每个族。这是因为,一旦匹配过程超过了班级匹配阶段,只有来自同一个家庭的人物才能参与竞争。有关探测分数和驱动程序在探测功能中所做操作的更多信息,请参阅设备探测
在启动时以及添加或删除设备时,每个检测到的设备(或其他服务提供商)都会执行驱动程序匹配过程。该过程在设备或服务的/System/Library/Extensions中动态定位最合适的驱动程序
如架构概述一章中的驱动程序匹配所述,当总线控制器驱动程序扫描其总线并检测到连接到总线的新设备时,将触发匹配过程。对于每个检测到的设备,控制器驱动程序都会创建一个nub。然后,I/O工具包启动匹配过程,并从设备获取用于匹配的值(例如,检查PCI寄存器)。为nub找到合适的驱动程序后,将注册并加载该驱动程序。该驱动程序可以创建自己的nub(可能通过从其家族继承的行为),从而启动匹配过程以找到合适的驱动程序
匹配过程如下所示: