来自WMI的nVidia驱动程序版本不是我想要的

时间:2013-04-09 02:06:49

标签: c++ wmi nvidia

我想获得nVidia显卡的驱动程序版本。 所以我使用WMI并从“Win32_VideoController”类的“DriverVersion”对象获取数据。 但它就像“9.18.13.1106”(文件版本),我想要的是像“311.06”(treiber版本)。 我在哪里可以获得这些信息? 如果WMI不可能,我想知道其他方法。 感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用nVidia的Tesla Deployment Kit中的NVML执行此操作。您可以使用以下代码检索内部驱动程序版本(您习惯于查看nVidia驱动程序的版本):

#include <iostream>
#include <string>
#include <stdlib.h>
#include <nvml.h>
#include <windows.h>

namespace { 
typedef nvmlReturn_t (*init)();
typedef nvmlReturn_t (*shutdown)();
typedef nvmlReturn_t (*get_version)(char *, unsigned);

class NVML {
    init nvmlInit;
    shutdown nvmlShutdown;
    get_version nvmlGetDriverVersion;

    std::string find_dll() {
        std::string loc(getenv("ProgramW6432"));
        loc += "\\Nvidia Corporation\\nvsmi\\nvml.dll";
        return loc;
    }

public:    
    NVML() {
        HMODULE lib = LoadLibrary(find_dll().c_str());
        nvmlInit = (init)GetProcAddress(lib, "nvmlInit");
        nvmlShutdown = (shutdown)GetProcAddress(lib, "nvmlShutdown");
        nvmlGetDriverVersion = (get_version)GetProcAddress(lib, "nvmlSystemGetDriverVersion");

        if (NVML_SUCCESS != nvmlInit())
            throw(std::runtime_error("Unable to initialize NVML"));
    }

    std::string get_ver() {
        char buffer[81];
        nvmlGetDriverVersion(buffer, sizeof(buffer));
        return std::string(buffer);
    }

    ~NVML() {
        if (NVML_SUCCESS != nvmlShutdown())
            throw(std::runtime_error("Unable to shut down NVML"));
    }
};
}

int main() {  
    std::cout << "nVidia Driver version: " << NVML().get_ver();
}

请注意,如果您在可以自由编辑PATH的计算机上编写纯粹的文章,则可以将其简化。大多数代码处理的事实是它使用NVML.DLL,它位于路径中通常不在的目录中,因此代码会动态加载,并使用GetProcAddress来查找其中的函数我们需要使用。在这种情况下,我们只使用三个函数,因此处理起来并不困难,但它仍然会大大增加代码的长度。

如果我们可以忽略所有这些废话,真正的代码就会出现在这个通用顺序上:

nvmlInit();
nvmlSystemGetDriverVersion(result, sizeof(result));
std::cout << result;
nvmlShutdown();

无论如何,要构建它,你需要一个命令行,如:

 cl -Ic:\tdk\nvml\include nv_driver_version.cpp

...假设您已在c:\tdk安装了Tesla部署工具包。

无论如何,是的,我至少在一定程度上对此进行了测试。在我的桌面上打印出来:

nVidia Driver version: 314.22

...与我安装的相匹配。