根据VID/PID识别USB设备程序

VID是厂商ID,由厂商向USB执行论坛申请,全球唯一,而PIC为产品识别码,有厂商自行决定,所以可以根据VID和PID识别USB设备。本文中的程序采用SetupDixxx系列API实现对USB设备的识别。

 

#define DEVICE_VID_PIC  "Vid_xxxx&Pid_xxxx"//定义设备的VID,PID

 

 HDEVINFO     hDevInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_IMAGE,0, 0,  DIGCF_PRESENT ); //| DIGCF_PROFILE| DIGCF_ALLCLASSES
                                 
   if(hDevInfo==INVALID_HANDLE_VALUE)
   {
       MessageBox(_T("SetupDiGetClassDevs() failed!"));
        return;
   }
   
   
   

    DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
    for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
        &DeviceInfoData);i++)
    {
        DWORD DataT;
        DWORD buffersize=0;
        PBYTE buffer = NULL;
         while (!SetupDiGetDeviceRegistryProperty(
            hDevInfo,
            &DeviceInfoData,
            SPDRP_HARDWAREID ,// 读取设备ID

            &DataT,
            (PBYTE)buffer,
            buffersize,
            &buffersize))
       
         {
            if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
            {
                // Change the buffer size.
                if(buffer)
                {
                    free(buffer);                                       
                }
                buffersize++;
                buffer=(BYTE*)malloc(buffersize);
             
            }
            else
            {
                // Insert error handling here.
                MessageBox(_T("SetupDiGetDeviceRegistryProperty() error!"));
                break;
            }
        }
       
       
        str.Format(_T("%s"),buffer);
        str1 += (str+_T("/n"));   

        if(buffer)               
            free(buffer);   
       
    }

     error=GetLastError();
     if (error ==ERROR_NO_MORE_ITEMS)  
     {
      
        if(str1.Find(_T(DEVICE_VID_PIC))==-1) //查找设备
            MessageBox(_T("请l连接####设备!"));

     }
     else
     {
         ErrorCode.Format(_T("Failed!  Error: %d  "),error);   
         MessageBox(ErrorCode);
     }

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值