From 3bb83709da81bf5a35b66f611bac0455b9dbd39e Mon Sep 17 00:00:00 2001 From: Pete Batard Date: Tue, 18 May 2021 15:18:28 +0100 Subject: [PATCH] [core] avoid the creation of 'System Volume Information' for ESPs written in DD mode * Trying to mount accessible partitions after writing an image may lead to the creation of the infamous 'System Volume Information' folder on ESPs, which in turn leads to checksum errors for Ubuntu's boot/grub/efi.img (that maps to the Ubuntu ESP). So comment out that code. * Also fix a missing CRLFs in the log after displaying write progress. --- res/appstore/Package.appxmanifest | 2 +- src/format.c | 22 ++++++++++++++-------- src/rufus.rc | 10 +++++----- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/res/appstore/Package.appxmanifest b/res/appstore/Package.appxmanifest index 515efe21..4fb4abaf 100644 --- a/res/appstore/Package.appxmanifest +++ b/res/appstore/Package.appxmanifest @@ -11,7 +11,7 @@ + Version="3.14.1792.0" /> Rufus diff --git a/src/format.c b/src/format.c index fdaee4fc..f29e716f 100644 --- a/src/format.c +++ b/src/format.c @@ -1565,7 +1565,7 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive) // Read block and compare against the block that needs to be written s = ReadFile(hPhysicalDrive, cmp_buffer, read_size[0], &comp_size, NULL); if ((!s) || (comp_size != read_size[0])) { - uprintf("Read error: Could not read data for fast zeroing comparison - %s", WindowsErrorString()); + uprintf("\r\nRead error: Could not read data for fast zeroing comparison - %s", WindowsErrorString()); goto out; } @@ -1585,7 +1585,7 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive) // Move the file pointer position back for writing li.QuadPart = wb; if (!SetFilePointerEx(hPhysicalDrive, li, NULL, FILE_BEGIN)) { - uprintf("Error: Could not reset position - %s", WindowsErrorString()); + uprintf("\r\nError: Could not reset position - %s", WindowsErrorString()); goto out; } // Throttle read operations @@ -1598,9 +1598,9 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive) if ((s) && (write_size == read_size[0])) break; if (s) - uprintf("Write error: Wrote %d bytes, expected %d bytes", write_size, read_size[0]); + uprintf("\r\nWrite error: Wrote %d bytes, expected %d bytes", write_size, read_size[0]); else - uprintf("Write error at sector %lld: %s", wb / SelectedDrive.SectorSize, WindowsErrorString()); + uprintf("\r\nWrite error at sector %lld: %s", wb / SelectedDrive.SectorSize, WindowsErrorString()); if (i < WRITE_RETRIES) { li.QuadPart = wb; uprintf("Retrying in %d seconds...", WRITE_TIMEOUT / 1000); @@ -1688,7 +1688,7 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive) // 1. Wait for the current read operation to complete (and update the read size) if ((!WaitFileAsync(hSourceImage, DRIVE_ACCESS_TIMEOUT)) || (!GetSizeAsync(hSourceImage, &read_size[read_bufnum]))) { - uprintf("Read error: %s", WindowsErrorString()); + uprintf("\r\nRead error: %s", WindowsErrorString()); FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_READ_FAULT; goto out; } @@ -1716,9 +1716,9 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive) if ((s) && (write_size == read_size[proc_bufnum])) break; if (s) - uprintf("Write error: Wrote %d bytes, expected %d bytes", write_size, read_size[proc_bufnum]); + uprintf("\r\nWrite error: Wrote %d bytes, expected %d bytes", write_size, read_size[proc_bufnum]); else - uprintf("Write error at sector %lld: %s", wb / SelectedDrive.SectorSize, WindowsErrorString()); + uprintf("\r\nWrite error at sector %lld: %s", wb / SelectedDrive.SectorSize, WindowsErrorString()); if (i < WRITE_RETRIES) { li.QuadPart = wb; uprintf("Retrying in %d seconds...", WRITE_TIMEOUT / 1000); @@ -1736,7 +1736,7 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive) if (i > WRITE_RETRIES) goto out; } - + uprintfs("\r\n"); } RefreshDriveLayout(hPhysicalDrive); ret = TRUE; @@ -1961,6 +1961,11 @@ DWORD WINAPI FormatThread(void* param) if ((boot_type == BT_IMAGE) && write_as_image) { WriteDrive(hPhysicalDrive, FALSE); + // Trying to mount accessible partitions after writing an image leads to the + // creation of the infamous 'System Volume Information' folder on ESPs, which + // in turn leads to checksum errors for Ubuntu's boot/grub/efi.img (that maps + // to the Ubuntu ESP). So we no longer call on the code below... +#if 0 // If the image contains a partition we might be able to access, try to re-mount it safe_unlockclose(hPhysicalDrive); safe_unlockclose(hLogicalVolume); @@ -1971,6 +1976,7 @@ DWORD WINAPI FormatThread(void* param) if ((volume_name != NULL) && (MountVolume(drive_name, volume_name))) uprintf("Remounted %s as %C:", volume_name, drive_name[0]); } +#endif goto out; } diff --git a/src/rufus.rc b/src/rufus.rc index c0ccc3b7..ce8bdad0 100644 --- a/src/rufus.rc +++ b/src/rufus.rc @@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL IDD_DIALOG DIALOGEX 12, 12, 232, 326 STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_ACCEPTFILES -CAPTION "Rufus 3.14.1791" +CAPTION "Rufus 3.14.1792" FONT 9, "Segoe UI Symbol", 400, 0, 0x0 BEGIN LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP @@ -395,8 +395,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 3,14,1791,0 - PRODUCTVERSION 3,14,1791,0 + FILEVERSION 3,14,1792,0 + PRODUCTVERSION 3,14,1792,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -414,13 +414,13 @@ BEGIN VALUE "Comments", "https://rufus.ie" VALUE "CompanyName", "Akeo Consulting" VALUE "FileDescription", "Rufus" - VALUE "FileVersion", "3.14.1791" + VALUE "FileVersion", "3.14.1792" VALUE "InternalName", "Rufus" VALUE "LegalCopyright", "© 2011-2021 Pete Batard (GPL v3)" VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" VALUE "OriginalFilename", "rufus-3.14.exe" VALUE "ProductName", "Rufus" - VALUE "ProductVersion", "3.14.1791" + VALUE "ProductVersion", "3.14.1792" END END BLOCK "VarFileInfo"