0

我已经搜索了它的高低,找不到任何文档,我能够按照此处所述获得DriverVersion。创建和枚举设备驱动器正在工作,因此无需查看那里。DriverVersion是一种" DWORDLONG"。我需要将其转换为人类可读的格式,如 20.xx.xx.xx。MSDN 上或我搜索过的任何地方都没有任何文档。

任何帮助将不胜感激。

“ DriverVersion ”的示例值:1688863374327808

代码片段,如果需要的话,

SP_DEVINFO_DATA devInfo;
                devInfo.cbSize = sizeof(SP_DEVINFO_DATA);
                if (SetupDiEnumDeviceInfo(handle, 0, &devInfo))
                {   
                    if(SetupDiBuildDriverInfoList(handle,&devInfo,SPDIT_COMPATDRIVER))
                     {
                         SP_DRVINFO_DATA drvInfo;
                        drvInfo.cbSize = sizeof(SP_DRVINFO_DATA);
                            int i=0;
                        while(1)
                        {
                            try
                            {
                                if (SetupDiEnumDriverInfo(handle, &devInfo, SPDIT_COMPATDRIVER, i++, &drvInfo))
                                {
                                    cout<<"Version :"<<drvInfo.DriverVersion<<endl; // Need Human Readable version here.
                                }
                                else
                                    break;
                            }
                            catch(std::exception ex)
                            {
                                break;
                            }
                        }
                     }
                } 
4

1 回答 1

2

您可以使用ULARGE_INTEGER联合、HIWORD/LOWORD宏和字符串格式化工具boost::format来执行以下操作(未经测试的代码):

SP_DRVINFO_DATA driverInfoData;
ULARGE_INTEGER version;

version.QuadPart = driverInfoData.DriverVersion;

std::string versionStr = (boost::format("%s.%s.%s.%s")
    % HIWORD(version.HighPart)
    % LOWORD(version.HighPart)
    % HIWORD(version.LowPart)
    % LOWORD(version.LowPart)).str();

按照您的代码并摆脱 boost 只需执行以下操作:

std::cout << "Version: "
          << std::to_string(HIWORD(version.HighPart)) << "."
          << std::to_string(LOWORD(version.HighPart)) << "."
          << std::to_string(HIWORD(version.LowPart)) << "."
          << std::to_string(LOWORD(version.LowPart)) << std::endl;
于 2018-02-13T14:49:01.510 回答