qiweixue
驱动小牛
驱动小牛
  • 注册日期2004-07-21
  • 最后登录2011-12-19
  • 粉丝0
  • 关注0
  • 积分1006分
  • 威望274点
  • 贡献值0点
  • 好评度268点
  • 原创分1分
  • 专家分0分
阅读:2068回复:3

这种有“意思”的usb复合设备,如何查询。。。。

楼主#
更多 发布于:2007-09-25 21:28
如上图设备:

见过吧,,这种特殊的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口下的模拟多个复合设备。。。

有作过的兄弟,给个参考,谢谢。。。


谢谢分享。。。
lyyebreeze
驱动牛犊
驱动牛犊
  • 注册日期2005-08-08
  • 最后登录2009-02-24
  • 粉丝0
  • 关注0
  • 积分131分
  • 威望24点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-25 21:41
不懂,等高人来解答,顺便学习。
qiweixue
驱动小牛
驱动小牛
  • 注册日期2004-07-21
  • 最后登录2011-12-19
  • 粉丝0
  • 关注0
  • 积分1006分
  • 威望274点
  • 贡献值0点
  • 好评度268点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-09-26 16:30
问题暂时用一种方法搞定了。。
确定usb 设备的vid,pid,序列号。
然后根据window 产生的&0,&1,&2区分复合设备。。。
属于scsi的就是Lun0,lun1.lun2.。
可惜我不熟悉。。解决问题先说,以后在鼓捣。。。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-09-28 10:26
这个是多lun设备,就是收到inquiry的时候,根据Lun的数字返回不同的inquiry data,来模拟不同的设备。接受到其他命令的时候也根据Lun数值的不同,来执行不同的操作。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部