Compare commits

...

35 Commits

Author SHA1 Message Date
longpanda
dba7530b21 1.1.12
Some checks are pending
Ventoy CI / build (push) Waiting to run
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Waiting to run
2026-04-23 18:04:05 +08:00
longpanda
e9b4c86082 Fix Oracle Linux 6.9 install issue
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2026-04-23 00:23:21 +08:00
longpanda
dbcdf51950 Improve for UEFI boot Windows/WinPE resolution issue fix. 2026-04-23 00:00:05 +08:00
longpanda
de3e6c6d1d rollback dmsetup operation.
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2026-04-14 19:42:19 +08:00
longpanda
3c0df07b92 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
2026-04-14 15:38:06 +08:00
longpanda
c1c27cd30c Bugfix for ubuntu24.04.4 install failure. (#3567) 2026-04-14 11:03:02 +08:00
longpanda
167c87402c 1.1.11
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
. Fix the display issue when UEFI boot Windows/WinPE
. #3537
. #3532
. Add VT_WINDOWS_DISK_NONVTOY_CLOSEST_XXX  VT_LINUX_DISK_NONVTOY_CLOSEST_XXX
2026-04-05 23:11:45 +08:00
longpanda
d35b8431fe Update distro check
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2026-04-05 17:30:17 +08:00
Florian Fuchs
a1771bd9b8 Improve booting of T2SDE live ISOs (#3526)
T2SDE changed the boot process vastly with 26.3 as it ships as a live
image now. So the injection hooks need to be customized.
2026-04-05 16:49:01 +08:00
panchenbo
ed61a955bf add kylinsecos support (#3552)
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2026-04-02 18:09:08 +08:00
longpanda
e7cf29fd9d Add create_ventoy_iso_part_dm.sh (#3497)
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2026-02-01 13:54:16 +08:00
longpanda
b5d87d394a Update imdisk download link in BuildVentoyFromSource.txt
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2026-01-31 23:14:18 +08:00
longpanda
36da0e0f3d Add VT_WINDOWS_DISK_NONVTOY_CLOSEST_XXX
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2026-01-23 10:47:49 +08:00
Florian Fuchs
903fd7aa01 Support booting T2SDE ISOs better (#3468)
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
T2 uses zstd compressed kernel modules, where dm-mod also depends on
dax module. So the default fallback to only decompress dm-mod isn't
sufficient. So we manually uncompress dax.ko and dm-mod.ko and insmod
this, as default busybox modprobe/insmod doesn't support zstd modules.
2026-01-08 16:26:35 +08:00
longpanda
81728a817c 1.1.10 release
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2025-12-21 20:56:53 +08:00
longpanda
f68d4a8076 Revert "added the Uzbek language я исправил потвердите (#3306)"
This reverts commit d3b911d249.
2025-12-21 20:33:25 +08:00
Ida Bagus
f6c248e983 Update languages.json (#3198) 2025-12-21 20:26:14 +08:00
Ida Bagus
0906cd34fe Update id_ID.json (#3199) 2025-12-21 20:26:00 +08:00
tojik_proof_93
d3b911d249 added the Uzbek language я исправил потвердите (#3306)
* added the Uzbek language

* Potential fix for code scanning alert no. 1: DOM text reinterpreted as HTML

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 2: DOM text reinterpreted as HTML

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 3: DOM text reinterpreted as HTML

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 13: Time-of-check time-of-use filesystem race condition

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 12: Time-of-check time-of-use filesystem race condition

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 4: DOM text reinterpreted as HTML

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 11: Time-of-check time-of-use filesystem race condition

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 5: DOM text reinterpreted as HTML

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 7: Unsafe jQuery plugin

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 8: Unsafe jQuery plugin

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 14: DOM text reinterpreted as HTML

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 10: Time-of-check time-of-use filesystem race condition

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 15: Time-of-check time-of-use filesystem race condition

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 9: Call to `memset` may be deleted

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Update bootstrap.js

* Update ci.yml

* Potential fix for code scanning alert no. 17: Workflow does not contain permissions

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 16: Workflow does not contain permissions

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Update ci.yml

* Update ci.yml

---------

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2025-12-21 20:23:34 +08:00
VenusGirl❤
5c6e1c2446 Update ko_KR.txt (#3307) 2025-12-21 20:22:38 +08:00
SIDDHARTH
3a97ab9165 Added Malayalam language support to languages.json (#3351) 2025-12-21 20:20:11 +08:00
Muhammad Ramzan
6fe6231790 Add Urdu language support for Ventoy UI (#3356)
* Add Urdu language support for Ventoy UI

* Add Urdu language support for Ventoy UI

* Add Urdu language support for Ventoy UI

* Update languages.json
2025-12-21 20:19:56 +08:00
Mojtaba Asgari
9564f125a7 Added Persian Language (#3376)
Co-authored-by: Mojtaba Asgari <Mojtaba.asgari512@gmail.com>
2025-12-21 20:15:00 +08:00
David Refoua
e380575b91 fix grammar (#3413) 2025-12-21 20:13:04 +08:00
Moses Cursor
0fd49126bd Add Luganda help text (#3417)
Add Luganda Menu translation
2025-12-21 20:11:31 +08:00
Maison da Silva
a466d787b8 Update ANSI for UTF-8 Lang pt-BR (#3432)
Update ANSI for UTF-8 Lang pt-BR
2025-12-21 20:11:02 +08:00
Andrew Poženel - SloDevTeam
ab5d00bafb Add and update Slovenian translations (#3445)
Added a new Slovenian help file for GRUB and replaced the existing Slovenian translation in languages.json with an updated and expanded version. The new translation provides improved accuracy and consistency for Slovenian users. I've included both authors, the previous one and myself.
2025-12-21 20:10:31 +08:00
longpanda
450caa6654 update README.md
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2025-12-20 11:26:26 +08:00
longpanda
ef93b55c91 Fix the LinuxGUI program crash issue in wayland environment. (#3406)
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2025-12-20 09:07:08 +08:00
longpanda
4d7fcc26d4 Add support for AerynOS. (#3433)
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2025-12-19 23:19:58 +08:00
longpanda
3597f15814 Fix the LinuxGUI program crash issue in wayland environment. (#3406)
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2025-12-19 14:48:53 +08:00
longpanda
f7e4a7a6ec Ventoy2Disk.sh supports musl libc envrionment. (#3332)
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
Only Ventoy2Disk.sh support, WebUI/LinuxGUI does not support.
2025-12-18 23:32:34 +08:00
longpanda
65b88aabc5 Fix the vhd.vtoy file boot issue in ext4 file system. (#3444)
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2025-12-18 08:55:37 +08:00
longpanda
c42abd33c2 Fix a Windows boot issue in F2 mode.
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2025-12-17 22:51:58 +08:00
longpanda
af34df278f Fix the boot issue with Kylin Server V11. (#3369)
Some checks failed
Ventoy CI / build (push) Has been cancelled
Mirror GitHub to Gitee / Sync-GitHub-to-Gitee (push) Has been cancelled
2025-12-12 23:19:34 +08:00
74 changed files with 1949 additions and 830 deletions

View File

@@ -85,13 +85,14 @@
<tr> <td>./INSTALL/tool/i386/V2DServer</td>
<tr> <td>./INSTALL/tool/mips64el/V2DServer</td>
<tr> <td>./INSTALL/tool/x86_64/V2DServer</td>
<tr> <td>./INSTALL/tool/aarch64/mkexfatfs</td> <td rowspan=8>build</td> <td rowspan=8>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.9<br/>./ExFAT/buidexfat.sh<br/>./ExFAT/buidexfat_aarch64.sh<br/>./ExFAT/buidlibfuse.sh<br/>./ExFAT/buidlibfuse_aarch64.sh<br/></td> </tr>
<tr> <td>./INSTALL/tool/aarch64/mkexfatfs</td> <td rowspan=9>build</td> <td rowspan=8>Build Instructions:<br/>./DOC/BuildVentoyFromSource.txt 4.9<br/>./ExFAT/buidexfat.sh<br/>./ExFAT/buidexfat_aarch64.sh<br/>./ExFAT/buidlibfuse.sh<br/>./ExFAT/buidlibfuse_aarch64.sh<br/></td> </tr>
<tr> <td>./INSTALL/tool/aarch64/mount.exfat-fuse</td>
<tr> <td>./INSTALL/tool/i386/mkexfatfs</td>
<tr> <td>./INSTALL/tool/i386/mount.exfat-fuse</td>
<tr> <td>./INSTALL/tool/mips64el/mkexfatfs</td>
<tr> <td>./INSTALL/tool/mips64el/mount.exfat-fuse</td>
<tr> <td>./INSTALL/tool/x86_64/mkexfatfs</td>
<tr> <td>./INSTALL/tool/x86_64/mkexfatfs_static</td>
<tr> <td>./INSTALL/tool/x86_64/mount.exfat-fuse</td>
<tr> <td>./INSTALL/tool/aarch64/vlnk</td> <td rowspan=4>build</td> <td rowspan=4>Build Instructions:<br/>./Vlnk/build.sh</td> </tr>
<tr> <td>./INSTALL/tool/i386/vlnk</td>

View File

@@ -232,7 +232,7 @@
SHA-256: cde08b6a2cf5ad914f05203e18e3f7c2ed6060a63604e3d75536f19b55e8e0af
5.8 imdisk
download http://www.ltr-data.se/files/imdiskinst.exe and extract it by 7zip.
download http://static.ltr-data.se/files/imdiskinst_2.0.10.exe and extract it by 7zip.
INSTALL/ventoy/imdisk/64/imdisk.sys --> sys/amd64/imdisk.sys SHA-256: 6702202220268787e361f5a82dae53362c8e6c6dcd240bb01b44dd77ae0788da
INSTALL/ventoy/imdisk/64/imdisk.exe --> cli/amd64/imdisk.exe SHA-256: 9759175380af836869443e5f21ce2e33022125d154bc6b3d1c04dc36b190de04
@@ -274,3 +274,4 @@
5.14 ./LiveCD/ISO/EFI/boot/vmlinuz64
download from http://www.tinycorelinux.net/11.x/x86_64/archive/11.0/distribution_files/vmlinuz64
vmlinuz64 SHA-256: 641077fc1f9914af244c248453005f56536ba9e7f54ba3e52402f26709ddb8a5

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/>.
*
@@ -76,7 +76,7 @@ STATIC EFI_EXIT_BOOT_SERVICES g_org_exit_boot_service = NULL;
/* Boot filename */
UINTN gBootFileStartIndex = 1;
CONST CHAR16 *gEfiBootFileName[] =
CONST CHAR16 *gEfiBootFileName[] =
{
L"@",
EFI_REMOVABLE_MEDIA_FILE_NAME,
@@ -101,7 +101,7 @@ CONST CHAR16 *gEfiBootFileName[] =
L"\\EFI\\BOOT\\bootaa64.efi",
L"\\efi\\boot\\bootaa64.efi",
#endif
};
VOID EFIAPI VtoyDebug(IN CONST CHAR8 *Format, ...)
@@ -112,14 +112,14 @@ VOID EFIAPI VtoyDebug(IN CONST CHAR8 *Format, ...)
VA_START (Marker, Format);
UnicodeVSPrintAsciiFormat(Buffer, sizeof(Buffer), Format, Marker);
VA_END (Marker);
gST->ConOut->OutputString(gST->ConOut, Buffer);
}
VOID EFIAPI ventoy_clear_input(VOID)
{
EFI_INPUT_KEY Key;
gST->ConIn->Reset(gST->ConIn, FALSE);
while (EFI_SUCCESS == gST->ConIn->ReadKeyStroke(gST->ConIn, &Key))
{
@@ -142,7 +142,7 @@ static void EFIAPI ventoy_dump_img_chunk(ventoy_chain_head *chain)
for (i = 0; i < chain->img_chunk_num; i++)
{
debug("%2u: [ %u - %u ] <==> [ %llu - %llu ]",
i, chunk[i].img_start_sector, chunk[i].img_end_sector,
i, chunk[i].img_start_sector, chunk[i].img_end_sector,
chunk[i].disk_start_sector, chunk[i].disk_end_sector);
if (i > 0 && (chunk[i].img_start_sector != chunk[i - 1].img_end_sector + 1))
@@ -161,7 +161,7 @@ static void EFIAPI ventoy_dump_img_chunk(ventoy_chain_head *chain)
{
debug("image chunk size check failed %d", errcnt);
}
ventoy_debug_pause();
}
@@ -169,7 +169,7 @@ static void EFIAPI ventoy_dump_override_chunk(ventoy_chain_head *chain)
{
UINT32 i;
ventoy_override_chunk *chunk;
chunk = (ventoy_override_chunk *)((char *)chain + chain->override_chunk_offset);
debug("##################### ventoy_dump_override_chunk #######################");
@@ -186,7 +186,7 @@ static void EFIAPI ventoy_dump_virt_chunk(ventoy_chain_head *chain)
{
UINT32 i;
ventoy_virt_chunk *node;
debug("##################### ventoy_dump_virt_chunk #######################");
debug("virt_chunk_offset=%u", chain->virt_chunk_offset);
debug("virt_chunk_num=%u", chain->virt_chunk_num);
@@ -194,7 +194,7 @@ static void EFIAPI ventoy_dump_virt_chunk(ventoy_chain_head *chain)
node = (ventoy_virt_chunk *)((char *)chain + chain->virt_chunk_offset);
for (i = 0; i < chain->virt_chunk_num; i++, node++)
{
debug("%2u: mem:[ %u, %u, %u ] remap:[ %u, %u, %u ]", i,
debug("%2u: mem:[ %u, %u, %u ] remap:[ %u, %u, %u ]", i,
node->mem_sector_start,
node->mem_sector_end,
node->mem_sector_offset,
@@ -202,7 +202,7 @@ static void EFIAPI ventoy_dump_virt_chunk(ventoy_chain_head *chain)
node->remap_sector_end,
node->org_sector_start);
}
ventoy_debug_pause();
}
@@ -211,7 +211,7 @@ static void EFIAPI ventoy_dump_chain(ventoy_chain_head *chain)
UINT32 i = 0;
UINT8 chksum = 0;
UINT8 *guid;
guid = chain->os_param.vtoy_disk_guid;
for (i = 0; i < sizeof(ventoy_os_param); i++)
{
@@ -229,10 +229,10 @@ static void EFIAPI ventoy_dump_chain(ventoy_chain_head *chain)
debug("os_param->vtoy_img_size=<%llu>", chain->os_param.vtoy_img_size);
debug("os_param->vtoy_img_location_addr=<0x%llx>", chain->os_param.vtoy_img_location_addr);
debug("os_param->vtoy_img_location_len=<%u>", chain->os_param.vtoy_img_location_len);
debug("os_param->vtoy_reserved=<%u %u %u %u %u %u %u>",
g_os_param_reserved[0],
g_os_param_reserved[1],
g_os_param_reserved[2],
debug("os_param->vtoy_reserved=<%u %u %u %u %u %u %u>",
g_os_param_reserved[0],
g_os_param_reserved[1],
g_os_param_reserved[2],
g_os_param_reserved[3],
g_os_param_reserved[4],
g_os_param_reserved[5],
@@ -240,7 +240,7 @@ static void EFIAPI ventoy_dump_chain(ventoy_chain_head *chain)
);
ventoy_debug_pause();
debug("chain->disk_drive=0x%x", chain->disk_drive);
debug("chain->disk_sector_size=%u", chain->disk_sector_size);
debug("chain->real_img_size_in_bytes=%llu", chain->real_img_size_in_bytes);
@@ -252,7 +252,7 @@ static void EFIAPI ventoy_dump_chain(ventoy_chain_head *chain)
debug("chain->override_chunk_num=%u", chain->override_chunk_num);
ventoy_debug_pause();
ventoy_dump_img_chunk(chain);
ventoy_dump_override_chunk(chain);
ventoy_dump_virt_chunk(chain);
@@ -344,7 +344,7 @@ EFI_HANDLE EFIAPI ventoy_get_parent_handle(IN EFI_DEVICE_PATH_PROTOCOL *pDevPath
EFI_DEVICE_PATH_PROTOCOL *pLastNode = NULL;
EFI_DEVICE_PATH_PROTOCOL *pCurNode = NULL;
EFI_DEVICE_PATH_PROTOCOL *pTmpDevPath = NULL;
pTmpDevPath = DuplicateDevicePath(pDevPath);
if (!pTmpDevPath)
{
@@ -387,8 +387,8 @@ EFI_STATUS EFIAPI ventoy_save_ramdisk_param(VOID)
{
debug("find previous ramdisk variable <%llu>", g_backup_ramdisk_param.DiskSize);
}
Status = gRT->SetVariable(L"VentoyRamDisk", &VarGuid,
Status = gRT->SetVariable(L"VentoyRamDisk", &VarGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
sizeof(g_ramdisk_param), &(g_ramdisk_param));
debug("set ramdisk variable %r", Status);
@@ -403,14 +403,14 @@ EFI_STATUS EFIAPI ventoy_delete_ramdisk_param(VOID)
if (g_backup_ramdisk_param.DiskSize > 0 && g_backup_ramdisk_param.PhyAddr > 0)
{
Status = gRT->SetVariable(L"VentoyRamDisk", &VarGuid,
Status = gRT->SetVariable(L"VentoyRamDisk", &VarGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
sizeof(g_backup_ramdisk_param), &g_backup_ramdisk_param);
debug("resotre ramdisk variable %r", Status);
}
else
{
Status = gRT->SetVariable(L"VentoyRamDisk", &VarGuid,
Status = gRT->SetVariable(L"VentoyRamDisk", &VarGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
0, NULL);
debug("delete ramdisk variable %r", Status);
@@ -432,7 +432,7 @@ EFI_STATUS EFIAPI ventoy_save_variable(VOID)
debug("find previous efi variable <%a>", g_backup_os_param_var.vtoy_img_path);
}
Status = gRT->SetVariable(L"VentoyOsParam", &VarGuid,
Status = gRT->SetVariable(L"VentoyOsParam", &VarGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
sizeof(g_chain->os_param), &(g_chain->os_param));
debug("set efi variable %r", Status);
@@ -447,14 +447,14 @@ EFI_STATUS EFIAPI ventoy_delete_variable(VOID)
if (0 == CompareMem(&(g_backup_os_param_var.guid), &VarGuid, sizeof(EFI_GUID)))
{
Status = gRT->SetVariable(L"VentoyOsParam", &VarGuid,
Status = gRT->SetVariable(L"VentoyOsParam", &VarGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
sizeof(g_backup_os_param_var), &(g_backup_os_param_var));
debug("restore efi variable %r", Status);
}
else
{
Status = gRT->SetVariable(L"VentoyOsParam", &VarGuid,
Status = gRT->SetVariable(L"VentoyOsParam", &VarGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
0, NULL);
debug("delete efi variable %r", Status);
@@ -481,7 +481,7 @@ STATIC VOID ventoy_warn_invalid_device(VOID)
gST->ConOut->OutputString(gST->ConOut, L"This is NOT a standard Ventoy device and is NOT supported.\r\n\r\n");
gST->ConOut->OutputString(gST->ConOut, L"You should follow the official instructions in https://www.ventoy.net\r\n");
gST->ConOut->OutputString(gST->ConOut, L"\r\n\r\nWill exit after 10 seconds ...... ");
sleep(10);
@@ -489,7 +489,7 @@ STATIC VOID ventoy_warn_invalid_device(VOID)
#else
STATIC VOID ventoy_warn_invalid_device(VOID)
{
}
#endif
@@ -513,19 +513,19 @@ STATIC EFI_STATUS EFIAPI ventoy_load_image
pFilePath->Header.Length[0] = FileNameLen + sizeof(EFI_DEVICE_PATH_PROTOCOL);
pFilePath->Header.Length[1] = 0;
CopyMem(pFilePath->PathName, FileName, FileNameLen);
pImgPath = AppendDevicePathNode(pDevicePath, (EFI_DEVICE_PATH_PROTOCOL *)pFilePath);
if (!pImgPath)
{
return EFI_NOT_FOUND;
}
Status = gBS->LoadImage(FALSE, ImageHandle, pImgPath, NULL, 0, Image);
debug("Load Image File %r DP: <%s>", Status, ConvertDevicePathToText(pImgPath, FALSE, FALSE));
FreePool(pImgPath);
return Status;
}
@@ -547,7 +547,7 @@ STATIC EFI_STATUS EFIAPI ventoy_find_iso_disk(IN EFI_HANDLE ImageHandle)
return EFI_OUT_OF_RESOURCES;
}
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiBlockIoProtocolGuid,
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiBlockIoProtocolGuid,
NULL, &Count, &Handles);
if (EFI_ERROR(Status))
{
@@ -591,16 +591,16 @@ STATIC EFI_STATUS EFIAPI ventoy_find_iso_disk(IN EFI_HANDLE ImageHandle)
ventoy_warn_invalid_device();
}
}
gBlockData.RawBlockIoHandle = Handles[i];
gBlockData.pRawBlockIo = pBlockIo;
gBS->OpenProtocol(Handles[i], &gEfiDevicePathProtocolGuid,
gBS->OpenProtocol(Handles[i], &gEfiDevicePathProtocolGuid,
(VOID **)&(gBlockData.pDiskDevPath),
ImageHandle,
Handles[i],
EFI_OPEN_PROTOCOL_GET_PROTOCOL);
debug("Find Ventoy Disk Sig Handle:%p DP:%s", Handles[i],
debug("Find Ventoy Disk Sig Handle:%p DP:%s", Handles[i],
ConvertDevicePathToText(gBlockData.pDiskDevPath, FALSE, FALSE));
break;
}
@@ -629,7 +629,7 @@ STATIC EFI_STATUS EFIAPI ventoy_find_iso_disk_fs(IN EFI_HANDLE ImageHandle)
EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *pFile = NULL;
EFI_DEVICE_PATH_PROTOCOL *pDevPath = NULL;
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiSimpleFileSystemProtocolGuid,
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiSimpleFileSystemProtocolGuid,
NULL, &Count, &Handles);
if (EFI_ERROR(Status))
{
@@ -646,7 +646,7 @@ STATIC EFI_STATUS EFIAPI ventoy_find_iso_disk_fs(IN EFI_HANDLE ImageHandle)
continue;
}
Status = gBS->OpenProtocol(Handles[i], &gEfiDevicePathProtocolGuid,
Status = gBS->OpenProtocol(Handles[i], &gEfiDevicePathProtocolGuid,
(VOID **)&pDevPath,
ImageHandle,
Handles[i],
@@ -683,29 +683,29 @@ STATIC EFI_STATUS EFIAPI ventoy_load_isoefi_driver(IN EFI_HANDLE ImageHandle)
if (gIsoUdf)
{
Status = ventoy_load_image(ImageHandle, gBlockData.pDiskFsDevPath,
gUdfEfiDriverPath,
sizeof(gUdfEfiDriverPath),
Status = ventoy_load_image(ImageHandle, gBlockData.pDiskFsDevPath,
gUdfEfiDriverPath,
sizeof(gUdfEfiDriverPath),
&Image);
debug("load iso UDF efi driver status:%r", Status);
}
else
{
Status = ventoy_load_image(ImageHandle, gBlockData.pDiskFsDevPath,
gIso9660EfiDriverPath,
sizeof(gIso9660EfiDriverPath),
Status = ventoy_load_image(ImageHandle, gBlockData.pDiskFsDevPath,
gIso9660EfiDriverPath,
sizeof(gIso9660EfiDriverPath),
&Image);
debug("load iso 9660 efi driver status:%r", Status);
debug("load iso 9660 efi driver status:%r", Status);
}
if (gDebugPrint)
{
gRT->SetVariable(L"FS_LOGGING", &gShellVariableGuid,
gRT->SetVariable(L"FS_LOGGING", &gShellVariableGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
sizeof(LogVar), LogVar);
}
gRT->SetVariable(L"FS_NAME_NOCASE", &gShellVariableGuid,
gRT->SetVariable(L"FS_NAME_NOCASE", &gShellVariableGuid,
EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
sizeof(LogVar), LogVar);
@@ -732,7 +732,7 @@ STATIC EFI_STATUS ventoy_proc_img_replace_name(ventoy_grub_param_file_replace *r
}
AsciiStrCpyS(tmp, sizeof(tmp), replace->old_file_name[0]);
for (i = 0; i < 256 && tmp[i]; i++)
{
if (tmp[i] == '/')
@@ -755,7 +755,7 @@ EFI_STATUS EFIAPI ventoy_get_variable_wrapper
)
{
EFI_STATUS Status = EFI_SUCCESS;
Status = g_org_get_variable(VariableName, VendorGuid, Attributes, DataSize, Data);
if (StrCmp(VariableName, L"SecureBoot") == 0)
{
@@ -779,7 +779,7 @@ EFI_STATUS EFIAPI ventoy_exit_boot_service_wrapper
gRT->GetVariable = g_org_get_variable;
g_org_get_variable = NULL;
}
return g_org_exit_boot_service(ImageHandle, MapKey);
}
@@ -803,12 +803,12 @@ STATIC EFI_STATUS EFIAPI ventoy_disable_secure_boot(IN EFI_HANDLE ImageHandle)
/* step1: wrapper security protocol. */
/* Do we still need it since we have been loaded ? */
/* step2: fake SecureBoot variable */
g_org_exit_boot_service = gBS->ExitBootServices;
gBS->ExitBootServices = ventoy_exit_boot_service_wrapper;
g_org_get_variable = gRT->GetVariable;
gRT->GetVariable = ventoy_get_variable_wrapper;
@@ -817,7 +817,7 @@ STATIC EFI_STATUS EFIAPI ventoy_disable_secure_boot(IN EFI_HANDLE ImageHandle)
STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
{
{
UINT32 i = 0;
UINT32 old_cnt = 0;
UINTN size = 0;
@@ -846,12 +846,12 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
{
gDebugPrint = TRUE;
}
if (StrStr(pCmdLine, L"fallback"))
{
gBootFallBack = TRUE;
}
if (StrStr(pCmdLine, L"dotefi"))
{
gDotEfiBoot = TRUE;
@@ -861,7 +861,7 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
{
gLoadIsoEfi = TRUE;
}
if (StrStr(pCmdLine, L"iso_udf"))
{
gIsoUdf = TRUE;
@@ -899,7 +899,7 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
{
return EFI_INVALID_PARAMETER;
}
pGrubParam = (ventoy_grub_param *)StrHexToUintn(pPos + StrLen(L"env_param="));
grub_env_set = pGrubParam->grub_env_set;
grub_env_get = pGrubParam->grub_env_get;
@@ -914,7 +914,7 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
ventoy_warn_invalid_device();
return EFI_INVALID_PARAMETER;
}
g_file_replace_list = &pGrubParam->file_replace;
old_cnt = g_file_replace_list->old_file_cnt;
debug("file replace: magic:0x%x virtid:%u name count:%u <%a> <%a> <%a> <%a>",
@@ -927,7 +927,7 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
old_cnt > 3 ? g_file_replace_list->old_file_name[3] : ""
);
for (i = 0; i < VTOY_MAX_CONF_REPLACE; i++)
{
replace = pGrubParam->img_replace + i;
@@ -948,7 +948,7 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
}
}
pPos = StrStr(pCmdLine, L"mem:");
chain = (ventoy_chain_head *)StrHexToUintn(pPos + 4);
@@ -977,7 +977,7 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
debug("This is normal mode");
g_chain = AllocatePool(size);
CopyMem(g_chain, chain, size);
g_chunk = (ventoy_img_chunk *)((char *)g_chain + g_chain->img_chunk_offset);
g_img_chunk_num = g_chain->img_chunk_num;
g_override_chunk = (ventoy_override_chunk *)((char *)g_chain + g_chain->override_chunk_offset);
@@ -997,7 +997,7 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
{
g_hook_keyboard = TRUE;
}
if (g_os_param_reserved[5] == 1 && g_os_param_reserved[2] == ventoy_chain_linux)
{
ventoy_disable_secure_boot(ImageHandle);
@@ -1024,7 +1024,7 @@ STATIC EFI_STATUS EFIAPI ventoy_parse_cmdline(IN EFI_HANDLE ImageHandle)
}
g_fix_windows_1st_cdrom_issue = FALSE;
if (ventoy_chain_windows == g_os_param_reserved[2] ||
if (ventoy_chain_windows == g_os_param_reserved[2] ||
ventoy_chain_wim == g_os_param_reserved[2])
{
if (ventoy_is_cdrom_dp_exist())
@@ -1066,7 +1066,7 @@ EFI_STATUS EFIAPI ventoy_clean_env(VOID)
if (!gMemdiskMode)
{
FreePool(g_chain);
FreePool(g_chain);
}
return EFI_SUCCESS;
@@ -1126,7 +1126,7 @@ EFI_STATUS EFIAPI ventoy_boot(IN EFI_HANDLE ImageHandle)
Count = 0;
Handles = NULL;
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiSimpleFileSystemProtocolGuid,
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiSimpleFileSystemProtocolGuid,
NULL, &Count, &Handles);
if (EFI_ERROR(Status))
{
@@ -1145,7 +1145,7 @@ EFI_STATUS EFIAPI ventoy_boot(IN EFI_HANDLE ImageHandle)
debug("FS:%u Protocol:%p OpenVolume:%p", i, pFile, pFile->OpenVolume);
Status = gBS->OpenProtocol(Handles[i], &gEfiDevicePathProtocolGuid,
Status = gBS->OpenProtocol(Handles[i], &gEfiDevicePathProtocolGuid,
(VOID **)&pDevPath,
ImageHandle,
Handles[i],
@@ -1165,7 +1165,7 @@ EFI_STATUS EFIAPI ventoy_boot(IN EFI_HANDLE ImageHandle)
for (j = gBootFileStartIndex; j < ARRAY_SIZE(gEfiBootFileName); j++)
{
Status = ventoy_load_image(ImageHandle, pDevPath, gEfiBootFileName[j],
Status = ventoy_load_image(ImageHandle, pDevPath, gEfiBootFileName[j],
StrSize(gEfiBootFileName[j]), &Image);
if (EFI_SUCCESS == Status)
{
@@ -1187,7 +1187,7 @@ EFI_STATUS EFIAPI ventoy_boot(IN EFI_HANDLE ImageHandle)
{
gST->ConIn->Reset(gST->ConIn, FALSE);
}
if ((g_file_replace_list && g_file_replace_list->magic == GRUB_FILE_REPLACE_MAGIC) || g_img_replace_list)
{
ventoy_wrapper_push_openvolume(pFile->OpenVolume);
@@ -1199,7 +1199,7 @@ EFI_STATUS EFIAPI ventoy_boot(IN EFI_HANDLE ImageHandle)
//ventoy_wrapper_system();
Status = gBS->StartImage(Image, NULL, NULL);
ventoy_hook_stop();
if (EFI_ERROR(Status))
{
debug("Failed to start image %r", Status);
@@ -1217,7 +1217,7 @@ EFI_STATUS EFIAPI ventoy_boot(IN EFI_HANDLE ImageHandle)
{
break;
}
debug("Fs not found, now wait and retry...");
sleep(1);
}
@@ -1239,7 +1239,7 @@ EFI_STATUS EFIAPI VentoyEfiMain
{
EFI_STATUS Status = EFI_SUCCESS;
EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *Protocol;
g_sector_flag_num = 512; /* initial value */
g_sector_flag = AllocatePool(g_sector_flag_num * sizeof(ventoy_sector_flag));
@@ -1263,6 +1263,11 @@ EFI_STATUS EFIAPI VentoyEfiMain
return Status;
}
if (g_os_param_reserved[11])
{
ventoy_lock_res(g_os_param_reserved[11]);
}
ventoy_disable_ex_filesystem();
if (gMemdiskMode)
@@ -1278,12 +1283,12 @@ EFI_STATUS EFIAPI VentoyEfiMain
ventoy_find_iso_disk_fs(ImageHandle);
ventoy_load_isoefi_driver(ImageHandle);
}
ventoy_install_blockio(ImageHandle, g_iso_buf_size);
ventoy_debug_pause();
Status = ventoy_boot(ImageHandle);
ventoy_delete_ramdisk_param();
if (gLoadIsoEfi && gBlockData.IsoDriverImage)
@@ -1310,14 +1315,14 @@ EFI_STATUS EFIAPI VentoyEfiMain
}
ventoy_debug_pause();
ventoy_install_blockio(ImageHandle, g_chain->virt_img_size_in_bytes);
ventoy_debug_pause();
Status = ventoy_boot(ImageHandle);
}
ventoy_clean_env();
}
@@ -1330,17 +1335,22 @@ EFI_STATUS EFIAPI VentoyEfiMain
sleep(30);
}
}
ventoy_clear_input();
gST->ConOut->ClearScreen(gST->ConOut);
if (gDotEfiBoot && (EFI_NOT_FOUND == Status))
{
grub_env_set("vtoy_dotefi_retry", "YES");
grub_env_set("vtoy_dotefi_retry", "YES");
}
ventoy_enable_ex_filesystem();
if (g_os_param_reserved[11])
{
ventoy_unlock_res();
}
return EFI_SUCCESS;
}

View File

@@ -7,17 +7,17 @@
* 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/>.
*
*/
#ifndef __VENTOY_H__
#define __VENTOY_H__
@@ -54,7 +54,7 @@ typedef struct ventoy_image_disk_region
typedef struct ventoy_image_location
{
ventoy_guid guid;
/* image sector size, currently this value is always 2048 */
UINT32 image_sector_size;
@@ -62,10 +62,10 @@ typedef struct ventoy_image_location
UINT32 disk_sector_size;
UINT32 region_count;
/*
* disk region data
* If the image file has more than one fragments in disk,
* If the image file has more than one fragments in disk,
* there will be more than one region data here.
*
*/
@@ -86,7 +86,7 @@ typedef struct ventoy_os_param
char vtoy_img_path[384]; // It seems to be enough, utf-8 format
UINT64 vtoy_img_size; // image file size in bytes
/*
/*
* Ventoy will write a copy of ventoy_image_location data into runtime memory
* this is the physically address and length of that memory.
* Address 0 means no such data exist.
@@ -95,7 +95,7 @@ typedef struct ventoy_os_param
*/
UINT64 vtoy_img_location_addr;
UINT32 vtoy_img_location_len;
UINT64 vtoy_reserved[4]; // Internal use by ventoy
UINT8 vtoy_disk_signature[4];
@@ -124,7 +124,7 @@ typedef struct ventoy_chain_head
UINT64 virt_img_size_in_bytes;
UINT32 boot_catalog;
UINT8 boot_catalog_sector[2048];
UINT32 img_chunk_offset;
UINT32 img_chunk_num;
@@ -199,11 +199,11 @@ typedef struct ventoy_virt_chunk
typedef struct ventoy_sector_flag
{
UINT8 flag; // 0:init 1:mem 2:remap
UINT64 remap_lba;
UINT64 remap_lba;
}ventoy_sector_flag;
typedef struct vtoy_block_data
typedef struct vtoy_block_data
{
EFI_HANDLE Handle;
EFI_BLOCK_IO_MEDIA Media; /* Media descriptor */
@@ -272,7 +272,7 @@ typedef struct ventoy_grub_param
grub_env_set_pf grub_env_set;
ventoy_grub_param_file_replace file_replace;
ventoy_grub_param_file_replace img_replace[VTOY_MAX_CONF_REPLACE];
grub_env_printf_pf grub_env_printf;
grub_env_printf_pf grub_env_printf;
}ventoy_grub_param;
typedef struct ventoy_ram_disk
@@ -318,7 +318,7 @@ typedef struct MBR_HEAD
#pragma pack()
typedef struct well_known_guid
typedef struct well_known_guid
{
EFI_GUID *guid;
const char *name;
@@ -331,7 +331,7 @@ typedef struct ventoy_system_wrapper
EFI_HANDLE_PROTOCOL NewHandleProtocol;
EFI_HANDLE_PROTOCOL OriHandleProtocol;
EFI_OPEN_PROTOCOL NewOpenProtocol;
EFI_OPEN_PROTOCOL OriOpenProtocol;
@@ -382,7 +382,7 @@ typedef struct DriverBindWrapper
extern BOOLEAN gDebugPrint;
VOID EFIAPI VtoyDebug(IN CONST CHAR8 *Format, ...);
EFI_STATUS EFIAPI ventoy_wrapper_system(VOID);
EFI_STATUS EFIAPI ventoy_block_io_read
EFI_STATUS EFIAPI ventoy_block_io_read
(
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
@@ -428,6 +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_res(UINT8 LockType);
EFI_STATUS ventoy_unlock_res(VOID);
#endif

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/>.
*
@@ -85,7 +85,7 @@ BOOLEAN ventoy_is_cdrom_dp_exist(VOID)
EFI_STATUS Status = EFI_SUCCESS;
EFI_DEVICE_PATH_PROTOCOL *DevicePath = NULL;
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiDevicePathProtocolGuid,
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiDevicePathProtocolGuid,
NULL, &Count, &Handles);
if (EFI_ERROR(Status))
{
@@ -107,24 +107,24 @@ BOOLEAN ventoy_is_cdrom_dp_exist(VOID)
FreePool(Handles);
return TRUE;
}
DevicePath = NextDevicePathNode(DevicePath);
}
}
FreePool(Handles);
return FALSE;
return FALSE;
}
#if 0
/* Block IO procotol */
#endif
EFI_STATUS EFIAPI ventoy_block_io_reset
EFI_STATUS EFIAPI ventoy_block_io_reset
(
IN EFI_BLOCK_IO_PROTOCOL *This,
IN BOOLEAN ExtendedVerification
)
)
{
(VOID)This;
(VOID)ExtendedVerification;
@@ -151,8 +151,8 @@ STATIC EFI_STATUS EFIAPI ventoy_read_iso_sector
ventoy_img_chunk *pchunk = g_chunk;
ventoy_override_chunk *pOverride = g_override_chunk;
EFI_BLOCK_IO_PROTOCOL *pRawBlockIo = gBlockData.pRawBlockIo;
debug("read iso sector %lu count %u Buffer:%p Align:%u blk:%u",
debug("read iso sector %lu count %u Buffer:%p Align:%u blk:%u",
Sector, Count, Buffer, pRawBlockIo->Media->IoAlign, pRawBlockIo->Media->BlockSize);
ReadStart = Sector * 2048;
@@ -207,7 +207,7 @@ STATIC EFI_STATUS EFIAPI ventoy_read_iso_sector
{
OverrideStart = pOverride->img_offset;
OverrideEnd = pOverride->img_offset + pOverride->override_size;
if (OverrideStart >= ReadEnd || ReadStart >= OverrideEnd)
{
continue;
@@ -217,7 +217,7 @@ STATIC EFI_STATUS EFIAPI ventoy_read_iso_sector
{
if (ReadEnd <= OverrideEnd)
{
CopyMem(pCurBuf + OverrideStart - ReadStart, pOverride->override_data, ReadEnd - OverrideStart);
CopyMem(pCurBuf + OverrideStart - ReadStart, pOverride->override_data, ReadEnd - OverrideStart);
}
else
{
@@ -228,7 +228,7 @@ STATIC EFI_STATUS EFIAPI ventoy_read_iso_sector
{
if (ReadEnd <= OverrideEnd)
{
CopyMem(pCurBuf, pOverride->override_data + ReadStart - OverrideStart, ReadEnd - ReadStart);
CopyMem(pCurBuf, pOverride->override_data + ReadStart - OverrideStart, ReadEnd - ReadStart);
}
else
{
@@ -236,7 +236,7 @@ STATIC EFI_STATUS EFIAPI ventoy_read_iso_sector
}
}
if (g_fixup_iso9660_secover_enable && (!g_fixup_iso9660_secover_start) &&
if (g_fixup_iso9660_secover_enable && (!g_fixup_iso9660_secover_start) &&
pOverride->override_size == sizeof(ventoy_iso9660_override))
{
ventoy_iso9660_override *dirent = (ventoy_iso9660_override *)pOverride->override_data;
@@ -256,7 +256,7 @@ STATIC EFI_STATUS EFIAPI ventoy_read_iso_sector
}
}
return EFI_SUCCESS;
return EFI_SUCCESS;
}
STATIC EFI_STATUS EFIAPI ventoy_write_iso_sector
@@ -276,7 +276,7 @@ STATIC EFI_STATUS EFIAPI ventoy_write_iso_sector
UINT8 *pCurBuf = (UINT8 *)Buffer;
ventoy_img_chunk *pchunk = g_chunk;
EFI_BLOCK_IO_PROTOCOL *pRawBlockIo = gBlockData.pRawBlockIo;
debug("write iso sector %lu count %u", Sector, Count);
ReadStart = Sector * 2048;
@@ -321,17 +321,17 @@ STATIC EFI_STATUS EFIAPI ventoy_write_iso_sector
}
}
return EFI_SUCCESS;
return EFI_SUCCESS;
}
EFI_STATUS EFIAPI ventoy_block_io_ramdisk_write
EFI_STATUS EFIAPI ventoy_block_io_ramdisk_write
(
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
IN VOID *Buffer
)
)
{
(VOID)This;
(VOID)MediaId;
@@ -349,14 +349,14 @@ EFI_STATUS EFIAPI ventoy_block_io_ramdisk_write
return EFI_SUCCESS;
}
EFI_STATUS EFIAPI ventoy_block_io_ramdisk_read
EFI_STATUS EFIAPI ventoy_block_io_ramdisk_read
(
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
OUT VOID *Buffer
)
)
{
//debug("### ventoy_block_io_ramdisk_read sector:%u count:%u", (UINT32)Lba, (UINT32)BufferSize / 2048);
@@ -364,12 +364,12 @@ EFI_STATUS EFIAPI ventoy_block_io_ramdisk_read
(VOID)MediaId;
CopyMem(Buffer, g_iso_data_buf + (Lba * 2048), BufferSize);
if (g_blockio_start_record_bcd && FALSE == g_blockio_bcd_read_done)
{
if (*(UINT32 *)Buffer == 0x66676572)
{
g_blockio_bcd_read_done = TRUE;
g_blockio_bcd_read_done = TRUE;
}
}
@@ -429,14 +429,14 @@ end:
return Lba;
}
EFI_STATUS EFIAPI ventoy_block_io_read_real
EFI_STATUS EFIAPI ventoy_block_io_read_real
(
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
OUT VOID *Buffer
)
)
{
UINT32 i = 0;
UINT32 j = 0;
@@ -450,7 +450,7 @@ EFI_STATUS EFIAPI ventoy_block_io_read_real
UINT8 *lastbuffer;
ventoy_sector_flag *cur_flag;
ventoy_virt_chunk *node;
debug("### block_io_read_real sector:%u count:%u Buffer:%p", (UINT32)Lba, (UINT32)BufferSize / 2048, Buffer);
secNum = BufferSize / 2048;
@@ -510,7 +510,7 @@ EFI_STATUS EFIAPI ventoy_block_io_read_real
{
if (curlba >= node->mem_sector_start && curlba < node->mem_sector_end)
{
CopyMem((UINT8 *)Buffer + j * 2048,
CopyMem((UINT8 *)Buffer + j * 2048,
(char *)g_virt_chunk + node->mem_sector_offset + (curlba - node->mem_sector_start) * 2048,
2048);
cur_flag->flag = 1;
@@ -564,7 +564,7 @@ EFI_STATUS EFIAPI ventoy_block_io_read
IN EFI_LBA Lba,
IN UINTN BufferSize,
OUT VOID *Buffer
)
)
{
UINT32 IoAlign = 0;
VOID *NewBuf = NULL;
@@ -593,18 +593,18 @@ EFI_STATUS EFIAPI ventoy_block_io_read
return Status;
}
EFI_STATUS EFIAPI ventoy_block_io_write
EFI_STATUS EFIAPI ventoy_block_io_write
(
IN EFI_BLOCK_IO_PROTOCOL *This,
IN UINT32 MediaId,
IN EFI_LBA Lba,
IN UINTN BufferSize,
IN VOID *Buffer
)
)
{
UINT32 secNum = 0;
UINT64 offset = 0;
(VOID)This;
(VOID)MediaId;
@@ -636,8 +636,8 @@ STATIC UINTN ventoy_get_current_device_path_id(VOID)
EFI_STATUS Status = EFI_SUCCESS;
EFI_DEVICE_PATH_PROTOCOL *DevicePath = NULL;
VENDOR_DEVICE_PATH *venPath = NULL;
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiDevicePathProtocolGuid,
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiDevicePathProtocolGuid,
NULL, &Count, &Handles);
if (EFI_ERROR(Status))
{
@@ -688,7 +688,7 @@ EFI_STATUS EFIAPI ventoy_fill_device_path(VOID)
venPath->Header.Length[1] = 0;
CopyMem(&venPath->Guid, &gVtoyBlockDevicePathGuid, sizeof(EFI_GUID));
CopyMem(venPath + 1, VtoyDpName, NameLen);
gBlockData.Path = AppendDevicePathNode(NULL, (EFI_DEVICE_PATH_PROTOCOL *)TmpBuf);
gBlockData.DevicePathCompareLen = sizeof(VENDOR_DEVICE_PATH) + NameLen;
@@ -710,7 +710,7 @@ EFI_STATUS EFIAPI ventoy_connect_driver(IN EFI_HANDLE ControllerHandle, IN CONST
debug("ventoy_connect_driver <%s>...", DrvName);
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiComponentName2ProtocolGuid,
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiComponentName2ProtocolGuid,
NULL, &Count, &Handles);
if (EFI_ERROR(Status))
{
@@ -748,7 +748,7 @@ EFI_STATUS EFIAPI ventoy_connect_driver(IN EFI_HANDLE ControllerHandle, IN CONST
FreePool(Handles);
Handles = NULL;
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiComponentNameProtocolGuid,
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiComponentNameProtocolGuid,
NULL, &Count, &Handles);
if (EFI_ERROR(Status))
{
@@ -781,10 +781,10 @@ EFI_STATUS EFIAPI ventoy_connect_driver(IN EFI_HANDLE ControllerHandle, IN CONST
}
Status = EFI_NOT_FOUND;
end:
FreePool(Handles);
return Status;
}
@@ -805,11 +805,11 @@ STATIC BOOLEAN ventoy_filesystem_need_wrapper(IN CONST CHAR16 *DrvName)
}
/*
* suppress some file system drivers
* suppress some file system drivers
* 1. rEFInd File System Driver
*
*/
if (StrStr(UpperDrvName, L"REFIND") && StrStr(UpperDrvName, L"FILE SYSTEM"))
{
return TRUE;
@@ -820,7 +820,7 @@ STATIC BOOLEAN ventoy_filesystem_need_wrapper(IN CONST CHAR16 *DrvName)
STATIC VOID ventoy_add_filesystem_wrapper
(
IN EFI_DRIVER_BINDING_PROTOCOL *DriverBindProtocol,
IN EFI_DRIVER_BINDING_PROTOCOL *DriverBindProtocol,
IN CONST CHAR16 *DriverName
)
{
@@ -865,10 +865,10 @@ STATIC EFI_STATUS ventoy_find_filesystem_driverbind(VOID)
EFI_COMPONENT_NAME_PROTOCOL *NameProtocol = NULL;
EFI_COMPONENT_NAME2_PROTOCOL *Name2Protocol = NULL;
EFI_DRIVER_BINDING_PROTOCOL *DriverBindProtocol = NULL;
debug("ventoy_find_filesystem_driverbind...");
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiComponentName2ProtocolGuid,
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiComponentName2ProtocolGuid,
NULL, &Count, &Handles);
if (EFI_ERROR(Status))
{
@@ -899,7 +899,7 @@ STATIC EFI_STATUS ventoy_find_filesystem_driverbind(VOID)
FreePool(Handles);
Handles = NULL;
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiComponentNameProtocolGuid,
Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiComponentNameProtocolGuid,
NULL, &Count, &Handles);
if (EFI_ERROR(Status))
{
@@ -927,7 +927,7 @@ STATIC EFI_STATUS ventoy_find_filesystem_driverbind(VOID)
}
FreePool(Handles);
return EFI_SUCCESS;
}
@@ -988,7 +988,7 @@ EFI_STATUS ventoy_disable_ex_filesystem(VOID)
debug("Wrapper Ex Driver Binding %lu", g_DriverBindWrapperCnt);
ventoy_debug_pause();
return EFI_SUCCESS;
}
@@ -1046,10 +1046,10 @@ EFI_STATUS EFIAPI ventoy_block_io_read_512
if (BufferSize >= 2048)
{
ReadSize = BufferSize / 2048 * 2048;
Status |= g_sector_2048_read(This, MediaId, Lba / 4, ReadSize, CurBuf);
CurBuf += ReadSize;
Lba += ReadSize / 512;
BufferSize -= ReadSize;
}
@@ -1096,7 +1096,7 @@ EFI_STATUS EFIAPI ventoy_block_io_write_512
ReadSize = (4 - Mod) * 512;
CopyMem(g_sector_buf + Mod * 512, CurBuf, ReadSize);
g_sector_2048_write(This, MediaId, Lba / 4, 2048, g_sector_buf);
CurBuf += ReadSize;
Lba += (4 - Mod);
BufferSize -= ReadSize;
@@ -1106,10 +1106,10 @@ EFI_STATUS EFIAPI ventoy_block_io_write_512
if (BufferSize >= 2048)
{
ReadSize = BufferSize / 2048 * 2048;
Status |= g_sector_2048_write(This, MediaId, Lba / 4, ReadSize, CurBuf);
CurBuf += ReadSize;
Lba += ReadSize / 512;
BufferSize -= ReadSize;
}
@@ -1117,7 +1117,7 @@ EFI_STATUS EFIAPI ventoy_block_io_write_512
if (BufferSize > 0)
{
Status |= g_sector_2048_read(This, MediaId, Lba / 4, 2048, g_sector_buf);
CopyMem(g_sector_buf, CurBuf, BufferSize);
g_sector_2048_write(This, MediaId, Lba / 4, 2048, g_sector_buf);
}
@@ -1126,10 +1126,10 @@ EFI_STATUS EFIAPI ventoy_block_io_write_512
}
EFI_STATUS EFIAPI ventoy_install_blockio(IN EFI_HANDLE ImageHandle, IN UINT64 ImgSize)
{
{
EFI_STATUS Status = EFI_SUCCESS;
EFI_BLOCK_IO_PROTOCOL *pBlockIo = &(gBlockData.BlockIo);
ventoy_fill_device_path();
debug("install block io protocol %p", ImageHandle);
@@ -1144,10 +1144,10 @@ EFI_STATUS EFIAPI ventoy_install_blockio(IN EFI_HANDLE ImageHandle, IN UINT64 Im
else
{
gBlockData.Media.BlockSize = 2048;
gBlockData.Media.LastBlock = ImgSize / 2048 - 1;
gBlockData.Media.LastBlock = ImgSize / 2048 - 1;
gBlockData.Media.ReadOnly = TRUE;
}
gBlockData.Media.MediaPresent = 1;
gBlockData.Media.LogicalBlocksPerPhysicalBlock = 1;
@@ -1164,10 +1164,10 @@ EFI_STATUS EFIAPI ventoy_install_blockio(IN EFI_HANDLE ImageHandle, IN UINT64 Im
}
else
{
pBlockIo->ReadBlocks = gMemdiskMode ? ventoy_block_io_ramdisk_read : ventoy_block_io_read;
pBlockIo->ReadBlocks = gMemdiskMode ? ventoy_block_io_ramdisk_read : ventoy_block_io_read;
pBlockIo->WriteBlocks = ventoy_block_io_write;
}
pBlockIo->FlushBlocks = ventoy_block_io_flush;
Status = gBS->InstallMultipleProtocolInterfaces(&gBlockData.Handle,
@@ -1295,7 +1295,7 @@ DEF_WRAP_FUNC(7);
#error "VTOY_MAX_CONF_REPLACE overflow"
#endif
static EFI_FILE_FLUSH_EX g_img_flush_func[VTOY_MAX_CONF_REPLACE] =
static EFI_FILE_FLUSH_EX g_img_flush_func[VTOY_MAX_CONF_REPLACE] =
{
ventoy_wrapper_file_flush_ex_img0,
ventoy_wrapper_file_flush_ex_img1,
@@ -1335,7 +1335,7 @@ STATIC ventoy_efi_file_replace *ventoy_wrapper_get_replace(EFI_FILE_HANDLE This)
return g_img_file_replace + i;
}
}
return NULL;
}
@@ -1369,7 +1369,7 @@ ventoy_wrapper_file_set_pos(EFI_FILE_HANDLE This, UINT64 Position)
ventoy_efi_file_replace *replace = NULL;
replace = ventoy_wrapper_get_replace(This);
if (Position <= replace->FileSizeBytes)
{
replace->CurPos = Position;
@@ -1378,7 +1378,7 @@ ventoy_wrapper_file_set_pos(EFI_FILE_HANDLE This, UINT64 Position)
{
replace->CurPos = replace->FileSizeBytes;
}
return EFI_SUCCESS;
}
@@ -1425,7 +1425,7 @@ ventoy_wrapper_file_get_info(EFI_FILE_HANDLE This, EFI_GUID *Type, UINTN *Len, V
//Info->FileName = EFI_FILE_READ_ONLY;
*Len = Info->Size;
return EFI_SUCCESS;
}
@@ -1437,7 +1437,7 @@ ventoy_wrapper_file_read(EFI_FILE_HANDLE This, UINTN *Len, VOID *Data)
ventoy_efi_file_replace *replace = NULL;
replace = ventoy_wrapper_get_replace(This);
debug("ventoy_wrapper_file_read ... %u", *Len);
if (replace->CurPos + ReadLen > replace->FileSizeBytes)
@@ -1494,7 +1494,7 @@ STATIC EFI_STATUS EFIAPI ventoy_wrapper_file_procotol(EFI_FILE_PROTOCOL *File, B
STATIC BOOLEAN EFIAPI ventoy_replace_name_match(CHAR8 *pReplace, CHAR8 *pName)
{
UINTN Len1, Len2;
Len1 = AsciiStrLen(pReplace);
Len2 = AsciiStrLen(pName);
@@ -1521,10 +1521,10 @@ STATIC BOOLEAN EFIAPI ventoy_replace_name_match(CHAR8 *pReplace, CHAR8 *pName)
STATIC EFI_STATUS EFIAPI ventoy_wrapper_file_open
(
EFI_FILE_HANDLE This,
EFI_FILE_HANDLE This,
EFI_FILE_HANDLE *New,
CHAR16 *Name,
UINT64 Mode,
CHAR16 *Name,
UINT64 Mode,
UINT64 Attributes
)
{
@@ -1571,7 +1571,7 @@ STATIC EFI_STATUS EFIAPI ventoy_wrapper_file_open
virt = g_virt_chunk + g_file_replace_list->new_file_virtual_id;
Sectors = (virt->mem_sector_end - virt->mem_sector_start) + (virt->remap_sector_end - virt->remap_sector_start);
g_efi_file_replace.BlockIoSectorStart = virt->mem_sector_start;
g_efi_file_replace.FileSizeBytes = Sectors * 2048;
@@ -1581,7 +1581,7 @@ STATIC EFI_STATUS EFIAPI ventoy_wrapper_file_open
g_efi_file_replace.BlockIoSectorStart, Sectors, Sectors * 2048);
sleep(3);
}
return Status;
}
}
@@ -1605,9 +1605,9 @@ STATIC EFI_STATUS EFIAPI ventoy_wrapper_file_open
{
AsciiStrCpyS(OldName, sizeof(OldName), replace->old_file_name[j]);
if ((0 == AsciiStrCmp(OldName, TmpName)) ||
(AsciiStrnCmp(OldName, "\\loader\\entries\\", 16) == 0 &&
(AsciiStrnCmp(OldName, "\\loader\\entries\\", 16) == 0 &&
AsciiStrCmp(OldName + 16, TmpName) == 0
)
)
)
{
g_original_fclose(*New);
@@ -1617,7 +1617,7 @@ STATIC EFI_STATUS EFIAPI ventoy_wrapper_file_open
virt = g_virt_chunk + replace->new_file_virtual_id;
Sectors = (virt->mem_sector_end - virt->mem_sector_start) + (virt->remap_sector_end - virt->remap_sector_start);
g_img_file_replace[i].BlockIoSectorStart = virt->mem_sector_start;
g_img_file_replace[i].FileSizeBytes = Sectors * 2048;
@@ -1627,7 +1627,7 @@ STATIC EFI_STATUS EFIAPI ventoy_wrapper_file_open
g_img_file_replace[i].BlockIoSectorStart, Sectors, Sectors * 2048);
sleep(3);
}
return Status;
}
}
@@ -1648,7 +1648,7 @@ EFI_STATUS EFIAPI ventoy_wrapper_open_volume
)
{
EFI_STATUS Status = EFI_SUCCESS;
Status = g_original_open_volume(This, Root);
if (!EFI_ERROR(Status))
{
@@ -1685,10 +1685,10 @@ STATIC EFI_STATUS EFIAPI ventoy_wrapper_read_key_ex
KeyData->Key.UnicodeChar = 0;
KeyData->KeyState.KeyShiftState = 0;
KeyData->KeyState.KeyToggleState = 0;
return EFI_SUCCESS;
}
return g_org_read_key_ex(This, KeyData);
}
@@ -1725,7 +1725,7 @@ EFI_STATUS ventoy_hook_keyboard_start(VOID)
g_org_read_key = gST->ConIn->ReadKeyStroke;
gST->ConIn->ReadKeyStroke = ventoy_wrapper_read_key;
return EFI_SUCCESS;
}
@@ -1763,7 +1763,7 @@ STATIC EFI_STATUS EFIAPI ventoy_wrapper_locate_handle
EFI_STATUS Status = EFI_SUCCESS;
Status = g_org_locate_handle(SearchType, Protocol, SearchKey, BufferSize, Buffer);
if (EFI_SUCCESS == Status && Protocol && CompareGuid(&gEfiBlockIoProtocolGuid, Protocol))
{
for (i = 0; i < (*BufferSize) / sizeof(EFI_HANDLE); i++)
@@ -1785,7 +1785,7 @@ EFI_STATUS ventoy_hook_1st_cdrom_start(VOID)
{
g_org_locate_handle = gBS->LocateHandle;
gBS->LocateHandle = ventoy_wrapper_locate_handle;
return EFI_SUCCESS;
}
@@ -1793,7 +1793,180 @@ EFI_STATUS ventoy_hook_1st_cdrom_stop(VOID)
{
gBS->LocateHandle = g_org_locate_handle;
g_org_locate_handle = NULL;
return EFI_SUCCESS;
}
#if 0
/* For force highest resolution for Windows/WinPE */
#endif
STATIC UINT32 g_org_mode_num = 0;
STATIC EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE g_org_set_mode = NULL;
STATIC EFI_STATUS EFIAPI ventoy_set_mode
(
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
IN UINT32 ModeNumber
)
{
(void)This;
(void)ModeNumber;
/* Force highest resolution */
return EFI_SUCCESS;
}
STATIC EFI_STATUS EFIAPI ventoy_set_mode2
(
IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
IN UINT32 ModeNumber
)
{
UINTN Size;
EFI_STATUS rc;
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info = NULL;
/* Force >= 1024x768 */
rc = This->QueryMode(This, ModeNumber, &Size, &info);
if (rc == EFI_SUCCESS)
{
if (info->HorizontalResolution < 1024 || info->VerticalResolution < 768)
{
return EFI_SUCCESS;
}
}
return g_org_set_mode(This, ModeNumber);
}
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;
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info = NULL;
/* already hook */
if (g_org_set_mode)
{
return EFI_SUCCESS;
}
/* 1: Highest 2: 1024x768 3: >= 1024x768 */
if (LockType == 0 || LockType > 3)
{
return EFI_SUCCESS;
}
rc = gBS->LocateProtocol(&gEfiGraphicsOutputProtocolGuid, NULL, (void **)&gop);
if (rc != EFI_SUCCESS)
{
debug("Failed to locate GOP protocol");
return EFI_SUCCESS;
}
if (LockType == 3)
{
g_org_mode_num = MAX_UINT32;
g_org_set_mode = gop->SetMode;
gop->SetMode = ventoy_set_mode2;
return EFI_SUCCESS;
}
CurMode = gop->Mode->Mode;
for (i = 0 ; i < gop->Mode->MaxMode ; i++)
{
/* 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))
{
Highest = i;
x = info->HorizontalResolution;
y = info->VerticalResolution;
}
}
}
if (LockType == 1)
{
SelMode = Highest;
}
else
{
if (M1024_768 == MAX_UINT32)
{
SelMode = Highest;
}
else
{
SelMode = M1024_768;
x = 1024;
y = 768;
}
}
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;
gop->SetMode = ventoy_set_mode;
return EFI_SUCCESS;
}
EFI_STATUS ventoy_unlock_res(VOID)
{
EFI_STATUS rc;
EFI_GRAPHICS_OUTPUT_PROTOCOL *gop = NULL;
/* not hooked yet */
if (!g_org_set_mode)
{
return EFI_SUCCESS;
}
rc = gBS->LocateProtocol(&gEfiGraphicsOutputProtocolGuid, NULL, (void **)&gop);
if (rc != EFI_SUCCESS)
{
debug("Failed to locate GOP protocol");
return EFI_SUCCESS;
}
if (g_org_mode_num != MAX_UINT32)
{
g_org_set_mode(gop, g_org_mode_num);
}
gop->SetMode = g_org_set_mode;
g_org_set_mode = NULL;
return EFI_SUCCESS;
}

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

@@ -1,5 +1,5 @@
/******************************************************************************
* ventoy.c
* ventoy.c
*
* Copyright (c) 2020, longpanda <admin@ventoy.net>
*
@@ -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/>.
*
@@ -137,7 +137,7 @@ int ventoy_str_len_alnum(const char *str, int len)
{
int i;
int slen;
if (NULL == str || 0 == *str)
{
return 0;
@@ -168,7 +168,7 @@ int ventoy_str_len_alnum(const char *str, int len)
char * ventoy_str_basename(char *path)
{
char *pos = NULL;
pos = grub_strrchr(path, '/');
if (pos)
{
@@ -185,17 +185,17 @@ char * ventoy_str_basename(char *path)
int ventoy_str_chrcnt(const char *str, char c)
{
int n = 0;
if (str)
{
while (*str)
{
if (*str == c)
{
n++;
n++;
}
str++;
}
}
}
return n;
@@ -235,7 +235,7 @@ int ventoy_strncmp (const char *pattern, const char *str, grub_size_t n)
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);
}
@@ -248,13 +248,13 @@ void ventoy_debug_dump_guid(const char *prefix, grub_uint8_t *guid)
{
return;
}
debug("%s", prefix);
for (i = 0; i < 16; i++)
{
grub_printf("%02x ", guid[i]);
}
grub_printf("\n");
grub_printf("\n");
}
int ventoy_is_efi_os(void)
@@ -290,7 +290,7 @@ void ventoy_memfile_env_set(const char *prefix, const void *buf, unsigned long l
grub_snprintf(name, sizeof(name), "%s_addr", prefix);
grub_snprintf(val, sizeof(val), "0x%llx", (ulonglong)(ulong)buf);
grub_env_set(name, val);
grub_snprintf(name, sizeof(name), "%s_size", prefix);
grub_snprintf(val, sizeof(val), "%llu", len);
grub_env_set(name, val);
@@ -374,7 +374,7 @@ static int ventoy_hwinfo_init(void)
return 0;
}
static global_var_cfg g_global_vars[] =
static global_var_cfg g_global_vars[] =
{
{ "gfxmode", "1024x768", NULL },
{ ventoy_left_key, "5%", NULL },
@@ -422,20 +422,21 @@ int ventoy_global_var_init(void)
for (i = 0; g_global_vars[i].name; i++)
{
g_global_vars[i].value = grub_strdup(g_global_vars[i].defval);
ventoy_env_export(g_global_vars[i].name, g_global_vars[i].defval);
ventoy_env_export(g_global_vars[i].name, g_global_vars[i].defval);
grub_register_variable_hook(g_global_vars[i].name, ventoy_global_var_read_hook, ventoy_global_var_write_hook);
}
return 0;
}
static ctrl_var_cfg g_ctrl_vars[] =
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 },
{ 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", "3" },
{ NULL, "" }
};
static const char * ventoy_ctrl_var_read_hook(struct grub_env_var *var, const char *val)
@@ -446,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;
}
}
@@ -461,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");
}
}
@@ -479,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;

File diff suppressed because it is too large Load Diff

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/>.
*
@@ -37,6 +37,7 @@
#define VTOY_SIZE_4MB (4 * 1024 * 1024)
#define VTOY_SIZE_512KB (512 * 1024)
#define VTOY_SIZE_1KB 1024
#define VTOY_SIZE_4KB 4096
#define VTOY_SIZE_32KB (32 * 1024)
#define VTOY_SIZE_128KB (128 * 1024)
@@ -141,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;
@@ -159,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;
@@ -170,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];
@@ -205,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;
@@ -283,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;
@@ -312,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;
@@ -327,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];
@@ -396,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 */
@@ -408,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 */
@@ -418,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 */
@@ -438,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 */
@@ -464,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;
@@ -486,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 */
@@ -589,7 +590,7 @@ typedef struct _VTOY_JSON
struct _VTOY_JSON *pstChild;
JSON_TYPE enDataType;
union
union
{
char *pcStrVal;
int iNumVal;
@@ -662,6 +663,7 @@ grub_uint32_t ventoy_get_iso_boot_catlog(grub_file_t file);
int ventoy_has_efi_eltorito(grub_file_t file, grub_uint32_t sector);
grub_err_t ventoy_cmd_linux_chain_data(grub_extcmd_context_t ctxt, int argc, char **args);
grub_err_t ventoy_cmd_linux_systemd_menu(grub_extcmd_context_t ctxt, int argc, char **args);
grub_err_t ventoy_cmd_linux_initrd(grub_extcmd_context_t ctxt, int argc, char **args);
grub_err_t ventoy_cmd_linux_limine_menu(grub_extcmd_context_t ctxt, int argc, char **args);
grub_err_t ventoy_cmd_linux_locate_initrd(grub_extcmd_context_t ctxt, int argc, char **args);
grub_err_t ventoy_cmd_initrd_count(grub_extcmd_context_t ctxt, int argc, char **args);
@@ -700,7 +702,7 @@ int vtoy_json_parse_value
(
char *pcNewStart,
char *pcRawStart,
VTOY_JSON *pstJson,
VTOY_JSON *pstJson,
const char *pcData,
const char **ppcEnd
);
@@ -716,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
);
@@ -782,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)
@@ -954,7 +956,7 @@ typedef struct persistence_config
int cursel;
int backendnum;
file_fullpath *backendpath;
struct persistence_config *next;
}persistence_config;
@@ -1279,6 +1281,7 @@ typedef struct systemd_menu_ctx
{
char *dev;
char *buf;
const char *initrd_cmd;
int pos;
int len;
}systemd_menu_ctx;
@@ -1293,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

@@ -1867,7 +1867,7 @@ static int ventoy_systemd_conf_hook(const char *filename, const struct grub_dirh
ctx->pos = oldpos;
goto out;
}
vtoy_len_ssprintf(ctx->buf, ctx->pos, ctx->len, " echo \"Downloading kernel ...\"\n linux %s ", tag);
vtoy_len_ssprintf(ctx->buf, ctx->pos, ctx->len, " echo \"Loading kernel ...\"\n linux %s ", tag);
/* kernel options */
grub_memcpy(filebuf, bkbuf, file->size);
@@ -1876,7 +1876,7 @@ static int ventoy_systemd_conf_hook(const char *filename, const struct grub_dirh
/* initrd xxx xxx xxx */
vtoy_len_ssprintf(ctx->buf, ctx->pos, ctx->len, " echo \"Downloading initrd ...\"\n initrd ");
vtoy_len_ssprintf(ctx->buf, ctx->pos, ctx->len, " echo \"Loading initrd ...\"\n %s ", ctx->initrd_cmd);
grub_memcpy(filebuf, bkbuf, file->size);
tag = ventoy_systemd_conf_tag(filebuf, "initrd", 1);
while (tag)
@@ -1893,6 +1893,34 @@ out:
return 0;
}
grub_err_t ventoy_cmd_linux_initrd(grub_extcmd_context_t ctxt, int argc, char **args)
{
int i;
int pos = 0;
char *buf = NULL;
(void)ctxt;
buf = (char *)grub_malloc(VTOY_SIZE_4KB);
if (!buf)
{
return 1;
}
pos += grub_snprintf(buf + pos, VTOY_SIZE_4KB - pos, "initrd mem:%s:size:%s",
grub_env_get("ventoy_cpio_addr"), grub_env_get("ventoy_cpio_size"));
for (i = 0; i < argc; i++)
{
pos += grub_snprintf(buf + pos, VTOY_SIZE_4KB - pos, " newc:initrd%03d:%s", i + 1, args[i]);
}
grub_script_execute_sourcecode(buf);
grub_free(buf);
return 0;
}
grub_err_t ventoy_cmd_linux_systemd_menu(grub_extcmd_context_t ctxt, int argc, char **args)
{
static char *buf = NULL;
@@ -1936,6 +1964,7 @@ grub_err_t ventoy_cmd_linux_systemd_menu(grub_extcmd_context_t ctxt, int argc, c
ctx.dev = args[0];
ctx.buf = buf;
ctx.initrd_cmd = args[2] ? args[2] : "initrd";
ctx.pos = 0;
ctx.len = VTOY_LINUX_SYSTEMD_MENU_MAX_BUF;
fs->fs_dir(dev, "/loader/entries", ventoy_systemd_conf_hook, &ctx);

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/>.
*
@@ -82,7 +82,7 @@ typedef struct ventoy_image_location
/*
* disk region data (region_count)
* If the image file has more than one fragments in disk,
* If the image file has more than one fragments in disk,
* there will be more than one region data here.
*
*/
@@ -104,7 +104,7 @@ typedef struct ventoy_os_param
char vtoy_img_path[384]; // It seems to be enough, utf-8 format
grub_uint64_t vtoy_img_size; // image file size in bytes
/*
/*
* Ventoy will write a copy of ventoy_image_location data into runtime memory
* this is the physically address and length of that memory.
* Address 0 means no such data exist.
@@ -114,7 +114,7 @@ typedef struct ventoy_os_param
grub_uint64_t vtoy_img_location_addr;
grub_uint32_t vtoy_img_location_len;
/*
/*
* These 32 bytes are reserved by ventoy.
*
* vtoy_reserved[0]: vtoy_break_level
@@ -125,6 +125,7 @@ typedef struct ventoy_os_param
* vtoy_reserved[5]: vtoy_linux_remount
* vtoy_reserved[6]: vtoy_vlnk
* vtoy_reserved[7~10]: vtoy_disk_sig[4] used for vlnk
* vtoy_reserved[11]: vtoy_win_uefi_max_res
*
*/
grub_uint8_t vtoy_reserved[32]; // Internal use by ventoy
@@ -155,8 +156,8 @@ typedef struct ventoy_windows_data
typedef struct ventoy_secure_data
{
grub_uint8_t magic1[16]; /* VENTOY_GUID */
grub_uint8_t diskuuid[16];
grub_uint8_t Checksum[16];
grub_uint8_t diskuuid[16];
grub_uint8_t Checksum[16];
grub_uint8_t adminSHA256[32];
grub_uint8_t reserved[4000];
grub_uint8_t magic2[16]; /* VENTOY_GUID */
@@ -200,7 +201,7 @@ typedef struct ventoy_chain_head
grub_uint64_t virt_img_size_in_bytes;
grub_uint32_t boot_catalog;
grub_uint8_t boot_catalog_sector[2048];
grub_uint32_t img_chunk_offset;
grub_uint32_t img_chunk_num;
@@ -319,7 +320,7 @@ grub_uint64_t grub_udf_get_file_offset(grub_file_t file);
grub_uint64_t grub_udf_get_last_pd_size_offset(void);
grub_uint64_t grub_udf_get_last_file_attr_offset
(
grub_file_t file,
grub_file_t file,
grub_uint32_t *startBlock,
grub_uint64_t *fe_entry_size_offset
);

View File

@@ -33,11 +33,13 @@ echo "_vtRet1=$_vtRet1 _vtRet2=$_vtRet2 ..." >> $VTLOG
if [ $_vtRet1 -ne 0 -a $_vtRet2 -eq 0 ]; then
vtFindFlag=0
$GREP '`value from`' /usr/* -r | $AWK -F: '{print $1}' | while read vtline; do
$GREP '`value from`' /usr/* -r | $AWK -F: '{print $1}' > $VTOY_PATH/.porteus
while read vtline; do
echo "hooking $vtline ..." >> $VTLOG
$SED "s#\`value from\`#$vtPath#g" -i $vtline
vtFindFlag=1
done
done < $VTOY_PATH/.porteus
rm -f $VTOY_PATH/.porteus
if [ $vtFindFlag -eq 0 ]; then
if $GREP -q '`value from`' /linuxrc; then

View File

@@ -58,6 +58,9 @@ ventoy_get_debian_distro() {
if $GREP -q 'Tails' /etc/os-release; then
echo 'tails'; return
fi
if $GREP -q 'NAME="Kylin"' /etc/os-release; then
echo 'kylin'; return
fi
fi
if $GREP -q 'slax/' /proc/cmdline; then

View File

@@ -72,6 +72,12 @@ ventoy_udev_disk_common_hook $* "noreplace"
$BUSYBOX_PATH/mount $VTOY_DM_PATH /mnt/ventoy
#fix Oracle Linux 6.9 install issue
if $GREP -q -i 'Oracle Linux' /mnt/ventoy/.discinfo; then
ln -s /mnt/ventoy /mnt/source
fi
#
# We do a trick for rhel6 series here.
# Use /dev/$vtCheatLoop and wapper it as a removable cdrom with bind mount.

View File

@@ -25,7 +25,19 @@ fi
VTPATH_OLD=$PATH; PATH=$BUSYBOX_PATH:$VTOY_PATH/tool:$PATH
modprobe dm-mod
vtlog "Loading dax and dm-mod module ..."
$BUSYBOX_PATH/modprobe dax > /dev/null 2>&1
$BUSYBOX_PATH/modprobe dm-mod > /dev/null 2>&1
if $GREP -q 'device-mapper' /proc/devices; then
vtlog "dm-mod module check success ..."
else
vtlog "Need to extract dax and dm-mod module ..."
$VTOY_PATH/tool/zstdcat /lib/modules/$(uname -r)/drivers/dax/dax.ko.zst > $VTOY_PATH/extract_dax.ko
$BUSYBOX_PATH/insmod $VTOY_PATH/extract_dax.ko
$VTOY_PATH/tool/zstdcat /lib/modules/$(uname -r)/drivers/md/dm-mod.ko.zst > $VTOY_PATH/extract_dm_mod.ko
$BUSYBOX_PATH/insmod $VTOY_PATH/extract_dm_mod.ko
fi
wait_for_usb_disk_ready

View File

@@ -19,6 +19,8 @@
. $VTOY_PATH/hook/ventoy-os-lib.sh
$SED "/Searching/i $BUSYBOX_PATH/sh $VTOY_PATH/hook/t2/disk_hook.sh" -i /init
$SED "/disktype/i x=/dev/ventoy" -i /init
$SED "/getdevice *devicefile/i $BUSYBOX_PATH/sh $VTOY_PATH/hook/t2/disk_hook.sh" -i /init
$SED "/getdevice *devicefile/a devicefile=/dev/ventoy" -i /init

View File

@@ -67,8 +67,11 @@ set_ventoy_hook_finish() {
if [ -f /ventoy/ventoy_iso_part_dm_cmd ]; then
echo "### create iso part raw dm" >> $VTLOG
$BUSYBOX_PATH/sh /ventoy/ventoy_iso_part_dm_cmd >>$VTLOG 2>&1
$BUSYBOX_PATH/rm -f /ventoy/ventoy_iso_part_dm_cmd
$CAT $VTOY_PATH/ventoy_raw_table >> $VTLOG
echo "### iso part dm cmd" >> $VTLOG
$CAT /ventoy/ventoy_iso_part_dm_cmd >> $VTLOG
$BUSYBOX_PATH/sh /ventoy/ventoy_iso_part_dm_cmd >>$VTLOG 2>&1
#$BUSYBOX_PATH/rm -f /ventoy/ventoy_iso_part_dm_cmd
fi
}
@@ -159,17 +162,17 @@ ventoy_get_vblade_bin() {
fi
}
ventoy_find_bin_path() {
ventoy_find_bin_path() {
#must use built-in dmsetup, so first try ventoy path. Otherwise ubuntu installer unhappy. #3567
if $BUSYBOX_PATH/which "$1" > /dev/null; then
$BUSYBOX_PATH/which "$1"; return
fi
for vt_path in '/bin' '/sbin' '/usr/bin' '/usr/sbin' '/usr/local/bin' '/usr/local/sbin' '/root/bin'; do
if [ -e "$vt_path/$1" ]; then
echo "$vt_path/$1"; return
fi
done
echo ""
}
@@ -266,7 +269,9 @@ create_ventoy_device_mapper() {
fi
RAWDISKNAME=$($HEAD -n1 $VTOY_PATH/ventoy_raw_table | $AWK '{print $4}')
echo "$VT_DM_BIN create ${RAWDISKNAME#/dev/} $VTOY_PATH/ventoy_raw_table" > /ventoy/ventoy_iso_part_dm_cmd
echo "$VT_DM_BIN create ${RAWDISKNAME#/dev/} $VTOY_PATH/ventoy_raw_table" > /ventoy/ventoy_iso_part_dm_cmd
#echo "$VT_DM_BIN mknodes ${RAWDISKNAME#/dev/}" >> /ventoy/ventoy_iso_part_dm_cmd
#echo "$VT_DM_BIN ls" >> /ventoy/ventoy_iso_part_dm_cmd
}
create_persistent_device_mapper() {

View File

@@ -169,7 +169,7 @@ ventoy_get_os_type() {
echo 'debian'; return
elif $GREP -q 'Solus' /etc/os-release; then
echo 'rhel7'; return
elif $GREP -q 'openEuler' /etc/os-release; then
elif $GREP -q -i 'openEuler' /etc/os-release; then
echo 'openEuler'; return
elif $GREP -q 'fuyu' /etc/os-release; then
echo 'openEuler'; return
@@ -177,6 +177,10 @@ ventoy_get_os_type() {
echo 'deepin'; return
elif $GREP -q 'chinauos' /etc/os-release; then
echo 'deepin'; return
elif $GREP -qi 'aerynos' /etc/os-release; then
echo 'rhel7'; return
elif $GREP -qi 'ID_LIKE=debian' /etc/os-release; then
echo 'debian'; return
fi
fi
@@ -312,8 +316,8 @@ ventoy_get_os_type() {
fi
if [ -e /init ]; then
if $GREP -q -m1 'T2 SDE' /init; then
if [ -e /etc/initrd-release ]; then
if $GREP -q -m1 't2sde' /etc/initrd-release; then
echo 't2'; return
fi
fi
@@ -373,6 +377,13 @@ ventoy_get_os_type() {
echo 'openEuler'; return
fi
fi
if [ -f /etc/kylin-release ]; then
if $GREP -i -q -m1 'Kylin.*Server.* V1[1-9] ' /etc/kylin-release; then
echo 'openEuler'; return
fi
fi
if $GREP -q 'chimera' /proc/version; then
echo 'chimera'; return

View File

@@ -205,7 +205,7 @@ ventoy_get_os_type() {
echo 'debian'; return
elif $GREP -q 'Solus' /etc/os-release; then
echo 'rhel7'; return
elif $GREP -q 'openEuler' /etc/os-release; then
elif $GREP -q -i 'openEuler' /etc/os-release; then
echo 'openEuler'; return
elif $GREP -q 'fuyu' /etc/os-release; then
echo 'openEuler'; return
@@ -344,8 +344,8 @@ ventoy_get_os_type() {
fi
if [ -e /init ]; then
if $GREP -q -m1 'T2 SDE' /init; then
if [ -e /etc/initrd-release ]; then
if $GREP -q -m1 't2sde' /etc/initrd-release; then
echo 't2'; return
fi
fi

View File

@@ -11,7 +11,8 @@ Ventoy2Disk.sh CMD [ OPTION ] /dev/sdX
OPTION: (optional)
-r SIZE_MB preserve some space at the bottom of the disk (only for install)
-s enable secure boot support (default is disabled)
-s enable secure boot support (default is enabled)
-S disable secure boot support (default is enabled)
-g use GPT partition style, default is MBR style (only for install)
Please refer https://www.ventoy.net/en/doc_start.html for details.

View File

@@ -21,7 +21,7 @@ elif uname -m | grep -E -q 'mips64'; then
else
export TOOLDIR=i386
fi
export PATH="./tool/$TOOLDIR:$PATH"
export PATH="$OLDDIR/tool/$TOOLDIR:$PATH"
echo ''
@@ -61,6 +61,24 @@ if [ $? -eq 0 ]; then
done
fi
#use static linked mkexfatfs for musl-libc environment
if [ -f mkexfatfs_static ]; then
if ldd --version 2>&1 | grep -qi musl; then
mv mkexfatfs mkexfatfs_shared
mv mkexfatfs_static mkexfatfs
else
if ./mkexfatfs -V > /dev/null 2>&1; then
echo "mkexfatfs can not run, check static version" >> ./log.txt
else
if ./mkexfatfs_static -V > /dev/null 2>&1; then
echo "Use static version of mkexfatfs" >> ./log.txt
mv mkexfatfs mkexfatfs_shared
mv mkexfatfs_static mkexfatfs
fi
fi
fi
fi
cd ../../
chmod +x -R ./tool/$TOOLDIR

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

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,13 +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_SET3 {
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 "$VTLANG_RETURN_PREVIOUS" --class=vtoyret VTOY_RET {
echo "Return ..."
@@ -36,6 +36,42 @@ 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="[ ]"
set vtActive3="[ ]"
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="[*]"
elif [ "$VTOY_WIN_UEFI_RES_LOCK" = "3" ]; then
set vtActive3="[*]"
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 "$vtActive3 $VTLANG_UEFI_RES_LOCK_BE1024_768" --class=debug_uefi_res_lock3 --class=F5tool VTOY_RUN_SET_3_1 {
set VTOY_WIN_UEFI_RES_LOCK=3
}
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

@@ -70,6 +70,12 @@ function ventoy_acpi_param {
fi
}
function vt_vcfg_pre_proc {
vt_img_sector "${vtoy_iso_part}${vt_chosen_path}"
vt_load_cpio $vtoy_path "${vt_chosen_path}" ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
vt_trailer_cpio $vtoy_iso_part "$vt_chosen_path"
}
function ventoy_vcfg_proc {
if vt_check_custom_boot "${1}" vt_vcfg; then
set vtoy_chosen_path="${1}"
@@ -422,6 +428,16 @@ function distro_specify_initrd_file_phase2 {
vt_linux_specify_initrd_file /initramfs-linux.img
elif [ -f (loop)/boot/isolinux/initrd.gz ]; then
vt_linux_specify_initrd_file /boot/isolinux/initrd.gz
elif vt_str_begin "$vt_volume_id" "AERYNOS"; then
vt_vcfg_pre_proc
loopback va "${vtoy_iso_part}${vt_chosen_path}"
loopback vb (va)/EFI/Boot/efiboot.img
set root=(vb)
vt_systemd_menu (vb) vt_sys_menu_mem vt_linux_initrd
configfile "mem:${vt_sys_menu_mem_addr}:size:${vt_sys_menu_mem_size}"
fi
}
@@ -2433,7 +2449,7 @@ function mimg_common_menuentry {
#############################################################
#############################################################
set VENTOY_VERSION="1.1.09"
set VENTOY_VERSION="1.1.12"
#ACPI not compatible with Window7/8, so disable by default
set VTOY_PARAM_NO_ACPI=1

View File

@@ -0,0 +1,19 @@
L - انتخاب زبان
F1 - نمایش راهنما
F2 - مرور و بوت کردن فایل‌ها در دیسک محلی
F3 - تغییر حالت منو بین درختی <-> لیستی
F4 - بوت کردن ویندوز/لینوکس روی دیسک محلی
F5 - ابزار های کمکی
F6 - بارگیری منوی سفارشی Grub2
F7 - تغییر حالت بین حالت GUI <-> حالت TEXT
m/Ctrl+m - اعتبارسنجی فایل ایمیج (md5/sha1/sha256/sha512)
d/Ctrl+d - حالت Memdisk (فقط برای ایمیج های کوچک WinPE/LiveCD ISO/IMG)
w/Ctrl+w - حالت WIMBOOT (فقط برای فایل های ایزو Windows/WinPE)
r/Ctrl+r - حالت Grub2 (فقط برای برخی از توزیع های لینوکس)
i/Ctrl+i - حالت سازگار (فقط برای مشکل زدایی)
u/Ctrl+u - بارگیری درایور ISO EFI (تنها برای مشکل زدایی، نمیتوان به صورت رسمی استفاده کرد)
جهت بازگشت دکمه ESC را کلیک کنید ......

View File

@@ -7,10 +7,10 @@ F5 - 유틸리티
F6 - 사용자 지정 Grub2 메뉴 불러오기
F7 - 그래픽 모드 <-> 텍스트 모드 간에 전환
m/Ctrl+m - 체크섬 이미지 파일 (md5/sha1/sha256/sha512)
d/Ctrl+d - Memdisk 모드 (작은 WinPE/LiveCD ISO/IMG 전용)
w/Ctrl+w - WIMBOOT 모드 (표준 Windows/WinPE ISO 전용)
r/Ctrl+r - Grub2 모드 (일 Linux 배포판에만 해당)
m/Ctrl+m - 이미지 파일 체크섬 (md5/sha1/sha256/sha512)
d/Ctrl+d - Memdisk 모드 (작은 WinPE/LiveCD ISO/IMG에만 해당)
w/Ctrl+w - WIMBOOT 모드 (표준 Windows/WinPE ISO에만 해당)
r/Ctrl+r - Grub2 모드 (일 Linux 배포판에만 해당)
i/Ctrl+i - 호환 모드 (디버그 전용, 공식적으로 사용할 수 없음)
u/Ctrl+u - ISO EFI 드라이버 불러오기 (디버그 전용, 공식적으로 사용할 수 없음)

View File

@@ -0,0 +1,19 @@
L - Londako Olulimi
F1 - Laga obuyambi
F2 - Nnoonya era kozesa Fayiro eziri ku Disk
F3 - Kyusa endabika ya Menu wakati wa Masaasana (Treeview) ne y'olukalala (ListView)
F4 - Ttandika Windows/Linux ku disk erimu
F5 - Ebikozesebwa ebirala
F6 - Kozesa Grub2 menu gyewerobozza
F7 - Okukyuusa okuva mu Bifaananyi (GUI Mode) <-> Bigambo (TEXT Mode)
m/Ctrl+m - Okukebera Checksum image files (md5/sha1/sha256/sha512)
d/Ctrl+d - Memdisk Mode (Ya WinPE/LiveCD ISO/IMG entono zokka)
w/Ctrl+w - WIMBOOT Mode (Ya Windows/WinPE ISO zokka)
r/Ctrl+r - Grub2 Mode (Ya nkola za Linux ezimu)
i/Ctrl+i - Compatible Mode (Ya kutereeza kwokka (debugging))
u/Ctrl+u - Kozesa ISO EFI driver (Ya kutereeza kwokka (debugging), tesobola kukozesebwa mu butongole)
nyiga ESC to okudda emabega ......

View File

@@ -1,18 +1,18 @@
L - Sele<EFBFBD><EFBFBD>o de Idiomas
F1 - Exibir informa<EFBFBD><EFBFBD>es de ajuda
L - Seleção de Idiomas
F1 - Exibir informações de ajuda
F2 - Explorar e inicializar os arquivos no disco local
F3 - Trocar o modo do menu entre Visualiza<EFBFBD><EFBFBD>o em <EFBFBD>rvore <-> Visualiza<EFBFBD><EFBFBD>o em Lista
F3 - Trocar o modo do menu entre Visualização em Árvore <-> Visualização em Lista
F4 - Inicializar o Windows/Linux no disco local
F5 - Utilit<EFBFBD>rios
F5 - Utilitários
F6 - Carregar o Menu Personalizado do Grub2
F7 - Trocar entre o Modo GUI <-> Modo TEXTO
m/Ctrl+m - Checksum dos arquivos de imagem (md5/sha1/sha256/sha512)
d/Ctrl+d - Modo Memdisk (S<EFBFBD> pros pequenos WinPE/LiveCD ISO/IMG)
w/Ctrl+w - Modo WIMBOOT (S<EFBFBD> pra arquivos ISO do Windows/WinPE)
r/Ctrl+r - Modo Grub2 (S<EFBFBD> pra algumas distros do Linux)
i/Ctrl+i - Modo Compat<EFBFBD>vel (S<EFBFBD> pra debugging)
u/Ctrl+u - Carregar o driver EFI da ISO (S<EFBFBD> pra debugging, n<EFBFBD>o pode ser usado oficialmente)
d/Ctrl+d - Modo Memdisk (Só pros pequenos WinPE/LiveCD ISO/IMG)
w/Ctrl+w - Modo WIMBOOT (Só pra arquivos ISO do Windows/WinPE)
r/Ctrl+r - Modo Grub2 (Só pra algumas distros do Linux)
i/Ctrl+i - Modo Compatível (Só pra debugging)
u/Ctrl+u - Carregar o driver EFI da ISO (Só pra debugging, não pode ser usado oficialmente)

View File

@@ -0,0 +1,19 @@
L - Izbira jezika
F1 - Prikaz informacij o pomoči
F2 - Brskanje in zagon datotek na lokalnem disku
F3 - Preklop med načinom menija Treeview <-> ListView
F4 - Zagon Windows/Linux na lokalnem disku
F5 - Pripomočki
F6 - Naložitev prilagojenega menija Grub2
F7 - Preklop med načinom GUI <-> načinom TEXT
m/Ctrl+m - Preveri kontrolno vsoto slikovnih datotek (md5/sha1/sha256/sha512)
d/Ctrl+d - Način Memdisk (samo za majhne WinPE/LiveCD ISO/IMG)
w/Ctrl+w - Način WIMBOOT (samo za datoteke Windows/WinPE ISO)
r/Ctrl+r Način Grub2 (samo za nekatere distribucije Linux)
i/Ctrl+i Združljiv način (samo za odpravljanje napak)
u/Ctrl+u Naloži ISO EFI gonilnik (samo za odpravljanje napak, uradno se ne more uporabljati)
Pritisnite ESC za vrnitev ......

View File

@@ -40,17 +40,17 @@ menuentry "$VTLANG_HWINFO" --class=debug_hwinfo --class=F5tool {
echo "Physical RAM $grub_total_ram MB"
echo ""
echo "Manufacture $system_vendor"
echo "Manufacturer $system_vendor"
echo "Product Name $system_product"
echo "Version $system_version"
echo ""
echo "Board Manufacture $board_vendor"
echo "Board Manufacturer $board_vendor"
echo "Board Name $board_product"
echo "Board Version $board_version"
echo ""
echo "BIOS Manufacture $bios_vendor"
echo "BIOS Manufacturer $bios_vendor"
echo "BIOS Version $bios_ver"
echo "BIOS Date $bios_date"
echo "BIOS ROM Size $bios_size"

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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -87,7 +87,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -0,0 +1,99 @@
{
"VTLANG_LANGUAGE_NAME": "Persian (فارسی)",
"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",
"VTLANG_LB_SBOOT_HDD1": "بوت اولین دیسک محلی",
"VTLANG_LB_SBOOT_HDD2": "بوت دومین دیسک محلی",
"VTLANG_LB_SBOOT_HDD3": "بوت سومین دیسک محلی",
"VTLANG_LB_SBOOT_X64EFI": "جستجو و بوت BOOTX64.EFI",
"VTLANG_LB_SBOOT_IA32EFI": "جستجو و بوت BOOTIA32.EFI",
"VTLANG_LB_SBOOT_AA64EFI": "جستجو و بوت BOOTAA64.EFI",
"VTLANG_LB_SBOOT_XORBOOT": "جستجو و بوت xorboot",
"VTLANG_FILE_CHKSUM": "اعتبارسنجی فایل",
"VTLANG_CHKSUM_MD5_CALC": "محاسبه md5sum",
"VTLANG_CHKSUM_SHA1_CALC": "محاسبه sha1sum",
"VTLANG_CHKSUM_SHA256_CALC": "محاسبه sha256sum",
"VTLANG_CHKSUM_SHA512_CALC": "محاسبه sha512sum",
"VTLANG_CHKSUM_MD5_CALC_CHK": "محاسبه و بررسی md5sum",
"VTLANG_CHKSUM_SHA1_CALC_CHK": "محاسبه و بررسی sha1sum",
"VTLANG_CHKSUM_SHA256_CALC_CHK": "محاسبه و بررسی sha256sum",
"VTLANG_CHKSUM_SHA512_CALC_CHK": "محاسبه و بررسی sha512sum",
"VTLANG_POWER": "انرژی",
"VTLANG_POWER_REBOOT": "ریبوت",
"VTLANG_POWER_HALT": "توقف",
"VTLANG_POWER_BOOT_EFIFW": "ریبوت به تنظیمات EFI",
"VTLANG_KEYBRD_LAYOUT": "نمایه صفحه کلید",
"VTLANG_HWINFO": "اطلاعات سخت افزار",
"VTLANG_RESOLUTION_CFG": "پیکربندی رزولوشن",
"VTLANG_SCREEN_MODE": "حالت نمایش صفحه",
"VTLANG_SCREEN_TEXT_MODE": "حالت متنی اجباری",
"VTLANG_SCREEN_GUI_MODE": "حالت گرافیکی اجباری",
"VTLANG_THEME_SELECT": "انتخاب تم",
"VTLANG_UEFI_UTIL": "ابزار های کمکی Ventoy UEFI",
"VTLANG_UTIL_SHOW_EFI_DRV": "نمایش درایور های EFI",
"VTLANG_UTIL_FIX_BLINIT_FAIL": "رفع خطای Windows BlinitializeLibrary",
"VTLANG_JSON_CHK_JSON": "بررسی پیکربندی json افزونه (ventoy.json)",
"VTLANG_JSON_CHK_CONTROL": "بررسی پیکربندی افزونه کنترل سراسری",
"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_INJECTION": "بررسی پیکربندی افزونه تزریق",
"VTLANG_JSON_CHK_AUTO_MEMDISK": "بررسی پیکربندی افزونه memdisk خودکار",
"VTLANG_JSON_CHK_IMG_LIST": "بررسی پیکربندی افزونه لیست ایمیج ها",
"VTLANG_JSON_CHK_IMG_BLIST": "بررسی پیکربندی افزونه لیست سیاه ایمیج",
"VTLANG_JSON_CHK_CONF_REPLACE": "بررسی پیکربندی افزونه جایگزینی فایل پیکربندی بوت",
"VTLANG_JSON_CHK_DUD": "بررسی پیکربندی افزونه dud",
"VTLANG_JSON_CHK_PASSWORD": "بررسی پیکربندی افزونه کلمه عبور",
"VTLANG_NORMAL_MODE": "بوت در حالت عادی",
"VTLANG_WIMBOOT_MODE": "بوت در حالت wimboot",
"VTLANG_GRUB2_MODE": "بوت در حالت grub2",
"VTLANG_MEMDISK_MODE": "بوت در حالت memdisk",
"VTLANG_RET_TO_LISTVIEW": "بازگشت به نمای لیستی",
"VTLANG_RET_TO_TREEVIEW": "بازگشت به نمای درختی",
"VTLANG_NO_AUTOINS_SCRIPT": "بوت بدون قالب نصب خودکار",
"VTLANG_AUTOINS_USE": "بوت با",
"VTLANG_NO_PERSIST": "بوت بدون تداوم",
"VTLANG_PERSIST_USE": "بوت با",
"VTLANG_BROWER_RETURN": "بازگشت",
"VTLANG_ENTER_EXIT": "جهت خروج دکمه Enter را فشار دهید",
"VTLANG_ENTER_REBOOT": "جهت ریبوت دکمه Enter را فشار دهید",
"VTLANG_ENTER_CONTINUE": "جهت ادامه دکمه Enter را فشار دهید",
"VTLANG_CTRL_TEMP_SET": "تنظیمات کنترل موقت",
"VTLANG_WIN11_BYPASS_CHECK": "دور زدن بررسی CPU/TPM/SecureBoot در هنگام نصب ویندوز 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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -43,7 +43,7 @@
"VTLANG_THEME_SELECT": "Pilih Tema",
"VTLANG_UEFI_UTIL": "Ventoy UEFI Utilities",
"VTLANG_UEFI_UTIL": "Utilitas UEFI Ventoy",
"VTLANG_UTIL_SHOW_EFI_DRV": "Tampilkan Driver EFI",
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Memperbaiki Kegagalan Windows BlinitializeLibrary",
@@ -80,14 +80,20 @@
"VTLANG_BROWER_RETURN": "Kembali",
"VTLANG_ENTER_EXIT": "tekan tombol Enter untuk keluar",
"VTLANG_ENTER_REBOOT": "tekan tombol Enter untuk reboot",
"VTLANG_ENTER_REBOOT": "tekan tombol Enter untuk memulai ulang",
"VTLANG_ENTER_CONTINUE": "tekan tombol Enter untuk melanjutkan",
"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": "Pengaturan Kontrol Sementara",
"VTLANG_WIN11_BYPASS_CHECK": "Melewati pemeriksaaan CPU/TPM/SecureBoot ketika memasang Windows 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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -0,0 +1,99 @@
{
"VTLANG_LANGUAGE_NAME": "English (English)",
"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",
"VTLANG_LB_SBOOT_WINDOWS": "Search and boot Windows",
"VTLANG_LB_SBOOT_G4D": "Search and boot Grub4dos",
"VTLANG_LB_SBOOT_HDD1": "Boot the 1st local disk",
"VTLANG_LB_SBOOT_HDD2": "Boot the 2nd local disk",
"VTLANG_LB_SBOOT_HDD3": "Boot the 3rd local disk",
"VTLANG_LB_SBOOT_X64EFI": "Search and boot BOOTX64.EFI",
"VTLANG_LB_SBOOT_IA32EFI": "Search and boot BOOTIA32.EFI",
"VTLANG_LB_SBOOT_AA64EFI": "Search and boot BOOTAA64.EFI",
"VTLANG_LB_SBOOT_XORBOOT": "Search and boot xorboot",
"VTLANG_FILE_CHKSUM": "File checksum",
"VTLANG_CHKSUM_MD5_CALC": "Calculate md5sum",
"VTLANG_CHKSUM_SHA1_CALC": "Calculate sha1sum",
"VTLANG_CHKSUM_SHA256_CALC": "Calculate sha256sum",
"VTLANG_CHKSUM_SHA512_CALC": "Calculate sha512sum",
"VTLANG_CHKSUM_MD5_CALC_CHK": "Calculate and check md5sum",
"VTLANG_CHKSUM_SHA1_CALC_CHK": "Calculate and check sha1sum",
"VTLANG_CHKSUM_SHA256_CALC_CHK": "Calculate and check sha256sum",
"VTLANG_CHKSUM_SHA512_CALC_CHK": "Calculate and check sha512sum",
"VTLANG_POWER": "Power",
"VTLANG_POWER_REBOOT": "Reboot",
"VTLANG_POWER_HALT": "Halt",
"VTLANG_POWER_BOOT_EFIFW": "Reboot to EFI setup",
"VTLANG_KEYBRD_LAYOUT": "Keyboard Layouts",
"VTLANG_HWINFO": "Hardware Information",
"VTLANG_RESOLUTION_CFG": "Resolution Configuration",
"VTLANG_SCREEN_MODE": "Screen Display Mode",
"VTLANG_SCREEN_TEXT_MODE": "Force Text Mode",
"VTLANG_SCREEN_GUI_MODE": "Force Graphics Mode",
"VTLANG_THEME_SELECT": "Theme Select",
"VTLANG_UEFI_UTIL": "Ventoy UEFI Utilities",
"VTLANG_UTIL_SHOW_EFI_DRV": "Show EFI Drivers",
"VTLANG_UTIL_FIX_BLINIT_FAIL": "Fixup Windows BlinitializeLibrary Failure",
"VTLANG_JSON_CHK_JSON": "Check plugin json configuration (ventoy.json)",
"VTLANG_JSON_CHK_CONTROL": "Check global control plugin configuration",
"VTLANG_JSON_CHK_THEME": "Check theme plugin configuration",
"VTLANG_JSON_CHK_AUTOINS": "Check auto install plugin configuration",
"VTLANG_JSON_CHK_PERSIST": "Check persistence plugin configuration",
"VTLANG_JSON_CHK_MENU_ALIAS": "Check menu alias plugin configuration",
"VTLANG_JSON_CHK_MENU_TIP": "Check menu tip plugin configuration",
"VTLANG_JSON_CHK_MENU_CLASS": "Check menu class plugin configuration",
"VTLANG_JSON_CHK_INJECTION": "Check injection plugin configuration",
"VTLANG_JSON_CHK_AUTO_MEMDISK": "Check auto memdisk plugin configuration",
"VTLANG_JSON_CHK_IMG_LIST": "Check image list plugin configuration",
"VTLANG_JSON_CHK_IMG_BLIST": "Check image blacklist plugin configuration",
"VTLANG_JSON_CHK_CONF_REPLACE": "Check boot conf replace plugin configuration",
"VTLANG_JSON_CHK_DUD": "Check dud plugin configuration",
"VTLANG_JSON_CHK_PASSWORD": "Check password plugin configuration",
"VTLANG_NORMAL_MODE": "Boot in normal mode",
"VTLANG_WIMBOOT_MODE": "Boot in wimboot mode",
"VTLANG_GRUB2_MODE": "Boot in grub2 mode",
"VTLANG_MEMDISK_MODE": "Boot in memdisk mode",
"VTLANG_RET_TO_LISTVIEW": "Return to ListView",
"VTLANG_RET_TO_TREEVIEW": "Return to TreeView",
"VTLANG_NO_AUTOINS_SCRIPT": "Boot without auto installation template",
"VTLANG_AUTOINS_USE": "Boot with",
"VTLANG_NO_PERSIST": "Boot without persistence",
"VTLANG_PERSIST_USE": "Boot with",
"VTLANG_BROWER_RETURN": "Return",
"VTLANG_ENTER_EXIT": "press Enter key to exit",
"VTLANG_ENTER_REBOOT": "press Enter key to reboot",
"VTLANG_ENTER_CONTINUE": "press Enter key to continue",
"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_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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -88,6 +88,12 @@
"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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 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": "UEFI启动 Windows/WinPE 时锁定分辨率",
"VTLANG_UEFI_RES_LOCK_NONE": "不锁定",
"VTLANG_UEFI_RES_LOCK_MAX": "锁定最高分辨率",
"VTLANG_UEFI_RES_LOCK_1024_768": "锁定 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_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": "Fixed 1024 x 768",
"VTLANG_UEFI_RES_LOCK_BE1024_768": "At least 1024 x 768",
"MENU_STR_XXX": ""
}

View File

@@ -0,0 +1,38 @@
#!/bin/sh
if [ "$(id -u)" -ne 0 ]; then
echo "Please run with sudo ..."
exit 1
fi
oldpwd=$(pwd)
VPART=""
if dmsetup -h > /dev/null 2>&1; then
VPART_MAJOR_MINOR=$(dmsetup table ventoy | head -n 1 | awk '{print $4}')
cd /sys/class/block/
for t in *; do
if grep -q "^${VPART_MAJOR_MINOR}$" $t/dev; then
VPART=$t
echo 0 $(cat /sys/class/block/$VPART/size) linear /dev/$VPART 0 | dmsetup create $VPART
dmsetup mknodes "$VPART" > /dev/null 2>&1
break
fi
done
cd $oldpwd
if [ -z "$VPART" ]; then
echo "$VPART_MAJOR_MINOR not found"
dmsetup ls; dmsetup info ventoy; dmsetup table ventoy
exit 1
else
if [ ! -b "/dev/mapper/$VPART" ]; then
udevadm trigger --type=devices --action=add > /dev/null 2>&1
udevadm settle > /dev/null 2>&1
fi
echo "Create /dev/mapper/$VPART success"
fi
else
echo "dmsetup program not avaliable"
exit 1
fi

View File

@@ -60,7 +60,7 @@ check_tool_work_ok() {
return
fi
if mkexfatfs -V > /dev/null; then
if mkexfatfs -V > /dev/null; then
vtdebug "mkexfatfs test ok ..."
else
vtdebug "mkexfatfs test fail ..."
@@ -341,6 +341,7 @@ EOF
udevadm trigger --name-match=$DISK >/dev/null 2>&1
partprobe >/dev/null 2>&1
partx -u $DISK >/dev/null 2>&1
sleep 3
echo "Done"
@@ -458,6 +459,7 @@ format_ventoy_disk_gpt() {
udevadm trigger --name-match=$DISK >/dev/null 2>&1
partprobe >/dev/null 2>&1
partx -u $DISK >/dev/null 2>&1
sleep 3
echo "Done"

Binary file not shown.

Binary file not shown.

View File

@@ -126,6 +126,7 @@ mkdir -p $tmpmnt/tool
dd status=none bs=1024 count=16 if=./tool/i386/vtoycli of=$tmpmnt/tool/mount.exfat-fuse_i386
dd status=none bs=1024 count=16 if=./tool/x86_64/vtoycli of=$tmpmnt/tool/mount.exfat-fuse_x86_64
dd status=none bs=1024 count=16 if=./tool/aarch64/vtoycli of=$tmpmnt/tool/mount.exfat-fuse_aarch64
cp -a ./tool/create_ventoy_iso_part_dm.sh $tmpmnt/tool/
rm -f $tmpmnt/grub/i386-pc/*.img

View File

@@ -63,6 +63,71 @@
"STR_4KN_UNSUPPORTED":"Currently Ventoy does not support 4K native devices.",
"STRXXX":""
},
{
"name": "Urdu (اردو)",
"FontFamily": "Noto Nastaliq Urdu",
"FontSize": 16,
"Author": "Muhammad Ramzan",
"STR_ERROR": "غلطی",
"STR_WARNING": "انتباہ",
"STR_INFO": "معلومات",
"STR_INCORRECT_DIR": "براہ کرم درست ڈائریکٹری میں چلائیں!",
"STR_INCORRECT_TREE_DIR": "یہاں نہ چلائیں، براہ کرم ریلیز پیکیج ڈاؤن لوڈ کریں اور وہاں چلائیں۔",
"STR_DEVICE": "ڈیوائس",
"STR_LOCAL_VER": "پیکج میں وینٹوی",
"STR_DISK_VER": "ڈیوائس میں وینٹوی",
"STR_STATUS": "اسٹیٹس - تیار",
"STR_INSTALL": "انسٹال کریں",
"STR_UPDATE": "اپڈیٹ کریں",
"STR_UPDATE_TIP": "اپگریڈ محفوظ ہے، ISO فائلز تبدیل نہیں ہوں گی۔#@کیا آپ جاری رکھنا چاہتے ہیں؟",
"STR_INSTALL_TIP": "ڈیوائس فارمیٹ ہو جائے گا اور تمام ڈیٹا ضائع ہو جائے گا۔#@کیا آپ جاری رکھنا چاہتے ہیں؟",
"STR_INSTALL_TIP2": "ڈیوائس فارمیٹ ہو جائے گا اور تمام ڈیٹا ضائع ہو جائے گا۔#@کیا آپ واقعی جاری رکھنا چاہتے ہیں؟ (دوبارہ تصدیق)",
"STR_INSTALL_SUCCESS": "مبارک ہو!#@وینٹوی کامیابی سے ڈیوائس پر انسٹال ہو گیا ہے۔",
"STR_INSTALL_FAILED": "انسٹالیشن کے دوران غلطی پیش آئی۔ دوبارہ USB لگائیں اور کوشش کریں۔ تفصیلات کے لیے log.txt چیک کریں۔ اگر مسئلہ برقرار رہے تو سرکاری ویب سائٹ کے FAQ دیکھیں۔",
"STR_UPDATE_SUCCESS": "مبارک ہو!#@وینٹوی کامیابی سے ڈیوائس پر اپڈیٹ ہو گیا ہے۔",
"STR_UPDATE_FAILED": "اپڈیٹ کے دوران غلطی پیش آئی۔ دوبارہ USB لگائیں اور کوشش کریں۔ تفصیلات کے لیے log.txt چیک کریں۔ اگر مسئلہ برقرار رہے تو سرکاری ویب سائٹ کے FAQ دیکھیں۔",
"STR_WAIT_PROCESS": "ایک عمل جاری ہے، براہ کرم انتظار کریں...",
"STR_MENU_OPTION": "اختیار",
"STR_MENU_SECURE_BOOT": "سکیور بوٹ سپورٹ",
"STR_MENU_PART_CFG": "پارٹیشن کنفیگریشن",
"STR_BTN_OK": "ٹھیک ہے",
"STR_BTN_CANCEL": "منسوخ کریں",
"STR_PRESERVE_SPACE": "ڈسک کے آخر میں کچھ جگہ محفوظ کریں",
"STR_SPACE_VAL_INVALID": "محفوظ جگہ کے لیے غلط ویلیو",
"STR_MENU_CLEAR": "وینٹوی ہٹائیں",
"STR_CLEAR_SUCCESS": "وینٹوی کامیابی سے ڈیوائس سے ہٹا دیا گیا ہے۔",
"STR_CLEAR_FAILED": "وینٹوی کو ہٹاتے وقت غلطی پیش آئی۔ دوبارہ USB لگائیں اور کوشش کریں۔ تفصیلات کے لیے log.txt چیک کریں۔",
"STR_MENU_PART_STYLE": "پارٹیشن اسٹائل",
"STR_DISK_2TB_MBR_ERROR": "2TB سے بڑی ڈیوائس کے لیے GPT منتخب کریں",
"STR_SHOW_ALL_DEV": "تمام ڈیوائسز دکھائیں",
"STR_PART_ALIGN_4KB": "پارٹیشنز کو 4KB کے ساتھ سیدھ میں رکھیں",
"STR_WEB_COMMUNICATION_ERR": "کمیونیکیشن ایرر:",
"STR_WEB_REMOTE_ABNORMAL": "کمیونیکیشن ایرر: ریموٹ ایرر",
"STR_WEB_REQUEST_TIMEOUT": "کمیونیکیشن ایرر: ریکویسٹ کا وقت ختم ہو گیا",
"STR_WEB_SERVICE_UNAVAILABLE": "کمیونیکیشن ایرر: سروس دستیاب نہیں",
"STR_WEB_TOKEN_MISMATCH": "ڈیمن اسٹیٹس اپڈیٹ ہو گیا، بعد میں دوبارہ کوشش کریں۔",
"STR_WEB_SERVICE_BUSY": "سروس مصروف ہے، بعد میں دوبارہ کوشش کریں۔",
"STR_MENU_VTSI_CREATE": "VTSI فائل بنائیں",
"STR_VTSI_CREATE_TIP": "یہ عمل ڈیوائس پر کچھ نہیں لکھے گا، صرف VTSI فائل بنائے گا۔#@کیا آپ جاری رکھنا چاہتے ہیں؟",
"STR_VTSI_CREATE_SUCCESS": "VTSI فائل کامیابی سے بن گئی!#@آپ Rufus(3.15+) کا استعمال کر کے اسے ڈیوائس پر لکھ سکتے ہیں تاکہ وینٹوی انسٹال مکمل ہو سکے۔",
"STR_VTSI_CREATE_FAILED": "VTSI فائل بنانے میں ناکام۔",
"STR_MENU_PART_RESIZE": "ڈیٹا محفوظ انسٹالیشن",
"STR_PART_RESIZE_TIP": "وینٹوی ممکن ہو تو ڈیٹا محفوظ انسٹالیشن کرے گا۔#@کیا آپ جاری رکھنا چاہتے ہیں؟",
"STR_PART_RESIZE_SUCCESS": "مبارک ہو!#@وینٹوی کی ڈیٹا محفوظ انسٹالیشن کامیابی سے مکمل ہو گئی۔",
"STR_PART_RESIZE_FAILED": "ڈیٹا محفوظ انسٹالیشن ناکام ہو گئی، تفصیلات کے لیے log.txt چیک کریں۔",
"STR_PART_RESIZE_UNSUPPORTED": "وینٹوی نے انسٹالیشن روک دی کیونکہ کچھ شرائط پوری نہیں ہو سکیں۔ تفصیلات کے لیے log.txt چیک کریں۔",
"STR_INSTALL_YES_TIP1": "انتباہ: ڈیٹا ضائع ہو جائے گا!",
"STR_INSTALL_YES_TIP2": "براہ کرم نیچے ٹیکسٹ باکس میں YES لکھیں تاکہ تصدیق ہو سکے کہ آپ اپگریڈ کی بجائے نیا انسٹال کرنا چاہتے ہیں۔",
"STR_PART_VENTOY_FS": "وینٹوی پارٹیشن کے لیے فائل سسٹم",
"STR_PART_FS": "فائل سسٹم",
"STR_PART_CLUSTER": "کلسٹر سائز",
"STR_PART_CLUSTER_DEFAULT": "سسٹم کا ڈیفالٹ ویلیو",
"STR_DONATE": "عطیہ کریں",
"STR_4KN_UNSUPPORTED": "فی الحال وینٹوی 4K نیٹو ڈیوائسز کو سپورٹ نہیں کرتا۔",
"STRXXX": ""
},
{
"name":"Azerbaijani (Azərbaycanca)",
@@ -649,6 +714,71 @@
"STRXXX":""
},
{
"name":"Slovenian (Slovenščina)",
"FontFamily":"Courier New",
"FontSize":16,
"Author":"Andrew Poženel, Urajmal",
"STR_ERROR":"Napaka",
"STR_WARNING":"Opozorilo",
"STR_INFO":"Informacija",
"STR_INCORRECT_DIR":"Prosim, zaženite program v pravilni mapi!",
"STR_INCORRECT_TREE_DIR":"Ne izvajajte programa tukaj, prosim prenesite izdani namestitveni paket in ga izvedite tam.",
"STR_DEVICE":"Naprava",
"STR_LOCAL_VER":"Ventoy različica",
"STR_DISK_VER":"Ventoy v napravi",
"STR_STATUS":"Stanje - PRIPRAVLJEN",
"STR_INSTALL":"Namesti",
"STR_UPDATE":"Posodobi",
"STR_UPDATE_TIP":"Nadgradnja je varna, datoteke ISO ostanejo nespremenjene.#@Nadaljuj?",
"STR_INSTALL_TIP":"Naprava bo formatirana in vsi podatki bodo izgubljeni.#@Nadaljuj?",
"STR_INSTALL_TIP2":"Naprava bo formatirana in vsi podatki bodo izgubljeni.#@Nadaljuj? (dvakrat preverite)",
"STR_INSTALL_SUCCESS":"Čestitamo!#@Ventoy je bil uspešno nameščen na napravo.",
"STR_INSTALL_FAILED":"Med namestitvijo je prišlo do napake. Ponovno vstavite USB-napravo in poskusite znova. Podrobnosti najdete v datoteki log.txt. Če napaka še vedno obstaja, si oglejte pogosta vprašanja na uradni spletni strani.",
"STR_UPDATE_SUCCESS":"Čestitamo!#@Ventoy je bil uspešno posodobljen na napravi.",
"STR_UPDATE_FAILED":"Med posodobitvijo je prišlo do napake. Ponovno vstavite USB-napravo in poskusite znova. Podrobnosti najdete v datoteki log.txt. Če se napaka ponavlja, si oglejte pogosta vprašanja na uradni spletni strani.",
"STR_WAIT_PROCESS":"Nit se izvaja, prosimo počakajte...",
"STR_MENU_OPTION":"Možnost",
"STR_MENU_SECURE_BOOT":"Podpora za varen zagon",
"STR_MENU_PART_CFG":"Konfiguracija particije",
"STR_BTN_OK":"V redu",
"STR_BTN_CANCEL":"Prekliči",
"STR_PRESERVE_SPACE":"Ohrani nekaj prostora na koncu diska",
"STR_SPACE_VAL_INVALID":"Neveljavna vrednost za rezervirani prostor",
"STR_MENU_CLEAR":"Počisti Ventoy",
"STR_CLEAR_SUCCESS":"Ventoy je bil uspešno odstranjen iz naprave.",
"STR_CLEAR_FAILED":"Pri odstranjevanju Ventoya z diska je prišlo do napake. Ponovno vstavite USB-napravo in poskusite znova. Podrobnosti najdete v datoteki log.txt.",
"STR_MENU_PART_STYLE":"Slog particije",
"STR_DISK_2TB_MBR_ERROR":"Za naprave z več kot 2 TB izberite GPT.",
"STR_SHOW_ALL_DEV":"Pokaži vse naprave",
"STR_PART_ALIGN_4KB":"Poravnaj particije s 4 KB",
"STR_WEB_COMMUNICATION_ERR":"Napaka pri komunikaciji:",
"STR_WEB_REMOTE_ABNORMAL":"Napaka pri komunikaciji: Oddaljena napaka",
"STR_WEB_REQUEST_TIMEOUT":"Napaka pri komunikaciji: Zahteva je potekla",
"STR_WEB_SERVICE_UNAVAILABLE":"Napaka pri komunikaciji: Storitev ni na voljo",
"STR_WEB_TOKEN_MISMATCH":"Stanje ozadnega procesa je bilo posodobljeno, poskusite pozneje.",
"STR_WEB_SERVICE_BUSY":"Storitev je zasedena, prosimo poskusite kasneje.",
"STR_MENU_VTSI_CREATE":"Ustvari datoteko VTSI",
"STR_VTSI_CREATE_TIP":"Tokrat ne bo zapisoval na napravo, ampak bo samo ustvaril datoteko VTSI#@Nadaljuj?",
"STR_VTSI_CREATE_SUCCESS":"Datoteka VTSI je bila uspešno ustvarjena!#@Za namestitev Ventoya jo lahko zapišete na napravo z uporabo programa Rufus (3.15+).",
"STR_VTSI_CREATE_FAILED":"Ustvarjanje datoteke VTSI ni uspelo.",
"STR_MENU_PART_RESIZE":"Neuničujoča namestitev",
"STR_PART_RESIZE_TIP":"Ventoy bo poskusil z neuničujočo namestitvijo, če je le mogoče. #@Nadaljuj?",
"STR_PART_RESIZE_SUCCESS":"Čestitamo!#@Ventoy neuničljiva namestitev je bila uspešno zaključena.",
"STR_PART_RESIZE_FAILED":"Neuničljiva namestitev ni uspela, podrobnosti preverite v datoteki log.txt.",
"STR_PART_RESIZE_UNSUPPORTED":"Neuničljiva namestitev Ventoy se je ustavila, ker nekateri pogoji niso izpolnjeni. Podrobnosti preverite v datoteki log.txt.",
"STR_INSTALL_YES_TIP1":"Opozorilo: Podatki bodo izgubljeni!",
"STR_INSTALL_YES_TIP2":"V spodnje besedilno polje vnesite DA, da potrdite, da res želite izvesti novo namestitev namesto nadgradnje.",
"STR_PART_VENTOY_FS":"Datotečni sistem za particijo Ventoy",
"STR_PART_FS":"Datotečni sistem",
"STR_PART_CLUSTER":"Velikost gruče",
"STR_PART_CLUSTER_DEFAULT":"Privzeta sistemska vrednost",
"STR_DONATE":"Donirajte",
"STR_4KN_UNSUPPORTED":"Trenutno Ventoy ne podpira naprav z ločljivostjo 4K.",
"STRXXX":""
},
{
"name":"Turkish (Türkçe)",
"FontFamily":"Courier New",
@@ -2433,15 +2563,15 @@
"STR_MENU_PART_CFG":"Konfigurasi Partisi",
"STR_BTN_OK":"OK",
"STR_BTN_CANCEL":"Batal",
"STR_PRESERVE_SPACE":"Menyisakan sejumlah ruang penyimpanan pada disk di bawah ini",
"STR_SPACE_VAL_INVALID":"Nilai sisa ruang tidak benar",
"STR_PRESERVE_SPACE":"Pertahankan sisa ruang penyimpanan pada disk ini",
"STR_SPACE_VAL_INVALID":"Nilai sisa ruang tidak valid",
"STR_MENU_CLEAR":"Bersihkan Ventoy",
"STR_CLEAR_SUCCESS":"Ventoy telah berhasil dihapus pada perangkat ini.",
"STR_CLEAR_FAILED":"Terjadi kesalahan ketika penghapusan berlangsung. Anda perlu mencabut-pasang ulang USB dan coba lagi. Periksa berkas log.txt untuk detil.",
"STR_MENU_PART_STYLE":"Model Partisi",
"STR_DISK_2TB_MBR_ERROR":"Silakan pilih GPT untuk disk yang lebih dari 2TB",
"STR_SHOW_ALL_DEV":"Tampilkan semua perangkat",
"STR_PART_ALIGN_4KB":"Meluruskan dengan partisi 4KB",
"STR_PART_ALIGN_4KB":"Mensejajarkan dengan partisi 4KB",
"STR_WEB_COMMUNICATION_ERR":"Kesalahan komunikasi:",
"STR_WEB_REMOTE_ABNORMAL":"Kesalahan komunikasi: pengendali bermasalah",
"STR_WEB_REQUEST_TIMEOUT":"Kesalahan komunikasi: Waktu permintaan habis",
@@ -2459,9 +2589,9 @@
"STR_PART_RESIZE_UNSUPPORTED":"Pemasangan tanpa merusakkan Ventoy terhenti karena beberapa kondisi yang tidak mendukung. Periksa berkas log.txt untuk detil.",
"STR_INSTALL_YES_TIP1":"Peringatan: Data akan hilang!",
"STR_INSTALL_YES_TIP2":"Silakan ketik YES pada kotak tulis di bawah untuk mengonfirmasikan bahwa anda memang yakin melakukan pemasangan baru ketimbang memperbaruinya",
"STR_PART_VENTOY_FS":"Berkas Sistem Untuk Partisi Ventoy",
"STR_PART_FS":"Berkas Sistem",
"STR_PART_CLUSTER":"Ukuran Kelompok",
"STR_PART_VENTOY_FS":"Sistem Berkas Untuk Partisi Ventoy",
"STR_PART_FS":"Sistem Berkas",
"STR_PART_CLUSTER":"Ukuran Kluster",
"STR_PART_CLUSTER_DEFAULT":"Nilai Standar Sistem",
"STR_DONATE":"Donasi sukarela",
"STR_4KN_UNSUPPORTED":"Saat ini Ventoy tidak mendukung perangkat 4K yang asli.",
@@ -2728,72 +2858,7 @@
"STR_4KN_UNSUPPORTED":"För närvarande stöder inte Ventoy 4K-enheter.",
"STRXXX":""
},
{
"name":"Slovenian (Slovenski)",
"FontFamily":"Courier New",
"FontSize":16,
"Author":"Urajmal",
"STR_ERROR":"Napaka",
"STR_WARNING":"Opozorilo",
"STR_INFO":"Info",
"STR_INCORRECT_DIR":"Prosim izberite pravilno pot!",
"STR_INCORRECT_TREE_DIR":"Ne zaganjajte tukaj. Prosim prenesite posodobljeno verzijo in jo zaženite.",
"STR_DEVICE":"Naprava",
"STR_LOCAL_VER":"Ventoy verzija",
"STR_DISK_VER":"Ventoy na napravi",
"STR_STATUS":"Status - PRIPRAVLJEN",
"STR_INSTALL":"Namesti",
"STR_UPDATE":"Nadgradi",
"STR_UPDATE_TIP":"Varna nadgradnja. ISO datoteke ne bodo spremenjene.#@Nadaljujem?",
"STR_INSTALL_TIP":"Ta disk bo formatiran in vsi podatki bodo izbrisani.#@Nadaljujem?",
"STR_INSTALL_TIP2":"Ta disk bo formatiran in vsi podatki bodo izbrisani.#@Nadaljujem? (Druga potrditev)",
"STR_INSTALL_SUCCESS":"Čestitamo!#@Ventoy je bil uspešno nameščen na napravo.",
"STR_INSTALL_FAILED":"Med namestitvijo je prišlo do napake. Iztaknite in ponovno priklopite USB. Preverite log.txt za podrobnosti.",
"STR_UPDATE_SUCCESS":"Čestitamo!#@Ventoy na napravi je bil uspešno posodobljen.",
"STR_UPDATE_FAILED":"Prišlo je do napake med nadgradnjo. Iztaknite in ponovno priklopite USB. Preverite log.txt za podrobnosti.",
"STR_WAIT_PROCESS":"Proces teče, prosimo počakajte, ...",
"STR_MENU_OPTION":"Nastavitve",
"STR_MENU_SECURE_BOOT":"Podpora Secure Boot",
"STR_MENU_PART_CFG":"Konfiguracija particij",
"STR_BTN_OK":"Vredu",
"STR_BTN_CANCEL":"Prekliči",
"STR_PRESERVE_SPACE":"Ohrani nekaj prostora na koncu particije",
"STR_SPACE_VAL_INVALID":"Nepravilna vrednost za rezerviran prostor",
"STR_MENU_CLEAR":"Odstrani Ventoy",
"STR_CLEAR_SUCCESS":"Ventoy je bil uspešno odstranjen.",
"STR_CLEAR_FAILED":"Prišlo je do napake pri odstranjevanju Ventoy-a iz diska. Iztaknite in ponovno priklopite USB. Preverite log.txt za podrobnosti.",
"STR_MENU_PART_STYLE":"Vrsta particije",
"STR_DISK_2TB_MBR_ERROR":"Prosim izberite GPT za particije nad 2TB",
"STR_SHOW_ALL_DEV":"Pokaži vse naprave",
"STR_PART_ALIGN_4KB":"Poravnaj particije na 4KB",
"STR_WEB_COMMUNICATION_ERR":"Napaka v komunikaciji:",
"STR_WEB_REMOTE_ABNORMAL":"Napaka v komunikaciji: oddaljena težava",
"STR_WEB_REQUEST_TIMEOUT":"Napaka v komunikaciji: čas je potekel",
"STR_WEB_SERVICE_UNAVAILABLE":"Napaka v komunikaciji: storitev ni na voljo",
"STR_WEB_TOKEN_MISMATCH":"Zahteva storitve je potekla, prosim poskusite kasneje.",
"STR_WEB_SERVICE_BUSY":"Storitev je zasedena, prosim poskusite kasneje.",
"STR_MENU_VTSI_CREATE":"Ustvari VTSI datoteko",
"STR_VTSI_CREATE_TIP":"Spremembe na napravi ne bo, generirala se bo samo VTSI datoteka#@Nadaljujem?",
"STR_VTSI_CREATE_SUCCESS":"VTSI datoteka ustvarjena uspešno!#@Uporabi naj se Rufus(3.15+) za zapis na napravo in uspešno zaključeno inštalacijo Ventoy-a.",
"STR_VTSI_CREATE_FAILED":"Ustvarjanje VTSI datoteke ni uspelo.",
"STR_MENU_PART_RESIZE":"Inštalacija brez brisanja.",
"STR_PART_RESIZE_TIP":"Ventoy bo poskusil inštalacijo brez brisanja podatkov. #@Nadaljujem?",
"STR_PART_RESIZE_SUCCESS":"Čestitke!#@Ventoy je bil uspešno nameščen.",
"STR_PART_RESIZE_FAILED":"Inštalacija ni uspela, preveri log.txt za podrobnosti.",
"STR_PART_RESIZE_UNSUPPORTED":"Ventoy je ustavil inštalacijo ker nekateri pogoji niso zadostni. Preveri log.txt a podrobnosti.",
"STR_INSTALL_YES_TIP1":"Pozor: Podatki bodo izbrisani!",
"STR_INSTALL_YES_TIP2":"Prosim vtipkajte YES v spodnje okno da potrdite čisto inštalacijo in ne zgolj nadgradnje.",
"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_DONATE":"Donirajte",
"STR_4KN_UNSUPPORTED":"Currently Ventoy does not support 4K native devices.",
"STRXXX":""
},
},
{
"name":"Bulgarian (Български)",
"FontFamily":"Segoe",
@@ -3313,6 +3378,71 @@
"STR_DONATE":"Ахвяраваць",
"STR_4KN_UNSUPPORTED":"Зараз Ventoy не падтрымлівае ўласныя прылады 4K.",
"STRXXX":""
},
{
"name":"Malayalam (മലയാളം)",
"FontFamily":"Courier New",
"FontSize":16,
"Author":"SIDDHARTH K P",
"STR_ERROR":"പിശക്",
"STR_WARNING":"മുന്നറിയിപ്പ്",
"STR_INFO":"വിവരം",
"STR_INCORRECT_DIR":"ദയവായി ശരിയായ ഡയറക്ടറിയിൽ പ്രവർത്തിപ്പിക്കുക!",
"STR_INCORRECT_TREE_DIR":"എന്നെ ഇവിടെ പ്രവർത്തിപ്പിക്കരുത്, ദയവായി ഇൻസ്റ്റാളേഷൻ പാക്കേജ് ഡൗൺലോഡ് ചെയ്ത് അവിടെ പ്രവർത്തിപ്പിക്കുക.",
"STR_DEVICE":"ഉപകരണം",
"STR_LOCAL_VER":"പാക്കേജിലെ വെൻ്റോയ്",
"STR_DISK_VER":"ഉപകരണത്തിലെ വെൻ്റോയ്",
"STR_STATUS":"നില - തയ്യാറാണ്",
"STR_INSTALL":"ഇൻസ്റ്റാൾ ചെയ്യുക",
"STR_UPDATE":"അപ്ഡേറ്റ് ചെയ്യുക",
"STR_UPDATE_TIP":"അപ്‌ഡേറ്റ് പ്രവർത്തനം സുരക്ഷിതമാണ്, ISO ഫയലുകൾ മാറ്റമില്ലാതെ തുടരും.#@തുടരട്ടേ?",
"STR_INSTALL_TIP":"ഡിസ്ക് ഫോർമാറ്റ് ചെയ്യപ്പെടും, എല്ലാ ഡാറ്റയും നഷ്‌ടപ്പെടും.#@തുടരട്ടേ?",
"STR_INSTALL_TIP2":"ഡിസ്ക് ഫോർമാറ്റ് ചെയ്യപ്പെടും, എല്ലാ ഡാറ്റയും നഷ്‌ടപ്പെടും.#@തുടരട്ടേ? (ഒന്നുകൂടി ഉറപ്പിക്കുക)",
"STR_INSTALL_SUCCESS":"അഭിനന്ദനങ്ങൾ!#@വെൻ്റോയ് ഉപകരണത്തിൽ വിജയകരമായി ഇൻസ്റ്റാൾ ചെയ്തു.",
"STR_INSTALL_FAILED":"ഇൻസ്റ്റാളേഷൻ സമയത്ത് ഒരു പിശക് സംഭവിച്ചു. നിങ്ങൾക്ക് യുഎസ്ബി ഉപകരണം വീണ്ടും ഘടിപ്പിച്ച് വീണ്ടും ശ്രമിക്കാവുന്നതാണ്. വിവരങ്ങൾക്കായി log.txt പരിശോധിക്കുക.",
"STR_UPDATE_SUCCESS":"അഭിനന്ദനങ്ങൾ!#@വെൻ്റോയ് ഉപകരണത്തിൽ വിജയകരമായി അപ്ഡേറ്റ് ചെയ്തു.",
"STR_UPDATE_FAILED":"അപ്‌ഡേറ്റ് ചെയ്യുമ്പോൾ ഒരു പിശക് സംഭവിച്ചു. നിങ്ങൾക്ക് യുഎസ്ബി ഉപകരണം വീണ്ടും ഘടിപ്പിച്ച് വീണ്ടും ശ്രമിക്കാവുന്നതാണ്. വിവരങ്ങൾക്കായി log.txt പരിശോധിക്കുക.",
"STR_WAIT_PROCESS":"ഒരു പ്രവർത്തനം പുരോഗമിക്കുന്നു, ദയവായി കാത്തിരിക്കുക...",
"STR_MENU_OPTION":"ഓപ്ഷനുകൾ",
"STR_MENU_SECURE_BOOT":"സുരക്ഷിത ബൂട്ട് പിന്തുണ",
"STR_MENU_PART_CFG":"പാർട്ടീഷൻ കോൺഫിഗറേഷൻ",
"STR_BTN_OK":"ശരി",
"STR_BTN_CANCEL":"റദ്ദാക്കുക",
"STR_PRESERVE_SPACE":"ഡിസ്കിൻ്റെ അവസാനം കുറച്ച് സ്ഥലം ഒഴിച്ചിടുക",
"STR_SPACE_VAL_INVALID":"സംവരണം ചെയ്ത സ്ഥലത്തിന് അസാധുവായ മൂല്യം",
"STR_MENU_CLEAR":"വെൻ്റോയ് നീക്കംചെയ്യുക",
"STR_CLEAR_SUCCESS":"ഉപകരണത്തിൽ നിന്ന് വെൻ്റോയ് വിജയകരമായി നീക്കംചെയ്‌തു.",
"STR_CLEAR_FAILED":"ഡിസ്കിൽ നിന്ന് വെൻ്റോയ് നീക്കം ചെയ്യുമ്പോൾ ഒരു പിശക് സംഭവിച്ചു. നിങ്ങൾക്ക് യുഎസ്ബി ഉപകരണം വീണ്ടും ഘടിപ്പിച്ച് വീണ്ടും ശ്രമിക്കാവുന്നതാണ്. വിവരങ്ങൾക്കായി log.txt പരിശോധിക്കുക.",
"STR_MENU_PART_STYLE":"പാർട്ടീഷൻ രീതി",
"STR_DISK_2TB_MBR_ERROR":"2TB-യിൽ കൂടുതൽ വലുപ്പമുള്ള ഡിസ്കിനായി ദയവായി GPT തിരഞ്ഞെടുക്കുക",
"STR_SHOW_ALL_DEV":"എല്ലാ ഉപകരണങ്ങളും കാണിക്കുക",
"STR_PART_ALIGN_4KB":"പാർട്ടീഷനുകൾ 4KB ഉപയോഗിച്ച് വിന്യസിക്കുക",
"STR_WEB_COMMUNICATION_ERR":"ആശയവിനിമയ പിശക്:",
"STR_WEB_REMOTE_ABNORMAL":"ആശയവിനിമയ പിശക്: റിമോട്ട് തകരാറ്",
"STR_WEB_REQUEST_TIMEOUT":"ആശയവിനിമയ പിശക്: അഭ്യർത്ഥനയുടെ സമയം കഴിഞ്ഞു",
"STR_WEB_SERVICE_UNAVAILABLE":"ആശയവിനിമയ പിശക്: സേവനം ലഭ്യമല്ല",
"STR_WEB_TOKEN_MISMATCH":"ഡെമൺ നില അപ്‌ഡേറ്റ് ചെയ്‌തു, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക.",
"STR_WEB_SERVICE_BUSY":"സേവനം തിരക്കിലാണ്, ദയവായി പിന്നീട് വീണ്ടും ശ്രമിക്കുക.",
"STR_MENU_VTSI_CREATE":"VTSI ഫയൽ സൃഷ്‌ടിക്കുക",
"STR_VTSI_CREATE_TIP":"ഇത് ഇത്തവണ ഉപകരണത്തിലേക്ക് എഴുതുകയില്ല, ഒരു VTSI ഫയൽ മാത്രം സൃഷ്ടിക്കും#@തുടരട്ടേ?",
"STR_VTSI_CREATE_SUCCESS":"VTSI ഫയൽ വിജയകരമായി സൃഷ്ടിച്ചു!#@വെൻ്റോയ് ഇൻസ്റ്റാളേഷൻ പൂർത്തിയാക്കുന്നതിന് നിങ്ങൾക്ക് Rufus(3.15+) ഉപയോഗിച്ച് ഇത് ഉപകരണത്തിലേക്ക് എഴുതാം.",
"STR_VTSI_CREATE_FAILED":"VTSI ഫയൽ നിർമ്മാണം പരാജയപ്പെട്ടു.",
"STR_MENU_PART_RESIZE":"ഡാറ്റാ നഷ്ടപ്പെടാതെയുള്ള ഇൻസ്റ്റാളേഷൻ",
"STR_PART_RESIZE_TIP":"സാധ്യമെങ്കിൽ, ഡാറ്റാ നഷ്ടപ്പെടാതെയുള്ള ഇൻസ്റ്റാളേഷൻ വെൻ്റോയ് ശ്രമിക്കും. #@തുടരട്ടേ?",
"STR_PART_RESIZE_SUCCESS":"അഭിനന്ദനങ്ങൾ!#@വെൻ്റോയ് ഡാറ്റാ നഷ്ടപ്പെടാതെയുള്ള ഇൻസ്റ്റാളേഷൻ വിജയകരമായി പൂർത്തിയാക്കി.",
"STR_PART_RESIZE_FAILED":"ഡാറ്റാ നഷ്ടപ്പെടാതെയുള്ള ഇൻസ്റ്റാളേഷൻ പരാജയപ്പെട്ടു, വിശദാംശങ്ങൾക്കായി log.txt പരിശോധിക്കുക.",
"STR_PART_RESIZE_UNSUPPORTED":"ചില വ്യവസ്ഥകൾ പാലിക്കാൻ കഴിയാത്തതിനാൽ വെൻ്റോയ് ഡാറ്റാ നഷ്ടപ്പെടാതെയുള്ള ഇൻസ്റ്റാളേഷൻ നിർത്തി. വിശദാംശങ്ങൾക്കായി log.txt പരിശോധിക്കുക.",
"STR_INSTALL_YES_TIP1":"മുന്നറിയിപ്പ്: ഡാറ്റ നഷ്ടപ്പെടും!",
"STR_INSTALL_YES_TIP2":"അപ്‌ഗ്രേഡിന് പകരം ഒരു പുതിയ ഇൻസ്റ്റാളേഷൻ നടത്താൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുവെന്ന് സ്ഥിരീകരിക്കുന്നതിന് ദയവായി താഴെയുള്ള ടെക്സ്റ്റ് ബോക്സിൽ YES എന്ന് നൽകുക.",
"STR_PART_VENTOY_FS":"വെൻ്റോയ് പാർട്ടീഷനായുള്ള ഫയൽ സിസ്റ്റം",
"STR_PART_FS":"ഫയൽ സിസ്റ്റം",
"STR_PART_CLUSTER":"ക്ലസ്റ്റർ വലുപ്പം",
"STR_PART_CLUSTER_DEFAULT":"സിസ്റ്റം ഡിഫോൾട്ട് മൂല്യം",
"STR_DONATE":"സംഭാവന ചെയ്യുക",
"STR_4KN_UNSUPPORTED":"നിലവിൽ വെൻ്റോയ് 4K നേറ്റീവ് ഉപകരണങ്ങളെ പിന്തുണയ്ക്കുന്നില്ല.",
"STRXXX":""
}
]

View File

@@ -1221,6 +1221,7 @@ int real_main(int argc, char **argv)
int ret;
int euid;
char *exe = NULL;
const char *env = NULL;
char path[PATH_MAX];
char curpath[PATH_MAX];
@@ -1270,6 +1271,18 @@ int real_main(int argc, char **argv)
return 1;
}
if (strstr(path, "gtk"))
{
env = getenv("XDG_SESSION_TYPE");
vlog("=== XDG_SESSION_TYPE is <%s> ===\n", env ? env : "NULL");
if (env && strncasecmp(env, "wayland", 7) == 0)
{
vlog("Force GDK_BACKEND from %s to x11 for better compatibility\n", env);
setenv("GDK_BACKEND", "x11", 1);
}
}
if (euid == 0)
{
vlog("We have root privileges, just exec %s\n", path);

View File

@@ -12,8 +12,8 @@
<h4 align="left">
Ventoy is an open source tool to create bootable USB drive for ISO/WIM/IMG/VHD(x)/EFI files. <br/>
With ventoy, you don't need to format the disk over and over, just copy the image files to the USB drive and boot them.
You can copy many image files at a time and ventoy will give you a boot menu to select them. <br/>
With Ventoy, you don't need to format the disk over and over, just copy the image files to the USB drive and boot them.
You can copy many image files at a time and Ventoy will give you a boot menu to select them. <br/>
You can also browse ISO/WIM/IMG/VHD(x)/EFI files in local disk and boot them.<br/>
x86 Legacy BIOS, IA32 UEFI, x86_64 UEFI, ARM64 UEFI and MIPS64EL UEFI are supported in the same way.<br/>
Both MBR and GPT partition style are supported in the same way.<br/>
@@ -27,7 +27,7 @@ Most type of OS supported(Windows/WinPE/Linux/Unix/ChromeOS/Vmware/Xen...) <br/>
Windows 7, Windows 8, Windows 8.1, Windows 10, Windows 11, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016, Windows Server 2019, Windows Server 2022, Windows Server 2025, WinPE
**Linux**
Debian, Ubuntu, CentOS(6/7/8/9/10), RHEL(6/7/8/9/10), Deepin, Fedora, Rocky Linux, AlmaLinux, EuroLinux(6/7/8/9), openEuler, OpenAnolis, SLES, openSUSE, MX Linux, Manjaro, Linux Mint, Endless OS, Elementary OS, Solus, Linx, Zorin, antiX, PClinuxOS, Arch, ArcoLinux, ArchLabs, BlackArch, Obarun, Artix Linux, Puppy Linux, Tails, Slax, Kali, Mageia, Slackware, Q4OS, Archman, Gentoo, Pentoo, NixOS, Kylin, openKylin, Ubuntu Kylin, KylinSec, Lubuntu, Xubuntu, Kubuntu, Ubuntu MATE, Ubuntu Budgie, Ubuntu Studio, Bluestar, OpenMandriva, ExTiX, Netrunner, ALT Linux, Nitrux, Peppermint, KDE neon, Linux Lite, Parrot OS, Qubes, Pop OS, ROSA, Void Linux, Star Linux, EndeavourOS, MakuluLinux, Voyager, Feren, ArchBang, LXLE, Knoppix, Calculate Linux, Clear Linux, Pure OS, Oracle Linux, Trident, Septor, Porteus, Devuan, GoboLinux, 4MLinux, Simplicity Linux, Zeroshell, Android-x86, netboot.xyz, Slitaz, SuperGrub2Disk, Proxmox VE, Kaspersky Rescue, SystemRescueCD, MemTest86, MemTest86+, MiniTool Partition Wizard, Parted Magic, veket, Sabayon, Scientific, alpine, ClearOS, CloneZilla, Berry Linux, Trisquel, Ataraxia Linux, Minimal Linux Live, BackBox Linux, Emmabuntüs, ESET SysRescue Live,Nova Linux, AV Linux, RoboLinux, NuTyX, IPFire, SELKS, ZStack, Enso Linux, Security Onion, Network Security Toolkit, Absolute Linux, TinyCore, Springdale Linux, Frost Linux, Shark Linux, LinuxFX, Snail Linux, Astra Linux, Namib Linux, Resilient Linux, Virage Linux, Blackweb Security OS, R-DriveImage, O-O.DiskImage, Macrium, ToOpPy LINUX, GNU Guix, YunoHost, foxclone, siduction, Adelie Linux, Elive, Pardus, CDlinux, AcademiX, Austrumi, Zenwalk, Anarchy, DuZeru, BigLinux, OpenMediaVault, Ubuntu DP, Exe GNU/Linux, 3CX Phone System, KANOTIX, Grml, Karoshi, PrimTux, ArchStrike, CAELinux, Cucumber, Fatdog, ForLEx, Hanthana, Kwort, MiniNo, Redcore, Runtu, Asianux, Clu Linux Live, Uruk, OB2D, BlueOnyx, Finnix, HamoniKR, Parabola, LinHES, LinuxConsole, BEE free, Untangle, Pearl, Thinstation, TurnKey, tuxtrans, Neptune, HefftorLinux, GeckoLinux, Mabox Linux, Zentyal, Maui, Reborn OS, SereneLinux , SkyWave Linux, Kaisen Linux, Regata OS, TROM-Jaro, DRBL Linux, Chalet OS, Chapeau, Desa OS, BlankOn, OpenMamba, Frugalware, Kibojoe Linux, Revenge OS, Tsurugi Linux, Drauger OS, Hash Linux, gNewSense, Ikki Boot, SteamOS, Hyperbola, VyOS, EasyNAS, SuperGamer, Live Raizo, Swift Linux, RebeccaBlackOS, Daphile, CRUX, Univention, Ufficio Zero, Rescuezilla, Phoenix OS, Garuda Linux, Mll, NethServer, OSGeoLive, Easy OS, Volumio, FreedomBox, paldo, UBOS, Recalbox, batocera, Lakka, LibreELEC, Pardus Topluluk, Pinguy, KolibriOS, Elastix, Arya, Omoikane, Omarine, Endian Firewall, Hamara, Rocks Cluster, MorpheusArch, Redo, Slackel, SME Server, APODIO, Smoothwall, Dragora, Linspire, Secure-K OS, Peach OSI, Photon, Plamo, SuperX, Bicom, Ploplinux, HP SPP, LliureX, Freespire, DietPi, BOSS, Webconverger, Lunar, TENS, Source Mage, RancherOS, T2, Vine, Pisi, blackPanther, mAid, Acronis, Active.Boot, AOMEI, Boot.Repair, CAINE, DaRT, EasyUEFI, R-Drive, PrimeOS, Avira Rescue System, bitdefender, Checkra1n Linux, Lenovo Diagnostics, Clover, Bliss-OS, Lenovo BIOS Update, Arcabit Rescue Disk, MiyoLinux, TeLOS, Kerio Control, RED OS, OpenWrt, MocaccinoOS, EasyStartup, Pyabr, Refracta, Eset SysRescue, Linpack Xtreme, Archcraft, NHVBOOT, pearOS, SeaTools, Easy Recovery Essentional, iKuai, StorageCraft SCRE, ZFSBootMenu, TROMjaro, BunsenLabs, Todo en Uno, ChallengerOS, Nobara, Holo, CachyOS, Peux OS, Vanilla OS, ShredOS, paladin, Palen1x, dban, ReviOS, HelenOS, XeroLinux, Tiny 11, chimera linux, CuteFish, DragonOs, Rhino Linux, vanilladpup, crystal, IGELOS, MiniOS, gnoppix, PikaOS, UwUntu, Noble, PocketHandyBox, DiskGenius, Commodore, Talos, Shebang Linux, hrmpf, Bazzite, ManualLinux, nyarchlinux, ultramarine, TempleOS, bluefin, Damn Small Linux, Kicksecure, SerentiyOS, ......
Debian, Ubuntu, CentOS(6/7/8/9/10), RHEL(6/7/8/9/10), Deepin, Fedora, Rocky Linux, AlmaLinux, EuroLinux(6/7/8/9), openEuler, OpenAnolis, SLES, openSUSE, MX Linux, Manjaro, Linux Mint, Endless OS, Elementary OS, Solus, Linx, Zorin, antiX, PClinuxOS, Arch, ArcoLinux, ArchLabs, BlackArch, Obarun, Artix Linux, Puppy Linux, Tails, Slax, Kali, Mageia, Slackware, Q4OS, Archman, Gentoo, Pentoo, NixOS, Kylin, openKylin, Ubuntu Kylin, KylinSec, Lubuntu, Xubuntu, Kubuntu, Ubuntu MATE, Ubuntu Budgie, Ubuntu Studio, Bluestar, OpenMandriva, ExTiX, Netrunner, ALT Linux, Nitrux, Peppermint, KDE neon, Linux Lite, Parrot OS, Qubes, Pop OS, ROSA, Void Linux, Star Linux, EndeavourOS, MakuluLinux, Voyager, Feren, ArchBang, LXLE, Knoppix, Calculate Linux, Clear Linux, Pure OS, Oracle Linux, Trident, Septor, Porteus, Devuan, GoboLinux, 4MLinux, Simplicity Linux, Zeroshell, Android-x86, netboot.xyz, Slitaz, SuperGrub2Disk, Proxmox VE, Kaspersky Rescue, SystemRescueCD, MemTest86, MemTest86+, MiniTool Partition Wizard, Parted Magic, veket, Sabayon, Scientific, alpine, ClearOS, CloneZilla, Berry Linux, Trisquel, Ataraxia Linux, Minimal Linux Live, BackBox Linux, Emmabuntüs, ESET SysRescue Live,Nova Linux, AV Linux, RoboLinux, NuTyX, IPFire, SELKS, ZStack, Enso Linux, Security Onion, Network Security Toolkit, Absolute Linux, TinyCore, Springdale Linux, Frost Linux, Shark Linux, LinuxFX, Snail Linux, Astra Linux, Namib Linux, Resilient Linux, Virage Linux, Blackweb Security OS, R-DriveImage, O-O.DiskImage, Macrium, ToOpPy LINUX, GNU Guix, YunoHost, foxclone, siduction, Adelie Linux, Elive, Pardus, CDlinux, AcademiX, Austrumi, Zenwalk, Anarchy, DuZeru, BigLinux, OpenMediaVault, Ubuntu DP, Exe GNU/Linux, 3CX Phone System, KANOTIX, Grml, Karoshi, PrimTux, ArchStrike, CAELinux, Cucumber, Fatdog, ForLEx, Hanthana, Kwort, MiniNo, Redcore, Runtu, Asianux, Clu Linux Live, Uruk, OB2D, BlueOnyx, Finnix, HamoniKR, Parabola, LinHES, LinuxConsole, BEE free, Untangle, Pearl, Thinstation, TurnKey, tuxtrans, Neptune, HefftorLinux, GeckoLinux, Mabox Linux, Zentyal, Maui, Reborn OS, SereneLinux , SkyWave Linux, Kaisen Linux, Regata OS, TROM-Jaro, DRBL Linux, Chalet OS, Chapeau, Desa OS, BlankOn, OpenMamba, Frugalware, Kibojoe Linux, Revenge OS, Tsurugi Linux, Drauger OS, Hash Linux, gNewSense, Ikki Boot, SteamOS, Hyperbola, VyOS, EasyNAS, SuperGamer, Live Raizo, Swift Linux, RebeccaBlackOS, Daphile, CRUX, Univention, Ufficio Zero, Rescuezilla, Phoenix OS, Garuda Linux, Mll, NethServer, OSGeoLive, Easy OS, Volumio, FreedomBox, paldo, UBOS, Recalbox, batocera, Lakka, LibreELEC, Pardus Topluluk, Pinguy, KolibriOS, Elastix, Arya, Omoikane, Omarine, Endian Firewall, Hamara, Rocks Cluster, MorpheusArch, Redo, Slackel, SME Server, APODIO, Smoothwall, Dragora, Linspire, Secure-K OS, Peach OSI, Photon, Plamo, SuperX, Bicom, Ploplinux, HP SPP, LliureX, Freespire, DietPi, BOSS, Webconverger, Lunar, TENS, Source Mage, RancherOS, T2, Vine, Pisi, blackPanther, mAid, Acronis, Active.Boot, AOMEI, Boot.Repair, CAINE, DaRT, EasyUEFI, R-Drive, PrimeOS, Avira Rescue System, bitdefender, Checkra1n Linux, Lenovo Diagnostics, Clover, Bliss-OS, Lenovo BIOS Update, Arcabit Rescue Disk, MiyoLinux, TeLOS, Kerio Control, RED OS, OpenWrt, MocaccinoOS, EasyStartup, Pyabr, Refracta, Eset SysRescue, Linpack Xtreme, Archcraft, NHVBOOT, pearOS, SeaTools, Easy Recovery Essentional, iKuai, StorageCraft SCRE, ZFSBootMenu, TROMjaro, BunsenLabs, Todo en Uno, ChallengerOS, Nobara, Holo, CachyOS, Peux OS, Vanilla OS, ShredOS, paladin, Palen1x, dban, ReviOS, HelenOS, XeroLinux, Tiny 11, chimera linux, CuteFish, DragonOs, Rhino Linux, vanilladpup, crystal, IGELOS, MiniOS, gnoppix, PikaOS, UwUntu, Noble, PocketHandyBox, DiskGenius, Commodore, Talos, Shebang Linux, hrmpf, Bazzite, ManualLinux, nyarchlinux, ultramarine, TempleOS, bluefin, Damn Small Linux, Kicksecure, SerentiyOS, AerynOS, ......
**Unix**
DragonFly, FreeBSD, pfSense, OPNsense, GhostBSD, FreeNAS, TrueNAS, XigmaNAS, FuryBSD, HardenedBSD, MidnightBSD, ClonOS, EmergencyBootKit, helloSystem

View File

@@ -2785,6 +2785,40 @@ static BOOL WriteBackupDataToDisk(HANDLE hDrive, UINT64 Offset, BYTE *Data, DWOR
return TRUE;
}
static int DeleteVtoyEFIMountPoint(int PhyDrive)
{
int i = 0;
BOOL bRet;
CHAR DriveLetters[MAX_PATH] = { 0 };
CHAR DriveName[] = "?:\\";
Log("Try to delete VtoyEFI mount point for PhyDrive %d\n", PhyDrive);
GetLettersBelongPhyDrive(PhyDrive, DriveLetters, sizeof(DriveLetters));
if (DriveLetters[0] == 0)
{
Log("No drive letter was assigned...");
}
else
{
// Unmount all mounted volumes that belong to this drive
// Do it in reverse so that we always end on the first volume letter
for (i = (int)strlen(DriveLetters); i > 0; i--)
{
DriveName[0] = DriveLetters[i - 1];
if (IsVentoyLogicalDrive(DriveName[0]))
{
Log("%s is ventoy logical drive", DriveName);
bRet = DeleteVolumeMountPointA(DriveName);
Log("Delete mountpoint %s ret:%u code:%u", DriveName, bRet, LASTERR);
break;
}
}
}
return 0;
}
int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId)
{
@@ -2874,28 +2908,7 @@ int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId)
SetFilePointer(hDrive, 512 * 2040, NULL, FILE_BEGIN);
ReadFile(hDrive, ReservedData, sizeof(ReservedData), &dwSize, NULL);
GetLettersBelongPhyDrive(pPhyDrive->PhyDrive, DriveLetters, sizeof(DriveLetters));
if (DriveLetters[0] == 0)
{
Log("No drive letter was assigned...");
}
else
{
// Unmount all mounted volumes that belong to this drive
// Do it in reverse so that we always end on the first volume letter
for (i = (int)strlen(DriveLetters); i > 0; i--)
{
DriveName[0] = DriveLetters[i - 1];
if (IsVentoyLogicalDrive(DriveName[0]))
{
Log("%s is ventoy logical drive", DriveName);
bRet = DeleteVolumeMountPointA(DriveName);
Log("Delete mountpoint %s ret:%u code:%u", DriveName, bRet, LASTERR);
break;
}
}
}
DeleteVtoyEFIMountPoint(pPhyDrive->PhyDrive);
// It kind of blows, but we have to relinquish access to the physical drive
// for VDS to be able to delete the partitions that reside on it...
@@ -3270,6 +3283,9 @@ End:
{
Log("Change EFI partition attr success");
pPhyDrive->Part2GPTAttr = VENTOY_EFI_PART_ATTR;
Sleep(1000);
DeleteVtoyEFIMountPoint(pPhyDrive->PhyDrive);
}
else
{

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/>.
*
@@ -70,7 +70,7 @@ static void vlog(const char *fmt, ...)
n += vsnprintf(log, sizeof(log) - 1, fmt, arg);
va_end(arg);
fwrite(log, 1, n, fp);
fwrite(log, 1, n, fp);
fclose(fp);
}
}
@@ -90,7 +90,7 @@ static int copy_file(const char *file1, const char *file2)
vlog("Failed to read file <%s>\n", file1);
goto end;
}
fp2 = fopen(file2, "wb+");
if (!fp2)
{
@@ -115,7 +115,7 @@ static int copy_file(const char *file1, const char *file2)
vlog("Failed to read <%s> %d %d\n", file1, n, size);
goto end;
}
n = fwrite(buf, 1, size, fp2);
if (n != size)
{
@@ -167,7 +167,7 @@ static int vtoy_is_possible_blkdev(const char *name)
{
return 0;
}
return 1;
}
@@ -184,7 +184,7 @@ static ulonglong vtoy_get_disk_size_in_byte(const char *disk)
if (access(diskpath, F_OK) >= 0)
{
vlog("get disk size from sysfs for %s\n", disk);
fd = open(diskpath, O_RDONLY | O_BINARY);
if (fd >= 0)
{
@@ -233,7 +233,7 @@ static int get_disk_num(void)
{
return 0;
}
while ((p = readdir(dir)) != NULL)
{
n++;
@@ -248,7 +248,7 @@ static int is_usb_disk(const char *diskname)
int rc;
char dstpath[1024] = { 0 };
char syspath[1024] = { 0 };
snprintf(syspath, sizeof(syspath), "/sys/block/%s", diskname);
rc = readlink(syspath, dstpath, sizeof(dstpath) - 1);
if (rc > 0 && strstr(dstpath, "/usb"))
@@ -296,13 +296,13 @@ static int get_all_disk(void)
vlog("disk %s is filted by name\n", p->d_name);
continue;
}
cursize = vtoy_get_disk_size_in_byte(p->d_name);
node = g_disk_list + g_disk_num;
g_disk_num++;
snprintf(node->name, sizeof(node->name), p->d_name);
node->size = cursize;
node->isUSB = is_usb_disk(p->d_name);
@@ -338,7 +338,7 @@ static int get_all_disk(void)
node->size / 1024 / 1024 / 1024, node->size, node->isUSB);
}
vlog("============ DISK DUMP END ===========\n");
return 0;
}
@@ -410,7 +410,7 @@ static int expand_var(const char *var, char *value, int len)
{
uiDst = strtoul(var + 22, NULL, 10);
uiDst = uiDst * (1024ULL * 1024ULL * 1024ULL);
for (i = 0; i < g_disk_num; i++)
{
node = g_disk_list + i;
@@ -418,7 +418,7 @@ static int expand_var(const char *var, char *value, int len)
{
continue;
}
if (node->size > uiDst)
{
delta = node->size - uiDst;
@@ -427,7 +427,52 @@ static int expand_var(const char *var, char *value, int len)
{
delta = uiDst - node->size;
}
if (delta < maxdelta)
{
index = i;
maxdelta = delta;
}
}
if (index >= 0)
{
vlog("%s=<%s>\n", var, g_disk_list[index].name);
snprintf(value, len, "%s", g_disk_list[index].name);
return 0;
}
else
{
vlog("[Error] %s not found\n", var);
}
}
else if (strncmp(var, "VT_LINUX_DISK_NONVTOY_CLOSEST_", 30) == 0)
{
uiDst = strtoul(var + 30, NULL, 10);
uiDst = uiDst * (1024ULL * 1024ULL * 1024ULL);
for (i = 0; i < g_disk_num; i++)
{
node = g_disk_list + i;
if (node->size == 0)
{
continue;
}
if (strcmp(node->name, g_vtoy_disk_name) == 0)
{
continue;
}
if (node->size > uiDst)
{
delta = node->size - uiDst;
}
else
{
delta = uiDst - node->size;
}
if (delta < maxdelta)
{
index = i;
@@ -481,10 +526,10 @@ int vtoyexpand_main(int argc, char **argv)
{
g_vtoy_disk_name += 5;
}
vlog("<%s> <%s> <%s>\n", argv[1], argv[2], g_vtoy_disk_name);
vlog("<%s> <%s> <%s>\n", argv[1], argv[2], g_vtoy_disk_name);
get_all_disk();
fp = fopen(argv[1], "r");
if (!fp)
{
@@ -502,7 +547,7 @@ int vtoyexpand_main(int argc, char **argv)
memset(line, 0, sizeof(line));
memset(value, 0, sizeof(value));
while (fgets(line, sizeof(line), fp))
{
start = strstr(line, "$$VT_");
@@ -519,7 +564,7 @@ int vtoyexpand_main(int argc, char **argv)
*end = 0;
expand_var(start + 2, value, sizeof(value));
fprintf(fout, "%s", value);
fprintf(fout, "%s", end + 2);
memset(value, 0, sizeof(value));
@@ -531,7 +576,7 @@ int vtoyexpand_main(int argc, char **argv)
line[0] = line[4095] = 0;
}
fclose(fp);
fclose(fout);
@@ -540,7 +585,7 @@ int vtoyexpand_main(int argc, char **argv)
vlog("Copy file <%s> --> <%s>\n", TMP_FILE, argv[1]);
copy_file(TMP_FILE, argv[1]);
return 0;
}

View File

@@ -1642,6 +1642,37 @@ static int ExpandSingleVar(VarDiskInfo *pDiskInfo, int DiskNum, const char *var,
Log("%s=<PhyDrive%d>", var, index);
sprintf_s(value, len, "%d", index);
}
else if (strncmp(var, "VT_WINDOWS_DISK_NONVTOY_CLOSEST_", 32) == 0)
{
uiDst = strtoul(var + 32, NULL, 10);
uiDst = uiDst * (1024ULL * 1024ULL * 1024ULL);
for (i = 0; i < DiskNum; i++)
{
if (pDiskInfo[i].Capacity == 0 || i == g_vtoy_disk_drive)
{
continue;
}
if (pDiskInfo[i].Capacity > uiDst)
{
uiDelta = pDiskInfo[i].Capacity - uiDst;
}
else
{
uiDelta = uiDst - pDiskInfo[i].Capacity;
}
if (uiDelta < uiMaxDelta)
{
uiMaxDelta = uiDelta;
index = i;
}
}
Log("%s=<PhyDrive%d>", var, index);
sprintf_s(value, len, "%d", index);
}
else
{
Log("Invalid var name <%s>", var);
@@ -2214,6 +2245,10 @@ static int Windows11Bypass(const char *isofile, const char MntLetter, UINT8 Chec
goto End;
}
//bugfix: change VTOYEFI partition attribute
//Now we really need to bypass windows 11 check. create registry
if (Check)
@@ -2390,6 +2425,45 @@ static int MountVTLRI(CHAR *ImgPath, DWORD PhyDrive)
return 0;
}
static BOOL FindVentoyDiskBySig(UINT32 VtoySig, DWORD* pDiskNum)
{
HANDLE Handle;
DWORD dwSize = 0;
CHAR PhyPath[128];
UINT8 SectorBuf[512];
Log("Find Ventoy Disk by Sig %08x ...", VtoySig);
for (int DiskNum = 0; DiskNum < 32; DiskNum++)
{
sprintf_s(PhyPath, sizeof(PhyPath), "\\\\.\\PhysicalDrive%d", DiskNum);
Handle = CreateFileA(PhyPath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
if (Handle == INVALID_HANDLE_VALUE)
{
Log("Could not open the disk<%s>, error:%u", PhyPath, GetLastError());
continue;
}
if (!ReadFile(Handle, SectorBuf, sizeof(SectorBuf), &dwSize, NULL))
{
Log("ReadFile failed, dwSize:%u error:%u", dwSize, GetLastError());
CloseHandle(Handle);
continue;
}
CloseHandle(Handle);
if (*(UINT32*)(SectorBuf + 0x1B8) == VtoySig)
{
Log("%s sig match ...", PhyPath);
*pDiskNum = DiskNum;
return TRUE;
}
}
return FALSE;
}
static int VentoyHook(ventoy_os_param *param)
{
int i;
@@ -2476,11 +2550,11 @@ static int VentoyHook(ventoy_os_param *param)
if (g_os_param_reserved[6] == 1)
{
memcpy(&VtoySig, g_os_param_reserved + 7, 4);
for (i = 0; i < 5; i++)
for (i = 0; i < 3; i++)
{
VtoyLetter = 'A';
Drives = GetLogicalDrives();
Log("Logic Drives: 0x%x VentoySig:%08X", Drives, VtoySig);
Log("[%d] Logic Drives: 0x%x VentoySig:%08X", i, Drives, VtoySig);
while (Drives)
{
@@ -2489,12 +2563,13 @@ static int VentoyHook(ventoy_os_param *param)
memset(UUID, 0, sizeof(UUID));
memset(&VtoyDiskExtent, 0, sizeof(VtoyDiskExtent));
DiskSig = 0;
if (GetPhyDiskUUID(VtoyLetter, UUID, &DiskSig, &VtoyDiskExtent) == 0)
{
Log("DiskSig=%08X PartStart=%lld", DiskSig, VtoyDiskExtent.StartingOffset.QuadPart);
Log("[%d] DiskSig=%08X PartStart=%lld", i, DiskSig, VtoyDiskExtent.StartingOffset.QuadPart);
if (DiskSig == VtoySig && VtoyDiskExtent.StartingOffset.QuadPart == SIZE_1MB)
{
Log("Ventoy Disk Sig match");
Log("Ventoy Disk Sig and offset match");
vtoyfind = TRUE;
break;
}
@@ -2517,6 +2592,13 @@ static int VentoyHook(ventoy_os_param *param)
}
}
if (vtoyfind == FALSE) // vlnk mode Ventoy partition has no letter
{
Log("Warning: Ventoy partition has no drive letter, assume C: and find by sig");
VtoyLetter = 'C';
vtoyfind = FindVentoyDiskBySig(VtoySig, &VtoyDiskExtent.DiskNumber);
}
if (vtoyfind == FALSE)
{
Log("Failed to find ventoy disk");