取USB设备信息-2

这个思路,大家看看对不对  
用这个GUID:53f56307-b6bf-11d0-94f2-00a0c91efb8b  
首先  SetupDiGetClassDevs  
然后  SetupDiEnumDeviceInterfaces  
再  SetupDiGetDeviceInterfaceDetail可以得到一个设备路径,用这个设备路径可以CreateFile打开设备得到句柄,然后用这个句柄用DeviceIoControl函数得到Serial  number  
结构:IOCTL_STORAGE_QUERY_PROPERTY,可是只能得到硬盘的Serial  number,就是得不到U盘的Serial  number,这是为什么?  
 
 
 
其实根据你的思路,再增加几个动作是可以获得USB  Mass  Storage  Device的Serial  Number的.  
如果是我,我的方法有两个:  
(1)通过驱动程序来向硬件发送命令,这样可以得到存储装置设备实例的Device  Instance  IDs,这个东西类似于下面的字符串:  
硬盘:PCIIDE/IDECHANNEL/4&E3EC092&0&0  
USB存储器:USB/VID_04A5&PID_6130/0002F0EB6D990414  
像0002F0EB6D990414就是你所要的Serial  Number.  
(2)用DDK直接对USB设备进行访问,可以得到它.  
DDK里面的USBView你已经编译通过了,这样很好.之所以会出现:iSerialNumber:              0x03,那是因为你没有对设备进行Config  Descriptors.你可以试着做一个动作:  
启动USBView.exe后,把USB设备插上去.在"Options"菜单下选中"Config  Descriptors"项,然后再到"File"菜单下,点击"Refresh  F5"子菜单项,这样Serial  Number就会看到了.  
以下是我看到的结果:  
Device  Descriptor:  
bcdUSB:                          0x0110  
bDeviceClass:                  0x00  
bDeviceSubClass:            0x00  
bDeviceProtocol:            0x00  
bMaxPacketSize0:            0x40  (64)  
idVendor:                      0x04A5  (Acer  Peripherals  Inc.)  
idProduct:                    0x6130  
bcdDevice:                    0x1001  
iManufacturer:                0x01  
0x0409:  "<USB  MF>"  
iProduct:                          0x02  
0x0409:  "<USB  PRODUCT>      "  
iSerialNumber:                0x03  
0x0409:  "0002F0EB6D9C050B"  
bNumConfigurations:      0x01  
 
ConnectionStatus:  DeviceConnected  
Current  Config  Value:  0x01  
Device  Bus  Speed:          Full  
Device  Address:              0x02  
Open  Pipes:                            2  
 
Endpoint  Descriptor:  
bEndpointAddress:          0x81  
Transfer  Type:                Bulk  
wMaxPacketSize:          0x0040  (64)  
bInterval:                        0x00  
 
Endpoint  Descriptor:  
bEndpointAddress:          0x02  
Transfer  Type:                Bulk  
wMaxPacketSize:          0x0040  (64)  
bInterval:                        0x00  
 
Configuration  Descriptor:  
wTotalLength:              0x0020  
bNumInterfaces:              0x01  
bConfigurationValue:    0x01  
iConfiguration:              0x04  
0x0409:  "USB/MSC  LCD  Player"  
bmAttributes:                  0x80  (Bus  Powered  )  
MaxPower:                          0x32  (100  Ma)  
 
Interface  Descriptor:  
bInterfaceNumber:          0x00  
bAlternateSetting:        0x00  
bNumEndpoints:                0x02  
bInterfaceClass:            0x08  
bInterfaceSubClass:      0x06  
bInterfaceProtocol:      0x50  
iInterface:                      0x05  
0x0409:  "Internal  Device"  
 
Endpoint  Descriptor:  
bEndpointAddress:          0x81  
Transfer  Type:                Bulk  
wMaxPacketSize:          0x0040  (64)  
bInterval:                        0x00  
 
Endpoint  Descriptor:  
bEndpointAddress:          0x02  
Transfer  Type:                Bulk  
wMaxPacketSize:          0x0040  (64)  
bInterval:                        0x00  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值