//获取设备信息句柄
HDEVINFO hDevInfo = SetupDiGetClassDevs(NULL,L"USB" ,NULL,DIGCF_ALLCLASSES|DIGCF_PRESENT);
//获取设备信息数据SP_DEVINFO_DATA deviceInfoData;deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);for(int i = 0;SetupDiEnumDeviceInfo(hDevInfo,i,&deviceInfoData);i++) //对USB设备集进行枚举{....}


如果 兼容ID == "usb\\class_ff&subclass_42" 就直接可以知道这个是手机设备了(注意要兼容ID的大小写不确定的)WORD dataType= 0;
DWORD buffSize = 0;
SetupDiGetDeviceRegistryProperty(hDevInfo,&deviceInfoData,SPDRP_COMPATIBLEIDS,&dataType,NULL,buffSize,&buffSize);
int err = GetLastError();
if(err != ERROR_INSUFFICIENT_BUFFER)
return;
LPTSTR szCompatibleID = (LPTSTR)LocalAlloc(LPTR,buffSize+1);
SetupDiGetDeviceRegistryProperty(hDevInfo,&deviceInfoData,SPDRP_COMPATIBLEIDS,&dataType,(PBYTE)szCompatibleID ,buffSize,&buffSize);
//szCompatibleID 即是兼容ID
WORD dataType= 0;
DWORD buffSize = 0;
SetupDiGetDeviceRegistryProperty(hDevInfo,&deviceInfoData,SPDRP_HARDWAREID,&dataType,NULL,buffSize,&buffSize);
int err = GetLastError();
if(err != ERROR_INSUFFICIENT_BUFFER)
return;
LPTSTR szHardwareID = (LPTSTR)LocalAlloc(LPTR,buffSize+1);
SetupDiGetDeviceRegistryProperty(hDevInfo,&deviceInfoData,SPDRP_HARDWAREID,&dataType,(PBYTE)szHardwareID ,buffSize,&buffSize);
//szHardwareID 即是硬件ID
原版地址:http://mongamind.blog.163.com/blog/static/193287261201393005331571/