]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
Optimization for Ventoy2Disk.exe
authorlongpanda <admin@ventoy.net>
Tue, 26 Oct 2021 01:18:41 +0000 (09:18 +0800)
committerlongpanda <admin@ventoy.net>
Tue, 26 Oct 2021 01:18:41 +0000 (09:18 +0800)
INSTALL/Ventoy2Disk.exe
Ventoy2Disk/Ventoy2Disk/PhyDrive.c
Ventoy2Disk/Ventoy2Disk/WinDialog.c

index 6c068b82b4b4bea5967252a06b1141e69090521a..895af0342d36ae6f222b7b41cf5de12c60dcb5c7 100644 (file)
Binary files a/INSTALL/Ventoy2Disk.exe and b/INSTALL/Ventoy2Disk.exe differ
index 02c9c93e74138151cb0ccec8ed757cb946523d1d..774cf9cae7101c23128c5040be2a7455e454e29a 100644 (file)
@@ -1591,9 +1591,11 @@ int InstallVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int PartStyle, int TryId)
     UINT64 Part1SectorCount = 0;\r
     UINT64 Part2StartSector = 0;\r
 \r
+       Log("#####################################################");\r
     Log("InstallVentoy2PhyDrive try%d %s PhyDrive%d <<%s %s %dGB>>", TryId,\r
         PartStyle ? "GPT" : "MBR", pPhyDrive->PhyDrive, pPhyDrive->VendorId, pPhyDrive->ProductId,\r
         GetHumanReadableGBSize(pPhyDrive->SizeInBytes));\r
+       Log("#####################################################");\r
 \r
     if (PartStyle)\r
     {\r
@@ -1828,29 +1830,14 @@ End:
     return rc;\r
 }\r
 \r
-static BOOL BackupDataBeforeCleanDisk(int PhyDrive, UINT64 DiskSize, BYTE **pBackup)\r
+static BOOL DiskCheckWriteAccess(HANDLE hDrive)\r
 {\r
        DWORD dwSize;\r
-       DWORD dwStatus;\r
-       BOOL Return = FALSE;\r
        BOOL ret = FALSE;\r
-       BYTE *backup = NULL;\r
-       UINT64 offset;\r
+       BOOL bRet = FALSE;\r
        BYTE Buffer[512];\r
-       HANDLE hDrive = INVALID_HANDLE_VALUE;\r
        LARGE_INTEGER liCurPosition;\r
        LARGE_INTEGER liNewPosition;\r
-       VTOY_GPT_INFO *pGPT = NULL;\r
-\r
-       Log("BackupDataBeforeCleanDisk %d", PhyDrive);\r
-\r
-       // step1: check write access\r
-       hDrive = GetPhysicalHandle(PhyDrive, TRUE, TRUE, FALSE);\r
-       if (hDrive == INVALID_HANDLE_VALUE)\r
-       {\r
-               Log("Failed to GetPhysicalHandle for write.");\r
-               goto out;\r
-       }\r
 \r
        liCurPosition.QuadPart = 2039 * 512;\r
        liNewPosition.QuadPart = 0;\r
@@ -1860,7 +1847,7 @@ static BOOL BackupDataBeforeCleanDisk(int PhyDrive, UINT64 DiskSize, BYTE **pBac
                Log("SetFilePointer1 Failed %u", LASTERR);\r
                goto out;\r
        }\r
-       \r
+\r
 \r
        dwSize = 0;\r
        ret = ReadFile(hDrive, Buffer, 512, &dwSize, NULL);\r
@@ -1880,6 +1867,7 @@ static BOOL BackupDataBeforeCleanDisk(int PhyDrive, UINT64 DiskSize, BYTE **pBac
                goto out;\r
        }\r
 \r
+       dwSize = 0;\r
        ret = WriteFile(hDrive, Buffer, 512, &dwSize, NULL);\r
        if ((!ret) || dwSize != 512)\r
        {\r
@@ -1887,9 +1875,46 @@ static BOOL BackupDataBeforeCleanDisk(int PhyDrive, UINT64 DiskSize, BYTE **pBac
                goto out;\r
        }\r
 \r
-       CHECK_CLOSE_HANDLE(hDrive);\r
-       Log("Write access check success");\r
+       bRet = TRUE;\r
+\r
+out:\r
+       \r
+       return bRet;\r
+}\r
+\r
+static BOOL BackupDataBeforeCleanDisk(int PhyDrive, UINT64 DiskSize, BYTE **pBackup)\r
+{\r
+       DWORD dwSize;\r
+       DWORD dwStatus;\r
+       BOOL Return = FALSE;\r
+       BOOL ret = FALSE;\r
+       BYTE *backup = NULL;\r
+       UINT64 offset;\r
+       HANDLE hDrive = INVALID_HANDLE_VALUE;\r
+       LARGE_INTEGER liCurPosition;\r
+       LARGE_INTEGER liNewPosition;\r
+       VTOY_GPT_INFO *pGPT = NULL;\r
+\r
+       Log("BackupDataBeforeCleanDisk %d", PhyDrive);\r
+\r
+       // step1: check write access\r
+       hDrive = GetPhysicalHandle(PhyDrive, TRUE, TRUE, FALSE);\r
+       if (hDrive == INVALID_HANDLE_VALUE)\r
+       {\r
+               Log("Failed to GetPhysicalHandle for write.");\r
+               goto out;\r
+       }\r
 \r
+       if (DiskCheckWriteAccess(hDrive))\r
+       {\r
+               Log("DiskCheckWriteAccess success");\r
+               CHECK_CLOSE_HANDLE(hDrive);\r
+       }\r
+       else\r
+       {\r
+               Log("DiskCheckWriteAccess failed");\r
+               goto out;\r
+       }\r
 \r
        //step2 backup 4MB data\r
        backup = malloc(SIZE_1MB * 4);\r
@@ -2016,9 +2041,11 @@ int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId)
        VTOY_GPT_INFO *pGptInfo = NULL;\r
        UINT8 ReservedData[4096];\r
 \r
+       Log("#####################################################");\r
        Log("UpdateVentoy2PhyDrive try%d %s PhyDrive%d <<%s %s %dGB>>", TryId,\r
                pPhyDrive->PartStyle ? "GPT" : "MBR", pPhyDrive->PhyDrive, pPhyDrive->VendorId, pPhyDrive->ProductId,\r
                GetHumanReadableGBSize(pPhyDrive->SizeInBytes));\r
+       Log("#####################################################");\r
 \r
        PROGRESS_BAR_SET_POS(PT_LOCK_FOR_CLEAN);\r
 \r
@@ -2262,20 +2289,29 @@ int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId)
     {\r
                if (pPhyDrive->PartStyle == 0)\r
                {\r
-                       ForceMBR = TRUE;\r
+                       if (DiskCheckWriteAccess(hDrive))\r
+                       {\r
+                               Log("MBR DiskCheckWriteAccess success");\r
 \r
-                       Log("Try write failed, now delete partition 2 for MBR...");\r
-                       CHECK_CLOSE_HANDLE(hDrive);\r
+                               ForceMBR = TRUE;\r
 \r
-                       Log("Now delete partition 2...");\r
-                       VDS_DeleteVtoyEFIPartition(pPhyDrive->PhyDrive);\r
+                               Log("Try write failed, now delete partition 2 for MBR...");\r
+                               CHECK_CLOSE_HANDLE(hDrive);\r
 \r
-                       hDrive = GetPhysicalHandle(pPhyDrive->PhyDrive, TRUE, TRUE, FALSE);\r
-                       if (hDrive == INVALID_HANDLE_VALUE)\r
+                               Log("Now delete partition 2...");\r
+                               VDS_DeleteVtoyEFIPartition(pPhyDrive->PhyDrive);\r
+\r
+                               hDrive = GetPhysicalHandle(pPhyDrive->PhyDrive, TRUE, TRUE, FALSE);\r
+                               if (hDrive == INVALID_HANDLE_VALUE)\r
+                               {\r
+                                       Log("Failed to GetPhysicalHandle for write.");\r
+                                       rc = 1;\r
+                                       goto End;\r
+                               }\r
+                       }\r
+                       else\r
                        {\r
-                               Log("Failed to GetPhysicalHandle for write.");\r
-                               rc = 1;\r
-                               goto End;\r
+                               Log("MBR DiskCheckWriteAccess failed");\r
                        }\r
                }\r
                else\r
index 564978d1ee510d1544140f3a8b755d8853977beb..37850f4bd7611b622318b64c9fae43354b9180ba 100644 (file)
Binary files a/Ventoy2Disk/Ventoy2Disk/WinDialog.c and b/Ventoy2Disk/Ventoy2Disk/WinDialog.c differ