知道U盘盘符后如何获取U盘的信息,如PID,VID那些信息?我知道的是用CreateFile;SetIoControl,来得到,但是好像不行...急...

解决方案 »

  1.   

    http://download.csdn.net/source/613705
      

  2.   

    不行,这个我都下载来试了,就是知道盘符后不知道DEVICEIOCONTROL函数里面的第二个该怎么设置
      

  3.   

    注册表里不就是有吗?还有SetupDi函数族也可以拿到。
      

  4.   

    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++;
    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);
    }
      

  5.   


    BOOL GetDisksProperty(HANDLE hDevice, PSTORAGE_DEVICE_DESCRIPTOR pDevDesc)
    {
    STORAGE_PROPERTY_QUERY Query;
    DWORD dwOutBytes;
    BOOL bResult; Query.PropertyId = StorageDeviceProperty;
    Query.QueryType = PropertyStandardQuery; bResult = ::DeviceIoControl(hDevice,
    IOCTL_STORAGE_QUERY_PROPERTY,
    &Query, sizeof(STORAGE_PROPERTY_QUERY),
    pDevDesc, pDevDesc->Size,
    &dwOutBytes,
    (LPOVERLAPPED)NULL); return bResult;
    }