vt_windows_chain_data "${1}${chosen_path}"
ventoy_debug_pause
+ if vt_check_mode 4; then
+ vtoy_windows_wimboot_func
+ fi
+
if [ -n "$vtoy_chain_mem_addr" ]; then
ventoy_acpi_param ${vtoy_chain_mem_addr} 2048
ventoy_cli_console
}
-function legacy_windows_wimboot_func {
- set wimbootfile=(loop)/sources/boot.wim
- set wimbit=64
+function vtoy_windows_wimboot_func {
+ if [ -f (loop)/x86/sources/boot.wim -a -f (loop)/x64/sources/boot.wim ]; then
+ vt_sel_wimboot vtoy_wimboot_bit
+ if [ "$vtoy_wimboot_bit" = "32" ]; then
+ set vtoy_wimboot_prefix=(loop)/x86
+ else
+ set vtoy_wimboot_prefix=(loop)/x64
+ fi
+ else
+ set vtoy_wimboot_prefix=(loop)
+ if vt_is_pe64 $vtoy_wimboot_prefix/setup.exe; then
+ set vtoy_wimboot_bit=64
+ else
+ set vtoy_wimboot_bit=32
+ fi
+ fi
+
+ if [ -n "${vtdebug_flag}" ]; then
+ echo vtoy_wimboot_prefix=$vtoy_wimboot_prefix vtoy_wimboot_bit=$vtoy_wimboot_bit
+ fi
- vt_windows_wimboot_data
+ for wmfile in sources/boot.wim boot/bcd boot/boot.sdi; do
+ if [ ! -f $vtoy_wimboot_prefix/$wmfile ]; then
+ return
+ fi
+ done
- linux16 $vtoy_efi_part/ventoy/wimboot quiet
- ventoy_debug_pause
+ if [ -f $vtoy_wimboot_prefix/sources/install.wim -o -f $vtoy_wimboot_prefix/sources/install.esd ]; then
+ vt_windows_wimboot_data
+ else
+ return
+ fi
- echo Loading files...... (This may take a few minutes, please wait.)
- initrd16 newc:vtoyjump.exe:$vtoy_efi_part/ventoy/vtoyjump${wimbit}.exe \
- newc:wimboot.data:mem:${vtoy_wimboot_mem_addr}:size:${vtoy_wimboot_mem_size} \
- newc:winpeshl.ini:$vtoy_efi_part/ventoy/winpeshl.ini \
- newc:bcd:(loop)/boot/bcd \
- newc:boot.sdi:(loop)/boot/boot.sdi \
- newc:boot.wim:$wimbootfile
- boot
+ if [ "$grub_platform" = "pc" ]; then
+ set vt_wimkernel=wimboot.x86_64.xz
+
+ linux16 "$vtoy_path/$vt_wimkernel" quiet
+ ventoy_debug_pause
+
+ echo Loading files...... (This may take a few minutes, please wait)
+ initrd16 newc:vtoyjump.exe:$vtoy_path/vtoyjump${vtoy_wimboot_bit}.exe \
+ newc:wimboot.data:mem:${vtoy_wimboot_mem_addr}:size:${vtoy_wimboot_mem_size} \
+ newc:winpeshl.ini:mem:${vtoy_winpeshl_ini_addr}:size:${vtoy_winpeshl_ini_size} \
+ newc:bcd:$vtoy_wimboot_prefix/boot/bcd \
+ newc:boot.sdi:$vtoy_wimboot_prefix/boot/boot.sdi \
+ newc:boot.wim:$vtoy_wimboot_prefix/sources/boot.wim
+ boot
+ else
+ if [ "$grub_cpu" = "i386" ]; then
+ set vt_wimkernel=wimboot.i386.efi.xz
+ else
+ set vt_wimkernel=wimboot.x86_64.xz
+ fi
+
+ echo Loading files...... (This may take a few minutes, please wait)
+ vt_load_file_to_mem "nodecompress" $vtoy_wimboot_prefix/sources/boot.wim vtoy_wimfile_mem
+ if [ $? -eq 0 ]; then
+ set vtoy_wimfile_path=mem:${vtoy_wimfile_mem_addr}:size:${vtoy_wimfile_mem_size}
+ else
+ set vtoy_wimfile_path=$vtoy_wimboot_prefix/sources/boot.wim
+ fi
+
+ ventoy_cli_console
+ chainloader "$vtoy_path/$vt_wimkernel" quiet \
+ "vf=wimboot.data:mem:${vtoy_wimboot_mem_addr}:size:${vtoy_wimboot_mem_size}" \
+ "vf=winpeshl.ini:mem:${vtoy_winpeshl_ini_addr}:size:${vtoy_winpeshl_ini_size}" \
+ "vf=vtoyjump.exe:$vtoy_path/vtoyjump${vtoy_wimboot_bit}.exe" \
+ "vf=bcd:$vtoy_wimboot_prefix/boot/bcd" \
+ "vf=boot.sdi:$vtoy_wimboot_prefix/boot/boot.sdi" \
+ "vf=boot.wim:$vtoy_wimfile_path" \
+ pfsize=$vtoy_chain_file_size \
+ pfread=$vtoy_chain_file_read
+ boot
+ ventoy_gui_console
+ fi
}
function legacy_windows_menu_func {
ventoy_debug_pause
if vt_check_mode 4; then
- legacy_windows_wimboot_func
+ vtoy_windows_wimboot_func
fi
if [ -n "$vtoy_chain_mem_addr" ]; then