你那个USB设备应该会有一个名字,打开那个名字就可以了

解决方案 »

  1.   


    int k = 0;
    DWORD MaxDriveSet, CurDriveSet;
    DWORD drive, drivetype;
    TCHAR szBuf[300];
    HANDLE hDevice;
    PSTORAGE_DEVICE_DESCRIPTOR pDevDesc; char* p; CString str;
    for(k=0; k<26; k++)
    szMoveDiskName[k] = '\0';
    k = 1;
    MaxDriveSet = CurDriveSet = 0; MaxDriveSet = GetLogicalDrives();
    CurDriveSet = MaxDriveSet;
    for ( drive = 0; drive < 32; ++drive )  
    {
    if ( MaxDriveSet & (1 << drive) )  
    {
    DWORD temp = 1<<drive;
    _stprintf( szDrvName, _T("%c:\\"), 'A'+drive );
    if(GetDriveType( szDrvName )== DRIVE_REMOVABLE)
    {
    drivetype = DRVREMOVE; sprintf(szBuf, "\\\\?\\%c:", 'A'+drive);
    hDevice = CreateFile(szBuf, GENERIC_READ,
    FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL); if (hDevice != INVALID_HANDLE_VALUE)
    { pDevDesc = (PSTORAGE_DEVICE_DESCRIPTOR)new BYTE[sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1]; pDevDesc->Size = sizeof(STORAGE_DEVICE_DESCRIPTOR) + 512 - 1; if(GetDisksProperty(hDevice, pDevDesc))
    {
    szMoveDiskName[k] = chFirstDriveFromMask(temp);
    szMoveDiskName[0]=k;
    k++;
    /**************/
    PHIDP_PREPARSED_DATA PreparsedData;
    HidD_GetPreparsedData(hDevice,&PreparsedData);
    HidD_FreePreparsedData(PreparsedData);
    /**************/
    ShowMessage("\r\n找到U盘,名称:\r\n");
    p= (char*)pDevDesc;
    str = (pDevDesc->VendorIdOffset ? &p[pDevDesc->VendorIdOffset]:"(NULL)");
    ShowMessage(str); ShowMessage("\r\n产品ID:\r\n");
    str=(pDevDesc->ProductIdOffset ? &p[pDevDesc->ProductIdOffset]:"(NULL)");
    ShowMessage(str);
    ShowMessage("\r\n产品版本:\r\n");
    str = (pDevDesc->ProductRevisionOffset ? &p[pDevDesc->ProductRevisionOffset] : "(NULL)");
    ShowMessage(str);
    ShowMessage("\r\n序列号:\r\n");
    str = (pDevDesc->SerialNumberOffset ? &p[pDevDesc->SerialNumberOffset] : "(NULL)");
    ShowMessage(str);    
    }
    delete pDevDesc;
    CloseHandle(hDevice);
    }
    }
    } }
    str.Format("\r\n U盘符:\r\n%s",&szMoveDiskName[1]); if(szMoveDiskName[0]==0)
    {
    str="\r\n没有U盘\r\n";
    m_showMessage.Empty();
    }
    ShowMessage(str);
    }
      

  2.   

    看看USB协议 
    usb 通讯分4种。如命令控制通道、批传输,其他忘了。
    然后usb设备类型又有好多种,如存储设备(U盘)、交互设备(键盘鼠标)、usb打印机、其他自定义等每种设备又有自己的协议规范。总之,你看了usb协议之后,会对你帮助很大的。
    我是3年前做过,没做完。所以也说不太清楚。大致是个意思。