根据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);
     }

你可能感兴趣的:(根据VID/PID识别USB设备程序)