static HANDLE g_vtoylog_mutex = NULL;\r
static HANDLE g_vtoyins_mutex = NULL;\r
\r
-static INT g_winpeshl_ini_updated = 0;\r
static DWORD g_vtoy_disk_drive;\r
\r
static CHAR g_prog_full_path[MAX_PATH];\r
return FALSE;\r
}\r
\r
-static int GetWinpeshlIniFileAttr(WinpeshlIniAttr *pAttr)\r
-{\r
- HANDLE hFile;\r
- SYSTEMTIME systime;\r
-\r
- hFile = CreateFileA(WINPESHL_INI, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);\r
- if (hFile == INVALID_HANDLE_VALUE)\r
- {\r
- Log("Could not open the file<%s>, error:%u", WINPESHL_INI, GetLastError());\r
- return 1;\r
- }\r
-\r
- pAttr->FileSize = (INT)GetFileSize(hFile, NULL);\r
- GetFileTime(hFile, &pAttr->CreateTime, &pAttr->LastAccessTime, &pAttr->LastWriteTime);\r
-\r
- FileTimeToSystemTime(&pAttr->LastWriteTime, &systime);\r
- Log("Winpeshl.ini size:%d LastWriteTime:<%04u/%02u/%02u %02u:%02u:%02u.%03u>", \r
- pAttr->FileSize,\r
- systime.wYear, systime.wMonth, systime.wDay, \r
- systime.wHour, systime.wMinute, systime.wSecond, \r
- systime.wMilliseconds);\r
-\r
- CloseHandle(hFile);\r
- return 0;\r
-}\r
\r
static int VentoyHook(ventoy_os_param *param)\r
{\r
\r
Log("VentoyHook Path:<%s>", param->vtoy_img_path);\r
\r
- g_winpeshl_ini_updated = 0;\r
-\r
if (IsUTF8Encode(param->vtoy_img_path))\r
{\r
Log("This file is UTF8 encoding");\r
sprintf_s(IsoPath, sizeof(IsoPath), "%C:%s", VtoyLetter, g_windows_data.injection_archive);\r
if (IsFileExist("%s", IsoPath))\r
{\r
- int rc1 = -1, rc2 = -1;\r
- WinpeshlIniAttr Attr1, Attr2;\r
- memset(&Attr1, 0, sizeof(Attr1));\r
- memset(&Attr2, 0, sizeof(Attr2));\r
-\r
Log("decompress injection archive %s...", IsoPath);\r
-\r
- if (IsFileExist(WINPESHL_INI))\r
- {\r
- rc1 = GetWinpeshlIniFileAttr(&Attr1);\r
- }\r
-\r
DecompressInjectionArchive(IsoPath, VtoyDiskNum);\r
\r
- if (IsFileExist(WINPESHL_INI))\r
- {\r
- rc2 = GetWinpeshlIniFileAttr(&Attr2);\r
- if (rc1 == rc2 && rc1 == 0)\r
- {\r
- if (Attr1.FileSize != Attr2.FileSize ||\r
- Attr1.LastWriteTime.dwHighDateTime != Attr2.LastWriteTime.dwHighDateTime ||\r
- Attr1.LastWriteTime.dwLowDateTime != Attr2.LastWriteTime.dwLowDateTime)\r
- {\r
- Log("winpeshl.ini file updated");\r
- g_winpeshl_ini_updated = 1;\r
- }\r
- }\r
- }\r
-\r
if (IsFileExist("%s", AUTO_RUN_BAT))\r
{\r
HANDLE hOut;\r
if (strstr(argv[0], "vtoyjump.exe"))\r
{\r
wimboot = 1;\r
- rc = VentoyJumpWimboot(argc, argv, LunchFile);\r
+ DeleteFileA(WINPESHL_INI);\r
+ IsFileExist(WINPESHL_INI);\r
+ rc = VentoyJumpWimboot(argc, argv, LunchFile);\r
}\r
else\r
{\r
- rc = VentoyJump(argc, argv, LunchFile);\r
+ rc = VentoyJump(argc, argv, LunchFile);\r
}\r
\r
Log("LunchFile=<%s> CallParam=<%s>", LunchFile, CallParam);\r
sprintf_s(LunchFile, sizeof(LunchFile), "%s", g_prog_full_path);\r
Log("Final lunchFile is <%s>", LunchFile);\r
}\r
- else if (wimboot && g_winpeshl_ini_updated)\r
+ else if (wimboot && IsFileExist(WINPESHL_INI))\r
{\r
sprintf_s(LunchFile, MAX_PATH, "X:\\Windows\\system32\\winpeshl.exe");\r
- Log("Recall winpeshl.exe");\r
+ Log("winpeshl.ini updated, now recall winpeshl.exe");\r
}\r
else\r
{\r