L"\\EFI\\BOOT\\GRUBX64.EFI",
L"\\EFI\\BOOT\\BOOTx64.EFI",
L"\\EFI\\BOOT\\bootx64.efi",
- L"\\efi\\boot\\bootx64.efi"
+ L"\\efi\\boot\\bootx64.efi",
};
VOID EFIAPI VtoyDebug(IN CONST CHAR8 *Format, ...)
return 0;
}
+static grub_err_t ventoy_cmd_dump_injection(grub_extcmd_context_t ctxt, int argc, char **args)
+{
+ (void)ctxt;
+ (void)argc;
+ (void)args;
+
+ ventoy_plugin_dump_injection();
+
+ return 0;
+}
+
static grub_err_t ventoy_cmd_dump_auto_install(grub_extcmd_context_t ctxt, int argc, char **args)
{
(void)ctxt;
{ "vt_dynamic_menu", ventoy_cmd_dynamic_menu, 0, NULL, "", "", NULL },
{ "vt_check_mode", ventoy_cmd_check_mode, 0, NULL, "", "", NULL },
{ "vt_dump_img_list", ventoy_cmd_dump_img_list, 0, NULL, "", "", NULL },
+ { "vt_dump_injection", ventoy_cmd_dump_injection, 0, NULL, "", "", NULL },
{ "vt_dump_auto_install", ventoy_cmd_dump_auto_install, 0, NULL, "", "", NULL },
{ "vt_dump_persistence", ventoy_cmd_dump_persistence, 0, NULL, "", "", NULL },
{ "vt_select_auto_install", ventoy_cmd_sel_auto_install, 0, NULL, "", "", NULL },
char * ventoy_plugin_get_cur_install_template(const char *isopath);
install_template * ventoy_plugin_find_install_template(const char *isopath);
persistence_config * ventoy_plugin_find_persistent(const char *isopath);
+void ventoy_plugin_dump_injection(void);
void ventoy_plugin_dump_auto_install(void);
int ventoy_fill_windows_rtdata(void *buf, char *isopath);
int ventoy_plugin_get_persistent_chunklist(const char *isopath, int index, ventoy_img_chunk_list *chunk_list);
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
}
+void ventoy_plugin_dump_injection(void)
+{
+ injection_config *node = NULL;
+
+ for (node = g_injection_head; node; node = node->next)
+ {
+ grub_printf("\nIMAGE:<%s>\n", node->isopath);
+ grub_printf("ARCHIVE:<%s>\n", node->archive);
+ }
+
+ return;
+}
+
+
void ventoy_plugin_dump_auto_install(void)
{
int i;
script = (char *)ventoy_plugin_get_injection(pos);
if (script)
{
- debug("injection archive <%s>\n", script);
- grub_snprintf(data->injection_archive, sizeof(data->injection_archive) - 1, "%s", script);
+ if (ventoy_check_file_exist("%s%s", ventoy_get_env("vtoy_iso_part"), script))
+ {
+ debug("injection archive <%s> OK\n", script);
+ grub_snprintf(data->injection_archive, sizeof(data->injection_archive) - 1, "%s", script);
+ }
+ else
+ {
+ debug("injection archive <%s> NOT exist\n", script);
+ }
}
else
{
# Step 3 : Extract injection archive #
# #
####################################################################
-if [ -e $VTOY_PATH/ventoy_injection ]; then
- echo "decompress injection ..." >>$VTLOG
-
+ventoy_unpack_injection() {
vtmagic=$(hexdump -n 2 -e '2/1 "%02X"' $VTOY_PATH/ventoy_injection)
- echo "vtmagic=$vtmagic ..." >>$VTLOG
+ echo "ventoy_unpack_injection vtmagic=$vtmagic ..."
- if [ "1F8B" = "vtmagic" ] || [ "1F9E" = "vtmagic" ]; then
- zcat $VTOY_PATH/ventoy_injection | tar -xf -C /
- elif [ "425A" = "vtmagic" ]; then
- bzcat $VTOY_PATH/ventoy_injection | tar -xf -C /
- elif [ "FD37" = "vtmagic" ]; then
- xzcat $VTOY_PATH/ventoy_injection | tar -xf -C /
+ if [ "1F8B" = "$vtmagic" ] || [ "1F9E" = "$vtmagic" ]; then
+ echo "tar.gz tar -xzvf"
+ tar -xzvf $VTOY_PATH/ventoy_injection -C /
+ elif [ "425A" = "$vtmagic" ]; then
+ echo "tar.bz2 tar -xjvf"
+ tar -xjvf $VTOY_PATH/ventoy_injection -C /
+ elif [ "FD37" = "$vtmagic" ]; then
+ echo "tar.xz tar -xJvf"
+ tar -xJvf $VTOY_PATH/ventoy_injection -C /
+ elif [ "5D00" = "$vtmagic" ]; then
+ echo "tar.lzma tar -xavf"
+ tar -xavf $VTOY_PATH/ventoy_injection -C /
else
- unzip -o -q $VTOY_PATH/ventoy_injection -d /
+ echo "unzip -o"
+ unzip -o $VTOY_PATH/ventoy_injection -d /
fi
+}
+
+if [ -e $VTOY_PATH/ventoy_injection ]; then
+ echo "### decompress injection ... ###" >>$VTLOG
+ ventoy_unpack_injection > $VTOY_PATH/injection.log 2>&1
fi
echo -e "\npress ENTER to exit ..."
read vtInputKey
unset pager
- }
+ }
+
+ menuentry 'Check injection plugin configuration' --class=debug_injection {
+ set pager=1
+ vt_check_plugin_json $vt_plugin_path injection $vtoy_iso_part
+
+ echo -e "\npress ENTER to exit ..."
+ read vtInputKey
+ unset pager
+ }
menuentry 'Return to previous menu [Esc]' --class=vtoyret VTOY_RET {
echo 'Return ...'
}
function ventoy_ext_menu {
- #if [ -e $vt_plugin_path/ventoy/ventoy_grub.cfg ]; then
+ if [ -e $vt_plugin_path/ventoy/ventoy_grub.cfg ]; then
set ventoy_new_context=1
configfile $vt_plugin_path/ventoy/ventoy_grub.cfg
unset ventoy_new_context
- #else
- # echo "ventoy_grub.cfg NOT exist."
- # echo -e "\npress ENTER to exit ..."
- # read vtInputKey
- #fi
+ else
+ echo "ventoy_grub.cfg NOT exist."
+ echo -e "\npress ENTER to exit ..."
+ read vtInputKey
+ fi
}
function get_os_type {
--- /dev/null
+
+desktop-image: "background.png"
+title-text: " "
+title-color: "#ffffff"
+message-color: "#f2f2f2"
+
+terminal-box: "terminal_box_*.png"
+
++ boot_menu {
+ left = 10%
+ width = 80%
+ top = 30%
+ height = 50%
+
+ menu_pixmap_style = "menu_*.png"
+
+ item_color = "#ffffff"
+ item_height = 30
+
+ item_spacing = 1
+ item_padding = 1
+
+ selected_item_color= "#f2f2f2"
+ selected_item_pixmap_style = "select_*.png"
+
+ item_icon_space = 0
+
+ scrollbar = true
+ scrollbar_width = 10
+ scrollbar_thumb = "slider_*.png"
+}
+
++ progress_bar {
+ id = "__timeout__"
+ text = "@TIMEOUT_NOTIFICATION_SHORT@"
+
+ left = 20%
+ width = 60%
+ top = 85%
+
+ text_color = "red"
+ bar_style = "*"
+ highlight_style = "*"
+}
+
++ hbox{
+ left = 30%
+ top = 95%
+ width = 10%
+ height = 25
+ + label {text = "@VTOY_HOTKEY_TIP@" color = "blue" align = "left"}
+}
+
+
++ hbox{
+ left = 30%
+ top = 95%-25
+ width = 10%
+ height = 25
+ + label {text = "@VTOY_MEM_DISK@" color = "red" align = "left"}
+}
+
+
++ hbox{
+ left = 30%
+ top = 95%-50
+ width = 10%
+ height = 25
+ + label {text = "@VTOY_ISO_RAW@" color = "red" align = "left"}
+}
+
+
++ hbox{
+ left = 90%
+ top = 55
+ width = 10%
+ height = 25
+ + label {text = "@VTOY_ISO_UEFI_DRV@" color = "red" align = "left"}
+}
+
--- /dev/null
+{
+ "control": [
+ { "VTOY_DEFAULT_MENU_MODE": "1" },
+ { "VTOY_FILT_DOT_UNDERSCORE_FILE": "1" }
+ ],
+
+ "theme": {
+ "file": "/ventoy/theme/theme.txt",
+ "display_mode": "GUI",
+ "ventoy_left": "5%",
+ "ventoy_top": "95%",
+ "ventoy_color": "#0000ff"
+ },
+
+
+ "menu_class": [
+ {
+ "key": "ubuntu",
+ "class": "ubuntu"
+ },
+ {
+ "key": "deepin",
+ "class": "deepin"
+ },
+ {
+ "dir": "rhel",
+ "class": "red-hat"
+ }
+ ],
+
+ "menu_alias": [
+ {
+ "image": "/ISO/MX-19.1_x64.iso",
+ "alias": "MX 19.1 ISO file For me"
+ },
+ {
+ "image": "/cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24.iso",
+ "alias": "我的 Windows 10 系统"
+ }
+ ],
+
+ "auto_install": [
+ {
+ "image": "/ISO/cn_windows_10.iso",
+ "template": "/ventoy/script/windows_unattended.cfg"
+ },
+ {
+ "image": "/ISO/cn_windows_server_2012_r2_vl_x64_dvd_2979220.iso",
+ "template": [
+ "/ventoy/script/windows_unattended1.xml",
+ "/ventoy/script/windows_unattended2.xml",
+ "/ventoy/script/windows_unattended3.xml",
+ "/ventoy/script/windows_unattended4.xml",
+ "/ventoy/script/windows_unattended5.xml",
+ "/ventoy/script/windows_unattended6.xml"
+ ]
+ }
+ ]
+
+}
--- /dev/null
+menuentry "My Custom Menu" --class=custom {\r
+ echo 'This is custom menu ... '\r
+ sleep 1 \r
+}\r
+\r
+submenu 'My Custom SubMenu -->' --class=customsub { \r
+ menuentry "My Custom Menu2" --class=custom2 {\r
+ echo 'This is custom menu2 ... '\r
+ sleep 1 \r
+ }\r
+ \r
+ menuentry '<-- Return to previous menu [Esc]' --class=vtoyret VTOY_RET {\r
+ echo 'Return ...'\r
+ }\r
+}\r
+\r
+menuentry '<-- Return to previous menu [Esc]' --class=vtoyret VTOY_RET {\r
+ echo 'Return ...'\r
+}\r
rm -f $tmpdir/ENROLL_THIS_KEY_IN_MOKMANAGER.cer
cp -a Ventoy2Disk.sh $tmpdir/
cp -a README $tmpdir/
+cp -a plugin $tmpdir/
cp -a CreatePersistentImg.sh $tmpdir/
dos2unix -q $tmpdir/Ventoy2Disk.sh
dos2unix -q $tmpdir/CreatePersistentImg.sh
return 1;
}
+static BOOL check_tar_archive(const char *archive, CHAR *tarName)
+{
+ int len;
+ int nameLen;
+ const char *pos = archive;
+ const char *slash = archive;
+
+ while (*pos)
+ {
+ if (*pos == '\\' || *pos == '/')
+ {
+ slash = pos;
+ }
+ pos++;
+ }
+
+ len = (int)strlen(slash);
+
+ if (len > 7 && (strncmp(slash + len - 7, ".tar.gz", 7) == 0 || strncmp(slash + len - 7, ".tar.xz", 7) == 0))
+ {
+ nameLen = (int)sprintf_s(tarName, MAX_PATH, "X:%s", slash);
+ tarName[nameLen - 3] = 0;
+ return TRUE;
+ }
+ else if (len > 8 && strncmp(slash + len - 8, ".tar.bz2", 8) == 0)
+ {
+ nameLen = (int)sprintf_s(tarName, MAX_PATH, "X:%s", slash);
+ tarName[nameLen - 4] = 0;
+ return TRUE;
+ }
+ else if (len > 9 && strncmp(slash + len - 9, ".tar.lzma", 9) == 0)
+ {
+ nameLen = (int)sprintf_s(tarName, MAX_PATH, "X:%s", slash);
+ tarName[nameLen - 5] = 0;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
static int DecompressInjectionArchive(const char *archive, DWORD PhyDrive)
{
int rc = 1;
BOOL bRet;
DWORD dwBytes;
HANDLE hDrive;
- CHAR PhyPath[MAX_PATH];
+ HANDLE hOut;
+ DWORD flags = CREATE_NO_WINDOW;
+ CHAR StrBuf[MAX_PATH];
+ CHAR tarName[MAX_PATH];
STARTUPINFOA Si;
PROCESS_INFORMATION Pi;
+ PROCESS_INFORMATION NewPi;
GET_LENGTH_INFORMATION LengthInfo;
+ SECURITY_ATTRIBUTES Sa = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };
Log("DecompressInjectionArchive %s", archive);
- sprintf_s(PhyPath, sizeof(PhyPath), "\\\\.\\PhysicalDrive%d", PhyDrive);
- hDrive = CreateFileA(PhyPath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
+ sprintf_s(StrBuf, sizeof(StrBuf), "\\\\.\\PhysicalDrive%d", PhyDrive);
+ hDrive = CreateFileA(StrBuf, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
if (hDrive == INVALID_HANDLE_VALUE)
{
- Log("Could not open the disk<%s>, error:%u", PhyPath, GetLastError());
+ Log("Could not open the disk<%s>, error:%u", StrBuf, GetLastError());
goto End;
}
bRet = DeviceIoControl(hDrive, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, &LengthInfo, sizeof(LengthInfo), &dwBytes, NULL);
if (!bRet)
{
- Log("Could not get phy disk %s size, error:%u", PhyPath, GetLastError());
+ Log("Could not get phy disk %s size, error:%u", StrBuf, GetLastError());
goto End;
}
CopyFileFromFatDisk("/ventoy/7z/32/7za.exe", "ventoy\\7za.exe");
}
- sprintf_s(PhyPath, sizeof(PhyPath), "ventoy\\7za.exe x -y -aoa -oX:\\ %s", archive);
+ sprintf_s(StrBuf, sizeof(StrBuf), "ventoy\\7za.exe x -y -aoa -oX:\\ %s", archive);
Log("extract inject to X:");
+ Log("cmdline:<%s>", StrBuf);
GetStartupInfoA(&Si);
- Si.dwFlags |= STARTF_USESHOWWINDOW;
- Si.wShowWindow = SW_HIDE;
+ hOut = CreateFileA("ventoy\\7z.log",
+ FILE_APPEND_DATA,
+ FILE_SHARE_WRITE | FILE_SHARE_READ,
+ &Sa,
+ OPEN_ALWAYS,
+ FILE_ATTRIBUTE_NORMAL,
+ NULL);
+
+ Si.dwFlags |= STARTF_USESTDHANDLES;
+
+ if (hOut != INVALID_HANDLE_VALUE)
+ {
+ Si.hStdError = hOut;
+ Si.hStdOutput = hOut;
+ }
- CreateProcessA(NULL, PhyPath, NULL, NULL, FALSE, 0, NULL, NULL, &Si, &Pi);
+ CreateProcessA(NULL, StrBuf, NULL, NULL, TRUE, flags, NULL, NULL, &Si, &Pi);
WaitForSingleObject(Pi.hProcess, INFINITE);
+
+ //
+ // decompress tar archive, for tar.gz/tar.xz/tar.bz2
+ //
+ if (check_tar_archive(archive, tarName))
+ {
+ Log("Decompress tar archive...<%s>", tarName);
+
+ sprintf_s(StrBuf, sizeof(StrBuf), "ventoy\\7za.exe x -y -aoa -oX:\\ %s", tarName);
+
+ CreateProcessA(NULL, StrBuf, NULL, NULL, TRUE, flags, NULL, NULL, &Si, &NewPi);
+ WaitForSingleObject(NewPi.hProcess, INFINITE);
+
+ Log("Now delete %s", tarName);
+ DeleteFileA(tarName);
+ }
+
+ SAFE_CLOSE_HANDLE(hOut);
}
fl_shutdown();
{
char auto_install_script[384];
char injection_archive[384];
- UINT8 reserved[128];
+ UINT8 reserved[256];
}ventoy_windows_data;
#pragma pack()