【发布时间】:2009-05-08 17:11:13
【问题描述】:
如何通过代码检测系统是否支持硬件虚拟化? (最好使用 C# 或 C++)。
我尝试使用 WMI 和 ManagementObjectSearcher,但找不到似乎表示机器中是否存在虚拟化支持的属性。
奖金问题: 是否可以判断 CPU 是否支持硬件虚拟化,但在 BIOS 中禁用?
【问题讨论】:
标签: c# windows windows-7 virtualization
如何通过代码检测系统是否支持硬件虚拟化? (最好使用 C# 或 C++)。
我尝试使用 WMI 和 ManagementObjectSearcher,但找不到似乎表示机器中是否存在虚拟化支持的属性。
奖金问题: 是否可以判断 CPU 是否支持硬件虚拟化,但在 BIOS 中禁用?
【问题讨论】:
标签: c# windows windows-7 virtualization
我没有 C 风格的答案,但这里有一个 PowerShell 方法——它只是一个简单的 WMI 查询——可以提供帮助。
查询 Win32_Processor;有标志“SecondLevelAddressTranslationExtensions”和“VirtualizationFirmwareEnabled”。他们似乎为我回答了问题。
在 PoSH 中是
(GWMI Win32_Processor).VirtualizationFirmwareEnabled
和
(GWMI Win32_Processor).SecondLevelAddressTranslationExtensions
我希望这会有所帮助。
马克·米纳西
【讨论】:
我认为原始发帖人是在询问如何检测计算机硬件是否支持虚拟化,而不是它是否在虚拟机中运行。请参阅this question 以获得可能的答案。
此外,您是否可以检查 CPU 标志可能值得一看,因为如果处理器支持虚拟化扩展,则会有 Intel vmx 标志或 AMD svm 标志。我不能说我知道在 Windows 下应该如何完成,但在 Linux 上的/proc/cpuinfo 中提供了信息。
【讨论】:
不确定代码,但Securable 似乎能够做到这一点。
【讨论】:
检查这个link,你可以在那里看到,也许你应该使用 WMI 类来获取信息。 .NET 框架有 System.Management 命名空间来做到这一点。 Win32_processor 类可以为您提供有关处理器所需的所有信息,因为您无法直接使用 win32_processor 类访问 cpu 标志,也许您需要检查 VirtualizationFirmwareEnabled 的值
【讨论】: