Compare commits

..

29 Commits

Author SHA1 Message Date
longpanda
3c03df31ce 1.0.87 release 2023-01-07 15:57:53 +08:00
longpanda
e24dacadcd Add /F option for VentoyPlugson.exe to use the system default browser.
By default it will firstly try to use Google Chrome if possible.
2023-01-07 15:35:47 +08:00
longpanda
315cabb945 Fix the file path when file checksum in F2 browse mode. 2023-01-07 11:33:04 +08:00
longpanda
72f25f14fc Merge branch 'master' of https://github.com/ventoy/Ventoy 2023-01-06 21:26:39 +08:00
longpanda
47e1553d23 Optimization for VTOY_WIN11_BYPASS_NRO option process. 2023-01-06 21:26:31 +08:00
MELERIX
9a2a7e83eb Add Spanish Translation (json/txt) grub menu (#2135)
* Add Spanish Tranlsation (json/txt) grub menu

* renamed
2023-01-06 12:23:05 +08:00
K.B.Dharun Krishna
5f747148c6 grub/menu: Update Tamil translation (#2133) 2023-01-06 11:55:40 +08:00
longpanda
686ed11037 Optimization for Lenovo Recovery Image (USB unplug process) 2023-01-05 22:18:39 +08:00
longpanda
7fe4762faa 1. grub2 mode supports Porteus ISO file.
2. Optimization for Lenovo Recovery Image.
2023-01-04 21:46:40 +08:00
longpanda
eac1c35f76 Fix the bug when F2 browse and boot VHD/VHDX files in an extend logic partition. 2023-01-04 19:22:02 +08:00
longpanda
c7dcaa5734 1. Fix the blank item in the last of Language select menu
2. Fix the menu display VTLANG_NO_PERSISTENCE issue when use persistence
2023-01-04 19:19:32 +08:00
longpanda
4b17ee30c4 Add "return to previous menu" in secondary boot menu for convenience. 2023-01-04 15:55:32 +08:00
longpanda
a18aa36c01 Code optimization 2023-01-04 15:39:03 +08:00
Tyemak
1de7489c6d Update ru_RU.txt (#2130) 2023-01-03 20:58:13 +08:00
longpanda
afb3340ce7 Disable Fn/L/Ctrl hotkeys when selecting auto install script or perssitence file. 2023-01-03 19:11:36 +08:00
longpanda
fdce4a756a Add support for Dell PER ISO. (#2113) 2023-01-03 16:43:17 +08:00
longpanda
5a7fa0c565 Support lenovo product recovery iso file. 2023-01-03 11:35:27 +08:00
longpanda
287d77224c Disable Fn/L/Ctrl hotkeys on select WIM menu. 2023-01-03 11:29:50 +08:00
longpanda
c6bd857cbe Support BSD style for .md5/.sha1/.sh256/.sha512 checksum file.
Support VENTOY_CHECKSUM file for checksum file.
(#2112)
2023-01-01 00:31:08 +08:00
wiz64
b4bb6efd3c Update ru_RU.txt (#2120) 2022-12-31 20:59:08 +08:00
Hildo Guillardi Júnior
7386f64ed8 Update pt_PT.json (#2118) 2022-12-31 20:58:50 +08:00
Hildo Guillardi Júnior
044ca8811d PT translate and SI grammar (#2117) 2022-12-31 20:58:38 +08:00
Tyemak
8c6fd872af Update ru_RU.json (#2114) 2022-12-31 20:58:06 +08:00
longpanda
683101ae1a vtoyjump optimization.
Signed-off-by: longpanda <admin@ventoy.net>
2022-12-31 19:41:15 +08:00
longpanda
0e968e266e Update the F1 help text. WIMBOOT mode supports both Windows and WinPE ISO files. 2022-12-29 18:48:06 +08:00
longpanda
d94d59583a Search VTEFI directory for UEFI boot files.
When user install for example Windows in the reserved space of Ventoy USB stick in UEFI mode.
Windows will create part 3 as the EFI partition and when you boot the USB stick, the BIOS may skip Ventoy and directly boot the Windows.
To avoid this, we suggest to rename the directory name from EFI to VTEFI.
2022-12-26 22:08:23 +08:00
gidano
05bbef63c1 Edited! (#2105)
* Hungarian translation

* Hungarian translation

* HU update languages.json

Jól értettem, hogy a *#-t módosítani kell \r\n-re?!

* Edited!
2022-12-26 17:01:43 +08:00
longpanda
8923d4b8f1 Fix the menu title of F5 Tools ---> Power ---> $VTLANG_POWER_REBOOT_EFIFW 2022-12-26 16:56:53 +08:00
longpanda
377cd9e468 Update readme 2022-12-25 17:23:50 +08:00
75 changed files with 1667 additions and 272 deletions

View File

@@ -21,7 +21,7 @@ body:
attributes: attributes:
label: Ventoy Version label: Ventoy Version
description: What version of ventoy are you running? description: What version of ventoy are you running?
placeholder: 1.0.84 placeholder: 1.0.87
validations: validations:
required: true required: true
- type: dropdown - type: dropdown

View File

@@ -260,6 +260,7 @@ grub_cmd_hashsum (struct grub_extcmd_context *ctxt,
grub_file_t file; grub_file_t file;
grub_err_t err; grub_err_t err;
unsigned j; unsigned j;
int vlnk = 0;
file = grub_file_open (args[i], GRUB_FILE_TYPE_TO_HASH file = grub_file_open (args[i], GRUB_FILE_TYPE_TO_HASH
| (!uncompress ? GRUB_FILE_TYPE_NO_DECOMPRESS | (!uncompress ? GRUB_FILE_TYPE_NO_DECOMPRESS
: GRUB_FILE_TYPE_NONE)); : GRUB_FILE_TYPE_NONE));
@@ -272,6 +273,7 @@ grub_cmd_hashsum (struct grub_extcmd_context *ctxt,
unread++; unread++;
continue; continue;
} }
vlnk = file->vlnk;
err = hash_file (file, hash, result); err = hash_file (file, hash, result);
grub_file_close (file); grub_file_close (file);
if (err) if (err)
@@ -288,7 +290,7 @@ grub_cmd_hashsum (struct grub_extcmd_context *ctxt,
grub_printf ("%02x", ((grub_uint8_t *) result)[j]); grub_printf ("%02x", ((grub_uint8_t *) result)[j]);
len += grub_snprintf(hashsum + len, sizeof(hashsum) - len, "%02x", ((grub_uint8_t *) result)[j]); len += grub_snprintf(hashsum + len, sizeof(hashsum) - len, "%02x", ((grub_uint8_t *) result)[j]);
} }
grub_printf (" %s\n", args[i]); grub_printf (" %s\n", vlnk ? grub_file_get_vlnk(args[i], NULL) : args[i]);
grub_env_set("VT_LAST_CHECK_SUM", hashsum); grub_env_set("VT_LAST_CHECK_SUM", hashsum);
} }

View File

@@ -200,7 +200,8 @@ const char *grub_file_get_vlnk(const char *name, int *vlnk)
if (len == g_vtoy_vlnk.srclen && grub_strcmp(name, g_vtoy_vlnk.src) == 0) if (len == g_vtoy_vlnk.srclen && grub_strcmp(name, g_vtoy_vlnk.src) == 0)
{ {
*vlnk = 1; if (vlnk)
*vlnk = 1;
return g_vtoy_vlnk.dst; return g_vtoy_vlnk.dst;
} }
@@ -208,7 +209,8 @@ const char *grub_file_get_vlnk(const char *name, int *vlnk)
{ {
if (node->srclen == len && grub_strcmp(name, node->src) == 0) if (node->srclen == len && grub_strcmp(name, node->src) == 0)
{ {
*vlnk = 1; if (vlnk)
*vlnk = 1;
return node->dst; return node->dst;
} }
node = node->next; node = node->next;

View File

@@ -115,6 +115,92 @@ int ventoy_str_all_digit(const char *str)
return 1; return 1;
} }
int ventoy_str_all_alnum(const char *str)
{
if (NULL == str || 0 == *str)
{
return 0;
}
while (*str)
{
if (!grub_isalnum(*str))
{
return 0;
}
}
return 1;
}
int ventoy_str_len_alnum(const char *str, int len)
{
int i;
int slen;
if (NULL == str || 0 == *str)
{
return 0;
}
slen = grub_strlen(str);
if (slen <= len)
{
return 0;
}
for (i = 0; i < len; i++)
{
if (!grub_isalnum(str[i]))
{
return 0;
}
}
if (str[len] == 0 || grub_isspace(str[len]))
{
return 1;
}
return 0;
}
char * ventoy_str_basename(char *path)
{
char *pos = NULL;
pos = grub_strrchr(path, '/');
if (pos)
{
pos++;
}
else
{
pos = path;
}
return pos;
}
int ventoy_str_chrcnt(const char *str, char c)
{
int n = 0;
if (str)
{
while (*str)
{
if (*str == c)
{
n++;
}
str++;
}
}
return n;
}
int ventoy_strcmp(const char *pattern, const char *str) int ventoy_strcmp(const char *pattern, const char *str)
{ {
while (*pattern && *str) while (*pattern && *str)
@@ -146,6 +232,14 @@ int ventoy_strncmp (const char *pattern, const char *str, grub_size_t n)
return (int)(grub_uint8_t)*pattern - (int)(grub_uint8_t)*str; return (int)(grub_uint8_t)*pattern - (int)(grub_uint8_t)*str;
} }
grub_err_t ventoy_env_int_set(const char *name, int value)
{
char buf[16];
grub_snprintf(buf, sizeof(buf), "%d", value);
return grub_env_set(name, buf);
}
void ventoy_debug_dump_guid(const char *prefix, grub_uint8_t *guid) void ventoy_debug_dump_guid(const char *prefix, grub_uint8_t *guid)
{ {
int i; int i;

View File

@@ -158,6 +158,8 @@ const char *g_menu_prefix[img_type_max] =
"iso", "wim", "efi", "img", "vhd", "vtoy" "iso", "wim", "efi", "img", "vhd", "vtoy"
}; };
static const char *g_lower_chksum_name[] = { "md5", "sha1", "sha256", "sha512" };
static int g_vtoy_secondary_need_recover = 0; static int g_vtoy_secondary_need_recover = 0;
static int g_vtoy_load_prompt = 0; static int g_vtoy_load_prompt = 0;
@@ -3761,13 +3763,15 @@ static grub_err_t ventoy_cmd_sel_auto_install(grub_extcmd_context_t ctxt, int ar
g_ventoy_menu_esc = 1; g_ventoy_menu_esc = 1;
g_ventoy_suppress_esc = 1; g_ventoy_suppress_esc = 1;
g_ventoy_suppress_esc_default = defidx; g_ventoy_suppress_esc_default = defidx;
g_ventoy_secondary_menu_on = 1;
grub_snprintf(configfile, sizeof(configfile), "configfile mem:0x%llx:size:%d", (ulonglong)(ulong)buf, pos); grub_snprintf(configfile, sizeof(configfile), "configfile mem:0x%llx:size:%d", (ulonglong)(ulong)buf, pos);
grub_script_execute_sourcecode(configfile); grub_script_execute_sourcecode(configfile);
g_ventoy_menu_esc = 0; g_ventoy_menu_esc = 0;
g_ventoy_suppress_esc = 0; g_ventoy_suppress_esc = 0;
g_ventoy_suppress_esc_default = 1; g_ventoy_suppress_esc_default = 1;
g_ventoy_secondary_menu_on = 0;
grub_free(buf); grub_free(buf);
@@ -3854,7 +3858,7 @@ static grub_err_t ventoy_cmd_sel_persistence(grub_extcmd_context_t ctxt, int arg
vtoy_ssprintf(buf, pos, "set timeout=%d\n", node->timeout); vtoy_ssprintf(buf, pos, "set timeout=%d\n", node->timeout);
} }
vtoy_ssprintf(buf, pos, "menuentry \"$VTLANG_NO_PERSISTENCE\" --class=\"sel_persistence\" {\n" vtoy_ssprintf(buf, pos, "menuentry \"$VTLANG_NO_PERSIST\" --class=\"sel_persistence\" {\n"
" echo %s\n}\n", ""); " echo %s\n}\n", "");
for (i = 0; i < node->backendnum; i++) for (i = 0; i < node->backendnum; i++)
@@ -3869,13 +3873,15 @@ static grub_err_t ventoy_cmd_sel_persistence(grub_extcmd_context_t ctxt, int arg
g_ventoy_menu_esc = 1; g_ventoy_menu_esc = 1;
g_ventoy_suppress_esc = 1; g_ventoy_suppress_esc = 1;
g_ventoy_suppress_esc_default = defidx; g_ventoy_suppress_esc_default = defidx;
g_ventoy_secondary_menu_on = 1;
grub_snprintf(configfile, sizeof(configfile), "configfile mem:0x%llx:size:%d", (ulonglong)(ulong)buf, pos); grub_snprintf(configfile, sizeof(configfile), "configfile mem:0x%llx:size:%d", (ulonglong)(ulong)buf, pos);
grub_script_execute_sourcecode(configfile); grub_script_execute_sourcecode(configfile);
g_ventoy_menu_esc = 0; g_ventoy_menu_esc = 0;
g_ventoy_suppress_esc = 0; g_ventoy_suppress_esc = 0;
g_ventoy_suppress_esc_default = 1; g_ventoy_suppress_esc_default = 1;
g_ventoy_secondary_menu_on = 0;
grub_free(buf); grub_free(buf);
@@ -6157,6 +6163,7 @@ static grub_err_t ventoy_cmd_show_secondary_menu(grub_extcmd_context_t ctxt, int
} }
g_vtoy_secondary_need_recover = 0; g_vtoy_secondary_need_recover = 0;
grub_env_unset("VTOY_SECOND_EXIT");
grub_env_unset("VTOY_CHKSUM_FILE_PATH"); grub_env_unset("VTOY_CHKSUM_FILE_PATH");
env = grub_env_get("VTOY_SECONDARY_TIMEOUT"); env = grub_env_get("VTOY_SECONDARY_TIMEOUT");
@@ -6192,8 +6199,10 @@ static grub_err_t ventoy_cmd_show_secondary_menu(grub_extcmd_context_t ctxt, int
} }
vtoy_dummy_menuentry(cmd, pos, len, "$VTLANG_FILE_CHKSUM", "second_checksum"); seldata[n++] = 5; vtoy_dummy_menuentry(cmd, pos, len, "$VTLANG_FILE_CHKSUM", "second_checksum"); seldata[n++] = 5;
vtoy_dummy_menuentry(cmd, pos, len, "$VTLANG_RETURN_PRV_NOESC", "second_return"); seldata[n++] = 6;
do { do {
grub_errno = GRUB_ERR_NONE;
g_ventoy_menu_esc = 1; g_ventoy_menu_esc = 1;
g_ventoy_suppress_esc = 1; g_ventoy_suppress_esc = 1;
g_ventoy_suppress_esc_default = 0; g_ventoy_suppress_esc_default = 0;
@@ -6227,10 +6236,14 @@ static grub_err_t ventoy_cmd_show_secondary_menu(grub_extcmd_context_t ctxt, int
grub_env_set("VTOY_CHKSUM_FILE_PATH", args[0]); grub_env_set("VTOY_CHKSUM_FILE_PATH", args[0]);
grub_script_execute_sourcecode("configfile $vtoy_efi_part/grub/checksum.cfg"); grub_script_execute_sourcecode("configfile $vtoy_efi_part/grub/checksum.cfg");
} }
else if (select == 6)
{
grub_env_set("VTOY_SECOND_EXIT", "1");
}
}while (select == 5); }while (select == 5);
grub_free(cmd); grub_free(cmd);
return 0; VENTOY_CMD_RETURN(GRUB_ERR_NONE);
} }
static grub_err_t ventoy_cmd_secondary_recover_mode(grub_extcmd_context_t ctxt, int argc, char **args) static grub_err_t ventoy_cmd_secondary_recover_mode(grub_extcmd_context_t ctxt, int argc, char **args)
@@ -6292,6 +6305,274 @@ static grub_err_t ventoy_cmd_load_menu_lang(grub_extcmd_context_t ctxt, int argc
VENTOY_CMD_RETURN(0); VENTOY_CMD_RETURN(0);
} }
static grub_err_t ventoy_cmd_vtoychksum_exist(grub_extcmd_context_t ctxt, int argc, char **args)
{
int cnt;
char c;
char *pos = NULL;
(void)ctxt;
(void)argc;
cnt = ventoy_str_chrcnt(args[1], '/');
if (cnt > 1)
{
pos = grub_strrchr(args[1], '/');
c = *pos;
*pos = 0;
if (ventoy_check_file_exist("%s%s/VENTOY_CHECKSUM", args[0], args[1]))
{
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
}
*pos = c;
}
if (ventoy_check_file_exist("%s/VENTOY_CHECKSUM", args[0]))
{
VENTOY_CMD_RETURN(GRUB_ERR_NONE);
}
return 1;
}
static int ventoy_chksum_pathcmp(int chktype, char *rlpath, char *rdpath)
{
char *pos1 = NULL;
char *pos2 = NULL;
if (chktype == 2)
{
pos1 = ventoy_str_basename(rlpath);
pos2 = ventoy_str_basename(rdpath);
return grub_strcmp(pos1, pos2);
}
else if (chktype == 3 || chktype == 4)
{
if (grub_strcmp(rlpath, rdpath) == 0 || grub_strcmp(rlpath + 1, rdpath) == 0)
{
return 0;
}
}
return 1;
}
static int ventoy_find_checksum
(
grub_file_t file,
const char *uname,
int retlen,
char *path,
int chktype,
char *chksum
)
{
int ulen;
char *pos = NULL;
char *pos1 = NULL;
char *pos2 = NULL;
char *buf = NULL;
char *currline = NULL;
char *nextline = NULL;
ulen = (int)grub_strlen(uname);
/* read file to buffer */
buf = grub_malloc(file->size + 4);
if (!buf)
{
return 1;
}
grub_file_read(file, buf, file->size);
buf[file->size] = 0;
/* parse each line */
for (currline = buf; currline; currline = nextline)
{
nextline = ventoy_get_line(currline);
VTOY_SKIP_SPACE(currline);
if (grub_strncasecmp(currline, uname, ulen) == 0)
{
pos = grub_strchr(currline, '=');
pos1 = grub_strchr(currline, '(');
pos2 = grub_strchr(currline, ')');
if (pos && pos1 && pos2)
{
*pos2 = 0;
if (ventoy_chksum_pathcmp(chktype, path, pos1 + 1) == 0)
{
VTOY_SKIP_SPACE_NEXT(pos, 1);
grub_memcpy(chksum, pos, retlen);
goto end;
}
}
}
else if (ventoy_str_len_alnum(currline, retlen))
{
VTOY_SKIP_SPACE_NEXT_EX(pos, currline, retlen);
if (ventoy_chksum_pathcmp(chktype, path, pos) == 0)
{
grub_memcpy(chksum, currline, retlen);
goto end;
}
}
}
end:
grub_free(buf);
return 0;
}
static int ventoy_check_chkfile(const char *isopart, char *path, const char *lchkname, grub_file_t *pfile)
{
int ret = 0;
int cnt = 0;
char c = 0;
char *pos = NULL;
grub_file_t file = NULL;
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s%s.%s", isopart, path, lchkname);
if (file)
{
VTOY_GOTO_END(1);
}
cnt = ventoy_str_chrcnt(path, '/');
if (cnt > 1)
{
pos = grub_strrchr(path, '/');
c = *pos;
*pos = 0;
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s%s/VENTOY_CHECKSUM", isopart, path);
if (file)
{
*pos = c;
VTOY_GOTO_END(2);
}
*pos = c;
}
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s/VENTOY_CHECKSUM", isopart);
if (file)
{
ret = (cnt > 1) ? 3 : 4;
}
end:
if (pfile)
{
*pfile = file;
}
else
{
check_free(file, grub_file_close);
}
return ret;
}
static grub_err_t ventoy_cmd_cmp_checksum(grub_extcmd_context_t ctxt, int argc, char **args)
{
int index = 0;
int chktype = 0;
char *pos = NULL;
grub_file_t file = NULL;
const char *calc_value = NULL;
const char *isopart = NULL;
char fchksum[64];
char readchk[256] = {0};
char filebuf[512] = {0};
int retlen[] = { 32, 40, 64, 128 };
char uchkname[16];
(void)ctxt;
index = (int)grub_strtol(args[0], NULL, 10);
if (argc != 2 || index < 0 || index >= (int)ARRAY_SIZE(retlen))
{
return 1;
}
grub_strncpy(uchkname, g_lower_chksum_name[index], sizeof(uchkname));
ventoy_str_toupper(uchkname);
isopart = grub_env_get("vtoy_iso_part");
calc_value = grub_env_get("VT_LAST_CHECK_SUM");
chktype = ventoy_check_chkfile(isopart, args[1], g_lower_chksum_name[index], &file);
if (chktype <= 0)
{
grub_printf("\n\nNo checksum file found.\n");
goto end;
}
if (chktype == 1)
{
grub_snprintf(fchksum, sizeof(fchksum), ".%s", g_lower_chksum_name[index]);
grub_memset(filebuf, 0, sizeof(filebuf));
grub_file_read(file, filebuf, 511);
pos = grub_strchr(filebuf, '=');
if (pos)
{
VTOY_SKIP_SPACE_NEXT(pos, 1);
grub_memcpy(readchk, pos, retlen[index]);
}
else
{
grub_memcpy(readchk, filebuf, retlen[index]);
}
}
else if (chktype == 3 || chktype == 4)
{
grub_snprintf(fchksum, sizeof(fchksum), "global VENTOY_CHECKSUM");
ventoy_find_checksum(file, uchkname, retlen[index], args[1], chktype, readchk);
if (readchk[0] == 0)
{
grub_printf("\n\n%s value not found in %s.\n", uchkname, fchksum);
goto end;
}
}
else
{
grub_snprintf(fchksum, sizeof(fchksum), "local VENTOY_CHECKSUM");
ventoy_find_checksum(file, uchkname, retlen[index], args[1], chktype, readchk);
if (readchk[0] == 0)
{
grub_file_close(file);
file = ventoy_grub_file_open(VENTOY_FILE_TYPE, "%s/VENTOY_CHECKSUM", isopart);
if (file)
{
grub_snprintf(fchksum, sizeof(fchksum), "global VENTOY_CHECKSUM");
ventoy_find_checksum(file, uchkname, retlen[index], args[1], 3, readchk);
if (readchk[0] == 0)
{
grub_printf("\n\n%s value not found in both local and global VENTOY_CHECKSUM.\n", uchkname);
goto end;
}
}
}
}
if (grub_strcasecmp(calc_value, readchk) == 0)
{
grub_printf("\n\nCheck %s value with %s file. [ SUCCESS ]\n", uchkname, fchksum);
}
else
{
grub_printf("\n\nCheck %s value with %s file. [ ERROR ]\n", uchkname, fchksum);
grub_printf("The %s value in %s file is:\n%s\n", uchkname, fchksum, readchk);
}
end:
grub_refresh();
check_free(file, grub_file_close);
VENTOY_CMD_RETURN(0);
}
static const char * ventoy_menu_lang_read_hook(struct grub_env_var *var, const char *val) static const char * ventoy_menu_lang_read_hook(struct grub_env_var *var, const char *val)
{ {
@@ -6522,6 +6803,8 @@ static cmd_para ventoy_cmds[] =
{ "vt_load_menu_lang", ventoy_cmd_load_menu_lang, 0, NULL, "", "", NULL }, { "vt_load_menu_lang", ventoy_cmd_load_menu_lang, 0, NULL, "", "", NULL },
{ "vt_init_menu_lang", ventoy_cmd_init_menu_lang, 0, NULL, "", "", NULL }, { "vt_init_menu_lang", ventoy_cmd_init_menu_lang, 0, NULL, "", "", NULL },
{ "vt_cur_menu_lang", ventoy_cmd_cur_menu_lang, 0, NULL, "", "", NULL }, { "vt_cur_menu_lang", ventoy_cmd_cur_menu_lang, 0, NULL, "", "", NULL },
{ "vt_vtoychksum_exist", ventoy_cmd_vtoychksum_exist, 0, NULL, "", "", NULL },
{ "vt_cmp_checksum", ventoy_cmd_cmp_checksum, 0, NULL, "", "", NULL },
}; };

View File

@@ -116,6 +116,15 @@
s++;\ s++;\
} }
#define VTOY_SKIP_SPACE_NEXT_EX(s, base, initial) \
s = base + initial;\
while (ventoy_isspace(*s)) \
{\
s++;\
}
#define VTOY_GOTO_END(v) ret = v; goto end
typedef enum VTOY_FILE_FLT typedef enum VTOY_FILE_FLT
{ {
VTOY_FILE_FLT_ISO = 0, /* .iso */ VTOY_FILE_FLT_ISO = 0, /* .iso */
@@ -628,6 +637,11 @@ typedef struct chk_case_fs_dir
}chk_case_fs_dir; }chk_case_fs_dir;
int ventoy_str_all_digit(const char *str); int ventoy_str_all_digit(const char *str);
int ventoy_str_all_alnum(const char *str);
int ventoy_str_len_alnum(const char *str, int len);
char * ventoy_str_basename(char *path);
grub_err_t ventoy_env_int_set(const char *name, int value);
int ventoy_str_chrcnt(const char *str, char c);
int ventoy_strcmp(const char *pattern, const char *str); int ventoy_strcmp(const char *pattern, const char *str);
int ventoy_strncmp (const char *pattern, const char *str, grub_size_t n); int ventoy_strncmp (const char *pattern, const char *str, grub_size_t n);
void ventoy_fill_os_param(grub_file_t file, ventoy_os_param *param); void ventoy_fill_os_param(grub_file_t file, ventoy_os_param *param);

View File

@@ -148,9 +148,10 @@ static int ventoy_vhd_patch_path(char *vhdpath, ventoy_patch_vhd *patch1, ventoy
return 0; return 0;
} }
static int ventoy_vhd_read_parttbl(const char *filename, ventoy_gpt_info *gpt, int *index) static int ventoy_vhd_read_parttbl(const char *filename, ventoy_gpt_info *gpt, int *index, grub_uint64_t *poffset)
{ {
int i; int i;
int find = 0;
int ret = 1; int ret = 1;
grub_uint64_t start; grub_uint64_t start;
grub_file_t file = NULL; grub_file_t file = NULL;
@@ -183,6 +184,7 @@ static int ventoy_vhd_read_parttbl(const char *filename, ventoy_gpt_info *gpt, i
if (start == gpt->PartTbl[i].StartLBA) if (start == gpt->PartTbl[i].StartLBA)
{ {
*index = i; *index = i;
find = 1;
break; break;
} }
} }
@@ -196,11 +198,22 @@ static int ventoy_vhd_read_parttbl(const char *filename, ventoy_gpt_info *gpt, i
if ((grub_uint32_t)start == gpt->MBR.PartTbl[i].StartSectorId) if ((grub_uint32_t)start == gpt->MBR.PartTbl[i].StartSectorId)
{ {
*index = i; *index = i;
find = 1;
break; break;
} }
} }
} }
if (find == 0) // MBR Logical partition
{
if (file->device->disk->partition->number > 0)
{
*index = file->device->disk->partition->number;
debug("Fall back part number: %d\n", *index);
}
}
*poffset = start;
ret = 0; ret = 0;
end: end:
@@ -226,7 +239,7 @@ static int ventoy_vhd_patch_disk(const char *vhdpath, ventoy_patch_vhd *patch1,
else else
{ {
gpt = grub_zalloc(sizeof(ventoy_gpt_info)); gpt = grub_zalloc(sizeof(ventoy_gpt_info));
ventoy_vhd_read_parttbl(vhdpath, gpt, &partIndex); ventoy_vhd_read_parttbl(vhdpath, gpt, &partIndex, &offset);
debug("This is HDD partIndex %d %s\n", partIndex, vhdpath); debug("This is HDD partIndex %d %s\n", partIndex, vhdpath);
} }
@@ -249,9 +262,7 @@ static int ventoy_vhd_patch_disk(const char *vhdpath, ventoy_patch_vhd *patch1,
} }
else else
{ {
offset = gpt->MBR.PartTbl[partIndex].StartSectorId;
offset *= 512; offset *= 512;
debug("MBR disk signature: %02x%02x%02x%02x Part(%d) offset:%llu\n", debug("MBR disk signature: %02x%02x%02x%02x Part(%d) offset:%llu\n",
gpt->MBR.BootCode[0x1b8 + 0], gpt->MBR.BootCode[0x1b8 + 1], gpt->MBR.BootCode[0x1b8 + 0], gpt->MBR.BootCode[0x1b8 + 1],
gpt->MBR.BootCode[0x1b8 + 2], gpt->MBR.BootCode[0x1b8 + 3], gpt->MBR.BootCode[0x1b8 + 2], gpt->MBR.BootCode[0x1b8 + 3],

View File

@@ -1448,6 +1448,7 @@ grub_err_t ventoy_cmd_sel_winpe_wim(grub_extcmd_context_t ctxt, int argc, char *
g_ventoy_menu_esc = 1; g_ventoy_menu_esc = 1;
g_ventoy_suppress_esc = 1; g_ventoy_suppress_esc = 1;
g_ventoy_suppress_esc_default = 0; g_ventoy_suppress_esc_default = 0;
g_ventoy_secondary_menu_on = 1;
grub_snprintf(cfgfile, sizeof(cfgfile), "configfile mem:0x%llx:size:%d", (ulonglong)(ulong)cmd, pos); grub_snprintf(cfgfile, sizeof(cfgfile), "configfile mem:0x%llx:size:%d", (ulonglong)(ulong)cmd, pos);
grub_script_execute_sourcecode(cfgfile); grub_script_execute_sourcecode(cfgfile);
@@ -1455,6 +1456,7 @@ grub_err_t ventoy_cmd_sel_winpe_wim(grub_extcmd_context_t ctxt, int argc, char *
g_ventoy_menu_esc = 0; g_ventoy_menu_esc = 0;
g_ventoy_suppress_esc = 0; g_ventoy_suppress_esc = 0;
g_ventoy_suppress_esc_default = 1; g_ventoy_suppress_esc_default = 1;
g_ventoy_secondary_menu_on = 0;
for (node = g_wim_patch_head; node; node = node->next) for (node = g_wim_patch_head; node; node = node->next)
{ {

View File

@@ -12,7 +12,7 @@ make install
PATH=$VT_DIR/GRUB2/INSTALL/bin/:$VT_DIR/GRUB2/INSTALL/sbin/:$PATH PATH=$VT_DIR/GRUB2/INSTALL/bin/:$VT_DIR/GRUB2/INSTALL/sbin/:$PATH
net_modules_legacy="net tftp http" net_modules_legacy="net tftp http"
all_modules_legacy="file date drivemap blocklist newc vga_text ntldr search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio lspci pci ext2 xfs ventoy chain read halt iso9660 linux16 test true sleep reboot echo videotest videoinfo videotest_checksum video_colors video_cirrus video_bochs vga vbe font video gettext extcmd terminal linux minicmd help configfile tr trig boot biosdisk disk ls tar squash4 password_pbkdf2 all_video png jpeg part_gpt part_msdos fat exfat ntfs loopback gzio normal udf gfxmenu gfxterm gfxterm_background gfxterm_menu smbios" all_modules_legacy="file date drivemap blocklist newc vga_text ntldr search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio lspci pci ext2 xfs ventoy chain read halt iso9660 linux16 test true sleep reboot echo videotest videoinfo videotest_checksum video_colors video_cirrus video_bochs vga vbe font video gettext extcmd terminal linux minicmd help configfile tr trig boot biosdisk disk ls tar squash4 password_pbkdf2 all_video png jpeg part_gpt part_msdos fat exfat ntfs loopback gzio normal video_fb udf gfxmenu gfxterm gfxterm_background gfxterm_menu smbios"
net_modules_uefi="efinet net tftp http" net_modules_uefi="efinet net tftp http"
all_modules_uefi="file setkey blocklist ventoy test true regexp newc search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio ext2 xfs read halt sleep serial terminfo png password_pbkdf2 gcry_sha512 pbkdf2 part_gpt part_msdos ls tar squash4 loopback part_apple minicmd diskfilter linux relocator jpeg iso9660 udf hfsplus halt acpi mmap gfxmenu video_colors trig bitmap_scale gfxterm bitmap font fat exfat ntfs fshelp efifwsetup reboot echo configfile normal terminal gettext chain priority_queue bufio datetime cat extcmd crypto gzio boot all_video efi_gop efi_uga video_bochs video_cirrus video video_fb gfxterm_background gfxterm_menu mouse fwload smbios zfs" all_modules_uefi="file setkey blocklist ventoy test true regexp newc search at_keyboard usb_keyboard gcry_md5 hashsum gzio xzio lzopio ext2 xfs read halt sleep serial terminfo png password_pbkdf2 gcry_sha512 pbkdf2 part_gpt part_msdos ls tar squash4 loopback part_apple minicmd diskfilter linux relocator jpeg iso9660 udf hfsplus halt acpi mmap gfxmenu video_colors trig bitmap_scale gfxterm bitmap font fat exfat ntfs fshelp efifwsetup reboot echo configfile normal terminal gettext chain priority_queue bufio datetime cat extcmd crypto gzio boot all_video efi_gop efi_uga video_bochs video_cirrus video video_fb gfxterm_background gfxterm_menu mouse fwload smbios zfs"

View File

@@ -150,3 +150,19 @@ fi
if [ -f $VTOY_PATH/autoinstall ]; then if [ -f $VTOY_PATH/autoinstall ]; then
cp -a $VTOY_PATH/hook/rhel7/ventoy-autoexp.sh /lib/dracut/hooks/pre-mount/99-ventoy-autoexp.sh cp -a $VTOY_PATH/hook/rhel7/ventoy-autoexp.sh /lib/dracut/hooks/pre-mount/99-ventoy-autoexp.sh
fi fi
#special distro magic
$BUSYBOX_PATH/mkdir -p $VTOY_PATH/distmagic
if $GREP -q SCRE /proc/cmdline; then
echo 1 > $VTOY_PATH/distmagic/SCRE
fi
if $GREP -qw 'SA[.]1' /proc/cmdline; then
if $GREP -qw 'writable.fsimg' /proc/cmdline; then
if $GREP -qw 'rw' /proc/cmdline; then
echo 1 > $VTOY_PATH/distmagic/DELL_PER
fi
fi
fi

View File

@@ -50,7 +50,11 @@ if is_inotify_ventoy_part $3; then
vtScript=$($GREP -m1 'RUN.=' $vtGenRulFile | $AWK -F'RUN.=' '{print $2}' | $SED 's/"\(.*\)".*/\1/') vtScript=$($GREP -m1 'RUN.=' $vtGenRulFile | $AWK -F'RUN.=' '{print $2}' | $SED 's/"\(.*\)".*/\1/')
vtlog "vtScript=$vtScript" vtlog "vtScript=$vtScript"
if $GREP -q SCRE /proc/cmdline; then if [ -f $VTOY_PATH/distmagic/SCRE ]; then
/sbin/dmsquash-live-root /dev/ventoy
elif [ -f $VTOY_PATH/distmagic/DELL_PER ]; then
sed 's/liverw=[^ ]*/liverw=ro/g' -i /sbin/dmsquash-live-root
sed 's/writable_fsimg=[^ ]*/writable_fsimg=""/g' -i /sbin/dmsquash-live-root
/sbin/dmsquash-live-root /dev/ventoy /sbin/dmsquash-live-root /dev/ventoy
else else
$vtScript $vtScript

View File

@@ -26,7 +26,9 @@ fi
blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1:\2/') blkdev_num=$($VTOY_PATH/tool/dmsetup ls | grep ventoy | sed 's/.*(\([0-9][0-9]*\),.*\([0-9][0-9]*\).*/\1:\2/')
vtDM=$(ventoy_find_dm_id ${blkdev_num}) vtDM=$(ventoy_find_dm_id ${blkdev_num})
if ! [ -e /dev/mapper/ventoy ]; then if [ -e /dev/mapper/ventoy ]; then
vtlog "/dev/mapper/ventoy already exist"
else
vtlog "link /dev/$vtDM to /dev/mapper/ventoy" vtlog "link /dev/$vtDM to /dev/mapper/ventoy"
ln -s /dev/$vtDM /dev/mapper/ventoy ln -s /dev/$vtDM /dev/mapper/ventoy
fi fi
@@ -35,7 +37,13 @@ VTLABEL=$($BUSYBOX_PATH/blkid /dev/$vtDM | $SED 's/.*LABEL="\([^"]*\)".*/\1/')
vtlog "VTLABEL=$VTLABEL" vtlog "VTLABEL=$VTLABEL"
if [ -n "$VTLABEL" ]; then if [ -n "$VTLABEL" ]; then
if ! [ -e "/dev/disk/by-label/$VTLABEL" ]; then if ! [ -d /dev/disk/by-label ]; then
mkdir -p /dev/disk/by-label
fi
if [ -e "/dev/disk/by-label/$VTLABEL" ]; then
vtlog "/dev/disk/by-label/$VTLABEL already exist"
else
vtlog "link /dev/$vtDM to /dev/disk/by-label/$VTLABEL" vtlog "link /dev/$vtDM to /dev/disk/by-label/$VTLABEL"
ln -s /dev/$vtDM "/dev/disk/by-label/$VTLABEL" ln -s /dev/$vtDM "/dev/disk/by-label/$VTLABEL"
fi fi

View File

@@ -892,3 +892,17 @@ ventoy_check_umount() {
fi fi
done done
} }
ventoy_wait_dir() {
vtdir=$1
vtsec=0
while [ $vtsec -lt $2 ]; do
if [ -d "$vtdir" ]; then
break
else
$SLEEP 1
vtsec=$(expr $vtsec + 1)
fi
done
}

View File

@@ -1,7 +1,7 @@
========== Ventoy2Disk.sh =============== ========== Ventoy2Disk.sh ===============
sudo sh Ventoy2Disk.sh { -i | -I | -u } /dev/sdX sdX is the USB device, for example /dev/sdb. sudo bash Ventoy2Disk.sh { -i | -I | -u } /dev/sdX sdX is the USB device, for example /dev/sdb.
Ventoy2Disk.sh CMD [ OPTION ] /dev/sdX Ventoy2Disk.sh CMD [ OPTION ] /dev/sdX
CMD: CMD:
@@ -18,16 +18,16 @@ Please refer https://www.ventoy.net/en/doc_start.html for details.
========== VentoyWeb.sh =============== ========== VentoyWeb.sh ===============
1. sudo sh VentoyWeb.sh 1. sudo bash VentoyWeb.sh
2. open your browser and visit http://127.0.0.1:24680 2. open your browser and visit http://127.0.0.1:24680
========== VentoyPlugson.sh =============== ========== VentoyPlugson.sh ===============
1. sudo sh VentoyPlugson.sh 1. sudo bash VentoyPlugson.sh /dev/sdX
2. open your browser and visit http://127.0.0.1:24681 2. open your browser and visit http://127.0.0.1:24681
========== VentoyVlnk.sh =============== ========== VentoyVlnk.sh ===============
Usage: sudo sh VentoyVlnk.sh CMD FILE Usage: sudo bash VentoyVlnk.sh CMD FILE
CMD: CMD:
-c FILE create vlnk for FILE -c FILE create vlnk for FILE
-l VLNK parse vlnk file -l VLNK parse vlnk file
@@ -43,21 +43,21 @@ VentoyGUI is native GUI program for Linux (GTK/QT)
========== CreatePersistentImg.sh =============== ========== CreatePersistentImg.sh ===============
sudo sh CreatePersistentImg.sh [ -s SIZE_IN_MB ] [ -t FSTYPE ] [ -l LABEL ] for example: sudo bash CreatePersistentImg.sh [ -s SIZE_IN_MB ] [ -t FSTYPE ] [ -l LABEL ] for example:
sh CreatePersistentImg.sh ----> persistence.dat in 1GB size and ext4 filesystem and casper-rw label bash CreatePersistentImg.sh ----> persistence.dat in 1GB size and ext4 filesystem and casper-rw label
sh CreatePersistentImg.sh -l MX-Persist ----> persistence.dat in 1GB size and ext4 filesystem and MX-Persist label bash CreatePersistentImg.sh -l MX-Persist ----> persistence.dat in 1GB size and ext4 filesystem and MX-Persist label
sh CreatePersistentImg.sh -s 2048 ----> persistence.dat in 2GB size and ext4 filesystem and casper-rw label bash CreatePersistentImg.sh -s 2048 ----> persistence.dat in 2GB size and ext4 filesystem and casper-rw label
sh CreatePersistentImg.sh -s 4096 -t xfs ----> persistence.dat in 4GB size and xfs filesystem (ext2/3/4 xfs are supported) and casper-rw label bash CreatePersistentImg.sh -s 4096 -t xfs ----> persistence.dat in 4GB size and xfs filesystem (ext2/3/4 xfs are supported) and casper-rw label
Please refer https://www.ventoy.net/en/plugin_persistence.html for details. Please refer https://www.ventoy.net/en/plugin_persistence.html for details.
========== ExtendPersistentImg.sh =============== ========== ExtendPersistentImg.sh ===============
sudo sh ExtendPersistentImg.sh file size sudo bash ExtendPersistentImg.sh file size
For example: For example:
sh ExtendPersistentImg.sh persistence.dat 2048 ----> Extend persistence.dat by 2048MB bash ExtendPersistentImg.sh persistence.dat 2048 ----> Extend persistence.dat by 2048MB
That is to say, persistence.dat file will grow to 3GB size (assume that it is 1GB size before extend) That is to say, persistence.dat file will grow to 3GB size (assume that it is 1GB size before extend)
Please refer https://www.ventoy.net/en/plugin_persistence.html for details. Please refer https://www.ventoy.net/en/plugin_persistence.html for details.

View File

@@ -1,19 +1,17 @@
if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.md5" ]; then unset vtchkdef
set default=0 vt_vtoychksum_exist "${vtoy_iso_part}" "${VTOY_CHKSUM_FILE_PATH}"
set vtchksumfile=$?
if [ -f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.md5" -o $vtchksumfile -eq 0 ]; then
if [ -z "$vtchkdef" ]; then
set default=0
set vtchkdef=1
fi
menuentry "$VTLANG_CHKSUM_MD5_CALC_CHK" --class=checksum_md5 { menuentry "$VTLANG_CHKSUM_MD5_CALC_CHK" --class=checksum_md5 {
md5sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}" md5sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}"
vt_cmp_checksum 0 "${VTOY_CHKSUM_FILE_PATH}"
vt_1st_line "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.md5" vtReadChecksum
if vt_str_casebegin "$vtReadChecksum" "$VT_LAST_CHECK_SUM"; then
echo -e "\n\nCheck MD5 value with .md5 file. [ OK ]"
else
echo -e "\n\nCheck MD5 value with .md5 file. [ FAIL ]"
echo "The MD5 value in .md5 file is:"
echo "$vtReadChecksum"
fi
echo -en "\n\n$VTLANG_ENTER_EXIT ..." echo -en "\n\n$VTLANG_ENTER_EXIT ..."
read vtInputKey read vtInputKey
} }
@@ -26,20 +24,14 @@ else
} }
fi fi
if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha1" ]; then if [ -f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha1" -o $vtchksumfile -eq 0 ]; then
set default=1 if [ -z "$vtchkdef" ]; then
set default=1
set vtchkdef=1
fi
menuentry "$VTLANG_CHKSUM_SHA1_CALC_CHK" --class=checksum_sha1 { menuentry "$VTLANG_CHKSUM_SHA1_CALC_CHK" --class=checksum_sha1 {
sha1sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}" sha1sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}"
vt_cmp_checksum 1 "${VTOY_CHKSUM_FILE_PATH}"
vt_1st_line "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha1" vtReadChecksum
if vt_str_casebegin "$vtReadChecksum" "$VT_LAST_CHECK_SUM"; then
echo -e "\n\nCheck SHA1 value with .sha1 file. [ OK ]"
else
echo -e "\n\nCheck SHA1 value with .sha1 file. [ FAIL ]"
echo "The SHA1 value in .sha1 file is:"
echo "$vtReadChecksum"
fi
echo -en "\n\n$VTLANG_ENTER_EXIT ..." echo -en "\n\n$VTLANG_ENTER_EXIT ..."
read vtInputKey read vtInputKey
@@ -55,20 +47,14 @@ fi
if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha256" ]; then if [ -f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha256" -o $vtchksumfile -eq 0 ]; then
set default=2 if [ -z "$vtchkdef" ]; then
set default=2
set vtchkdef=1
fi
menuentry "$VTLANG_CHKSUM_SHA256_CALC_CHK" --class=checksum_sha256 { menuentry "$VTLANG_CHKSUM_SHA256_CALC_CHK" --class=checksum_sha256 {
sha256sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}" sha256sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}"
vt_cmp_checksum 2 "${VTOY_CHKSUM_FILE_PATH}"
vt_1st_line "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha256" vtReadChecksum
if vt_str_casebegin "$vtReadChecksum" "$VT_LAST_CHECK_SUM"; then
echo -e "\n\nCheck SHA256 value with .sha256 file. [ OK ]"
else
echo -e "\n\nCheck SHA256 value with .sha256 file. [ FAIL ]"
echo "The SHA256 value in .sha256 file is:"
echo "$vtReadChecksum"
fi
echo -en "\n\n$VTLANG_ENTER_EXIT ..." echo -en "\n\n$VTLANG_ENTER_EXIT ..."
read vtInputKey read vtInputKey
@@ -84,20 +70,14 @@ fi
if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha512" ]; then if [ -f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha512" -o $vtchksumfile -eq 0 ]; then
set default=3 if [ -z "$vtchkdef" ]; then
set default=3
set vtchkdef=1
fi
menuentry "$VTLANG_CHKSUM_SHA512_CALC_CHK" --class=checksum_sha512{ menuentry "$VTLANG_CHKSUM_SHA512_CALC_CHK" --class=checksum_sha512{
sha512sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}" sha512sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}"
vt_cmp_checksum 3 "${VTOY_CHKSUM_FILE_PATH}"
vt_1st_line "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha512" vtReadChecksum
if vt_str_casebegin "$vtReadChecksum" "$VT_LAST_CHECK_SUM"; then
echo -e "\n\nCheck SHA512 value with .sha512 file. [ OK ]"
else
echo -e "\n\nCheck SHA512 value with .sha512 file. [ FAIL ]"
echo "The SHA512 value in .sha512 file is:"
echo "$vtReadChecksum"
fi
echo -en "\n\n$VTLANG_ENTER_EXIT ..." echo -en "\n\n$VTLANG_ENTER_EXIT ..."
read vtInputKey read vtInputKey

View File

@@ -19,7 +19,6 @@
if [ "$grub_platform" = "pc" ]; then if [ "$grub_platform" = "pc" ]; then
insmod setkey insmod setkey
insmod regexp insmod regexp
insmod video_fb
fi fi
function ventoy_pause { function ventoy_pause {
@@ -126,7 +125,8 @@ function ventoy_load_menu_lang_file {
function get_os_type { function get_os_type {
set vtoy_os=Linux set vtoy_os=Linux
export vtoy_os
if vt_str_begin "$vt_volume_id" "DLC Boot"; then if vt_str_begin "$vt_volume_id" "DLC Boot"; then
if [ -f (loop)/DLCBoot.exe ]; then if [ -f (loop)/DLCBoot.exe ]; then
set vtoy_os=Windows set vtoy_os=Windows
@@ -227,6 +227,8 @@ function distro_specify_wim_patch {
function distro_specify_wim_patch_phase2 { function distro_specify_wim_patch_phase2 {
if [ -f (loop)/boot/boot.wim ]; then if [ -f (loop)/boot/boot.wim ]; then
vt_windows_collect_wim_patch wim /boot/boot.wim vt_windows_collect_wim_patch wim /boot/boot.wim
elif [ -f (loop)/sources/boot.wim ]; then
vt_windows_collect_wim_patch wim /sources/boot.wim
fi fi
if vt_str_begin "$vt_volume_id" "DLC Boot"; then if vt_str_begin "$vt_volume_id" "DLC Boot"; then
@@ -857,6 +859,9 @@ function uefi_linux_menu_func {
if [ -f (loop)/boot/isolinux/syslnx64.cfg ]; then if [ -f (loop)/boot/isolinux/syslnx64.cfg ]; then
syslinux_configfile (loop)/boot/isolinux/syslnx64.cfg syslinux_configfile (loop)/boot/isolinux/syslnx64.cfg
set vtback_cfg_find=1 set vtback_cfg_find=1
elif [ -f (loop)/boot/syslinux/porteus.cfg ]; then
syslinux_configfile (loop)/boot/syslinux/porteus.cfg
set vtback_cfg_find=1
fi fi
fi fi
@@ -904,11 +909,6 @@ function ventoy_reset_nojoliet {
} }
function uefi_iso_menu_func { function uefi_iso_menu_func {
if [ -d (loop)/ ]; then
loopback -d loop
fi
if [ -n "$vtisouefi" ]; then if [ -n "$vtisouefi" ]; then
set LoadIsoEfiDriver=on set LoadIsoEfiDriver=on
unset vtisouefi unset vtisouefi
@@ -922,21 +922,13 @@ function uefi_iso_menu_func {
vt_select_auto_install "${chosen_path}" vt_select_auto_install "${chosen_path}"
vt_select_persistence "${chosen_path}" vt_select_persistence "${chosen_path}"
if vt_is_udf "${1}${chosen_path}"; then if ! vt_is_udf "${1}${chosen_path}"; then
set ventoy_fs_probe=udf
else
set ventoy_fs_probe=iso9660
ventoy_reset_nojoliet
# Lenovo EasyStartup need an addional sector for boundary check # Lenovo EasyStartup need an addional sector for boundary check
if vt_str_begin "$vt_volume_id" "EasyStartup"; then if vt_str_begin "$vt_volume_id" "EasyStartup"; then
vt_skip_svd "${vtoy_iso_part}${vt_chosen_path}" vt_skip_svd "${vtoy_iso_part}${vt_chosen_path}"
vt_append_extra_sector 1 vt_append_extra_sector 1
fi fi
fi fi
loopback loop "${1}${chosen_path}"
get_os_type (loop)
if [ -d (loop)/EFI ]; then if [ -d (loop)/EFI ]; then
set vt_efi_dir=YES set vt_efi_dir=YES
@@ -955,15 +947,6 @@ function uefi_iso_menu_func {
vt_check_compatible (loop) vt_check_compatible (loop)
fi fi
if vt_need_secondary_menu "$vt_chosen_name"; then
vt_show_secondary_menu "$vt_chosen_path" "$vtoy_os" $vt_chosen_size
if vt_check_mode 0 "$vt_chosen_name"; then
uefi_iso_memdisk $vtoy_iso_part "$vt_chosen_path"
vt_secondary_recover_mode
return
fi
fi
vt_img_sector "${1}${chosen_path}" vt_img_sector "${1}${chosen_path}"
if [ "$ventoy_fs_probe" = "iso9660" ]; then if [ "$ventoy_fs_probe" = "iso9660" ]; then
@@ -980,8 +963,7 @@ function uefi_iso_menu_func {
uefi_linux_menu_func "$1" "${chosen_path}" uefi_linux_menu_func "$1" "${chosen_path}"
fi fi
ventoy_gui_console ventoy_gui_console
vt_secondary_recover_mode
} }
function uefi_iso_memdisk { function uefi_iso_memdisk {
@@ -1331,6 +1313,9 @@ function legacy_linux_menu_func {
if [ -f (loop)/boot/isolinux/syslnx64.cfg ]; then if [ -f (loop)/boot/isolinux/syslnx64.cfg ]; then
syslinux_configfile (loop)/boot/isolinux/syslnx64.cfg syslinux_configfile (loop)/boot/isolinux/syslnx64.cfg
set vtback_cfg_find=1 set vtback_cfg_find=1
elif [ -f (loop)/boot/syslinux/porteus.cfg ]; then
syslinux_configfile (loop)/boot/syslinux/porteus.cfg
set vtback_cfg_find=1
fi fi
fi fi
@@ -1366,26 +1351,10 @@ function legacy_unix_menu_func {
function legacy_iso_menu_func { function legacy_iso_menu_func {
if [ -d (loop)/ ]; then
loopback -d loop
fi
set chosen_path="$2" set chosen_path="$2"
vt_select_auto_install "${chosen_path}" vt_select_auto_install "${chosen_path}"
vt_select_persistence "${chosen_path}" vt_select_persistence "${chosen_path}"
if vt_is_udf "${1}${chosen_path}"; then
set ventoy_fs_probe=udf
else
set ventoy_fs_probe=iso9660
ventoy_reset_nojoliet
fi
loopback loop "${1}${chosen_path}"
get_os_type (loop)
if [ -n "$vtcompat" ]; then if [ -n "$vtcompat" ]; then
set ventoy_compatible=YES set ventoy_compatible=YES
@@ -1396,15 +1365,6 @@ function legacy_iso_menu_func {
vt_check_compatible (loop) vt_check_compatible (loop)
fi fi
if vt_need_secondary_menu "$vt_chosen_name"; then
vt_show_secondary_menu "$vt_chosen_path" "$vtoy_os" $vt_chosen_size
if vt_check_mode 0 "$vt_chosen_name"; then
legacy_iso_memdisk $vtoy_iso_part "$vt_chosen_path"
vt_secondary_recover_mode
return
fi
fi
vt_img_sector "${1}${chosen_path}" vt_img_sector "${1}${chosen_path}"
if [ "$ventoy_fs_probe" = "iso9660" ]; then if [ "$ventoy_fs_probe" = "iso9660" ]; then
@@ -1513,6 +1473,33 @@ function iso_common_menuentry {
if ventoy_vcfg_proc "${vt_chosen_path}"; then if ventoy_vcfg_proc "${vt_chosen_path}"; then
return return
fi fi
#secondary boot menu
if vt_is_udf "${vtoy_iso_part}${vt_chosen_path}"; then
set ventoy_fs_probe=udf
else
set ventoy_fs_probe=iso9660
ventoy_reset_nojoliet
fi
if [ -d (loop)/ ]; then
loopback -d loop
fi
loopback loop "${vtoy_iso_part}${vt_chosen_path}"
get_os_type (loop)
ventoy_debug_pause
if vt_need_secondary_menu "$vt_chosen_name"; then
vt_show_secondary_menu "$vt_chosen_path" "$vtoy_os" $vt_chosen_size
if [ "$VTOY_SECOND_EXIT" = "1" ]; then
return
fi
fi
if vt_str_begin "$vt_volume_id" "Avira"; then if vt_str_begin "$vt_volume_id" "Avira"; then
vt_skip_svd "${vtoy_iso_part}${vt_chosen_path}" vt_skip_svd "${vtoy_iso_part}${vt_chosen_path}"
@@ -1564,7 +1551,9 @@ function iso_common_menuentry {
else else
uefi_iso_menu_func $vtoy_iso_part "$vt_chosen_path" uefi_iso_menu_func $vtoy_iso_part "$vt_chosen_path"
fi fi
fi fi
vt_secondary_recover_mode
} }
function miso_common_menuentry { function miso_common_menuentry {
@@ -2397,7 +2386,7 @@ function mimg_common_menuentry {
############################################################# #############################################################
############################################################# #############################################################
set VENTOY_VERSION="1.0.86" set VENTOY_VERSION="1.0.87"
#ACPI not compatible with Window7/8, so disable by default #ACPI not compatible with Window7/8, so disable by default
set VTOY_PARAM_NO_ACPI=1 set VTOY_PARAM_NO_ACPI=1
@@ -2556,9 +2545,18 @@ elif [ "$vtoy_display_mode" = "serial_console" ]; then
terminal_input serial console terminal_input serial console
terminal_output serial console terminal_output serial console
else else
if [ "$vtoy_res_fit" = "1" ]; then if [ "$vtoy_gfxmode" = "max" ]; then
set gfxmode=1024x768
terminal_output gfxterm terminal_output gfxterm
fi
vt_enum_video_mode
vt_get_video_mode 0 vtCurMode
terminal_output console
set gfxmode=$vtCurMode
terminal_output gfxterm
elif [ "$vtoy_res_fit" = "1" ]; then
terminal_output gfxterm
fi
if [ -n "$vtoy_theme" ]; then if [ -n "$vtoy_theme" ]; then
vt_set_theme vt_set_theme

View File

@@ -9,7 +9,7 @@ F7 - GUI মোড <-> TEXT মোডের মধ্যে স্যুইচ
m/Ctrl+m - চেকসাম ইমেজ ফাইল (md5/sha1/sha256/sha512) m/Ctrl+m - চেকসাম ইমেজ ফাইল (md5/sha1/sha256/sha512)
d/Ctrl+d - Memdisk মোড (শুধুমাত্র ছোট WinPE/LiveCD ISO/IMG জন্য) d/Ctrl+d - Memdisk মোড (শুধুমাত্র ছোট WinPE/LiveCD ISO/IMG জন্য)
w/Ctrl+w - WIMBOOT মোড (শুধুমাত্র standard Windows ISO জন্য) w/Ctrl+w - WIMBOOT মোড (শুধুমাত্র Windows/WinPE ISO জন্য)
r/Ctrl+r - Grub2 মোড (শুধুমাত্র কিছু Linux distro জন্য) r/Ctrl+r - Grub2 মোড (শুধুমাত্র কিছু Linux distro জন্য)
i/Ctrl+i - Compatible মোড (শুধুমাত্র debug জন্য) i/Ctrl+i - Compatible মোড (শুধুমাত্র debug জন্য)
u/Ctrl+u - ISO efi ড্রাইভার লোড করুন (শুধুমাত্র debug জন্য, সরকারীভাবে ব্যবহার করা যাবে না) u/Ctrl+u - ISO efi ড্রাইভার লোড করুন (শুধুমাত্র debug জন্য, সরকারীভাবে ব্যবহার করা যাবে না)

View File

@@ -9,7 +9,7 @@ F7 - Wechseln zwischen Grafik-/Text-Modus
m/Strg+m - Prüfsumme von Abbilddatei prüfen (md5/sha1/sha256/sha512) m/Strg+m - Prüfsumme von Abbilddatei prüfen (md5/sha1/sha256/sha512)
d/Strg+d - Memdisk-Modus (Nur für kleine WinPE/LiveCD ISO/IMG) d/Strg+d - Memdisk-Modus (Nur für kleine WinPE/LiveCD ISO/IMG)
w/Strg+w - WIMBOOT-Modus (Nur für Standard Windows ISO) w/Strg+w - WIMBOOT-Modus (Nur für Windows/WinPE ISO)
r/Strg+r - Grub2-Modus (Nur für einige Linux-Distributionen) r/Strg+r - Grub2-Modus (Nur für einige Linux-Distributionen)
i/Strg+i - Kompatibilitäts-Modus (Nur für Fehleranalyse) i/Strg+i - Kompatibilitäts-Modus (Nur für Fehleranalyse)
u/Strg+u - ISO EFI-Treiber laden (Nur für Fehleranalyse, darf offiziell nicht benutzt werden) u/Strg+u - ISO EFI-Treiber laden (Nur für Fehleranalyse, darf offiziell nicht benutzt werden)

View File

@@ -9,7 +9,7 @@ F7 - Switch between GUI Mode <-> TEXT Mode
m/Ctrl+m - Checksum image files (md5/sha1/sha256/sha512) m/Ctrl+m - Checksum image files (md5/sha1/sha256/sha512)
d/Ctrl+d - Memdisk Mode (Only for small WinPE/LiveCD ISO/IMG) d/Ctrl+d - Memdisk Mode (Only for small WinPE/LiveCD ISO/IMG)
w/Ctrl+w - WIMBOOT Mode (Only for standard Windows ISO) w/Ctrl+w - WIMBOOT Mode (Only for Windows/WinPE ISO files)
r/Ctrl+r - Grub2 Mode (Only for some Linux distros) r/Ctrl+r - Grub2 Mode (Only for some Linux distros)
i/Ctrl+i - Compatible Mode (Only for debugging) i/Ctrl+i - Compatible Mode (Only for debugging)
u/Ctrl+u - Load ISO EFI driver (Only for debugging, cannot be used officially) u/Ctrl+u - Load ISO EFI driver (Only for debugging, cannot be used officially)

View File

@@ -0,0 +1,19 @@
L - Seleccionar lenguaje
F1 - Mostrar información de ayuda
F2 - Navegar y arranca archivos en el disco local
F3 - Cambiar modo de menú entre vista de árbol <-> vista de lista
F4 - arrancar Windows/Linux en el disco local
F5 - Utilidades
F6 - Cargar menú de Grub2 personalizado
F7 - Cambiar entre modo grafico <-> modo texto
m/Ctrl+m - Suma de comprobación de archivos de imagen (md5/sha1/sha256/sha512)
d/Ctrl+d - Modo Memdisk (solo para WinPE/LiveCD ISO/IMG pequeños)
w/Ctrl+w - Modo WIMBOOT (Solo para archivos Windows/WinPE ISO)
r/Ctrl+r - Modo Grub2 (Solo para algunas distribuciones de Linux)
i/Ctrl+i - Modo compatible (Solo para depuración)
u/Ctrl+u - Cargar controlador ISO EFI (Solo para depuración, no se puede usar oficialmente)
Presiona ESC para regresar ......

View File

@@ -9,7 +9,7 @@ F7 - Basculer entre le mode graphique <-> mode texte
m/Ctrl+m - Somme de contrôle des images (md5/sha1/sha256/sha512) m/Ctrl+m - Somme de contrôle des images (md5/sha1/sha256/sha512)
d/Ctrl+d - Mode Memdisk (pour WinPE/LiveCD ISO/IMG uniquement) d/Ctrl+d - Mode Memdisk (pour WinPE/LiveCD ISO/IMG uniquement)
w/Ctrl+w - Mode WIMBOOT (pour images standards Windows uniquement) w/Ctrl+w - Mode WIMBOOT (pour images Windows/WinPE uniquement)
r/Ctrl+r - Mode GRUB 2 (pour quelques distributions Linux uniquement) r/Ctrl+r - Mode GRUB 2 (pour quelques distributions Linux uniquement)
i/Ctrl+i - Mode Compatible (pour débug uniquement) i/Ctrl+i - Mode Compatible (pour débug uniquement)
u/Ctrl+u - Charger lISO dun pilote EFI (pour débug uniquement) u/Ctrl+u - Charger lISO dun pilote EFI (pour débug uniquement)

View File

@@ -9,7 +9,7 @@ F7 - GUI मोड <-> Text मोड के बीच स्विच करे
m/Ctrl+m - चेकसम इमेज फाइल्स (md5/sha1/sha256/sha512) m/Ctrl+m - चेकसम इमेज फाइल्स (md5/sha1/sha256/sha512)
d/Ctrl+d - Memdisk मोड (केवल small WinPE/LiveCD ISO/IMG के लिए) d/Ctrl+d - Memdisk मोड (केवल small WinPE/LiveCD ISO/IMG के लिए)
w/Ctrl+w - WIMBOOT मोड (केवल standard Windows ISO के लिए) w/Ctrl+w - WIMBOOT मोड (केवल Windows/WinPE ISO के लिए)
r/Ctrl+r - Grub2 मोड (केवल कुछ Linux distros के लिए) r/Ctrl+r - Grub2 मोड (केवल कुछ Linux distros के लिए)
i/Ctrl+i - Compatible मोड (केवल डिबग के लिए) i/Ctrl+i - Compatible मोड (केवल डिबग के लिए)
u/Ctrl+u - ISO efi ड्राइवर लोड करें (केवल debug के लिए, आधिकारिक तौर पर इस्तेमाल नहीं किया जा सकता) u/Ctrl+u - ISO efi ड्राइवर लोड करें (केवल debug के लिए, आधिकारिक तौर पर इस्तेमाल नहीं किया जा सकता)

View File

@@ -9,7 +9,7 @@ F7 - Mijenja između GUI <-> TEXT načina rada
m/Ctrl+m - Generira heš odabranog imidž fajla (md5/sha1/sha256/sha512) m/Ctrl+m - Generira heš odabranog imidž fajla (md5/sha1/sha256/sha512)
d/Ctrl+d - Memdisk način rada (samo za male WinPE/LiveCD imidž fajlove) d/Ctrl+d - Memdisk način rada (samo za male WinPE/LiveCD imidž fajlove)
w/Ctrl+w - WIMBOOT način rada (samo za standardne Windows imidž fajlove) w/Ctrl+w - WIMBOOT način rada (samo za Windows/WinPE imidž fajlove)
r/Ctrl+r - GRUB2 način rada (samo za neke Linux distribucije) r/Ctrl+r - GRUB2 način rada (samo za neke Linux distribucije)
i/Ctrl+i - Kompatibilni način rada (samo za testiranje) i/Ctrl+i - Kompatibilni način rada (samo za testiranje)
u/Ctrl+u - Učitava EFI drajver za imidž fajlove (samo za testiranje) u/Ctrl+u - Učitava EFI drajver za imidž fajlove (samo za testiranje)

View File

@@ -9,7 +9,7 @@ F7 - Váltás Grafikus mód <-> Szövege mód között
m/Ctrl+m - Image fájlok ell.összege (md5/sha1/sha256/sha512) m/Ctrl+m - Image fájlok ell.összege (md5/sha1/sha256/sha512)
d/Ctrl+d - Memdisk mód (Csak kis WinPE/LiveCD ISO/IMG esetén) d/Ctrl+d - Memdisk mód (Csak kis WinPE/LiveCD ISO/IMG esetén)
w/Ctrl+w - WIMBOOT mód (Csak szabványos Windows ISO esetében) w/Ctrl+w - WIMBOOT mód (Csak Windows/WinPE ISO esetében)
r/Ctrl+r - Grub2 mód (Csak néhány Linux disztró esetében) r/Ctrl+r - Grub2 mód (Csak néhány Linux disztró esetében)
i/Ctrl+i - Kompatibilis mód (Csak hibakeresésre) i/Ctrl+i - Kompatibilis mód (Csak hibakeresésre)
u/Ctrl+u - ISO efi driver betöltés (Csak hibakeresésre, hivatalosan nem használható.) u/Ctrl+u - ISO efi driver betöltés (Csak hibakeresésre, hivatalosan nem használható.)

View File

@@ -9,7 +9,7 @@ F7 - Beralih antara mode GUI <-> Mode TEXT
m/Ctrl+m - Periksa berkas files (md5/sha1/sha256/sha512) m/Ctrl+m - Periksa berkas files (md5/sha1/sha256/sha512)
d/Ctrl+d - Mode Memdisk (Hanya untuk ukuran WinPE/LiveCD ISO/IMG yang kecil) d/Ctrl+d - Mode Memdisk (Hanya untuk ukuran WinPE/LiveCD ISO/IMG yang kecil)
w/Ctrl+w - Mode WIMBOOT (Hanya untuk berkas ISO Windows standar) w/Ctrl+w - Mode WIMBOOT (Hanya untuk berkas ISO Windows/WinPE)
r/Ctrl+r - Mode Grub2 (Hanya untuk distro Linux tertentu) r/Ctrl+r - Mode Grub2 (Hanya untuk distro Linux tertentu)
i/Ctrl+i - Mode Kompatibel/Compatible (Hanya untuk debug saja) i/Ctrl+i - Mode Kompatibel/Compatible (Hanya untuk debug saja)
u/Ctrl+u - Memuat ISO efi driver (Hanya untuk debug saja, tidak dapat dipakai secara umum) u/Ctrl+u - Memuat ISO efi driver (Hanya untuk debug saja, tidak dapat dipakai secara umum)

View File

@@ -9,7 +9,7 @@ F7 - 操作形式を切り替えるGUI ↔ CUI
m/Ctrl+m - イメージの検査合計を計算する (md5/sha1/sha256/sha512) m/Ctrl+m - イメージの検査合計を計算する (md5/sha1/sha256/sha512)
d/Ctrl+d - 主記憶装置上に記憶域を作成する容量の小さなWinPE・LiveCD専用 d/Ctrl+d - 主記憶装置上に記憶域を作成する容量の小さなWinPE・LiveCD専用
w/Ctrl+w - WIMBOOTモード標準的なWindows ISO専用 w/Ctrl+w - WIMBOOTモードWindows/WinPE ISO専用
r/Ctrl+r - Grub2モード一部のLinuxディストリビューション専用 r/Ctrl+r - Grub2モード一部のLinuxディストリビューション専用
i/Ctrl+i - 互換モード(開発用) i/Ctrl+i - 互換モード(開発用)
u/Ctrl+u - ISO efiドライバーを読み取る開発用非公式 u/Ctrl+u - ISO efiドライバーを読み取る開発用非公式

View File

@@ -9,7 +9,7 @@ F7 - ჩვენების რეჟიმის გადართვა '
m/Ctrl+m - ფაილის საკონტროლო ჯამის შემოწმება (md5/sha1/sha256/sha512) m/Ctrl+m - ფაილის საკონტროლო ჯამის შემოწმება (md5/sha1/sha256/sha512)
d/Ctrl+d - Memdisk რეჟიმი (განკუთვნილია მხოლოდ პატარა ზომის WinPE/LiveCD ISO/IMG დისტრიბუტივებისთვის) d/Ctrl+d - Memdisk რეჟიმი (განკუთვნილია მხოლოდ პატარა ზომის WinPE/LiveCD ISO/IMG დისტრიბუტივებისთვის)
w/Ctrl+w - WIMBOOT რეჟიმი (განკუთვნილია მხოლოდ სტანდარტული Windows ISO დისტრიბუტივებისთვის) w/Ctrl+w - WIMBOOT რეჟიმი (განკუთვნილია მხოლოდ სტანდარტული Windows/WinPE ISO დისტრიბუტივებისთვის)
r/Ctrl+r - Grub2 რეჟიმი (განკუთვნილია მხოლოდ ზოგიერთი Linux დისტრიბუტივებისთვის) r/Ctrl+r - Grub2 რეჟიმი (განკუთვნილია მხოლოდ ზოგიერთი Linux დისტრიბუტივებისთვის)
i/Ctrl+i - თავსებადი რეჟიმი (განკუთვნილია მხოლოდ გამართვისთვის) i/Ctrl+i - თავსებადი რეჟიმი (განკუთვნილია მხოლოდ გამართვისთვის)
u/Ctrl+u - ISO EFI დრაივერის ჩატვირთვა (განკუთვნილია მხოლოდ გამართვისთვის, დაუშვებელია ოფიციალური გამოყენება) u/Ctrl+u - ISO EFI დრაივერის ჩატვირთვა (განკუთვნილია მხოლოდ გამართვისთვის, დაუშვებელია ოფიციალური გამოყენება)

View File

@@ -9,7 +9,7 @@ F7 - GUI 모드 <-> TEXT 모드 간에 전환
m/Ctrl+m - 체크섬 이미지 파일 (md5/sha1/sha256/sha512) m/Ctrl+m - 체크섬 이미지 파일 (md5/sha1/sha256/sha512)
d/Ctrl+d - Memdisk 모드 (작은 WinPE/LiveCD ISO/IMG 전용) d/Ctrl+d - Memdisk 모드 (작은 WinPE/LiveCD ISO/IMG 전용)
w/Ctrl+w - WIMBOOT 모드 (표준 Windows ISO 전용) w/Ctrl+w - WIMBOOT 모드 (표준 Windows/WinPE ISO 전용)
r/Ctrl+r - Grub2 모드 (일부 Linux 배포판에만 해당) r/Ctrl+r - Grub2 모드 (일부 Linux 배포판에만 해당)
i/Ctrl+i - 호환 모드 (디버그 전용) i/Ctrl+i - 호환 모드 (디버그 전용)
u/Ctrl+u - ISO EFI 드라이버 불러오기 (디버그 전용, 공식적으로 사용할 수 없음) u/Ctrl+u - ISO EFI 드라이버 불러오기 (디버그 전용, 공식적으로 사용할 수 없음)

View File

@@ -9,7 +9,7 @@ F7 - Przełączanie między trybem GUI <-> trybem TEKST
m/Ctrl+m — Pliki obrazów z sumą kontrolną (md5/sha1/sha256/sha512) m/Ctrl+m — Pliki obrazów z sumą kontrolną (md5/sha1/sha256/sha512)
d/Ctrl+d — Tryb Memdisk (tylko dla małych WinPE/LiveCD ISO/IMG) d/Ctrl+d — Tryb Memdisk (tylko dla małych WinPE/LiveCD ISO/IMG)
w/Ctrl+w — tryb WIMBOOT (tylko dla standardowego systemu Windows ISO) w/Ctrl+w — tryb WIMBOOT (tylko dla standardowego systemu Windows/WinPE ISO)
r/Ctrl+r — tryb Grub2 (tylko dla niektórych dystrybucji Linuksa) r/Ctrl+r — tryb Grub2 (tylko dla niektórych dystrybucji Linuksa)
i/Ctrl+i — tryb zgodności (tylko do debugowania) i/Ctrl+i — tryb zgodności (tylko do debugowania)
u/Ctrl+u — Załaduj sterownik ISO EFI (tylko do debugowania, nie można go oficjalnie używać) u/Ctrl+u — Załaduj sterownik ISO EFI (tylko do debugowania, nie można go oficjalnie używać)

View File

@@ -9,7 +9,7 @@ F7 - Alternar entre Modo GUI <-> Modo TEXTO
m/Ctrl+m - Checksum ficheiros de imagem (md5/sha1/sha256/sha512) m/Ctrl+m - Checksum ficheiros de imagem (md5/sha1/sha256/sha512)
d/Ctrl+d - Modo Memdisk (Apenas para pequenos WinPE/LiveCD ISO/IMG) d/Ctrl+d - Modo Memdisk (Apenas para pequenos WinPE/LiveCD ISO/IMG)
w/Ctrl+w - Modo WIMBOOT (Apenas para Windows ISO padrão) w/Ctrl+w - Modo WIMBOOT (Apenas para Windows/WinPE ISO padrão)
r/Ctrl+r - Modo Grub2 (Apenas para algumas distros Linux) r/Ctrl+r - Modo Grub2 (Apenas para algumas distros Linux)
i/Ctrl+i - Modo Compatível (Apenas para depuração) i/Ctrl+i - Modo Compatível (Apenas para depuração)
u/Ctrl+u - Carregar o controlador ISO efi (Apenas para depuração, não pode ser utilizado oficialmente) u/Ctrl+u - Carregar o controlador ISO efi (Apenas para depuração, não pode ser utilizado oficialmente)

View File

@@ -1,19 +1,19 @@
L - Выбор языка L - Выбор языка
F1 - Показать эту справочную информацию F1 - Показать эти справочные сведения
F2 - Просмотр и загрузка файлов на локальном диске F2 - Просмотр и загрузка файлов на локальном диске
F3 - Переключить режим меню между Treeview <-> ListView F3 - Переключить режим меню между «ВидДревом» <-> «ВидСписком»
F4 - Загрузка Windows/Linux с локального диска F4 - Загрузка винды/линукса с локального диска
F5 - Утилиты F5 - Утилиты
F6 - Загрузить пользовательское меню Grub2 F6 - Загрузить пользовательское меню Grub2
F7 - Переключиться между режимом GUI <-> режимом TEXT F7 - Переключиться между графическим режимом <-> текстовым режимом
m/Ctrl+m - Проверить контрольную сумму файлов образа диска (md5/sha1/sha256/sha512) m/Ctrl+m - Проверить контрольную сумму файлов образа диска (md5/sha1/sha256/sha512)
d/Ctrl+d - Режим Memdisk (Только для небольших WinPE/LiveCD ISO/IMG) d/Ctrl+d - Режим Memdisk (только для небольших WinPE/LiveCD ISO/IMG)
w/Ctrl+w - Режим WIMBOOT (Только для стандартного Windows ISO) w/Ctrl+w - Режим WIMBOOT (только для Windows/WinPE ISO)
r/Ctrl+r - Режим Grub2 (Только для некоторых дистрибутивов Linux) r/Ctrl+r - Режим Grub2 (только для некоторых сборок линукса)
i/Ctrl+i - Совместимый режим (Только для отладки) i/Ctrl+i - Совместимый режим (только для отладки)
u/Ctrl+u - Загрузить драйвер ISO EFI (Только для отладки, нельзя использовать официально) u/Ctrl+u - Загрузить драйвер ISO EFI (только для отладки, нельзя использовать официально)
Нажмите ESC, чтобы вернуться ...... Нажмите «ESC», чтобы вернуться ......

View File

@@ -9,7 +9,7 @@ F7 - Мења између GUI <-> TEXT начина рада
m/Ctrl+m - Генерира хеш одабраног имиџ фајла (md5/sha1/sha256/sha512) m/Ctrl+m - Генерира хеш одабраног имиџ фајла (md5/sha1/sha256/sha512)
d/Ctrl+d - Memdisk начин рада (само за мале WinPE/LiveCD имиџ фајлове) d/Ctrl+d - Memdisk начин рада (само за мале WinPE/LiveCD имиџ фајлове)
w/Ctrl+w - WIMBOOT начин рада (само за стандардне Windows имиџ фајлове) w/Ctrl+w - WIMBOOT начин рада (само за стандардне Windows/WinPE имиџ фајлове)
r/Ctrl+r - GRUB2 начин рада (само за неке Linux дистрибуције) r/Ctrl+r - GRUB2 начин рада (само за неке Linux дистрибуције)
i/Ctrl+i - Компатибилни начин рада (само за тестирање) i/Ctrl+i - Компатибилни начин рада (само за тестирање)
u/Ctrl+u - Учитава EFI драјвер за имиџ фајлове (само за тестирање) u/Ctrl+u - Учитава EFI драјвер за имиџ фајлове (само за тестирање)

View File

@@ -9,7 +9,7 @@ F7 - GUI பயன்முறை <-> TEXT பயன்முறைக்கு
m/Ctrl+m - செக்சம் படக் கோப்புகள் (md5/sha1/sha256/sha512) m/Ctrl+m - செக்சம் படக் கோப்புகள் (md5/sha1/sha256/sha512)
d/Ctrl+d - Memdisk பயன்முறை (சிறிய WinPE/LiveCD ISO/IMGக்கு மட்டும்) d/Ctrl+d - Memdisk பயன்முறை (சிறிய WinPE/LiveCD ISO/IMGக்கு மட்டும்)
w/Ctrl+w - WIMBOOT பயன்முறை (நிலையான Windows ISO க்கு மட்டும்) w/Ctrl+w - WIMBOOT பயன்முறை (நிலையான Windows/WinPE ISO க்கு மட்டும்)
r/Ctrl+r - Grub2 பயன்முறை (சில லினக்ஸ் டிஸ்ட்ரோக்களுக்கு மட்டும்) r/Ctrl+r - Grub2 பயன்முறை (சில லினக்ஸ் டிஸ்ட்ரோக்களுக்கு மட்டும்)
i/Ctrl+i - இணக்கமான பயன்முறை (பிழைத்திருத்தத்திற்கு மட்டும்) i/Ctrl+i - இணக்கமான பயன்முறை (பிழைத்திருத்தத்திற்கு மட்டும்)
u/Ctrl+u - ISO efi இயக்கியை ஏற்றவும் (பிழைத்திருத்தத்திற்கு மட்டும், அதிகாரப்பூர்வமாக பயன்படுத்த முடியாது) u/Ctrl+u - ISO efi இயக்கியை ஏற்றவும் (பிழைத்திருத்தத்திற்கு மட்டும், அதிகாரப்பூர்வமாக பயன்படுத்த முடியாது)

View File

@@ -9,7 +9,7 @@ F7 - Grafik Modu(GUI Mode) <--> Metin Modu(Text Mode) arasında geçiş yapmayı
m/Ctrl+m - İndirilen imaj dosyalarının hatasız indirildiğini teyit etmek için "md5/sha1/sha256/sha512" değerlerini kontrol etmeyi sağlar m/Ctrl+m - İndirilen imaj dosyalarının hatasız indirildiğini teyit etmek için "md5/sha1/sha256/sha512" değerlerini kontrol etmeyi sağlar
d/Ctrl+d - Memdisk Modu başlatır(Yalnızca küçük WinPE/LiveCD ISO/IMG ler için bu modu kullanabilirsiniz) d/Ctrl+d - Memdisk Modu başlatır(Yalnızca küçük WinPE/LiveCD ISO/IMG ler için bu modu kullanabilirsiniz)
w/Ctrl+w - WIMBOOT Modu çalıştırmayı sağlar(Sadece normal Windows ISO ları için) w/Ctrl+w - WIMBOOT Modu çalıştırmayı sağlar(Sadece normal Windows/WinPE ISO ları için)
r/Ctrl+r - Grub2 Modu çalıştırmayı sağlar (Sadece bazı Linux dağıtımları için) r/Ctrl+r - Grub2 Modu çalıştırmayı sağlar (Sadece bazı Linux dağıtımları için)
i/Ctrl+i - Uyumluluk Modu'nu (Compatible Mode) çalıştırmayı sağlar (Sadece hata ayıklama için bu modu kullanabilirsiniz) i/Ctrl+i - Uyumluluk Modu'nu (Compatible Mode) çalıştırmayı sağlar (Sadece hata ayıklama için bu modu kullanabilirsiniz)
u/Ctrl+u - ISO efi sürücüsünü yükler(Sadece hata ayıklama için bu mod kullanılabilir, resmi olarak kullanılamaz) u/Ctrl+u - ISO efi sürücüsünü yükler(Sadece hata ayıklama için bu mod kullanılabilir, resmi olarak kullanılamaz)

View File

@@ -9,7 +9,7 @@ F7 - 界面在文本模式和图形模式之间切换。
m/Ctrl+m - 计算文件校验值md5/sha1/sha256/sha512 m/Ctrl+m - 计算文件校验值md5/sha1/sha256/sha512
d/Ctrl+d - MEMDISK 模式,把文件加载到内存启动(只适用于文件很小的 WinPE/LiveCD等 d/Ctrl+d - MEMDISK 模式,把文件加载到内存启动(只适用于文件很小的 WinPE/LiveCD等
w/Ctrl+w - WIMBOOT 模式 (只适用于标准的 Windows ISO文件 w/Ctrl+w - WIMBOOT 模式 (只适用于 Windows/WinPE 的ISO文件
r/Ctrl+r - Grub2 模式 (只适用于常见的一些 Linux 系统ISO文件 r/Ctrl+r - Grub2 模式 (只适用于常见的一些 Linux 系统ISO文件
i/Ctrl+i - 兼容模式 (只用作调试目的,不能正式使用) i/Ctrl+i - 兼容模式 (只用作调试目的,不能正式使用)
u/Ctrl+u - 加载 ISO efi 驱动(只用作调试目的,不能正式使用) u/Ctrl+u - 加载 ISO efi 驱动(只用作调试目的,不能正式使用)

View File

@@ -9,7 +9,7 @@ F7 - 介面在文字模式和圖形模式之間切換。
m/Ctrl+m - 計算檔案校驗值md5/sha1/sha256/sha512 m/Ctrl+m - 計算檔案校驗值md5/sha1/sha256/sha512
d/Ctrl+d - MEMDISK 模式,把檔載入到記憶體啟動(只適用於檔很小的 WinPE/LiveCD等 d/Ctrl+d - MEMDISK 模式,把檔載入到記憶體啟動(只適用於檔很小的 WinPE/LiveCD等
w/Ctrl+w - WIMBOOT 模式 (只適用於標準的 Windows ISO檔 w/Ctrl+w - WIMBOOT 模式 (只適用於 Windows/WinPE ISO檔
r/Ctrl+r - Grub2 模式 (只適用於常見的一些 Linux 系統ISO檔 r/Ctrl+r - Grub2 模式 (只適用於常見的一些 Linux 系統ISO檔
i/Ctrl+i - 相容模式 (只用作調試目的,不能正式使用) i/Ctrl+i - 相容模式 (只用作調試目的,不能正式使用)
u/Ctrl+u - 載入 ISO efi 驅動(只用作調試目的,不能正式使用) u/Ctrl+u - 載入 ISO efi 驅動(只用作調試目的,不能正式使用)

View File

@@ -81,13 +81,18 @@ else
terminal_output console terminal_output console
chainloader /efi/Microsoft/Boot/bootmgfw.efi chainloader /efi/Microsoft/Boot/bootmgfw.efi
boot boot
elif [ -f ($vtoydev,$partid)/VTEFI/Microsoft/Boot/bootmgfw.efi ]; then
set root=($vtoydev,$partid)
terminal_output console
chainloader /VTEFI/Microsoft/Boot/bootmgfw.efi
boot
fi fi
else else
break break
fi fi
vt_incr partid 1 vt_incr partid 1
done done
if search -n -s -f /EFI/Microsoft/Boot/bootmgfw.efi; then if search -n -s -f /EFI/Microsoft/Boot/bootmgfw.efi; then
terminal_output console terminal_output console
chainloader /EFI/Microsoft/Boot/bootmgfw.efi chainloader /EFI/Microsoft/Boot/bootmgfw.efi
@@ -109,6 +114,11 @@ else
terminal_output console terminal_output console
chainloader /efi/boot/bootia32.efi chainloader /efi/boot/bootia32.efi
boot boot
elif search -n -s -f /vtefi/boot/bootia32.efi; then
unset VTOY_SEARCH_NO_VTOYEFI
terminal_output console
chainloader /vtefi/boot/bootia32.efi
boot
else else
unset VTOY_SEARCH_NO_VTOYEFI unset VTOY_SEARCH_NO_VTOYEFI
echo "BOOTIA32.EFI NOT found ..." echo "BOOTIA32.EFI NOT found ..."
@@ -126,6 +136,15 @@ else
chainloader /efi/xorboot/xorboot.efi chainloader /efi/xorboot/xorboot.efi
fi fi
boot boot
elif search -n -s -f /vtefi/xorboot/xorboot32.xor; then
unset VTOY_SEARCH_NO_VTOYEFI
terminal_output console
if [ -f /vtefi/xorboot/bootia32.efi ]; then
chainloader /vtefi/xorboot/bootia32.efi
elif [ -f /vtefi/xorboot/xorboot.efi ]; then
chainloader /vtefi/xorboot/xorboot.efi
fi
boot
else else
unset VTOY_SEARCH_NO_VTOYEFI unset VTOY_SEARCH_NO_VTOYEFI
echo "xorboot NOT found ..." echo "xorboot NOT found ..."
@@ -139,6 +158,12 @@ else
terminal_output console terminal_output console
chainloader /efi/boot/bootaa64.efi chainloader /efi/boot/bootaa64.efi
boot boot
elif search -n -s -f /vtefi/boot/bootaa64.efi; then
unset VTOY_SEARCH_NO_VTOYEFI
terminal_output console
chainloader /vtefi/boot/bootaa64.efi
boot
else
else else
unset VTOY_SEARCH_NO_VTOYEFI unset VTOY_SEARCH_NO_VTOYEFI
echo "BOOTAA64.EFI NOT found ..." echo "BOOTAA64.EFI NOT found ..."
@@ -152,6 +177,11 @@ else
terminal_output console terminal_output console
chainloader /efi/boot/bootx64.efi chainloader /efi/boot/bootx64.efi
boot boot
elif search -n -s -f /vtefi/boot/bootx64.efi; then
unset VTOY_SEARCH_NO_VTOYEFI
terminal_output console
chainloader /vtefi/boot/bootx64.efi
boot
else else
unset VTOY_SEARCH_NO_VTOYEFI unset VTOY_SEARCH_NO_VTOYEFI
echo "BOOTX64.EFI NOT found ..." echo "BOOTX64.EFI NOT found ..."
@@ -169,6 +199,15 @@ else
chainloader /efi/xorboot/xorboot.efi chainloader /efi/xorboot/xorboot.efi
fi fi
boot boot
elif search -n -s -f /vtefi/xorboot/xorboot.xor; then
unset VTOY_SEARCH_NO_VTOYEFI
terminal_output console
if [ -f /vtefi/xorboot/bootx64.efi ]; then
chainloader /vtefi/xorboot/bootx64.efi
elif [ -f /vtefi/xorboot/xorboot.efi ]; then
chainloader /vtefi/xorboot/xorboot.efi
fi
boot
else else
unset VTOY_SEARCH_NO_VTOYEFI unset VTOY_SEARCH_NO_VTOYEFI
echo "xorboot NOT found ..." echo "xorboot NOT found ..."

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L: لغه F1: مساعدة F2: تصفح F3: عرض قائمه F4: اقلا محلي F5: أدوات F6: عوده", "VTLANG_STR_HOTKEY_LIST": "L: لغه F1: مساعدة F2: تصفح F3: عرض قائمه F4: اقلا محلي F5: أدوات F6: عوده",
"VTLANG_STR_HOTKEY_TREE": "L: لغه F1: مساعدة F2: تصفح F3: عرض تصنيف F4: اقلاع محلي F5: أدوات F6: عوده", "VTLANG_STR_HOTKEY_TREE": "L: لغه F1: مساعدة F2: تصفح F3: عرض تصنيف F4: اقلاع محلي F5: أدوات F6: عوده",
"VTLANG_RETURN_PREVIOUS": "عودة إلى القائمة السابقة [Esc]", "VTLANG_RETURN_PREVIOUS": "عودة إلى القائمة السابقة [Esc]",
"VTLANG_RETURN_PRV_NOESC": "عودة إلى القائمة السابقة",
"VTLANG_MENU_LANG": "اختيار اللغة في القائمة", "VTLANG_MENU_LANG": "اختيار اللغة في القائمة",
"VTLANG_LB_SBOOT_WINDOWS": "البحث والإقلاع على ويندوز", "VTLANG_LB_SBOOT_WINDOWS": "البحث والإقلاع على ويندوز",
"VTLANG_LB_SBOOT_G4D": "البحث والإقلاع على Grub4dos", "VTLANG_LB_SBOOT_G4D": "البحث والإقلاع على Grub4dos",

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:ভাষা F1:সাহায্য F2:Browser F3:ListView F4:Localboot F5:Tools F6:ExMenu", "VTLANG_STR_HOTKEY_LIST": "L:ভাষা F1:সাহায্য F2:Browser F3:ListView F4:Localboot F5:Tools F6:ExMenu",
"VTLANG_STR_HOTKEY_TREE": "L:ভাষা F1:সাহায্য F2:Browser F3:TreeView F4:Localboot F5:Tools F6:ExMenu", "VTLANG_STR_HOTKEY_TREE": "L:ভাষা F1:সাহায্য F2:Browser F3:TreeView F4:Localboot F5:Tools F6:ExMenu",
"VTLANG_RETURN_PREVIOUS": "পূর্ববর্তী মেনুতে ফিরে যান [Esc]", "VTLANG_RETURN_PREVIOUS": "পূর্ববর্তী মেনুতে ফিরে যান [Esc]",
"VTLANG_RETURN_PRV_NOESC": "পূর্ববর্তী মেনুতে ফিরে যান",
"VTLANG_MENU_LANG": "মেনু ভাষা নির্বাচন করুন", "VTLANG_MENU_LANG": "মেনু ভাষা নির্বাচন করুন",

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:Sprache F1:Hilfe F2:Browser F3:Listenansicht F4:Lokaler Start F5:Werkzeuge F6:Erweitert", "VTLANG_STR_HOTKEY_LIST": "L:Sprache F1:Hilfe F2:Browser F3:Listenansicht F4:Lokaler Start F5:Werkzeuge F6:Erweitert",
"VTLANG_STR_HOTKEY_TREE": "L:Sprache F1:Hilfe F2:Browser F3:Listenansicht F4:Lokaler Start F5:Werkzeuge F6:Erweitert", "VTLANG_STR_HOTKEY_TREE": "L:Sprache F1:Hilfe F2:Browser F3:Listenansicht F4:Lokaler Start F5:Werkzeuge F6:Erweitert",
"VTLANG_RETURN_PREVIOUS": "Zu vorherigem Menü [Esc]", "VTLANG_RETURN_PREVIOUS": "Zu vorherigem Menü [Esc]",
"VTLANG_RETURN_PRV_NOESC": "Zu vorherigem Menü",
"VTLANG_MENU_LANG": "Menüsprache auswählen", "VTLANG_MENU_LANG": "Menüsprache auswählen",

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:Language F1:Help F2:Browse F3:ListView F4:Localboot F5:Tools F6:ExMenu", "VTLANG_STR_HOTKEY_LIST": "L:Language F1:Help F2:Browse F3:ListView F4:Localboot F5:Tools F6:ExMenu",
"VTLANG_STR_HOTKEY_TREE": "L:Language F1:Help F2:Browse F3:TreeView F4:Localboot F5:Tools F6:ExMenu", "VTLANG_STR_HOTKEY_TREE": "L:Language F1:Help F2:Browse F3:TreeView F4:Localboot F5:Tools F6:ExMenu",
"VTLANG_RETURN_PREVIOUS": "Return to previous menu [Esc]", "VTLANG_RETURN_PREVIOUS": "Return to previous menu [Esc]",
"VTLANG_RETURN_PRV_NOESC": "Return to previous menu",
"VTLANG_MENU_LANG": "Menu Language Select", "VTLANG_MENU_LANG": "Menu Language Select",

View File

@@ -0,0 +1,93 @@
{
"VTLANG_LANGUAGE_NAME": "Spanish (Español)",
"VTLANG_STR_HOTKEY_LIST": "L:Lenguaje F1:Ayuda F2:Navegar F3:Vista de lista F4:Arranque local F5:Herramientas F6:Extensión de menú",
"VTLANG_STR_HOTKEY_TREE": "L:Lenguaje F1:Ayuda F2:Navegar F3:Vista de árbol F4:Arranque local F5:Herramientas F6:Extensión de menú",
"VTLANG_RETURN_PREVIOUS": "Regresar al menú previo [Esc]",
"VTLANG_RETURN_PRV_NOESC": "Regresar al menú previo",
"VTLANG_MENU_LANG": "Selección de idioma del menú",
"VTLANG_LB_SBOOT_WINDOWS": "Buscar y arrancar Windows",
"VTLANG_LB_SBOOT_G4D": "Buscar y arrancar Grub4dos",
"VTLANG_LB_SBOOT_HDD1": "Arrancar el 1er disco local",
"VTLANG_LB_SBOOT_HDD2": "Arrancar el 2do disco local",
"VTLANG_LB_SBOOT_HDD3": "Arrancar el 3er disco local",
"VTLANG_LB_SBOOT_X64EFI": "Buscar y arrancar BOOTX64.EFI",
"VTLANG_LB_SBOOT_IA32EFI": "Buscar y arrancar BOOTIA32.EFI",
"VTLANG_LB_SBOOT_AA64EFI": "Buscar y arrancar BOOTAA64.EFI",
"VTLANG_LB_SBOOT_XORBOOT": "Buscar y arrancar xorboot",
"VTLANG_FILE_CHKSUM": "Suma de comprobación del archivo",
"VTLANG_CHKSUM_MD5_CALC": "Calcular md5sum",
"VTLANG_CHKSUM_SHA1_CALC": "Calcular sha1sum",
"VTLANG_CHKSUM_SHA256_CALC": "Calcular sha256sum",
"VTLANG_CHKSUM_SHA512_CALC": "Calcular sha512sum",
"VTLANG_CHKSUM_MD5_CALC_CHK": "Calcular y comprobar md5sum",
"VTLANG_CHKSUM_SHA1_CALC_CHK": "Calcular y comprobar sha1sum",
"VTLANG_CHKSUM_SHA256_CALC_CHK": "Calcular y comprobar sha256sum",
"VTLANG_CHKSUM_SHA512_CALC_CHK": "Calcular y comprobar sha512sum",
"VTLANG_POWER": "Poder",
"VTLANG_POWER_REBOOT": "Reiniciar",
"VTLANG_POWER_HALT": "Detener",
"VTLANG_POWER_BOOT_EFIFW": "Reiniciar a configuración EFI",
"VTLANG_KEYBRD_LAYOUT": "Distribuciones de teclado",
"VTLANG_HWINFO": "Información de Hardware",
"VTLANG_RESOLUTION_CFG": "Configuración de resolución",
"VTLANG_SCREEN_MODE": "Modo de visualización de pantalla",
"VTLANG_SCREEN_TEXT_MODE": "Forzar modo texto",
"VTLANG_SCREEN_GUI_MODE": "Forzar modo gráfico",
"VTLANG_THEME_SELECT": "Selección de tema",
"VTLANG_UEFI_UTIL": "Utilidades UEFI de Ventoy",
"VTLANG_UTIL_SHOW_EFI_DRV": "Mostrar controladores EFI",
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Reparar la falla de BinitializeLibrary de Windows",
"VTLANG_JSON_CHK_JSON": "Comprobar configuración de complemento de json (ventoy.json)",
"VTLANG_JSON_CHK_CONTROL": "Comprobar configuración de complemento de control global",
"VTLANG_JSON_CHK_THEME": "Comprobar configuración de complemento de tema",
"VTLANG_JSON_CHK_AUTOINS": "Comprobar configuración de complemento de auto instalación",
"VTLANG_JSON_CHK_PERSIST": "Comprobar configuración de complemento de persistencia",
"VTLANG_JSON_CHK_MENU_ALIAS": "Comprobar configuración de complemento de alias de menú",
"VTLANG_JSON_CHK_MENU_TIP": "Comprobar configuración de complemento de consejo de menú",
"VTLANG_JSON_CHK_MENU_CLASS": "Comprobar configuración de complemento de clase de menú",
"VTLANG_JSON_CHK_INJECTION": "Comprobar configuración de complemento de inyección",
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Comprobar configuración de complemento de auto memdisk",
"VTLANG_JSON_CHK_IMG_LIST": "Comprobar configuración de complemento de lista de imágenes",
"VTLANG_JSON_CHK_IMG_BLIST": "Comprobar configuración de complemento de lista negra de imágenes",
"VTLANG_JSON_CHK_CONF_REPLACE": "Comprobar configuración de complemento de reemplazo de configuración de arranque",
"VTLANG_JSON_CHK_DUD": "Comprobar configuración de complemento de dud",
"VTLANG_JSON_CHK_PASSWORD": "Comprobar configuración de complemento de contraseñas",
"VTLANG_NORMAL_MODE": "Arrancar en modo normal",
"VTLANG_WIMBOOT_MODE": "Arrancar en modo wimboot",
"VTLANG_GRUB2_MODE": "Arrancar en modo grub2",
"VTLANG_MEMDISK_MODE": "Arrancar en modo memdisk",
"VTLANG_RET_TO_LISTVIEW": "Regresar a vista de lista",
"VTLANG_RET_TO_TREEVIEW": "regresar a vista de árbol",
"VTLANG_NO_AUTOINS_SCRIPT": "Arrancar sin plantilla de auto instalación",
"VTLANG_AUTOINS_USE": "Arrancar con",
"VTLANG_NO_PERSIST": "Arrancar sin persistencia",
"VTLANG_PERSIST_USE": "Arrancar con",
"VTLANG_BROWER_RETURN": "Regresar",
"VTLANG_ENTER_EXIT": "presiona tecla Entrar para salir",
"VTLANG_ENTER_REBOOT": "presiona tecla Entrar para reiniciar",
"VTLANG_ENTER_CONTINUE": "presiona tecla Entrar para continuar",
"VTLANG_CTRL_TEMP_SET": "Ajustes de control temporales",
"VTLANG_WIN11_BYPASS_CHECK": "Saltar comprobación de CPU/TPM/Arranque Seguro al instalar Windows 11",
"VTLANG_WIN11_BYPASS_NRO": "Saltar requerimiento de cuenta en linea al instalar Windows 11",
"VTLANG_LINUX_REMOUNT": "Montar partición de Ventoy después de arrancar Linux",
"VTLANG_SECONDARY_BOOT_MENU": "Mostrar menú de arranque secundario",
"MENU_STR_XXX": ""
}

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:Langue F1:Aide F2:Parcourir F3:Affichage liste F4:Démarrage local F5:Outils F6:Menu étendu", "VTLANG_STR_HOTKEY_LIST": "L:Langue F1:Aide F2:Parcourir F3:Affichage liste F4:Démarrage local F5:Outils F6:Menu étendu",
"VTLANG_STR_HOTKEY_TREE": "L:Langue F1:Aide F2:Parcourir F3:Affichage arborescence F4:Démarrage local F5:Outils F6:Menu étendu", "VTLANG_STR_HOTKEY_TREE": "L:Langue F1:Aide F2:Parcourir F3:Affichage arborescence F4:Démarrage local F5:Outils F6:Menu étendu",
"VTLANG_RETURN_PREVIOUS": "Retour au menu précédent [Echap]", "VTLANG_RETURN_PREVIOUS": "Retour au menu précédent [Echap]",
"VTLANG_RETURN_PRV_NOESC": "Retour au menu précédent",
"VTLANG_MENU_LANG": "Sélection de la langue des menus", "VTLANG_MENU_LANG": "Sélection de la langue des menus",

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:भाषा F1:मदद F2:ब्राउज़र F3:ListView F4:स्थानीयबूट F5:उपकरण F6:ExMenu", "VTLANG_STR_HOTKEY_LIST": "L:भाषा F1:मदद F2:ब्राउज़र F3:ListView F4:स्थानीयबूट F5:उपकरण F6:ExMenu",
"VTLANG_STR_HOTKEY_TREE": "L:भाषा F1:मदद F2:ब्राउज़र F3:TreeView F4:स्थानीयबूट F5:उपकरण F6:ExMenu", "VTLANG_STR_HOTKEY_TREE": "L:भाषा F1:मदद F2:ब्राउज़र F3:TreeView F4:स्थानीयबूट F5:उपकरण F6:ExMenu",
"VTLANG_RETURN_PREVIOUS": "पिछले मेनू पर लौटें [Esc]", "VTLANG_RETURN_PREVIOUS": "पिछले मेनू पर लौटें [Esc]",
"VTLANG_RETURN_PRV_NOESC": "पिछले मेनू पर लौटें",
"VTLANG_MENU_LANG": "मेनू भाषा का चयन करें", "VTLANG_MENU_LANG": "मेनू भाषा का चयन करें",

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:Jezik F1:Help F2:Browse F3:ListView F4:Localboot F5:Tools F6:ExMenu", "VTLANG_STR_HOTKEY_LIST": "L:Jezik F1:Help F2:Browse F3:ListView F4:Localboot F5:Tools F6:ExMenu",
"VTLANG_STR_HOTKEY_TREE": "L:Jezik F1:Help F2:Browse F3:TreeView F4:Localboot F5:Tools F6:ExMenu", "VTLANG_STR_HOTKEY_TREE": "L:Jezik F1:Help F2:Browse F3:TreeView F4:Localboot F5:Tools F6:ExMenu",
"VTLANG_RETURN_PREVIOUS": "Return to previous menu [Esc]", "VTLANG_RETURN_PREVIOUS": "Return to previous menu [Esc]",
"VTLANG_RETURN_PRV_NOESC": "Return to previous menu",
"VTLANG_MENU_LANG": "Menu Language Select", "VTLANG_MENU_LANG": "Menu Language Select",

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:Nyelv F1:Súgó F2:Tallóz F3:Listanézet F4:Helyi indítás F5:Eszközök F6:Bővített menü", "VTLANG_STR_HOTKEY_LIST": "L:Nyelv F1:Súgó F2:Tallóz F3:Listanézet F4:Helyi indítás F5:Eszközök F6:Bővített menü",
"VTLANG_STR_HOTKEY_TREE": "L:Nyelv F1:Súgó F2:Tallóz F3:Fanézet F4:Helyi indítás F5:Eszközök F6:Bővített menü", "VTLANG_STR_HOTKEY_TREE": "L:Nyelv F1:Súgó F2:Tallóz F3:Fanézet F4:Helyi indítás F5:Eszközök F6:Bővített menü",
"VTLANG_RETURN_PREVIOUS": "Vissza az előző menübe [Esc]", "VTLANG_RETURN_PREVIOUS": "Vissza az előző menübe [Esc]",
"VTLANG_RETURN_PRV_NOESC": "Vissza az előző menübe",
"VTLANG_MENU_LANG": "Menü nyelv kiválasztás", "VTLANG_MENU_LANG": "Menü nyelv kiválasztás",

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:Bahasa F1:Bantuan F2:Jelajah F3:ListView F4:boot lokal F5:Alat Utilitas F6:Menu Eksternal", "VTLANG_STR_HOTKEY_LIST": "L:Bahasa F1:Bantuan F2:Jelajah F3:ListView F4:boot lokal F5:Alat Utilitas F6:Menu Eksternal",
"VTLANG_STR_HOTKEY_TREE": "L:Bahasa F1:Bantuan F2:Jelajah F3:ListView F4:boot lokal F5:Alat Utilitas F6:Menu Eksternal", "VTLANG_STR_HOTKEY_TREE": "L:Bahasa F1:Bantuan F2:Jelajah F3:ListView F4:boot lokal F5:Alat Utilitas F6:Menu Eksternal",
"VTLANG_RETURN_PREVIOUS": "Kembali ke menu sebelumnya [Esc]", "VTLANG_RETURN_PREVIOUS": "Kembali ke menu sebelumnya [Esc]",
"VTLANG_RETURN_PRV_NOESC": "Kembali ke menu sebelumnya",
"VTLANG_MENU_LANG": "Menu Pilihan Bahasa", "VTLANG_MENU_LANG": "Menu Pilihan Bahasa",

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:言語 F1:説明 F2:閲覧 F3:表示切替(階層) F4:手許から起動 F5:道具 F6:拡張", "VTLANG_STR_HOTKEY_LIST": "L:言語 F1:説明 F2:閲覧 F3:表示切替(階層) F4:手許から起動 F5:道具 F6:拡張",
"VTLANG_STR_HOTKEY_TREE": "L:言語 F1:説明 F2:閲覧 F3:表示切替(一覧) F4:手許から起動 F5:道具 F6:拡張", "VTLANG_STR_HOTKEY_TREE": "L:言語 F1:説明 F2:閲覧 F3:表示切替(一覧) F4:手許から起動 F5:道具 F6:拡張",
"VTLANG_RETURN_PREVIOUS": "前に戻る [Esc]", "VTLANG_RETURN_PREVIOUS": "前に戻る [Esc]",
"VTLANG_RETURN_PRV_NOESC": "前に戻る",
"VTLANG_MENU_LANG": "表示言語", "VTLANG_MENU_LANG": "表示言語",

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:ენა F1:დახმარება F2:დათვალიერება F3:სიის ხედი F4:ლოკალური ჩატვირთვა F5:ხელსაწყოები F6:გასვლა", "VTLANG_STR_HOTKEY_LIST": "L:ენა F1:დახმარება F2:დათვალიერება F3:სიის ხედი F4:ლოკალური ჩატვირთვა F5:ხელსაწყოები F6:გასვლა",
"VTLANG_STR_HOTKEY_TREE": "L:ენა F1:დახმარება F2:დათვალიერება F3:ხის ხედი F4:ლოკალური ჩატვირთვა F5:ხელსაწყოები F6:გასვლა", "VTLANG_STR_HOTKEY_TREE": "L:ენა F1:დახმარება F2:დათვალიერება F3:ხის ხედი F4:ლოკალური ჩატვირთვა F5:ხელსაწყოები F6:გასვლა",
"VTLANG_RETURN_PREVIOUS": "წინა მენიუში დაბრუნება [Esc]", "VTLANG_RETURN_PREVIOUS": "წინა მენიუში დაბრუნება [Esc]",
"VTLANG_RETURN_PRV_NOESC": "წინა მენიუში დაბრუნება",
"VTLANG_MENU_LANG": "მენიუს ენის არჩევა", "VTLANG_MENU_LANG": "მენიუს ენის არჩევა",

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "번역: 비너스걸 L:언어 F1:도움말 F2:찾아보기 F3:목록보기 F4:로컬부트 F5:도구 F6:확장메뉴", "VTLANG_STR_HOTKEY_LIST": "번역: 비너스걸 L:언어 F1:도움말 F2:찾아보기 F3:목록보기 F4:로컬부트 F5:도구 F6:확장메뉴",
"VTLANG_STR_HOTKEY_TREE": "번역: 비너스걸 L:언어 F1:도움말 F2:찾아보기 F3:목록보기 F4:로컬부트 F5:도구 F6:확장메뉴", "VTLANG_STR_HOTKEY_TREE": "번역: 비너스걸 L:언어 F1:도움말 F2:찾아보기 F3:목록보기 F4:로컬부트 F5:도구 F6:확장메뉴",
"VTLANG_RETURN_PREVIOUS": "이전 메뉴로 돌아가기 [Esc]", "VTLANG_RETURN_PREVIOUS": "이전 메뉴로 돌아가기 [Esc]",
"VTLANG_RETURN_PRV_NOESC": "이전 메뉴로 돌아가기",
"VTLANG_MENU_LANG": "메뉴 언어 선택", "VTLANG_MENU_LANG": "메뉴 언어 선택",

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:Język F1:Pomoc F2:Przeglądaj F3:ListView F4:Localboot F5:Narzędzia F6:ExMenu", "VTLANG_STR_HOTKEY_LIST": "L:Język F1:Pomoc F2:Przeglądaj F3:ListView F4:Localboot F5:Narzędzia F6:ExMenu",
"VTLANG_STR_HOTKEY_TREE": "L:Język F1:Pomoc F2:Przeglądaj F3:Widok drzewa F4:Localboot F5:Narzędzia F6:ExMenu", "VTLANG_STR_HOTKEY_TREE": "L:Język F1:Pomoc F2:Przeglądaj F3:Widok drzewa F4:Localboot F5:Narzędzia F6:ExMenu",
"VTLANG_RETURN_PREVIOUS": "Powrót do poprzedniego menu [Esc]", "VTLANG_RETURN_PREVIOUS": "Powrót do poprzedniego menu [Esc]",
"VTLANG_RETURN_PRV_NOESC": "Powrót do poprzedniego menu",
"VTLANG_MENU_LANG": "Wybór języka menu", "VTLANG_MENU_LANG": "Wybór języka menu",

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:Idioma F1:Ajuda F2:Navegar F3:Estrutura F4:Arranque local F5:Ferramentas F6:Sair", "VTLANG_STR_HOTKEY_LIST": "L:Idioma F1:Ajuda F2:Navegar F3:Estrutura F4:Arranque local F5:Ferramentas F6:Sair",
"VTLANG_STR_HOTKEY_TREE": "L:Idioma F1:Ajuda F2:Navegar F3:Estrutura F4:Arranque local F5:Ferramentas F6:Sair", "VTLANG_STR_HOTKEY_TREE": "L:Idioma F1:Ajuda F2:Navegar F3:Estrutura F4:Arranque local F5:Ferramentas F6:Sair",
"VTLANG_RETURN_PREVIOUS": "Voltar ao menu anterior [Esc]", "VTLANG_RETURN_PREVIOUS": "Voltar ao menu anterior [Esc]",
"VTLANG_RETURN_PRV_NOESC": "Voltar ao menu anterior",
"VTLANG_MENU_LANG": "Seleção de idioma do menu", "VTLANG_MENU_LANG": "Seleção de idioma do menu",
@@ -82,11 +83,11 @@
"VTLANG_ENTER_REBOOT": "pressione a tecla Enter para reiniciar", "VTLANG_ENTER_REBOOT": "pressione a tecla Enter para reiniciar",
"VTLANG_ENTER_CONTINUE": "pressione a tecla Enter para continuar", "VTLANG_ENTER_CONTINUE": "pressione a tecla Enter para continuar",
"VTLANG_CTRL_TEMP_SET": "Temporary Control Settings", "VTLANG_CTRL_TEMP_SET": "Configurações de Controle Temporário",
"VTLANG_WIN11_BYPASS_CHECK": "Bypass CPU/TPM/SecureBoot check when install Windows 11", "VTLANG_WIN11_BYPASS_CHECK": "Ignorar checagem de CPU/TPM/SecureBoot quando instalando Windows 11",
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11", "VTLANG_WIN11_BYPASS_NRO": "Ignorar requerimento de conta online quanto instalando Windows 11",
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux", "VTLANG_LINUX_REMOUNT": "Montar partição Ventoy após boot do Linux",
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu", "VTLANG_SECONDARY_BOOT_MENU": "Mostar menu seundário de boot",
"MENU_STR_XXX": "" "MENU_STR_XXX": ""
} }

View File

@@ -1,13 +1,14 @@
{ {
"VTLANG_LANGUAGE_NAME": "Russian (Русский)", "VTLANG_LANGUAGE_NAME": "Russian (Русский)",
"VTLANG_STR_HOTKEY_LIST": "L:Язык F1:Помощь F2:Просмотр F3:ListView F4:Локальная загрузка F5:Инструменты F6:Выйти из меню", "VTLANG_STR_HOTKEY_LIST": "L:Язык F1:Помощь F2:Просмотр F3:ВидСписком F4:Локальная загрузка F5:Инструменты F6:Выйти из меню",
"VTLANG_STR_HOTKEY_TREE": "L:Язык F1:Помощь F2:Просмотр F3:TreeView F4:Локальная загрузка F5:Инструменты F6:Выйти из меню", "VTLANG_STR_HOTKEY_TREE": "L:Язык F1:Помощь F2:Просмотр F3:ВидДревом F4:Локальная загрузка F5:Инструменты F6:Выйти из меню",
"VTLANG_RETURN_PREVIOUS": "Вернуться в предыдущее меню [Esc]", "VTLANG_RETURN_PREVIOUS": "Вернуться в предыдущее меню [Esc]",
"VTLANG_RETURN_PRV_NOESC": "Вернуться в предыдущее меню",
"VTLANG_MENU_LANG": "Выбор языка меню", "VTLANG_MENU_LANG": "Выбор языка меню",
"VTLANG_LB_SBOOT_WINDOWS": "Найти и загрузить Windows", "VTLANG_LB_SBOOT_WINDOWS": "Найти и загрузить винду",
"VTLANG_LB_SBOOT_G4D": "Найти и загрузить Grub4dos", "VTLANG_LB_SBOOT_G4D": "Найти и загрузить Grub4dos",
"VTLANG_LB_SBOOT_HDD1": "Загрузить 1-й локальный диск", "VTLANG_LB_SBOOT_HDD1": "Загрузить 1-й локальный диск",
"VTLANG_LB_SBOOT_HDD2": "Загрузить 2-й локальный диск", "VTLANG_LB_SBOOT_HDD2": "Загрузить 2-й локальный диск",
@@ -33,7 +34,7 @@
"VTLANG_POWER_BOOT_EFIFW": "Перезагрузиться в настройку EFI", "VTLANG_POWER_BOOT_EFIFW": "Перезагрузиться в настройку EFI",
"VTLANG_KEYBRD_LAYOUT": "Раскладки клавиатуры", "VTLANG_KEYBRD_LAYOUT": "Раскладки клавиатуры",
"VTLANG_HWINFO": "Информация об оборудовании", "VTLANG_HWINFO": "Сведения об оборудовании",
"VTLANG_RESOLUTION_CFG": "Конфигурация разрешения", "VTLANG_RESOLUTION_CFG": "Конфигурация разрешения",
"VTLANG_SCREEN_MODE": "Режим Screen Display", "VTLANG_SCREEN_MODE": "Режим Screen Display",
@@ -44,48 +45,48 @@
"VTLANG_UEFI_UTIL": "UEFI утилиты Вентоя", "VTLANG_UEFI_UTIL": "UEFI утилиты Вентоя",
"VTLANG_UTIL_SHOW_EFI_DRV": "Показать драйверы EFI", "VTLANG_UTIL_SHOW_EFI_DRV": "Показать драйверы EFI",
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Исправить ошибку Windows BlinitializeLibrary", "VTLANG_UTIL_FIX_BLINIT_FAIL": "Исправить ошибку винды «BlinitializeLibrary»",
"VTLANG_JSON_CHK_JSON": "Проверить конфигурацию плагина json (ventoy.json)", "VTLANG_JSON_CHK_JSON": "Проверить настройки расширения «json» (ventoy.json)",
"VTLANG_JSON_CHK_CONTROL": "Проверить конфигурацию плагина global control", "VTLANG_JSON_CHK_CONTROL": "Проверить настройки расширения «global control»",
"VTLANG_JSON_CHK_THEME": "Проверить конфигурацию плагина theme", "VTLANG_JSON_CHK_THEME": "Проверить настройки расширения «theme»",
"VTLANG_JSON_CHK_AUTOINS": "Проверить конфигурацию плагина auto install", "VTLANG_JSON_CHK_AUTOINS": "Проверить настройки расширения «auto install»",
"VTLANG_JSON_CHK_PERSIST": "Проверить конфигурацию плагина persistence", "VTLANG_JSON_CHK_PERSIST": "Проверить настройки расширения «persistence»",
"VTLANG_JSON_CHK_MENU_ALIAS": "Проверить конфигурацию плагина menu alias", "VTLANG_JSON_CHK_MENU_ALIAS": "Проверить настройки расширения «menu alias»",
"VTLANG_JSON_CHK_MENU_TIP": "Проверить конфигурацию плагина menu tip", "VTLANG_JSON_CHK_MENU_TIP": "Проверить настройки расширения «menu tip»",
"VTLANG_JSON_CHK_MENU_CLASS": "Проверить конфигурацию плагина menu class", "VTLANG_JSON_CHK_MENU_CLASS": "Проверить настройки расширения «menu class»",
"VTLANG_JSON_CHK_INJECTION": "Проверить конфигурацию плагина injection", "VTLANG_JSON_CHK_INJECTION": "Проверить настройки расширения «injection»",
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Проверить конфигурацию плагина auto memdisk", "VTLANG_JSON_CHK_AUTO_MEMDISK": "Проверить настройки расширения «auto memdisk»",
"VTLANG_JSON_CHK_IMG_LIST": "Проверить конфигурацию плагина image list", "VTLANG_JSON_CHK_IMG_LIST": "Проверить настройки расширения «image list»",
"VTLANG_JSON_CHK_IMG_BLIST": "Проверить конфигурацию плагина image blacklist", "VTLANG_JSON_CHK_IMG_BLIST": "Проверить настройки расширения «image blacklist»",
"VTLANG_JSON_CHK_CONF_REPLACE": "Проверить конфигурацию плагина boot conf replace", "VTLANG_JSON_CHK_CONF_REPLACE": "Проверить настройки расширения «boot conf replace»",
"VTLANG_JSON_CHK_DUD": "Проверить конфигурацию плагина dud", "VTLANG_JSON_CHK_DUD": "Проверить настройки расширения «dud»",
"VTLANG_JSON_CHK_PASSWORD": "Проверить конфигурацию плагина password", "VTLANG_JSON_CHK_PASSWORD": "Проверить настройки расширения «password»",
"VTLANG_NORMAL_MODE": "Загрузиться в обычном режиме", "VTLANG_NORMAL_MODE": "Загрузиться в обычном режиме",
"VTLANG_WIMBOOT_MODE": "Загрузиться в режиме wimboot", "VTLANG_WIMBOOT_MODE": "Загрузиться в режиме wimboot",
"VTLANG_GRUB2_MODE": "Загрузиться в режиме grub2", "VTLANG_GRUB2_MODE": "Загрузиться в режиме grub2",
"VTLANG_MEMDISK_MODE": "Загрузиться в режиме memdisk", "VTLANG_MEMDISK_MODE": "Загрузиться в режиме memdisk",
"VTLANG_RET_TO_LISTVIEW": "Вернуться к ListView", "VTLANG_RET_TO_LISTVIEW": "Вернуться к ВидуСписком",
"VTLANG_RET_TO_TREEVIEW": "Вернуться к TreeView", "VTLANG_RET_TO_TREEVIEW": "Вернуться к ВидуДревом",
"VTLANG_NO_AUTOINS_SCRIPT": "Загрузка без шаблона автоматической установки", "VTLANG_NO_AUTOINS_SCRIPT": "Загрузка без шаблона автоматической установки",
"VTLANG_AUTOINS_USE": "Загрузиться с", "VTLANG_AUTOINS_USE": "Загрузиться с",
"VTLANG_NO_PERSIST": "Загрузка без персистентности", "VTLANG_NO_PERSIST": "Загрузка без сохраняемости",
"VTLANG_PERSIST_USE": "Загрузиться с", "VTLANG_PERSIST_USE": "Загрузиться с",
"VTLANG_BROWER_RETURN": "Вернуться", "VTLANG_BROWER_RETURN": "Вернуться",
"VTLANG_ENTER_EXIT": "нажмите клавишу Enter, чтобы выйти", "VTLANG_ENTER_EXIT": "нажмите клавишу ввода, чтобы выйти",
"VTLANG_ENTER_REBOOT": "нажмите клавишу Enter для перезагрузки", "VTLANG_ENTER_REBOOT": "нажмите клавишу ввода для перезагрузки",
"VTLANG_ENTER_CONTINUE": "нажмите клавишу Enter, чтобы продолжить", "VTLANG_ENTER_CONTINUE": "нажмите клавишу ввода, чтобы продолжить",
"VTLANG_CTRL_TEMP_SET": "Настройки временного управления", "VTLANG_CTRL_TEMP_SET": "Настройки временного управления",
"VTLANG_WIN11_BYPASS_CHECK": "Обойти проверку при установке Windows 11", "VTLANG_WIN11_BYPASS_CHECK": "Обойти проверку при установке 11-ой винды",
"VTLANG_WIN11_BYPASS_NRO": "Обойти требование учетной записи в Интернете при установке Windows 11", "VTLANG_WIN11_BYPASS_NRO": "Обойти требование сетевой учётной записи при установке 11-ой винды",
"VTLANG_LINUX_REMOUNT": "Смонтировать раздел Ventoy после загрузки Linux", "VTLANG_LINUX_REMOUNT": "Смонтировать раздел Вентоя после загрузки линукса",
"VTLANG_SECONDARY_BOOT_MENU": "Показать вторичное загрузочное меню", "VTLANG_SECONDARY_BOOT_MENU": "Показать вторичное загрузочное меню",
"MENU_STR_XXX": "" "MENU_STR_XXX": ""

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:Језик F1:Help F2:Browse F3:ListView F4:Localboot F5:Tools F6:ExMenu", "VTLANG_STR_HOTKEY_LIST": "L:Језик F1:Help F2:Browse F3:ListView F4:Localboot F5:Tools F6:ExMenu",
"VTLANG_STR_HOTKEY_TREE": "L:Језик F1:Help F2:Browse F3:TreeView F4:Localboot F5:Tools F6:ExMenu", "VTLANG_STR_HOTKEY_TREE": "L:Језик F1:Help F2:Browse F3:TreeView F4:Localboot F5:Tools F6:ExMenu",
"VTLANG_RETURN_PREVIOUS": "Return to previous menu [Esc]", "VTLANG_RETURN_PREVIOUS": "Return to previous menu [Esc]",
"VTLANG_RETURN_PRV_NOESC": "Return to previous menu",
"VTLANG_MENU_LANG": "Menu Language Select", "VTLANG_MENU_LANG": "Menu Language Select",

View File

@@ -3,9 +3,10 @@
"VTLANG_STR_HOTKEY_LIST": "L:மொழி F1:உதவி F2:உலாவுக F3:பட்டியல்பார்வை F4:லோக்கல்பூட் F5:கருவிகள் F6:ExMenu", "VTLANG_STR_HOTKEY_LIST": "L:மொழி F1:உதவி F2:உலாவுக F3:பட்டியல்பார்வை F4:லோக்கல்பூட் F5:கருவிகள் F6:ExMenu",
"VTLANG_STR_HOTKEY_TREE": "L:மொழி F1:உதவி F2:உலாவுக F3:மரப்பார்வை F4:லோக்கல்பூட் F5:கருவிகள் F6:ExMenu", "VTLANG_STR_HOTKEY_TREE": "L:மொழி F1:உதவி F2:உலாவுக F3:மரப்பார்வை F4:லோக்கல்பூட் F5:கருவிகள் F6:ExMenu",
"VTLANG_RETURN_PREVIOUS": "முந்தைய மெனுவுக்குத் திரும்பு [Esc]", "VTLANG_RETURN_PREVIOUS": "முந்தைய பட்டியலுக்குத் திரும்பு [Esc]",
"VTLANG_RETURN_PRV_NOESC": "முந்தைய பட்டியலுக்குத் திரும்பு",
"VTLANG_MENU_LANG": "மெனு மொழி தேர்வு", "VTLANG_MENU_LANG": "மொழி தேர்வு பட்டியல்",
"VTLANG_LB_SBOOT_WINDOWS": "விண்டோஸைத் தேடி துவக்கவும்", "VTLANG_LB_SBOOT_WINDOWS": "விண்டோஸைத் தேடி துவக்கவும்",
"VTLANG_LB_SBOOT_G4D": "Grub4dos ஐத் தேடி துவக்கவும்", "VTLANG_LB_SBOOT_G4D": "Grub4dos ஐத் தேடி துவக்கவும்",
@@ -42,7 +43,7 @@
"VTLANG_THEME_SELECT": "தீம் தேர்வு", "VTLANG_THEME_SELECT": "தீம் தேர்வு",
"VTLANG_UEFI_UTIL": "Ventoy UEFI Utilities", "VTLANG_UEFI_UTIL": "Ventoy UEFI பயன்பாடுகள்",
"VTLANG_UTIL_SHOW_EFI_DRV": "EFI இயக்கிகளைக் காட்டு", "VTLANG_UTIL_SHOW_EFI_DRV": "EFI இயக்கிகளைக் காட்டு",
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Windows BlinitializeLibrary தோல்வியைச் சரிசெய்தல்", "VTLANG_UTIL_FIX_BLINIT_FAIL": "Windows BlinitializeLibrary தோல்வியைச் சரிசெய்தல்",
@@ -51,9 +52,9 @@
"VTLANG_JSON_CHK_THEME": "தீம் செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்", "VTLANG_JSON_CHK_THEME": "தீம் செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
"VTLANG_JSON_CHK_AUTOINS": "தானாக நிறுவும் செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்", "VTLANG_JSON_CHK_AUTOINS": "தானாக நிறுவும் செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
"VTLANG_JSON_CHK_PERSIST": "நிலைத்தன்மை செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்", "VTLANG_JSON_CHK_PERSIST": "நிலைத்தன்மை செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
"VTLANG_JSON_CHK_MENU_ALIAS": "மெனு மாற்று செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்", "VTLANG_JSON_CHK_MENU_ALIAS": "பட்டியலில் மாற்று செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
"VTLANG_JSON_CHK_MENU_TIP": "மெனு முனை செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்", "VTLANG_JSON_CHK_MENU_TIP": "பட்டியலில் முனை செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
"VTLANG_JSON_CHK_MENU_CLASS": "மெனு வகுப்பு செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்", "VTLANG_JSON_CHK_MENU_CLASS": "பட்டியலில் வகுப்பு செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
"VTLANG_JSON_CHK_INJECTION": "ஊசி செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்", "VTLANG_JSON_CHK_INJECTION": "ஊசி செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
"VTLANG_JSON_CHK_AUTO_MEMDISK": "ஆட்டோ மெம்டிஸ்க் செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்", "VTLANG_JSON_CHK_AUTO_MEMDISK": "ஆட்டோ மெம்டிஸ்க் செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
"VTLANG_JSON_CHK_IMG_LIST": "பட பட்டியல் செருகுநிரல் உள்ளமைவை சரிபார்க்கவும்", "VTLANG_JSON_CHK_IMG_LIST": "பட பட்டியல் செருகுநிரல் உள்ளமைவை சரிபார்க்கவும்",
@@ -82,11 +83,11 @@
"VTLANG_ENTER_REBOOT": "மறுதொடக்கம் செய்ய Enter விசையை அழுத்தவும்", "VTLANG_ENTER_REBOOT": "மறுதொடக்கம் செய்ய Enter விசையை அழுத்தவும்",
"VTLANG_ENTER_CONTINUE": "தொடர Enter விசையை அழுத்தவும்", "VTLANG_ENTER_CONTINUE": "தொடர Enter விசையை அழுத்தவும்",
"VTLANG_CTRL_TEMP_SET": "Temporary Control Settings", "VTLANG_CTRL_TEMP_SET": "தற்காலிக கட்டுப்பாட்டு அமைப்புகள்",
"VTLANG_WIN11_BYPASS_CHECK": "Bypass CPU/TPM/SecureBoot check when install Windows 11", "VTLANG_WIN11_BYPASS_CHECK": "விண்டோஸ் 11 ஐ நிறுவும் போது CPU/TPM/SecureBoot சரிபார்பை புறக்கணிக்கவும்",
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11", "VTLANG_WIN11_BYPASS_NRO": "விண்டோஸ் 11 ஐ நிறுவும் போது ஆன்லைன் கணக்கின் தேவையை புறக்கணிக்கவும்",
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux", "VTLANG_LINUX_REMOUNT": "லினக்ஸை துவக்கிய பிறகு Ventoy பகிர்வை ஏற்றவும்",
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu", "VTLANG_SECONDARY_BOOT_MENU": "இரண்டாம் நிலை துவக்க பட்டியலைக் காட்டு",
"MENU_STR_XXX": "" "MENU_STR_XXX": ""
} }

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:Dil F1:Yardım F2:Gözat F3:Liste Görünümü F4:Önyükleme Seçenekleri F5:Araçlar F6:Grub2 Menü", "VTLANG_STR_HOTKEY_LIST": "L:Dil F1:Yardım F2:Gözat F3:Liste Görünümü F4:Önyükleme Seçenekleri F5:Araçlar F6:Grub2 Menü",
"VTLANG_STR_HOTKEY_TREE": "L:Dil F1:Yardım F2:Gözat F3:Ağaç Görünümü F4:Önyükleme Seçenekleri F5:Araçlar F6:Grub2 Menü", "VTLANG_STR_HOTKEY_TREE": "L:Dil F1:Yardım F2:Gözat F3:Ağaç Görünümü F4:Önyükleme Seçenekleri F5:Araçlar F6:Grub2 Menü",
"VTLANG_RETURN_PREVIOUS": "Önceki menüye geri dön [Esc]", "VTLANG_RETURN_PREVIOUS": "Önceki menüye geri dön [Esc]",
"VTLANG_RETURN_PRV_NOESC": "Önceki menüye geri dön",
"VTLANG_MENU_LANG": "Menü Dili Seçimi", "VTLANG_MENU_LANG": "Menü Dili Seçimi",

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:语言 F1:帮助 F2:本地浏览 F3:列表模式 F4:本地启动 F5:工具 F6:扩展菜单", "VTLANG_STR_HOTKEY_LIST": "L:语言 F1:帮助 F2:本地浏览 F3:列表模式 F4:本地启动 F5:工具 F6:扩展菜单",
"VTLANG_STR_HOTKEY_TREE": "L:语言 F1:帮助 F2:本地浏览 F3:树形模式 F4:本地启动 F5:工具 F6:扩展菜单", "VTLANG_STR_HOTKEY_TREE": "L:语言 F1:帮助 F2:本地浏览 F3:树形模式 F4:本地启动 F5:工具 F6:扩展菜单",
"VTLANG_RETURN_PREVIOUS": "返回上一级菜单 [Esc]", "VTLANG_RETURN_PREVIOUS": "返回上一级菜单 [Esc]",
"VTLANG_RETURN_PRV_NOESC": "返回上一级菜单",
"VTLANG_MENU_LANG": "菜单语言", "VTLANG_MENU_LANG": "菜单语言",

View File

@@ -4,6 +4,7 @@
"VTLANG_STR_HOTKEY_LIST": "L:語言 F1:說明 F2:本地瀏覽 F3:清單模式 F4:本地啟動 F5:工具 F6:擴展選單", "VTLANG_STR_HOTKEY_LIST": "L:語言 F1:說明 F2:本地瀏覽 F3:清單模式 F4:本地啟動 F5:工具 F6:擴展選單",
"VTLANG_STR_HOTKEY_TREE": "L:語言 F1:說明 F2:本地瀏覽 F3:樹形模式 F4:本地啟動 F5:工具 F6:擴展選單", "VTLANG_STR_HOTKEY_TREE": "L:語言 F1:說明 F2:本地瀏覽 F3:樹形模式 F4:本地啟動 F5:工具 F6:擴展選單",
"VTLANG_RETURN_PREVIOUS": "返回上一級選單 [Esc]", "VTLANG_RETURN_PREVIOUS": "返回上一級選單 [Esc]",
"VTLANG_RETURN_PRV_NOESC": "返回上一級選單",
"VTLANG_MENU_LANG": "功能表語言", "VTLANG_MENU_LANG": "功能表語言",

View File

@@ -12,7 +12,7 @@ submenu "$VTLANG_POWER" --class=debug_power --class=F5tool {
} }
if [ "$grub_platform" != "pc" ]; then if [ "$grub_platform" != "pc" ]; then
menuentry '$VTLANG_POWER_BOOT_EFIFW' --class=debug_efisetup --class=debug_power --class=F5tool { menuentry "$VTLANG_POWER_BOOT_EFIFW" --class=debug_efisetup --class=debug_power --class=F5tool {
echo -e '\n\nRebooting to enter UEFI firmware setup ... \n' echo -e '\n\nRebooting to enter UEFI firmware setup ... \n'
sleep 1 sleep 1
fwsetup fwsetup

Binary file not shown.

Binary file not shown.

View File

@@ -103,7 +103,7 @@ ls -1 menu/ | grep -v 'zh_CN' | sort | while read vtlang; do
echo " vt_load_menu_lang $vtlangname" >> menulang.cfg echo " vt_load_menu_lang $vtlangname" >> menulang.cfg
echo "}" >> menulang.cfg echo "}" >> menulang.cfg
done done
echo "menuentry \"$VTLANG_RETURN_PREVIOUS\" --class=vtoyret VTOY_RET {" >> menulang.cfg echo "menuentry \"\$VTLANG_RETURN_PREVIOUS\" --class=vtoyret VTOY_RET {" >> menulang.cfg
echo " echo \"Return ...\"" >> menulang.cfg echo " echo \"Return ...\"" >> menulang.cfg
echo "}" >> menulang.cfg echo "}" >> menulang.cfg

View File

@@ -599,7 +599,7 @@
"STR_INSTALL_FAILED":"Um erro ocorreu durante a instalação. Você pode reconectar o dispositivo USB e tentar novamente. Verifique o arquivo log.txt para mais detalhes.", "STR_INSTALL_FAILED":"Um erro ocorreu durante a instalação. Você pode reconectar o dispositivo USB e tentar novamente. Verifique o arquivo log.txt para mais detalhes.",
"STR_UPDATE_SUCCESS":"Parabéns!#@Ventoy foi atualizado com sucesso no dispositivo.", "STR_UPDATE_SUCCESS":"Parabéns!#@Ventoy foi atualizado com sucesso no dispositivo.",
"STR_UPDATE_FAILED":"Um erro ocorreu durante a atualização. Você pode reconectar o dispositivo USB e tentar novamente. Verifique o arquivo log.txt para mais detalhes.", "STR_UPDATE_FAILED":"Um erro ocorreu durante a atualização. Você pode reconectar o dispositivo USB e tentar novamente. Verifique o arquivo log.txt para mais detalhes.",
"STR_WAIT_PROCESS":"Uma thread está em execução, por favor espere...", "STR_WAIT_PROCESS":"Uma tarefa está em execução, por favor espere...",
"STR_MENU_OPTION":"Opção", "STR_MENU_OPTION":"Opção",
"STR_MENU_SECURE_BOOT":"Boot seguro", "STR_MENU_SECURE_BOOT":"Boot seguro",
"STR_MENU_PART_CFG":"Configuração de Partição", "STR_MENU_PART_CFG":"Configuração de Partição",
@@ -613,7 +613,7 @@
"STR_MENU_PART_STYLE":"Estilo de Partição", "STR_MENU_PART_STYLE":"Estilo de Partição",
"STR_DISK_2TB_MBR_ERROR":"Por favor selecione GPT para discos maiores que 2TB", "STR_DISK_2TB_MBR_ERROR":"Por favor selecione GPT para discos maiores que 2TB",
"STR_SHOW_ALL_DEV":"Mostrar Todos os Dispositivos", "STR_SHOW_ALL_DEV":"Mostrar Todos os Dispositivos",
"STR_PART_ALIGN_4KB":"Alinhar partições com 4KB", "STR_PART_ALIGN_4KB":"Alinhar partições com 4kB",
"STR_WEB_COMMUNICATION_ERR":"Erro de comunicação:", "STR_WEB_COMMUNICATION_ERR":"Erro de comunicação:",
"STR_WEB_REMOTE_ABNORMAL":"Erro de comunicação: remoto anormal", "STR_WEB_REMOTE_ABNORMAL":"Erro de comunicação: remoto anormal",
"STR_WEB_REQUEST_TIMEOUT":"Erro de comunicação: Solicitação cronometrada", "STR_WEB_REQUEST_TIMEOUT":"Erro de comunicação: Solicitação cronometrada",
@@ -1689,10 +1689,10 @@
"STR_WAIT_PROCESS":"A feldolgozás még folyamatban van, kis türelmet…", "STR_WAIT_PROCESS":"A feldolgozás még folyamatban van, kis türelmet…",
"STR_MENU_OPTION":"Beállítás", "STR_MENU_OPTION":"Beállítás",
"STR_MENU_SECURE_BOOT":"Secure Boot támogatás", "STR_MENU_SECURE_BOOT":"Secure Boot támogatás",
"STR_MENU_PART_CFG":"Partíciókonfiguráció", "STR_MENU_PART_CFG":"Partíció konfiguráció",
"STR_BTN_OK":"OK", "STR_BTN_OK":"OK",
"STR_BTN_CANCEL":"Mégse", "STR_BTN_CANCEL":"Mégse",
"STR_PRESERVE_SPACE":"Szabad terület hagyása a lemez végén", "STR_PRESERVE_SPACE":"Szabad terület maradjon a lemez végén",
"STR_SPACE_VAL_INVALID":"Érvénytelen érték a fenntartott helynél", "STR_SPACE_VAL_INVALID":"Érvénytelen érték a fenntartott helynél",
"STR_MENU_CLEAR":"A Ventoy eltávolítása", "STR_MENU_CLEAR":"A Ventoy eltávolítása",
"STR_CLEAR_SUCCESS":"A Ventoy sikeresen eltávolítva az eszközről.", "STR_CLEAR_SUCCESS":"A Ventoy sikeresen eltávolítva az eszközről.",
@@ -1708,7 +1708,7 @@
"STR_WEB_TOKEN_MISMATCH":"A démon állapota frissítve, próbálja újra később.", "STR_WEB_TOKEN_MISMATCH":"A démon állapota frissítve, próbálja újra később.",
"STR_WEB_SERVICE_BUSY":"A szolgáltatás foglalt, próbálja újra később.", "STR_WEB_SERVICE_BUSY":"A szolgáltatás foglalt, próbálja újra később.",
"STR_MENU_VTSI_CREATE":"VTSI fájl előállítása", "STR_MENU_VTSI_CREATE":"VTSI fájl előállítása",
"STR_VTSI_CREATE_TIP":"Ez alkalommal nem ír az eszközre, csak egy VTSI fájlt állít elő#@Folytatja?", "STR_VTSI_CREATE_TIP":"Ez alkalommal nem ír az eszközre, csak egy VTSI fájlt állít elő.#@Folytatja?",
"STR_VTSI_CREATE_SUCCESS":"A VTSI fájl sikeresen létrehozva!#@A Rufus(3.15+) segítségével az eszközre írhatja a Ventoy telepítésének befejezéséhez.", "STR_VTSI_CREATE_SUCCESS":"A VTSI fájl sikeresen létrehozva!#@A Rufus(3.15+) segítségével az eszközre írhatja a Ventoy telepítésének befejezéséhez.",
"STR_VTSI_CREATE_FAILED":"A VTSI fájl létrehozása nem sikerült.", "STR_VTSI_CREATE_FAILED":"A VTSI fájl létrehozása nem sikerült.",
"STR_MENU_PART_RESIZE":"Rombolásmentes telepítés", "STR_MENU_PART_RESIZE":"Rombolásmentes telepítés",
@@ -1718,10 +1718,10 @@
"STR_PART_RESIZE_UNSUPPORTED":"A Ventoy rombolásmentes telepítése leállt, mert bizonyos feltételek nem teljesíthetők. A részleteket lásd a log.txt fájlban.", "STR_PART_RESIZE_UNSUPPORTED":"A Ventoy rombolásmentes telepítése leállt, mert bizonyos feltételek nem teljesíthetők. A részleteket lásd a log.txt fájlban.",
"STR_INSTALL_YES_TIP1":"Figyelmeztetés: Az adatok elvesznek!", "STR_INSTALL_YES_TIP1":"Figyelmeztetés: Az adatok elvesznek!",
"STR_INSTALL_YES_TIP2":"Írja a YES szót az alábbi szövegmezőbe, hogy megerősítse, valóban új telepítést szeretne végrehajtani a frissítés helyett.", "STR_INSTALL_YES_TIP2":"Írja a YES szót az alábbi szövegmezőbe, hogy megerősítse, valóban új telepítést szeretne végrehajtani a frissítés helyett.",
"STR_PART_VENTOY_FS":"File System For Ventoy Partition", "STR_PART_VENTOY_FS":"Fájlrendszer a Ventoy partícióhoz",
"STR_PART_FS":"File System", "STR_PART_FS":"Fájlrendszer",
"STR_PART_CLUSTER":"Cluster Size", "STR_PART_CLUSTER":"Klaszter méret",
"STR_PART_CLUSTER_DEFAULT":"System Default Value", "STR_PART_CLUSTER_DEFAULT":"Rendszer alapérték",
"STR_DONATE":"Adományoz", "STR_DONATE":"Adományoz",
"STRXXX":"" "STRXXX":""

View File

@@ -12,6 +12,7 @@
char g_ventoy_dir[MAX_PATH]; char g_ventoy_dir[MAX_PATH];
static BOOL g_ChromeFirst = TRUE;
static BOOL g_running = FALSE; static BOOL g_running = FALSE;
static HWND g_refresh_button; static HWND g_refresh_button;
static HWND g_start_button; static HWND g_start_button;
@@ -118,14 +119,17 @@ static void OpenURL(void)
sprintf_s(url, sizeof(url), "http://%s:%s/index.html", g_sysinfo.ip, g_sysinfo.port); sprintf_s(url, sizeof(url), "http://%s:%s/index.html", g_sysinfo.ip, g_sysinfo.port);
for (i = 0; Browsers[i] != NULL; i++) if (g_ChromeFirst)
{ {
if (ventoy_is_file_exist("%s", Browsers[i])) for (i = 0; Browsers[i] != NULL; i++)
{ {
ShellExecuteA(NULL, "open", Browsers[i], url, NULL, SW_SHOW); if (ventoy_is_file_exist("%s", Browsers[i]))
return; {
} ShellExecuteA(NULL, "open", Browsers[i], url, NULL, SW_SHOW);
} return;
}
}
}
ShellExecuteA(NULL, "open", url, NULL, NULL, SW_SHOW); ShellExecuteA(NULL, "open", url, NULL, NULL, SW_SHOW);
} }
@@ -521,12 +525,22 @@ static void DllProtect(void)
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow) int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
{ {
int i;
int rc; int rc;
HANDLE hMutex; HANDLE hMutex;
WCHAR CurDir[MAX_PATH]; WCHAR CurDir[MAX_PATH];
UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(hPrevInstance);
for (i = 0; i < __argc; i++)
{
if (__argv[i] && _stricmp(__argv[i], "/F") == 0)
{
g_ChromeFirst = FALSE;
break;
}
}
DllProtect(); DllProtect();
if (GetUserDefaultUILanguage() == 0x0804) if (GetUserDefaultUILanguage() == 0x0804)

View File

@@ -1 +1 @@
ar_ARbn_BNde_DEen_USfr_FRhi_HIhr_HRhu_HUid_IDja_JPka_GEko_KRpl_PLpt_PTru_RUsr_RSta_INtr_TRzh_CNzh_TW ar_ARbn_BNde_DEen_USes_ESfr_FRhi_HIhr_HRhu_HUid_IDja_JPka_GEko_KRpl_PLpt_PTru_RUsr_RSta_INtr_TRzh_CNzh_TW

View File

@@ -777,10 +777,10 @@
<script src="/static/js/jQuery-2.1.4.min.js"></script> <script src="/static/js/jQuery-2.1.4.min.js"></script>
<!-- jquery validate --> <!-- jquery validate -->
<script src="/static/js/jquery.validate.min.js"></script> <script src="/static/js/jquery.validate.min.js"></script>
<script src="/static/js/jquery.validate.vtoymethods.js?v=109"></script> <script src="/static/js/jquery.validate.vtoymethods.js?v=142"></script>
<script src="/static/js/jquery.vtoy.alert.js?v=109"></script> <script src="/static/js/jquery.vtoy.alert.js?v=142"></script>
<script src="/static/js/vtoy.js?v=109"></script> <script src="/static/js/vtoy.js?v=142"></script>
<script src="/static/js/md5.min.js"></script> <script src="/static/js/md5.min.js"></script>
<!-- Bootstrap 3.3.5 --> <!-- Bootstrap 3.3.5 -->

View File

@@ -1 +1 @@
ar_ARbn_BNde_DEen_USfr_FRhi_HIhr_HRhu_HUid_IDja_JPka_GEko_KRpl_PLpt_PTru_RUsr_RSta_INtr_TRzh_CNzh_TW ar_ARbn_BNde_DEen_USes_ESfr_FRhi_HIhr_HRhu_HUid_IDja_JPka_GEko_KRpl_PLpt_PTru_RUsr_RSta_INtr_TRzh_CNzh_TW

View File

@@ -175,6 +175,7 @@
<td class="td_ctrl_col" id="td_title_setting">选项设置</td> <td class="td_ctrl_col" id="td_title_setting">选项设置</td>
<td> <td>
<select id="id_theme_sel_gfxmode" name="name_theme_sel_gfxmode" class="form-control"> <select id="id_theme_sel_gfxmode" name="name_theme_sel_gfxmode" class="form-control">
<option title="max">max</option>
<option title="1920x1080">1920x1080</option> <option title="1920x1080">1920x1080</option>
<option title="1680x1050">1680x1050</option> <option title="1680x1050">1680x1050</option>
<option title="1600x900">1600x900</option> <option title="1600x900">1600x900</option>

View File

@@ -0,0 +1,513 @@
/******************************************************************************
* setupmon.c
*
* Copyright (c) 2022, longpanda <admin@ventoy.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>
#include <virtdisk.h>
#include <winioctl.h>
#include <VersionHelpers.h>
#include "vtoyjump.h"
#define PROMPT_MAX 1024
typedef struct VTOY_MUI_DATA
{
WCHAR Prompt[PROMPT_MAX];
struct VTOY_MUI_DATA* pNext;
}VTOY_MUI_DATA;
static VTOY_MUI_DATA* g_MuiDataHead = NULL;
static FILETIME g_SetupMonStartTime;
#pragma pack(1)
typedef struct {
WORD dlgVer;
WORD signature;
DWORD helpID;
DWORD exStyle;
DWORD style;
WORD cDlgItems;
short x;
short y;
short cx;
short cy;
//sz_Or_Ord menu;
//sz_Or_Ord windowClass;
//WCHAR title[titleLen];
//WORD pointsize;
//WORD weight;
//BYTE italic;
//BYTE charset;
//WCHAR typeface[stringLen];
} DLGTEMPLATEEX;
typedef struct {
DWORD helpID;
DWORD exStyle;
DWORD style;
short x;
short y;
short cx;
short cy;
DWORD id;
// sz_Or_Ord windowClass;
// sz_Or_Ord title;
// WORD extraCount;
} DLGITEMTEMPLATEEX;
#pragma pack()
#define wchar_to_utf8_no_alloc(wsrc, dest, dest_size) \
WideCharToMultiByte(CP_UTF8, 0, wsrc, -1, dest, dest_size, NULL, NULL)
#define utf8_to_wchar_no_alloc(src, wdest, wdest_size) \
MultiByteToWideChar(CP_UTF8, 0, src, -1, wdest, wdest_size)
#define VTOY_DLG_SKIP_SZ_ORD(pWord) \
{\
if (*pWord == 0x0000)\
{\
pWordData += 1;\
}\
else if (*pWordData == 0xFFFF)\
{\
pWordData += 2;\
}\
else\
{\
while (*pWordData++)\
{\
;\
}\
}\
}
#define VTOY_DLG_SKIP_SZ(pWord) \
{\
while (*pWord)\
{\
pWord++;\
}\
pWord++;\
}
static BOOL LoadSetupRebootDialogPrompt(HMODULE hMui, DWORD ID, WCHAR* Prompt, DWORD Len)
{
DWORD i = 0;
UINT64 Addr = 0;
WORD* pWordData = NULL;
HRSRC hDlg = NULL;
HGLOBAL hTemplate = NULL;
DLGTEMPLATEEX* pDlgTempEx = NULL;
DLGITEMTEMPLATEEX* pDlgItemTempEx = NULL;
hDlg = FindResource(hMui, MAKEINTRESOURCE(ID), RT_DIALOG);
if (!hDlg)
{
return FALSE;
}
hTemplate = LoadResource(hMui, hDlg);
if (!hTemplate)
{
return FALSE;
}
pDlgTempEx = (DLGTEMPLATEEX*)LockResource(hTemplate);
if (!pDlgTempEx)
{
return FALSE;
}
if (pDlgTempEx->signature != 0xFFFF)
{
return FALSE;
}
pWordData = (WORD*)(pDlgTempEx + 1);
//skip menu
VTOY_DLG_SKIP_SZ_ORD(pWordData);
//skip windowClass
VTOY_DLG_SKIP_SZ_ORD(pWordData);
//skip title
VTOY_DLG_SKIP_SZ(pWordData);
//skip pointsize/weight/italic + charset
pWordData += 3;
//skip typeface
VTOY_DLG_SKIP_SZ(pWordData);
//align to DWORD
Addr = (UINT64)pWordData;
if ((Addr % 4) > 0)
{
Addr += 4 - (Addr % 4);
pWordData = (WORD*)Addr;
}
//First Dlg Item
pDlgItemTempEx = (DLGITEMTEMPLATEEX*)pWordData;
if (pDlgItemTempEx->id != 1023)
{
return FALSE;
}
pWordData = (WORD*)(pDlgItemTempEx + 1);
//skip windowClass
VTOY_DLG_SKIP_SZ_ORD(pWordData);
for (i = 0; i < Len; i++)
{
Prompt[i] = pWordData[i];
if (Prompt[i] == 0)
{
break;
}
}
return TRUE;
}
static int LoadPromptString(const char* szDir)
{
BOOL bRet;
HMODULE hMui;
CHAR MuiFile[MAX_PATH];
WCHAR Prompt[PROMPT_MAX];
VTOY_MUI_DATA* Node = NULL;
sprintf_s(MuiFile, sizeof(MuiFile), "X:\\Sources\\%s\\w32uires.dll.mui", szDir);
hMui = LoadLibraryA(MuiFile);
if (!hMui)
{
Log("Failed to loadlibrary <%s> %u", MuiFile, LASTERR);
return 1;
}
bRet = LoadSetupRebootDialogPrompt(hMui, 103, Prompt, PROMPT_MAX);
if (bRet)
{
Node = malloc(sizeof(VTOY_MUI_DATA));
if (Node)
{
memset(Node, 0, sizeof(VTOY_MUI_DATA));
memcpy(Node->Prompt, Prompt, sizeof(Prompt));
if (g_MuiDataHead == NULL)
{
g_MuiDataHead = Node;
}
else
{
Node->pNext = g_MuiDataHead;
g_MuiDataHead = Node;
}
Log("Successfully add prompt string for <%s>", szDir);
}
}
else
{
Log("Failed to load prompt string from %s", szDir);
}
FreeLibrary(hMui);
return 0;
}
static int FindAllPromptStrings(void)
{
HANDLE hFind;
WIN32_FIND_DATAA FindData;
hFind = FindFirstFileA("X:\\Sources\\*", &FindData);
if (hFind == INVALID_HANDLE_VALUE)
{
Log("FindFirstFileA failed %u", LASTERR);
return 0;
}
do
{
if ((FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && (strlen(FindData.cFileName) == 5))
{
if (IsFileExist("X:\\Sources\\%s\\w32uires.dll.mui", FindData.cFileName))
{
LoadPromptString(FindData.cFileName);
}
}
} while (FindNextFileA(hFind, &FindData));
return 0;
}
static BOOL CALLBACK SetupPromptCallback(HWND hWnd, LPARAM lParam)
{
VTOY_MUI_DATA* Node = NULL;
WCHAR Prompt[PROMPT_MAX] = { 0 };
BOOL* found = (BOOL*)lParam;
if (GetWindowTextW(hWnd, Prompt, PROMPT_MAX - 1) > 0)
{
for (Node = g_MuiDataHead; Node; Node = Node->pNext)
{
if (wcscmp(Node->Prompt, Prompt) == 0)
{
*found = TRUE;
break;
}
}
}
return TRUE;
}
static BOOL CALLBACK EnumWindowsProcFunc(HWND hWnd, LPARAM lParam)
{
EnumChildWindows(hWnd, SetupPromptCallback, lParam);
return TRUE;
}
static CHAR FindWindowsInstallDstDrive(void)
{
CHAR ret = 0;
CHAR Drv = 'A';
DWORD Drives;
CHAR ChkFilePath[MAX_PATH];
HANDLE hFile;
UINT64 Time1, Time2, Time3;
FILETIME fTime;
FILETIME sysftime;
SYSTEMTIME cur_systime;
GetSystemTime(&cur_systime);
SystemTimeToFileTime(&cur_systime, &sysftime);
memcpy(&Time1, &g_SetupMonStartTime, 8);
memcpy(&Time2, &sysftime, 8);
Drives = GetLogicalDrives();
Log("Find Windows: Logical Drives: 0x%x", Drives);
while ((Drives > 0) && (ret == 0))
{
if ((Drives & 1) && Drv != 'X')
{
sprintf_s(ChkFilePath, sizeof(ChkFilePath), "%C:\\$WINDOWS.~BT\\Sources\\Panther\\setupact.log", Drv);
hFile = CreateFileA(ChkFilePath, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if (hFile != INVALID_HANDLE_VALUE)
{
Log("%s Exist", ChkFilePath);
if (GetFileTime(hFile, NULL, NULL, &fTime))
{
memcpy(&Time3, &fTime, 8);
Log("### %s %llu %llu %llu", ChkFilePath, Time1, Time2, Time3);
if (Time3 > Time1 && Time3 < Time2)
{
Log("Detect Windows11 install drive:<%C>", Drv);
ret = Drv;
}
}
CloseHandle(hFile);
}
else
{
Log("%s NOT Exist %u", ChkFilePath, LASTERR);
}
}
Drives >>= 1;
Drv++;
}
return ret;
}
static int AddBypassNROReg(const CHAR* OfflineRegPath)
{
int ret = 1;
BOOL Unload = FALSE;
LSTATUS Status;
HKEY hKey = NULL;
HKEY hSubKey = NULL;
DWORD dwValue = 1;
DWORD dwSize;
HANDLE htoken;
DWORD s = 0;
TOKEN_PRIVILEGES* p = NULL;
Log("AddBypassNROReg<%s>", OfflineRegPath);
if (!IsFileExist(OfflineRegPath))
{
return ret;
}
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &htoken))
{
Log("Open process token failed! %u", LASTERR);
return ret;
}
s = sizeof(TOKEN_PRIVILEGES) + 2 * sizeof(LUID_AND_ATTRIBUTES);
p = (PTOKEN_PRIVILEGES)malloc(s);
if (!p)
{
Log("Failed to alloc privileges memory");
return ret;
}
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &(p->Privileges[0].Luid)) ||
!LookupPrivilegeValue(NULL, SE_BACKUP_NAME, &(p->Privileges[1].Luid)) ||
!LookupPrivilegeValue(NULL, SE_RESTORE_NAME, &(p->Privileges[2].Luid)))
{
Log("LookupPrivilegeValue failed!");
goto End;
}
p->PrivilegeCount = 3;
p->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
p->Privileges[1].Attributes = SE_PRIVILEGE_ENABLED;
p->Privileges[2].Attributes = SE_PRIVILEGE_ENABLED;
if (!AdjustTokenPrivileges(htoken, FALSE, p, s, NULL, NULL) || GetLastError() != ERROR_SUCCESS)
{
Log("AdjustTokenPrivileges failed!");
goto End;
}
Log("AdjustTokenPrivileges success");
Status = RegLoadKeyA(HKEY_LOCAL_MACHINE, "VTOYNEWSW", OfflineRegPath);
if (Status != ERROR_SUCCESS)
{
Log("RegLoadKey Failed 0x%x", Status);
goto End;
}
Unload = TRUE;
Status = RegCreateKeyExA(HKEY_LOCAL_MACHINE, "VTOYNEWSW\\Microsoft\\Windows\\CurrentVersion", 0, NULL, REG_OPTION_BACKUP_RESTORE, KEY_ALL_ACCESS, NULL, &hKey, &dwSize);
if (ERROR_SUCCESS != Status)
{
Log("Failed to create reg key VTOYNEWSW\\Microsoft\\Windows\\CurrentVersion %u %u", LASTERR, Status);
goto End;
}
Status = RegCreateKeyExA(hKey, "OOBE", 0, NULL, 0, KEY_SET_VALUE | KEY_QUERY_VALUE | KEY_CREATE_SUB_KEY, NULL, &hSubKey, &dwSize);
if (ERROR_SUCCESS != Status)
{
Log("Failed to create OOBE reg %u %u", LASTERR, Status);
goto End;
}
Status = RegSetValueExA(hSubKey, "BypassNRO", 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));
Log("Create BypassNRO registry %s %u", (Status == ERROR_SUCCESS) ? "SUCCESS" : "FAILED", Status);
Status = RegFlushKey(hSubKey);
Status += RegCloseKey(hSubKey);
Log("Flush and close subkey %s %u", (Status == ERROR_SUCCESS) ? "SUCCESS" : "FAILED", Status);
Status = RegFlushKey(hKey);
Status += RegCloseKey(hKey);
Log("Flush and close key %s %u", (Status == ERROR_SUCCESS) ? "SUCCESS" : "FAILED", Status);
ret = 0;
End:
if (Unload)
{
Status = RegUnLoadKeyA(HKEY_LOCAL_MACHINE, "VTOYNEWSW");
Log("RegUnLoadKey %s %u", (Status == ERROR_SUCCESS) ? "SUCCESS" : "FAILED", Status);
}
if (p)
{
free(p);
}
return ret;
}
static DWORD WINAPI WaitSetupFinishThread(void* Param)
{
CHAR Drv;
BOOL Found = FALSE;
CHAR OfflineRegPath[MAX_PATH];
while (!Found)
{
Sleep(300);
EnumWindows(EnumWindowsProcFunc, (LPARAM)&Found);
}
Log("### Setup finish detected");
// Add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE\BypassNRO
Drv = FindWindowsInstallDstDrive();
Log("Find Windows install drive %d", Drv);
if (Drv)
{
sprintf_s(OfflineRegPath, sizeof(OfflineRegPath), "%C:\\Windows\\system32\\config\\SOFTWARE", Drv);
AddBypassNROReg(OfflineRegPath);
}
return 0;
}
int SetupMonNroStart(const char *isopath)
{
SYSTEMTIME systime;
Log("SetupMonNroStart ...");
FindAllPromptStrings();
if (!g_MuiDataHead)
{
Log("Prompt not found, add default");
g_MuiDataHead = malloc(sizeof(VTOY_MUI_DATA));
if (g_MuiDataHead)
{
wcscpy_s(g_MuiDataHead->Prompt, PROMPT_MAX, L"Windows needs to restart to continue");
g_MuiDataHead->pNext = NULL;
}
}
Log("Wait for setup finish...");
GetSystemTime(&systime);
SystemTimeToFileTime(&systime, &g_SetupMonStartTime);
CreateThread(NULL, 0, WaitSetupFinishThread, NULL, 0, NULL);
return 0;
}

View File

@@ -60,6 +60,23 @@ static CHAR g_prog_name[MAX_PATH];
#define MUTEX_LOCK(hmutex) if (hmutex != NULL) LockStatus = WaitForSingleObject(hmutex, INFINITE) #define MUTEX_LOCK(hmutex) if (hmutex != NULL) LockStatus = WaitForSingleObject(hmutex, INFINITE)
#define MUTEX_UNLOCK(hmutex) if (hmutex != NULL && WAIT_OBJECT_0 == LockStatus) ReleaseMutex(hmutex) #define MUTEX_UNLOCK(hmutex) if (hmutex != NULL && WAIT_OBJECT_0 == LockStatus) ReleaseMutex(hmutex)
#define BREAK() BreakAndLaunchCmd(__LINE__)
static void BreakAndLaunchCmd(int line)
{
STARTUPINFOA Si;
PROCESS_INFORMATION Pi;
Log("Break at line:%d", line);
GetStartupInfoA(&Si);
Si.dwFlags |= STARTF_USESHOWWINDOW;
Si.wShowWindow = SW_NORMAL;
CreateProcessA(NULL, "cmd.exe", NULL, NULL, FALSE, 0, NULL, NULL, &Si, &Pi);
WaitForSingleObject(Pi.hProcess, INFINITE);
}
static const char * GetFileNameInPath(const char *fullpath) static const char * GetFileNameInPath(const char *fullpath)
{ {
int i; int i;
@@ -459,13 +476,23 @@ static int IsUTF8Encode(const char *src)
return 0; return 0;
} }
static int Utf16ToUtf8(const WCHAR *src, char *dst)
{
int len;
int size;
len = (int)wcslen(src) + 1;
size = WideCharToMultiByte(CP_UTF8, 0, src, len, NULL, 0, NULL, NULL);
return WideCharToMultiByte(CP_UTF8, 0, src, len, dst, size, NULL, NULL);
}
static int Utf8ToUtf16(const char* src, WCHAR * dst) static int Utf8ToUtf16(const char* src, WCHAR * dst)
{ {
int size = MultiByteToWideChar(CP_UTF8, 0, src, -1, dst, 0); int size = MultiByteToWideChar(CP_UTF8, 0, src, -1, dst, 0);
return MultiByteToWideChar(CP_UTF8, 0, src, -1, dst, size + 1); return MultiByteToWideChar(CP_UTF8, 0, src, -1, dst, size + 1);
} }
static BOOL IsDirExist(const char *Fmt, ...) BOOL IsDirExist(const char *Fmt, ...)
{ {
va_list Arg; va_list Arg;
DWORD Attr; DWORD Attr;
@@ -497,7 +524,7 @@ static BOOL IsDirExist(const char *Fmt, ...)
return FALSE; return FALSE;
} }
static BOOL IsFileExist(const char *Fmt, ...) BOOL IsFileExist(const char *Fmt, ...)
{ {
va_list Arg; va_list Arg;
HANDLE hFile; HANDLE hFile;
@@ -889,7 +916,7 @@ static BOOL Is2K10PE(void)
return bRet; return bRet;
} }
static CHAR GetIMDiskMountLogicalDrive(void) static CHAR GetIMDiskMountLogicalDrive(const char *suffix)
{ {
CHAR Letter = 'Y'; CHAR Letter = 'Y';
DWORD Drives; DWORD Drives;
@@ -902,6 +929,12 @@ static CHAR GetIMDiskMountLogicalDrive(void)
return 'M'; return 'M';
} }
//fixed use Z as mountpoint for Lenovo Product Recovery
if (strcmp(suffix, "VTLRI") == 0)
{
return 'Z';
}
Drives = GetLogicalDrives(); Drives = GetLogicalDrives();
Log("Drives=0x%x", Drives); Log("Drives=0x%x", Drives);
@@ -1046,17 +1079,18 @@ End:
return rc; return rc;
} }
static int VentoyRunImdisk(const char *IsoPath, const char *imdiskexe) static int VentoyRunImdisk(const char *suffix, const char *IsoPath, const char *imdiskexe, const char *opt)
{ {
CHAR Letter; CHAR Letter;
CHAR Cmdline[512]; CHAR Cmdline[512];
WCHAR CmdlineW[512]; WCHAR CmdlineW[512];
PROCESS_INFORMATION Pi; PROCESS_INFORMATION Pi;
Log("VentoyRunImdisk <%s> <%s>", IsoPath, imdiskexe); Log("VentoyRunImdisk <%s> <%s> <%s> <%s>", suffix, IsoPath, imdiskexe, opt);
Letter = GetIMDiskMountLogicalDrive(); Letter = GetIMDiskMountLogicalDrive(suffix);
sprintf_s(Cmdline, sizeof(Cmdline), "%s -a -o ro -f \"%s\" -m %C:", imdiskexe, IsoPath, Letter);
sprintf_s(Cmdline, sizeof(Cmdline), "%s -a -o %s -f \"%s\" -m %C:", imdiskexe, opt, IsoPath, Letter);
Log("mount iso to %C: use imdisk cmd <%s>", Letter, Cmdline); Log("mount iso to %C: use imdisk cmd <%s>", Letter, Cmdline);
if (IsUTF8Encode(IsoPath)) if (IsUTF8Encode(IsoPath))
@@ -1099,7 +1133,7 @@ int VentoyMountISOByImdisk(const char *IsoPath, DWORD PhyDrive)
if (0 == VentoyCopyImdisk(PhyDrive, ImPath)) if (0 == VentoyCopyImdisk(PhyDrive, ImPath))
{ {
VentoyRunImdisk(IsoPath, ImPath); VentoyRunImdisk("iso", IsoPath, ImPath, "ro");
rc = 0; rc = 0;
} }
@@ -2022,36 +2056,19 @@ static int ProcessUnattendedInstallation(const char *script, DWORD PhyDrive)
return 0; return 0;
} }
static int Windows11Bypass(const char *isofile, const char MntLetter, UINT8 Check, UINT8 NRO) static int VentoyGetFileVersion(const CHAR *FilePath, UINT16 *pMajor, UINT16 *pMinor, UINT16 *pBuild, UINT16 *pRevision)
{ {
int Ret = 1; int ret = 1;
DWORD dwHandle; DWORD dwHandle;
DWORD dwSize; DWORD dwSize;
DWORD dwValue = 1;
UINT VerLen = 0; UINT VerLen = 0;
CHAR *Buffer = NULL; CHAR *Buffer = NULL;
VS_FIXEDFILEINFO* VerInfo = NULL; VS_FIXEDFILEINFO* VerInfo = NULL;
CHAR CheckFile[MAX_PATH];
UINT16 Major, Minor, Build, Revision; UINT16 Major, Minor, Build, Revision;
Log("Windows11Bypass for <%s> %C: Check:%u NRO:%u", isofile, MntLetter, Check, NRO); Log("Get file version for <%s>", FilePath);
if (FALSE == IsFileExist("%C:\\sources\\boot.wim", MntLetter) || dwSize = GetFileVersionInfoSizeA(FilePath, &dwHandle);
FALSE == IsFileExist("%C:\\sources\\compatresources.dll", MntLetter))
{
Log("boot.wim/compatresources.dll not exist, this is not a windows install media.");
goto End;
}
if (FALSE == IsFileExist("%C:\\sources\\install.wim", MntLetter) &&
FALSE == IsFileExist("%C:\\sources\\install.esd", MntLetter))
{
Log("install.wim/install.esd not exist, this is not a windows install media.");
goto End;
}
sprintf_s(CheckFile, sizeof(CheckFile), "%C:\\sources\\compatresources.dll", MntLetter);
dwSize = GetFileVersionInfoSizeA(CheckFile, &dwHandle);
if (0 == dwSize) if (0 == dwSize)
{ {
Log("Failed to get file version info size: %u", LASTERR); Log("Failed to get file version info size: %u", LASTERR);
@@ -2061,10 +2078,11 @@ static int Windows11Bypass(const char *isofile, const char MntLetter, UINT8 Chec
Buffer = malloc(dwSize); Buffer = malloc(dwSize);
if (!Buffer) if (!Buffer)
{ {
Log("malloc failed %u", dwSize);
goto End; goto End;
} }
if (FALSE == GetFileVersionInfoA(CheckFile, dwHandle, dwSize, Buffer)) if (FALSE == GetFileVersionInfoA(FilePath, dwHandle, dwSize, Buffer))
{ {
Log("Failed to get file version info : %u", LASTERR); Log("Failed to get file version info : %u", LASTERR);
goto End; goto End;
@@ -2086,18 +2104,117 @@ static int Windows11Bypass(const char *isofile, const char MntLetter, UINT8 Chec
Major = 11; Major = 11;
} }
if (Major != 11) if (pMajor)
{ {
Log("This is not Windows 11, not need to bypass.", Major); *pMajor = Major;
goto End;
} }
if (pMinor)
{
*pMinor = Minor;
}
if (pBuild)
{
*pBuild = Build;
}
if (pRevision)
{
*pRevision = Revision;
}
ret = 0;
}
else
{
Log("Invalid verinfo signature 0x%x", VerInfo->dwSignature);
} }
} }
else
{
Log("VerQueryValueA failed %u", LASTERR);
}
//Now we really need to bypass windows 11 check. create registry End:
if (Buffer)
{
free(Buffer);
}
return ret;
}
static BOOL VentoyIsNeedBypass(const char *isofile, const char MntLetter)
{
UINT16 Major;
BOOL bRet = FALSE;
CHAR CheckFile[MAX_PATH];
if (FALSE == IsFileExist("%C:\\sources\\install.wim", MntLetter) &&
FALSE == IsFileExist("%C:\\sources\\install.esd", MntLetter))
{
Log("install.wim/install.esd not exist, this is not a windows install media.");
goto End;
}
if (FALSE == IsFileExist("%C:\\sources\\boot.wim", MntLetter))
{
Log("boot.wim not exist, this is not a windows install media.");
goto End;
}
if (IsFileExist("%C:\\sources\\compatresources.dll", MntLetter))
{
sprintf_s(CheckFile, sizeof(CheckFile), "%C:\\sources\\compatresources.dll", MntLetter);
}
else if (IsFileExist("%C:\\setup.exe", MntLetter))
{
sprintf_s(CheckFile, sizeof(CheckFile), "%C:\\setup.exe", MntLetter);
}
else if (IsFileExist("X:\\setup.exe"))
{
sprintf_s(CheckFile, sizeof(CheckFile), "X:\\setup.exe");
}
else
{
Log("No Check file found");
goto End;
}
if (VentoyGetFileVersion(CheckFile, &Major, NULL, NULL, NULL))
{
goto End;
}
if (Major >= 11)
{
Log("Enable for Windows 11 %u", Major);
bRet = TRUE;
}
else
{
Log("This is not Windows 11, not need to bypass.", Major);
}
End:
return bRet;
}
static int Windows11Bypass(const char *isofile, const char MntLetter, UINT8 Check, UINT8 NRO)
{
int Ret = 1;
HKEY hKey = NULL; HKEY hKey = NULL;
HKEY hSubKey = NULL; HKEY hSubKey = NULL;
LSTATUS Status; LSTATUS Status;
DWORD dwValue = 1;
DWORD dwSize;
Log("Windows11Bypass for <%s> %C: Check:%u NRO:%u", isofile, MntLetter, Check, NRO);
if (!VentoyIsNeedBypass(isofile, MntLetter))
{
goto End;
}
//Now we really need to bypass windows 11 check. create registry
if (Check) if (Check)
{ {
@@ -2143,16 +2260,14 @@ static int Windows11Bypass(const char *isofile, const char MntLetter, UINT8 Chec
Status += RegSetValueExA(hSubKey, "BypassNRO", 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD)); Status += RegSetValueExA(hSubKey, "BypassNRO", 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));
Log("Create BypassNRO registry %s %u", (Status == ERROR_SUCCESS) ? "SUCCESS" : "FAILED", Status); Log("Create BypassNRO registry %s %u", (Status == ERROR_SUCCESS) ? "SUCCESS" : "FAILED", Status);
SetupMonNroStart(isofile);
} }
Ret = 0; Ret = 0;
End: End:
if (Buffer)
{
free(Buffer);
}
return Ret; return Ret;
} }
@@ -2190,6 +2305,90 @@ static BOOL CheckVentoyDisk(DWORD DiskNum)
return FALSE; return FALSE;
} }
static BOOL VentoyIsLenovoRecovery(CHAR *IsoPath, CHAR *VTLRIPath)
{
int n;
int UTF8 = 0;
HANDLE hFile;
DWORD Attr;
WCHAR FilePathW[MAX_PATH];
UTF8 = IsUTF8Encode(IsoPath);
if (UTF8)
{
Utf8ToUtf16(IsoPath, FilePathW);
n = (int)wcslen(FilePathW);
if (n > 4 && _wcsicmp(FilePathW + n - 4, L".iso") == 0)
{
FilePathW[n - 3] = L'V';
FilePathW[n - 2] = L'T';
FilePathW[n - 1] = L'L';
FilePathW[n - 0] = L'R';
FilePathW[n + 1] = L'I';
FilePathW[n + 2] = 0;
hFile = CreateFileW(FilePathW, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if (hFile != INVALID_HANDLE_VALUE)
{
CloseHandle(hFile);
Attr = GetFileAttributesW(FilePathW);
if ((Attr & FILE_ATTRIBUTE_DIRECTORY) == 0)
{
Utf16ToUtf8(FilePathW, VTLRIPath);
return TRUE;
}
}
}
}
else
{
n = (int)strlen(IsoPath);
if (n > 4 && _stricmp(IsoPath + n - 4, ".iso") == 0)
{
IsoPath[n - 4] = 0;
sprintf_s(VTLRIPath, MAX_PATH, "%s.VTLRI", IsoPath);
IsoPath[n - 4] = '.';
if (IsFileExist(VTLRIPath))
{
return TRUE;
}
}
}
return FALSE;
}
static int MountVTLRI(CHAR *ImgPath, DWORD PhyDrive)
{
STARTUPINFOA Si;
PROCESS_INFORMATION Pi;
CHAR Cmdline[256];
CHAR ImDiskPath[256];
Log("MountVTLRI <%s> %u", ImgPath, PhyDrive);
VentoyCopyImdisk(PhyDrive, ImDiskPath);
VentoyRunImdisk("VTLRI", ImgPath, ImDiskPath, "ro,rem");
CopyFileA(g_prog_full_path, "ventoy\\VTLRISRV.exe", FALSE);
sprintf_s(Cmdline, sizeof(Cmdline), "ventoy\\VTLRISRV.exe VTLRI_SRV %C Z", ImgPath[0]);
GetStartupInfoA(&Si);
Si.dwFlags |= STARTF_USESHOWWINDOW;
Si.wShowWindow = SW_HIDE;
CreateProcessA(NULL, Cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &Si, &Pi);
Log("Process cmdline <%s>", Cmdline);
return 0;
}
static int VentoyHook(ventoy_os_param *param) static int VentoyHook(ventoy_os_param *param)
{ {
@@ -2209,6 +2408,7 @@ static int VentoyHook(ventoy_os_param *param)
DISK_EXTENT VtoyDiskExtent; DISK_EXTENT VtoyDiskExtent;
UINT8 UUID[16]; UINT8 UUID[16];
CHAR IsoPath[MAX_PATH]; CHAR IsoPath[MAX_PATH];
CHAR VTLRIPath[MAX_PATH];
Log("VentoyHook Path:<%s>", param->vtoy_img_path); Log("VentoyHook Path:<%s>", param->vtoy_img_path);
@@ -2347,8 +2547,17 @@ static int VentoyHook(ventoy_os_param *param)
Drives = GetLogicalDrives(); Drives = GetLogicalDrives();
Log("Drives before mount: 0x%x", Drives); Log("Drives before mount: 0x%x", Drives);
rc = MountIsoFile(IsoPath, VtoyDiskNum); if (VentoyIsLenovoRecovery(IsoPath, VTLRIPath))
{
Log("This is lenovo recovery image, mount VTLRI file.");
rc = MountVTLRI(VTLRIPath, VtoyDiskNum);
}
else
{
Log("This is normal image, mount ISO file.");
rc = MountIsoFile(IsoPath, VtoyDiskNum);
}
NewDrives = GetLogicalDrives(); NewDrives = GetLogicalDrives();
Log("Drives after mount: 0x%x (0x%x)", NewDrives, (NewDrives ^ Drives)); Log("Drives after mount: 0x%x (0x%x)", NewDrives, (NewDrives ^ Drives));
@@ -2747,6 +2956,52 @@ static int vtoy_remove_duplicate_file(char *File)
return 0; return 0;
} }
static int VTLRI_ServiceMain(int argc, char **argv)
{
int n = 0;
DWORD Err;
BOOL bRet = TRUE;
CHAR Drive[16];
CHAR FsType[64];
CHAR Cmdline[256];
PROCESS_INFORMATION Pi;
STARTUPINFOA Si;
//XXX.exe VTLRI_SRV D Z
Log("VTLRI_ServiceMain start %s %s %s ...", argv[0], argv[1], argv[2]);
sprintf_s(Drive, sizeof(Drive), "%C:\\", argv[2][0]);
while (n < 3)
{
bRet = GetVolumeInformationA(Drive, NULL, 0, NULL, NULL, NULL, FsType, sizeof(FsType));
if (bRet)
{
Sleep(400);
}
else
{
Err = LASTERR;
if (Err == ERROR_PATH_NOT_FOUND)
{
Log("%s not found", Drive);
n++;
}
}
}
sprintf_s(Cmdline, sizeof(Cmdline), "ventoy\\imdisk.exe -d -m %C:", argv[3][0]);
Log("Remove disk by <%s>", Cmdline);
GetStartupInfoA(&Si);
Si.dwFlags |= STARTF_USESHOWWINDOW;
Si.wShowWindow = SW_HIDE;
CreateProcessA(NULL, Cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &Si, &Pi);
WaitForSingleObject(Pi.hProcess, INFINITE);
return 0;
}
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int i; int i;
@@ -2761,6 +3016,11 @@ int main(int argc, char **argv)
Log("######## VentoyJump %dbit ##########", g_system_bit); Log("######## VentoyJump %dbit ##########", g_system_bit);
if (argc > 1 && strcmp(argv[1], "VTLRI_SRV") == 0)
{
return VTLRI_ServiceMain(argc, argv);
}
GetCurrentDirectoryA(sizeof(CurDir), CurDir); GetCurrentDirectoryA(sizeof(CurDir), CurDir);
Log("Current directory is <%s>", CurDir); Log("Current directory is <%s>", CurDir);

View File

@@ -195,5 +195,9 @@ int unxz(unsigned char *in, int in_size,
unsigned char *out, int *in_used, unsigned char *out, int *in_used,
void(*error)(char *x)); void(*error)(char *x));
void Log(const char* Fmt, ...);
int SetupMonNroStart(const char* isopath);
BOOL IsFileExist(const char* Fmt, ...);
BOOL IsDirExist(const char* Fmt, ...);
#endif #endif

View File

@@ -168,6 +168,7 @@
<ClCompile Include="fat_io_lib\fat_string.c" /> <ClCompile Include="fat_io_lib\fat_string.c" />
<ClCompile Include="fat_io_lib\fat_table.c" /> <ClCompile Include="fat_io_lib\fat_table.c" />
<ClCompile Include="fat_io_lib\fat_write.c" /> <ClCompile Include="fat_io_lib\fat_write.c" />
<ClCompile Include="setupmon.c" />
<ClCompile Include="vtoyjump.c" /> <ClCompile Include="vtoyjump.c" />
<ClCompile Include="xz-embedded-20130513\linux\lib\decompress_unxz.c" /> <ClCompile Include="xz-embedded-20130513\linux\lib\decompress_unxz.c" />
</ItemGroup> </ItemGroup>

View File

@@ -45,6 +45,9 @@
<ClCompile Include="xz-embedded-20130513\linux\lib\decompress_unxz.c"> <ClCompile Include="xz-embedded-20130513\linux\lib\decompress_unxz.c">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="setupmon.c">
<Filter>源文件</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="vtoyjump.h"> <ClInclude Include="vtoyjump.h">