【问题标题】:Access Motherboard information without using WMI在不使用 WMI 的情况下访问主板信息
【发布时间】:2010-11-18 17:51:08
【问题描述】:

我需要在多个进程的应用程序中访问主板标识(序列号、制造商等)。 我已经能够使用 WMI 成功查询此内容,但我正在寻找替代方法。

如果您想了解情况:

我有一些不同的应用程序行为,具体取决于硬件配置,或者是否设置了特定的环境变量(用于测试目的)。

bool IsVideoCardDisplay = ( getenv("Z_VI_DISPLAY") || !QueryWmiForSpecialBoard() ) ? false : true;

设置环境变量后,无需 WMI 查询——应用程序运行良好。但是,当环境变量不存在时,我的应用程序的某些组件在需要进行 WMI 查询时无法启动。我怀疑 WMI 调用可能会产生一些副作用(每个进程最多只发生一次。这就是我寻求替代方法的原因。

【问题讨论】:

    标签: c++ winapi hardware wmi motherboard


    【解决方案1】:

    在 Vista+ 中,您可以使用 GetSystemFirmwareTable API 访问 SMBIOS 表并解析它们以获得 [可能可用的] 序列号和其他标识字符串和值。

    尤其是您可以访问主板数据,包括供应商和 S/N:

                Intel Corporation
                DZ77BH-55K
                AAG39018-400
                BQBH206600DT
    

    【讨论】:

      【解决方案2】:

      显然没有办法做到这一点,这是不幸的。

      【讨论】:

        【解决方案3】:

        该信息由 CPUID 指令提供。以下链接为您提供了一个程序,该程序使用该指令来公开执行该指令的结果。

        cpuid GNU program

        【讨论】:

        • 我对CPU信息不感兴趣,但我需要能够识别主板的制造商和序列号。
        • CPUID指令提供串口#
        • 再次,我感兴趣的是主板。__cpuid 提供了与我的应用程序无关的 CPU 信息。
        猜你喜欢
        • 2012-10-24
        • 2014-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-28
        • 2014-05-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多