2

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

  1. 从注册表:但我发现一些系统缺少HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS可能是虚拟机。
  2. 使用 WMI:但是 WMI 不必在所有系统上运行,因为在某些情况下,服务被禁用或 WMI 对象丢失!

我需要一种永久性解决方案,它可以在 c++ 中为我提供 BIO 信息。

4

2 回答 2

1

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

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

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

从应用程序中检测虚拟化操作系统?

检测应用程序是否在虚拟盒子上运行

64位windows VMware检测

如何识别您在虚拟机下运行?

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

于 2013-07-09T10:15:02.600 回答
1

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

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

于 2013-07-09T10:20:13.007 回答