本文档介绍了 Ventoy 如何从 ISO 文件启动 Windows 操作系统。它涵盖了启动顺序、涉及的组件以及 Windows 特定启动过程的技术实现。有关 Linux 启动过程的信息,请参阅 Linux 启动流程。
与 Linux 相比,Ventoy 在启动 Windows ISO 方面采用了不同的方法。Windows 需要特殊处理才能正确挂载 ISO 文件并启动安装过程。启动过程涉及几个关键组件,包括 GRUB 引导加载程序、Ventoy 的 Windows 特定模块以及作为 Ventoy 与 Windows 安装环境之间桥梁的 vtoyjump 实用程序。
来源
来源
Ventoy 首先通过检查 Windows ISO 文件的结构和内容来确定它是否是 Windows 安装程序。识别为 Windows ISO 后,Ventoy 会在 ventoy_os_param 和 ventoy_windows_data 结构中准备引导参数。
关键参数包括:
来源
对于 Windows ISO,Ventoy 需要收集将在启动过程中应用的 WIM(Windows 映像格式)补丁。这些补丁对于正确的 Windows 安装初始化至关重要。
WIM 补丁收集过程:
vtoyjump 实用程序使用来源
Ventoy Windows 启动过程中的核心组件是 vtoyjump 实用程序,它有两种版本:32 位和 64 位(vtoyjump32.exe 和 vtoyjump64.exe)。这个 Windows 可执行文件运行在 Windows PE 环境中,并执行几个关键功能:
来源
Ventoy 根据 Windows 版本使用两种不同的方法来挂载 Windows ISO 文件:
对于较新版本的 Windows(Windows 8+),Ventoy 使用本地 Windows 虚拟磁盘 API。
代码使用以下函数:
OpenVirtualDisk()AttachVirtualDisk()GetVirtualDiskPhysicalPath()此方法是首选,因为它内置于操作系统中,无需额外驱动程序。
对于不支持虚拟磁盘 API 的 Windows 7 及更早版本,Ventoy 使用 IMDisk 虚拟磁盘驱动程序。
此方法:
来源
Ventoy 包含针对 Windows 启动的几项特殊情况处理和优化:
对于某些可以自动查找 ISO 文件的 Windows PE 发行版,Ventoy 可以跳过挂载步骤。
if (CheckSkipMountIso(IsoPath))
{
Log("Skip mount ISO file for <%s>", IsoPath);
return 0;
}
Ventoy 检测 Windows 版本以应用适当的处理。
Ventoy 智能选择可用的驱动器号,并对特定环境进行特殊处理。
// fixed use M as mountpoint for 2K10 PE
if (Is2K10PE())
{
Log("Use M: for 2K10 PE");
return 'M';
}
//fixed use Z as mountpoint for Lenovo Product Recovery
if (strcmp(suffix, "VTLRI") == 0)
{
return 'Z';
}
来源
挂载 ISO 后,Ventoy 会启动 Windows 安装过程。Ventoy 还支持使用应答文件进行 Windows 自动安装。
| 功能 | 描述 | 实现 |
|---|---|---|
| 自动安装 | 使用应答文件自动运行 Windows 安装程序 | 使用 ventoy_windows_data 中的 auto_install_script 字段 |
| 注入归档 | 向 Windows 安装程序添加其他驱动程序或文件 | 使用 ventoy_windows_data 中的 injection_archive 字段 |
| Windows 11 绕过 | 绕过 Windows 11 系统要求检查 | 使用 windows11_bypass_check 标志 |
自动安装脚本可以在 ventoy.json 配置文件中提供,然后嵌入到 ventoy_windows_data 结构中供 VtoyJump 处理。
来源
Ventoy 的 Windows 启动流程是一个复杂的操作链,从 GRUB 引导菜单选择到最终交给 Windows 安装程序。该过程包括:
此过程允许 Ventoy 直接从 Windows ISO 文件启动,无需解压,为用户创建包含 Windows 安装程序的多重启动 U 盘提供了无缝体验。