阅读:2085回复:3
这种有“意思”的usb复合设备,如何查询。。。。
如上图设备:
见过吧,,这种特殊的usb设备在一个ROOT HUB下的的Port中挂了三个虚拟设备:一个光驱,二个USB磁盘分区(与本地硬盘分区不同和Usb协议和scsi usb mass storage相关),,, 实际上只是一个u口下的usb设备,那三个设备是模拟出来的(SCSI命令,还不大懂),并不是真实的一个光驱和二个磁盘分区。。。 找了相关资料,看了usbview,做不到这一点,它只能枚举出port 上Usb设备的vid,pid,序列号等,但是在往下的光驱设备,和二个Usb磁盘分区,就列举不出来,, 对usb 协议规范和scsi协议规范庞大的恐怖,,, 我找出一个方法: 通过类此usbview方式读取usb的vid,pid,序列号,这三个参数,根据注册表信息枚举出0,1,2.等Index,能区分出去,一个port 下的usb 设备的挂的这三个盘。如果找盘符,,需要用相关对应的key value : ParentIdPrefix 去索引MountedDevices下的驱动盘符对应的symbol,就可以找到驱动盘符了, usb view中用的Ioctl 都是与usb驱动交互,,, 我觉得这种方法不大可靠。。。 第二种: 听有人说用scsi ioctl IOCTL_SCSI_GET_INQUIRY_DATA等命令好像能区分出来,,, 对scsi命令还不熟悉,,不知道怎么inquiry data ,来查询一个U口下的模拟多个复合设备。。。 有作过的兄弟,给个参考,谢谢。。。 谢谢分享。。。 |
|
沙发#
发布于:2007-09-25 21:41
不懂,等高人来解答,顺便学习。
|
|
板凳#
发布于:2007-09-26 16:30
问题暂时用一种方法搞定了。。
确定usb 设备的vid,pid,序列号。 然后根据window 产生的&0,&1,&2区分复合设备。。。 属于scsi的就是Lun0,lun1.lun2.。 可惜我不熟悉。。解决问题先说,以后在鼓捣。。。 |
|
地板#
发布于:2007-09-28 10:26
这个是多lun设备,就是收到inquiry的时候,根据Lun的数字返回不同的inquiry data,来模拟不同的设备。接受到其他命令的时候也根据Lun数值的不同,来执行不同的操作。
|
|
|