Improve for UEFI boot Windows/WinPE resolution issue fix.
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled

This commit is contained in:
longpanda
2026-04-14 15:38:06 +08:00
parent c1c27cd30c
commit 3c0df07b92
38 changed files with 348 additions and 126 deletions

View File

@@ -1263,9 +1263,9 @@ EFI_STATUS EFIAPI VentoyEfiMain
return Status;
}
if (g_os_param_reserved[11] == 1)
if (g_os_param_reserved[11])
{
ventoy_lock_max_res();
ventoy_lock_res(g_os_param_reserved[11]);
}
ventoy_disable_ex_filesystem();
@@ -1346,9 +1346,9 @@ EFI_STATUS EFIAPI VentoyEfiMain
ventoy_enable_ex_filesystem();
if (g_os_param_reserved[11] == 1)
if (g_os_param_reserved[11])
{
ventoy_unlock_max_res();
ventoy_unlock_res();
}
return EFI_SUCCESS;

View File

@@ -428,8 +428,8 @@ EFI_STATUS ventoy_hook_1st_cdrom_start(VOID);
EFI_STATUS ventoy_hook_1st_cdrom_stop(VOID);
EFI_STATUS ventoy_disable_ex_filesystem(VOID);
EFI_STATUS ventoy_enable_ex_filesystem(VOID);
EFI_STATUS ventoy_lock_max_res(VOID);
EFI_STATUS ventoy_unlock_max_res(VOID);
EFI_STATUS ventoy_lock_res(UINT8 LockType);
EFI_STATUS ventoy_unlock_res(VOID);
#endif

View File

@@ -1820,13 +1820,15 @@ STATIC EFI_STATUS EFIAPI ventoy_set_mode
return EFI_SUCCESS;
}
EFI_STATUS ventoy_lock_max_res(VOID)
EFI_STATUS ventoy_lock_res(UINT8 LockType)
{
UINT32 i = 0;
UINT32 x = 0;
UINT32 y = 0;
UINT32 SelMode = 0;
UINT32 CurMode = 0;
UINT32 Highest = 0;
UINT32 M1024_768 = MAX_UINT32;
UINTN Size;
EFI_STATUS rc;
EFI_GRAPHICS_OUTPUT_PROTOCOL *gop = NULL;
@@ -1838,6 +1840,12 @@ EFI_STATUS ventoy_lock_max_res(VOID)
return EFI_SUCCESS;
}
/* 1: Highest 2: 1024x768 */
if (LockType == 0 || LockType > 2)
{
return EFI_SUCCESS;
}
rc = gBS->LocateProtocol(&gEfiGraphicsOutputProtocolGuid, NULL, (void **)&gop);
if (rc != EFI_SUCCESS)
{
@@ -1852,6 +1860,11 @@ EFI_STATUS ventoy_lock_max_res(VOID)
/* Get mode information */
if (gop->QueryMode(gop, i, &Size, &info) == EFI_SUCCESS)
{
if (info->HorizontalResolution == 1024 && info->VerticalResolution == 768)
{
M1024_768 = i;
}
if (x < info->HorizontalResolution ||
(x == info->HorizontalResolution && y < info->VerticalResolution))
{
@@ -1862,12 +1875,31 @@ EFI_STATUS ventoy_lock_max_res(VOID)
}
}
if (Highest != CurMode)
if (LockType == 1)
{
gop->SetMode(gop, Highest);
SelMode = Highest;
}
else
{
if (M1024_768 == MAX_UINT32)
{
SelMode = Highest;
}
else
{
SelMode = M1024_768;
x = 1024;
y = 768;
}
}
debug("Lock resolution to Mode:%d %d x %d", Highest, x, y);
if (SelMode != CurMode)
{
gop->SetMode(gop, SelMode);
}
debug("Lock resolution to Mode:%d %d x %d", SelMode, x, y);
g_org_mode_num = CurMode;
g_org_set_mode = gop->SetMode;
@@ -1876,7 +1908,7 @@ EFI_STATUS ventoy_lock_max_res(VOID)
return EFI_SUCCESS;
}
EFI_STATUS ventoy_unlock_max_res(VOID)
EFI_STATUS ventoy_unlock_res(VOID)
{
EFI_STATUS rc;
EFI_GRAPHICS_OUTPUT_PROTOCOL *gop = NULL;

View File

@@ -438,11 +438,11 @@ static void menu_set_chosen_tip(grub_menu_t menu, int entry)
if (g_ventoy_theme_path[0])
{
grub_env_set("theme", g_ventoy_theme_path);
grub_env_set("theme", g_ventoy_theme_path);
}
g_ventoy_tip_msg1 = g_ventoy_tip_msg2 = NULL;
if (e && e->id && grub_strncmp(e->id, "VID_", 4) == 0)
if (e && e->id && grub_strncmp(e->id, "VID_", 4) == 0)
{
g_ventoy_theme_path[0] = 0;
img = (img_info *)(void *)grub_strtoul(e->id + 4, NULL, 16);
@@ -480,7 +480,7 @@ static void
menu_set_chosen_entry (grub_menu_t menu, int entry)
{
struct grub_menu_viewer *cur;
menu_set_chosen_tip(menu, entry);
for (cur = viewers; cur; cur = cur->next)
cur->set_chosen_entry (entry, cur->data);
@@ -972,7 +972,7 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot)
;
menu_fini ();
goto refresh;
}
}
}
break;
case (GRUB_TERM_CTRL | 'd'):
@@ -981,7 +981,7 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot)
{
menu_fini ();
g_ventoy_memdisk_mode = 1 - g_ventoy_memdisk_mode;
g_ventoy_menu_refresh = 1;
g_ventoy_menu_refresh = 1;
goto refresh;
}
break;
@@ -992,7 +992,7 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot)
menu_fini ();
g_ventoy_iso_raw = 1 - g_ventoy_iso_raw;
g_ventoy_menu_refresh = 1;
goto refresh;
goto refresh;
}
break;
case (GRUB_TERM_CTRL | 'r'):
@@ -1001,10 +1001,10 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot)
{
menu_fini ();
g_ventoy_grub2_mode = 1 - g_ventoy_grub2_mode;
g_ventoy_menu_refresh = 1;
g_ventoy_menu_refresh = 1;
goto refresh;
}
break;
break;
case (GRUB_TERM_CTRL | 'w'):
case 'w':
if (0 == g_ventoy_secondary_menu_on)
@@ -1039,7 +1039,7 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot)
case 'm':
{
if (0 == g_ventoy_secondary_menu_on)
{
{
if (g_ventoy_cur_img_path)
{
grub_env_set("VTOY_CHKSUM_FILE_PATH", g_ventoy_cur_img_path);
@@ -1128,16 +1128,17 @@ static struct grub_menu_execute_callback execution_callback =
static grub_err_t
show_menu (grub_menu_t menu, int nested, int autobooted)
{
const char *def;
const char *def;
def = grub_env_get("VTOY_DEFAULT_IMAGE");
while (1)
{
int ndown;
char *pos = NULL;
int boot_entry;
grub_menu_entry_t e;
int auto_boot;
boot_entry = run_menu (menu, nested, &auto_boot);
if (boot_entry < 0)
break;
@@ -1149,7 +1150,7 @@ show_menu (grub_menu_t menu, int nested, int autobooted)
if (autobooted == 0 && auto_boot == 0) {
g_ventoy_last_entry = boot_entry;
if (g_ventoy_menu_esc)
break;
break;
}
if (autobooted == 0 && g_ventoy_menu_esc && auto_boot) {
@@ -1162,7 +1163,7 @@ show_menu (grub_menu_t menu, int nested, int autobooted)
continue; /* Menu is empty. */
if (2 == e->argc && e->args && e->args[1] && grub_strncmp(e->args[1], "VTOY_RET", 8) == 0)
break;
break;
grub_cls ();
@@ -1175,16 +1176,29 @@ show_menu (grub_menu_t menu, int nested, int autobooted)
break;
if (2 == e->argc && e->args && e->args[1] && grub_strncmp(e->args[1], "VTOY_RUN_RET", 12) == 0)
break;
else if (2 == e->argc && e->args && e->args[1] && grub_strncmp(e->args[1], "VTOY_RUN_SET", 12) == 0) {
ndown = (int)grub_strtol(e->args[1] + 12, NULL, 10);
break;
else if (2 == e->argc && e->args && e->args[1] && grub_strncmp(e->args[1], "VTOY_RUN_SET_", 13) == 0) {
pos = NULL;
ndown = (int)grub_strtol(e->args[1] + 13, &pos, 10);
while (ndown > 0)
{
ventoy_menu_push_key(GRUB_TERM_KEY_DOWN);
ndown--;
}
ventoy_menu_push_key('\n');
break;
if (pos && *pos == '_')
{
ndown = (int)grub_strtol(pos + 1, NULL, 10);
while (ndown > 0)
{
ventoy_menu_push_key(GRUB_TERM_KEY_DOWN);
ndown--;
}
}
break;
}
}

View File

@@ -431,12 +431,12 @@ int ventoy_global_var_init(void)
static ctrl_var_cfg g_ctrl_vars[] =
{
{ "VTOY_WIN11_BYPASS_CHECK", 1 },
{ "VTOY_WIN11_BYPASS_NRO", 1 },
{ "VTOY_LINUX_REMOUNT", 0 },
{ "VTOY_SECONDARY_BOOT_MENU", 1 },
{ "VTOY_WIN_UEFI_MAX_RES", 1 },
{ NULL, 0 }
{ "VTOY_WIN11_BYPASS_CHECK", "1" },
{ "VTOY_WIN11_BYPASS_NRO", "1" },
{ "VTOY_LINUX_REMOUNT", "0" },
{ "VTOY_SECONDARY_BOOT_MENU", "1" },
{ "VTOY_WIN_UEFI_RES_LOCK", "1" },
{ NULL, "" }
};
static const char * ventoy_ctrl_var_read_hook(struct grub_env_var *var, const char *val)
@@ -447,7 +447,7 @@ static const char * ventoy_ctrl_var_read_hook(struct grub_env_var *var, const ch
{
if (grub_strcmp(g_ctrl_vars[i].name, var->name) == 0)
{
return g_ctrl_vars[i].value ? "1" : "0";
return g_ctrl_vars[i].szval;
}
}
@@ -462,14 +462,14 @@ static char * ventoy_ctrl_var_write_hook(struct grub_env_var *var, const char *v
{
if (grub_strcmp(g_ctrl_vars[i].name, var->name) == 0)
{
if (val && val[0] == '1' && val[1] == 0)
if (val && grub_isdigit(val[0]) && val[1] == 0)
{
g_ctrl_vars[i].value = 1;
return grub_strdup("1");
g_ctrl_vars[i].szval[0] = val[0];
return grub_strdup(val);
}
else
{
g_ctrl_vars[i].value = 0;
g_ctrl_vars[i].szval[0] = '0';
return grub_strdup("0");
}
}
@@ -480,12 +480,13 @@ static char * ventoy_ctrl_var_write_hook(struct grub_env_var *var, const char *v
int ventoy_ctrl_var_init(void)
{
int i;
ctrl_var_cfg *cfg = g_ctrl_vars;
for (i = 0; g_ctrl_vars[i].name; i++)
while (cfg->name)
{
ventoy_env_export(g_ctrl_vars[i].name, g_ctrl_vars[i].value ? "1" : "0");
grub_register_variable_hook(g_ctrl_vars[i].name, ventoy_ctrl_var_read_hook, ventoy_ctrl_var_write_hook);
ventoy_env_export(cfg->name, cfg->szval);
grub_register_variable_hook(cfg->name, ventoy_ctrl_var_read_hook, ventoy_ctrl_var_write_hook);
cfg++;
}
return 0;

View File

@@ -3246,13 +3246,20 @@ void ventoy_fill_os_param(grub_file_t file, ventoy_os_param *param)
grub_memcpy(param->vtoy_reserved + 7, g_ventoy_part_info->MBR.BootCode + 0x1b8, 4);
/* Windows UEFI force highest resolution */
/* Windows UEFI force resolution lock */
if (g_ventoy_chain_type == 1) /* Windows */
{
val = ventoy_get_env("VTOY_WIN_UEFI_MAX_RES");
if (val && val[0] == '1' && val[1] == 0)
val = ventoy_get_env("VTOY_WIN_UEFI_RES_LOCK");
if (val && val[1] == 0)
{
param->vtoy_reserved[11] = 1;
if (val[0] == '1')
{
param->vtoy_reserved[11] = 1;
}
else if (val[0] == '2')
{
param->vtoy_reserved[11] = 2;
}
}
}

View File

@@ -7,12 +7,12 @@
* 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/>.
*
@@ -142,7 +142,7 @@ typedef enum VTOY_FILE_FLT
VTOY_FILE_FLT_IMG, /* .img */
VTOY_FILE_FLT_VHD, /* .vhd(x) */
VTOY_FILE_FLT_VTOY, /* .vtoy */
VTOY_FILE_FLT_BUTT
}VTOY_FILE_FLT;
@@ -160,7 +160,7 @@ typedef struct cmd_para
grub_extcmd_func_t func;
grub_command_flags_t flags;
const struct grub_arg_option *parser;
const char *summary;
const char *description;
@@ -171,7 +171,7 @@ typedef struct cmd_para
#define ventoy_align(value, align) (((value) + ((align) - 1)) & (~((align) - 1)))
#pragma pack(1)
typedef struct cpio_newc_header
typedef struct cpio_newc_header
{
char c_magic[6];
char c_ino[8];
@@ -206,7 +206,7 @@ typedef struct ventoy_patch_vhd
grub_uint8_t part_offset_or_guid[16];
grub_uint32_t reserved1;
grub_uint32_t part_type;
grub_uint8_t disk_signature_or_guid[16];
grub_uint8_t disk_signature_or_guid[16];
grub_uint8_t reserved2[16];
grub_uint8_t vhd_file_path[1];
}ventoy_patch_vhd;
@@ -284,7 +284,7 @@ typedef struct img_info
const char *tip2;
const char *class;
const char *menu_prefix;
int id;
int type;
int plugin_list_index;
@@ -313,8 +313,8 @@ typedef struct img_iterator_node
struct img_iterator_node *parent;
struct img_iterator_node *firstchild;
void *firstiso;
void *firstiso;
}img_iterator_node;
@@ -328,7 +328,7 @@ typedef struct initrd_info
grub_uint8_t iso_type; // 0: iso9660 1:udf
grub_uint32_t udf_start_block;
grub_uint64_t override_offset;
grub_uint32_t override_length;
char override_data[32];
@@ -397,7 +397,7 @@ void ventoy_debug(const char *fmt, ...);
#pragma pack(1)
/* A WIM resource header */
typedef struct wim_resource_header
typedef struct wim_resource_header
{
grub_uint64_t size_in_wim:56; /* Compressed length */
grub_uint64_t flags:8; /* flags */
@@ -409,7 +409,7 @@ typedef struct wim_resource_header
#define WIM_RESHDR_ZLEN_MASK 0x00ffffffffffffffULL
/* WIM resource header flags */
typedef enum wim_resource_header_flags
typedef enum wim_resource_header_flags
{
WIM_RESHDR_METADATA = ( 0x02ULL << 56 ), /* Resource contains metadata */
WIM_RESHDR_COMPRESSED = ( 0x04ULL << 56 ), /* Resource is compressed */
@@ -419,7 +419,7 @@ typedef enum wim_resource_header_flags
#define WIM_HEAD_SIGNATURE "MSWIM\0\0"
/* WIM header */
typedef struct wim_header
typedef struct wim_header
{
grub_uint8_t signature[8]; /* Signature */
grub_uint32_t header_len; /* Header length */
@@ -439,21 +439,21 @@ typedef struct wim_header
} wim_header;
/* WIM header flags */
typedef enum wim_header_flags
typedef enum wim_header_flags
{
WIM_HDR_XPRESS = 0x00020000, /* WIM uses Xpress compresson */
WIM_HDR_LZX = 0x00040000, /* WIM uses LZX compression */
}wim_header_flags;
/* A WIM file hash */
typedef struct wim_hash
typedef struct wim_hash
{
/* SHA-1 hash */
grub_uint8_t sha1[20];
}wim_hash;
/* A WIM lookup table entry */
typedef struct wim_lookup_entry
typedef struct wim_lookup_entry
{
wim_resource_header resource; /* Resource header */
grub_uint16_t part; /* Part number */
@@ -465,19 +465,19 @@ typedef struct wim_lookup_entry
#define WIM_CHUNK_LEN 32768
/* A WIM chunk buffer */
typedef struct wim_chunk_buffer
typedef struct wim_chunk_buffer
{
grub_uint8_t data[WIM_CHUNK_LEN]; /*Data */
}wim_chunk_buffer;
/* Security data */
typedef struct wim_security_header
typedef struct wim_security_header
{
grub_uint32_t len; /* Length */
grub_uint32_t count; /* Number of entries */
}wim_security_header;
typedef struct wim_stream_entry
typedef struct wim_stream_entry
{
grub_uint64_t len;
grub_uint64_t unused1;
@@ -487,7 +487,7 @@ typedef struct wim_stream_entry
}wim_stream_entry;
/* Directory entry */
typedef struct wim_directory_entry
typedef struct wim_directory_entry
{
grub_uint64_t len; /* Length */
grub_uint32_t attributes; /* Attributes */
@@ -590,7 +590,7 @@ typedef struct _VTOY_JSON
struct _VTOY_JSON *pstChild;
JSON_TYPE enDataType;
union
union
{
char *pcStrVal;
int iNumVal;
@@ -702,7 +702,7 @@ int vtoy_json_parse_value
(
char *pcNewStart,
char *pcRawStart,
VTOY_JSON *pstJson,
VTOY_JSON *pstJson,
const char *pcData,
const char **ppcEnd
);
@@ -718,51 +718,51 @@ int vtoy_json_scan_parse
int vtoy_json_scan_array
(
VTOY_JSON *pstJson,
const char *szKey,
VTOY_JSON *pstJson,
const char *szKey,
VTOY_JSON **ppstArrayItem
);
int vtoy_json_scan_array_ex
(
VTOY_JSON *pstJson,
const char *szKey,
VTOY_JSON *pstJson,
const char *szKey,
VTOY_JSON **ppstArrayItem
);
int vtoy_json_scan_object
(
VTOY_JSON *pstJson,
const char *szKey,
VTOY_JSON *pstJson,
const char *szKey,
VTOY_JSON **ppstObjectItem
);
int vtoy_json_get_int
(
VTOY_JSON *pstJson,
const char *szKey,
VTOY_JSON *pstJson,
const char *szKey,
int *piValue
);
int vtoy_json_get_uint
(
VTOY_JSON *pstJson,
const char *szKey,
VTOY_JSON *pstJson,
const char *szKey,
grub_uint32_t *puiValue
);
int vtoy_json_get_uint64
(
VTOY_JSON *pstJson,
const char *szKey,
VTOY_JSON *pstJson,
const char *szKey,
grub_uint64_t *pui64Value
);
int vtoy_json_get_bool
(
VTOY_JSON *pstJson,
const char *szKey,
const char *szKey,
grub_uint8_t *pbValue
);
int vtoy_json_get_string
(
VTOY_JSON *pstJson,
const char *szKey,
VTOY_JSON *pstJson,
const char *szKey,
grub_uint32_t uiBufLen,
char *pcBuf
);
@@ -784,7 +784,7 @@ static inline int ventoy_isspace (int c)
static inline int ventoy_is_word_end(int c)
{
return (c == 0 || c == ',' || ventoy_isspace(c));
return (c == 0 || c == ',' || ventoy_isspace(c));
}
#pragma pack(1)
@@ -956,7 +956,7 @@ typedef struct persistence_config
int cursel;
int backendnum;
file_fullpath *backendpath;
struct persistence_config *next;
}persistence_config;
@@ -1296,7 +1296,7 @@ typedef struct global_var_cfg
typedef struct ctrl_var_cfg
{
const char *name;
int value;
char szval[2];
}ctrl_var_cfg;
#define vtoy_check_goto_out(p) if (!p) goto out

View File

@@ -4,7 +4,7 @@
#
submenu "$VTLANG_CTRL_TEMP_SET" --class=debug_temp_set --class=F5tool {
menuentry "[ $VTOY_WIN11_BYPASS_CHECK ] $VTLANG_WIN11_BYPASS_CHECK" --class=debug_temp_win11_bypass --class=debug_temp_set --class=F5tool \
VTOY_RUN_SET0 {
VTOY_RUN_SET_0_0 {
if [ "$VTOY_WIN11_BYPASS_CHECK" = "0" ]; then
set VTOY_WIN11_BYPASS_CHECK=1
else
@@ -13,7 +13,7 @@ submenu "$VTLANG_CTRL_TEMP_SET" --class=debug_temp_set --class=F5tool {
}
menuentry "[ $VTOY_WIN11_BYPASS_NRO ] $VTLANG_WIN11_BYPASS_NRO" --class=debug_temp_win11_nro --class=debug_temp_set --class=F5tool \
VTOY_RUN_SET1 {
VTOY_RUN_SET_1_0 {
if [ "$VTOY_WIN11_BYPASS_NRO" = "0" ]; then
set VTOY_WIN11_BYPASS_NRO=1
else
@@ -22,22 +22,13 @@ submenu "$VTLANG_CTRL_TEMP_SET" --class=debug_temp_set --class=F5tool {
}
menuentry "[ $VTOY_SECONDARY_BOOT_MENU ] $VTLANG_SECONDARY_BOOT_MENU" --class=debug_temp_second_menu --class=debug_temp_set --class=F5tool \
VTOY_RUN_SET2 {
VTOY_RUN_SET_2_0 {
if [ "$VTOY_SECONDARY_BOOT_MENU" = "0" ]; then
set VTOY_SECONDARY_BOOT_MENU=1
else
set VTOY_SECONDARY_BOOT_MENU=0
fi
}
menuentry "[ $VTOY_WIN_UEFI_MAX_RES ] $VTLANG_WIN_UEFI_MAX_RES" --class=debug_temp_win_uefi_res --class=debug_temp_set --class=F5tool \
VTOY_RUN_SET3 {
if [ "$VTOY_WIN_UEFI_MAX_RES" = "0" ]; then
set VTOY_WIN_UEFI_MAX_RES=1
else
set VTOY_WIN_UEFI_MAX_RES=0
fi
}
}
menuentry "$VTLANG_RETURN_PREVIOUS" --class=vtoyret VTOY_RET {
echo "Return ..."
@@ -45,6 +36,36 @@ submenu "$VTLANG_CTRL_TEMP_SET" --class=debug_temp_set --class=F5tool {
}
if [ "$grub_platform" != "pc" ]; then
submenu "$VTLANG_WIN_UEFI_RES_LOCK" --class=debug_uefi_res_lock --class=F5tool {
set vtActive0="[ ]"
set vtActive1="[ ]"
set vtActive2="[ ]"
if [ "$VTOY_WIN_UEFI_RES_LOCK" = "0" ]; then
set vtActive0="[*]"
elif [ "$VTOY_WIN_UEFI_RES_LOCK" = "1" ]; then
set vtActive1="[*]"
elif [ "$VTOY_WIN_UEFI_RES_LOCK" = "2" ]; then
set vtActive2="[*]"
fi
menuentry "$vtActive0 $VTLANG_UEFI_RES_LOCK_NONE" --class=debug_uefi_res_lock0 --class=F5tool VTOY_RUN_SET_0_1 {
set VTOY_WIN_UEFI_RES_LOCK=0
}
menuentry "$vtActive1 $VTLANG_UEFI_RES_LOCK_MAX" --class=debug_uefi_res_lock1 --class=F5tool VTOY_RUN_SET_1_1 {
set VTOY_WIN_UEFI_RES_LOCK=1
}
menuentry "$vtActive2 $VTLANG_UEFI_RES_LOCK_1024_768" --class=debug_uefi_res_lock2 --class=F5tool VTOY_RUN_SET_2_1 {
set VTOY_WIN_UEFI_RES_LOCK=2
}
menuentry "$VTLANG_RETURN_PREVIOUS" --class=vtoyret VTOY_RET {
echo "Return ..."
}
}
fi
submenu "$VTLANG_MENU_LANG" --class=debug_menu_lang --class=F5tool {
source $prefix/menulang.cfg
}

View File

@@ -88,6 +88,10 @@
"VTLANG_WIN11_BYPASS_NRO": "تجاوز متطلبات الحساب عبر الإنترنت عند تثبيت Windows 11",
"VTLANG_LINUX_REMOUNT": "ضم قسم Ventoy بعد إقلاع Linux",
"VTLANG_SECONDARY_BOOT_MENU": "اظهر قائمة الإقلاع الثانوية",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Windows 11 ইনস্টল করার সময় অনলাইন অ্যাকাউন্টের প্রয়োজন বাইপাস করুন",
"VTLANG_LINUX_REMOUNT": "লিনাক্স বুটের পরে ভেন্টয় পার্টিশনটি মাউন্ট করুন",
"VTLANG_SECONDARY_BOOT_MENU": "গৌণ বুট মেনু দেখান",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Obejít požadování online účtu při instalaci Windows 11",
"VTLANG_LINUX_REMOUNT": "Připojit Ventoy oddíl po spuštění Linuxu",
"VTLANG_SECONDARY_BOOT_MENU": "Zobrazit druhou spouštěcí nabídku",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Umgehen Sie die Online-Kontoanforderung bei der Installation von Windows 11",
"VTLANG_LINUX_REMOUNT": "Mounten Sie die Ventoy-Partition nach dem Booten von Linux",
"VTLANG_SECONDARY_BOOT_MENU": "Sekundäres Bootmenü anzeigen",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Παράκαμψη της απαίτησης online λογαριασμού κατά την εγκατάσταση των Windows 11",
"VTLANG_LINUX_REMOUNT": "Προσάρτηση διαμερίσματος Ventoy μετά την εκκίνηση του Linux",
"VTLANG_SECONDARY_BOOT_MENU": "Εμφάνιση δευτερεύοντος μενού εκκίνησης",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -87,7 +87,11 @@
"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_SECONDARY_BOOT_MENU": "Show secondary boot menu",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,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",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "دور زدن نیاز به حساب کاربری آنلاین هنگام نصب ویندوز 11",
"VTLANG_LINUX_REMOUNT": "اتصال پارتیشن Ventoy بعد از بوت لینوکس",
"VTLANG_SECONDARY_BOOT_MENU": "نمایش منوی بوت ثانویه",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Contourner l'exigence de compte en ligne lors de l'installation de Windows 11",
"VTLANG_LINUX_REMOUNT": "Monter la partition Ventoy après le démarrage de Linux",
"VTLANG_SECONDARY_BOOT_MENU": "Afficher le menu de démarrage secondaire",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "विंडोज 11 स्थापित करते समय ऑनलाइन खाते की आवश्यकता बाईपास",
"VTLANG_LINUX_REMOUNT": "लिनक्स बूट के बाद वेंटॉय विभाजन को माउंट करें",
"VTLANG_SECONDARY_BOOT_MENU": "द्वितीयक बूट मेनू दिखाएं",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,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_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Internetes fiók követelményének megkerülése Windows 11 telepítésekor",
"VTLANG_LINUX_REMOUNT": "Ventoy partíció csatolása a Linux indítása után",
"VTLANG_SECONDARY_BOOT_MENU": "Másodlagos indítási menü megjelenítése",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Melewati persyaratan akun online ketika memasang Windows 11",
"VTLANG_LINUX_REMOUNT": "Memuat partisi Ventoy setelah boot ke Linux",
"VTLANG_SECONDARY_BOOT_MENU": "Tampilkan menu boot sekunder",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Durante l'installazione di Windows 11 bypassa il requisito di un account online ",
"VTLANG_LINUX_REMOUNT": "Dopo l'avvio di Linux monta la partizione Ventoy ",
"VTLANG_SECONDARY_BOOT_MENU": "Visualizza menu di avvio secondario",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,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_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,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_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Windows 11 설치 시 온라인 계정 요구 사항 무시",
"VTLANG_LINUX_REMOUNT": "Linux 부팅 후 Ventoy 파티션 마운트",
"VTLANG_SECONDARY_BOOT_MENU": "보조 부팅 메뉴 표시",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,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_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Pominięcie wymogu posiadania konta online podczas instalacji systemu Windows 11",
"VTLANG_LINUX_REMOUNT": "Zamontuj partycję Ventoy po starcie Linuksa",
"VTLANG_SECONDARY_BOOT_MENU": "Pokaż dodatkowe menu startowe",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Ignorar o requerimento de conta online quanto instalar o Windows 11",
"VTLANG_LINUX_REMOUNT": "Montar a partição do Ventoy após iniciar o Linux",
"VTLANG_SECONDARY_BOOT_MENU": "Mostrar o menu secundário da inicialização",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,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",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Обойти требование сетевой учётной записи при установке Windows 11",
"VTLANG_LINUX_REMOUNT": "Смонтировать раздел Ventoy после загрузки Linux",
"VTLANG_SECONDARY_BOOT_MENU": "Показать вторичное загрузочное меню",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Obid zahteve po spletnem računu pri namestitvi sistema Windows 11",
"VTLANG_LINUX_REMOUNT": "Priklopi Ventoy particijo po zagonu Linuxa",
"VTLANG_SECONDARY_BOOT_MENU": "Prikaz sekundarnega zagonskega menija",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,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_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "விண்டோஸ் 11 ஐ நிறுவும் போது ஆன்லைன் கணக்கின் தேவையை புறக்கணிக்கவும்",
"VTLANG_LINUX_REMOUNT": "லினக்ஸை துவக்கிய பிறகு Ventoy பகிர்வை ஏற்றவும்",
"VTLANG_SECONDARY_BOOT_MENU": "இரண்டாம் நிலை துவக்க பட்டியலைக் காட்டு",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Windows11'i yüklerken, çevrimiçi hesap gereksinimini(OOBE) atla",
"VTLANG_LINUX_REMOUNT": "Linux sistemi önyükledikten sonra, Ventoy bölümünü bağla",
"VTLANG_SECONDARY_BOOT_MENU": "İkincil önyükleme menüsünü göster",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Обійти вимогу онлайн-аккаунту під час інсталяції Windows 11",
"VTLANG_LINUX_REMOUNT": "Монтувати розділ Ventoy після завантаження Linux",
"VTLANG_SECONDARY_BOOT_MENU": "Показувати вторинне меню завантаження",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "Bỏ qua yêu cầu tài khoản trực tuyến khi cài đặt Windows 11",
"VTLANG_LINUX_REMOUNT": "Gắn phân vùng Ventoy sau khi khởi động GNU/Linux",
"VTLANG_SECONDARY_BOOT_MENU": "Hiện menu khởi động thứ cấp`",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,10 @@
"VTLANG_WIN11_BYPASS_NRO": "安装 Windows 11 时绕过在线账户的要求",
"VTLANG_LINUX_REMOUNT": "启动 Linux 系统后挂载 Ventoy 分区",
"VTLANG_SECONDARY_BOOT_MENU": "显示二级启动菜单",
"VTLANG_WIN_UEFI_RES_LOCK": "UEFI启动 Windows/WinPE 时锁定分辨率",
"VTLANG_UEFI_RES_LOCK_NONE": "不锁定",
"VTLANG_UEFI_RES_LOCK_MAX": "锁定最高分辨率",
"VTLANG_UEFI_RES_LOCK_1024_768": "锁定 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,11 @@
"VTLANG_WIN11_BYPASS_NRO": "安裝 Windows 11 時繞過登入帳戶的需求",
"VTLANG_LINUX_REMOUNT": "啟動 Linux 系統後掛載 Ventoy 分區",
"VTLANG_SECONDARY_BOOT_MENU": "顯示次要啟動選單",
"VTLANG_WIN_UEFI_RES_LOCK": "Lock the resolution when UEFI boot Windows/WinPE",
"VTLANG_UEFI_RES_LOCK_NONE": "None",
"VTLANG_UEFI_RES_LOCK_MAX": "Highest",
"VTLANG_UEFI_RES_LOCK_1024_768": "1024 x 768",
"MENU_STR_XXX": ""
}