在不使用 WMI 的情况下访问主板信息

Posted

技术标签:

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

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

如果您想了解情况:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

            Intel Corporation
            DZ77BH-55K
            AAG39018-400
            BQBH206600DT

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

cpuid GNU program

【讨论】:

我对CPU信息不感兴趣,但我需要能够识别主板的制造商和序列号。 CPUID指令提供串口# 再次,我感兴趣的是主板。__cpuid 提供了与我的应用程序无关的 CPU 信息。

以上是关于在不使用 WMI 的情况下访问主板信息的主要内容,如果未能解决你的问题,请参考以下文章

使用WMI编程获取主机硬件信息(CPU_ID,硬盘主板BIOS序列号,Mac地址)

WMI 如何获取 ProcessorId?

如何在 Python 中不使用 WMI 获取 PhysicalDisk?

如何使用 C# 在 WMI 中读取 ManagementObject 集合

在没有 WMI 的情况下获取电池信息

什么是WMI 有什么用?