VMware Workstation 此平台不支持虚拟化的 Intel VT-x/EPT …不支持嵌套虚拟化。模块“HV”启动失败…不支持使用虚拟化性能计数器。模块“VPMC“启动失败

安装 VMware Workstation Pro 前提条件

  • 兼容的多核 64 位(x86)处理器(1.3 GHz 或更高)

  • 至少 4 GB 内存

  • 至少 1.2 GB 可用磁盘空间

  • BIOS / UEFI 中开启硬件虚拟化功能

问题 1:此平台不支持虚拟化的 Intel VT-x/EPT。不使用虚拟化的 Intel VT-x/EPT,是否继续?

解决步骤

【任务管理器】视图查看系统虚拟化功能状态

ctrl + shift + esc 打开任务管理器,切换到【性能】,查看 CPU 视图中【虚拟化:已启用

或 命令查看系统虚拟化功能状态

管理员运行 Powershell 查看

PS C:\WINDOWS\system32> gcim Win32_Processor | fl VirtualizationFirmwareEnabled
VirtualizationFirmwareEnabled : True

管理员运行 cmd 查看

C:\WINDOWS\system32>wmic cpu get VirtualizationFirmwareEnabled
VirtualizationFirmwareEnabled
TRUE

Virtualization 是一个与系统和主板设置都有关的功能。返回值(True / False)表示系统中的虚拟化功能是否已在主板的固件(BIOS或UEFI)中启用支持。

主板(BIOS或UEFI)“Intel VT-x”、“AMD-V” 被禁用,设置开启虚拟化参考步骤

:实际操作可能因主板厂商和固件版本而有所不同。

VT(Virtualization Technology,虚拟化技术),x86 平台称之为 VT-x;Itanium 平台称之为 VT-i;AMD 平台称之为 AMD-V(SVM)。

  1. 重启计算机并按下相应的按键(通常在计算机开机画面上会显示提示信息)

  2. 进入固件设置界面,使用方向键、PgUp / PgDn菜单跳转(UEFI 主板支持鼠标操作),回车键选择浏览选项

  3. 查找虚拟化相关的选项。通常会在高级设置或者 CPU 设置等相关功能区中找到,可能会包含诸如"Virtualization Technology"、“Intel VT-x”、"AMD-V(SVM)"等类似的字样

  4. 将相关选项设置为【启用】或【Enabled】

  5. 保存设置并退出固件设置

启动热键参考表

主板品牌启动按犍笔记本品牌启动按键台式机品牌启动按键
华硕F8戴尔F12联想F12
技嘉F12神舟F12惠普F12
微星F11东芝F12宏碁F12
映泰F9三星F12戴尔ESC
梅捷ESC 或 F12IBMF12神舟F12
七彩虹ESC 或 F11富士通F12华硕F8
华擎F11海尔F12方正F12
斯巴达克ESC方正F12清华同方F12
昂达F11清华同方F12海尔F12
双敏ESC微星F11明基F8
翔升F10明基F9
精英ESC 或 F11技嘉F12
冠盟F11 或 F12GatewayF12
富士康ESC 或 F12eMachinesF12
顶星F11 或 F12索尼ESC
铭瑄ESC苹果长按 “option" 键
盈通F8
捷波ESC
IntelF12
杰微ESC 或 F8
致铭F12
磐英ESC
磐正ESC
冠铭F9

问题 2:VMware Workstation 不支持在此主机上使用虚拟化性能计数器。模块"VPMC"启动失败。

在这里插入图片描述

官方解决方案

Workaround:

Note: vPMC must be disabled before attempting to power on a VM using ULM. Disabling vPMC requires the VM to be in a powered-off state (not suspended).

In Fusion:

  1. Power off the VM. For suspended VM, click the Virtual Machine menu, press and hold the ‘option’ key, then click Power Off.
  2. Open VM Machine from the menu bar,
  3. Choose Settings
  4. Click Processors&Memory > Advanced options
  5. Uncheck the option ‘Enable code profiling applications in this virtual machine’ and close the settings window.
  6. Power on the VM.

In Workstation / Workstation Player:

  1. Power off the VM.
  2. Open VM Settings and select “Processors” in “Hardware” table.
  3. Uncheck the option ‘Virtualize CPU performance counters’ in the right panel.
  4. Click OK to save and close the setting window.
  5. Power on the VM.

首先确认主板 BIOS 里的虚拟技术支持已打开,然后在 VMware 虚拟机设置中取消【虚拟化 CPU 性能计数器】。

VMware 虚拟机设置中,【硬件】→【处理器】,取消【虚拟化CPU性能计数器(U)】→确定

sizesmall

问题 3:VMware Workstation 在此主机上不支持嵌套虚拟化。模块“HV”启动失败。未能启动虚拟机。

错误消息说明物理主机上的虚拟化平台(如Hyper-V)正在使用硬件辅助虚拟化功能,并且与 VMware Workstation 的嵌套虚拟化功能相冲突。

嵌套虚拟化

在虚拟化系统中,"嵌套"通常指在一个虚拟机中运行另一个虚拟机。即将一个虚拟机作为另一个虚拟机的"物理主机"来运行。

虚拟化功能相冲突的解决方法选择

1、如果使用 VMware Workstation 中的虚拟化引擎对虚拟机中的工作负载和应用程序更稳定、高效,禁用 Hyper-V 并启用 VMware 的虚拟化引擎更合适。

2、如果使用 Hyper-V 或使用依赖于 Hyper-V 的特定的功能和生态系统,启用 Hyper-V 并禁用 VMware 的虚拟化引擎更合适。

这两种方法都能解决 VMware Workstation 和 Hyper-V 之间的虚拟化功能冲突问题,根据具体使用场景需求选择。

禁用虚拟化功能可能产生的影响

禁用 Hyper-V 可能会导致一些依赖于 Hyper-V 的功能(如 Windows 容器)无法正常工作。

禁用 VMware 的虚拟化引擎可能会导致 VMware Workstation 中的虚拟机性能下降或不稳定甚至不能用。

下文的解决方案是在 VMware Workstation 中使用 linux 系统的情形,适用上述解决方法 1

1. 禁用系统 Hyper-V 功能

管理员身份运行 cmd

C:\WINDOWS\system32>dism /Online /Disable-Feature:Microsoft-Hyper-V

部署映像服务和管理工具
版本: 10.0.19041.844
映像版本: 10.0.19045.2965

禁用一个或多个功能
[==========================100.0%==========================]
操作成功完成。

2. 禁用系统引导 Hyper-V 功能加载

管理员身份运行 cmd

C:\WINDOWS\system32>bcdedit /set hypervisorlaunchtype off
操作成功完成。

3. 重启计算机

C:\WINDOWS\system32>shutdown /r

4. 查看相关设置是否生效

4.1 【内核隔离】状态【】。

vm02

内核隔离】关闭后,重启计算机 ELAM(Early Lunch Anti-Malware,提前启动反恶意软件)将被变更为标准启动过程。

4.2 【基于虚拟化的安全性】【未启用

WIN + R,输入

msinfo32

确定
msinfo32

4.3 【HV主机服务】【禁用

WIN + R,输入

services.msc

确定

services.msc

Windows 版本功能限制

上述设置在专业版、专业工作站版、教育版、企业版上都没有问题。家庭版经獬豸 (xièzhì) 同学测试留言反馈(20240626),也没问题。

5. 关于本文未采用其他博文中高频提到的两个步骤禁用相关功能的说明

5.1 关于禁用 Device Guard

Device Guard 为 Windows 10/11 提供了一组安全功能,用于保护设备免受恶意软件和未经授权的代码执行的威胁。它通过使用硬件和软件的安全特性来确保只有受信任的应用程序和驱动程序才能在设备上运行。

Isolated User Mode (IUM) 是 Device Guard 的一个关键组成部分,它利用虚拟化技术在 Windows 内核中创建了一个与主操作系统隔离的环境,该环境可以运行受信任的安全服务和应用程序。IUM 使用了 Windows Hypervisor Platform (WHP) 技术来实现虚拟化和隔离,确保 IUM 中运行的代码无法直接干扰主操作系统的正常运行。

Isolaunch 是 IUM 中的提供安全启动过程的一个组件,它负责启动 IUM 环境并加载相应的安全服务和应用程序,确保只有经过认证的代码可以进入 IUM 环境。通过 Isolaunch,Device Guard 可以保证只有受信任的代码运行在被隔离的环境中,从而提高设备的安全性。

禁用 Device Guard 对依赖 Device Guard 的组件功能的影响

  1. Isolated User Mode (IUM)
    IUM 是 Device Guard 的一个关键组成部分,禁用 Device Guard 将导致 IUM 无法正常工作。
    隔离用户模式 (IUM) 进程 - Win32 apps | Microsoft Learn
  2. Windows Defender Application Control
    Windows Defender Application Control 是一项安全功能,它通过应用程序控制策略限制只允许运行受信任的应用程序。
    关闭 Device Guard会导致 Windows Defender Application Control 的应用程序控制策略失效,从而降低系统的安全性。
    Windows 应用程序控制 - Windows Security | Microsoft Learn
  3. Virtualization-based Security(VBS)
    Device Guard 使用 VBS 技术来提供硬件虚拟化和隔离,以保护核心系统和安全相关的数据。关闭 Device Guard 可能会影响 VBS 相关的安全功能。
    基于虚拟化的安全 (VBS) | Microsoft Learn
  4. Credential Guard
    Credential Guard 依赖于 Device Guard 来提供硬件和软件的安全特性。关闭 Device Guard 可能会导致 Credential Guard 失效。
    Credential Guard 概述 - Windows Security | Microsoft Learn
  5. Windows Defender Exploit Guard
    Device Guard 与 Windows Defender Exploit Guard 集成共同提供防护机制,关闭 Device Guard 可能会影响 Windows Defender Exploit Guard 的一些功能。
    Microsoft Defender 应用程序防护 - Windows Security | Microsoft Learn

为了 最小限度降低系统安全性 可以使用 bcdedit /set hypervisorlaunchtype off 针对 Isolaunch 操作,以避免出现更多潜在的安全风险或兼容性问题,虽然可能会影响其他与 IUM 相关的安全组件和功能的正常运行。

5.2 关于禁用所有 Hyper-V 相关服务

禁用 HV 附加服务

命令 bcdedit /set hypervisorlaunchtype off 会关闭 Hyper-V 自动加载, 其它依赖于 HV 主机服务的附加服务也不起作用了。

如需禁用与 HV 主机服务相关的附加服务,可以使用以下任意一条命令

管理员身份运行 cmd

C:\WINDOWS\system32>dism /online /disable-feature /featurename:Microsoft-hyper-v-all

或 以管理员身份运行 PowerShell

PS C:\WINDOWS\system32>Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

6. 恢复 Hyper-V 服务

如需重新恢复,可以使用以下命令

C:\WINDOWS\system32>bcdedit /set hypervisorlaunchtype auto

命令涉及 dism /online /disable-feature 的改为 dism /online /enable-feature

根据具体情况决定是否全部禁用 Device Guard 及与 Hyper-V 相关的服务

提示

由于不同计算机的硬件组成、系统环境可能存在一些差别,参考文中步骤未解决的,请自行处理,无需留言,不再回复 !


扩展阅读

### 解决 `strstr` 查找失败的问题 当使用 `strstr` 函数查找子串时遇到问题,通常是因为输入参数不符合预期或环境设置不当。以下是几种可能的原因及其解决方案: #### 输入验证不足 如果传入给 `strstr` 的两个参数中有任何一个为空指针,则会引发未定义行为。因此,在调用之前应该先检查这两个字符串是否有效。 ```cpp if (a == nullptr || b == nullptr) { // 处理错误情况 } char* result = strstr(a, b); ``` #### 子串不存在于主串中 按照函数说明[^1],若找不到匹配项则返回 NULL。此时程序逻辑需能够正确处理这种情况而不会崩溃或者陷入死循环。 #### 编码方式差异 确保源文件编码格式一致,特别是对于含有特殊字符的情况。不同平台间可能存在兼容性问题,比如 Windows 和 Linux 对 UTF-8 支持程度有所区别。 #### 使用场景超出范围 注意 `strstr` 不适用于二进制数据搜索;它只适合纯文本比较。因为该方法依赖于零结尾来判断字符串结束位置。 #### 非 ASCII 字符集支持 某些情况下,多字节字符可能会导致意外的结果。可以考虑采用更高级别的库如 ICU 来替代基本的 C 库函数以获得更好的国际化特性支持[^3]。 为了更好地理解上述建议的应用,请参阅下面的例子代码片段: ```cpp #include <iostream> #include <cstring> void safe_strstr(const char* haystack, const char* needle){ if(haystack==nullptr||needle==nullptr){ std::cout << "Invalid input."<<std::endl; return ; } char *result=strstr(haystack , needle ); if(result != nullptr ){ printf("Substring found at index %ld\n", result-haystack ); }else{ puts("No match found."); } } int main(){ const char *text="hello world"; const char *pattern="world"; safe_strstr(text,pattern); return 0; } ``` 通过以上措施可以帮助减少因误用而导致的查找失败现象发生率,并提高代码健壮性和可靠性。
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值