关闭

取USB设备信息-2

2545人阅读 评论(0) 收藏 举报
这个思路,大家看看对不对  
用这个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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:187236次
    • 积分:2331
    • 等级:
    • 排名:第16615名
    • 原创:33篇
    • 转载:37篇
    • 译文:0篇
    • 评论:107条
    最新评论