通过GUID读取COM口信息

  • Post author:
  • Post category:其他
void EnumerCOMPortByGUID()

{

    HDEVINFO hDevInfo;   

    SP_DEVINFO_DATA DeviceInfoData;   

    DWORD i = 0;   

       

    hDevInfo = SetupDiGetClassDevs((LPGUID) &GUID_DEVCLASS_PORTS, 0, 0,DIGCF_PRESENT);   

    /*  

    GUID_DEVCLASS_FDC软盘控制器  

    GUID_DEVCLASS_DISPLAY显示卡  

    GUID_DEVCLASS_CDROM光驱  

    GUID_DEVCLASS_KEYBOARD键盘  

    GUID_DEVCLASS_COMPUTER计算机  

    GUID_DEVCLASS_SYSTEM系统  

    GUID_DEVCLASS_DISKDRIVE磁盘驱动器  

    GUID_DEVCLASS_MEDIA声音、视频和游戏控制器  

    GUID_DEVCLASS_MODEMMODEM  

    GUID_DEVCLASS_MOUSE鼠标和其他指针设备  

    GUID_DEVCLASS_NET网络设备器  

    GUID_DEVCLASS_USB通用串行总线控制器  

    GUID_DEVCLASS_FLOPPYDISK软盘驱动器  

    GUID_DEVCLASS_UNKNOWN未知设备  

    GUID_DEVCLASS_SCSIADAPTERSCSI 和 RAID 控制器  

    GUID_DEVCLASS_HDCIDE ATA/ATAPI 控制器  

    GUID_DEVCLASS_PORTS端口(COM 和 LPT)  

    GUID_DEVCLASS_MONITOR监视器  

    */   

       

    if (hDevInfo == INVALID_HANDLE_VALUE)   

    {   

        DWORD dwError = GetLastError();   

        // Insert error handling here.   

        return ;   

    }   

       

    // Enumerate through all devices in Set.        

    DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);        

    for(i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++)     

    {   

        DWORD DataT = 0;   

char buffer[256] = {0};  


        DWORD buffersize = sizeof(buffer);   

        while (!SetupDiGetDeviceRegistryProperty(hDevInfo,   

                                                &DeviceInfoData,   

                                                SPDRP_FRIENDLYNAME,   

                                                &DataT,   

                                                (PBYTE)buffer,   

                                                buffersize,   

                                                &buffersize))   

        {   

            if(GetLastError() == ERROR_INSUFFICIENT_BUFFER)   

            {   

                // Change the buffer size.   

                //if (buffer) LocalFree(buffer);   

            }   

            else   

            {   

                // Insert error handling here. 

//cout << “Friend Name is ” << buffer << endl;

                break;   

            }   

        }           

cout << “Friend Name is ” << buffer << endl;

        if(buffer)   

        {   

            LocalFree(buffer);   

        }   

    }   

    if(GetLastError() != NO_ERROR && GetLastError() != ERROR_NO_MORE_ITEMS)   

    {   

        return ;   

    }   

   

    // Cleanup   

    SetupDiDestroyDeviceInfoList(hDevInfo);   

}

这段代码可以获取到COM口在设备管理器的端口节点下的描述信息,比如“XXXXXXX (COMXX)”。


版权声明:本文为md521原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。