mirror of
https://github.com/ventoy/Ventoy.git
synced 2025-09-18 18:01:14 +00:00
Compare commits
29 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
3c03df31ce | ||
|
e24dacadcd | ||
|
315cabb945 | ||
|
72f25f14fc | ||
|
47e1553d23 | ||
|
9a2a7e83eb | ||
|
5f747148c6 | ||
|
686ed11037 | ||
|
7fe4762faa | ||
|
eac1c35f76 | ||
|
c7dcaa5734 | ||
|
4b17ee30c4 | ||
|
a18aa36c01 | ||
|
1de7489c6d | ||
|
afb3340ce7 | ||
|
fdce4a756a | ||
|
5a7fa0c565 | ||
|
287d77224c | ||
|
c6bd857cbe | ||
|
b4bb6efd3c | ||
|
7386f64ed8 | ||
|
044ca8811d | ||
|
8c6fd872af | ||
|
683101ae1a | ||
|
0e968e266e | ||
|
d94d59583a | ||
|
05bbef63c1 | ||
|
8923d4b8f1 | ||
|
377cd9e468 |
2
.github/ISSUE_TEMPLATE/issue_template.yml
vendored
2
.github/ISSUE_TEMPLATE/issue_template.yml
vendored
@@ -21,7 +21,7 @@ body:
|
||||
attributes:
|
||||
label: Ventoy Version
|
||||
description: What version of ventoy are you running?
|
||||
placeholder: 1.0.84
|
||||
placeholder: 1.0.87
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
|
@@ -260,6 +260,7 @@ grub_cmd_hashsum (struct grub_extcmd_context *ctxt,
|
||||
grub_file_t file;
|
||||
grub_err_t err;
|
||||
unsigned j;
|
||||
int vlnk = 0;
|
||||
file = grub_file_open (args[i], GRUB_FILE_TYPE_TO_HASH
|
||||
| (!uncompress ? GRUB_FILE_TYPE_NO_DECOMPRESS
|
||||
: GRUB_FILE_TYPE_NONE));
|
||||
@@ -272,6 +273,7 @@ grub_cmd_hashsum (struct grub_extcmd_context *ctxt,
|
||||
unread++;
|
||||
continue;
|
||||
}
|
||||
vlnk = file->vlnk;
|
||||
err = hash_file (file, hash, result);
|
||||
grub_file_close (file);
|
||||
if (err)
|
||||
@@ -288,7 +290,7 @@ grub_cmd_hashsum (struct grub_extcmd_context *ctxt,
|
||||
grub_printf ("%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);
|
||||
}
|
||||
|
||||
|
@@ -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)
|
||||
{
|
||||
*vlnk = 1;
|
||||
if (vlnk)
|
||||
*vlnk = 1;
|
||||
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)
|
||||
{
|
||||
*vlnk = 1;
|
||||
if (vlnk)
|
||||
*vlnk = 1;
|
||||
return node->dst;
|
||||
}
|
||||
node = node->next;
|
||||
|
@@ -115,6 +115,92 @@ int ventoy_str_all_digit(const char *str)
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
int i;
|
||||
|
@@ -158,6 +158,8 @@ const char *g_menu_prefix[img_type_max] =
|
||||
"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_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_suppress_esc = 1;
|
||||
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_script_execute_sourcecode(configfile);
|
||||
|
||||
g_ventoy_menu_esc = 0;
|
||||
g_ventoy_suppress_esc = 0;
|
||||
g_ventoy_suppress_esc_default = 1;
|
||||
g_ventoy_secondary_menu_on = 0;
|
||||
|
||||
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, "menuentry \"$VTLANG_NO_PERSISTENCE\" --class=\"sel_persistence\" {\n"
|
||||
vtoy_ssprintf(buf, pos, "menuentry \"$VTLANG_NO_PERSIST\" --class=\"sel_persistence\" {\n"
|
||||
" echo %s\n}\n", "");
|
||||
|
||||
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_suppress_esc = 1;
|
||||
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_script_execute_sourcecode(configfile);
|
||||
|
||||
g_ventoy_menu_esc = 0;
|
||||
g_ventoy_suppress_esc = 0;
|
||||
g_ventoy_suppress_esc_default = 1;
|
||||
g_ventoy_secondary_menu_on = 0;
|
||||
|
||||
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;
|
||||
grub_env_unset("VTOY_SECOND_EXIT");
|
||||
grub_env_unset("VTOY_CHKSUM_FILE_PATH");
|
||||
|
||||
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_RETURN_PRV_NOESC", "second_return"); seldata[n++] = 6;
|
||||
|
||||
do {
|
||||
grub_errno = GRUB_ERR_NONE;
|
||||
g_ventoy_menu_esc = 1;
|
||||
g_ventoy_suppress_esc = 1;
|
||||
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_script_execute_sourcecode("configfile $vtoy_efi_part/grub/checksum.cfg");
|
||||
}
|
||||
else if (select == 6)
|
||||
{
|
||||
grub_env_set("VTOY_SECOND_EXIT", "1");
|
||||
}
|
||||
}while (select == 5);
|
||||
|
||||
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)
|
||||
@@ -6292,6 +6305,274 @@ static grub_err_t ventoy_cmd_load_menu_lang(grub_extcmd_context_t ctxt, int argc
|
||||
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)
|
||||
{
|
||||
@@ -6522,6 +6803,8 @@ static cmd_para ventoy_cmds[] =
|
||||
{ "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_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 },
|
||||
|
||||
};
|
||||
|
||||
|
@@ -116,6 +116,15 @@
|
||||
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
|
||||
{
|
||||
VTOY_FILE_FLT_ISO = 0, /* .iso */
|
||||
@@ -628,6 +637,11 @@ typedef struct chk_case_fs_dir
|
||||
}chk_case_fs_dir;
|
||||
|
||||
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_strncmp (const char *pattern, const char *str, grub_size_t n);
|
||||
void ventoy_fill_os_param(grub_file_t file, ventoy_os_param *param);
|
||||
|
@@ -148,9 +148,10 @@ static int ventoy_vhd_patch_path(char *vhdpath, ventoy_patch_vhd *patch1, ventoy
|
||||
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 find = 0;
|
||||
int ret = 1;
|
||||
grub_uint64_t start;
|
||||
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)
|
||||
{
|
||||
*index = i;
|
||||
find = 1;
|
||||
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)
|
||||
{
|
||||
*index = i;
|
||||
find = 1;
|
||||
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;
|
||||
|
||||
end:
|
||||
@@ -226,7 +239,7 @@ static int ventoy_vhd_patch_disk(const char *vhdpath, ventoy_patch_vhd *patch1,
|
||||
else
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -249,9 +262,7 @@ static int ventoy_vhd_patch_disk(const char *vhdpath, ventoy_patch_vhd *patch1,
|
||||
}
|
||||
else
|
||||
{
|
||||
offset = gpt->MBR.PartTbl[partIndex].StartSectorId;
|
||||
offset *= 512;
|
||||
|
||||
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 + 2], gpt->MBR.BootCode[0x1b8 + 3],
|
||||
|
@@ -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_suppress_esc = 1;
|
||||
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_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_suppress_esc = 0;
|
||||
g_ventoy_suppress_esc_default = 1;
|
||||
g_ventoy_secondary_menu_on = 0;
|
||||
|
||||
for (node = g_wim_patch_head; node; node = node->next)
|
||||
{
|
||||
|
@@ -12,7 +12,7 @@ make install
|
||||
PATH=$VT_DIR/GRUB2/INSTALL/bin/:$VT_DIR/GRUB2/INSTALL/sbin/:$PATH
|
||||
|
||||
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"
|
||||
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"
|
||||
|
@@ -150,3 +150,19 @@ fi
|
||||
if [ -f $VTOY_PATH/autoinstall ]; then
|
||||
cp -a $VTOY_PATH/hook/rhel7/ventoy-autoexp.sh /lib/dracut/hooks/pre-mount/99-ventoy-autoexp.sh
|
||||
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
|
||||
|
||||
|
@@ -50,7 +50,11 @@ if is_inotify_ventoy_part $3; then
|
||||
vtScript=$($GREP -m1 'RUN.=' $vtGenRulFile | $AWK -F'RUN.=' '{print $2}' | $SED 's/"\(.*\)".*/\1/')
|
||||
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
|
||||
else
|
||||
$vtScript
|
||||
|
@@ -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/')
|
||||
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"
|
||||
ln -s /dev/$vtDM /dev/mapper/ventoy
|
||||
fi
|
||||
@@ -35,7 +37,13 @@ VTLABEL=$($BUSYBOX_PATH/blkid /dev/$vtDM | $SED 's/.*LABEL="\([^"]*\)".*/\1/')
|
||||
vtlog "VTLABEL=$VTLABEL"
|
||||
|
||||
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"
|
||||
ln -s /dev/$vtDM "/dev/disk/by-label/$VTLABEL"
|
||||
fi
|
||||
|
@@ -892,3 +892,17 @@ ventoy_check_umount() {
|
||||
fi
|
||||
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
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
|
||||
========== 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
|
||||
CMD:
|
||||
@@ -18,16 +18,16 @@ Please refer https://www.ventoy.net/en/doc_start.html for details.
|
||||
|
||||
|
||||
========== VentoyWeb.sh ===============
|
||||
1. sudo sh VentoyWeb.sh
|
||||
1. sudo bash VentoyWeb.sh
|
||||
2. open your browser and visit http://127.0.0.1:24680
|
||||
|
||||
|
||||
========== 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
|
||||
|
||||
========== VentoyVlnk.sh ===============
|
||||
Usage: sudo sh VentoyVlnk.sh CMD FILE
|
||||
Usage: sudo bash VentoyVlnk.sh CMD FILE
|
||||
CMD:
|
||||
-c FILE create vlnk for FILE
|
||||
-l VLNK parse vlnk file
|
||||
@@ -43,21 +43,21 @@ VentoyGUI is native GUI program for Linux (GTK/QT)
|
||||
|
||||
========== 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
|
||||
sh 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
|
||||
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 ----> persistence.dat in 1GB size and ext4 filesystem and casper-rw label
|
||||
bash CreatePersistentImg.sh -l MX-Persist ----> persistence.dat in 1GB size and ext4 filesystem and MX-Persist label
|
||||
bash CreatePersistentImg.sh -s 2048 ----> persistence.dat in 2GB size and ext4 filesystem 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.
|
||||
|
||||
|
||||
|
||||
========== ExtendPersistentImg.sh ===============
|
||||
sudo sh ExtendPersistentImg.sh file size
|
||||
sudo bash ExtendPersistentImg.sh file size
|
||||
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)
|
||||
|
||||
Please refer https://www.ventoy.net/en/plugin_persistence.html for details.
|
||||
|
@@ -1,19 +1,17 @@
|
||||
|
||||
if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.md5" ]; then
|
||||
set default=0
|
||||
unset vtchkdef
|
||||
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 {
|
||||
md5sum "${vtoy_iso_part}${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
|
||||
|
||||
md5sum "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}"
|
||||
vt_cmp_checksum 0 "${VTOY_CHKSUM_FILE_PATH}"
|
||||
|
||||
echo -en "\n\n$VTLANG_ENTER_EXIT ..."
|
||||
read vtInputKey
|
||||
}
|
||||
@@ -26,20 +24,14 @@ else
|
||||
}
|
||||
fi
|
||||
|
||||
if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha1" ]; then
|
||||
set default=1
|
||||
if [ -f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha1" -o $vtchksumfile -eq 0 ]; then
|
||||
if [ -z "$vtchkdef" ]; then
|
||||
set default=1
|
||||
set vtchkdef=1
|
||||
fi
|
||||
menuentry "$VTLANG_CHKSUM_SHA1_CALC_CHK" --class=checksum_sha1 {
|
||||
sha1sum "${vtoy_iso_part}${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
|
||||
vt_cmp_checksum 1 "${VTOY_CHKSUM_FILE_PATH}"
|
||||
|
||||
echo -en "\n\n$VTLANG_ENTER_EXIT ..."
|
||||
read vtInputKey
|
||||
@@ -55,20 +47,14 @@ fi
|
||||
|
||||
|
||||
|
||||
if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha256" ]; then
|
||||
set default=2
|
||||
if [ -f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha256" -o $vtchksumfile -eq 0 ]; then
|
||||
if [ -z "$vtchkdef" ]; then
|
||||
set default=2
|
||||
set vtchkdef=1
|
||||
fi
|
||||
menuentry "$VTLANG_CHKSUM_SHA256_CALC_CHK" --class=checksum_sha256 {
|
||||
sha256sum "${vtoy_iso_part}${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
|
||||
vt_cmp_checksum 2 "${VTOY_CHKSUM_FILE_PATH}"
|
||||
|
||||
echo -en "\n\n$VTLANG_ENTER_EXIT ..."
|
||||
read vtInputKey
|
||||
@@ -84,20 +70,14 @@ fi
|
||||
|
||||
|
||||
|
||||
if [ -e "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha512" ]; then
|
||||
set default=3
|
||||
if [ -f "${vtoy_iso_part}${VTOY_CHKSUM_FILE_PATH}.sha512" -o $vtchksumfile -eq 0 ]; then
|
||||
if [ -z "$vtchkdef" ]; then
|
||||
set default=3
|
||||
set vtchkdef=1
|
||||
fi
|
||||
menuentry "$VTLANG_CHKSUM_SHA512_CALC_CHK" --class=checksum_sha512{
|
||||
sha512sum "${vtoy_iso_part}${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
|
||||
vt_cmp_checksum 3 "${VTOY_CHKSUM_FILE_PATH}"
|
||||
|
||||
echo -en "\n\n$VTLANG_ENTER_EXIT ..."
|
||||
read vtInputKey
|
||||
|
@@ -19,7 +19,6 @@
|
||||
if [ "$grub_platform" = "pc" ]; then
|
||||
insmod setkey
|
||||
insmod regexp
|
||||
insmod video_fb
|
||||
fi
|
||||
|
||||
function ventoy_pause {
|
||||
@@ -126,7 +125,8 @@ function ventoy_load_menu_lang_file {
|
||||
|
||||
function get_os_type {
|
||||
set vtoy_os=Linux
|
||||
|
||||
export vtoy_os
|
||||
|
||||
if vt_str_begin "$vt_volume_id" "DLC Boot"; then
|
||||
if [ -f (loop)/DLCBoot.exe ]; then
|
||||
set vtoy_os=Windows
|
||||
@@ -227,6 +227,8 @@ function distro_specify_wim_patch {
|
||||
function distro_specify_wim_patch_phase2 {
|
||||
if [ -f (loop)/boot/boot.wim ]; then
|
||||
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
|
||||
|
||||
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
|
||||
syslinux_configfile (loop)/boot/isolinux/syslnx64.cfg
|
||||
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
|
||||
|
||||
@@ -904,11 +909,6 @@ function ventoy_reset_nojoliet {
|
||||
}
|
||||
|
||||
function uefi_iso_menu_func {
|
||||
|
||||
if [ -d (loop)/ ]; then
|
||||
loopback -d loop
|
||||
fi
|
||||
|
||||
if [ -n "$vtisouefi" ]; then
|
||||
set LoadIsoEfiDriver=on
|
||||
unset vtisouefi
|
||||
@@ -922,21 +922,13 @@ function uefi_iso_menu_func {
|
||||
vt_select_auto_install "${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
|
||||
|
||||
if ! vt_is_udf "${1}${chosen_path}"; then
|
||||
# Lenovo EasyStartup need an addional sector for boundary check
|
||||
if vt_str_begin "$vt_volume_id" "EasyStartup"; then
|
||||
vt_skip_svd "${vtoy_iso_part}${vt_chosen_path}"
|
||||
vt_append_extra_sector 1
|
||||
fi
|
||||
fi
|
||||
|
||||
loopback loop "${1}${chosen_path}"
|
||||
get_os_type (loop)
|
||||
|
||||
if [ -d (loop)/EFI ]; then
|
||||
set vt_efi_dir=YES
|
||||
@@ -955,15 +947,6 @@ function uefi_iso_menu_func {
|
||||
vt_check_compatible (loop)
|
||||
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}"
|
||||
|
||||
if [ "$ventoy_fs_probe" = "iso9660" ]; then
|
||||
@@ -980,8 +963,7 @@ function uefi_iso_menu_func {
|
||||
uefi_linux_menu_func "$1" "${chosen_path}"
|
||||
fi
|
||||
|
||||
ventoy_gui_console
|
||||
vt_secondary_recover_mode
|
||||
ventoy_gui_console
|
||||
}
|
||||
|
||||
function uefi_iso_memdisk {
|
||||
@@ -1331,6 +1313,9 @@ function legacy_linux_menu_func {
|
||||
if [ -f (loop)/boot/isolinux/syslnx64.cfg ]; then
|
||||
syslinux_configfile (loop)/boot/isolinux/syslnx64.cfg
|
||||
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
|
||||
|
||||
@@ -1366,26 +1351,10 @@ function legacy_unix_menu_func {
|
||||
|
||||
|
||||
function legacy_iso_menu_func {
|
||||
|
||||
if [ -d (loop)/ ]; then
|
||||
loopback -d loop
|
||||
fi
|
||||
|
||||
set chosen_path="$2"
|
||||
|
||||
vt_select_auto_install "${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
|
||||
set ventoy_compatible=YES
|
||||
@@ -1396,15 +1365,6 @@ function legacy_iso_menu_func {
|
||||
vt_check_compatible (loop)
|
||||
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}"
|
||||
|
||||
if [ "$ventoy_fs_probe" = "iso9660" ]; then
|
||||
@@ -1513,6 +1473,33 @@ function iso_common_menuentry {
|
||||
if ventoy_vcfg_proc "${vt_chosen_path}"; then
|
||||
return
|
||||
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
|
||||
vt_skip_svd "${vtoy_iso_part}${vt_chosen_path}"
|
||||
@@ -1564,7 +1551,9 @@ function iso_common_menuentry {
|
||||
else
|
||||
uefi_iso_menu_func $vtoy_iso_part "$vt_chosen_path"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
vt_secondary_recover_mode
|
||||
}
|
||||
|
||||
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
|
||||
set VTOY_PARAM_NO_ACPI=1
|
||||
@@ -2556,9 +2545,18 @@ elif [ "$vtoy_display_mode" = "serial_console" ]; then
|
||||
terminal_input serial console
|
||||
terminal_output serial console
|
||||
else
|
||||
if [ "$vtoy_res_fit" = "1" ]; then
|
||||
if [ "$vtoy_gfxmode" = "max" ]; then
|
||||
set gfxmode=1024x768
|
||||
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
|
||||
vt_set_theme
|
||||
|
@@ -9,7 +9,7 @@ F7 - GUI মোড <-> TEXT মোডের মধ্যে স্যুইচ
|
||||
|
||||
m/Ctrl+m - চেকসাম ইমেজ ফাইল (md5/sha1/sha256/sha512)
|
||||
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 জন্য)
|
||||
i/Ctrl+i - Compatible মোড (শুধুমাত্র debug জন্য)
|
||||
u/Ctrl+u - ISO efi ড্রাইভার লোড করুন (শুধুমাত্র debug জন্য, সরকারীভাবে ব্যবহার করা যাবে না)
|
||||
|
@@ -9,7 +9,7 @@ F7 - Wechseln zwischen Grafik-/Text-Modus
|
||||
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
|
@@ -9,7 +9,7 @@ F7 - Switch between GUI Mode <-> TEXT Mode
|
||||
|
||||
m/Ctrl+m - Checksum image files (md5/sha1/sha256/sha512)
|
||||
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)
|
||||
i/Ctrl+i - Compatible Mode (Only for debugging)
|
||||
u/Ctrl+u - Load ISO EFI driver (Only for debugging, cannot be used officially)
|
||||
|
19
INSTALL/grub/help/es_ES.txt
Normal file
19
INSTALL/grub/help/es_ES.txt
Normal 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 ......
|
@@ -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)
|
||||
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)
|
||||
i/Ctrl+i - Mode Compatible (pour débug uniquement)
|
||||
u/Ctrl+u - Charger l’ISO d’un pilote EFI (pour débug uniquement)
|
||||
|
@@ -9,7 +9,7 @@ F7 - GUI मोड <-> Text मोड के बीच स्विच करे
|
||||
|
||||
m/Ctrl+m - चेकसम इमेज फाइल्स (md5/sha1/sha256/sha512)
|
||||
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 के लिए)
|
||||
i/Ctrl+i - Compatible मोड (केवल डिबग के लिए)
|
||||
u/Ctrl+u - ISO efi ड्राइवर लोड करें (केवल debug के लिए, आधिकारिक तौर पर इस्तेमाल नहीं किया जा सकता)
|
||||
|
@@ -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)
|
||||
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)
|
||||
i/Ctrl+i - Kompatibilni način rada (samo za testiranje)
|
||||
u/Ctrl+u - Učitava EFI drajver za imidž fajlove (samo za testiranje)
|
||||
|
@@ -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)
|
||||
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)
|
||||
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ó.)
|
||||
|
@@ -9,7 +9,7 @@ F7 - Beralih antara mode GUI <-> Mode TEXT
|
||||
|
||||
m/Ctrl+m - Periksa berkas files (md5/sha1/sha256/sha512)
|
||||
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)
|
||||
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)
|
||||
|
@@ -9,7 +9,7 @@ F7 - 操作形式を切り替える(GUI ↔ CUI)
|
||||
|
||||
m/Ctrl+m - イメージの検査合計を計算する (md5/sha1/sha256/sha512)
|
||||
d/Ctrl+d - 主記憶装置上に記憶域を作成する(容量の小さなWinPE・LiveCD専用)
|
||||
w/Ctrl+w - WIMBOOTモード(標準的なWindows ISO専用)
|
||||
w/Ctrl+w - WIMBOOTモード(Windows/WinPE ISO専用)
|
||||
r/Ctrl+r - Grub2モード(一部のLinuxディストリビューション専用)
|
||||
i/Ctrl+i - 互換モード(開発用)
|
||||
u/Ctrl+u - ISO efiドライバーを読み取る(開発用,非公式)
|
||||
|
@@ -9,7 +9,7 @@ F7 - ჩვენების რეჟიმის გადართვა '
|
||||
|
||||
m/Ctrl+m - ფაილის საკონტროლო ჯამის შემოწმება (md5/sha1/sha256/sha512)
|
||||
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 დისტრიბუტივებისთვის)
|
||||
i/Ctrl+i - თავსებადი რეჟიმი (განკუთვნილია მხოლოდ გამართვისთვის)
|
||||
u/Ctrl+u - ISO EFI დრაივერის ჩატვირთვა (განკუთვნილია მხოლოდ გამართვისთვის, დაუშვებელია ოფიციალური გამოყენება)
|
||||
|
@@ -9,7 +9,7 @@ F7 - GUI 모드 <-> TEXT 모드 간에 전환
|
||||
|
||||
m/Ctrl+m - 체크섬 이미지 파일 (md5/sha1/sha256/sha512)
|
||||
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 배포판에만 해당)
|
||||
i/Ctrl+i - 호환 모드 (디버그 전용)
|
||||
u/Ctrl+u - ISO EFI 드라이버 불러오기 (디버그 전용, 공식적으로 사용할 수 없음)
|
||||
|
@@ -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)
|
||||
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)
|
||||
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ć)
|
||||
|
@@ -9,7 +9,7 @@ F7 - Alternar entre Modo GUI <-> Modo TEXTO
|
||||
|
||||
m/Ctrl+m - Checksum ficheiros de imagem (md5/sha1/sha256/sha512)
|
||||
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)
|
||||
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)
|
||||
|
@@ -1,19 +1,19 @@
|
||||
L - Выбор языка
|
||||
F1 - Показать эту справочную информацию
|
||||
L - Выбор языка
|
||||
F1 - Показать эти справочные сведения
|
||||
F2 - Просмотр и загрузка файлов на локальном диске
|
||||
F3 - Переключить режим меню между Treeview <-> ListView
|
||||
F4 - Загрузка Windows/Linux с локального диска
|
||||
F3 - Переключить режим меню между «ВидДревом» <-> «ВидСписком»
|
||||
F4 - Загрузка винды/линукса с локального диска
|
||||
F5 - Утилиты
|
||||
F6 - Загрузить пользовательское меню Grub2
|
||||
F7 - Переключиться между режимом GUI <-> режимом TEXT
|
||||
F7 - Переключиться между графическим режимом <-> текстовым режимом
|
||||
|
||||
m/Ctrl+m - Проверить контрольную сумму файлов образа диска (md5/sha1/sha256/sha512)
|
||||
d/Ctrl+d - Режим Memdisk (Только для небольших WinPE/LiveCD ISO/IMG)
|
||||
w/Ctrl+w - Режим WIMBOOT (Только для стандартного Windows ISO)
|
||||
r/Ctrl+r - Режим Grub2 (Только для некоторых дистрибутивов Linux)
|
||||
i/Ctrl+i - Совместимый режим (Только для отладки)
|
||||
u/Ctrl+u - Загрузить драйвер ISO EFI (Только для отладки, нельзя использовать официально)
|
||||
d/Ctrl+d - Режим Memdisk (только для небольших WinPE/LiveCD ISO/IMG)
|
||||
w/Ctrl+w - Режим WIMBOOT (только для Windows/WinPE ISO)
|
||||
r/Ctrl+r - Режим Grub2 (только для некоторых сборок линукса)
|
||||
i/Ctrl+i - Совместимый режим (только для отладки)
|
||||
u/Ctrl+u - Загрузить драйвер ISO EFI (только для отладки, нельзя использовать официально)
|
||||
|
||||
|
||||
|
||||
Нажмите ESC, чтобы вернуться ......
|
||||
Нажмите «ESC», чтобы вернуться ......
|
||||
|
@@ -9,7 +9,7 @@ F7 - Мења између GUI <-> TEXT начина рада
|
||||
|
||||
m/Ctrl+m - Генерира хеш одабраног имиџ фајла (md5/sha1/sha256/sha512)
|
||||
d/Ctrl+d - Memdisk начин рада (само за мале WinPE/LiveCD имиџ фајлове)
|
||||
w/Ctrl+w - WIMBOOT начин рада (само за стандардне Windows имиџ фајлове)
|
||||
w/Ctrl+w - WIMBOOT начин рада (само за стандардне Windows/WinPE имиџ фајлове)
|
||||
r/Ctrl+r - GRUB2 начин рада (само за неке Linux дистрибуције)
|
||||
i/Ctrl+i - Компатибилни начин рада (само за тестирање)
|
||||
u/Ctrl+u - Учитава EFI драјвер за имиџ фајлове (само за тестирање)
|
||||
|
@@ -9,7 +9,7 @@ F7 - GUI பயன்முறை <-> TEXT பயன்முறைக்கு
|
||||
|
||||
m/Ctrl+m - செக்சம் படக் கோப்புகள் (md5/sha1/sha256/sha512)
|
||||
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 பயன்முறை (சில லினக்ஸ் டிஸ்ட்ரோக்களுக்கு மட்டும்)
|
||||
i/Ctrl+i - இணக்கமான பயன்முறை (பிழைத்திருத்தத்திற்கு மட்டும்)
|
||||
u/Ctrl+u - ISO efi இயக்கியை ஏற்றவும் (பிழைத்திருத்தத்திற்கு மட்டும், அதிகாரப்பூர்வமாக பயன்படுத்த முடியாது)
|
||||
|
@@ -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
|
||||
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)
|
||||
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)
|
||||
|
@@ -9,7 +9,7 @@ F7 - 界面在文本模式和图形模式之间切换。
|
||||
|
||||
m/Ctrl+m - 计算文件校验值(md5/sha1/sha256/sha512)
|
||||
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文件)
|
||||
i/Ctrl+i - 兼容模式 (只用作调试目的,不能正式使用)
|
||||
u/Ctrl+u - 加载 ISO efi 驱动(只用作调试目的,不能正式使用)
|
||||
|
@@ -9,7 +9,7 @@ F7 - 介面在文字模式和圖形模式之間切換。
|
||||
|
||||
m/Ctrl+m - 計算檔案校驗值(md5/sha1/sha256/sha512)
|
||||
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檔)
|
||||
i/Ctrl+i - 相容模式 (只用作調試目的,不能正式使用)
|
||||
u/Ctrl+u - 載入 ISO efi 驅動(只用作調試目的,不能正式使用)
|
||||
|
@@ -81,13 +81,18 @@ else
|
||||
terminal_output console
|
||||
chainloader /efi/Microsoft/Boot/bootmgfw.efi
|
||||
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
|
||||
else
|
||||
break
|
||||
fi
|
||||
vt_incr partid 1
|
||||
done
|
||||
|
||||
|
||||
if search -n -s -f /EFI/Microsoft/Boot/bootmgfw.efi; then
|
||||
terminal_output console
|
||||
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
|
||||
@@ -109,6 +114,11 @@ else
|
||||
terminal_output console
|
||||
chainloader /efi/boot/bootia32.efi
|
||||
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
|
||||
unset VTOY_SEARCH_NO_VTOYEFI
|
||||
echo "BOOTIA32.EFI NOT found ..."
|
||||
@@ -126,6 +136,15 @@ else
|
||||
chainloader /efi/xorboot/xorboot.efi
|
||||
fi
|
||||
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
|
||||
unset VTOY_SEARCH_NO_VTOYEFI
|
||||
echo "xorboot NOT found ..."
|
||||
@@ -139,6 +158,12 @@ else
|
||||
terminal_output console
|
||||
chainloader /efi/boot/bootaa64.efi
|
||||
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
|
||||
unset VTOY_SEARCH_NO_VTOYEFI
|
||||
echo "BOOTAA64.EFI NOT found ..."
|
||||
@@ -152,6 +177,11 @@ else
|
||||
terminal_output console
|
||||
chainloader /efi/boot/bootx64.efi
|
||||
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
|
||||
unset VTOY_SEARCH_NO_VTOYEFI
|
||||
echo "BOOTX64.EFI NOT found ..."
|
||||
@@ -169,6 +199,15 @@ else
|
||||
chainloader /efi/xorboot/xorboot.efi
|
||||
fi
|
||||
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
|
||||
unset VTOY_SEARCH_NO_VTOYEFI
|
||||
echo "xorboot NOT found ..."
|
||||
|
@@ -4,6 +4,7 @@
|
||||
"VTLANG_STR_HOTKEY_LIST": "L: لغه F1: مساعدة F2: تصفح F3: عرض قائمه F4: اقلا محلي F5: أدوات F6: عوده",
|
||||
"VTLANG_STR_HOTKEY_TREE": "L: لغه F1: مساعدة F2: تصفح F3: عرض تصنيف F4: اقلاع محلي F5: أدوات F6: عوده",
|
||||
"VTLANG_RETURN_PREVIOUS": "عودة إلى القائمة السابقة [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "عودة إلى القائمة السابقة",
|
||||
"VTLANG_MENU_LANG": "اختيار اللغة في القائمة",
|
||||
"VTLANG_LB_SBOOT_WINDOWS": "البحث والإقلاع على ويندوز",
|
||||
"VTLANG_LB_SBOOT_G4D": "البحث والإقلاع على Grub4dos",
|
||||
|
@@ -4,6 +4,7 @@
|
||||
"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_RETURN_PREVIOUS": "পূর্ববর্তী মেনুতে ফিরে যান [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "পূর্ববর্তী মেনুতে ফিরে যান",
|
||||
|
||||
"VTLANG_MENU_LANG": "মেনু ভাষা নির্বাচন করুন",
|
||||
|
||||
|
@@ -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_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_PRV_NOESC": "Zu vorherigem Menü",
|
||||
|
||||
"VTLANG_MENU_LANG": "Menüsprache auswählen",
|
||||
|
||||
|
@@ -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_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_PRV_NOESC": "Return to previous menu",
|
||||
|
||||
"VTLANG_MENU_LANG": "Menu Language Select",
|
||||
|
||||
|
93
INSTALL/grub/menu/es_ES.json
Normal file
93
INSTALL/grub/menu/es_ES.json
Normal 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": ""
|
||||
}
|
@@ -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_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_PRV_NOESC": "Retour au menu précédent",
|
||||
|
||||
"VTLANG_MENU_LANG": "Sélection de la langue des menus",
|
||||
|
||||
|
@@ -4,6 +4,7 @@
|
||||
"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_RETURN_PREVIOUS": "पिछले मेनू पर लौटें [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "पिछले मेनू पर लौटें",
|
||||
|
||||
"VTLANG_MENU_LANG": "मेनू भाषा का चयन करें",
|
||||
|
||||
|
@@ -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_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_PRV_NOESC": "Return to previous menu",
|
||||
|
||||
"VTLANG_MENU_LANG": "Menu Language Select",
|
||||
|
||||
|
@@ -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_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_PRV_NOESC": "Vissza az előző menübe",
|
||||
|
||||
"VTLANG_MENU_LANG": "Menü nyelv kiválasztás",
|
||||
|
||||
|
@@ -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_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_PRV_NOESC": "Kembali ke menu sebelumnya",
|
||||
|
||||
"VTLANG_MENU_LANG": "Menu Pilihan Bahasa",
|
||||
|
||||
|
@@ -4,6 +4,7 @@
|
||||
"VTLANG_STR_HOTKEY_LIST": "L:言語 F1:説明 F2:閲覧 F3:表示切替(階層) F4:手許から起動 F5:道具 F6:拡張",
|
||||
"VTLANG_STR_HOTKEY_TREE": "L:言語 F1:説明 F2:閲覧 F3:表示切替(一覧) F4:手許から起動 F5:道具 F6:拡張",
|
||||
"VTLANG_RETURN_PREVIOUS": "前に戻る [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "前に戻る",
|
||||
|
||||
"VTLANG_MENU_LANG": "表示言語",
|
||||
|
||||
|
@@ -4,6 +4,7 @@
|
||||
"VTLANG_STR_HOTKEY_LIST": "L:ენა F1:დახმარება F2:დათვალიერება F3:სიის ხედი F4:ლოკალური ჩატვირთვა F5:ხელსაწყოები F6:გასვლა",
|
||||
"VTLANG_STR_HOTKEY_TREE": "L:ენა F1:დახმარება F2:დათვალიერება F3:ხის ხედი F4:ლოკალური ჩატვირთვა F5:ხელსაწყოები F6:გასვლა",
|
||||
"VTLANG_RETURN_PREVIOUS": "წინა მენიუში დაბრუნება [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "წინა მენიუში დაბრუნება",
|
||||
|
||||
"VTLANG_MENU_LANG": "მენიუს ენის არჩევა",
|
||||
|
||||
|
@@ -4,6 +4,7 @@
|
||||
"VTLANG_STR_HOTKEY_LIST": "번역: 비너스걸 L:언어 F1:도움말 F2:찾아보기 F3:목록보기 F4:로컬부트 F5:도구 F6:확장메뉴",
|
||||
"VTLANG_STR_HOTKEY_TREE": "번역: 비너스걸 L:언어 F1:도움말 F2:찾아보기 F3:목록보기 F4:로컬부트 F5:도구 F6:확장메뉴",
|
||||
"VTLANG_RETURN_PREVIOUS": "이전 메뉴로 돌아가기 [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "이전 메뉴로 돌아가기",
|
||||
|
||||
"VTLANG_MENU_LANG": "메뉴 언어 선택",
|
||||
|
||||
|
@@ -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_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_PRV_NOESC": "Powrót do poprzedniego menu",
|
||||
|
||||
"VTLANG_MENU_LANG": "Wybór języka menu",
|
||||
|
||||
|
@@ -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_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_PRV_NOESC": "Voltar ao menu anterior",
|
||||
|
||||
"VTLANG_MENU_LANG": "Seleção de idioma do menu",
|
||||
|
||||
@@ -82,11 +83,11 @@
|
||||
"VTLANG_ENTER_REBOOT": "pressione a tecla Enter para reiniciar",
|
||||
"VTLANG_ENTER_CONTINUE": "pressione a tecla Enter para continuar",
|
||||
|
||||
"VTLANG_CTRL_TEMP_SET": "Temporary Control Settings",
|
||||
"VTLANG_WIN11_BYPASS_CHECK": "Bypass CPU/TPM/SecureBoot check when install Windows 11",
|
||||
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
||||
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
||||
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
||||
"VTLANG_CTRL_TEMP_SET": "Configurações de Controle Temporário",
|
||||
"VTLANG_WIN11_BYPASS_CHECK": "Ignorar checagem de CPU/TPM/SecureBoot quando instalando Windows 11",
|
||||
"VTLANG_WIN11_BYPASS_NRO": "Ignorar requerimento de conta online quanto instalando Windows 11",
|
||||
"VTLANG_LINUX_REMOUNT": "Montar partição Ventoy após boot do Linux",
|
||||
"VTLANG_SECONDARY_BOOT_MENU": "Mostar menu seundário de boot",
|
||||
|
||||
"MENU_STR_XXX": ""
|
||||
}
|
||||
|
@@ -1,13 +1,14 @@
|
||||
{
|
||||
"VTLANG_LANGUAGE_NAME": "Russian (Русский)",
|
||||
|
||||
"VTLANG_STR_HOTKEY_LIST": "L:Язык F1:Помощь F2:Просмотр F3:ListView F4:Локальная загрузка F5:Инструменты F6:Выйти из меню",
|
||||
"VTLANG_STR_HOTKEY_TREE": "L:Язык F1:Помощь F2:Просмотр F3:TreeView 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_RETURN_PREVIOUS": "Вернуться в предыдущее меню [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "Вернуться в предыдущее меню",
|
||||
|
||||
"VTLANG_MENU_LANG": "Выбор языка меню",
|
||||
|
||||
"VTLANG_LB_SBOOT_WINDOWS": "Найти и загрузить Windows",
|
||||
"VTLANG_LB_SBOOT_WINDOWS": "Найти и загрузить винду",
|
||||
"VTLANG_LB_SBOOT_G4D": "Найти и загрузить Grub4dos",
|
||||
"VTLANG_LB_SBOOT_HDD1": "Загрузить 1-й локальный диск",
|
||||
"VTLANG_LB_SBOOT_HDD2": "Загрузить 2-й локальный диск",
|
||||
@@ -33,7 +34,7 @@
|
||||
"VTLANG_POWER_BOOT_EFIFW": "Перезагрузиться в настройку EFI",
|
||||
|
||||
"VTLANG_KEYBRD_LAYOUT": "Раскладки клавиатуры",
|
||||
"VTLANG_HWINFO": "Информация об оборудовании",
|
||||
"VTLANG_HWINFO": "Сведения об оборудовании",
|
||||
|
||||
"VTLANG_RESOLUTION_CFG": "Конфигурация разрешения",
|
||||
"VTLANG_SCREEN_MODE": "Режим Screen Display",
|
||||
@@ -44,48 +45,48 @@
|
||||
|
||||
"VTLANG_UEFI_UTIL": "UEFI утилиты Вентоя",
|
||||
"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_CONTROL": "Проверить конфигурацию плагина global control",
|
||||
"VTLANG_JSON_CHK_THEME": "Проверить конфигурацию плагина theme",
|
||||
"VTLANG_JSON_CHK_AUTOINS": "Проверить конфигурацию плагина auto install",
|
||||
"VTLANG_JSON_CHK_PERSIST": "Проверить конфигурацию плагина persistence",
|
||||
"VTLANG_JSON_CHK_MENU_ALIAS": "Проверить конфигурацию плагина menu alias",
|
||||
"VTLANG_JSON_CHK_MENU_TIP": "Проверить конфигурацию плагина menu tip",
|
||||
"VTLANG_JSON_CHK_MENU_CLASS": "Проверить конфигурацию плагина menu class",
|
||||
"VTLANG_JSON_CHK_INJECTION": "Проверить конфигурацию плагина injection",
|
||||
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Проверить конфигурацию плагина auto memdisk",
|
||||
"VTLANG_JSON_CHK_IMG_LIST": "Проверить конфигурацию плагина image list",
|
||||
"VTLANG_JSON_CHK_IMG_BLIST": "Проверить конфигурацию плагина image blacklist",
|
||||
"VTLANG_JSON_CHK_CONF_REPLACE": "Проверить конфигурацию плагина boot conf replace",
|
||||
"VTLANG_JSON_CHK_DUD": "Проверить конфигурацию плагина dud",
|
||||
"VTLANG_JSON_CHK_PASSWORD": "Проверить конфигурацию плагина password",
|
||||
"VTLANG_JSON_CHK_JSON": "Проверить настройки расширения «json» (ventoy.json)",
|
||||
"VTLANG_JSON_CHK_CONTROL": "Проверить настройки расширения «global control»",
|
||||
"VTLANG_JSON_CHK_THEME": "Проверить настройки расширения «theme»",
|
||||
"VTLANG_JSON_CHK_AUTOINS": "Проверить настройки расширения «auto install»",
|
||||
"VTLANG_JSON_CHK_PERSIST": "Проверить настройки расширения «persistence»",
|
||||
"VTLANG_JSON_CHK_MENU_ALIAS": "Проверить настройки расширения «menu alias»",
|
||||
"VTLANG_JSON_CHK_MENU_TIP": "Проверить настройки расширения «menu tip»",
|
||||
"VTLANG_JSON_CHK_MENU_CLASS": "Проверить настройки расширения «menu class»",
|
||||
"VTLANG_JSON_CHK_INJECTION": "Проверить настройки расширения «injection»",
|
||||
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Проверить настройки расширения «auto memdisk»",
|
||||
"VTLANG_JSON_CHK_IMG_LIST": "Проверить настройки расширения «image list»",
|
||||
"VTLANG_JSON_CHK_IMG_BLIST": "Проверить настройки расширения «image blacklist»",
|
||||
"VTLANG_JSON_CHK_CONF_REPLACE": "Проверить настройки расширения «boot conf replace»",
|
||||
"VTLANG_JSON_CHK_DUD": "Проверить настройки расширения «dud»",
|
||||
"VTLANG_JSON_CHK_PASSWORD": "Проверить настройки расширения «password»",
|
||||
|
||||
"VTLANG_NORMAL_MODE": "Загрузиться в обычном режиме",
|
||||
"VTLANG_WIMBOOT_MODE": "Загрузиться в режиме wimboot",
|
||||
"VTLANG_GRUB2_MODE": "Загрузиться в режиме grub2",
|
||||
"VTLANG_MEMDISK_MODE": "Загрузиться в режиме memdisk",
|
||||
|
||||
"VTLANG_RET_TO_LISTVIEW": "Вернуться к ListView",
|
||||
"VTLANG_RET_TO_TREEVIEW": "Вернуться к TreeView",
|
||||
"VTLANG_RET_TO_LISTVIEW": "Вернуться к ВидуСписком",
|
||||
"VTLANG_RET_TO_TREEVIEW": "Вернуться к ВидуДревом",
|
||||
|
||||
"VTLANG_NO_AUTOINS_SCRIPT": "Загрузка без шаблона автоматической установки",
|
||||
"VTLANG_AUTOINS_USE": "Загрузиться с",
|
||||
|
||||
"VTLANG_NO_PERSIST": "Загрузка без персистентности",
|
||||
"VTLANG_NO_PERSIST": "Загрузка без сохраняемости",
|
||||
"VTLANG_PERSIST_USE": "Загрузиться с",
|
||||
|
||||
"VTLANG_BROWER_RETURN": "Вернуться",
|
||||
|
||||
"VTLANG_ENTER_EXIT": "нажмите клавишу Enter, чтобы выйти",
|
||||
"VTLANG_ENTER_REBOOT": "нажмите клавишу Enter для перезагрузки",
|
||||
"VTLANG_ENTER_CONTINUE": "нажмите клавишу Enter, чтобы продолжить",
|
||||
"VTLANG_ENTER_EXIT": "нажмите клавишу ввода, чтобы выйти",
|
||||
"VTLANG_ENTER_REBOOT": "нажмите клавишу ввода для перезагрузки",
|
||||
"VTLANG_ENTER_CONTINUE": "нажмите клавишу ввода, чтобы продолжить",
|
||||
|
||||
"VTLANG_CTRL_TEMP_SET": "Настройки временного управления",
|
||||
"VTLANG_WIN11_BYPASS_CHECK": "Обойти проверку при установке Windows 11",
|
||||
"VTLANG_WIN11_BYPASS_NRO": "Обойти требование учетной записи в Интернете при установке Windows 11",
|
||||
"VTLANG_LINUX_REMOUNT": "Смонтировать раздел Ventoy после загрузки Linux",
|
||||
"VTLANG_WIN11_BYPASS_CHECK": "Обойти проверку при установке 11-ой винды",
|
||||
"VTLANG_WIN11_BYPASS_NRO": "Обойти требование сетевой учётной записи при установке 11-ой винды",
|
||||
"VTLANG_LINUX_REMOUNT": "Смонтировать раздел Вентоя после загрузки линукса",
|
||||
"VTLANG_SECONDARY_BOOT_MENU": "Показать вторичное загрузочное меню",
|
||||
|
||||
"MENU_STR_XXX": ""
|
||||
|
@@ -4,6 +4,7 @@
|
||||
"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_RETURN_PREVIOUS": "Return to previous menu [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "Return to previous menu",
|
||||
|
||||
"VTLANG_MENU_LANG": "Menu Language Select",
|
||||
|
||||
|
@@ -3,9 +3,10 @@
|
||||
|
||||
"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_RETURN_PREVIOUS": "முந்தைய மெனுவுக்குத் திரும்பு [Esc]",
|
||||
"VTLANG_RETURN_PREVIOUS": "முந்தைய பட்டியலுக்குத் திரும்பு [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "முந்தைய பட்டியலுக்குத் திரும்பு",
|
||||
|
||||
"VTLANG_MENU_LANG": "மெனு மொழி தேர்வு",
|
||||
"VTLANG_MENU_LANG": "மொழி தேர்வு பட்டியல்",
|
||||
|
||||
"VTLANG_LB_SBOOT_WINDOWS": "விண்டோஸைத் தேடி துவக்கவும்",
|
||||
"VTLANG_LB_SBOOT_G4D": "Grub4dos ஐத் தேடி துவக்கவும்",
|
||||
@@ -42,7 +43,7 @@
|
||||
|
||||
"VTLANG_THEME_SELECT": "தீம் தேர்வு",
|
||||
|
||||
"VTLANG_UEFI_UTIL": "Ventoy UEFI Utilities",
|
||||
"VTLANG_UEFI_UTIL": "Ventoy UEFI பயன்பாடுகள்",
|
||||
"VTLANG_UTIL_SHOW_EFI_DRV": "EFI இயக்கிகளைக் காட்டு",
|
||||
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Windows BlinitializeLibrary தோல்வியைச் சரிசெய்தல்",
|
||||
|
||||
@@ -51,9 +52,9 @@
|
||||
"VTLANG_JSON_CHK_THEME": "தீம் செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
|
||||
"VTLANG_JSON_CHK_AUTOINS": "தானாக நிறுவும் செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
|
||||
"VTLANG_JSON_CHK_PERSIST": "நிலைத்தன்மை செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
|
||||
"VTLANG_JSON_CHK_MENU_ALIAS": "மெனு மாற்று செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
|
||||
"VTLANG_JSON_CHK_MENU_TIP": "மெனு முனை செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
|
||||
"VTLANG_JSON_CHK_MENU_CLASS": "மெனு வகுப்பு செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
|
||||
"VTLANG_JSON_CHK_MENU_ALIAS": "பட்டியலில் மாற்று செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
|
||||
"VTLANG_JSON_CHK_MENU_TIP": "பட்டியலில் முனை செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
|
||||
"VTLANG_JSON_CHK_MENU_CLASS": "பட்டியலில் வகுப்பு செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
|
||||
"VTLANG_JSON_CHK_INJECTION": "ஊசி செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
|
||||
"VTLANG_JSON_CHK_AUTO_MEMDISK": "ஆட்டோ மெம்டிஸ்க் செருகுநிரல் உள்ளமைவைச் சரிபார்க்கவும்",
|
||||
"VTLANG_JSON_CHK_IMG_LIST": "பட பட்டியல் செருகுநிரல் உள்ளமைவை சரிபார்க்கவும்",
|
||||
@@ -82,11 +83,11 @@
|
||||
"VTLANG_ENTER_REBOOT": "மறுதொடக்கம் செய்ய Enter விசையை அழுத்தவும்",
|
||||
"VTLANG_ENTER_CONTINUE": "தொடர Enter விசையை அழுத்தவும்",
|
||||
|
||||
"VTLANG_CTRL_TEMP_SET": "Temporary Control Settings",
|
||||
"VTLANG_WIN11_BYPASS_CHECK": "Bypass CPU/TPM/SecureBoot check when install Windows 11",
|
||||
"VTLANG_WIN11_BYPASS_NRO": "Bypass online account requirement when install Windows 11",
|
||||
"VTLANG_LINUX_REMOUNT": "Mount Ventoy partition after boot Linux",
|
||||
"VTLANG_SECONDARY_BOOT_MENU": "Show secondary boot menu",
|
||||
"VTLANG_CTRL_TEMP_SET": "தற்காலிக கட்டுப்பாட்டு அமைப்புகள்",
|
||||
"VTLANG_WIN11_BYPASS_CHECK": "விண்டோஸ் 11 ஐ நிறுவும் போது CPU/TPM/SecureBoot சரிபார்பை புறக்கணிக்கவும்",
|
||||
"VTLANG_WIN11_BYPASS_NRO": "விண்டோஸ் 11 ஐ நிறுவும் போது ஆன்லைன் கணக்கின் தேவையை புறக்கணிக்கவும்",
|
||||
"VTLANG_LINUX_REMOUNT": "லினக்ஸை துவக்கிய பிறகு Ventoy பகிர்வை ஏற்றவும்",
|
||||
"VTLANG_SECONDARY_BOOT_MENU": "இரண்டாம் நிலை துவக்க பட்டியலைக் காட்டு",
|
||||
|
||||
"MENU_STR_XXX": ""
|
||||
}
|
||||
|
@@ -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_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_PRV_NOESC": "Önceki menüye geri dön",
|
||||
|
||||
"VTLANG_MENU_LANG": "Menü Dili Seçimi",
|
||||
|
||||
|
@@ -4,6 +4,7 @@
|
||||
"VTLANG_STR_HOTKEY_LIST": "L:语言 F1:帮助 F2:本地浏览 F3:列表模式 F4:本地启动 F5:工具 F6:扩展菜单",
|
||||
"VTLANG_STR_HOTKEY_TREE": "L:语言 F1:帮助 F2:本地浏览 F3:树形模式 F4:本地启动 F5:工具 F6:扩展菜单",
|
||||
"VTLANG_RETURN_PREVIOUS": "返回上一级菜单 [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "返回上一级菜单",
|
||||
|
||||
"VTLANG_MENU_LANG": "菜单语言",
|
||||
|
||||
|
@@ -4,6 +4,7 @@
|
||||
"VTLANG_STR_HOTKEY_LIST": "L:語言 F1:說明 F2:本地瀏覽 F3:清單模式 F4:本地啟動 F5:工具 F6:擴展選單",
|
||||
"VTLANG_STR_HOTKEY_TREE": "L:語言 F1:說明 F2:本地瀏覽 F3:樹形模式 F4:本地啟動 F5:工具 F6:擴展選單",
|
||||
"VTLANG_RETURN_PREVIOUS": "返回上一級選單 [Esc]",
|
||||
"VTLANG_RETURN_PRV_NOESC": "返回上一級選單",
|
||||
|
||||
"VTLANG_MENU_LANG": "功能表語言",
|
||||
|
||||
|
@@ -12,7 +12,7 @@ submenu "$VTLANG_POWER" --class=debug_power --class=F5tool {
|
||||
}
|
||||
|
||||
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'
|
||||
sleep 1
|
||||
fwsetup
|
||||
|
Binary file not shown.
Binary file not shown.
@@ -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 "}" >> menulang.cfg
|
||||
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 "}" >> menulang.cfg
|
||||
|
||||
|
@@ -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_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_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_SECURE_BOOT":"Boot seguro",
|
||||
"STR_MENU_PART_CFG":"Configuração de Partição",
|
||||
@@ -613,7 +613,7 @@
|
||||
"STR_MENU_PART_STYLE":"Estilo de Partição",
|
||||
"STR_DISK_2TB_MBR_ERROR":"Por favor selecione GPT para discos maiores que 2TB",
|
||||
"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_REMOTE_ABNORMAL":"Erro de comunicação: remoto anormal",
|
||||
"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_MENU_OPTION":"Beállítá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_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_MENU_CLEAR":"A Ventoy eltávolítása",
|
||||
"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_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_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_FAILED":"A VTSI fájl létrehozása nem sikerült.",
|
||||
"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_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_PART_VENTOY_FS":"File System For Ventoy Partition",
|
||||
"STR_PART_FS":"File System",
|
||||
"STR_PART_CLUSTER":"Cluster Size",
|
||||
"STR_PART_CLUSTER_DEFAULT":"System Default Value",
|
||||
"STR_PART_VENTOY_FS":"Fájlrendszer a Ventoy partícióhoz",
|
||||
"STR_PART_FS":"Fájlrendszer",
|
||||
"STR_PART_CLUSTER":"Klaszter méret",
|
||||
"STR_PART_CLUSTER_DEFAULT":"Rendszer alapérték",
|
||||
"STR_DONATE":"Adományoz",
|
||||
|
||||
"STRXXX":""
|
||||
|
@@ -12,6 +12,7 @@
|
||||
|
||||
char g_ventoy_dir[MAX_PATH];
|
||||
|
||||
static BOOL g_ChromeFirst = TRUE;
|
||||
static BOOL g_running = FALSE;
|
||||
static HWND g_refresh_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);
|
||||
|
||||
for (i = 0; Browsers[i] != NULL; i++)
|
||||
{
|
||||
if (ventoy_is_file_exist("%s", Browsers[i]))
|
||||
{
|
||||
ShellExecuteA(NULL, "open", Browsers[i], url, NULL, SW_SHOW);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (g_ChromeFirst)
|
||||
{
|
||||
for (i = 0; Browsers[i] != NULL; i++)
|
||||
{
|
||||
if (ventoy_is_file_exist("%s", Browsers[i]))
|
||||
{
|
||||
ShellExecuteA(NULL, "open", Browsers[i], url, NULL, SW_SHOW);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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 i;
|
||||
int rc;
|
||||
HANDLE hMutex;
|
||||
WCHAR CurDir[MAX_PATH];
|
||||
|
||||
UNREFERENCED_PARAMETER(hPrevInstance);
|
||||
|
||||
for (i = 0; i < __argc; i++)
|
||||
{
|
||||
if (__argv[i] && _stricmp(__argv[i], "/F") == 0)
|
||||
{
|
||||
g_ChromeFirst = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DllProtect();
|
||||
|
||||
if (GetUserDefaultUILanguage() == 0x0804)
|
||||
|
Binary file not shown.
Binary file not shown.
@@ -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
|
@@ -777,10 +777,10 @@
|
||||
<script src="/static/js/jQuery-2.1.4.min.js"></script>
|
||||
<!-- jquery validate -->
|
||||
<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/vtoy.js?v=109"></script>
|
||||
<script src="/static/js/jquery.vtoy.alert.js?v=142"></script>
|
||||
<script src="/static/js/vtoy.js?v=142"></script>
|
||||
<script src="/static/js/md5.min.js"></script>
|
||||
|
||||
<!-- Bootstrap 3.3.5 -->
|
||||
|
@@ -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
|
@@ -175,6 +175,7 @@
|
||||
<td class="td_ctrl_col" id="td_title_setting">选项设置</td>
|
||||
<td>
|
||||
<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="1680x1050">1680x1050</option>
|
||||
<option title="1600x900">1600x900</option>
|
||||
|
513
vtoyjump/vtoyjump/setupmon.c
Normal file
513
vtoyjump/vtoyjump/setupmon.c
Normal 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;
|
||||
}
|
@@ -60,6 +60,23 @@ static CHAR g_prog_name[MAX_PATH];
|
||||
#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 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)
|
||||
{
|
||||
int i;
|
||||
@@ -459,13 +476,23 @@ static int IsUTF8Encode(const char *src)
|
||||
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)
|
||||
{
|
||||
int size = MultiByteToWideChar(CP_UTF8, 0, src, -1, dst, 0);
|
||||
return MultiByteToWideChar(CP_UTF8, 0, src, -1, dst, size + 1);
|
||||
}
|
||||
|
||||
static BOOL IsDirExist(const char *Fmt, ...)
|
||||
BOOL IsDirExist(const char *Fmt, ...)
|
||||
{
|
||||
va_list Arg;
|
||||
DWORD Attr;
|
||||
@@ -497,7 +524,7 @@ static BOOL IsDirExist(const char *Fmt, ...)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static BOOL IsFileExist(const char *Fmt, ...)
|
||||
BOOL IsFileExist(const char *Fmt, ...)
|
||||
{
|
||||
va_list Arg;
|
||||
HANDLE hFile;
|
||||
@@ -889,7 +916,7 @@ static BOOL Is2K10PE(void)
|
||||
return bRet;
|
||||
}
|
||||
|
||||
static CHAR GetIMDiskMountLogicalDrive(void)
|
||||
static CHAR GetIMDiskMountLogicalDrive(const char *suffix)
|
||||
{
|
||||
CHAR Letter = 'Y';
|
||||
DWORD Drives;
|
||||
@@ -902,6 +929,12 @@ static CHAR GetIMDiskMountLogicalDrive(void)
|
||||
return 'M';
|
||||
}
|
||||
|
||||
//fixed use Z as mountpoint for Lenovo Product Recovery
|
||||
if (strcmp(suffix, "VTLRI") == 0)
|
||||
{
|
||||
return 'Z';
|
||||
}
|
||||
|
||||
Drives = GetLogicalDrives();
|
||||
Log("Drives=0x%x", Drives);
|
||||
|
||||
@@ -1046,17 +1079,18 @@ End:
|
||||
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 Cmdline[512];
|
||||
WCHAR CmdlineW[512];
|
||||
PROCESS_INFORMATION Pi;
|
||||
|
||||
Log("VentoyRunImdisk <%s> <%s>", IsoPath, imdiskexe);
|
||||
Log("VentoyRunImdisk <%s> <%s> <%s> <%s>", suffix, IsoPath, imdiskexe, opt);
|
||||
|
||||
Letter = GetIMDiskMountLogicalDrive();
|
||||
sprintf_s(Cmdline, sizeof(Cmdline), "%s -a -o ro -f \"%s\" -m %C:", imdiskexe, IsoPath, Letter);
|
||||
Letter = GetIMDiskMountLogicalDrive(suffix);
|
||||
|
||||
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);
|
||||
|
||||
if (IsUTF8Encode(IsoPath))
|
||||
@@ -1099,7 +1133,7 @@ int VentoyMountISOByImdisk(const char *IsoPath, DWORD PhyDrive)
|
||||
|
||||
if (0 == VentoyCopyImdisk(PhyDrive, ImPath))
|
||||
{
|
||||
VentoyRunImdisk(IsoPath, ImPath);
|
||||
VentoyRunImdisk("iso", IsoPath, ImPath, "ro");
|
||||
rc = 0;
|
||||
}
|
||||
|
||||
@@ -2022,36 +2056,19 @@ static int ProcessUnattendedInstallation(const char *script, DWORD PhyDrive)
|
||||
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 dwSize;
|
||||
DWORD dwValue = 1;
|
||||
UINT VerLen = 0;
|
||||
CHAR *Buffer = NULL;
|
||||
VS_FIXEDFILEINFO* VerInfo = NULL;
|
||||
CHAR CheckFile[MAX_PATH];
|
||||
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) ||
|
||||
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);
|
||||
dwSize = GetFileVersionInfoSizeA(FilePath, &dwHandle);
|
||||
if (0 == dwSize)
|
||||
{
|
||||
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);
|
||||
if (!Buffer)
|
||||
{
|
||||
Log("malloc failed %u", dwSize);
|
||||
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);
|
||||
goto End;
|
||||
@@ -2086,18 +2104,117 @@ static int Windows11Bypass(const char *isofile, const char MntLetter, UINT8 Chec
|
||||
Major = 11;
|
||||
}
|
||||
|
||||
if (Major != 11)
|
||||
if (pMajor)
|
||||
{
|
||||
Log("This is not Windows 11, not need to bypass.", Major);
|
||||
goto End;
|
||||
*pMajor = Major;
|
||||
}
|
||||
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 hSubKey = NULL;
|
||||
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)
|
||||
{
|
||||
@@ -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));
|
||||
Log("Create BypassNRO registry %s %u", (Status == ERROR_SUCCESS) ? "SUCCESS" : "FAILED", Status);
|
||||
|
||||
SetupMonNroStart(isofile);
|
||||
}
|
||||
|
||||
|
||||
Ret = 0;
|
||||
|
||||
End:
|
||||
if (Buffer)
|
||||
{
|
||||
free(Buffer);
|
||||
}
|
||||
|
||||
return Ret;
|
||||
}
|
||||
@@ -2190,6 +2305,90 @@ static BOOL CheckVentoyDisk(DWORD DiskNum)
|
||||
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)
|
||||
{
|
||||
@@ -2209,6 +2408,7 @@ static int VentoyHook(ventoy_os_param *param)
|
||||
DISK_EXTENT VtoyDiskExtent;
|
||||
UINT8 UUID[16];
|
||||
CHAR IsoPath[MAX_PATH];
|
||||
CHAR VTLRIPath[MAX_PATH];
|
||||
|
||||
Log("VentoyHook Path:<%s>", param->vtoy_img_path);
|
||||
|
||||
@@ -2347,8 +2547,17 @@ static int VentoyHook(ventoy_os_param *param)
|
||||
|
||||
Drives = GetLogicalDrives();
|
||||
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();
|
||||
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;
|
||||
}
|
||||
|
||||
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 i;
|
||||
@@ -2761,6 +3016,11 @@ int main(int argc, char **argv)
|
||||
|
||||
Log("######## VentoyJump %dbit ##########", g_system_bit);
|
||||
|
||||
if (argc > 1 && strcmp(argv[1], "VTLRI_SRV") == 0)
|
||||
{
|
||||
return VTLRI_ServiceMain(argc, argv);
|
||||
}
|
||||
|
||||
GetCurrentDirectoryA(sizeof(CurDir), CurDir);
|
||||
Log("Current directory is <%s>", CurDir);
|
||||
|
||||
|
@@ -195,5 +195,9 @@ int unxz(unsigned char *in, int in_size,
|
||||
unsigned char *out, int *in_used,
|
||||
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
|
||||
|
@@ -168,6 +168,7 @@
|
||||
<ClCompile Include="fat_io_lib\fat_string.c" />
|
||||
<ClCompile Include="fat_io_lib\fat_table.c" />
|
||||
<ClCompile Include="fat_io_lib\fat_write.c" />
|
||||
<ClCompile Include="setupmon.c" />
|
||||
<ClCompile Include="vtoyjump.c" />
|
||||
<ClCompile Include="xz-embedded-20130513\linux\lib\decompress_unxz.c" />
|
||||
</ItemGroup>
|
||||
|
@@ -45,6 +45,9 @@
|
||||
<ClCompile Include="xz-embedded-20130513\linux\lib\decompress_unxz.c">
|
||||
<Filter>源文件</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="setupmon.c">
|
||||
<Filter>源文件</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="vtoyjump.h">
|
||||
|
Reference in New Issue
Block a user