获取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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值