【问题标题】:How do I get the BIOS manufacturer and model in C++ without using WMI?如何在不使用 WMI 的情况下在 C++ 中获取 BIOS 制造商和型号?
【发布时间】:2009-06-12 19:38:25
【问题描述】:

我们正在运行 32 位和 64 位的 windows xp pro service pack 3。我们使用 WMI 来获取 BIOS 制造商和型号,但我们更喜欢使用 Win32 API 或汇编语言或 WMI 或 COM 之外的其他方法的方法。欢迎提供代码示例。

【问题讨论】:

    标签: bios


    【解决方案1】:

    codeproject 中有一篇文章的源代码使用 API 调用 GetSystemFirmwareTable 来检索 SMIBIOS 信息。链接:http://www.codeproject.com/KB/system/SMBIOS_Peek.aspx

    【解决方案2】:

    您可以在SMBIOS 内存中映射并解析它。你想要的大部分信息都在里面。这可以通过任何可以访问系统内存映射原语的语言来完成。

    此外,此document 包含有关可用于查询 SMBIOS 的 Win32 函数的信息。

    【讨论】:

    • 感谢 SMBIOS 链接。从我在 MSDN 文档中看到的内容来看,文档中的 Win32 调用似乎在 XP Pro 32 位上不可用。
    【解决方案3】:

    它位于 HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/System 的注册表中

    您有 SystemBiosVersion、SystemBiosDate 等。

    此外,还有一个称为 BIOS 的子键,其中包含更多信息,例如 BIOSVendor 和 BIOSVersion。

    根据谁构建系统,您还应该能够获得 BaseBoardManufacturer 和其他很酷的信息。

    更新

    您可以查看this link。这是VB代码。他们尝试从注册表中读取它,但未能成功,只能从内存地址中提取字符串数据。在这种情况下,版本为 &HFE061,日期为 &HFFFF5。

    【讨论】:

    • 在我的 vista 32 位机器上这很好用,但是我们在 windows xp Professional x64 上运行一些 32 位应用程序,这些键中没有任何信息。
    • 根据这篇 2002 年的文章,它应该在那里。 pctools.com/guides/registry/detail/830
    • 很奇怪。我们也有一些服务器 2003 标准框,它们也没有填充密钥...
    • 有趣。你确定你在看正确的钥匙吗?另一个想法是这是权限问题或其他问题。我刚刚检查了我们的 3 台服务器。所有这些都有 SystemBiosDate 和 SystemBiosVersion。在硬件/描述/系统键下。
    • 请记住,您不应指望可靠的答案,因为注册表可以轻松更改,这当然取决于您的需要。
    【解决方案4】:

    DmiDecode for Windows 可以做到这一点。

    【讨论】:

    • 有这方面的 Visual Studio C++ 项目吗?我找不到任何东西。
    • 这是一个 Linux 工具的移植版,所以可能不是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2013-02-11
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多