如何通过代码确定硬件虚拟化是否可用? (C#,C ++)

时间:2009-05-08 17:11:13

标签: c# windows windows-7 virtualization

如何通过代码检测系统是否支持硬件虚拟化? (最好是C#或C ++)。

我尝试使用WMI和ManagementObjectSearcher,并且无法找到似乎代表虚拟机支持是否存在于计算机中的属性。

奖金问题: 是否可以判断CPU是否支持硬件虚拟化,但在BIOS中是否已禁用?

5 个答案:

答案 0 :(得分:4)

我没有C-ish的答案,但这是一个PowerShell方法 - 它只是一个简单的WMI查询 - 可以提供帮助。

查询Win32_Processor;有标志" SecondLevelAddressTranslationExtensions"和#34; VirtualizationFirmwareEnabled。"他们似乎在回答我的问题。

在PoSH中,它是

(GWMI Win32_Processor).VirtualizationFirmwareEnabled

(GWMI Win32_Processor).SecondLevelAddressTranslationExtensions

我希望这会有所帮助。

Mark Minasi

答案 1 :(得分:2)

我认为原始海报询问如何检测计算机硬件是否支持虚拟化,而不是它在虚拟机内运行。有关可能的答案,请参阅this question

此外,如果您可以检查CPU标志,可能值得一看,因为如果处理器支持虚拟化扩展,则会有英特尔vmx标志或AMD svm标志。我不能说我知道在Windows下应如何做到这一点,但是在Linux上的/proc/cpuinfo中可以获得这些信息。

答案 2 :(得分:0)

不确定代码,但Securable似乎能够做到这一点。

答案 3 :(得分:0)

检查这个link,你可以看到,也许你应该使用WMI类来获取信息。 .NET框架具有System.Management命名空间来执行此操作。 Win32_processor类可以为您提供有关处理器的所有信息,因为您无法使用win32_processor类直接访问cpu标志,也许您需要检查VirtualizationFirmwareEnabled的值

答案 4 :(得分:-2)