我只想知道如何在 C++ 中获取 BIO 信息。我尝试了以下选项,但每个选项都有其缺点。
- 从注册表:但我发现一些系统缺少HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\BIOS可能是虚拟机。
- 使用 WMI:但是 WMI 不必在所有系统上运行,因为在某些情况下,服务被禁用或 WMI 对象丢失!
我需要一种永久性解决方案,它可以在 c++ 中为我提供 BIO 信息。
尝试检测您是否在虚拟操作系统中可以通过多种方式完成,并且取决于所使用的虚拟化软件。
在 stackoverflow 上已经有很多不同的问题。
没有特别的顺序,这里有一些文章,它们涵盖了使用的各种不同的虚拟化部分:
http://www.codeproject.com/Articles/9823/Detect-if-your-program-is-running-inside-a-Virtual
虽然 Salgar 打败了我,但更“安全”的方法之一是使用 CPUID 指令,该指令通常适用于现代 VM。我知道 KVM、Microsoft 和 Xen 使用大约 0x40000000 的 CPUID 叶返回“您在虚拟机中”。不是 100% 确定 VMWare 是否也支持相同的 - 在“真实”机器上,这些是保留的,未使用。
这是一个讨论除 CPUID 之外的几个选项的页面:http: //homepage.ntlworld.com/jonathan.deboynepollard/FGA/detecting-x86-virtual-machines.html 并且有几个链接供进一步阅读。