Jecci
驱动牛犊
驱动牛犊
  • 注册日期2008-03-07
  • 最后登录2008-03-11
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1693回复:1

请教Windows DDK中的sample code---usbview是如何获得iManufacturer,iProduct以及iSerialNumber的?

楼主#
更多 发布于:2008-03-07 11:21
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;
    }

}
成功源自执着...
Jecci
驱动牛犊
驱动牛犊
  • 注册日期2008-03-07
  • 最后登录2008-03-11
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-03-07 14:42
Re:请教Windows DDK中的sample code---usbview是如何获得i
顶啊
成功源自执着...
游客

返回顶部