最近我从 VMware Workstation 旧版本升级至 VMware Workstation 26H1 后,电脑里的 Windows 11 克隆虚拟机无法直接打开,提示如下:

This virtual machine is encrypted.
You must enter its password to continue.

而现象表现为:源虚拟机(被复制的)可正常启动,且能通过 Windows 凭据管理器存储的密码自动解锁;而升级前运行完全正常的克隆虚拟机却触发了密码拦截。

核心机制——凭据索引方式变更

要理解故障成因,首先需要知道 Windows 11 虚拟机被加密的原因。由于 Windows 11 强依赖于 TPM 2.0,而在添加虚拟 TPM(vTPM)后,VMware 强制要求对虚拟机的敏感配置进行加密。

日志分析

VMware 运行日志记录了版本升级前后的机制差异。

旧版 Workstation 的鉴权:

依赖 .vmx 文件中的 encryptedVM.guid 作为唯一标识,去 Windows 凭据管理器中匹配密码。

Text
1
2
3
GetEncryptionVmGuidFromConfigFile: Fetching encryptedVM.guid from config file
GetSavedEncryptionPassword: encryptedVM.guid found in config file
GetSavedEncryptionPassword: Reading credential manager

而 Workstation 26H1 的鉴权:

废弃了 GUID 匹配,转而采用直观的虚拟机完整路径作为凭据名称。升级后,源虚拟机因被 26H1 成功挂载,触发了自动迁移,在凭据管理器中生成了新的路径式凭据记录:

Text
1
VMware Encrypted VM: D:\Virtual Machines\Windows 11\Windows 11.vmx

由于克隆机未经历这一迁移,凭据管理器中不存在指向克隆机 .vmx 路径的条目。当 26H1 尝试启动克隆机时,出现如下鉴权失败日志并要求手动干预:

Text
1
2
Failed to find credential for D:\Virtual Machines\Windows 11 Clone\Windows 11 Clone.vmx, searching...
VMEncryptor_GetEncryptedPassword: Failed to get the encrypted key for vm config file.

解决方案:凭据提取并重新输入密码

因为源虚拟机与克隆机的 encryption.keySafe 值完全一致,这说明克隆机继承了被克隆虚拟机的加密口令。故我们可以采用提取原始凭据重新输入到克隆虚拟机的操作。

此处的关键技术参考来自 GitHub 开发者 andshrew 提供的方案:Retrieving VMware Workstation VM encryption passwords

虽然 Windows 凭据管理器的图形界面不会显示密码明文,但当前用户可通过 Win32 CredReadW API 读取自身保存的通用凭据。

修复操作

  1. 定位源虚拟机凭据: 直接在 Windows 11 底部自带的搜索内搜索凭据管理器,点击进入后点击Windows 凭据,寻找目标凭据,源虚拟机对应的完整凭据名称看上去应该像{833AB4F5-587E-4B11-9260-4DB13742FA7F}一样

  2. 提取明文密码: 使用 andshrew 提供的 PowerShell/C# 脚本,调用 CredReadW 提取目标凭据的密码,并按照 ANSI 或 UTF-8 字节编码解析,避免数据截断或乱码等问题

  3. 输入提取出的密码:

    • 将提取出的明文密码填入克隆虚拟机的 VMware 解锁提示框。
    • 勾选 Remember the password on this machine in Credential Manager
    • 此时应成功解锁虚拟机并能看到各项指标。
  4. 验证状态: 观察日志或者完全重启 VMware 确认了新凭据已成功持久化:

    Text
    1
    Password for VMware Encrypted VM: <克隆路径> saved to Credential Manager

修复完成后,凭据管理器将会独立维护源虚拟机与克隆虚拟机的凭据,此为 26H1 的标准行为,无需理会。

吐槽:还是多存一份密码比较好。