天天看点

取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