3

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

4

1 回答 1

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 的机器上编写它纯粹是为了您自己的使用,您可以大大简化它。大多数代码都处理 this 使用的事实NVML.DLL,它位于通常不在路径上的目录中,因此代码会动态加载它,并用于GetProcAddress在其中查找我们需要使用的函数。在这种情况下,我们只使用了三个函数,所以处理起来并不难,但它仍然大大增加了代码的长度。

如果我们可以忽略所有这些废话,那么真正的代码将按照以下一般顺序出现:

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

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

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

...假设您已在c:\tdk.

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

nVidia Driver version: 314.22

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

于 2013-04-09T04:43:20.540 回答