diff --git a/res/md5/bootaa64.efi b/res/md5/bootaa64.efi deleted file mode 100644 index ac57a169..00000000 Binary files a/res/md5/bootaa64.efi and /dev/null differ diff --git a/res/md5/bootarm.efi b/res/md5/bootarm.efi deleted file mode 100644 index 2211a255..00000000 Binary files a/res/md5/bootarm.efi and /dev/null differ diff --git a/res/md5/bootia32.efi b/res/md5/bootia32.efi deleted file mode 100644 index 4eeb657a..00000000 Binary files a/res/md5/bootia32.efi and /dev/null differ diff --git a/res/md5/bootriscv64.efi b/res/md5/bootriscv64.efi deleted file mode 100644 index f870dd28..00000000 Binary files a/res/md5/bootriscv64.efi and /dev/null differ diff --git a/res/md5/bootx64.efi b/res/md5/bootx64.efi deleted file mode 100644 index 94ccb200..00000000 Binary files a/res/md5/bootx64.efi and /dev/null differ diff --git a/res/md5/readme.txt b/res/md5/readme.txt deleted file mode 100644 index 069a3f6c..00000000 --- a/res/md5/readme.txt +++ /dev/null @@ -1,3 +0,0 @@ -This directory contains the uefi-md5sum bootloaders added by Rufus for media validation. - -See https://github.com/pbatard/uefi-md5sum for details. diff --git a/src/format.c b/src/format.c index 4abe5105..afac766e 100644 --- a/src/format.c +++ b/src/format.c @@ -71,7 +71,6 @@ static float format_percent = 0.0f; static int task_number = 0, actual_fs_type; static unsigned int sec_buf_pos = 0; extern const int nb_steps[FS_MAX]; -extern const char* md5sum_name[2]; extern uint32_t dur_mins, dur_secs; extern uint32_t wim_nb_files, wim_proc_files, wim_extra_files; extern BOOL force_large_fat32, enable_ntfs_compression, lock_drive, zero_drive, fast_zeroing, enable_file_indexing; @@ -1036,11 +1035,11 @@ BOOL WritePBR(HANDLE hLogicalVolume) uprintf(using_msg, bt_to_name(), "FAT32"); for (i = 0; i < 2; i++) { if (!is_fat_32_fs(fp)) { - uprintf("New volume does not have a %s FAT32 boot sector - aborting", i ? "secondary" : "primary"); + uprintf("New volume does not have a %s FAT32 boot sector - aborting", i?"secondary":"primary"); break; } - uprintf("Confirmed new volume has a %s FAT32 boot sector", i ? "secondary" : "primary"); - uprintf("Setting %s FAT32 boot sector for boot...", i ? "secondary" : "primary"); + uprintf("Confirmed new volume has a %s FAT32 boot sector", i?"secondary":"primary"); + uprintf("Setting %s FAT32 boot sector for boot...", i?"secondary":"primary"); if (boot_type == BT_FREEDOS) { if (!write_fat_32_fd_br(fp, 0)) break; } else if (boot_type == BT_REACTOS) { @@ -1965,11 +1964,8 @@ DWORD WINAPI FormatThread(void* param) } } } - UpdateProgress(OP_FINALIZE, -1.0f); PrintInfoDebug(0, MSG_233); - if ((boot_type == BT_IMAGE) && (image_path != NULL) && (img_report.is_iso) && (!windows_to_go)) - UpdateMD5Sum(drive_name, md5sum_name[img_report.has_md5sum ? img_report.has_md5sum - 1 : 0]); if (IsChecked(IDC_EXTENDED_LABEL)) SetAutorun(drive_name); // Issue another complete remount before we exit, to ensure we're clean diff --git a/src/hash.c b/src/hash.c index 3635c860..53a9c18d 100644 --- a/src/hash.c +++ b/src/hash.c @@ -60,7 +60,6 @@ #endif #include -#include #include #include #include @@ -104,18 +103,14 @@ /* Globals */ char hash_str[HASH_MAX][150]; +uint32_t proc_bufnum, hash_count[HASH_MAX] = { MD5_HASHSIZE, SHA1_HASHSIZE, SHA256_HASHSIZE, SHA512_HASHSIZE }; HANDLE data_ready[HASH_MAX] = { 0 }, thread_ready[HASH_MAX] = { 0 }; DWORD read_size[NUM_BUFFERS]; -BOOL enable_extra_hashes = FALSE, validate_md5sum = FALSE; +BOOL enable_extra_hashes = FALSE; uint8_t ALIGNED(64) buffer[NUM_BUFFERS][BUFFER_SIZE]; -uint8_t* pe256ssp = NULL; -uint32_t proc_bufnum, hash_count[HASH_MAX] = { MD5_HASHSIZE, SHA1_HASHSIZE, SHA256_HASHSIZE, SHA512_HASHSIZE }; -uint32_t pe256ssp_size = 0; -uint64_t md5sum_totalbytes; -StrArray modified_files = { 0 }; - extern int default_thread_priority; -extern const char* efi_bootname[ARCH_MAX]; +uint32_t pe256ssp_size = 0; +uint8_t* pe256ssp = NULL; /* * Rotate 32 or 64 bit integers by n bytes. @@ -2127,137 +2122,6 @@ void PrintRevokedBootloaderInfo(void) uprintf("WARNING: Could not parse this system's SkuSiPolicy.p7b for additional revoked UEFI bootloaders"); } -/* - * Updates the MD5SUMS/md5sum.txt file that some distros (Ubuntu, Mint...) - * use to validate the media. Because we may alter some of the validated files - * to add persistence and whatnot, we need to alter the MD5 list as a result. - * The format of the file is expected to always be " " on - * individual lines. - * This function is also used to finalize the md5sum.txt we create for use with - * our uefi-md5sum bootloaders. - */ -void UpdateMD5Sum(const char* dest_dir, const char* md5sum_name) -{ - BOOL display_header = TRUE; - BYTE* res_data; - DWORD res_size; - HANDLE hFile; - intptr_t pos; - uint32_t i, j, size, md5_size, new_size; - uint8_t sum[MD5_HASHSIZE]; - char md5_path[64], path1[64], path2[64], *md5_data = NULL, *new_data = NULL, *str_pos; - char *d, *s, *p; - - if (!img_report.has_md5sum && !validate_md5sum) - goto out; - - static_sprintf(md5_path, "%s\\%s", dest_dir, md5sum_name); - md5_size = read_file(md5_path, (uint8_t**)&md5_data); - if (md5_size == 0) - goto out; - - for (i = 0; i < modified_files.Index; i++) { - for (j = 0; j < (uint32_t)strlen(modified_files.String[i]); j++) - if (modified_files.String[i][j] == '\\') - modified_files.String[i][j] = '/'; - str_pos = strstr(md5_data, &modified_files.String[i][2]); - if (str_pos == NULL) - // File is not listed in md5 sums - continue; - if (display_header) { - uprintf("Updating %s:", md5_path); - display_header = FALSE; - } - uprintf("● %s", &modified_files.String[i][2]); - pos = str_pos - md5_data; - HashFile(HASH_MD5, modified_files.String[i], sum); - while ((pos > 0) && (md5_data[pos - 1] != '\n')) - pos--; - assert(IS_HEXASCII(md5_data[pos])); - for (j = 0; j < 16; j++) { - md5_data[pos + 2 * j] = ((sum[j] >> 4) < 10) ? ('0' + (sum[j] >> 4)) : ('a' - 0xa + (sum[j] >> 4)); - md5_data[pos + 2 * j + 1] = ((sum[j] & 15) < 10) ? ('0' + (sum[j] & 15)) : ('a' - 0xa + (sum[j] & 15)); - } - } - - // If we validate md5sum we need to update the original bootloader names and add md5sum_totalbytes - if (validate_md5sum) { - new_size = md5_size; - new_data = malloc(md5_size + 1024); - assert(new_data != NULL); - if (new_data == NULL) - goto out; - // Will be nonzero if we created the file, otherwise zero - if (md5sum_totalbytes != 0) { - snprintf(new_data, md5_size + 1024, "# md5sum_totalbytes = 0x%llx\n", md5sum_totalbytes); - new_size += (uint32_t)strlen(new_data); - d = &new_data[strlen(new_data)]; - } else { - d = new_data; - } - s = md5_data; - for (p = md5_data; (p = StrStrIA(p, " ./efi/boot/boot")) != NULL; ) { - for (i = 1; i < ARRAYSIZE(efi_bootname); i++) { - if (p[12 + strlen(efi_bootname[i])] != 0x0a) - continue; - p[12 + strlen(efi_bootname[i])] = 0; - if (lstrcmpiA(&p[12], efi_bootname[i]) == 0) { - res_data = (BYTE*)GetResource(hMainInstance, MAKEINTRESOURCEA(IDR_MD5_BOOT + i), - _RT_RCDATA, efi_bootname[i], &res_size, FALSE); - static_sprintf(path1, "%s\\%s", dest_dir, &p[3]); - for (j = 0; j < strlen(path1); j++) - if (path1[j] == '/') path1[j] = '\\'; - static_strcpy(path2, path1); - path2[strlen(path2) - 4] = 0; - static_strcat(path2, "_original.efi"); - if (res_data != NULL && MoveFileU(path1, path2)) { - uprintf("Renamed: %s → %s", path1, path2); - hFile = CreateFileA(path1, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - if ((hFile == NULL) || (hFile == INVALID_HANDLE_VALUE)) { - uprintf("Could not create '%s': %s.", path1, WindowsErrorString()); - MoveFileU(path2, path1); - continue; - } - if (!WriteFileWithRetry(hFile, res_data, res_size, NULL, WRITE_RETRIES)) { - uprintf("Could not write '%s': %s.", path1, WindowsErrorString()); - safe_closehandle(hFile); - MoveFileU(path2, path1); - continue; - } - safe_closehandle(hFile); - uprintf("Created: %s (%s)", path1, SizeToHumanReadable(res_size, FALSE, FALSE)); - size = (uint32_t)(p - s) + 12 + (uint32_t)strlen(efi_bootname[i]) - 4; - memcpy(d, s, size); - d = &d[size]; - strcpy(d, "_original.efi\n"); - new_size += 9; - d = &d[14]; - s = &p[12 + strlen(efi_bootname[i]) + 1]; - // TODO: Update sources/boot.wim if we modified it - // Also, we'll need to keep a copy of the size of boot.wim BEFORE we alter it - // so we can adjust md5sum_totalbytes - } - } - p[12 + strlen(efi_bootname[i])] = 0x0a; - } - p = &p[12]; - } - p = &md5_data[md5_size]; - memcpy(d, s, p - s); - free(md5_data); - md5_data = new_data; - md5_size = new_size; - } - - write_file(md5_path, md5_data, md5_size); - free(md5_data); - -out: - // We no longer need the string array at this stage - StrArrayDestroy(&modified_files); -} - #if defined(_DEBUG) || defined(TEST) || defined(ALPHA) /* Convert a lowercase hex string to binary. Returned value must be freed */ uint8_t* to_bin(const char* str) diff --git a/src/iso.c b/src/iso.c index 391bf8ec..fbdcba7e 100644 --- a/src/iso.c +++ b/src/iso.c @@ -82,10 +82,8 @@ typedef struct { RUFUS_IMG_REPORT img_report; int64_t iso_blocking_status = -1; -extern uint64_t md5sum_totalbytes; -extern BOOL preserve_timestamps, enable_ntfs_compression, validate_md5sum; +extern BOOL preserve_timestamps, enable_ntfs_compression; extern HANDLE format_thread; -extern StrArray modified_files; BOOL enable_iso = TRUE, enable_joliet = TRUE, enable_rockridge = TRUE, has_ldlinux_c32; #define ISO_BLOCKING(x) do {x; iso_blocking_status++; } while(0) static const char* psz_extract_dir; @@ -94,7 +92,7 @@ const char* bootmgr_efi_name = "bootmgr.efi"; static const char* grldr_name = "grldr"; static const char* ldlinux_name = "ldlinux.sys"; static const char* ldlinux_c32 = "ldlinux.c32"; -const char* md5sum_name[2] = { "md5sum.txt", "MD5SUMS" }; +static const char* md5sum_name[] = { "MD5SUMS", "md5sum.txt" }; static const char* casper_dirname = "/casper"; static const char* proxmox_dirname = "/proxmox"; const char* efi_dirname = "/efi/boot"; @@ -126,8 +124,7 @@ static const int64_t old_c32_threshold[NB_OLD_C32] = OLD_C32_THRESHOLD; static uint8_t joliet_level = 0; static uint64_t total_blocks, extra_blocks, nb_blocks, last_nb_blocks; static BOOL scan_only = FALSE; -static FILE* fd_md5sum = NULL; -static StrArray config_path, isolinux_path; +static StrArray config_path, isolinux_path, modified_path; static char symlinked_syslinux[MAX_PATH]; // Ensure filenames do not contain invalid FAT32 or NTFS characters @@ -478,11 +475,66 @@ static void fix_config(const char* psz_fullpath, const char* psz_path, const cha } if (modified) - StrArrayAdd(&modified_files, psz_fullpath, TRUE); + StrArrayAdd(&modified_path, psz_fullpath, TRUE); free(src); } +// This updates the MD5SUMS/md5sum.txt file that some distros (Ubuntu, Mint...) +// use to validate the media. Because we may alter some of the validated files +// to add persistence and whatnot, we need to alter the MD5 list as a result. +// The format of the file is expected to always be " " on +// individual lines. +static void update_md5sum(void) +{ + BOOL display_header = TRUE; + intptr_t pos; + uint32_t i, j, size, md5_size; + uint8_t* buf = NULL, sum[16]; + char md5_path[64], * md5_data = NULL, * str_pos; + + if (!img_report.has_md5sum) + goto out; + + assert(img_report.has_md5sum <= ARRAYSIZE(md5sum_name)); + if (img_report.has_md5sum > ARRAYSIZE(md5sum_name)) + goto out; + + static_sprintf(md5_path, "%s\\%s", psz_extract_dir, md5sum_name[img_report.has_md5sum - 1]); + md5_size = read_file(md5_path, (uint8_t**)&md5_data); + if (md5_size == 0) + goto out; + + for (i = 0; i < modified_path.Index; i++) { + str_pos = strstr(md5_data, &modified_path.String[i][2]); + if (str_pos == NULL) + // File is not listed in md5 sums + continue; + if (display_header) { + uprintf("Updating %s:", md5_path); + display_header = FALSE; + } + uprintf("● %s", &modified_path.String[i][2]); + pos = str_pos - md5_data; + size = read_file(modified_path.String[i], &buf); + if (size == 0) + continue; + HashBuffer(HASH_MD5, buf, size, sum); + free(buf); + while ((pos > 0) && (md5_data[pos - 1] != '\n')) + pos--; + for (j = 0; j < 16; j++) { + md5_data[pos + 2 * j] = ((sum[j] >> 4) < 10) ? ('0' + (sum[j] >> 4)) : ('a' - 0xa + (sum[j] >> 4)); + md5_data[pos + 2 * j + 1] = ((sum[j] & 15) < 10) ? ('0' + (sum[j] & 15)) : ('a' - 0xa + (sum[j] & 15)); + } + } + + write_file(md5_path, md5_data, md5_size); + free(md5_data); + +out: + StrArrayDestroy(&modified_path); +} static void print_extracted_file(char* psz_fullpath, uint64_t file_length) { @@ -534,10 +586,9 @@ static int udf_extract_files(udf_t *p_udf, udf_dirent_t *p_udf_dirent, const cha HANDLE file_handle = NULL; DWORD buf_size, wr_size, err; EXTRACT_PROPS props; - HASH_CONTEXT ctx; BOOL r, is_identical; int length; - size_t i, j, nb; + size_t i, nb; char tmp[128], *psz_fullpath = NULL, *psz_sanpath = NULL; const char* psz_basename; udf_dirent_t *p_udf_dirent2; @@ -618,22 +669,16 @@ static int udf_extract_files(udf_t *p_udf, udf_dirent_t *p_udf_dirent, const cha else goto out; } else { - if (fd_md5sum != NULL) - hash_init[HASH_MD5](&ctx); while (file_length > 0) { if (FormatStatus) goto out; - nb = (size_t)MIN(ISO_BUFFER_SIZE / UDF_BLOCKSIZE, (file_length + UDF_BLOCKSIZE - 1) / UDF_BLOCKSIZE); + nb = MIN(ISO_BUFFER_SIZE / UDF_BLOCKSIZE, (file_length + UDF_BLOCKSIZE - 1) / UDF_BLOCKSIZE); read = udf_read_block(p_udf_dirent, buf, nb); if (read < 0) { uprintf(" Error reading UDF file %s", &psz_fullpath[strlen(psz_extract_dir)]); goto out; } buf_size = (DWORD)MIN(file_length, read); - if (fd_md5sum != NULL) { - md5sum_totalbytes += buf_size; - hash_write[HASH_MD5](&ctx, buf, buf_size); - } ISO_BLOCKING(r = WriteFileWithRetry(file_handle, buf, buf_size, &wr_size, WRITE_RETRIES)); if (!r || (wr_size != buf_size)) { uprintf(" Error writing file: %s", r ? "Short write detected" : WindowsErrorString()); @@ -646,12 +691,6 @@ static int udf_extract_files(udf_t *p_udf, udf_dirent_t *p_udf_dirent, const cha last_nb_blocks = nb_blocks; } } - if (fd_md5sum != NULL) { - hash_final[HASH_MD5](&ctx); - for (j = 0; j < MD5_HASHSIZE; j++) - fprintf(fd_md5sum, "%02x", ctx.buf[j]); - fprintf(fd_md5sum, " ./%s\n", &psz_fullpath[3]); - } } if ((preserve_timestamps) && (!SetFileTime(file_handle, to_filetime(udf_get_attribute_time(p_udf_dirent)), to_filetime(udf_get_access_time(p_udf_dirent)), to_filetime(udf_get_modification_time(p_udf_dirent))))) @@ -687,7 +726,6 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path) HANDLE file_handle = NULL; DWORD buf_size, wr_size, err; EXTRACT_PROPS props; - HASH_CONTEXT ctx; BOOL is_symlink, is_identical, create_file, free_p_statbuf = FALSE; int length, r = 1; char psz_fullpath[MAX_PATH], *psz_basename = NULL, *psz_sanpath = NULL; @@ -699,7 +737,7 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path) CdioListNode_t* p_entnode; iso9660_stat_t *p_statbuf; CdioISO9660FileList_t* p_entlist = NULL; - size_t i, j, nb; + size_t i, nb; lsn_t lsn; int64_t file_length; @@ -883,42 +921,28 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path) uprintf(" Error writing file: %s", WindowsErrorString()); goto out; } - } else { - if (fd_md5sum != NULL) - hash_init[HASH_MD5](&ctx); - for (i = 0; file_length > 0; i += nb) { - if (FormatStatus) - goto out; - lsn = p_statbuf->lsn + (lsn_t)i; - nb = (size_t)MIN(ISO_BUFFER_SIZE / ISO_BLOCKSIZE, (file_length + ISO_BLOCKSIZE - 1) / ISO_BLOCKSIZE); - if (iso9660_iso_seek_read(p_iso, buf, lsn, (long)nb) != (nb * ISO_BLOCKSIZE)) { - uprintf(" Error reading ISO9660 file %s at LSN %lu", - psz_iso_name, (long unsigned int)lsn); - goto out; - } - buf_size = (DWORD)MIN(file_length, ISO_BUFFER_SIZE); - if (fd_md5sum != NULL) { - md5sum_totalbytes += buf_size; - hash_write[HASH_MD5](&ctx, buf, buf_size); - } - ISO_BLOCKING(r = WriteFileWithRetry(file_handle, buf, buf_size, &wr_size, WRITE_RETRIES)); - if (!r || wr_size != buf_size) { - uprintf(" Error writing file: %s", r ? "Short write detected" : WindowsErrorString()); - goto out; - } - file_length -= wr_size; - nb_blocks += nb; - if (nb_blocks - last_nb_blocks >= PROGRESS_THRESHOLD) { - UpdateProgressWithInfo(OP_FILE_COPY, MSG_231, nb_blocks, total_blocks + - ((fs_type != FS_NTFS) ? extra_blocks : 0)); - last_nb_blocks = nb_blocks; - } + } else for (i = 0; file_length > 0; i += nb) { + if (FormatStatus) + goto out; + lsn = p_statbuf->lsn + (lsn_t)i; + nb = MIN(ISO_BUFFER_SIZE / ISO_BLOCKSIZE, (file_length + ISO_BLOCKSIZE - 1) / ISO_BLOCKSIZE); + if (iso9660_iso_seek_read(p_iso, buf, lsn, (long)nb) != (nb * ISO_BLOCKSIZE)) { + uprintf(" Error reading ISO9660 file %s at LSN %lu", + psz_iso_name, (long unsigned int)lsn); + goto out; } - if (fd_md5sum != NULL) { - hash_final[HASH_MD5](&ctx); - for (j = 0; j < MD5_HASHSIZE; j++) - fprintf(fd_md5sum, "%02x", ctx.buf[j]); - fprintf(fd_md5sum, " ./%s\n", &psz_fullpath[3]); + buf_size = (DWORD)MIN(file_length, ISO_BUFFER_SIZE); + ISO_BLOCKING(r = WriteFileWithRetry(file_handle, buf, buf_size, &wr_size, WRITE_RETRIES)); + if (!r || wr_size != buf_size) { + uprintf(" Error writing file: %s", r ? "Short write detected" : WindowsErrorString()); + goto out; + } + file_length -= wr_size; + nb_blocks += nb; + if (nb_blocks - last_nb_blocks >= PROGRESS_THRESHOLD) { + UpdateProgressWithInfo(OP_FILE_COPY, MSG_231, nb_blocks, total_blocks + + ((fs_type != FS_NTFS) ? extra_blocks : 0)); + last_nb_blocks = nb_blocks; } } if (preserve_timestamps) { @@ -1074,17 +1098,7 @@ BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan) last_nb_blocks = 0; iso_blocking_status = 0; symlinked_syslinux[0] = 0; - StrArrayCreate(&modified_files, 8); - if (validate_md5sum) { - md5sum_totalbytes = 0; - // If there isn't an already existing md5sum.txt create one - if (img_report.has_md5sum != 1) { - static_sprintf(path, "%s\\%s", dest_dir, md5sum_name[0]); - fd_md5sum = fopenU(path, "wb"); - if (fd_md5sum == NULL) - uprintf("WARNING: Could not create '%s'", md5sum_name[0]); - } - } + StrArrayCreate(&modified_path, 8); } // First try to open as UDF - fallback to ISO if it failed @@ -1383,8 +1397,7 @@ out: uprintf("Could not move %s → %s", path, dst_path, WindowsErrorString()); } } - if (fd_md5sum != NULL) - fclose(fd_md5sum); + update_md5sum(); } iso9660_close(p_iso); udf_close(p_udf); diff --git a/src/resource.h b/src/resource.h index 7166067f..a156350a 100644 --- a/src/resource.h +++ b/src/resource.h @@ -69,13 +69,6 @@ #define IDR_LC_RUFUS_LOC 500 #define IDR_XT_HOGGER 501 #define IDR_UEFI_NTFS 502 -// The following should match the ArchType array values + 600 -#define IDR_MD5_BOOT 600 -#define IDR_MD5_BOOTIA32 601 -#define IDR_MD5_BOOTX64 602 -#define IDR_MD5_BOOTARM 603 -#define IDR_MD5_BOOTAA64 604 -#define IDR_MD5_BOOTRISCV64 607 #define IDM_SELECT 901 #define IDM_DOWNLOAD 902 #define IDC_DEVICE 1001 diff --git a/src/rufus.c b/src/rufus.c index a2630df0..f51ec143 100755 --- a/src/rufus.c +++ b/src/rufus.c @@ -94,7 +94,6 @@ static char uppercase_select[2][64], uppercase_start[64], uppercase_close[64], u extern HANDLE update_check_thread, wim_thread; extern BOOL enable_iso, enable_joliet, enable_rockridge, enable_extra_hashes, is_bootloader_revoked; -extern BOOL validate_md5sum; extern BYTE* fido_script; extern HWND hFidoDlg; extern uint8_t* grub2_buf; @@ -1442,7 +1441,6 @@ static DWORD WINAPI BootCheckThread(LPVOID param) syslinux_ldlinux_len[0] = 0; syslinux_ldlinux_len[1] = 0; is_bootloader_revoked = FALSE; - validate_md5sum = FALSE; safe_free(grub2_buf); if (ComboBox_GetCurSel(hDeviceList) == CB_ERR) @@ -1569,9 +1567,6 @@ static DWORD WINAPI BootCheckThread(LPVOID param) ShellExecuteA(hMainDialog, "open", SEVENZIP_URL, NULL, NULL, SW_SHOWNORMAL); goto out; } - // TODO: Move this option to a user selection - validate_md5sum = TRUE; - uprintf("Will add runtime UEFI media validation through 'md5sum.txt'"); } else if ( ((fs_type == FS_NTFS) && !HAS_WINDOWS(img_report) && !HAS_GRUB(img_report) && (!HAS_SYSLINUX(img_report) || (SL_MAJOR(img_report.sl_version) <= 5))) || ((IS_FAT(fs_type)) && (!HAS_SYSLINUX(img_report)) && (!allow_dual_uefi_bios) && !IS_EFI_BOOTABLE(img_report) && diff --git a/src/rufus.h b/src/rufus.h index 7108dde3..800a7a39 100644 --- a/src/rufus.h +++ b/src/rufus.h @@ -625,35 +625,6 @@ typedef struct { #define UNATTEND_OFFLINE_SERVICING_MASK (UNATTEND_OFFLINE_INTERNAL_DRIVES | UNATTEND_FORCE_S_MODE) #define UNATTEND_DEFAULT_SELECTION_MASK (UNATTEND_SECUREBOOT_TPM_MINRAM | UNATTEND_NO_ONLINE_ACCOUNT | UNATTEND_OFFLINE_INTERNAL_DRIVES) -/* Hash tables */ -typedef struct htab_entry { - uint32_t used; - char* str; - void* data; -} htab_entry; -typedef struct htab_table { - htab_entry* table; - uint32_t size; - uint32_t filled; -} htab_table; -#define HTAB_EMPTY {NULL, 0, 0} -extern BOOL htab_create(uint32_t nel, htab_table* htab); -extern void htab_destroy(htab_table* htab); -extern uint32_t htab_hash(char* str, htab_table* htab); - -/* Basic String Array */ -typedef struct { - char** String; - uint32_t Index; // Current array size - uint32_t Max; // Maximum array size -} StrArray; -extern void StrArrayCreate(StrArray* arr, uint32_t initial_size); -extern int32_t StrArrayAdd(StrArray* arr, const char* str, BOOL); -extern int32_t StrArrayFind(StrArray* arr, const char* str); -extern void StrArrayClear(StrArray* arr); -extern void StrArrayDestroy(StrArray* arr); -#define IsStrArrayEmpty(arr) (arr.Index == 0) - /* * Globals */ @@ -787,7 +758,6 @@ extern HANDLE CreateFileWithTimeout(LPCSTR lpFileName, DWORD dwDesiredAccess, DW extern BOOL SetThreadAffinity(DWORD_PTR* thread_affinity, size_t num_threads); extern BOOL HashFile(const unsigned type, const char* path, uint8_t* sum); extern BOOL PE256File(const char* path, uint8_t* hash); -extern void UpdateMD5Sum(const char* dest_dir, const char* md5sum_name); extern BOOL HashBuffer(const unsigned type, const uint8_t* buf, const size_t len, uint8_t* sum); extern BOOL IsFileInDB(const char* path); extern int IsBootloaderRevoked(const char* path); @@ -817,6 +787,35 @@ extern uint32_t ResolveDllAddress(dll_resolver_t* resolver); DWORD WINAPI HashThread(void* param); +/* Hash tables */ +typedef struct htab_entry { + uint32_t used; + char* str; + void* data; +} htab_entry; +typedef struct htab_table { + htab_entry *table; + uint32_t size; + uint32_t filled; +} htab_table; +#define HTAB_EMPTY {NULL, 0, 0} +extern BOOL htab_create(uint32_t nel, htab_table* htab); +extern void htab_destroy(htab_table* htab); +extern uint32_t htab_hash(char* str, htab_table* htab); + +/* Basic String Array */ +typedef struct { + char** String; + uint32_t Index; // Current array size + uint32_t Max; // Maximum array size +} StrArray; +extern void StrArrayCreate(StrArray* arr, uint32_t initial_size); +extern int32_t StrArrayAdd(StrArray* arr, const char* str, BOOL ); +extern int32_t StrArrayFind(StrArray* arr, const char* str); +extern void StrArrayClear(StrArray* arr); +extern void StrArrayDestroy(StrArray* arr); +#define IsStrArrayEmpty(arr) (arr.Index == 0) + /* * typedefs for the function prototypes. Use the something like: * PF_DECL(FormatEx); diff --git a/src/rufus.rc b/src/rufus.rc index 962ccae6..22d6d612 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 4.5.2120" +CAPTION "Rufus 4.5.2118" FONT 9, "Segoe UI Symbol", 400, 0, 0x0 BEGIN LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP @@ -305,11 +305,6 @@ BEGIN "IDR_FD_EGA18_CPX RCDATA ""../res/freedos/EGA18.CPX""\r\n" "IDR_XT_HOGGER RCDATA ""../res/hogger/hogger.exe""\r\n" "IDR_UEFI_NTFS RCDATA ""../res/uefi/uefi-ntfs.img""\r\n" - "IDR_MD5_BOOTIA32 RCDATA ""../res/md5/bootia32.efi""\r\n" - "IDR_MD5_BOOTX64 RCDATA ""../res/md5/bootx64.efi""\r\n" - "IDR_MD5_BOOTARM RCDATA ""../res/md5/bootarm.efi""\r\n" - "IDR_MD5_BOOTAA64 RCDATA ""../res/md5/bootaa64.efi""\r\n" - "IDR_MD5_BOOTRISCV64 RCDATA ""../res/md5/bootriscv64.efi""\r\n" "IDI_LANG_16 RCDATA ""../res/icons/lang-16.png""\r\n" "IDI_INFO_16 RCDATA ""../res/icons/info-16.png""\r\n" "IDI_SETTINGS_16 RCDATA ""../res/icons/settings-16.png""\r\n" @@ -397,8 +392,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 4,5,2120,0 - PRODUCTVERSION 4,5,2120,0 + FILEVERSION 4,5,2118,0 + PRODUCTVERSION 4,5,2118,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -416,13 +411,13 @@ BEGIN VALUE "Comments", "https://rufus.ie" VALUE "CompanyName", "Akeo Consulting" VALUE "FileDescription", "Rufus" - VALUE "FileVersion", "4.5.2120" + VALUE "FileVersion", "4.5.2118" VALUE "InternalName", "Rufus" - VALUE "LegalCopyright", "� 2011-2024 Pete Batard (GPL v3)" + VALUE "LegalCopyright", " 2011-2024 Pete Batard (GPL v3)" VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html" VALUE "OriginalFilename", "rufus-4.5.exe" VALUE "ProductName", "Rufus" - VALUE "ProductVersion", "4.5.2120" + VALUE "ProductVersion", "4.5.2118" END END BLOCK "VarFileInfo" @@ -490,11 +485,6 @@ IDR_FD_EGA17_CPX RCDATA "../res/freedos/EGA17.CPX" IDR_FD_EGA18_CPX RCDATA "../res/freedos/EGA18.CPX" IDR_XT_HOGGER RCDATA "../res/hogger/hogger.exe" IDR_UEFI_NTFS RCDATA "../res/uefi/uefi-ntfs.img" -IDR_MD5_BOOTIA32 RCDATA "../res/md5/bootia32.efi" -IDR_MD5_BOOTX64 RCDATA "../res/md5/bootx64.efi" -IDR_MD5_BOOTARM RCDATA "../res/md5/bootarm.efi" -IDR_MD5_BOOTAA64 RCDATA "../res/md5/bootaa64.efi" -IDR_MD5_BOOTRISCV64 RCDATA "../res/md5/bootriscv64.efi" IDI_LANG_16 RCDATA "../res/icons/lang-16.png" IDI_INFO_16 RCDATA "../res/icons/info-16.png" IDI_SETTINGS_16 RCDATA "../res/icons/settings-16.png" diff --git a/src/wue.c b/src/wue.c index e43020fb..091fa3fe 100644 --- a/src/wue.c +++ b/src/wue.c @@ -47,9 +47,6 @@ char *unattend_xml_path = NULL, unattend_username[MAX_USERNAME_LENGTH]; BOOL is_bootloader_revoked = FALSE; extern uint32_t wim_nb_files, wim_proc_files, wim_extra_files; -extern BOOL validate_md5sum; -extern uint64_t md5sum_totalbytes; -extern StrArray modified_files; /// /// Create an installation answer file containing the sections specified by the flags. @@ -811,10 +808,6 @@ BOOL ApplyWindowsCustomization(char drive_letter, int flags) CloseHandle(CreateFileU(appraiserres_dll_src, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)); uprintf("Created '%s' placeholder", appraiserres_dll_src); - if (validate_md5sum) { - md5sum_totalbytes -= _filesizeU(appraiserres_dll_dst); - StrArrayAdd(&modified_files, appraiserres_dll_src, TRUE); - } } } @@ -822,8 +815,6 @@ BOOL ApplyWindowsCustomization(char drive_letter, int flags) // We only need to mount boot.wim if we have windowsPE data to deal with. If // not, we can just copy our unattend.xml in \sources\$OEM$\$$\Panther\. if (flags & UNATTEND_WINPE_SETUP_MASK) { - if (validate_md5sum) - md5sum_totalbytes -= _filesizeU(boot_wim_path); uprintf("Mounting '%s[%d]'...", boot_wim_path, wim_index); // Some "unofficial" ISOs have a modified boot.wim that doesn't have Windows Setup at index 2... if (!WimIsValidIndex(boot_wim_path, wim_index)) { @@ -938,10 +929,6 @@ out: if (mount_path) { uprintf("Unmounting '%s[%d]'...", boot_wim_path, wim_index); WimUnmountImage(boot_wim_path, wim_index, TRUE); - if (validate_md5sum) { - md5sum_totalbytes += _filesizeU(boot_wim_path); - StrArrayAdd(&modified_files, boot_wim_path, TRUE); - } UpdateProgressWithInfo(OP_PATCH, MSG_325, PATCH_PROGRESS_TOTAL, PATCH_PROGRESS_TOTAL); } free(mount_path);