c ++中的bios信息

时间:2013-07-09 09:48:40

标签: c++ c registry wmi bios

我只想知道如何在C ++中获取BIO信息。我尝试了以下选项但每个都有它的缺点。

  1. 来自注册表:但我发现某个系统缺少 HKEY_LOCAL_MACHINE \ HARDWARE \ DESCRIPTION \ System \ BIOS 可能是虚拟机。
  2. 使用WMI:但WMI不必在所有系统上运行,因为在某些情况下,服务被禁用或WMI对象丢失!!
  3. 我需要一个永久的解决方案,以c ++的形式提供BIO信息。

2 个答案:

答案 0 :(得分:1)

尝试检测您是否在虚拟操作系统中是以各种方式完成的,并且取决于所使用的虚拟化软件。

在stackoverflow上已经有很多不同的问题。

没有特别的顺序,这里有一些文章,它们涵盖了所使用的各种虚拟化文件:

Detect virtualized OS from an application?

detect if application running on virtual box

64-bit windows VMware detection

How to identify that you're running under a VM?

http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual

答案 1 :(得分:1)

虽然Salgar打败了我,但更“安全”的方法之一就是使用CPUID指令,它通常适用于现代VM。我知道KVM,Microsoft和Xen使用一个大约0x40000000的CPUID叶子,它返回“你在虚拟机中”。不是100%确定VMWare是否也支持相同的 - 在“真正的”机器上,这些是保留的而不是使用。

这是一个讨论除CPUID之外的几个选项的页面: http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/detecting-x86-virtual-machines.html 并且有几个链接供进一步阅读。