獲取usb設備的vid,pid

char *CUFormatDlg::GetDeviceName(int device)
{
PSTORAGE_DEVICE_DESCRIPTOR pDevDesc;
STORAGE_PROPERTY_QUERY Query; // 查詢輸入參數
DWORD dwOutBytes; // IOCTL輸出長度
BOOL bResult; // IOCTL 返回值
PUCHAR         p;
         UCHAR          outBuf[512];

         char dev_name[128];
         char DeviceName[128];

sprintf(dev_name,"\\\\.\\PhysicalDrive%d",device);
HANDLE hDevice = OpenDevice(dev_name);
if (hDevice == INVALID_HANDLE_VALUE)
{
return NULL;
}

// 設置查詢參數
Query.PropertyId = StorageDeviceProperty;
Query.QueryType = PropertyStandardQuery;

// 設置查詢參數
bResult = ::DeviceIoControl(hDevice, // 設備句柄
IOCTL_STORAGE_QUERY_PROPERTY, // 設備屬性信息
&Query, sizeof(STORAGE_PROPERTY_QUERY), // 輸出buffer
outBuf, 512, // 輸出buffer
& dwOutBytes, // 輸出長度
(LPOVERLAPPED)NULL);

pDevDesc=(PSTORAGE_DEVICE_DESCRIPTOR)outBuf;
p = (PUCHAR) outBuf;
int index=0;

//獲取VerdorID
if ( pDevDesc->VendorIdOffset && p[pDevDesc->VendorIdOffset] )
{
       for(int i=pDevDesc->VendorIdOffset; p[i] != (UCHAR)NULL && i<(int)dwOutBytes; i++ )
   {
   DeviceName[index]=p[i];
   index++;
   if(p[i]==' ' && p[i+1]==' ') break;//去掉多餘空格
   }
    }
//獲取ProductID
if ( pDevDesc->ProductIdOffset && p[pDevDesc->ProductIdOffset] )
{
for(int i=pDevDesc->ProductIdOffset; p[i] != (UCHAR)NULL && i<(int)dwOutBytes; i++ )
   {
   DeviceName[index]=p[i];
   index++;
   if(p[i]==' ' && p[i+1]==' ') break;//去掉多餘空格
   }
    }
    DeviceName[index]='\0';
CloseHandle(hDevice);

return DeviceName;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章