阅读:1692回复:1
请教Windows DDK中的sample code---usbview是如何获得iManufacturer,iProduct以及iSerialNumber的?
usbview的显示usb信息的代码段:
if (VendorString != NULL) { AppendTextBuffer("idVendor: 0x%04X (%s)\r\n", ConnectInfo-> DeviceDescriptor.idVendor, VendorString); } else { AppendTextBuffer("idVendor: 0x%04X\r\n", ConnectInfo-> DeviceDescriptor.idVendor); } AppendTextBuffer("idProduct: 0x%04X\r\n", ConnectInfo-> DeviceDescriptor.idProduct); AppendTextBuffer("bcdDevice: 0x%04X\r\n", ConnectInfo-> DeviceDescriptor.bcdDevice); AppendTextBuffer("iManufacturer: 0x%02X\r\n", ConnectInfo-> DeviceDescriptor.iManufacturer); if (ConnectInfo-> DeviceDescriptor.iManufacturer) { DisplayStringDescriptor(ConnectInfo-> DeviceDescriptor.iManufacturer, StringDescs); } AppendTextBuffer("iProduct: 0x%02X\r\n", ConnectInfo-> DeviceDescriptor.iProduct); if (ConnectInfo-> DeviceDescriptor.iProduct) { DisplayStringDescriptor(ConnectInfo-> DeviceDescriptor.iProduct, StringDescs); } AppendTextBuffer("iSerialNumber: 0x%02X\r\n", ConnectInfo-> DeviceDescriptor.iSerialNumber); if (ConnectInfo-> DeviceDescriptor.iSerialNumber) { DisplayStringDescriptor(ConnectInfo-> DeviceDescriptor.iSerialNumber, StringDescs); } 很明显这三个值还经过了DisplayStringDescriptor函数处理:这个的函数代码是: VOID DisplayStringDescriptor ( UCHAR Index, PSTRING_DESCRIPTOR_NODE StringDescs ) { ULONG nBytes; while (StringDescs) { if (StringDescs-> DescriptorIndex == Index) { AppendTextBuffer("0x%04X: \"", StringDescs-> LanguageID); nBytes = WideCharToMultiByte( CP_ACP, // CodePage 0, // CodePage StringDescs-> StringDescriptor-> bString, (StringDescs-> StringDescriptor-> bLength - 2) / 2, TextBuffer + TextBufferPos, TextBufferLen - TextBufferPos, NULL, // lpDefaultChar NULL); // pUsedDefaultChar TextBufferPos += nBytes; AppendTextBuffer("\"\r\n"); } StringDescs = StringDescs-> Next; } } |
|
|
沙发#
发布于:2008-03-07 14:42
Re:请教Windows DDK中的sample code---usbview是如何获得i
顶啊 |
|
|