From e2656c287b87d33a4cdde61a23c8362681d17b1d Mon Sep 17 00:00:00 2001 From: longpanda Date: Mon, 2 Aug 2021 21:03:43 +0800 Subject: [PATCH] Compatibility improvement for some WinPE --- .../grub-2.04/grub-core/ventoy/ventoy_def.h | 3 + .../grub-core/ventoy/ventoy_windows.c | 78 +++++-- INSTALL/VentoyWeb.sh | 1 + INSTALL/ventoy/vtoyjump32.exe | Bin 112640 -> 110592 bytes INSTALL/ventoy/vtoyjump64.exe | Bin 133120 -> 131072 bytes vtoyjump/vtoyjump/vtoyjump.c | 204 ++++-------------- 6 files changed, 107 insertions(+), 179 deletions(-) diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h index b5240114..f841aba6 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_def.h @@ -69,6 +69,9 @@ #define VTOY_ARCH_CPIO "ventoy_x86.cpio" #endif +#define ventoy_varg_4(arg) arg[0], arg[1], arg[2], arg[3] +#define ventoy_varg_8(arg) arg[0], arg[1], arg[2], arg[3], arg[4], arg[5], arg[6], arg[7] + #define VTOY_PWD_CORRUPTED(err) \ {\ grub_printf("\n\n Password corrupted, will reboot after 5 seconds.\n\n"); \ diff --git a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_windows.c b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_windows.c index 3bcadc4d..9f7615ce 100644 --- a/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_windows.c +++ b/GRUB2/MOD_SRC/grub-2.04/grub-core/ventoy/ventoy_windows.c @@ -660,30 +660,22 @@ static wim_directory_entry * search_full_wim_dirent static wim_directory_entry * search_replace_wim_dirent(void *meta_data, wim_directory_entry *dir) { - wim_directory_entry *wim_dirent1 = NULL; - wim_directory_entry *wim_dirent2 = NULL; + wim_directory_entry *wim_dirent = NULL; const char *pecmd_path[] = { "Windows", "System32", "pecmd.exe", NULL }; - const char *wpeinit_path[] = { "Windows", "System32", "wpeinit.exe", NULL }; const char *winpeshl_path[] = { "Windows", "System32", "winpeshl.exe", NULL }; - wim_dirent1 = search_full_wim_dirent(meta_data, dir, pecmd_path); - debug("search pecmd.exe %p\n", wim_dirent1); - if (wim_dirent1) + wim_dirent = search_full_wim_dirent(meta_data, dir, pecmd_path); + debug("search pecmd.exe %p\n", wim_dirent); + if (wim_dirent) { - wim_dirent2 = search_full_wim_dirent(meta_data, dir, wpeinit_path); - debug("search wpeinit.exe %p\n", wim_dirent1); - if (wim_dirent2) - { - return wim_dirent2; - } - return wim_dirent1; + return wim_dirent; } - wim_dirent1 = search_full_wim_dirent(meta_data, dir, winpeshl_path); - debug("search winpeshl.exe %p\n", wim_dirent1); - if (wim_dirent1) + wim_dirent = search_full_wim_dirent(meta_data, dir, winpeshl_path); + debug("search winpeshl.exe %p\n", wim_dirent); + if (wim_dirent) { - return wim_dirent1; + return wim_dirent; } return NULL; @@ -745,6 +737,27 @@ static grub_uint64_t ventoy_get_stream_len(wim_directory_entry *dir) return offset; } +static int ventoy_update_stream_hash(wim_patch *patch, wim_directory_entry *dir) +{ + grub_uint16_t i; + grub_uint64_t offset = 0; + wim_stream_entry *stream = (wim_stream_entry *)((char *)dir + dir->len); + + for (i = 0; i < dir->streams; i++) + { + if (grub_memcmp(stream->hash.sha1, patch->old_hash.sha1, sizeof(wim_hash)) == 0) + { + debug("find target stream %u, name_len:%u upadte hash\n", i, stream->name_len); + grub_memcpy(stream->hash.sha1, &(patch->wim_data.bin_hash), sizeof(wim_hash)); + } + + offset += stream->len; + stream = (wim_stream_entry *)((char *)stream + stream->len); + } + + return offset; +} + static int ventoy_update_all_hash(wim_patch *patch, void *meta_data, wim_directory_entry *dir) { if ((meta_data == NULL) || (dir == NULL)) @@ -772,6 +785,7 @@ static int ventoy_update_all_hash(wim_patch *patch, void *meta_data, wim_directo if (dir->streams) { + ventoy_update_stream_hash(patch, dir); dir = (wim_directory_entry *)((char *)dir + dir->len + ventoy_get_stream_len(dir)); } else @@ -932,6 +946,7 @@ static int ventoy_update_before_chain(ventoy_os_param *param, char *isopath) static int ventoy_wimdows_locate_wim(const char *disk, wim_patch *patch) { int rc; + grub_uint16_t i; grub_file_t file; grub_uint32_t exe_len; grub_uint8_t *exe_data = NULL; @@ -940,6 +955,7 @@ static int ventoy_wimdows_locate_wim(const char *disk, wim_patch *patch) wim_security_header *security = NULL; wim_directory_entry *rootdir = NULL; wim_directory_entry *search = NULL; + wim_stream_entry *stream = NULL; wim_header *head = &(patch->wim_data.wim_header); wim_tail *wim_data = &patch->wim_data; @@ -1002,8 +1018,28 @@ static int ventoy_wimdows_locate_wim(const char *disk, wim_patch *patch) } debug("find replace file at %p\n", search); - - grub_memcpy(&patch->old_hash, search->hash.sha1, sizeof(wim_hash)); + + grub_memset(&patch->old_hash, 0, sizeof(wim_hash)); + if (grub_memcmp(&patch->old_hash, search->hash.sha1, sizeof(wim_hash)) == 0) + { + debug("search hash all 0, now do deep search\n"); + stream = (wim_stream_entry *)((char *)search + search->len); + for (i = 0; i < search->streams; i++) + { + if (stream->name_len == 0) + { + grub_memcpy(&patch->old_hash, stream->hash.sha1, sizeof(wim_hash)); + debug("new search hash: %02x %02x %02x %02x %02x %02x %02x %02x\n", + ventoy_varg_8(patch->old_hash.sha1)); + break; + } + stream = (wim_stream_entry *)((char *)stream + stream->len); + } + } + else + { + grub_memcpy(&patch->old_hash, search->hash.sha1, sizeof(wim_hash)); + } debug("read lookup offset:%llu size:%llu\n", (ulonglong)head->lookup.offset, (ulonglong)head->lookup.raw_size); lookup = grub_malloc(head->lookup.raw_size); @@ -1030,8 +1066,8 @@ static int ventoy_wimdows_locate_wim(const char *disk, wim_patch *patch) } else { - debug("failed to find lookup entry for replace file 0x%02x 0x%02x\n", - patch->old_hash.sha1[0], patch->old_hash.sha1[1]); + debug("failed to find lookup entry for replace file %02x %02x %02x %02x\n", + ventoy_varg_4(patch->old_hash.sha1)); } wim_data->wim_raw_size = (grub_uint32_t)file->size; diff --git a/INSTALL/VentoyWeb.sh b/INSTALL/VentoyWeb.sh index 061120b8..76ed0d56 100644 --- a/INSTALL/VentoyWeb.sh +++ b/INSTALL/VentoyWeb.sh @@ -45,6 +45,7 @@ if [ ! -f ./boot/boot.img ]; then if [ -d ./grub ]; then echo "Don't run VentoyWeb.sh here, please download the released install package, and run the script in it." else + echo "Current directory is $PWD" echo "Please run under the correct directory!" fi exit 1 diff --git a/INSTALL/ventoy/vtoyjump32.exe b/INSTALL/ventoy/vtoyjump32.exe index 06ea4bd0ddde8e2d28d9ae4a1431358b3f68b33f..9c0cf8dd143688acd781017c8ab9aa60a80a52a5 100644 GIT binary patch delta 16903 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 delta 18380 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 delta 41308 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 diff --git a/vtoyjump/vtoyjump/vtoyjump.c b/vtoyjump/vtoyjump/vtoyjump.c index 4598ea03..efc2acb8 100644 --- a/vtoyjump/vtoyjump/vtoyjump.c +++ b/vtoyjump/vtoyjump/vtoyjump.c @@ -41,25 +41,26 @@ void Log(const char *Fmt, ...) FILE *File = NULL; SYSTEMTIME Sys; char szBuf[1024]; + DWORD PID = GetCurrentProcessId(); GetLocalTime(&Sys); Len += sprintf_s(szBuf, sizeof(szBuf), - "[%4d/%02d/%02d %02d:%02d:%02d.%03d] ", + "[%4d/%02d/%02d %02d:%02d:%02d.%03d] [%u] ", Sys.wYear, Sys.wMonth, Sys.wDay, Sys.wHour, Sys.wMinute, Sys.wSecond, - Sys.wMilliseconds); + Sys.wMilliseconds, PID); va_start(Arg, Fmt); Len += vsnprintf_s(szBuf + Len, sizeof(szBuf)-Len, sizeof(szBuf)-Len, Fmt, Arg); va_end(Arg); - fopen_s(&File, "ventoy.log", "a+"); - if (File) - { - fwrite(szBuf, 1, Len, File); - fwrite("\n", 1, 1, File); - fclose(File); - } + fopen_s(&File, "ventoy.log", "a+"); + if (File) + { + fwrite(szBuf, 1, Len, File); + fwrite("\n", 1, 1, File); + fclose(File); + } } @@ -1410,159 +1411,43 @@ End: return rc; } -static int GetPecmdParam(const char *argv, char *CallParamBuf, DWORD BufLen) -{ - HKEY hKey; - LSTATUS Ret; - DWORD dw; - DWORD Type; - CHAR *Pos = NULL; - CHAR CallParam[256] = { 0 }; - CHAR FileName[MAX_PATH]; - - Log("GetPecmdParam <%s>", argv); - - *CallParamBuf = 0; - - strcpy_s(FileName, sizeof(FileName), argv); - for (dw = 0, Pos = FileName; *Pos; Pos++) - { - dw++; - *Pos = toupper(*Pos); - } - - Log("dw=%lu argv=<%s>", dw, FileName); - - if (dw >= 9 && strcmp(FileName + dw - 9, "PECMD.EXE") == 0) - { - Log("Get parameters for pecmd.exe"); - Ret = RegCreateKeyEx(HKEY_LOCAL_MACHINE, "System\\Setup", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dw); - if (ERROR_SUCCESS == Ret) - { - memset(FileName, 0, sizeof(FileName)); - dw = sizeof(FileName); - Ret = RegQueryValueEx(hKey, "CmdLine", NULL, &Type, FileName, &dw); - if (ERROR_SUCCESS == Ret && Type == REG_SZ) - { - strcpy_s(CallParam, sizeof(CallParam), FileName); - Log("CmdLine:<%s>", CallParam); - - if (_strnicmp(CallParam, "PECMD.EXE", 9) == 0) - { - Pos = CallParam + 9; - if (*Pos == ' ' || *Pos == '\t') - { - Pos++; - } - } - else - { - Pos = CallParam; - } - - Log("CmdLine2:<%s>", Pos); - sprintf_s(CallParamBuf, BufLen, " %s", Pos); - } - else - { - Log("Failed to RegQueryValueEx %lu %lu", Ret, Type); - } - - RegCloseKey(hKey); - return 1; - } - else - { - Log("Failed to create reg key %lu", Ret); - } - } - else - { - Log("This is NOT pecmd.exe"); - } - - return 0; -} - -static int GetWpeInitParam(char **argv, int argc, char *CallParamBuf, DWORD BufLen) -{ - int i; - DWORD dw; - CHAR *Pos = NULL; - CHAR FileName[MAX_PATH]; - - Log("GetWpeInitParam argc=%d", argc); - - *CallParamBuf = 0; - - strcpy_s(FileName, sizeof(FileName), argv[0]); - for (dw = 0, Pos = FileName; *Pos; Pos++) - { - dw++; - *Pos = toupper(*Pos); - } - - Log("dw=%lu argv=<%s>", dw, FileName); - - if (dw >= 11 && strcmp(FileName + dw - 11, "WPEINIT.EXE") == 0) - { - Log("Get parameters for WPEINIT.EXE"); - for (i = 1; i < argc; i++) - { - strcat_s(CallParamBuf, BufLen, " "); - strcat_s(CallParamBuf, BufLen, argv[i]); - } - - return 1; - } - else - { - Log("This is NOT wpeinit.exe"); - } - - return 0; -} - - int main(int argc, char **argv) { int i = 0; int rc = 0; - CHAR *Pos = NULL; - CHAR CurDir[MAX_PATH]; - CHAR LunchFile[MAX_PATH]; + CHAR *Pos = NULL; + CHAR CurDir[MAX_PATH]; + CHAR LunchFile[MAX_PATH]; CHAR CallParam[1024] = { 0 }; - STARTUPINFOA Si; - PROCESS_INFORMATION Pi; + STARTUPINFOA Si; + PROCESS_INFORMATION Pi; - if (argv[0] && argv[0][0] && argv[0][1] == ':') - { - GetCurrentDirectoryA(sizeof(CurDir), CurDir); - - strcpy_s(LunchFile, sizeof(LunchFile), argv[0]); - Pos = (char *)GetFileNameInPath(LunchFile); - - strcat_s(CurDir, sizeof(CurDir), "\\"); - strcat_s(CurDir, sizeof(CurDir), Pos); - - if (_stricmp(argv[0], CurDir) != 0) - { - *Pos = 0; - SetCurrentDirectoryA(LunchFile); - } - } - - Log("######## VentoyJump ##########"); - Log("argc = %d argv[0] = <%s>", argc, argv[0]); - - //special process for some WinPE - if (_stricmp(argv[0], "WPEINIT.EXE") == 0) + if (argv[0] && argv[0][0] && argv[0][1] == ':') { GetCurrentDirectoryA(sizeof(CurDir), CurDir); - if (_stricmp(CurDir, "X:\\") == 0) + + strcpy_s(LunchFile, sizeof(LunchFile), argv[0]); + Pos = (char *)GetFileNameInPath(LunchFile); + + strcat_s(CurDir, sizeof(CurDir), "\\"); + strcat_s(CurDir, sizeof(CurDir), Pos); + + if (_stricmp(argv[0], CurDir) != 0) { - Log("Set current directory to system32"); - SetCurrentDirectoryA("X:\\Windows\\System32"); + *Pos = 0; + SetCurrentDirectoryA(LunchFile); + } + } + + Log("######## VentoyJump ##########"); + Log("argc = %d", argc); + for (i = 0; i < argc; i++) + { + Log("argv[%d]=<%s>", i, argv[i]); + if (i > 0) + { + strcat_s(CallParam, sizeof(CallParam), " "); + strcat_s(CallParam, sizeof(CallParam), argv[i]); } } @@ -1577,11 +1462,6 @@ int main(int argc, char **argv) Log("Current directory = <%s>", CurDir); } - if (0 == GetWpeInitParam(argv, argc, CallParam, sizeof(CallParam))) - { - GetPecmdParam(argv[0], CallParam, sizeof(CallParam)); - } - GetStartupInfoA(&Si); memset(LunchFile, 0, sizeof(LunchFile)); @@ -1597,6 +1477,14 @@ int main(int argc, char **argv) Log("LunchFile=<%s> CallParam=<%s>", LunchFile, CallParam); + if (_stricmp(argv[0], "PECMD.EXE") == 0 && _stricmp(LunchFile, "ventoy\\PECMD.EXE") == 0) + { + MoveFileA("PECMD.EXE", "PECMD_BACK.EXE"); + MoveFileA("ventoy\\PECMD.EXE", "PECMD.EXE"); + sprintf_s(LunchFile, sizeof(LunchFile), "%s", "PECMD.EXE"); + Log("Move original PECMD.EXE <%s>", LunchFile); + } + if (g_os_param_reserved[0] == 3) { Log("Open log for debug ...");