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
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
Log("SetFilePointer1 Failed %u", LASTERR);\r
goto out;\r
}\r
- \r
+\r
\r
dwSize = 0;\r
ret = ReadFile(hDrive, Buffer, 512, &dwSize, NULL);\r
goto out;\r
}\r
\r
+ dwSize = 0;\r
ret = WriteFile(hDrive, Buffer, 512, &dwSize, NULL);\r
if ((!ret) || dwSize != 512)\r
{\r
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
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
{\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