+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