3

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

如果您想知道情况:

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

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

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

4

3 回答 3

2

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

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

            Intel Corporation
            DZ77BH-55K
            AAG39018-400
            BQBH206600DT
于 2012-12-05T15:42:02.590 回答
1

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

于 2009-08-25T20:32:10.770 回答
-2

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

cpuid GNU 程序

于 2009-08-11T21:10:34.377 回答