function vt_check_compatible_pe {
#Check for PE without external tools
#set compatible if ISO file is less than 80MB
- if [ $vt_chosen_size -gt 33554432 -a $vt_chosen_size -le 83886080 ]; then
+ if [ $vt_chosen_size -GT 33554432 -a $vt_chosen_size -LE 83886080 ]; then
set ventoy_compatible=YES
fi
function uefi_windows_menu_func {
vt_windows_reset
- if [ "$ventoy_compatible" = "NO" ]; then
-
- if [ "$ventoy_fs_probe" = "iso9660" ]; then
- loopback -d loop
- vt_iso9660_nojoliet 1
- loopback loop "$1$2"
- fi
-
- for file in "efi/microsoft/boot/bcd"; do
- vt_windows_collect_wim_patch bcd (loop)/$file
- done
+ if vt_check_mode 4 "$vt_chosen_name"; then
+ vt_windows_chain_data "${1}${chosen_path}"
+ ventoy_debug_pause
+ vtoy_wimboot_func
+ else
+ if [ "$ventoy_compatible" = "NO" ]; then
+
+ if [ "$ventoy_fs_probe" = "iso9660" ]; then
+ loopback -d loop
+ vt_iso9660_nojoliet 1
+ loopback loop "$1$2"
+ fi
+
+ for file in "efi/microsoft/boot/bcd"; do
+ vt_windows_collect_wim_patch bcd (loop)/$file
+ done
- vt_windows_count_wim_patch vt_wim_cnt
- if [ $vt_wim_cnt -eq 0 ]; then
- distro_specify_wim_patch_phase2
+ vt_windows_count_wim_patch vt_wim_cnt
+ if [ $vt_wim_cnt -eq 0 ]; then
+ distro_specify_wim_patch_phase2
+ fi
+
+ ventoy_debug_pause
+ locate_wim "${chosen_path}"
fi
-
- ventoy_debug_pause
- locate_wim "${chosen_path}"
+ vt_windows_chain_data "${1}${chosen_path}"
+ ventoy_debug_pause
fi
- vt_windows_chain_data "${1}${chosen_path}"
- ventoy_debug_pause
-
- if vt_check_mode 4 "$vt_chosen_name"; then
- vtoy_windows_wimboot_func
- fi
-
if [ -n "$vtoy_chain_mem_addr" ]; then
ventoy_acpi_param ${vtoy_chain_mem_addr} 2048
ventoy_cli_console
vt_linux_chain_data "${1}${chosen_path}"
- if [ -n "$LoadIsoEfiDriver" -a $vt_chosen_size -lt 104857600 ]; then
+ if [ -n "$LoadIsoEfiDriver" -a $vt_chosen_size -LT 104857600 ]; then
if [ -f (loop)/efi/clover/cloverx64.efi ]; then
unset LoadIsoEfiDriver
fi
ventoy_gui_console
}
-
-function vtoy_windows_wimboot_func {
+function vtoy_windows_wimboot {
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
fi
if [ -n "${vtdebug_flag}" ]; then
- echo vtoy_wimboot_prefix=$vtoy_wimboot_prefix vtoy_wimboot_bit=$vtoy_wimboot_bit
+ echo vtoy_wimboot_prefix=$vtoy_wimboot_prefix vtoy_wimboot_bit=$vtoy_wimboot_bit vt_wimkernel=$vt_wimkernel
fi
for wmfile in sources/boot.wim boot/bcd boot/boot.sdi; do
done
if [ -f $vtoy_wimboot_prefix/sources/install.wim -o -f $vtoy_wimboot_prefix/sources/install.esd ]; then
- vt_windows_wimboot_data
+ vt_windows_wimboot_data "$vtoy_wimboot_prefix/sources/boot.wim" vtoy_init_exe
else
return
fi
if [ "$grub_platform" = "pc" ]; then
- set vt_wimkernel=wimboot.x86_64.xz
-
linux16 "$vtoy_path/$vt_wimkernel" quiet
ventoy_debug_pause
vt_set_wim_load_prompt 1 "Loading files......"
- 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} \
+ initrd16 newc:winpeshl.exe:mem:${vtoy_wimboot_mem_addr}:size:${vtoy_wimboot_mem_size} \
+ newc:vtoy_wimboot:$vtoy_wimboot_prefix/boot/bcd \
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
vt_set_wim_load_prompt 0
boot
else
- if [ "$grub_cpu" = "i386" ]; then
- set vt_wimkernel=wimboot.i386.efi.xz
- else
- set vt_wimkernel=wimboot.x86_64.xz
- fi
-
vt_set_wim_load_prompt 1 "Loading files......"
vt_load_file_to_mem "nodecompress" $vtoy_wimboot_prefix/sources/boot.wim vtoy_wimfile_mem
vt_set_wim_load_prompt 0
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=winpeshl.exe:mem:${vtoy_wimboot_mem_addr}:size:${vtoy_wimboot_mem_size}" \
+ "vf=vtoy_wimboot:$vtoy_wimboot_prefix/boot/bcd" \
"vf=bcd:$vtoy_wimboot_prefix/boot/bcd" \
"vf=boot.sdi:$vtoy_wimboot_prefix/boot/boot.sdi" \
"vf=boot.wim:$vtoy_wimfile_path" \
fi
}
-function legacy_windows_menu_func {
- vt_windows_reset
+function vtoy_winpe_wimboot {
+ unset vtoy_boot_mgr_exe
+ unset vtoy_boot_mgr_efi
+ set vtoy_wimboot_prefix=(loop)
+ set vtoy_bcd_path="$1"
+ set vtoy_sdi_path="$2"
+ set vtoy_wim_path="$3"
+ set vtoy_mgr_flag="$4"
- if [ "$ventoy_compatible" = "NO" ]; then
-
- if [ "$ventoy_fs_probe" = "iso9660" ]; then
- loopback -d loop
- vt_iso9660_nojoliet 1
- loopback loop "$1$2"
+ if [ $vtoy_mgr_flag -eq 1 ]; then
+ set vtoy_boot_mgr_exe="newc:bootmgr.exe:$vtoy_wimboot_prefix/$5"
+ elif [ $vtoy_mgr_flag -eq 2 ]; then
+ set vtoy_boot_mgr_efi="vf=bootmgr.efi:$vtoy_wimboot_prefix/$5"
+ elif [ $vtoy_mgr_flag -eq 3 ]; then
+ set vtoy_boot_mgr_exe="newc:bootmgr.exe:$vtoy_wimboot_prefix/$5"
+ set vtoy_boot_mgr_efi="vf=bootmgr.efi:$vtoy_wimboot_prefix/$6"
+ fi
+
+ vt_windows_wimboot_data $vtoy_wimboot_prefix/$vtoy_wim_path vtoy_init_exe
+
+ if [ "$grub_platform" = "pc" ]; then
+ linux16 "$vtoy_path/$vt_wimkernel" quiet
+ ventoy_debug_pause
+
+ vt_set_wim_load_prompt 1 "Loading files......"
+ initrd16 newc:$vtoy_init_exe:mem:${vtoy_wimboot_mem_addr}:size:${vtoy_wimboot_mem_size} \
+ $vtoy_boot_mgr_exe \
+ newc:vtoy_wimboot:$vtoy_wimboot_prefix/$vtoy_bcd_path \
+ newc:bcd:$vtoy_wimboot_prefix/$vtoy_bcd_path \
+ newc:boot.sdi:$vtoy_wimboot_prefix/$vtoy_sdi_path \
+ newc:boot.wim:$vtoy_wimboot_prefix/$vtoy_wim_path
+ vt_set_wim_load_prompt 0
+ boot
+ else
+ vt_set_wim_load_prompt 1 "Loading files......"
+ vt_load_file_to_mem "nodecompress" $vtoy_wimboot_prefix/$vtoy_wim_path vtoy_wimfile_mem
+ vt_set_wim_load_prompt 0
+
+ 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/$vtoy_wim_path
fi
-
- for file in "boot/bcd" "/efi/microsoft/boot/bcd" "SSTR/BCD" "boot/bce"; do
- vt_windows_collect_wim_patch bcd (loop)/$file
- done
-
- distro_specify_wim_patch
- vt_windows_count_wim_patch vt_wim_cnt
- if [ $vt_wim_cnt -eq 0 ]; then
- distro_specify_wim_patch_phase2
+ ventoy_cli_console
+ chainloader "$vtoy_path/$vt_wimkernel" quiet \
+ "vf=$vtoy_init_exe:mem:${vtoy_wimboot_mem_addr}:size:${vtoy_wimboot_mem_size}" \
+ "vf=vtoy_wimboot:$vtoy_wimboot_prefix/$vtoy_bcd_path" \
+ "$vtoy_boot_mgr_efi" \
+ "vf=bcd:$vtoy_wimboot_prefix/$vtoy_bcd_path" \
+ "vf=boot.sdi:$vtoy_wimboot_prefix/$vtoy_sdi_path" \
+ "vf=boot.wim:$vtoy_wimfile_path" \
+ pfsize=$vtoy_chain_file_size \
+ pfread=$vtoy_chain_file_read
+ boot
+ ventoy_gui_console
+ fi
+}
+
+function vtoy_wimboot_func {
+ echo -e "\n===================== VENTOY WIMBOOT ===================\n"
+
+ if [ "$grub_platform" = "pc" ]; then
+ set vt_wimkernel=wimboot.x86_64.xz
+ else
+ if [ "$grub_cpu" = "i386" ]; then
+ set vt_wimkernel=wimboot.i386.efi.xz
+ else
+ set vt_wimkernel=wimboot.x86_64.xz
fi
-
- ventoy_debug_pause
- locate_wim "${chosen_path}"
fi
- vt_windows_chain_data "${1}${chosen_path}"
- ventoy_debug_pause
+ if vt_str_begin "$vt_volume_id" "Modified-Win10PEx64"; then
+ vtoy_winpe_wimboot 'Boot/bcd' 'Boot/boot.sdi' 'sources/boot.wim' 1 'bootmgr.exe'
+ else
+ vtoy_windows_wimboot
+ fi
+}
+function legacy_windows_menu_func {
+ vt_windows_reset
+
if vt_check_mode 4 "$vt_chosen_name"; then
- vtoy_windows_wimboot_func
+ vt_windows_chain_data "${1}${chosen_path}"
+ ventoy_debug_pause
+ vtoy_wimboot_func
+ else
+ if [ "$ventoy_compatible" = "NO" ]; then
+
+ if [ "$ventoy_fs_probe" = "iso9660" ]; then
+ loopback -d loop
+ vt_iso9660_nojoliet 1
+ loopback loop "$1$2"
+ fi
+
+ for file in "boot/bcd" "/efi/microsoft/boot/bcd" "SSTR/BCD" "boot/bce"; do
+ vt_windows_collect_wim_patch bcd (loop)/$file
+ done
+
+ distro_specify_wim_patch
+
+ vt_windows_count_wim_patch vt_wim_cnt
+ if [ $vt_wim_cnt -eq 0 ]; then
+ distro_specify_wim_patch_phase2
+ fi
+
+ ventoy_debug_pause
+ locate_wim "${chosen_path}"
+ fi
+
+ vt_windows_chain_data "${1}${chosen_path}"
+ ventoy_debug_pause
fi
if [ -n "$vtoy_chain_mem_addr" ]; then
vt_chosen_img_path vt_chosen_path vt_chosen_size vt_chosen_name
vt_parse_iso_volume "${vtoy_iso_part}${vt_chosen_path}" vt_system_id vt_volume_id vt_volume_space
- if [ $vt_volume_space -ne $vt_chosen_size ]; then
+ if [ $vt_volume_space -NE $vt_chosen_size ]; then
vt_mod $vt_chosen_size 2048 vt_chosen_size_mod
if [ $vt_chosen_size_mod -ne 0 ]; then
echo -e "\n $vt_volume_space $vt_chosen_size $vt_chosen_size_mod\n"
fi
#For iKuai8 (<64MB)
- if [ $vt_chosen_size -le 67108864 ]; then
+ if [ $vt_chosen_size -LE 67108864 ]; then
if vt_str_begin "$vt_chosen_name" "iKuai"; then
set vtMemDiskBoot=1
fi
}
function ventoy_img_recalbox {
- if [ $vtoy_img_max_part_end -gt $vt_chosen_size ]; then
+ if [ $vtoy_img_max_part_end -GT $vt_chosen_size ]; then
echo -e "\nPlease extend the img file size before boot it. \n"
ventoy_pause
return