USB设备VID-PID读取

#include

#pragma comment(lib, "setupapi.lib")

CHAR g_cVID[5] = {0};
CHAR g_cPID_RGB[5] = {0};
CHAR g_cPID_Infrared[5] = {0};

BOOL GetCameraUSB()
{
    BOOL bRet = FALSE;
    BOOL bPID_RGB = FALSE;
    BOOL bPID_Infrared = FALSE;
    
    LPGUID lpGuid = (LPGUID)&GUID_CLASS_USB_DEVICE;//
    int INTERFACE_DETAIL_SIZE = 1024;
    int nCount = 0;
    HDEVINFO info = SetupDiGetClassDevs(lpGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
    
    //enumerate device information  
    DWORD required_size = 0;
    int i;
    SP_DEVINFO_DATA DeviceInfoData = { sizeof(DeviceInfoData) };
    
    DWORD DataT;
    DWORD buffersize = 100;
    DWORD req_bufsize = 0;
    
    CHAR *did = new CHAR[100];
    CHAR *lochd = new CHAR[100];
    
    for (i = 0; SetupDiEnumDeviceInfo(info, i, &DeviceInfoData); i++)
    {
        memset(did,0x00,100);
        memset(lochd,0x00,100);
        //get device description information
        if (!SetupDiGetDeviceInstanceId(info, &DeviceInfoData, (PTSTR)did, buffersize, &req_bufsize))
            continue;
        if(SetupDiGetDeviceRegistryProperty(info,&DeviceInfoData,SPDRP_HARDWAREID,&DataT,(LPBYTE)lochd,buffersize,&req_bufsize))
        {
            if(!memcmp(lochd+8,g_cVID,4))
            {
                if(!memcmp(lochd+17,g_cPID_RGB,4))
                {
                    bPID_RGB = TRUE;
                    continue;
                }
                else if(!memcmp(lochd+17,g_cPID_Infrared,4))
                {
                    bPID_Infrared = TRUE;
                    continue;
                }
            }
        }
        
    }
    
    SetupDiDestroyDeviceInfoList(info);
    
    if(bPID_RGB&bPID_Infrared)
    {
        bRet = TRUE;
    }
    return bRet;
}

你可能感兴趣的:(C++)