67d324f82b
* So, as it happens, when assigning the product of two 32-bit variables into a 64-bit one, compilers default to being *DUMB* and, against all reasonable expectations, do not perform that multiplication as a 64-bit operation (even when the code is compiled as x64). Wow, that's really great decision making by compiler designers if I ever saw some... Whoever decided that C developers would much rather want truncation and 32-bit overflows, instead of the expected *LOGICAL* behaviour of conducting arithmetic operations as 64-bit when the result will be assigned to a 64-bit variable, need to be condemned to a lifetime of trying to help elderly folks trying to conduct simple computing tasks as a punishment... Anyhoo, nt_write_blk()'s offset.QuadPart = block * channel->block_size + nt_data->offset was overflowing 32-bit as soon as block * channel->block_size went over the 4 GB mark, with the disastrous results one can expect. Considering that this is code we practically lifted verbatim from e2fsprogs, I guess e2fsprogs' NT I/O manager was never properly tested with anything larger than a 4 GB. Awesome! * We fix the above by doing what unix_io.c does and setting the 32-bit read/write_blk() calls to be wrappers around their 64-bit counterpart (since, once you deal with a 64-bit block variable, the computation is conducted as 64-bit). * Also remove a bunch of stuff we don't need from config.h * Closes #1396 |
||
---|---|---|
.github | ||
.vs | ||
res | ||
src | ||
.gitattributes | ||
.gitignore | ||
_chver.sh | ||
_detect-amend.sh | ||
_pre-commit.sh | ||
_release.sh | ||
_set_git_hooks.sh | ||
_sign.cmd | ||
aclocal.m4 | ||
appveyor.yml | ||
bootstrap.sh | ||
ChangeLog.txt | ||
compile | ||
configure | ||
configure.ac | ||
install-sh | ||
LICENSE.txt | ||
Makefile.am | ||
Makefile.in | ||
missing | ||
README.md | ||
rufus.sln |
Rufus: The Reliable USB Formatting Utility
Rufus is a utility that helps format and create bootable USB flash drives.
Features
- Format USB, flash card and virtual drives to FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3
- Create DOS bootable USB drives, using FreeDOS or MS-DOS (Windows 8.1 or earlier)
- Create BIOS or UEFI bootable drives, including UEFI bootable NTFS
- Create bootable drives from bootable ISOs (Windows, Linux, etc.)
- Create bootable drives from bootable disk images, including compressed ones
- Create Windows To Go drives
- Create persistent Linux partitions
- Download official Microsoft Windows 8 or Windows 10 retail ISOs
- Compute MD5, SHA-1 and SHA-256 checksums of the selected image
- Twice as fast as Microsoft's USB/DVD tool or UNetbootin, on ISO -> USB creation (1)
- Perform bad blocks checks, including detection of "fake" flash drives
- Modern and familiar UI, with 38 languages natively supported
- Small footprint. No installation required.
- Portable
- 100% Free Software (GPL v3)
Compilation
Use either Visual Studio 2019 (version 16.0 or later with SDK 10.0.18362 installed) or MinGW and
then invoke the .sln
or configure
/make
respectively.
Visual Studio
Rufus is an OSI compliant Open Source project. You are entitled to download and use the freely available Visual Studio Community Edition to build, run or develop for Rufus. As per the Visual Studio Community Edition license, this applies regardless of whether you are an individual or a corporate user.
Additional information
Rufus provides extensive information about what it is doing, either through its easily accessible log, or through the Windows debug facility.
Enhancements/Bugs
Please use the GitHub issue tracker for reporting problems or suggesting new features.
(1) Tests carried out with a 16 GB USB 3.0 ADATA pen drive on a Core 2 duo/4 GB RAM platform running Windows 7 x64.
ISO: en_windows_7_ultimate_with_sp1_x64_dvd_618240.iso
Name of tool | Version | Time |
---|---|---|
Windows USB/DVD Download Tool | v1.0.30 | 8 mins 10s |
UNetbootin | v1.1.1.1 | 6 mins 20s |
Rufus | v1.1.0 | 3 mins 25s |