如何通过代码检测系统是否支持硬件虚拟化? (最好是C#或C ++)。
我尝试使用WMI和ManagementObjectSearcher,并且无法找到似乎代表虚拟机支持是否存在于计算机中的属性。
奖金问题: 是否可以判断CPU是否支持硬件虚拟化,但在BIOS中是否已禁用?
答案 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)