【问题标题】:How to determine if hardware virtualization is available via code? (C#, C++)如何通过代码确定硬件虚拟化是否可用? (C#、C++)
【发布时间】:2009-05-08 17:11:13
【问题描述】:

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

我尝试使用 WMI 和 ManagementObjectSearcher,但找不到似乎表示机器中是否存在虚拟化支持的属性。

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

【问题讨论】:

    标签: c# windows windows-7 virtualization


    【解决方案1】:

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

    查询 Win32_Processor;有标志“SecondLevelAddressTranslationExtensions”和“VirtualizationFirmwareEnabled”。他们似乎为我回答了问题。

    在 PoSH 中是

    (GWMI Win32_Processor).VirtualizationFirmwareEnabled

    (GWMI Win32_Processor).SecondLevelAddressTranslationExtensions

    我希望这会有所帮助。

    马克·米纳西

    【讨论】:

    • 两个命令都为我返回 False,但我启用了 Hyper-V 虚拟化。
    【解决方案2】:

    我认为原始发帖人是在询问如何检测计算机硬件是否支持虚拟化,而不是它是否在虚拟机中运行。请参阅this question 以获得可能的答案。

    此外,您是否可以检查 CPU 标志可能值得一看,因为如果处理器支持虚拟化扩展,则会有 Intel vmx 标志或 AMD svm 标志。我不能说我知道在 Windows 下应该如何完成,但在 Linux 上的/proc/cpuinfo 中提供了信息。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 完全像这个应用程序 - 但我需要在代码中完成。我搜索了 WMI 查询结果的高低,找不到任何似乎连接到硬件虚拟化的属性
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-27
        • 1970-01-01
        • 2017-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多