最近我从 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 凭据管理器中匹配密码。
1 | GetEncryptionVmGuidFromConfigFile: Fetching encryptedVM.guid from config file |
而 Workstation 26H1 的鉴权:
废弃了 GUID 匹配,转而采用直观的虚拟机完整路径作为凭据名称。升级后,源虚拟机因被 26H1 成功挂载,触发了自动迁移,在凭据管理器中生成了新的路径式凭据记录:
1 | VMware Encrypted VM: D:\Virtual Machines\Windows 11\Windows 11.vmx |
由于克隆机未经历这一迁移,凭据管理器中不存在指向克隆机 .vmx 路径的条目。当 26H1 尝试启动克隆机时,出现如下鉴权失败日志并要求手动干预:
1 | Failed to find credential for D:\Virtual Machines\Windows 11 Clone\Windows 11 Clone.vmx, searching... |
解决方案:凭据提取并重新输入密码
因为源虚拟机与克隆机的 encryption.keySafe 值完全一致,这说明克隆机继承了被克隆虚拟机的加密口令。故我们可以采用提取原始凭据重新输入到克隆虚拟机的操作。
此处的关键技术参考来自 GitHub 开发者 andshrew 提供的方案:Retrieving VMware Workstation VM encryption passwords。
虽然 Windows 凭据管理器的图形界面不会显示密码明文,但当前用户可通过 Win32 CredReadW API 读取自身保存的通用凭据。
修复操作
定位源虚拟机凭据: 直接在 Windows 11 底部自带的搜索内搜索
凭据管理器,点击进入后点击Windows 凭据,寻找目标凭据,源虚拟机对应的完整凭据名称看上去应该像{833AB4F5-587E-4B11-9260-4DB13742FA7F}一样提取明文密码: 使用 andshrew 提供的 PowerShell/C# 脚本,调用
CredReadW提取目标凭据的密码,并按照 ANSI 或 UTF-8 字节编码解析,避免数据截断或乱码等问题输入提取出的密码:
- 将提取出的明文密码填入克隆虚拟机的 VMware 解锁提示框。
- 勾选
Remember the password on this machine in Credential Manager。 - 此时应成功解锁虚拟机并能看到各项指标。
验证状态: 观察日志或者完全重启 VMware 确认了新凭据已成功持久化:
Text 1
Password for VMware Encrypted VM: <克隆路径> saved to Credential Manager
修复完成后,凭据管理器将会独立维护源虚拟机与克隆虚拟机的凭据,此为 26H1 的标准行为,无需理会。
吐槽:还是多存一份密码比较好。