菜单

Windows 启动过程

相关源文件

本文档介绍了 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_paramventoy_windows_data 结构中准备引导参数。

关键参数包括:

  • ISO 文件位置和大小
  • 访问 ISO 的磁盘参数
  • Windows 特定的选项,如自动安装脚本
  • Windows 11 兼容性设置

来源

WIM 补丁集合

对于 Windows ISO,Ventoy 需要收集将在启动过程中应用的 WIM(Windows 映像格式)补丁。这些补丁对于正确的 Windows 安装初始化至关重要。

WIM 补丁收集过程:

  1. 扫描引导配置数据 (BCD) 中的 WIM 文件
  2. 构建要应用的 WIM 补丁列表
  3. 验证补丁
  4. 准备供 vtoyjump 实用程序使用

来源

VtoyJump 实用程序

Ventoy Windows 启动过程中的核心组件是 vtoyjump 实用程序,它有两种版本:32 位和 64 位(vtoyjump32.exevtoyjump64.exe)。这个 Windows 可执行文件运行在 Windows PE 环境中,并执行几个关键功能:

  1. 读取 Ventoy 参数结构
  2. 检查并验证操作系统参数
  3. 确定挂载 ISO 的适当方法
  4. 使用 Windows API 或 IMDisk 挂载 ISO 文件
  5. 处理特殊情况和兼容性问题
  6. 启动 Windows 安装过程

来源

ISO 挂载方法

Ventoy 根据 Windows 版本使用两种不同的方法来挂载 Windows ISO 文件:

1. Windows API 方法(适用于 Windows 8 及更高版本)

对于较新版本的 Windows(Windows 8+),Ventoy 使用本地 Windows 虚拟磁盘 API。

代码使用以下函数:

  • OpenVirtualDisk()
  • AttachVirtualDisk()
  • GetVirtualDiskPhysicalPath()

此方法是首选,因为它内置于操作系统中,无需额外驱动程序。

2. IMDisk 方法(适用于较旧的 Windows 版本)

对于不支持虚拟磁盘 API 的 Windows 7 及更早版本,Ventoy 使用 IMDisk 虚拟磁盘驱动程序。

此方法:

  1. 从 Ventoy 分区复制 IMDisk 驱动程序和实用程序
  2. 加载 IMDisk 驱动程序
  3. 使用 IMDisk 挂载 ISO 文件

来源

特殊情况与优化

Ventoy 包含针对 Windows 启动的几项特殊情况处理和优化:

1. 跳过 ISO 挂载

对于某些可以自动查找 ISO 文件的 Windows PE 发行版,Ventoy 可以跳过挂载步骤。

if (CheckSkipMountIso(IsoPath))
{
    Log("Skip mount ISO file for <%s>", IsoPath);
    return 0;
}

2. Windows 版本检测

Ventoy 检测 Windows 版本以应用适当的处理。

3. 驱动器号选择

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';
}

来源

Windows 安装启动与自动安装

挂载 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 安装程序。该过程包括:

  1. 操作系统检测和参数设置
  2. 用于 Windows 启动文件的 WIM 补丁收集
  3. VtoyJump 实用程序,用于 Windows 特定的启动处理
  4. 使用 Windows API 或 IMDisk 进行 ISO 挂载
  5. 特殊情况处理和优化
  6. Windows 安装启动,可选自动安装

此过程允许 Ventoy 直接从 Windows ISO 文件启动,无需解压,为用户创建包含 Windows 安装程序的多重启动 U 盘提供了无缝体验。