* Thank the C standard for choosing not to "standardize" the size of long (as
one would rightfully expect from a *standard*) and instead going for a
"should be at least" super vague definition, that led to lseek() on Windows
and UNIX effectively using different offset sizes, and programmers everywhere
getting bitten when taking a UNIX codebase and porting it to Windows...
* Closes#2837.
* Note that if you use this toggle even once, then you will no longer be able to use
system settings to toggle Dark Mode, unless you *MANUALLY* delete the registry key.
* Closes#2821.
* Also update github/codeql-action to v4.
* Closes#2833.
* Alter the WUE CA 2023 option text and remove duplicate translation for "ISO Image".
* Force cache-only when invoking CertGetCertificateChain (This should address #2781).
* Explicitly report the SVN/SBAT number comparison in the log.
* Also don't perform revocation checks on unsigned bootloaders.
* Also add provision for CRLF handling when parsing our remote SBAT.
* Because of Dark Mode support, and the fact that Microsoft does not offer system
dialogs that support Dark Mode (even the more "modern" Task Dialog is a joke in
that respect, with people having to resort to using detours to fix this massive
letdown from Microsoft. See https://github.com/SFTRS/DarkTaskDialog), we had to
switch to use our own custom dialogs instead of using MessageBox().
* And of course, since we had to recreate the whole smorgasbord of what Microsoft
offers in terms of button configuration, it's unsurprising that we forgot to add
support for one conf (MB_YESNOCANCEL) that some of the download prompts use.
* Closes#2813.
...or with an option that doesn't require poking into boot.wim.
* Closes#2815.
* Also report the use of the CA 2023 option in the log.
* Also set rufus-next to 4.11.
* Use MessageBox()'s MB_ constants instead of redefining our own.
* Fix the *BROKEN* 200% scaling that Microsoft uses for warnings, that includes a pixel
that should have been set to transparent but that instead was set to white.
* This'll allow us to switch to using our Dark Mode compatible notifications dialogs in
a future commit, instead of relying on the non Dark Mode compatible MessageBox().
* The current wimlib code makes repeated attempts to close stdin (0) on cleanup when a WIM cannot
be opened, which doesn't sit too well with MSFT's _close() as it invokes an invalid parameter
exception handler that can make the application crash...
* This may happen when we try to open the WIM from an ISO that has been truncated because it
resides on a path that is longer than MAX_PATH on account that wimlib repeatedly attempts to
close the phantom stdin fd's it sees assigned to its internal (and unused) WIMStruct after it
errors out on trying to open the image.
* So we declare stdin as invalid for use with Visual Studio compiled apps.
* For good measure we also increase the size of the string arrays we used for WIM paths to 1024
UTF-8 characters, and add explicit asserts in case we have to truncate these paths (since we
are quite curious about real-life scenarios where people need paths longer than 1024).
* Closes#2777.
* Also improve the safe_strcp() and safe_sprintf() macros and fix some unwarranted "Command was
terminated by user" messages introduced in commit ea01cd41c0.
* The Nutanix phoenix.x86_64-fnd_5.6.1_patch-aos_6.8.1_ga.iso contains a GRUB bootloader that somehow stripped
the 'fshelp' source string from the fat module, and therefore prevents Rufus from detecting that FAT32 support
is available.
* As a result, since NTFS is also not supported, no file system able to be selected by the user for ISO mode,
and the media creation process fails with "Could Not Partition Drive".
* Fix this by only disabling FAT32 in ISO mode if NTFS is available, and producing a warning in the log if we
have to forcefully enable FAT32 even if we didn't detect FAT32 compatibility.
* Closes#2769.
* Also add the setup wrapper binaries produced from previous commit and harmonise the casing of WARNING messages.
* Obviously, this does not use the same Authenticode credentials we use for actual releases
(which we wouldn't be able to export anyway, as it resides on a hardware token), but it
should help officialize our GitHub builds, as well as remove an extra prompt.
* Also move the revoked UEFI bootloader check before the DD vs ISO check, so that people
choosing DD mode still get alerted about the revoked bootloaders.
* Also don't refresh the device list after saving to image, and fix a Coverity warning.
* Requires the download of oscdimg.exe, courtesy of Microsoft's symbol servers.
* UDF only, since this is mostly intended for Windows and even with Joliet, Microsoft's
implementation of ISO-9660 is crippled (fails to use multi-extent for >4GB files, which
results in BROKEN ISO images) and too limited.
* Note that this is different from our other save to ISO feature (Alt-O), that dumped
the first optical media found on the system to an ISO.
* Also fix a Coverity warning as well as a possible crash in PopulateWindowsVersion()
when opening an invalid image (such as the ISO-9660 ones created by oscdimg).
* Per MS documentation, _mktime64() *ALTERS* the time being passed to first add/substract
the timezone offset before converting to an epoch.
* This resulted in our evaluated epoch from the DBX GitHub commit being a few hours more
recent than the epoch we store for our embedded files (which is UTC) for timezones that
are behind of UTC, since their epoch have an offset added to convert localtime to UTC.
* Fix this by using _mkgmtime64() that does not suffer an unwanted time manipulation.
* For safety, also use -u for epoch format conversion in our script just in case.
* Closes#2762.
* Also comment the "unsupported check; not verifying file integrity" warning for XZ
decompression, improve XZ ARM64 support and add an exception for some Samsung UFDs.
* The "Quick Format" and "Create extended label" checkbox could be enabled when no device
is detected by checking the "List USB Hard Drives". Fix that.
* Also fix/silence some Coverity warnings (div by zero, overflow, unreachable code, uninit'd mem).
* Also ad @ozone10 to the credits for the Dark Mode UI.
* Also fix erroneous use of EndDialog() instead of DestroyWindow() in rufus.c,
which resulted in WM_DESTROY/WM_NCDESTROY messages not being generated.
* Closes#2713.
* Closes#2510.
* Closes#1453.
* GitHub appears to have updated their HTTP servers to enable gzip compression when requested.
* Unfortunately, the default from Rufus was to attempt to use compression where possible
(ironically in an effort to save GitHub some bandwidth), which doesn't seem to sit too well
with Windows' HttpQueryInfoA(HTTP_QUERY_CONTENT_LENGTH) API, as it errors out on trying to
produce the content-length *DESPITE* the field being reported by GitHub in the HTTP header.
* As a result, we switch all HTTP downloads *not* to try to use compression by forcing
"Accept-Encoding: identity".
* Unfortunately, besides affecting the download of resources such as GRUB/Syslinux ones, it
also affects the ability to look for updates, which means that NONE of the version of Rufus
prior to 4.9 (outside of the Windows Store ones) will be able to find that there exists a
newer version to update to... :(
* Closes#2756.
* Add systemd-boot version reporting and fix GRUB version detection for CentOS
* Add notes about the various Secure Boot gotchas (log only)
* Enable download of remote active/revoked Secure Boot certificate thumbprints
* Also rename the ceiling/floor align macros
* Visual 2022 version 17.14.2 changes the way it performs optimizations with /O2
which results in innocuous C statements, such as invoking strtoul() twice on
the same line, and using the pointer returned by the first call in the second,
crashing the application with a read access violation (when built as RELEASE).
* To alleviate that, we break down the Syslinux strtoul() invocation, as well as
harden our Syslinux version processing while we're at it.
* Hopefully this is the only line of code where the new mode of MSVC optimisation
creates a problem with...
* Closes#2740.
* The openSUSE maintainers don't care about their users, so we have to care in their stead.
* As for Nobara images, that use the Red Hat GRUB bootloaders with no support for NTFS and
that include files larger than 4 GB, we now attempt to detect the filesystems supported
by EFI GRUB, in order to decide how we can proceed with the writing of such images.
We take this opportunity to improve our reporting on the GRUB bootloaders we detect.
* Plus the usual Coverity dance.
* Since we are now liking with ntdll directly, we can remove all the hooks we applied
and just use regular calls. We also rename process.h to ntdll.h as a result.
- Side load SetupAPI.dll, as this is the DLL that was causing the CfgMgr32.dll local load.
This reverts part of 622e60659c since we no longer have to hook into CfgMgr32.dll directly.
- Also set the redefinition of DECLSPEC_IMPORT, which we need for MinGW32 x86, in the global AM_CFLAGS
of configure.ac, so that we no longer have to worry about forgetting to do it in a source and experience
crashes on 32-bit as a result (See 965759f58a).
- Also delay-load crypt32.dll while we're at it.
- Also add provision for enabling /DEPENDENTLOADFLAG:0x800 on MinGW, by leaving a properly crafted entry
in the .rdata section that can then be used with the loadcfg.py Python script.
- Sadly, per https://github.com/pbatard/rufus/issues/2701#issuecomment-2874788564 and subsequent comment,
having DependentLoadFlags set to LOAD_LIBRARY_SEARCH_SYSTEM32 is still not enough to take care of side
loading issues, as, ever since the introduction of wimlib support, we are seeing CRYPTBASE.DLL being
side-loaded in MinGW, and, even with crypt32.dll being delay-loaded there is literally *nothing* we can
do about it!
- The end result of all the above is that we will have no choice but ditch MinGW for release executables
as it's just impossible to properly take care of side-loading vulnerabilities with MinGW (and Microsoft
are REALLY not helping with this whole mess either, when they don't even use LOAD_LIBRARY_SEARCH_SYSTEM32
for Windows' system DLLs).
- In preparation for this, we add UPX compression to the x86_64 and x86_32 MSVC executables.
- Finally, we also fix one last Coverity warning in xml.c and remove duplicates in .vcxproj for ARM64.
* Recent changes broke the check for whether the source image is larger than the target drive
in the case of uncompressed VHDs (that have a 512 byte footer), so fix that by making sure
we always compare with the projected size.
* Closes#2729.
* Also fix some more Coverity warnings.
* DwmGetWindowAttribute() from dwmapi.dll is delay-loaded so it requires the MinGW DECLSPEC_IMPORT workaround.
* Closes#2728.
* Also fix a bunch of Coverity warnings in wimlib and ezxml.