fl_fclose(file);\r
\r
Log("Now delete all efi files ...");\r
- fl_remove("/EFI/BOOT/BOOTX64.EFI");\r
- fl_remove("/EFI/BOOT/grubx64.efi");\r
+ fl_remove("/EFI/BOOT/BOOTX64.EFI"); \r
+ fl_remove("/EFI/BOOT/grubx64.efi"); \r
fl_remove("/EFI/BOOT/grubx64_real.efi");\r
fl_remove("/EFI/BOOT/MokManager.efi");\r
fl_remove("/EFI/BOOT/mmx64.efi");\r
fl_remove("/ENROLL_THIS_KEY_IN_MOKMANAGER.cer");\r
+ fl_remove("/EFI/BOOT/grub.efi");\r
\r
file = fl_fopen("/EFI/BOOT/BOOTX64.EFI", "wb");\r
Log("Open bootx64 efi file %p ", file);\r
int i;\r
int rc = 0;\r
int state = 0;\r
+ BOOL ReformatOK;\r
HANDLE hDrive;\r
DWORD dwSize;\r
BOOL bRet;\r
}\r
else\r
{\r
- Log("Formatting part1 exFAT ...");\r
- if (0 != FormatPart1exFAT(pPhyDrive->SizeInBytes))\r
+ CHAR TmpBuffer[512] = { 0 };\r
+\r
+ Log("Zero part1 file system ...");\r
+ SetFilePointer(hDrive, VENTOY_PART1_START_SECTOR * 512, NULL, FILE_BEGIN);\r
+ for (i = 0; i < 32; i++)\r
{\r
- Log("FormatPart1exFAT failed.");\r
- rc = 1;\r
- goto End;\r
+ WriteFile(hDrive, TmpBuffer, 512, &dwSize, NULL);\r
}\r
}\r
- \r
\r
PROGRESS_BAR_SET_POS(PT_FORMAT_PART2);\r
Log("Writing part2 FAT img ...");\r
}\r
}\r
\r
+ // close handle, or it will deny reformat\r
+ Log("Close handle ...");\r
+ CHECK_CLOSE_HANDLE(hDrive);\r
+\r
+ ReformatOK = FALSE;\r
+\r
if (state)\r
{\r
if (LargeFAT32)\r
Log("No need to reformat for large FAT32");\r
pPhyDrive->VentoyFsClusterSize = GetVolumeClusterSize(MountDrive);\r
}\r
- else if (DISK_FormatVolume(MountDrive, GetVentoyFsType(), Part1SectorCount * 512))\r
+ else\r
{\r
- Log("Reformat %C:\\ to %s SUCCESS", MountDrive, GetVentoyFsName());\r
- pPhyDrive->VentoyFsClusterSize = GetVolumeClusterSize(MountDrive);\r
+ bRet = DISK_FormatVolume(MountDrive, GetVentoyFsType(), Part1SectorCount * 512);\r
+ for (i = 0; bRet == FALSE && i < 2; i++)\r
+ {\r
+ Log("Wait and retry reformat ...");\r
+ Sleep(1000);\r
+ bRet = DISK_FormatVolume(MountDrive, GetVentoyFsType(), Part1SectorCount * 512);\r
+ }\r
\r
- if ((GetVentoyFsType() != VTOY_FS_UDF) && (pPhyDrive->VentoyFsClusterSize < 2048))\r
+ if (bRet)\r
{\r
- for (i = 0; i < 10; i++)\r
+ ReformatOK = TRUE;\r
+ Log("Reformat %C:\\ to %s SUCCESS", MountDrive, GetVentoyFsName());\r
+ pPhyDrive->VentoyFsClusterSize = GetVolumeClusterSize(MountDrive);\r
+\r
+ if ((GetVentoyFsType() != VTOY_FS_UDF) && (pPhyDrive->VentoyFsClusterSize < 2048))\r
{\r
- Log("### Invalid cluster size %d ###", pPhyDrive->VentoyFsClusterSize);\r
- } \r
+ for (i = 0; i < 10; i++)\r
+ {\r
+ Log("### Invalid cluster size %d ###", pPhyDrive->VentoyFsClusterSize);\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ Log("Reformat %C:\\ to %s FAILED", MountDrive, GetVentoyFsName());\r
}\r
- }\r
- else\r
- {\r
- Log("Reformat %C:\\ to %s FAILED", MountDrive, GetVentoyFsName());\r
}\r
}\r
else\r
Log("Can not reformat %s to %s", DriveName, GetVentoyFsName());\r
}\r
\r
+ if (!ReformatOK)\r
+ {\r
+ Log("Format to exfat with built-in algorithm");\r
+\r
+ hDrive = GetPhysicalHandle(pPhyDrive->PhyDrive, TRUE, TRUE, FALSE);\r
+ if (hDrive == INVALID_HANDLE_VALUE)\r
+ {\r
+ Log("Failed to GetPhysicalHandle for write.");\r
+ }\r
+ else\r
+ {\r
+ if (0 != FormatPart1exFAT(pPhyDrive->SizeInBytes))\r
+ {\r
+ Log("FormatPart1exFAT SUCCESS.");\r
+ }\r
+ else\r
+ {\r
+ Log("FormatPart1exFAT FAILED.");\r
+ }\r
+\r
+ CHECK_CLOSE_HANDLE(hDrive);\r
+ }\r
+ }\r
+\r
Log("OK\n");\r
}\r
else\r
Log("###### [Error:] Virtual Disk Service (VDS) Unavailable ######");\r
Log("###### [Error:] Virtual Disk Service (VDS) Unavailable ######");\r
}\r
+\r
+ CHECK_CLOSE_HANDLE(hDrive);\r
}\r
\r
if (pGptInfo)\r
{\r
free(pGptInfo);\r
}\r
-\r
- CHECK_CLOSE_HANDLE(hDrive);\r
+ \r
return rc;\r
}\r
\r