]> glassweightruler.freedombox.rocks Git - Ventoy.git/commitdiff
Optimization for Ventoy2Disk.exe
authorlongpanda <admin@ventoy.net>
Sat, 23 Oct 2021 07:46:28 +0000 (15:46 +0800)
committerlongpanda <admin@ventoy.net>
Sat, 23 Oct 2021 07:46:28 +0000 (15:46 +0800)
INSTALL/Ventoy2Disk.exe
Ventoy2Disk/Ventoy2Disk/DiskService_vds.c
Ventoy2Disk/Ventoy2Disk/PhyDrive.c

index 626efc0787802ccb122202662836d40a07aa3c8c..4f66a011d1287637ad03f18a3519321820d7f55a 100644 (file)
Binary files a/INSTALL/Ventoy2Disk.exe and b/INSTALL/Ventoy2Disk.exe differ
index 69f099673c18e0053bae211ff869d28b7da5f8c9..49479b6d594f5f0c2b2de4d6e8eeeab43e15bc7d 100644 (file)
@@ -887,7 +887,7 @@ STATIC BOOL VDS_CallBack_CleanDisk(void *pInterface, VDS_DISK_PROP *pDiskProp, U
 BOOL VDS_CleanDisk(int DriveIndex)\r
 {\r
        BOOL ret = VDS_DiskCommProc(INTF_ADVANCEDDISK, DriveIndex, VDS_CallBack_CleanDisk, 0);\r
 BOOL VDS_CleanDisk(int DriveIndex)\r
 {\r
        BOOL ret = VDS_DiskCommProc(INTF_ADVANCEDDISK, DriveIndex, VDS_CallBack_CleanDisk, 0);\r
-    Log("VDS_CleanDisk %d ret:%d", DriveIndex, ret);\r
+    Log("VDS_CleanDisk %d ret:%d (%s)", DriveIndex, ret, ret ? "SUCCESS" : "FAIL");\r
     return ret;\r
 }\r
 \r
     return ret;\r
 }\r
 \r
@@ -958,15 +958,15 @@ STATIC BOOL VDS_CallBack_DeletePartition(void *pInterface, VDS_DISK_PROP *pDiskP
 \r
 BOOL VDS_DeleteAllPartitions(int DriveIndex)\r
 {\r
 \r
 BOOL VDS_DeleteAllPartitions(int DriveIndex)\r
 {\r
-       BOOL ret = VDS_DiskCommProc(INTF_ADVANCEDDISK, DriveIndex, VDS_CallBack_DeletePartition, 0);\r
-    Log("VDS_DeleteAllPartitions %d ret:%d", DriveIndex, ret);\r
+       BOOL ret = VDS_DiskCommProc(INTF_ADVANCEDDISK, DriveIndex, VDS_CallBack_DeletePartition, 0);    \r
+       Log("VDS_DeleteAllPartitions %d ret:%d (%s)", DriveIndex, ret, ret ? "SUCCESS" : "FAIL");\r
     return ret;\r
 }\r
 \r
 BOOL VDS_DeleteVtoyEFIPartition(int DriveIndex)\r
 {\r
        BOOL ret = VDS_DiskCommProc(INTF_ADVANCEDDISK, DriveIndex, VDS_CallBack_DeletePartition, 2);\r
     return ret;\r
 }\r
 \r
 BOOL VDS_DeleteVtoyEFIPartition(int DriveIndex)\r
 {\r
        BOOL ret = VDS_DiskCommProc(INTF_ADVANCEDDISK, DriveIndex, VDS_CallBack_DeletePartition, 2);\r
-    Log("VDS_DeleteVtoyEFIPartition %d ret:%d", DriveIndex, ret);\r
+       Log("VDS_DeleteVtoyEFIPartition %d ret:%d (%s)", DriveIndex, ret, ret ? "SUCCESS" : "FAIL");\r
     return ret;\r
 }\r
 \r
     return ret;\r
 }\r
 \r
@@ -1029,8 +1029,8 @@ STATIC BOOL VDS_CallBack_ChangeEFIAttr(void *pInterface, VDS_DISK_PROP *pDiskPro
 \r
 BOOL VDS_ChangeVtoyEFIAttr(int DriveIndex, UINT64 Attr)\r
 {\r
 \r
 BOOL VDS_ChangeVtoyEFIAttr(int DriveIndex, UINT64 Attr)\r
 {\r
-       BOOL ret = VDS_DiskCommProc(INTF_ADVANCEDDISK, DriveIndex, VDS_CallBack_ChangeEFIAttr, Attr);\r
-    Log("VDS_ChangeVtoyEFIAttr %d ret:%d", DriveIndex, ret);\r
+       BOOL ret = VDS_DiskCommProc(INTF_ADVANCEDDISK, DriveIndex, VDS_CallBack_ChangeEFIAttr, Attr);    \r
+       Log("VDS_ChangeVtoyEFIAttr %d ret:%d (%s)", DriveIndex, ret, ret ? "SUCCESS" : "FAIL");\r
     return ret;\r
 }\r
 \r
     return ret;\r
 }\r
 \r
@@ -1070,7 +1070,7 @@ BOOL VDS_ChangeVtoyEFI2ESP(int DriveIndex, UINT64 Offset)
        Para.Offset = Offset;\r
 \r
        BOOL ret = VDS_DiskCommProc(INTF_ADVANCEDDISK2, DriveIndex, VDS_CallBack_ChangeEFIType, (ULONG)&Para);\r
        Para.Offset = Offset;\r
 \r
        BOOL ret = VDS_DiskCommProc(INTF_ADVANCEDDISK2, DriveIndex, VDS_CallBack_ChangeEFIType, (ULONG)&Para);\r
-       Log("VDS_ChangeVtoyEFI2ESP %d ret:%d", DriveIndex, ret);\r
+       Log("VDS_ChangeVtoyEFI2ESP %d ret:%d (%s)", DriveIndex, ret, ret ? "SUCCESS" : "FAIL");\r
        return ret;\r
 }\r
 \r
        return ret;\r
 }\r
 \r
@@ -1083,7 +1083,7 @@ BOOL VDS_ChangeVtoyEFI2Basic(int DriveIndex, UINT64 Offset)
        Para.Offset = Offset;\r
 \r
        BOOL ret = VDS_DiskCommProc(INTF_ADVANCEDDISK2, DriveIndex, VDS_CallBack_ChangeEFIType, (ULONG)&Para);\r
        Para.Offset = Offset;\r
 \r
        BOOL ret = VDS_DiskCommProc(INTF_ADVANCEDDISK2, DriveIndex, VDS_CallBack_ChangeEFIType, (ULONG)&Para);\r
-       Log("VDS_ChangeVtoyEFI2ESP %d ret:%d", DriveIndex, ret);\r
+       Log("VDS_ChangeVtoyEFI2Basic %d ret:%d (%s)", DriveIndex, ret, ret ? "SUCCESS" : "FAIL");\r
        return ret;\r
 }\r
 \r
        return ret;\r
 }\r
 \r
@@ -1157,8 +1157,8 @@ BOOL VDS_CreateVtoyEFIPart(int DriveIndex, UINT64 Offset)
        memcpy(&(Para.Type), &EspPartType, sizeof(GUID));\r
     CoCreateGuid(&(Para.Id));\r
 \r
        memcpy(&(Para.Type), &EspPartType, sizeof(GUID));\r
     CoCreateGuid(&(Para.Id));\r
 \r
-       BOOL ret = VDS_DiskCommProc(INTF_CREATEPARTITIONEX, DriveIndex, VDS_CallBack_CreateVtoyEFI, (ULONG)&Para);\r
-    Log("VDS_CreateVtoyEFIPart %d ret:%d", DriveIndex, ret);\r
+       BOOL ret = VDS_DiskCommProc(INTF_CREATEPARTITIONEX, DriveIndex, VDS_CallBack_CreateVtoyEFI, (ULONG)&Para);    \r
+       Log("VDS_CreateVtoyEFIPart %d ret:%d (%s)", DriveIndex, ret, ret ? "SUCCESS" : "FAIL");\r
     return ret; \r
 }\r
 \r
     return ret; \r
 }\r
 \r
@@ -1217,7 +1217,8 @@ BOOL VDS_FormatVtoyEFIPart(int DriveIndex, UINT64 Offset)
        Para.Offset = Offset;\r
        memcpy(Para.Name, L"VTOYEFI", 7 * 2);\r
 \r
        Para.Offset = Offset;\r
        memcpy(Para.Name, L"VTOYEFI", 7 * 2);\r
 \r
-       BOOL ret = VDS_DiskCommProc(INTF_PARTITIONMF, DriveIndex, VDS_CallBack_FormatVtoyEFI, (ULONG)&Para);\r
-       Log("VDS_FormatVtoyEFIPart %d ret:%d", DriveIndex, ret);\r
+       BOOL ret = VDS_DiskCommProc(INTF_PARTITIONMF, DriveIndex, VDS_CallBack_FormatVtoyEFI, (ULONG)&Para);    \r
+       Log("VDS_FormatVtoyEFIPart %d ret:%d (%s)", DriveIndex, ret, ret ? "SUCCESS" : "FAIL");\r
        return ret;\r
        return ret;\r
-}
\ No newline at end of file
+}\r
+\r
index d36f51dd848598f8f2a4cedd144ae949df1817fb..343866d582d644d15f9892875919bf52c7fb08cd 100644 (file)
@@ -1837,9 +1837,11 @@ static BOOL BackupDataBeforeCleanDisk(int PhyDrive, UINT64 DiskSize, BYTE **pBac
        BOOL Return = FALSE;\r
        BOOL ret = FALSE;\r
        BYTE *backup = NULL;\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
        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
 \r
        Log("BackupDataBeforeCleanDisk %d", PhyDrive);\r
 \r
@@ -1870,6 +1872,18 @@ static BOOL BackupDataBeforeCleanDisk(int PhyDrive, UINT64 DiskSize, BYTE **pBac
                goto out;\r
        }\r
        \r
                goto out;\r
        }\r
        \r
+       pGPT = (VTOY_GPT_INFO *)backup;\r
+       offset = pGPT->Head.EfiBackupLBA * 512;\r
+       if (offset >= (DiskSize - SIZE_2MB) && offset < DiskSize)\r
+       {\r
+               Log("EFI partition table check success"); \r
+       }\r
+       else\r
+       {\r
+               Log("Backup EFI LBA not in last 2MB range: %llu", pGPT->Head.EfiBackupLBA);\r
+               goto out;\r
+       }\r
+\r
        //read last 2MB\r
        liCurPosition.QuadPart = DiskSize - SIZE_2MB;\r
        liNewPosition.QuadPart = 0;\r
        //read last 2MB\r
        liCurPosition.QuadPart = DiskSize - SIZE_2MB;\r
        liNewPosition.QuadPart = 0;\r
@@ -2111,6 +2125,13 @@ int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId)
                {\r
                        bWriteBack = FALSE;\r
                }\r
                {\r
                        bWriteBack = FALSE;\r
                }\r
+\r
+               //write the first 2MB except parttable\r
+               if (!WriteBackupDataToDisk(hDrive, 34 * 512, pBackup + 34 * 512, SIZE_2MB - 34 * 512))\r
+               {\r
+                       bWriteBack = FALSE;\r
+               }\r
+\r
                Status = ERROR_NOT_FOUND;\r
        }\r
        else if (Esp2Basic)\r
                Status = ERROR_NOT_FOUND;\r
        }\r
        else if (Esp2Basic)\r
@@ -2288,12 +2309,7 @@ int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId)
 \r
        if (CleanDisk)\r
        {\r
 \r
        if (CleanDisk)\r
        {\r
-               if (!WriteBackupDataToDisk(hDrive, 4 * 512, pBackup + 4 * 512, SIZE_2MB - 4 * 512))\r
-               {\r
-                       bWriteBack = FALSE;\r
-               }\r
-\r
-               if (!WriteBackupDataToDisk(hDrive, 0, pBackup, 4 * 512))\r
+               if (!WriteBackupDataToDisk(hDrive, 0, pBackup, 34 * 512))\r
                {\r
                        bWriteBack = FALSE;\r
                }\r
                {\r
                        bWriteBack = FALSE;\r
                }\r
@@ -2302,9 +2318,15 @@ int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId)
 \r
                if (bWriteBack)\r
                {\r
 \r
                if (bWriteBack)\r
                {\r
-                       Log("Write success, now delete %s", BackBinFile);\r
+                       Log("Write backup data success, now delete %s", BackBinFile);\r
                        DeleteFileA(BackBinFile);\r
                }\r
                        DeleteFileA(BackBinFile);\r
                }\r
+               else\r
+               {\r
+                       Log("Write backup data failed");\r
+               }\r
+\r
+               Sleep(1000);\r
        }\r
 \r
     //Refresh Drive Layout\r
        }\r
 \r
     //Refresh Drive Layout\r