return 0;\r
}\r
\r
-static int Windows11Bypass(const char *isofile, const char MntLetter, UINT8 Check, UINT8 NRO)\r
+static int VentoyGetFileVersion(const CHAR *FilePath, UINT16 *pMajor, UINT16 *pMinor, UINT16 *pBuild, UINT16 *pRevision)\r
{\r
- int Ret = 1;\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("Windows11Bypass for <%s> %C: Check:%u NRO:%u", isofile, MntLetter, Check, NRO);\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
+ Log("Get file version for <%s>", FilePath);\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
+ dwSize = GetFileVersionInfoSizeA(FilePath, &dwHandle);\r
if (0 == dwSize)\r
{\r
Log("Failed to get file version info size: %u", LASTERR);\r
Buffer = malloc(dwSize);\r
if (!Buffer)\r
{\r
+ Log("malloc failed %u", dwSize);\r
goto End;\r
}\r
\r
- if (FALSE == GetFileVersionInfoA(CheckFile, dwHandle, dwSize, Buffer))\r
+ if (FALSE == GetFileVersionInfoA(FilePath, dwHandle, dwSize, Buffer))\r
{\r
Log("Failed to get file version info : %u", LASTERR);\r
goto End;\r
Major = 11;\r
}\r
\r
- if (Major != 11)\r
+ if (pMajor)\r
{\r
- Log("This is not Windows 11, not need to bypass.", Major);\r
- goto End;\r
+ *pMajor = Major;\r
+ }\r
+ if (pMinor)\r
+ {\r
+ *pMinor = Minor;\r
+ }\r
+ if (pBuild)\r
+ {\r
+ *pBuild = Build;\r
}\r
+ if (pRevision)\r
+ {\r
+ *pRevision = Revision;\r
+ }\r
+\r
+ ret = 0;\r
}\r
+ else\r
+ {\r
+ Log("Invalid verinfo signature 0x%x", VerInfo->dwSignature);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ Log("VerQueryValueA failed %u", LASTERR);\r
}\r
\r
- //Now we really need to bypass windows 11 check. create registry\r
+End:\r
+ if (Buffer)\r
+ {\r
+ free(Buffer);\r
+ }\r
+\r
+ return ret;\r
+}\r
+\r
+static BOOL VentoyIsNeedBypass(const char *isofile, const char MntLetter)\r
+{\r
+ UINT16 Major; \r
+ BOOL bRet = FALSE;\r
+ CHAR CheckFile[MAX_PATH];\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
+ if (FALSE == IsFileExist("%C:\\sources\\boot.wim", MntLetter))\r
+ {\r
+ Log("boot.wim not exist, this is not a windows install media.");\r
+ goto End;\r
+ }\r
+\r
+ if (IsFileExist("%C:\\sources\\compatresources.dll", MntLetter))\r
+ {\r
+ sprintf_s(CheckFile, sizeof(CheckFile), "%C:\\sources\\compatresources.dll", MntLetter);\r
+ }\r
+ else if (IsFileExist("%C:\\setup.exe", MntLetter))\r
+ {\r
+ sprintf_s(CheckFile, sizeof(CheckFile), "%C:\\setup.exe", MntLetter);\r
+ }\r
+ else if (IsFileExist("X:\\setup.exe"))\r
+ {\r
+ sprintf_s(CheckFile, sizeof(CheckFile), "X:\\setup.exe");\r
+ }\r
+ else\r
+ {\r
+ Log("No Check file found");\r
+ goto End;\r
+ }\r
+\r
+ if (VentoyGetFileVersion(CheckFile, &Major, NULL, NULL, NULL))\r
+ {\r
+ goto End;\r
+ }\r
+\r
+ if (Major >= 11)\r
+ {\r
+ Log("Enable for Windows 11 %u", Major);\r
+ bRet = TRUE;\r
+ }\r
+ else\r
+ {\r
+ Log("This is not Windows 11, not need to bypass.", Major);\r
+ }\r
+\r
+End:\r
+ return bRet;\r
+}\r
+\r
+static int Windows11Bypass(const char *isofile, const char MntLetter, UINT8 Check, UINT8 NRO)\r
+{\r
+ int Ret = 1; \r
HKEY hKey = NULL;\r
HKEY hSubKey = NULL;\r
LSTATUS Status;\r
+ DWORD dwValue;\r
+ DWORD dwSize;\r
+\r
+ Log("Windows11Bypass for <%s> %C: Check:%u NRO:%u", isofile, MntLetter, Check, NRO);\r
+\r
+ if (!VentoyIsNeedBypass(isofile, MntLetter))\r
+ {\r
+ goto End;\r
+ }\r
+\r
+ //Now we really need to bypass windows 11 check. create registry\r
\r
if (Check)\r
{\r
Ret = 0;\r
\r
End:\r
- if (Buffer)\r
- {\r
- free(Buffer);\r
- }\r
\r
return Ret; \r
}\r