return 0;\r
}\r
\r
+static int Windows11BypassCheck(const char *isofile, const char MntLetter)\r
+{\r
+ int Ret = 1;\r
+ DWORD dwHandle;\r
+ DWORD dwSize;\r
+ DWORD dwValue = 1;\r
+ UINT VerLen = 0;\r
+ CHAR *Buffer = NULL;\r
+ VS_FIXEDFILEINFO* VerInfo = NULL;\r
+ CHAR CheckFile[MAX_PATH];\r
+ UINT16 Major, Minor, Build, Revision;\r
+\r
+ Log("Windows11BypassCheck for <%s> %C:", isofile, MntLetter);\r
+\r
+ if (FALSE == IsFileExist("%C:\\sources\\boot.wim", MntLetter) ||\r
+ FALSE == IsFileExist("%C:\\sources\\compatresources.dll", MntLetter))\r
+ {\r
+ Log("boot.wim/compatresources.dll not exist, this is not a windows install media.");\r
+ goto End;\r
+ }\r
+\r
+ if (FALSE == IsFileExist("%C:\\sources\\install.wim", MntLetter) && \r
+ FALSE == IsFileExist("%C:\\sources\\install.esd", MntLetter))\r
+ {\r
+ Log("install.wim/install.esd not exist, this is not a windows install media.");\r
+ goto End;\r
+ }\r
+\r
+ sprintf_s(CheckFile, sizeof(CheckFile), "%C:\\sources\\compatresources.dll", MntLetter);\r
+ dwSize = GetFileVersionInfoSizeA(CheckFile, &dwHandle);\r
+ if (0 == dwSize)\r
+ {\r
+ Log("Failed to get file version info size: %u", LASTERR);\r
+ goto End;\r
+ }\r
+\r
+ Buffer = malloc(dwSize);\r
+ if (!Buffer)\r
+ {\r
+ goto End;\r
+ }\r
+\r
+ if (FALSE == GetFileVersionInfoA(CheckFile, dwHandle, dwSize, Buffer))\r
+ {\r
+ Log("Failed to get file version info : %u", LASTERR);\r
+ goto End;\r
+ }\r
+\r
+ if (VerQueryValueA(Buffer, "\\", (LPVOID)&VerInfo, &VerLen) && VerLen != 0)\r
+ {\r
+ if (VerInfo->dwSignature == VS_FFI_SIGNATURE)\r
+ {\r
+ Major = HIWORD(VerInfo->dwFileVersionMS);\r
+ Minor = LOWORD(VerInfo->dwFileVersionMS);\r
+ Build = HIWORD(VerInfo->dwFileVersionLS);\r
+ Revision = LOWORD(VerInfo->dwFileVersionLS);\r
+\r
+ Log("FileVersionze: <%u %u %u %u>", Major, Minor, Build, Revision);\r
+\r
+ if (Major == 10 && Build > 20000)\r
+ {\r
+ Major = 11;\r
+ }\r
+\r
+ if (Major != 11)\r
+ {\r
+ Log("This is not Windows 11, not need to bypass.", Major);\r
+ goto End;\r
+ }\r
+ }\r
+ }\r
+\r
+ //Now we really need to bypass windows 11 check. create registry\r
+ HKEY hKey = NULL;\r
+ HKEY hSubKey = NULL;\r
+ LSTATUS Status;\r
+\r
+ Status = RegCreateKeyExA(HKEY_LOCAL_MACHINE, "System\\Setup", 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwSize);\r
+ if (ERROR_SUCCESS != Status)\r
+ {\r
+ Log("Failed to create reg key System\\Setup %u %u", LASTERR, Status);\r
+ goto End;\r
+ }\r
+\r
+ Status = RegCreateKeyExA(hKey, "LabConfig", 0, NULL, 0, KEY_SET_VALUE | KEY_QUERY_VALUE | KEY_CREATE_SUB_KEY, NULL, &hSubKey, &dwSize);\r
+ if (ERROR_SUCCESS != Status)\r
+ {\r
+ Log("Failed to create LabConfig reg %u %u", LASTERR, Status);\r
+ goto End;\r
+ }\r
+\r
+ //set reg value\r
+ Status += RegSetValueExA(hSubKey, "BypassRAMCheck", 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));\r
+ Status += RegSetValueExA(hSubKey, "BypassTPMCheck", 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));\r
+ Status += RegSetValueExA(hSubKey, "BypassSecureBootCheck", 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));\r
+ Status += RegSetValueExA(hSubKey, "BypassStorageCheck", 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));\r
+ Status += RegSetValueExA(hSubKey, "BypassCPUCheck", 0, REG_DWORD, (LPBYTE)&dwValue, sizeof(DWORD));\r
+\r
+ Log("Create bypass registry %s %u", (Status == ERROR_SUCCESS) ? "SUCCESS" : "FAILED", Status);\r
+\r
+ Ret = 0;\r
+\r
+End:\r
+ if (Buffer)\r
+ {\r
+ free(Buffer);\r
+ }\r
+ \r
+ return Ret; \r
+}\r
+\r
static int VentoyHook(ventoy_os_param *param)\r
{\r
int i;\r
rc = MountIsoFile(IsoPath, DiskExtent.DiskNumber);\r
\r
NewDrives = GetLogicalDrives();\r
- Log("Drives after mount: 0x%x", NewDrives);\r
+ Log("Drives after mount: 0x%x (0x%x)", NewDrives, (NewDrives ^ Drives));\r
\r
MntLetter = 'A';\r
NewDrives = (NewDrives ^ Drives);\r
{\r
if (NewDrives & 0x01)\r
{\r
- Log("Maybe the ISO file is mounted at %C:", MntLetter);\r
+ if ((NewDrives >> 1) == 0)\r
+ {\r
+ Log("The ISO file is mounted at %C:", MntLetter);\r
+ }\r
+ else\r
+ {\r
+ Log("Maybe the ISO file is mounted at %C:", MntLetter);\r
+ }\r
break;\r
}\r
\r
\r
Log("Mount ISO FILE: %s", rc == 0 ? "SUCCESS" : "FAILED");\r
\r
+ //Windows 11 bypass check\r
+ if (g_windows_data.windows11_bypass_check == 1)\r
+ {\r
+ Windows11BypassCheck(IsoPath, MntLetter);\r
+ }\r
+\r
// for protect\r
rc = DeleteVentoyPart2MountPoint(DiskExtent.DiskNumber);\r
Log("Delete ventoy mountpoint: %s", rc == 0 ? "SUCCESS" : "NO NEED");\r
sprintf_s(StrBuf, sizeof(StrBuf), "cmd.exe /c %s \"%s\" %C", AUTO_RUN_BAT, IsoPath, MntLetter);\r
CreateProcessA(NULL, StrBuf, NULL, NULL, TRUE, flags, NULL, NULL, &Si, &Pi);\r
WaitForSingleObject(Pi.hProcess, INFINITE);\r
+\r
+ SAFE_CLOSE_HANDLE(hOut);\r
}\r
else\r
{\r