如何区分USB设备类型?

时间:2011-10-05 15:18:43

标签: c# .net operating-system usb

在阅读有关使用USB设备的this question之后,我想知道操作系统使用什么方法来区分USB设备类型?

例如,我可以插入一个USB鼠标,而计算机“只知道”它是一个鼠标。如果我插入我的1GB USB驱动器,它“只知道”它是1GB的可移动存储空间。

设备使用什么类型的代码来“宣布”它是什么类型的?或者操作系统是否正在轮询设备并获得一些标准化响应?

如何对设备进行编程以将自己标识为键盘?

3 个答案:

答案 0 :(得分:2)

为了构建一个可通过USB工作的设备,您几乎肯定必须阅读http://www.usb.org/developers/docs/提供的USB规范

关于您的具体问题,有各种标准USB变量的GET方法。它们存储在设备的固件中,并在需要时提供。例如,GET_DESCRIPTOR,GET_STATUS等是可以发送到设备的请求类型。

USB有自己的一套协议,完全可以完成任务,因此大多数设备制造商都会从某个第三方购买USB控制器芯片。

如果您只是对一起黑客攻击感兴趣,那么我认为规范就足以让您发送一些数据包了。

我能想到的唯一其他选择可能不适合您的项目;点击一个真正的键盘,让键盘完成所有复杂的地址分辨率和设备识别等,然后让你的设备将数据推送到线路上。

这是我之前在高中时为密码嗅探构建键盘黑盒时所管理的事情,黑盒存储的按键然后将它们回流到电线上,好像它是键盘一样。一旦它存储了几个密码,并且我检索了它,我必须将其插入连接到键盘,然后在设置它之前拔掉键盘以输出按键(打开一个方便的gedit窗口:P)否则键盘会中断传输有自己的数据。

答案 1 :(得分:1)

通过从设备的设备和接口描述符中读取设备的类来确定类型(或更确切地说,设备类)。您可能需要阅读this segment about USB device descriptors中的USB in a Nutshell了解相关信息。 (如果你有兴趣,我也建议阅读整篇文章)

答案 2 :(得分:0)

在“设备管理器”中,打开设备的属性,然后选择“详细信息”选项卡。各种值提供信息(或者更确切地说是从设备及其驱动程序的信息生成)。