From e645301713519d8d2c3e95441fdc971731a66c85 Mon Sep 17 00:00:00 2001 From: longpanda Date: Thu, 10 Nov 2022 10:10:10 +0800 Subject: [PATCH] Optimization for Windows unattended install process. --- INSTALL/ventoy/vtoyjump32.exe | Bin 141312 -> 142848 bytes INSTALL/ventoy/vtoyjump64.exe | Bin 162304 -> 163840 bytes vtoyjump/vtoyjump/vtoyjump.c | 269 +++++++++++++++++++++++----------- 3 files changed, 180 insertions(+), 89 deletions(-) diff --git a/INSTALL/ventoy/vtoyjump32.exe b/INSTALL/ventoy/vtoyjump32.exe index 9adcf1270a6a4e39f91e0eaa05c09b323c277408..5ef9ccd067c79bb029051e25334c6d4f0f74ff1b 100644 GIT binary patch delta 23597 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 MV@X-_MdT9sKep=hrT_o{ delta 22650 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 delta 33500 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 diff --git a/vtoyjump/vtoyjump/vtoyjump.c b/vtoyjump/vtoyjump/vtoyjump.c index 4a45db79..bbf566e4 100644 --- a/vtoyjump/vtoyjump/vtoyjump.c +++ b/vtoyjump/vtoyjump/vtoyjump.c @@ -128,6 +128,64 @@ static void TrimString(CHAR *String, BOOL TrimLeft) return; } +static int VentoyProcessRunCmd(const char *Fmt, ...) +{ + int Len = 0; + va_list Arg; + STARTUPINFOA Si; + PROCESS_INFORMATION Pi; + char szBuf[1024] = { 0 }; + + va_start(Arg, Fmt); + Len += vsnprintf_s(szBuf + Len, sizeof(szBuf)-Len, sizeof(szBuf)-Len, Fmt, Arg); + va_end(Arg); + + GetStartupInfoA(&Si); + Si.dwFlags |= STARTF_USESHOWWINDOW; + Si.wShowWindow = SW_HIDE; + + Log("Process Run: <%s>", szBuf); + CreateProcessA(NULL, szBuf, NULL, NULL, FALSE, 0, NULL, NULL, &Si, &Pi); + WaitForSingleObject(Pi.hProcess, INFINITE); + + return 0; +} + +static CHAR VentoyGetFirstFreeDriveLetter(BOOL Reverse) +{ + int i; + CHAR Letter = 'T'; + DWORD Drives; + + Drives = GetLogicalDrives(); + + if (Reverse) + { + for (i = 25; i >= 2; i--) + { + if (0 == (Drives & (1 << i))) + { + Letter = 'A' + i; + break; + } + } + } + else + { + for (i = 2; i < 26; i++) + { + if (0 == (Drives & (1 << i))) + { + Letter = 'A' + i; + break; + } + } + } + + Log("FirstFreeDriveLetter %u %C:", Reverse, Letter); + return Letter; +} + void Log(const char *Fmt, ...) { va_list Arg; @@ -910,6 +968,84 @@ UINT64 GetVentoyEfiPartStartSector(HANDLE hDrive) return StartSector; } +static int VentoyCopyImdisk(DWORD PhyDrive, CHAR *ImPath) +{ + int rc = 1; + BOOL bRet; + DWORD dwBytes; + HANDLE hDrive; + CHAR PhyPath[MAX_PATH]; + GET_LENGTH_INFORMATION LengthInfo; + + if (IsFileExist("X:\\Windows\\System32\\imdisk.exe")) + { + Log("imdisk.exe already exist, no need to copy..."); + strcpy_s(ImPath, MAX_PATH, "imdisk.exe"); + return 0; + } + + if (IsFileExist("X:\\Windows\\System32\\ventoy\\imdisk.exe")) + { + Log("imdisk.exe already copied, no need to copy..."); + strcpy_s(ImPath, MAX_PATH, "ventoy\\imdisk.exe"); + return 0; + } + + sprintf_s(PhyPath, sizeof(PhyPath), "\\\\.\\PhysicalDrive%d", PhyDrive); + hDrive = CreateFileA(PhyPath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0); + if (hDrive == INVALID_HANDLE_VALUE) + { + Log("Could not open the disk<%s>, error:%u", PhyPath, GetLastError()); + goto End; + } + + bRet = DeviceIoControl(hDrive, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, &LengthInfo, sizeof(LengthInfo), &dwBytes, NULL); + if (!bRet) + { + Log("Could not get phy disk %s size, error:%u", PhyPath, GetLastError()); + goto End; + } + + g_FatPhyDrive = hDrive; + g_Part2StartSec = GetVentoyEfiPartStartSector(hDrive); + + Log("Parse FAT fs..."); + + fl_init(); + + if (0 == fl_attach_media(VentoyFatDiskRead, NULL)) + { + if (g_system_bit == 64) + { + CopyFileFromFatDisk("/ventoy/imdisk/64/imdisk.sys", "ventoy\\imdisk.sys"); + CopyFileFromFatDisk("/ventoy/imdisk/64/imdisk.exe", "ventoy\\imdisk.exe"); + CopyFileFromFatDisk("/ventoy/imdisk/64/imdisk.cpl", "ventoy\\imdisk.cpl"); + } + else + { + CopyFileFromFatDisk("/ventoy/imdisk/32/imdisk.sys", "ventoy\\imdisk.sys"); + CopyFileFromFatDisk("/ventoy/imdisk/32/imdisk.exe", "ventoy\\imdisk.exe"); + CopyFileFromFatDisk("/ventoy/imdisk/32/imdisk.cpl", "ventoy\\imdisk.cpl"); + } + + GetCurrentDirectoryA(sizeof(PhyPath), PhyPath); + strcat_s(PhyPath, sizeof(PhyPath), "\\ventoy\\imdisk.sys"); + + if (LoadNtDriver(PhyPath) == 0) + { + strcpy_s(ImPath, MAX_PATH, "ventoy\\imdisk.exe"); + rc = 0; + } + } + fl_shutdown(); + +End: + + SAFE_CLOSE_HANDLE(hDrive); + + return rc; +} + static int VentoyRunImdisk(const char *IsoPath, const char *imdiskexe) { CHAR Letter; @@ -957,73 +1093,16 @@ static int VentoyRunImdisk(const char *IsoPath, const char *imdiskexe) int VentoyMountISOByImdisk(const char *IsoPath, DWORD PhyDrive) { int rc = 1; - BOOL bRet; - DWORD dwBytes; - HANDLE hDrive; - CHAR PhyPath[MAX_PATH]; - GET_LENGTH_INFORMATION LengthInfo; + CHAR ImPath[MAX_PATH]; Log("VentoyMountISOByImdisk %s", IsoPath); - if (IsFileExist("X:\\Windows\\System32\\imdisk.exe")) + if (0 == VentoyCopyImdisk(PhyDrive, ImPath)) { - Log("imdisk.exe exist, use it directly..."); - VentoyRunImdisk(IsoPath, "imdisk.exe"); - return 0; + VentoyRunImdisk(IsoPath, ImPath); + rc = 0; } - sprintf_s(PhyPath, sizeof(PhyPath), "\\\\.\\PhysicalDrive%d", PhyDrive); - hDrive = CreateFileA(PhyPath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0); - if (hDrive == INVALID_HANDLE_VALUE) - { - Log("Could not open the disk<%s>, error:%u", PhyPath, GetLastError()); - goto End; - } - - bRet = DeviceIoControl(hDrive, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, &LengthInfo, sizeof(LengthInfo), &dwBytes, NULL); - if (!bRet) - { - Log("Could not get phy disk %s size, error:%u", PhyPath, GetLastError()); - goto End; - } - - g_FatPhyDrive = hDrive; - g_Part2StartSec = GetVentoyEfiPartStartSector(hDrive); - - Log("Parse FAT fs..."); - - fl_init(); - - if (0 == fl_attach_media(VentoyFatDiskRead, NULL)) - { - if (g_system_bit == 64) - { - CopyFileFromFatDisk("/ventoy/imdisk/64/imdisk.sys", "ventoy\\imdisk.sys"); - CopyFileFromFatDisk("/ventoy/imdisk/64/imdisk.exe", "ventoy\\imdisk.exe"); - CopyFileFromFatDisk("/ventoy/imdisk/64/imdisk.cpl", "ventoy\\imdisk.cpl"); - } - else - { - CopyFileFromFatDisk("/ventoy/imdisk/32/imdisk.sys", "ventoy\\imdisk.sys"); - CopyFileFromFatDisk("/ventoy/imdisk/32/imdisk.exe", "ventoy\\imdisk.exe"); - CopyFileFromFatDisk("/ventoy/imdisk/32/imdisk.cpl", "ventoy\\imdisk.cpl"); - } - - GetCurrentDirectoryA(sizeof(PhyPath), PhyPath); - strcat_s(PhyPath, sizeof(PhyPath), "\\ventoy\\imdisk.sys"); - - if (LoadNtDriver(PhyPath) == 0) - { - VentoyRunImdisk(IsoPath, "ventoy\\imdisk.exe"); - rc = 0; - } - } - fl_shutdown(); - -End: - - SAFE_CLOSE_HANDLE(hDrive); - return rc; } @@ -1863,14 +1942,30 @@ static int UnattendVarExpand(const char *script, const char *tmpfile) //#define VAR_DEBUG 1 -static int ProcessUnattendedInstallation(const char *script) +static int CreateUnattendRegKey(const char *file) { DWORD dw; HKEY hKey; LSTATUS Ret; + +#ifndef VAR_DEBUG + Ret = RegCreateKeyEx(HKEY_LOCAL_MACHINE, "System\\Setup", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dw); + if (ERROR_SUCCESS == Ret) + { + Ret = RegSetValueEx(hKey, "UnattendFile", 0, REG_SZ, file, (DWORD)(strlen(file) + 1)); + } +#endif + + return 0; +} + +static int ProcessUnattendedInstallation(const char *script, DWORD PhyDrive) +{ CHAR Letter; + CHAR DrvLetter; CHAR TmpFile[MAX_PATH]; CHAR CurDir[MAX_PATH]; + CHAR ImPath[MAX_PATH]; Log("Copy unattended XML ..."); @@ -1888,7 +1983,7 @@ static int ProcessUnattendedInstallation(const char *script) #ifdef VAR_DEBUG sprintf_s(CurDir, sizeof(CurDir), "%C:\\AutounattendXXX.xml", Letter); #else - sprintf_s(CurDir, sizeof(CurDir), "%C:\\Autounattend.xml", Letter); + sprintf_s(CurDir, sizeof(CurDir), "%C:\\Unattend.xml", Letter); #endif if (UnattendNeedVarExpand(script)) @@ -1897,21 +1992,32 @@ static int ProcessUnattendedInstallation(const char *script) UnattendVarExpand(script, TmpFile); Log("Expand Copy file <%s> --> <%s>", script, CurDir); - CopyFile(TmpFile, CurDir, FALSE); + CopyFileA(TmpFile, CurDir, FALSE); } else { Log("No var expand copy file <%s> --> <%s>", script, CurDir); - CopyFile(script, CurDir, FALSE); + CopyFileA(script, CurDir, FALSE); } - -#ifndef VAR_DEBUG - Ret = RegCreateKeyEx(HKEY_LOCAL_MACHINE, "System\\Setup", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dw); - if (ERROR_SUCCESS == Ret) + + VentoyCopyImdisk(PhyDrive, ImPath); + DrvLetter = VentoyGetFirstFreeDriveLetter(FALSE); + VentoyProcessRunCmd("%s -a -s 64M -m %C: -p \"/fs:FAT32 /q /y\"", ImPath, DrvLetter); + + Sleep(300); + + sprintf_s(TmpFile, sizeof(TmpFile), "%C:\\Unattend.xml", DrvLetter); + if (CopyFileA(CurDir, TmpFile, FALSE)) { - Ret = RegSetValueEx(hKey, "UnattendFile", 0, REG_SZ, CurDir, (DWORD)(strlen(CurDir) + 1)); + DeleteFileA(CurDir); + Log("Move file <%s> ==> <%s>, use the later as unattend XML", CurDir, TmpFile); + CreateUnattendRegKey(TmpFile); + } + else + { + Log("Failed to copy file <%s> ==> <%s>, use OLD", CurDir, TmpFile); + CreateUnattendRegKey(CurDir); } -#endif return 0; } @@ -2261,7 +2367,7 @@ static int VentoyHook(ventoy_os_param *param) if (IsFileExist("%s", VTOY_AUTO_FILE)) { Log("use auto install script %s...", VTOY_AUTO_FILE); - ProcessUnattendedInstallation(VTOY_AUTO_FILE); + ProcessUnattendedInstallation(VTOY_AUTO_FILE, VtoyDiskNum); } else { @@ -2482,22 +2588,6 @@ End: } -static int vtoy_cmd_delete_file(char *File) -{ - CHAR szCmd[MAX_PATH]; - STARTUPINFOA Si; - PROCESS_INFORMATION Pi; - - GetStartupInfoA(&Si); - Si.dwFlags |= STARTF_USESHOWWINDOW; - Si.wShowWindow = SW_HIDE; - sprintf_s(szCmd, sizeof(szCmd), "cmd.exe /c del /F /Q %s", File); - CreateProcessA(NULL, szCmd, NULL, NULL, FALSE, 0, NULL, NULL, &Si, &Pi); - WaitForSingleObject(Pi.hProcess, INFINITE); - - return 0; -} - int real_main(int argc, char **argv) { int i = 0; @@ -2575,6 +2665,8 @@ int real_main(int argc, char **argv) if (g_os_param_reserved[0] == 4) { Log("Open cmd for debug ..."); + Si.dwFlags |= STARTF_USESHOWWINDOW; + Si.wShowWindow = SW_NORMAL; sprintf_s(LunchFile, sizeof(LunchFile), "%s", "cmd.exe"); } @@ -2724,4 +2816,3 @@ int main(int argc, char **argv) return real_main(argc, argv); } } -