]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
vtoyjump optimization.
authorlongpanda <admin@ventoy.net>
Sat, 31 Dec 2022 11:40:55 +0000 (19:40 +0800)
committerlongpanda <admin@ventoy.net>
Sat, 31 Dec 2022 11:41:15 +0000 (19:41 +0800)
Signed-off-by: longpanda <admin@ventoy.net>
INSTALL/ventoy/vtoyjump32.exe
INSTALL/ventoy/vtoyjump64.exe
vtoyjump/vtoyjump/vtoyjump.c

index d16a906d44d95838687bed0edc145224305574ef..9a1feef3e60997de1c1111707dff79dc78bd9eaf 100644 (file)
Binary files a/INSTALL/ventoy/vtoyjump32.exe and b/INSTALL/ventoy/vtoyjump32.exe differ
index de3ca89e7eefc8bc6399fc51cf6499b29f9ba8bd..3772ef36ec501c65bc7d691a730c1a702da01876 100644 (file)
Binary files a/INSTALL/ventoy/vtoyjump64.exe and b/INSTALL/ventoy/vtoyjump64.exe differ
index f6a2edbf544870ff007b0b2b976604e2c4023d70..ad7c3093cd9aef227e598b220ca4869ca51a9d13 100644 (file)
@@ -2022,36 +2022,19 @@ static int ProcessUnattendedInstallation(const char *script, DWORD PhyDrive)
     return 0;\r
 }\r
 \r
     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
 {\r
-    int Ret = 1;\r
+    int ret = 1;\r
     DWORD dwHandle;\r
     DWORD dwSize;\r
     DWORD dwHandle;\r
     DWORD dwSize;\r
-    DWORD dwValue = 1;\r
     UINT VerLen = 0;\r
     CHAR *Buffer = NULL;\r
     VS_FIXEDFILEINFO* VerInfo = NULL;\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
     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
 \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
     if (0 == dwSize)\r
     {\r
         Log("Failed to get file version info size: %u", LASTERR);\r
@@ -2061,10 +2044,11 @@ static int Windows11Bypass(const char *isofile, const char MntLetter, UINT8 Chec
     Buffer = malloc(dwSize);\r
     if (!Buffer)\r
     {\r
     Buffer = malloc(dwSize);\r
     if (!Buffer)\r
     {\r
+        Log("malloc failed %u", dwSize);\r
         goto End;\r
     }\r
 \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
     {\r
         Log("Failed to get file version info : %u", LASTERR);\r
         goto End;\r
@@ -2086,18 +2070,117 @@ static int Windows11Bypass(const char *isofile, const char MntLetter, UINT8 Chec
                 Major = 11;\r
             }\r
 \r
                 Major = 11;\r
             }\r
 \r
-            if (Major != 11)\r
+            if (pMajor)\r
             {\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
             }\r
+            if (pRevision)\r
+            {\r
+                *pRevision = Revision;\r
+            }\r
+\r
+            ret = 0;\r
         }\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
     }\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
     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
 \r
     if (Check)\r
     {\r
@@ -2149,10 +2232,6 @@ static int Windows11Bypass(const char *isofile, const char MntLetter, UINT8 Chec
     Ret = 0;\r
 \r
 End:\r
     Ret = 0;\r
 \r
 End:\r
-    if (Buffer)\r
-    {\r
-        free(Buffer);\r
-    }\r
     \r
     return Ret; \r
 }\r
     \r
     return Ret; \r
 }\r