none
如何获取多个同类设备的设备实例ID( Device Instance ID )? RRS feed

  • 问题

  • 背景介绍:

    现在2个同一类 usb 设备(VID PID均相同),需要进行同步的数据烧录,考虑到烧录的过程可能会出现失败的情况,故需要找出二者的设备实例ID(有些资料也叫设备范例IDDevice Instance ID),以为区分。

     

    本人获取设备范例ID的代码如下:

    int getInstanceDeviceID()

    {

           HDEVINFO hDevInfo = NULL;    

           int   i              = 0;

           DWORD actualSize  = 0;

           TCHAR dataBuf[MAX_PATH + 1];         //  建立缓冲区以存储设备范例ID

           SP_DEVINFO_DATA DeviceInterfaceData;

           方法一:

          hDevInfo = SetupDiGetClassDevs((struct _GUID *)&GUID_PORTSDEVS,0,0,DIGCF_PRESENT);                //  返回当前存在设备的设备信息结构句柄;

         方法二:

          //hDevInfo = SetupDiGetClassDevs((struct _GUID *)&GUID_PORTSDEVS,0,0,DIGCF_DEVICEINTERFACE);   //  返回所有支持的设备信息结构句柄;

           if(  INVALID_HANDLE_VALUE == hDevInfo ) 

           {

                  return -1;

           }

           while( TRUE )

           {

                  ZeroMemory( &DeviceInterfaceData, sizeof(DeviceInterfaceData ));

                  DeviceInterfaceData.cbSize = sizeof(DeviceInterfaceData);

                 

                  for( int k = 0; SetupDiEnumDeviceInfo( hDevInfo, k, &DeviceInterfaceData ); k++ )

                  {

                         if( !SetupDiGetDeviceInstanceId( hDevInfo,&DeviceInterfaceData,dataBuf,sizeof(dataBuf),&actualSize ) )

                         {

                                return -1;

                                break;                   

                         }

                         else

                         {

                                for( int i = 0; i < ( MAX_PATH + 1 ); i ++ )

                                {

                                       if( '|0' == dataBuf[i] )

                                       {

                                              return dataBuf[i - 1];     // 返回 ID ;

                                              break;                                 

                                       }                          

                                }                          

                         }

                        

                         k++;

                  }            

           }

           SetupDiDestroyDeviceInfoList( hDevInfo );

    }

    错误现象:

    使用方法一:

      可以同时稳定两个usb (此为硬件特性,在 usb 接入 PC 时,需要上位机传递一条指令给 usb 以进入特殊模式,usb 才可稳定下来,否则,设备自动进入充电模式),可返回两个设备实例ID,但是返回的设备实例ID 始终是相同的;

      逐个将 usb 设备接入PC,不更换usb端口,返回的 ID 值不同;

     

    使用方法二:

      不返回设备ID值;

     

    求解:

    该问题如何解决?

    2013年7月29日 13:30