Compare commits

...

106 Commits
v4.6 ... master

Author SHA1 Message Date
Pete Batard
cac828621a
Rufus 4.12 (Build 2314)
* Restore credits for Korean translators, that were removed by mistake.
2026-01-30 13:08:10 +00:00
Pete Batard
fb9dd17fe6
Fix a Coverity warning
* Also harmonize / improve code readability.
2026-01-22 18:31:17 +00:00
Pete Batard
460cc5768a
[net] fix local privilege escalation via TOCTOU race condition in Fido script handling (CVE-2026-23988)
* Because PowerShell forces us to close the script we downloaded prior to execution, it is possible for a
  malicious background process (running unprivileged, as the same user that launches Rufus) to replace the
  Fido script after we downloaded and validated it, but before we actually execute the PowerShell command
  to run it.
* See https://github.com/pbatard/rufus/security/advisories/GHSA-hcx5-hrhj-xhq9, which led to CVE-2026-23988.
* To mitigate this, we now use a security descriptor, to force the script to be saved with Administrator
  and System access only so that an unprivileged user process does not have the capability to replace it
  before execution.
* Issue discovered and responsibly disclosed by @independent-arg.
* Fix also suggested by @independent-arg.
2026-01-22 18:23:20 +00:00
Pete Batard
de12649c99
[core] add hash validation for diskcopy.dll and oscdimg.exe usage
* Whereas their location in AppData should prevent other users from replacing these files,
  it is still possible for an unprivileged app ran by the same user to alter them after
  they have been downloaded.
* To prevent this (as well as more elaborate TOCTOUs on these specific files) we now open
  a read-only handle (with *no* file sharing rights), then validate the SHA256 hash (since
  these files are known at the time of compilation) and only once validated (but without
  relinquishing the exclusive handle) run or access the content of the file.
* Also add an arch suffix to the oscdimg.exe, so that we don't run into a situation where
  x86 and x64 Rufus may complain about a previously downloaded exe.
* Also improve error handling from SaveImage() and fully qualify the dism.exe calls.
2026-01-17 16:30:36 +00:00
Pete Batard
6e5bd4424f
[hash] add FileMatchesHash() and BufferMatchedHash() calls
* Also improve our hex string conversion function and make it public.
2026-01-17 16:30:33 +00:00
Pete Batard
913fd56fb5
[process] don't report read-only access from explorer.exe in potentially conflicting processes 2026-01-17 15:15:22 +00:00
Pete Batard
06c2924296
[dev] filter out the new Bitdefender VHDs
* It appears that Bitdefender now mounts a 32 MB VHD on the system where it is installed, so filter it out.
* For reference, this is how it is otherwise detected by Rufus:
Found VHD device 'Microsoft Virtual Disk'
Disk type: FIXED, Disk size: 33 MB, Sector size: 512 bytes
Cylinders: 4, Tracks per cylinder: 255, Sectors per track: 63
Partition type: GPT, NB Partitions: 1
Disk GUID: {3A182634-ECAF-4D9C-9CE0-9E61EC7A093A}
Max parts: 128, Start Offset: 17408, Usable = 33520128 bytes
Partition 1:
  Type: Microsoft Basic Data Partition
  Name: 'Bitdefender Partition'
  Detected File System: NTFS
  ID: {BA5FBC33-B5DD-4468-B9FB-349269EF43B8}
  Size: 31.9 MB (33488896 bytes)
  Start Sector: 64, Attributes: 0x8000000000000001
2026-01-15 18:21:05 +00:00
Pete Batard
1efb25b06b
[iso] fix Rufus saving images as FFU instead of ISO, when FFU is not supported
* Our image type selection forgot to shift the actual type to ISO when FFU is not supported,
  leading to dism being invoked instead of oscdimg.
* Closes #2889.
* Also make sure the UDF label is no more than 32 characters.
* Also increase the oscdimg.exe commandline size as 256 characters may not be enough with long paths.
* Also try to report 'oscdimg.exe` errors in the log instead of silencing them.
* Also fix devices with (non-USB-compliant) VID 0000 being ignored by default.
2026-01-14 23:38:14 +00:00
Pete Batard
46f9c9ec60
[process] improve the process search
* Factorise the PROCESS_BASIC_INFORMATION for 32 and 64 bit.
* Add a (currently unused) GetPPID() function.
* Increase the size of the buffer for reporting processes and their parameters.
* Don't report stale/killed processes in our main process conflict report.
2026-01-14 23:28:11 +00:00
Fabrice
385cb93744
[loc] update French translation
* Closes #2887.
2026-01-12 12:24:41 +00:00
Pete Batard
2476a92d70
[dev] try to support non USB compliant devices that use VID 0000
* This is meant to address #2894.
* Also update copyright year.
2026-01-12 12:21:11 +00:00
Pete Batard
79b0425c57
[dev] Increase the Hardware ID buffer size
* Some (newer) SSD devices appear to have very long Hardware IDs, with tons of underscore
  (eg: "SCSI\DiskNVMe______________________________NVME_SSD_512GBS1111H0L")
* Because of this, and because Hardware ID is a REG_SZ, where entries can be repeated many
  times, our static MAX_PATH buffer can be too small, preventing UAS disks from being
  properly listed.
* Fix this by bumping our buffer to 4 KB, as well as reporting errors on Hardware ID fetch
  in enum debug mode.
* Closes #2894.
2026-01-11 11:45:15 +00:00
Pete Batard
2fa14b0d45
[iso] fix logic for Nutanix workaround
* 1a4175891b78dc46e0023e389288dbd0ccd8df8c added a workaround for the Nutanix GRUB situation, but we forgot an extra file system check.
* Closes #2884.
2025-12-22 14:02:06 +00:00
Pete Batard
3607f5cec8
[iso] add a workaround for umbrelOS ISOs
* The folks at umbrelOS seem to have mastered their ISO in a way where the /usr/lib/systemd/system/system-systemd/ directory
  is not declared (or not declared with attribute _STAT_DIR) on the ISO-9660 file system, which results in Rufus producing an
  error when trying to create the /usr/lib/systemd/system/system-systemd/x2dcryptsetup.slice file.
* To fix this, add a workaround to create missing directories if we encounter ERROR_PATH_NOT_FOUND during ISO-9660 extraction.
2025-12-20 23:19:39 +00:00
Pete Batard
fec6051000
[wue] filter disallowed characters in local account names
* Per https://learn.microsoft.com/en-us/windows-hardware/customize/desktop/unattend/microsoft-windows-shell-setup-useraccounts-localaccounts-localaccount-name
* Also add 'NONE' to the list of prohibited local account names, and add '.' to the list of disallowed characters based on user report.
* Also update actions/upload-artifact to latest.
* Closes #2878.
* Closes #2879.
2025-12-20 13:36:06 +00:00
Martin Kuschnik
be95fd0e00
[core] improve Microsoft Dev Drive detection
* The `IsMsDevDrive` function is refactored to use the `FSCTL_QUERY_PERSISTENT_VOLUME_STATE` control code
  for detecting Microsoft Dev Drives.
  This replaces the previous approach of analyzing drive layout which was not always correct.
* Closes #2873.
2025-12-18 16:41:14 +00:00
Pete Batard
a8c745d2a9
[internal] do not UPX compress the appstore executables
* UPX compressing exes makes it impossible to reference the PDB when debugging
  which means that, ever since we switched to using the MSVC executables for
  both standalone and appstore in 4adfa4f37e3879b215f54f52231851caeff42912 the
  appstore dumps we get on crashes have become basically unusable for debug :(
* We therefore revert to producing non UPX compressed executable for MSVC by
  default, so that we can resume investigating appstore crashes on next release.
* At the same time, on release builds, we add new UPX compressed executables to
  the GitHub Actions artifacts.
* Also update actions/checkout to v6 and close #2868.
2025-11-26 22:43:12 +00:00
Pete Batard
6a7fb939d5
[efi] update UEFI:NTFS to latest
* This improves the error message on arch mismatch, since this appears to be a common user mistake.
* Also fix a handful of MinGW warnings.
2025-11-20 13:07:40 +00:00
Valdemar
c4d6a00c28
[loc] fix typos in Russian translation
* Closes #2859.
2025-11-12 17:42:34 +00:00
Mr-Update
2af24e460e
[loc] fix typos and improve German translation
* Also remove typos in English .loc comments and MSG_355 that's a duplicate of MSG_036.
* Closes #2851.
2025-11-12 17:34:53 +00:00
Grant
b2fd426028
[misc] correct the spelling of 'zstd' in ChangeLog.txt
* Closes #2860.
2025-11-12 17:19:39 +00:00
dependabot[bot]
d755303a10
[internal] bump actions/upload-artifact from 4 to 5
* Closes #2847.
2025-11-12 17:18:27 +00:00
Pete Batard
9d074f8591
[core] strengthen the pre-formatting partition cleanup code
* This aims at reducing errors with Windows and other apps trying to keep a hook into
  existing ESPs and other partitions, thereby causing access errors.
* This is expected to potentially help with #2776 and similar issues.
* Closes #2776.
2025-11-12 17:16:05 +00:00
Pete Batard
6629ef0941
[wue] fix wimlib not being able to modify boot.wim's larger than 2 GB
* 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.
2025-10-20 13:44:33 +01:00
Pete Batard
af58b1cecd
[dbx] update DBXs to latest
* Also add 1% to projected size due to user-reported "no space on disk"
  errors when using Windows 11 25H2 against 8 "GB" UFDs.
2025-10-16 17:52:04 +01:00
Pete Batard
05526d4e6a
[iso] improve error reporting on ISO extraction issues
* Also disable NTFS cluster size that no longer work in recent versions of Windows.
2025-10-16 14:03:13 +01:00
Pete Batard
920a4c5c90
[ui] persist the toggle dark mode setting
* 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.
2025-10-14 13:22:59 +01:00
Pete Batard
90370405ad
[iso] disable splitting for ESDs
* Closes #2823.
* Also silence a MinGW warning in stdlg.c.
2025-10-13 16:48:43 +01:00
Pete Batard
fda1362eb0
[iso] fix saving to an ISO path that contains spaces
* Closes #2829.
* Also set rufus-next to 4.12.
2025-10-11 16:54:51 +01:00
Pete Batard
10694ae42e
Rufus 4.11 (Build 2285)
* Alter the WUE CA 2023 option text and remove duplicate translation for "ISO Image".
* Force cache-only when invoking CertGetCertificateChain (This should address #2781).
2025-10-02 17:53:22 +01:00
Pete Batard
56b4b9f249
[dbx] update SBAT/SVN to latest and improve reporting
* 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.
2025-10-01 13:08:58 +01:00
Pete Batard
2a8c066b72
[core] fix an application crash when the platform has a missing/failed dynamic disk
* With massive thanks to @amoki455 for helping figure that one out!
* Closes #2794.
* Also make sure we release pDisk on all conditions.
2025-10-01 11:42:25 +01:00
Pete Batard
bb11c037d7
[ui] add Ctrl-Alt-D cheat mode to toggle between Dark Mode and Light Mode
* Closes #2814.
2025-09-30 18:42:25 +01:00
Pete Batard
0de4db13d8
[ui] fix some GRUB/Syslinux downloads popups only showing a 'Close' button
* 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.
2025-09-26 13:50:12 +01:00
Pete Batard
6a1c2b4087
[wue] fix assert being triggered when using the CA 2023 option on its own...
...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.
2025-09-26 13:38:59 +01:00
Pete Batard
1c201cc01f
Rufus 4.10 (Build 2279)
* Improve persistence support for Linux Mint.
* Closes #2807.
* Also fix the Swedish translation.
2025-09-24 12:26:56 +01:00
Pete Batard
329e9705e2
[wue] remove an unneeded condition
* Also update ChangeLog.txt for BETA.
2025-09-10 13:30:08 +01:00
VenusGirl❤
3619bad538
[loc] update Korean translation
* Closes #2792.
2025-09-10 13:06:25 +01:00
Pete Batard
1740def709
[wue] finally add a working WUE option for creating Windows CA 2023 compatible installation media
* Requires Windows 11 25H2 or later.
2025-09-10 11:55:29 +01:00
Pete Batard
3ec2ac3aab
[vhd] fix no error being reported back when there's an issue with saving to VHD
* Closes #2799.
* Also fix some more Coverity warnings.
2025-09-08 13:45:58 +01:00
Pete Batard
10fc6727da
[ui] Use our own Dark Mode compatible Notification() instead of MessageBox()
* Also fix return values for Notification() and add MB_ABORTRETRYIGNORE support.
* Also fix one last Coverity warning with size_t and printf.
2025-09-05 20:06:07 +01:00
Pete Batard
7b8ddbe3ec
[ui] improve notification dialog handling
* 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().
2025-09-03 20:51:53 +01:00
Pete Batard
99c04a9f46
[misc] fix various printf issues
* Also bump actions/checkout to v5.
* Closes #2791.
2025-09-03 11:32:12 +01:00
ozone10
8ec08c1f9e
[ui ] fix broken dark mode on old Windows 10 builds
* Closes #2780.
* Closes #2766.
2025-07-29 17:57:36 +01:00
Kazkans
00f7bd193f
[vhd] return an error if there is not enough space on disk to save VHD/VHDX
* Closes #2779.
2025-07-29 16:52:21 +01:00
Pete Batard
e43d6bbc8a
[core] fix crash when trying to open a Windows ISO with a very long path
* 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 ea01cd41c0a2e58c1b3341f045f873caaed188bc.
2025-07-25 17:52:42 +01:00
Pete Batard
c93793092a
[internal] rename the if_not_assert() macro to a more explicit if_assert_fails()
* Also add a new if_assert_succeeds() macro.
2025-07-25 14:56:22 +01:00
Pete Batard
1a4175891b
[iso] fix a situation where no file system might be proposed in ISO mode
* 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.
2025-07-16 14:07:24 +01:00
Pete Batard
3bbdd6624e
[wue] cd to wrapper directory before looking for setup.dll
* Closes #2757.
2025-07-10 10:52:17 +01:00
Pete Batard
c6a85b09ae
[ui] fix wrong colour for disabled text in dark mode
* Closes #2764.
* Also fix signature not being properly applied to MinGW GitHub Actions ALPHA builds.
2025-07-03 22:28:42 +02:00
Pete Batard
e571996525
[misc] sign the GitHub ALPHA builds using self-signed credentials
* 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.
2025-07-01 14:23:34 +01:00
Pete Batard
a2dd380e93
[iso] add save selected drive to ISO feature
* 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).
2025-06-30 11:54:36 +01:00
Pete Batard
a8901f5e58
[core] switch to jserv/cregex for the regexp parser
* We need group support for group matches and tiny-regex-c doesn't support them.
2025-06-27 15:29:08 +01:00
Minh Nguyễn Quang
8cf88ffe7a
[loc] update Vietnamese translation 2025-06-26 12:21:16 +01:00
Pete Batard
446e71f56d
[dbx] fix UTC epoch being interpreted as local time for DBX timestamp comparison
* 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.
2025-06-25 10:54:10 +01:00
Pete Batard
94a2c7c2fb
[ui] fix checkboxes being erroneously enabled
* 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.
2025-06-18 15:42:13 +01:00
ozone10
170440e51c
[ui] add dark mode support
* 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.
2025-06-17 14:41:31 +01:00
Pete Batard
e9f451dfe0
[dbx] prettify JSON output for parsing since GitHub/curl may return monoblock JSON data
* Also set rufus-next to 4.10.
2025-06-16 13:50:02 +01:00
Pete Batard
9a32dba290
Rufus 4.9 (Build 2256)
* This is a bugfix release, that addresses critical issue #2756 as well as minor issue #2754.
2025-06-15 21:22:13 +01:00
Pete Batard
3791b96fcd
[net] fix downloads no longer working after the recent GitHub server update
* 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.
2025-06-15 21:17:32 +01:00
Pete Batard
e128727521
[wue] fix WUE dialog not being presented on WIMs with a single image
* As opposed to what we used with the old parser, ezxml's indexes now start at 0 rather than 1.
* Closes #2754.
* Also set rufus-next to 4.9.
2025-06-13 16:37:46 +01:00
Pete Batard
d06b729659
Rufus 4.8 (Build 2253)
* Also update x64 DBX to latest (since Microsoft has to update the DBX the very same day we pushed a new release)
2025-06-11 12:34:08 +01:00
Josef Šimánek
dab438d814
[loc] fix typo in Czech translation
* Closes #2746.
2025-06-10 16:58:28 +01:00
Pete Batard
fe9b137902
[wue] forward wrapper parameters to original setup.exe
* Also fix MinGW builds from outside of root directory
* Closes #2751
* Closes #2752
2025-06-09 17:30:18 +01:00
Pete Batard
688f011f31
[iso] improve UEFI bootloader reporting
* 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
2025-05-26 20:56:26 +01:00
Pete Batard
207a330979
[core] fix a crash due to overzealous MSVC optimizations
* 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.
2025-05-23 14:50:51 +01:00
Pete Batard
be5642ef33
[iso] add more DD-only exceptions for openSUSE and Nobara
* 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.
2025-05-19 17:24:48 +01:00
Pete Batard
bb8f231c07
[misc] fix Coverity warnings for Syslinux and libcdio
* Also increase libcdio's ISO9660 read buffer sanity check to 1 GB.
2025-05-19 13:28:23 +01:00
Pete Batard
87efc7642a
[iso] update libcdio to latest 2025-05-14 16:07:25 +01:00
Pete Batard
01d18d99de
[misc] remove manual hooks into ntdll
* 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.
2025-05-14 10:43:45 +01:00
Pete Batard
4adfa4f37e
[misc] more MinGW DLL side loading "improvements"
- Side load SetupAPI.dll, as this is the DLL that was causing the CfgMgr32.dll local load.
  This reverts part of 622e60659cb0c7c3e69f5255c0e99127eed0ada6 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 965759f58a754f0535cec4f795cfd383ecbfc945).
- 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.
2025-05-13 20:31:35 +01:00
Pete Batard
13c6becf42
[core] fix size check for VHD images
* 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.
2025-05-07 13:35:48 +01:00
Pete Batard
965759f58a
[ui] fix a crash when opening the log for MinGW x86_32 executable
* 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.
2025-05-06 18:43:35 +01:00
Pete Batard
ea01cd41c0
[iso] enable splitting of large WIMs when Alt-E is enabled
* Now that we have wimlib, we might as well add this has an option for people who really
  don't want to use NTFS, even if it falls way short of the performance we get with NTFS.
* Also use wimlib to read the install.wim version.
* Also fix a couple Coverity warnings in stdfn.c/stdio.c.
2025-05-06 01:35:26 +01:00
Pete Batard
2470c56c7e
[wue] switch to using wimlib for all WIM operations
* This should greatly improves performance when patching boot.wim for WUE or creating Windows To Go drives.
* This also allows us to discard all the bulky (and limited) native WIM API function calls.
* Also add some UTF-8 wrappers to wimlib and a GetTempDirNameU() function call.
* Also revert to the old ssize_t definition in unistd.h, since trying to be too smart throws static analysers off...
2025-05-05 00:58:07 +01:00
Pete Batard
5d35a0f1fa
[ui] progress reporting improvements
* Factorize the log progress bar update into a new uprint_progress() call.
* Add a new FP_NO_PROGRESS flag to disable progress reporting when formatting.
* Alter the progress reporting frequency of wimlib.
* Also update some copyright dates we missed before.
2025-05-03 21:32:10 +01:00
Pete Batard
96996ae1ee
[vhd] add libcdio integration to wimlib
* Allows working with WIMs without mounting the ISO by referencing something like "C:\Downloads\Windows.iso|sources/install.wim".
2025-05-02 17:28:42 +01:00
Pete Batard
c288f2fe57
[iso] add udf_setpos() support in libcdio
* This is needed for wimlib libcdio integration.
* Also fix a signed/unsigned warning in iso.c.
2025-05-02 17:27:24 +01:00
Pete Batard
9f7d623e2e
[vhd] add wimlib support
* This includes all the changes applied to wimlib for MSVC compilation support.
* The vast majority of these changes were original, but a very small set came
  was lifted from https://github.com/ebiggers/wimlib/pull/6 (which we discovered
  after we went through this whole exercise on our own...)
2025-05-02 17:25:37 +01:00
Pete Batard
1ed92072b8
[vhd] initial wimlib support (original sources)
* From https://wimlib.net/git/?p=wimlib;a=commit;h=4a34203cde54c317f0d277a4c64e19916547bf10
2025-05-02 17:25:35 +01:00
Pete Batard
e60dd7edb8
[wue] add ezxml support for WIM index parsing
* ezxml was partially altered with some changes from PRs found at https://github.com/lxfontes/ezxml.
* Also apply some small improvements to msapi_utf8.h.
2025-05-02 16:51:30 +01:00
Pete Batard
c31df87732
[wue] initial ezxml sources (unmodified)
* From the ezxml-0.8.6.tar.gz download at https://ezxml.sourceforge.net/.
2025-05-02 16:51:29 +01:00
Pete Batard
b895f26ebc
[misc] miscellaneous cleanup
* Make sure we use _M_IX86 and _M_X64 where required.
* Fix some static analysis warnings.
* Update version for rufus-next.
2025-04-21 20:20:59 +01:00
Pete Batard
88f023e796
Rufus 4.7 (Build 2231)
* Update FreeDOS to v1.4
* Update Grub4DOS to latest
2025-04-09 11:10:21 +01:00
Pete Batard
7ff68dc7af
[appstore] drop ARM32 from packaged builds and use our own PE data extractor instead of exiftool
* exiftool is way too cumbersome as a "standalone" commandline executable for our purpose.
* Also update French translation.
2025-04-02 12:16:33 +01:00
Pete Batard
871bc9a25f
[core] fix ReFS no longer being available unless VDS is enabled 2025-03-31 20:39:19 +01:00
Pete Batard
fdde687d46
[uefi] embed and allow the download of official signed DBX binaries
* With Microsoft having finally relinquished the terms of use of DBX binaries (where their
  previous legalese pretty much made it illegal for anyone who wasn't an OS manufacturer to
  download DBX for use in applications) we can now formally embed, as well as download the
  DBXs when they are updated.
* This is accomplished by querying the https://github.com/microsoft/secureboot_objects
  GitHub repo (which is now the official repository for the UEFI Forum's revocation files)
  through api.github.com and checking the timestamps of the last commit on the relevant files.
  If a more recent DBX is found than the one embedded (or a previously downloaded one), Rufus
  will now prompt the user to download it, as part of its regular update check (if enabled).
* Note that, since there have been no official revocations for them yet, IA64, RISCV64 and
  LoongArch64 are currently placeholders.
* Also note that we currently don't use this mechanism for Microsoft's SVN revocations, as
  we already have a more efficient check for it through SBAT.
* Also fix the handling of the RISCV64 MD5Sum UEFI bootloader, whose offset was incorrect.
2025-03-27 16:11:45 +00:00
Pete Batard
845d26e3b6
[ui] fix toolbar ImageLists leaks
* Also fix erroneous use of safe_delete_object() in previous commit and harmonize names.
* Closes #2711.
2025-03-24 13:18:20 +00:00
ozone10
df4f8301d7
[ui] fix GDI leaks
* Closes #2704.
2025-03-21 12:19:16 +00:00
Pete Batard
bc75274a9a
[msvc] further prevent DLL side-loading by using /DEPENDENTLOADFLAG:0x800
* Suggested by @dimhotepus per #2701.
* Sadly a similar feature can't be applied for MinGW builds. (See also https://sourceforge.net/p/mingw-w64/mailman/message/59156023/)
* While we're at it, also sure we use /BREPRO everywhere for MSVC reproducible builds.
2025-03-04 11:47:11 +00:00
Pete Batard
7585a35c2c
[core] improve detection for images that are too large to fit the target drives
* Rufus did not check if the size of the decompressed VHDX was larger than target. Fix that.
2025-02-21 17:53:38 +00:00
Pete Batard
9540ca359d
[misc] don't enable the commandline hogger on POSIX shells
* Assume that the presence of a "SHELL" environment variable is enough to tell if we have a POSIX shell.
2025-02-20 13:13:44 +00:00
Pete Batard
622e60659c
[dev] fix a side-loading vulnerability with cfgmgr32.dll
* Current Rufus and earlier versions (when compiled with MinGW) suffer from a side-loading vulnerability
  due to cfgmgr32.dll being attempted to be loaded from the same directory as the executable. This may
  result in someone being able to execute elevated malicious code if they already have gained user-level
  access to the platform and were able to drop an arbitrary cfgmgr32.dll in the same directory as rufus.
* While we were able to address similar vulnerabilities using delay-loading, this method does not appear
  to work for MinGW with this specific DLL, so we remove all the implicit CM_ function calls, that result
  in automated DLL loading that cannot be mitigated, to replace them with direct DLL hooks, which are
  not subject to Windows' default (vulnerable) DLL lookup behaviour. We still add the def for the delay
  loading in case we manage to find how to delay load cfgmgr32 with MinGW in the future...
* Fixes CVE-2025-26624 (https://github.com/pbatard/rufus/security/advisories/GHSA-p8p5-r296-g2jv).
* This vulnerability was discovered by @EmperialX working with @Shauryae1337 and reported by @EmperialX.
2025-02-19 11:58:10 +00:00
Rairii
50801a47ff
[misc] fall back to user/system default locale when getting error description
* Some Windows localisations do not contain English MUI files for specific error codes, so show *something* instead of an error.
* Closes #2687.
2025-02-14 01:07:43 +00:00
Pete Batard
f3c29bf537
[misc] fix and silence some Coverity warnings 2025-02-13 15:14:53 +00:00
lucamosca1
ec604f43d6
[loc] fix a typo in the Italian translation
* Closes #2675.
2025-02-10 17:47:29 +00:00
Pete Batard
d910441427
[misc] Fix issue template no longer being processed
* Since GitHub broke existing paths and did not bother to alert people.
* Closes #2672.
2025-01-25 13:06:07 +00:00
Pete Batard
1c300b428a
[uefi] update UEFI DBX to latest
* This is in light of the 2025.01.14 DBX update due to https://arstechnica.com/security/2025/01/microsoft-patches-windows-to-eliminate-secure-boot-bypass-threat/.
* Also update application copyright year and a translator's e-mail address.
2025-01-24 00:30:22 +00:00
Emmanuel Bourg
1e2f1c1aff
[loc] Improve the French translation
* Closes #2636.
2024-12-17 14:57:51 +01:00
Pete Batard
3d5ab84ec1
[iso] fix FAT filenames being truncated on image extraction
* Needed to read 12 chars instead of stopping at 11 and therefore inserting a NUL.
* Closes #2534.
* Also enable detection of bootriscv64.efi and bootloongarch64.efi bootloaders from FAT images.
2024-12-03 13:53:41 +00:00
Pete Batard
8d1ed44e1e
[cmd] fix hogger not being deleted on exit when executable is in a different directory
* Closes #2622.
2024-12-03 11:51:18 +00:00
Pete Batard
79f1209ab9
[misc] arch/cpu refactoring
* Move the cpu.c/cpu.h in more logical places and remove these sources files.
* Add detection for LoongArch64 EFI bootloaders.
* Pass the detected CPU arch when invoking Fido.
* Also fix some Bled Coverity warnings.
2024-12-02 19:04:51 +00:00
Pete Batard
8f3a9c1c7c
[cmp] update Bled to latest
* This mostly updates the ZSTD code to latest and properly removes all debug message.
* Also switch MinGW from gnu99 to gnu11.
2024-11-27 17:19:36 +00:00
Pete Batard
cef7a5cb0c
[cmp] add ztsd image compression support
* Based on the latest Bled, which adds ztsd compression support.
* Note that initial extraction of the 512 bytes MBR is very slow, because is seems
  clear that ZSTD was never designed for fast init or processing small elements of
  data, but instead for post init large volume streaming.
* Also note that this code adds 400 KB to the Rufus executable *AFTER UPX COMPRESSION*!
  Hopefully, the BusyBox folks can come up with a better and smaller way to add zstd
  support, because it's clear that the method used by the current BusyBox proposal,
  which is to leave as much of the original code untouched, isn't for the best...
* Closes #2590.
* Closes #2620.
* Closes #2621.
2024-11-22 23:25:33 +00:00
Pete Batard
fcdde3dcb8
[misc] drop ARM32 builds
* Per https://github.com/actions/runner-images/issues/10981 and plenty of other similar
  reports, GitHub Actions can no longer compile ARM32 binaries by default using the
  latest Visual Studio toolchain, due to Microsoft current Windows SDK having dropped
  the ARM32 toolchain (per https://github.com/zufuliu/notepad4/issues/839).
* Well, I have better things to do then try to maintain platforms in the process of
  being deprecated, so I'll let the people who care about Rufus on ARM32 propose a
  non-intrusive workaround that can work with current GitHub Actions.
2024-11-22 00:18:58 +00:00
Pete Batard
37e383ade6
[dev] add disk exclusion by GPT Disk GUID
* Similar to what we already do with IgnoreUSB##, except this time, users
  can add REG_SZ keys IgnoreDisk01 to IgnoreDisk08, with a string like
  "{F333EC2E-25C9-488D-A7FC-9147C2367623}" to ignore a GPT disk with this
  specific GUID.
* This may be useful for people who mount fixed virtual drives, or people
  who have enabled Hot Swap on their SATA storage, and who want to make sure
  they won't be able to inadvertently select that disk in Rufus.
* Also set rufus-next to 4.7.
2024-11-22 00:03:13 +00:00
334 changed files with 95276 additions and 4964 deletions

1
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -0,0 +1 @@
blank_issues_enabled: false

View File

@ -1,48 +1,57 @@
<!--
PLEASE READ THIS CAREFULLY:
1. You *MUST* read and complete the steps from the checklist below, by placing
an x into each [ ] (so that it shows '[x]', NOT '[ x]' or '[x ]'), BEFORE
clicking on 'Submit new issue'.
2. Failure to perform these steps, WHICH ARE ONLY THERE TO HELP *YOU*, will
usually result in your issue being dismissed without notice.
3. If you are reporting an issue when trying to run Rufus, or when trying to
boot a media created by Rufus, you *MUST* provide a log, period. Please do
not assume that the developer(s) will be able to "guess" the specifics of
your environment, what image you used, what type of media you used it with
or the many many other critical parameters that the log provides data for.
To investigate an issue, a log from Rufus is ALWAYS required.
4. If you still *choose* not to provide a log when reporting a problem, you
agree that your issue will be closed without any further investigation.
YOU HAVE BEEN WARNED.
-->
Checklist
---------
- [ ] I have been made aware that if my problem can be summarized as _"I've created or tried to create a media using Rufus, and ..."_, and I am not including a log, **this issue will be summarily closed**.
- [ ] I looked at https://github.com/pbatard/rufus/wiki/FAQ to see if my question has already been answered.
- [ ] I performed a search in the issue tracker for similar issues using keywords relevant to my problem, such as the error message I got from the log.
- [ ] I clicked the 'Log' button (🗒️) or pressed <kbd>Ctrl</kbd>-<kbd>L</kbd> in Rufus, or used [DebugView](https://learn.microsoft.com/en-us/sysinternals/downloads/debugview), and copy/pasted the log into the section that says `<FULL LOG>` below.
- [ ] The log I am copying is the FULL log, starting with the line `Rufus version: x.y.z` - I have NOT removed any part of it.
Additionally (if applicable):
- [ ] I ran a bad blocks check, by clicking _Show advanced format options_ then _Check device for bad blocks_, and confirmed that my USB is not defective.
- [ ] I also tried one or more of the following:
- [ ] Using a different USB drive.
- [ ] Plugging the USB into a different port.
- [ ] Running Rufus on a different computer.
- [ ] If using an image, I clicked on the `(✓)` button to compute the MD5, SHA1 and SHA256 checksums, which are therefore present in the log I copied. I confirmed, by performing an internet search, that these values match the ones from the official image.
Issue description
-----------------
<Please describe your issue here>
Log
---
```
<FULL LOG>
```
---
name: Report an issue with the application
about: Please make sure you follow the check-list carefully!
title: ''
labels: ''
assignees: ''
---
<!--
PLEASE READ THIS CAREFULLY:
1. You *MUST* read and complete the steps from the checklist below, by placing
an x into each [ ] (so that it shows '[x]', NOT '[ x]' or '[x ]'), BEFORE
clicking on 'Submit new issue'.
2. Failure to perform these steps, WHICH ARE ONLY THERE TO HELP *YOU*, will
usually result in your issue being dismissed without notice.
3. If you are reporting an issue when trying to run Rufus, or when trying to
boot a media created by Rufus, you *MUST* provide a log, period. Please do
not assume that the developer(s) will be able to "guess" the specifics of
your environment, what image you used, what type of media you used it with
or the many many other critical parameters that the log provides data for.
To investigate an issue, a log from Rufus is ALWAYS required.
4. If you still *choose* not to provide a log when reporting a problem, you
agree that your issue will be closed without any further investigation.
YOU HAVE BEEN WARNED.
-->
Checklist
---------
- [ ] I have been made aware that if my problem can be summarized as _"I've created or tried to create a media using Rufus, and ..."_, and I am not including a log, **this issue will be summarily closed**.
- [ ] I looked at https://github.com/pbatard/rufus/wiki/FAQ to see if my question has already been answered.
- [ ] I performed a search in the issue tracker for similar issues using keywords relevant to my problem, such as the error message I got from the log.
- [ ] I clicked the 'Log' button (🗒️) or pressed <kbd>Ctrl</kbd>-<kbd>L</kbd> in Rufus, or used [DebugView](https://learn.microsoft.com/en-us/sysinternals/downloads/debugview), and copy/pasted the log into the section that says `<FULL LOG>` below.
- [ ] The log I am copying is the FULL log, starting with the line `Rufus version: x.y.z` - I have NOT removed any part of it.
Additionally (if applicable):
- [ ] I ran a bad blocks check, by clicking _Show advanced format options_ then _Check device for bad blocks_, and confirmed that my USB is not defective.
- [ ] I also tried one or more of the following:
- [ ] Using a different USB drive.
- [ ] Plugging the USB into a different port.
- [ ] Running Rufus on a different computer.
- [ ] If using an image, I clicked on the `(✓)` button to compute the MD5, SHA1 and SHA256 checksums, which are therefore present in the log I copied. I confirmed, by performing an internet search, that these values match the ones from the official image.
Issue description
-----------------
<Please describe your issue here>
Log
---
```
<FULL LOG>
```

View File

@ -4,6 +4,7 @@ on:
push:
branches: [master]
paths-ignore:
- '.github/ISSUE_TEMPLATE/**'
- '.gitignore'
- '.gitattributes'
- 'res/**'
@ -40,10 +41,10 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
uses: github/codeql-action/init@v4
with:
languages: cpp
@ -56,4 +57,4 @@ jobs:
run: msbuild ${{env.SOLUTION_FILE_PATH}} /m /p:Configuration=${{ env.BUILD_CONFIGURATION}},Platform=${{ env.TARGET_PLATFORM }}
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
uses: github/codeql-action/analyze@v4

View File

@ -4,6 +4,7 @@ on:
push:
branches: [master]
paths-ignore:
- '.github/ISSUE_TEMPLATE/**'
- '.gitignore'
- '.gitattributes'
- 'res/**'
@ -27,7 +28,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: recursive
@ -52,7 +53,7 @@ jobs:
cov-build.exe --dir cov-int msbuild ${{ env.SOLUTION_FILE_PATH }} /m /p:Configuration=${{ env.BUILD_CONFIGURATION }},Platform=${{ env.TARGET_PLATFORM }}
- name: Publish Coverity artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: cov-int
path: cov-int/

View File

@ -3,6 +3,7 @@ name: MinGW
on:
push:
paths-ignore:
- '.github/ISSUE_TEMPLATE/**'
- '.gitignore'
- '.gitattributes'
- 'res/**'
@ -53,7 +54,7 @@ jobs:
upx
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: recursive
@ -84,6 +85,23 @@ jobs:
strip ./${{ matrix.exe }}
upx --lzma --best ./${{ matrix.exe }}
- name: Prepare to sign ALPHA
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
shell: bash
# NB: The Base64 encoded variable should not have line breaks or this will fail!
run: echo ${{ secrets.RUFUS_GITHUB_OFFICIAL_BUILD }} | base64 -di > ./sign.pfx
- name: Add signtool to path
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
uses: KamaranL/add-signtool-action@v1
- name: Sign ALPHA
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
shell: cmd
run: |
signtool sign /v /f sign.pfx /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 ${{ matrix.exe }}
del sign.pfx
- name: Display SHA-256
run: sha256sum ./${{ matrix.exe }}
@ -96,7 +114,7 @@ jobs:
- name: Upload artifacts
if: ${{ github.event_name == 'push' }}
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: ${{ matrix.sys }}
path: ./*.exe
@ -106,7 +124,7 @@ jobs:
needs: MinGW-Build
steps:
- name: Merge Artifacts
uses: actions/upload-artifact/merge@v4
uses: actions/upload-artifact/merge@v6
if: ${{ github.event_name == 'push' }}
with:
name: MinGW

View File

@ -19,7 +19,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v2
@ -36,7 +36,7 @@ jobs:
run: sha256sum ./setup_${{ matrix.TARGET_PLATFORM }}.exe
- name: Upload artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
with:
name: ${{ matrix.TARGET_PLATFORM }}
path: ./*.exe
@ -46,7 +46,7 @@ jobs:
needs: VS2022-Build
steps:
- name: Merge Artifacts
uses: actions/upload-artifact/merge@v4
uses: actions/upload-artifact/merge@v5
with:
name: setup
delete-merged: true

View File

@ -3,6 +3,7 @@ name: VS2022
on:
push:
paths-ignore:
- '.github/ISSUE_TEMPLATE/**'
- '.gitignore'
- '.gitattributes'
- 'res/**'
@ -35,11 +36,11 @@ jobs:
strategy:
matrix:
TARGET_PLATFORM: [x64, x86, arm64, arm]
TARGET_PLATFORM: [x64, x86, arm64]
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0
submodules: recursive
@ -49,6 +50,20 @@ jobs:
with:
msbuild-architecture: x64
- name: Install UPX
uses: crazy-max/ghaction-upx@v3
with:
install-only: true
- name: Set version
id: set_version
shell: bash
run: |
version=$(git describe --tags)
version=${version:1}
version=${version%%-*}
echo "version=$version" >> $GITHUB_OUTPUT
- name: Set ALPHA
id: set_alpha
shell: bash
@ -75,6 +90,31 @@ jobs:
move .\${{ matrix.TARGET_PLATFORM }}\Release\rufus.exe .\rufus_${{ matrix.TARGET_PLATFORM }}.exe
move .\${{ matrix.TARGET_PLATFORM }}\Release\rufus.pdb .\rufus_${{ matrix.TARGET_PLATFORM }}.pdb
- name: Prepare to sign ALPHA
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
shell: bash
# NB: The Base64 encoded variable should not have line breaks or this will fail!
run: echo ${{ secrets.RUFUS_GITHUB_OFFICIAL_BUILD }} | base64 -di > ./sign.pfx
- name: Add signtool to path
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
uses: KamaranL/add-signtool-action@v1
- name: Sign ALPHA
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
shell: cmd
run: |
signtool sign /v /f sign.pfx /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 rufus_${{ matrix.TARGET_PLATFORM }}.exe
del sign.pfx
- name: Create standalone release executables
if: ${{ startsWith(github.ref, 'refs/tags/') }}
shell: cmd
run: |
copy rufus_${{ matrix.TARGET_PLATFORM }}.exe rufus-${{ steps.set_version.outputs.version }}_${{ matrix.TARGET_PLATFORM }}.exe
if exist rufus-${{ steps.set_version.outputs.version }}_x64.exe ( ren rufus-${{ steps.set_version.outputs.version }}_x64.exe rufus-${{ steps.set_version.outputs.version }}.exe )
if not ${{ matrix.TARGET_PLATFORM }}==arm64 ( upx --lzma --best rufus-*.exe )
- name: Display SHA-256
run: sha256sum ./rufus_${{ matrix.TARGET_PLATFORM }}.exe
@ -86,7 +126,7 @@ jobs:
curl --request POST --url https://www.virustotal.com/api/v3/monitor/items --header 'x-apikey: ${{ secrets.VIRUSTOTAL_API_KEY }}' --form path='/rufus_${{ matrix.TARGET_PLATFORM }}.exe' --form file=@./rufus_${{ matrix.TARGET_PLATFORM }}.exe
- name: Upload artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v6
if: ${{ github.event_name == 'push' }}
with:
name: ${{ matrix.TARGET_PLATFORM }}
@ -99,7 +139,7 @@ jobs:
needs: VS2022-Build
steps:
- name: Merge Artifacts
uses: actions/upload-artifact/merge@v4
uses: actions/upload-artifact/merge@v6
if: ${{ github.event_name == 'push' }}
with:
name: VS2022

View File

@ -14,12 +14,13 @@ AM_V_SED = $(AM_V_SED_$(V))
# target arch. Oh, and we can't use 'target_cpu' or AC definitions on account that we are
# switching archs when building on our local machine, and don't want to have to go though
# a costly reconf each time when we can simply issue a 'make clean'.
# Oh, and to find the number after the @ sign, just have a look at the MinGW .a libraries.
TUPLE := $(shell $(CC) -dumpmachine)
TARGET := $(word 1,$(subst -, ,$(TUPLE)))
DEF_SUFFIX := $(if $(TARGET:x86_64=),.def,.def64)
.PHONY: all
all: dwmapi-delaylib.lib version-delaylib.lib virtdisk-delaylib.lib wininet-delaylib.lib wintrust-delaylib.lib
all: crypt32-delaylib.lib dwmapi-delaylib.lib setupapi-delaylib.lib uxtheme-delaylib.lib version-delaylib.lib virtdisk-delaylib.lib wininet-delaylib.lib wintrust-delaylib.lib
%.def64: %.def
$(AM_V_SED) "s/@.*//" $< >$@
@ -28,4 +29,4 @@ all: dwmapi-delaylib.lib version-delaylib.lib virtdisk-delaylib.lib wininet-dela
$(AM_V_DLLTOOL) --input-def $< --output-delaylib $@ --dllname $(basename $<).dll
clean:
$(RM) -rf *.lib
$(RM) -f $(CURDIR)/*.lib

View File

@ -212,6 +212,7 @@ AM_V_SED = $(AM_V_SED_$(V))
# target arch. Oh, and we can't use 'target_cpu' or AC definitions on account that we are
# switching archs when building on our local machine, and don't want to have to go though
# a costly reconf each time when we can simply issue a 'make clean'.
# Oh, and to find the number after the @ sign, just have a look at the MinGW .a libraries.
TUPLE := $(shell $(CC) -dumpmachine)
TARGET := $(word 1,$(subst -, ,$(TUPLE)))
DEF_SUFFIX := $(if $(TARGET:x86_64=),.def,.def64)
@ -367,7 +368,7 @@ uninstall-am:
.PHONY: all
all: dwmapi-delaylib.lib version-delaylib.lib virtdisk-delaylib.lib wininet-delaylib.lib wintrust-delaylib.lib
all: crypt32-delaylib.lib dwmapi-delaylib.lib setupapi-delaylib.lib uxtheme-delaylib.lib version-delaylib.lib virtdisk-delaylib.lib wininet-delaylib.lib wintrust-delaylib.lib
%.def64: %.def
$(AM_V_SED) "s/@.*//" $< >$@
@ -376,7 +377,7 @@ all: dwmapi-delaylib.lib version-delaylib.lib virtdisk-delaylib.lib wininet-dela
$(AM_V_DLLTOOL) --input-def $< --output-delaylib $@ --dllname $(basename $<).dll
clean:
$(RM) -rf *.lib
$(RM) -f $(CURDIR)/*.lib
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.

10
.mingw/cfgmgr32.def Normal file
View File

@ -0,0 +1,10 @@
EXPORTS
CM_Get_Device_IDA@16
CM_Get_Device_ID_List_SizeA@12
CM_Get_Device_ID_ListA@16
CM_Locate_DevNodeA@12
CM_Get_Child@12
CM_Get_Sibling@12
CM_Get_Parent@12
CM_Get_DevNode_Status@16
CM_Get_DevNode_Registry_PropertyA@24

14
.mingw/crypt32.def Normal file
View File

@ -0,0 +1,14 @@
EXPORTS
CertFindCertificateInStore@24
CertGetCertificateChain@32
CertGetNameStringA@24
CertCloseStore@8
CertFreeCertificateContext@4
CryptQueryObject@44
CryptDecodeObjectEx@32
CryptHashCertificate@28
CryptMsgGetParam@20
CryptMsgClose@4
CryptMsgGetParam@20
CryptMsgOpenToDecode@24
CryptMsgUpdate@16

View File

@ -1,2 +1,4 @@
EXPORTS
DwmGetColorizationColor@8
DwmGetWindowAttribute@16
DwmSetWindowAttribute@16

20
.mingw/setupapi.def Normal file
View File

@ -0,0 +1,20 @@
EXPORTS
CM_Locate_DevNodeA@12
CM_Get_DevNode_Registry_PropertyA@24
CM_Get_DevNode_Status@16
CM_Get_Child@12
CM_Get_Parent@12
CM_Get_Sibling@12
CM_Get_Device_IDA@16
CM_Get_Device_ID_ListA@16
CM_Get_Device_ID_List_SizeA@12
SetupDiGetDeviceInstanceIdA@20
SetupDiGetDeviceRegistryPropertyA@28
SetupDiGetDeviceRegistryPropertyW@28
SetupDiChangeState@8
SetupDiGetClassDevsA@16
SetupDiSetClassInstallParamsW@16
SetupDiEnumDeviceInfo@12
SetupDiEnumDeviceInterfaces@20
SetupDiDestroyDeviceInfoList@4
SetupDiGetDeviceInterfaceDetailA@24

15
.mingw/uxtheme.def Normal file
View File

@ -0,0 +1,15 @@
EXPORTS
BeginBufferedAnimation@32
BufferedPaintRenderAnimation@8
BufferedPaintStopAllAnimations@4
CloseThemeData@4
DrawThemeBackground@24
DrawThemeParentBackground@12
DrawThemeTextEx@36
EndBufferedAnimation@8
GetThemeBackgroundContentRect@24
GetThemeFont@24
GetThemePartSize@28
GetThemeTransitionDuration@24
OpenThemeData@8
SetWindowTheme@12

View File

@ -2,6 +2,7 @@ EXPORTS
HttpQueryInfoA@20
HttpOpenRequestA@32
HttpSendRequestA@20
HttpAddRequestHeadersA@16
InternetCloseHandle@4
InternetConnectA@32
InternetCrackUrlA@16

View File

@ -46,32 +46,59 @@
<ClCompile Include="..\src\bled\decompress_unlzma.c" />
<ClCompile Include="..\src\bled\decompress_unxz.c" />
<ClCompile Include="..\src\bled\decompress_unzip.c" />
<ClCompile Include="..\src\bled\decompress_unzstd.c" />
<ClCompile Include="..\src\bled\decompress_vtsi.c" />
<ClCompile Include="..\src\bled\filter_accept_all.c" />
<ClCompile Include="..\src\bled\filter_accept_list.c" />
<ClCompile Include="..\src\bled\filter_accept_reject_list.c" />
<ClCompile Include="..\src\bled\find_list_entry.c" />
<ClCompile Include="..\src\bled\fse_decompress.c" />
<ClCompile Include="..\src\bled\header_list.c" />
<ClCompile Include="..\src\bled\header_skip.c" />
<ClCompile Include="..\src\bled\header_verbose_list.c" />
<ClCompile Include="..\src\bled\huf_decompress.c" />
<ClCompile Include="..\src\bled\init_handle.c" />
<ClCompile Include="..\src\bled\open_transformer.c" />
<ClCompile Include="..\src\bled\seek_by_jump.c" />
<ClCompile Include="..\src\bled\seek_by_read.c" />
<ClCompile Include="..\src\bled\xxhash.c" />
<ClCompile Include="..\src\bled\xz_dec_bcj.c" />
<ClCompile Include="..\src\bled\xz_dec_lzma2.c" />
<ClCompile Include="..\src\bled\xz_dec_stream.c" />
<ClCompile Include="..\src\bled\zstd_common.c" />
<ClCompile Include="..\src\bled\zstd_ddict.c" />
<ClCompile Include="..\src\bled\zstd_decompress.c" />
<ClCompile Include="..\src\bled\zstd_decompress_block.c" />
<ClCompile Include="..\src\bled\zstd_entropy_common.c" />
<ClCompile Include="..\src\bled\zstd_error_private.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\bled\bb_archive.h" />
<ClInclude Include="..\src\bled\bled.h" />
<ClInclude Include="..\src\bled\fse.h" />
<ClInclude Include="..\src\bled\fse_bitstream.h" />
<ClInclude Include="..\src\bled\huf.h" />
<ClInclude Include="..\src\bled\libbb.h" />
<ClInclude Include="..\src\bled\platform.h" />
<ClInclude Include="..\src\bled\xxhash.h" />
<ClInclude Include="..\src\bled\xz.h" />
<ClInclude Include="..\src\bled\xz_config.h" />
<ClInclude Include="..\src\bled\xz_lzma2.h" />
<ClInclude Include="..\src\bled\xz_private.h" />
<ClInclude Include="..\src\bled\xz_stream.h" />
<ClInclude Include="..\src\bled\zstd.h" />
<ClInclude Include="..\src\bled\zstd_bits.h" />
<ClInclude Include="..\src\bled\zstd_compiler.h" />
<ClInclude Include="..\src\bled\zstd_config.h" />
<ClInclude Include="..\src\bled\zstd_cpu.h" />
<ClInclude Include="..\src\bled\zstd_ddict.h" />
<ClInclude Include="..\src\bled\zstd_decompress_block.h" />
<ClInclude Include="..\src\bled\zstd_decompress_internal.h" />
<ClInclude Include="..\src\bled\zstd_deps.h" />
<ClInclude Include="..\src\bled\zstd_errors.h" />
<ClInclude Include="..\src\bled\zstd_error_private.h" />
<ClInclude Include="..\src\bled\zstd_internal.h" />
<ClInclude Include="..\src\bled\zstd_mem.h" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>bled</ProjectName>

View File

@ -87,6 +87,36 @@
<ClCompile Include="..\src\bled\decompress_vtsi.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\bled\decompress_unzstd.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\bled\fse_decompress.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\bled\huf_decompress.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\bled\xxhash.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\bled\zstd_decompress.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\bled\zstd_decompress_block.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\bled\zstd_entropy_common.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\bled\zstd_error_private.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\bled\zstd_common.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\bled\zstd_ddict.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\bled\bb_archive.h">
@ -116,5 +146,56 @@
<ClInclude Include="..\src\bled\xz_stream.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\fse.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\fse_bitstream.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\huf.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\xxhash.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\zstd.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\zstd_compiler.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\zstd_config.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\zstd_cpu.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\zstd_ddict.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\zstd_decompress_block.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\zstd_decompress_internal.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\zstd_deps.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\zstd_error_private.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\zstd_errors.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\zstd_internal.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\zstd_mem.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\bled\zstd_bits.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -121,24 +121,25 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<BuildLog />
<ClCompile>
<PreprocessorDefinitions>_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;_CRTDBG_MAP_ALLOC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_RUFUS;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;_CRTDBG_MAP_ALLOC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;..\src\wimlib;..\res;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<CompileAs>CompileAsC</CompileAs>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ExceptionHandling>Async</ExceptionHandling>
<DisableSpecificWarnings>4091;5255;28251;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<Optimization>Disabled</Optimization>
<AdditionalOptions>/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/utf-8 /std:clatest $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;ntdll.lib;shlwapi.lib;uxtheme.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;uxtheme.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<AdditionalOptions>/BREPRO /DEPENDENTLOADFLAG:0x800 %(AdditionalOptions)</AdditionalOptions>
</Link>
<ResourceCompile>
<PreprocessorDefinitions>_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -151,23 +152,24 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<BuildLog />
<ClCompile>
<PreprocessorDefinitions>_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;_CRTDBG_MAP_ALLOC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_RUFUS;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;_CRTDBG_MAP_ALLOC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;..\src\wimlib;..\res;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<CompileAs>CompileAsC</CompileAs>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ExceptionHandling>Async</ExceptionHandling>
<DisableSpecificWarnings>4091;5255;28251;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<AdditionalOptions>/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/utf-8 /std:clatest $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;ntdll.lib;shlwapi.lib;uxtheme.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<AdditionalLibraryDirectories>C:\Program Files (x86)\Windows Kits\10\Lib\10.0.15063.0\um\arm</AdditionalLibraryDirectories>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;uxtheme.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<AdditionalOptions>/BREPRO /DEPENDENTLOADFLAG:0x800 %(AdditionalOptions)</AdditionalOptions>
</Link>
<ResourceCompile>
<PreprocessorDefinitions>_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -182,23 +184,24 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<BuildLog />
<ClCompile>
<PreprocessorDefinitions>_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;_CRTDBG_MAP_ALLOC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_RUFUS;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;_CRTDBG_MAP_ALLOC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;..\src\wimlib;..\res;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<CompileAs>CompileAsC</CompileAs>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ExceptionHandling>Async</ExceptionHandling>
<DisableSpecificWarnings>4091;5255;28251;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<AdditionalOptions>/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/utf-8 /std:clatest $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;ntdll.lib;shlwapi.lib;uxtheme.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<AdditionalLibraryDirectories>C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\arm64</AdditionalLibraryDirectories>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;uxtheme.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<AdditionalOptions>/BREPRO /DEPENDENTLOADFLAG:0x800 %(AdditionalOptions)</AdditionalOptions>
</Link>
<ResourceCompile>
<PreprocessorDefinitions>_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -216,8 +219,8 @@
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;_CRTDBG_MAP_ALLOC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;..\src\wimlib;..\res;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_RUFUS;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;_CRTDBG_MAP_ALLOC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
@ -226,15 +229,16 @@
<ExceptionHandling>Async</ExceptionHandling>
<DisableSpecificWarnings>4091;5255;28251;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<Optimization>Disabled</Optimization>
<AdditionalOptions>/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/utf-8 /std:clatest $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;ntdll.lib;shlwapi.lib;uxtheme.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX64</TargetMachine>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;uxtheme.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<AdditionalOptions>/BREPRO /DEPENDENTLOADFLAG:0x800 %(AdditionalOptions)</AdditionalOptions>
</Link>
<ResourceCompile>
<PreprocessorDefinitions>_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -247,26 +251,26 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<BuildLog />
<ClCompile>
<PreprocessorDefinitions>_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_RUFUS;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;..\src\wimlib;..\res;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<CompileAs>CompileAsC</CompileAs>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ExceptionHandling>Async</ExceptionHandling>
<DisableSpecificWarnings>4091;5255;28251;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<UndefinePreprocessorDefinitions>NDEBUG</UndefinePreprocessorDefinitions>
<AdditionalOptions>/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/utf-8 /std:clatest $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
<StringPooling>true</StringPooling>
</ClCompile>
<Link>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;ntdll.lib;shlwapi.lib;uxtheme.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
<AdditionalOptions>/BREPRO %(AdditionalOptions)</AdditionalOptions>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<AdditionalOptions>/BREPRO /DEPENDENTLOADFLAG:0x800 %(AdditionalOptions)</AdditionalOptions>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;uxtheme.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
</Link>
<ResourceCompile>
<PreprocessorDefinitions>_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -279,26 +283,26 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<BuildLog />
<ClCompile>
<PreprocessorDefinitions>_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_RUFUS;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;..\src\wimlib;..\res;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<CompileAs>CompileAsC</CompileAs>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ExceptionHandling>Async</ExceptionHandling>
<DisableSpecificWarnings>4091;5255;28251;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<UndefinePreprocessorDefinitions>NDEBUG</UndefinePreprocessorDefinitions>
<AdditionalOptions>/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/utf-8 /std:clatest $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
<StringPooling>true</StringPooling>
</ClCompile>
<Link>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;ntdll.lib;shlwapi.lib;uxtheme.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<AdditionalLibraryDirectories>C:\Program Files (x86)\Windows Kits\10\Lib\10.0.15063.0\um\arm</AdditionalLibraryDirectories>
<AdditionalOptions>/BREPRO %(AdditionalOptions)</AdditionalOptions>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<AdditionalOptions>/BREPRO /DEPENDENTLOADFLAG:0x800 %(AdditionalOptions)</AdditionalOptions>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;uxtheme.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
</Link>
<ResourceCompile>
<PreprocessorDefinitions>_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -313,26 +317,26 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<BuildLog />
<ClCompile>
<PreprocessorDefinitions>_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_RUFUS;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;..\src\wimlib;..\res;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<CompileAs>CompileAsC</CompileAs>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ExceptionHandling>Async</ExceptionHandling>
<DisableSpecificWarnings>4091;5255;28251;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<UndefinePreprocessorDefinitions>NDEBUG</UndefinePreprocessorDefinitions>
<AdditionalOptions>/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/utf-8 /std:clatest $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
<StringPooling>true</StringPooling>
</ClCompile>
<Link>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;ole32.lib;advapi32.lib;gdi32.lib;shell32.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;ntdll.lib;shlwapi.lib;uxtheme.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;comdlg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<AdditionalLibraryDirectories>C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\arm64</AdditionalLibraryDirectories>
<AdditionalOptions>/BREPRO %(AdditionalOptions)</AdditionalOptions>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;ole32.dll;advapi32.dll;gdi32.dll;shell32.dll;comdlg32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<AdditionalOptions>/BREPRO /DEPENDENTLOADFLAG:0x800 %(AdditionalOptions)</AdditionalOptions>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;uxtheme.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
</Link>
<ResourceCompile>
<PreprocessorDefinitions>_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -350,26 +354,26 @@
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile>
<PreprocessorDefinitions>_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_RUFUS;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;COBJMACROS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\src;..\src\msvc-missing;..\src\ms-sys\inc;..\src\syslinux\libinstaller;..\src\syslinux\libfat;..\src\syslinux\win;..\src\libcdio;..\src\getopt;..\src\wimlib;..\res;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<CompileAs>CompileAsC</CompileAs>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
<ExceptionHandling>Async</ExceptionHandling>
<DisableSpecificWarnings>4091;5255;28251;28252;28253;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<UndefinePreprocessorDefinitions>NDEBUG</UndefinePreprocessorDefinitions>
<AdditionalOptions>/utf-8 $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
<AdditionalOptions>/utf-8 /std:clatest $(ExternalCompilerOptions) %(AdditionalOptions)</AdditionalOptions>
<StringPooling>true</StringPooling>
</ClCompile>
<Link>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;shlwapi.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>advapi32.lib;comctl32.lib;crypt32.lib;gdi32.lib;ole32.lib;dwmapi.lib;setupapi.lib;shell32.lib;ntdll.lib;shlwapi.lib;uxtheme.lib;version.lib;virtdisk.lib;wininet.lib;wintrust.lib;%(AdditionalDependencies)</AdditionalDependencies>
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
<GenerateDebugInformation>false</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX64</TargetMachine>
<AdditionalOptions>/BREPRO %(AdditionalOptions)</AdditionalOptions>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
<AdditionalOptions>/BREPRO /DEPENDENTLOADFLAG:0x800 %(AdditionalOptions)</AdditionalOptions>
<DelayLoadDLLs>advapi32.dll;comctl32.dll;crypt32.dll;gdi32.dll;ole32.dll;dwmapi.dll;setupapi.dll;shell32.dll;shlwapi.dll;uxtheme.dll;version.dll;virtdisk.dll;wininet.dll;wintrust.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
</Link>
<ResourceCompile>
<PreprocessorDefinitions>_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@ -381,7 +385,10 @@
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\src\badblocks.c" />
<ClCompile Include="..\src\cpu.c" />
<ClCompile Include="..\src\cregex_compile.c" />
<ClCompile Include="..\src\cregex_parse.c" />
<ClCompile Include="..\src\cregex_vm.c" />
<ClCompile Include="..\src\darkmode.c" />
<ClCompile Include="..\src\dos_locale.c" />
<ClCompile Include="..\src\drive.c" />
<ClCompile Include="..\src\format.c" />
@ -395,7 +402,6 @@
<ClCompile Include="..\src\parser.c" />
<ClCompile Include="..\src\pki.c" />
<ClCompile Include="..\src\process.c" />
<ClCompile Include="..\src\re.c" />
<ClCompile Include="..\src\rufus.c" />
<ClCompile Include="..\src\hash.c" />
<ClCompile Include="..\src\smart.c" />
@ -407,21 +413,25 @@
<ClCompile Include="..\src\ui.c" />
<ClCompile Include="..\src\vhd.c" />
<ClCompile Include="..\src\wue.c" />
<ClCompile Include="..\src\xml.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\res\dbx\dbx_info.h" />
<ClInclude Include="..\res\grub2\grub2_version.h" />
<ClInclude Include="..\res\grub\grub_version.h" />
<ClInclude Include="..\src\badblocks.h" />
<ClInclude Include="..\src\bled\bled.h" />
<ClInclude Include="..\src\cpu.h" />
<ClInclude Include="..\src\cregex.h" />
<ClInclude Include="..\src\darkmode.h" />
<ClInclude Include="..\src\drive.h" />
<ClInclude Include="..\src\efi.h" />
<ClInclude Include="..\src\format.h" />
<ClInclude Include="..\src\gpt_types.h" />
<ClInclude Include="..\src\hdd_vs_ufd.h" />
<ClInclude Include="..\src\mbr_types.h" />
<ClInclude Include="..\src\missing.h" />
<ClInclude Include="..\src\process.h" />
<ClInclude Include="..\src\re.h" />
<ClInclude Include="..\src\msvc-missing\unistd.h" />
<ClInclude Include="..\src\ntdll.h" />
<ClInclude Include="..\src\settings.h" />
<ClInclude Include="..\src\libcdio\cdio\cdio.h" />
<ClInclude Include="..\src\libcdio\cdio\iso9660.h" />
@ -442,6 +452,7 @@
<ClInclude Include="..\src\vhd.h" />
<ClInclude Include="..\src\winio.h" />
<ClInclude Include="..\src\wue.h" />
<ClInclude Include="..\src\xml.h" />
</ItemGroup>
<ItemGroup>
<Manifest Include="..\src\rufus.manifest" />
@ -485,6 +496,9 @@
<ProjectReference Include="ext2fs.vcxproj">
<Project>{b01f5886-2b39-4b66-b65c-6427135b6a02}</Project>
</ProjectReference>
<ProjectReference Include="wimlib.vcxproj">
<Project>{633cfc82-e01b-4777-bde4-dc0739804332}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">

View File

@ -87,13 +87,22 @@
<ClCompile Include="..\src\format_fat32.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\re.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wue.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\cpu.c">
<ClCompile Include="..\src\xml.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\darkmode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\cregex_compile.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\cregex_parse.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\cregex_vm.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
@ -161,7 +170,7 @@
<ClInclude Include="..\src\db.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\process.h">
<ClInclude Include="..\src\ntdll.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\ui.h">
@ -179,9 +188,6 @@
<ClInclude Include="..\src\winio.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\re.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\res\grub\grub_version.h">
<Filter>Header Files</Filter>
</ClInclude>
@ -194,7 +200,22 @@
<ClInclude Include="..\src\vhd.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\cpu.h">
<ClInclude Include="..\src\efi.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\res\dbx\dbx_info.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\msvc-missing\unistd.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\xml.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\darkmode.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\cregex.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>

416
.vs/wimlib.vcxproj Normal file
View File

@ -0,0 +1,416 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\wimlib\avl_tree.c" />
<ClCompile Include="..\src\wimlib\blob_table.c" />
<ClCompile Include="..\src\wimlib\compress.c" />
<ClCompile Include="..\src\wimlib\compress_common.c" />
<ClCompile Include="..\src\wimlib\compress_parallel.c" />
<ClCompile Include="..\src\wimlib\compress_serial.c" />
<ClCompile Include="..\src\wimlib\cpu_features.c" />
<ClCompile Include="..\src\wimlib\decompress.c" />
<ClCompile Include="..\src\wimlib\decompress_common.c" />
<ClCompile Include="..\src\wimlib\dentry.c" />
<ClCompile Include="..\src\wimlib\divsufsort.c" />
<ClCompile Include="..\src\wimlib\encoding.c" />
<ClCompile Include="..\src\wimlib\error.c" />
<ClCompile Include="..\src\wimlib\export_image.c" />
<ClCompile Include="..\src\wimlib\extract.c" />
<ClCompile Include="..\src\wimlib\file_io.c" />
<ClCompile Include="..\src\wimlib\header.c" />
<ClCompile Include="..\src\wimlib\inode.c" />
<ClCompile Include="..\src\wimlib\inode_fixup.c" />
<ClCompile Include="..\src\wimlib\inode_table.c" />
<ClCompile Include="..\src\wimlib\integrity.c" />
<ClCompile Include="..\src\wimlib\iterate_dir.c" />
<ClCompile Include="..\src\wimlib\lcpit_matchfinder.c" />
<ClCompile Include="..\src\wimlib\lzms_common.c" />
<ClCompile Include="..\src\wimlib\lzms_compress.c" />
<ClCompile Include="..\src\wimlib\lzms_decompress.c" />
<ClCompile Include="..\src\wimlib\lzx_common.c" />
<ClCompile Include="..\src\wimlib\lzx_compress.c" />
<ClCompile Include="..\src\wimlib\lzx_decompress.c" />
<ClCompile Include="..\src\wimlib\metadata_resource.c" />
<ClCompile Include="..\src\wimlib\pathlist.c" />
<ClCompile Include="..\src\wimlib\paths.c" />
<ClCompile Include="..\src\wimlib\pattern.c" />
<ClCompile Include="..\src\wimlib\progress.c" />
<ClCompile Include="..\src\wimlib\registry.c" />
<ClCompile Include="..\src\wimlib\reparse.c" />
<ClCompile Include="..\src\wimlib\resource.c" />
<ClCompile Include="..\src\wimlib\scan.c" />
<ClCompile Include="..\src\wimlib\security.c" />
<ClCompile Include="..\src\wimlib\sha1.c" />
<ClCompile Include="..\src\wimlib\solid.c" />
<ClCompile Include="..\src\wimlib\split.c" />
<ClCompile Include="..\src\wimlib\tagged_items.c" />
<ClCompile Include="..\src\wimlib\textfile.c" />
<ClCompile Include="..\src\wimlib\threads.c" />
<ClCompile Include="..\src\wimlib\timestamp.c" />
<ClCompile Include="..\src\wimlib\update_image.c" />
<ClCompile Include="..\src\wimlib\util.c" />
<ClCompile Include="..\src\wimlib\wim.c" />
<ClCompile Include="..\src\wimlib\wimboot.c" />
<ClCompile Include="..\src\wimlib\win32_apply.c" />
<ClCompile Include="..\src\wimlib\win32_capture.c" />
<ClCompile Include="..\src\wimlib\win32_common.c" />
<ClCompile Include="..\src\wimlib\win32_replacements.c" />
<ClCompile Include="..\src\wimlib\win32_vss.c" />
<ClCompile Include="..\src\wimlib\write.c" />
<ClCompile Include="..\src\wimlib\xml.c" />
<ClCompile Include="..\src\wimlib\xmlproc.c" />
<ClCompile Include="..\src\wimlib\xml_windows.c" />
<ClCompile Include="..\src\wimlib\xpress_compress.c" />
<ClCompile Include="..\src\wimlib\xpress_decompress.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\wimlib\config.h" />
<ClInclude Include="..\src\wimlib\wimlib.h" />
<ClInclude Include="..\src\wimlib\wimlib\alloca.h" />
<ClInclude Include="..\src\wimlib\wimlib\apply.h" />
<ClInclude Include="..\src\wimlib\wimlib\assert.h" />
<ClInclude Include="..\src\wimlib\wimlib\avl_tree.h" />
<ClInclude Include="..\src\wimlib\wimlib\bitops.h" />
<ClInclude Include="..\src\wimlib\wimlib\blob_table.h" />
<ClInclude Include="..\src\wimlib\wimlib\bt_matchfinder.h" />
<ClInclude Include="..\src\wimlib\wimlib\case.h" />
<ClInclude Include="..\src\wimlib\wimlib\chunk_compressor.h" />
<ClInclude Include="..\src\wimlib\wimlib\compiler.h" />
<ClInclude Include="..\src\wimlib\wimlib\compressor_ops.h" />
<ClInclude Include="..\src\wimlib\wimlib\compress_common.h" />
<ClInclude Include="..\src\wimlib\wimlib\cpu_features.h" />
<ClInclude Include="..\src\wimlib\wimlib\decompressor_ops.h" />
<ClInclude Include="..\src\wimlib\wimlib\decompress_common.h" />
<ClInclude Include="..\src\wimlib\wimlib\dentry.h" />
<ClInclude Include="..\src\wimlib\wimlib\divsufsort.h" />
<ClInclude Include="..\src\wimlib\wimlib\encoding.h" />
<ClInclude Include="..\src\wimlib\wimlib\endianness.h" />
<ClInclude Include="..\src\wimlib\wimlib\error.h" />
<ClInclude Include="..\src\wimlib\wimlib\file_io.h" />
<ClInclude Include="..\src\wimlib\wimlib\glob.h" />
<ClInclude Include="..\src\wimlib\wimlib\guid.h" />
<ClInclude Include="..\src\wimlib\wimlib\hc_matchfinder.h" />
<ClInclude Include="..\src\wimlib\wimlib\header.h" />
<ClInclude Include="..\src\wimlib\wimlib\inode.h" />
<ClInclude Include="..\src\wimlib\wimlib\inode_table.h" />
<ClInclude Include="..\src\wimlib\wimlib\integrity.h" />
<ClInclude Include="..\src\wimlib\wimlib\lcpit_matchfinder.h" />
<ClInclude Include="..\src\wimlib\wimlib\list.h" />
<ClInclude Include="..\src\wimlib\wimlib\lzms_common.h" />
<ClInclude Include="..\src\wimlib\wimlib\lzms_constants.h" />
<ClInclude Include="..\src\wimlib\wimlib\lzx_common.h" />
<ClInclude Include="..\src\wimlib\wimlib\lzx_constants.h" />
<ClInclude Include="..\src\wimlib\wimlib\matchfinder_common.h" />
<ClInclude Include="..\src\wimlib\wimlib\metadata.h" />
<ClInclude Include="..\src\wimlib\wimlib\ntfs_3g.h" />
<ClInclude Include="..\src\wimlib\wimlib\object_id.h" />
<ClInclude Include="..\src\wimlib\wimlib\pathlist.h" />
<ClInclude Include="..\src\wimlib\wimlib\paths.h" />
<ClInclude Include="..\src\wimlib\wimlib\pattern.h" />
<ClInclude Include="..\src\wimlib\wimlib\progress.h" />
<ClInclude Include="..\src\wimlib\wimlib\registry.h" />
<ClInclude Include="..\src\wimlib\wimlib\reparse.h" />
<ClInclude Include="..\src\wimlib\wimlib\resource.h" />
<ClInclude Include="..\src\wimlib\wimlib\scan.h" />
<ClInclude Include="..\src\wimlib\wimlib\security.h" />
<ClInclude Include="..\src\wimlib\wimlib\security_descriptor.h" />
<ClInclude Include="..\src\wimlib\wimlib\sha1.h" />
<ClInclude Include="..\src\wimlib\wimlib\solid.h" />
<ClInclude Include="..\src\wimlib\wimlib\tagged_items.h" />
<ClInclude Include="..\src\wimlib\wimlib\test_support.h" />
<ClInclude Include="..\src\wimlib\wimlib\textfile.h" />
<ClInclude Include="..\src\wimlib\wimlib\threads.h" />
<ClInclude Include="..\src\wimlib\wimlib\timestamp.h" />
<ClInclude Include="..\src\wimlib\wimlib\types.h" />
<ClInclude Include="..\src\wimlib\wimlib\unaligned.h" />
<ClInclude Include="..\src\wimlib\wimlib\unix_data.h" />
<ClInclude Include="..\src\wimlib\wimlib\util.h" />
<ClInclude Include="..\src\wimlib\wimlib\wim.h" />
<ClInclude Include="..\src\wimlib\wimlib\wimboot.h" />
<ClInclude Include="..\src\wimlib\wimlib\win32.h" />
<ClInclude Include="..\src\wimlib\wimlib\win32_common.h" />
<ClInclude Include="..\src\wimlib\wimlib\win32_vss.h" />
<ClInclude Include="..\src\wimlib\wimlib\wof.h" />
<ClInclude Include="..\src\wimlib\wimlib\write.h" />
<ClInclude Include="..\src\wimlib\wimlib\xattr.h" />
<ClInclude Include="..\src\wimlib\wimlib\xml.h" />
<ClInclude Include="..\src\wimlib\wimlib\xmlproc.h" />
<ClInclude Include="..\src\wimlib\wimlib\xml_windows.h" />
<ClInclude Include="..\src\wimlib\wimlib\xpress_constants.h" />
<ClInclude Include="..\src\wimlib\wimlib_tchar.h" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{633CFC82-E01B-4777-BDE4-DC0739804332}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>wimlib</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">$(SolutionDir)arm\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">$(SolutionDir)arm\$(Configuration)\$(ProjectName)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">$(SolutionDir)arm\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">$(SolutionDir)arm\$(Configuration)\$(ProjectName)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">$(SolutionDir)arm64\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">$(SolutionDir)arm64\$(Configuration)\$(ProjectName)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">$(SolutionDir)arm64\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">$(SolutionDir)arm64\$(Configuration)\$(ProjectName)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)x86\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)x86\$(Configuration)\$(ProjectName)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)x86\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)x86\$(Configuration)\$(ProjectName)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)x64\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)x64\$(Configuration)\$(ProjectName)\</IntDir>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)x64\$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)x64\$(Configuration)\$(ProjectName)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</LinkIncremental>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\src;..\src\wimlib;..\src\msvc-missing;..\src\libcdio;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<DisableSpecificWarnings>4018;4146;4267;4244;4334;4789;4996;6201;6239;6246;6255;6262;6297;6326;28252;28253</DisableSpecificWarnings>
<CompileAs>CompileAsC</CompileAs>
<AdditionalOptions>/std:clatest</AdditionalOptions>
<PreprocessorDefinitions>_RUFUS;HAVE_CONFIG_H;UNICODE;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;__SSE2__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<Lib>
<TargetMachine>MachineX86</TargetMachine>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\src;..\src\wimlib;..\src\msvc-missing;..\src\libcdio;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalOptions>/std:clatest</AdditionalOptions>
<DisableSpecificWarnings>4018;4146;4267;4244;4334;4789;4996;6201;6239;6246;6255;6262;6297;6326;28252;28253</DisableSpecificWarnings>
<PreprocessorDefinitions>_RUFUS;HAVE_CONFIG_H;UNICODE;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<Lib />
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\src;..\src\wimlib;..\src\msvc-missing;..\src\libcdio;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalOptions>/std:clatest</AdditionalOptions>
<DisableSpecificWarnings>4018;4146;4267;4244;4334;4789;4996;6201;6239;6246;6255;6262;6297;6326;28252;28253</DisableSpecificWarnings>
<PreprocessorDefinitions>_RUFUS;HAVE_CONFIG_H;UNICODE;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<Lib />
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>..\src;..\src\wimlib;..\src\msvc-missing;..\src\libcdio;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<DisableSpecificWarnings>4018;4146;4267;4244;4334;4789;4996;6201;6239;6246;6255;6262;6297;6326;28252;28253</DisableSpecificWarnings>
<CompileAs>CompileAsC</CompileAs>
<AdditionalOptions>/std:clatest</AdditionalOptions>
<StringPooling>true</StringPooling>
<PreprocessorDefinitions>_RUFUS;HAVE_CONFIG_H;UNICODE;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;__SSE2__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Lib>
<TargetMachine>MachineX86</TargetMachine>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>..\src;..\src\wimlib;..\src\msvc-missing;..\src\libcdio;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalOptions>/std:clatest</AdditionalOptions>
<DisableSpecificWarnings>4018;4146;4267;4244;4334;4789;4996;6201;6239;6246;6255;6262;6297;6326;28252;28253</DisableSpecificWarnings>
<StringPooling>true</StringPooling>
<PreprocessorDefinitions>_RUFUS;HAVE_CONFIG_H;UNICODE;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Lib />
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>..\src;..\src\wimlib;..\src\msvc-missing;..\src\libcdio;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<AdditionalOptions>/std:clatest</AdditionalOptions>
<DisableSpecificWarnings>4018;4146;4267;4244;4334;4789;4996;6201;6239;6246;6255;6262;6297;6326;28252;28253</DisableSpecificWarnings>
<StringPooling>true</StringPooling>
<PreprocessorDefinitions>_RUFUS;HAVE_CONFIG_H;UNICODE;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Lib />
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\src;..\src\wimlib;..\src\msvc-missing;..\src\libcdio;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<DisableSpecificWarnings>4018;4146;4267;4244;4334;4789;4996;6201;6239;6246;6255;6262;6297;6326;28252;28253</DisableSpecificWarnings>
<CompileAs>CompileAsC</CompileAs>
<AdditionalOptions>/std:clatest</AdditionalOptions>
<PreprocessorDefinitions>_RUFUS;HAVE_CONFIG_H;UNICODE;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;__SSE2__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<Lib>
<TargetMachine>MachineX64</TargetMachine>
</Lib>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<AdditionalIncludeDirectories>..\src;..\src\wimlib;..\src\msvc-missing;..\src\libcdio;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<DisableSpecificWarnings>4018;4146;4267;4244;4334;4789;4996;6201;6239;6246;6255;6262;6297;6326;28252;28253</DisableSpecificWarnings>
<CompileAs>CompileAsC</CompileAs>
<AdditionalOptions>/std:clatest</AdditionalOptions>
<StringPooling>true</StringPooling>
<PreprocessorDefinitions>_RUFUS;HAVE_CONFIG_H;UNICODE;_OFF_T_DEFINED;_off_t=__int64;off_t=_off_t;_FILE_OFFSET_BITS=64;__SSE2__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
<Lib>
<TargetMachine>MachineX64</TargetMachine>
</Lib>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

422
.vs/wimlib.vcxproj.filters Normal file
View File

@ -0,0 +1,422 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\wimlib\wim.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\extract.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\xml.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\xmlproc.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\util.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\error.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\win32_replacements.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\win32_common.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\blob_table.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\encoding.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\cpu_features.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\threads.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\win32_apply.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\win32_vss.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\header.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\metadata_resource.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\resource.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\security.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\decompress.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\decompress_common.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\sha1.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\xpress_decompress.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\write.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\file_io.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\progress.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\integrity.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\dentry.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\export_image.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\inode.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\iterate_dir.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\avl_tree.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\win32_capture.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\timestamp.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\pathlist.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\paths.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\scan.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\lzms_common.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\lzms_decompress.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\lzx_common.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\lzx_decompress.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\solid.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\reparse.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\compress_parallel.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\compress_serial.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\compress.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\xpress_compress.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\lzms_compress.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\lzx_compress.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\compress_common.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\pattern.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\lcpit_matchfinder.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\textfile.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\divsufsort.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\inode_table.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\inode_fixup.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\tagged_items.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\wimboot.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\update_image.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\xml_windows.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\registry.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\wimlib\split.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\wimlib\config.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\assert.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\blob_table.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\cpu_features.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\dentry.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\encoding.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\file_io.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\integrity.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\metadata.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\security.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\threads.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\wim.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\win32.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\xml.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\list.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\resource.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\sha1.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\types.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\util.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib_tchar.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\compiler.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\avl_tree.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\case.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\inode.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\error.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\guid.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\header.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\apply.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\progress.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\endianness.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\object_id.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\pathlist.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\paths.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\pattern.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\reparse.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\tagged_items.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\unix_data.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\xattr.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\timestamp.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\write.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\xmlproc.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\test_support.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\glob.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\win32_common.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\win32_vss.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\bitops.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\ntfs_3g.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\scan.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\unaligned.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\inode_table.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\textfile.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\wimboot.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\wof.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\alloca.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\decompress_common.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\decompressor_ops.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\xpress_constants.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\chunk_compressor.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\solid.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\lzms_common.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\lzms_constants.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\lzx_common.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\lzx_constants.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\compress_common.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\compressor_ops.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\hc_matchfinder.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\matchfinder_common.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\bt_matchfinder.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\lcpit_matchfinder.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\divsufsort.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\xml_windows.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\registry.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\src\wimlib\wimlib\security_descriptor.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -1,3 +1,67 @@
o Version 4.12 (2026.01.30)
Filter out the new Bitdefender VHDs
Filter disallowed characters in local account names
Improve Microsoft Dev Drive detection (courtesy of Martin Kuschnik)
Improve the pre-formatting partition cleanup code
Improve error reporting on ISO extraction issues
Improve detection of drives with long hardware IDs (typically SSDs)
Improve conflicting process reporting
Improve support for Nutanix and umbrelOS ISOs
Fix a TOCTOU vulnerability in Fido script execution (CVE-2026-2398, reported by @independent-arg)
Fix replacement vulnerabilities for diskcopy.dll and oscdimg.exe
Fix FFU image creation being erroneously invocated, when trying to save an ISO image
Fix saving of ISO images to paths that contain spaces
Update UEFI:NTFS and UEFI DBXs to latest
o Version 4.11 (2025.10.02)
Add a cheat mode to toggle between Light and Dark mode
Improve WUE option text relating to the CA 2023 option
Update Linux SBAT / Microsoft SVN Secure Boot revocation values to latest
Fix some GRUB/Syslinux download dialogs showing only the 'Close' button
Fix an assert being triggered when using the WUE CA 2023 option on its own
Fix an application crash on systems that have a failed dynamic disk
o Version 4.10 (2025.09.24)
Add Dark Mode support (courtesy of @ozone10)
Add support for creating Windows CA 2023 compatible media (requires a Windows 11 25H2 ISO)
Add support for saving an existing drive to ISO (UDF only)
Improve error reporting when saving to VHD/VHDX (with thanks to @Kazkans)
Improve persistence support for Linux Mint
Fix UEFI DBX updates being reported in some timezones, even when there are none
Fix a situation where no file system can be selected in ISO mode
Fix a crash when trying to process Windows ISOs with very long paths
o Version 4.9 (2025.06.15) [BUGFIX RELEASE]
Fix downloads from https://rufus.ie no longer working due to recent GitHub server changes
Fix unofficial Windows ISOs, with single index WIMs, not presenting the WUE dialog
o Version 4.8 (2025.06.11)
Switch to wimlib for all WIM image processing:
- Greatly speeds up image analysis when opening Windows ISOs
- Can speed up Windows To Go drive creation (But won't do miracles if you have a crap drive)
- Might help with Parallels limitations on Mac (But Rufus on Parallels is still UNSUPPORTED)
- Enables the splitting of >4GB files with Alt-E (But still WAY SLOWER than using UEFI:NTFS)
Switch to using Visual Studio binaries everywhere, due to MinGW DLL delay-loading limitations
Add more exceptions for Linux ISOs that restrict themselves to DD mode (Nobara, openSUSE, ...)
Improve reporting of UEFI bootloaders in the log, with info on the Secure Boot status
Fix an issue with size limitations when writing an uncompressed VHD back to the same drive
Fix a crash when opening the log with the 32-bit MinGW compiled version
Fix commandline parameters not being forwarded to original Windows setup.exe
o Version 4.7 (2025.04.09)
Add a mechanism to detect and download updated DBXs from the official UEFI repository
Add zstd compression support for disk images
Add a new exclusion feature in the settings, to ignore disks with a specific GPT GUID
Improve detection for compressed VHD images that are too large to fit the target drive
Fix commandline hogger not being deleted when running Rufus from a different directory
Fix FAT filenames from embedded images being potentially truncated on image extraction
Fix a side-loading vulnerability [CVE-2025-26624] with cfgmgr32.dll (with thanks to @EmperialX)
Fix UI memory leaks (courtesy of @ozone10)
Fall back to user/system default locale when getting error description (courtesy of @Wack0)
Don't run the commandline hogger on POSIX shells
Drop ARM 32-bit builds (Note that ARM 64-bit builds are *NOT* affected by this)
Update FreeDOS and Grub4DOS to latest
o Version 4.6 (2024.10.21)
Add a new setup.exe wrapper to bypass Windows 11 24H2 in-place upgrade restrictions
Add TimeZone to regional options replication

View File

@ -3,6 +3,9 @@ TARGET = rufus
TAGVER = $(shell git log --oneline | wc -l)
SEDCMD = s/^\([ \t]*\)Version="\([0-9]*\)\.\([0-9]*\)\.[0-9]*\.\([0-9]*\)"\(.*\)/\1Version="\2.\3.@@TAGVER@@.\4"\5/
upx: all
@upx --lzma --best src/$(TARGET)$(EXEEXT)
# This step produces the UPX compressed and signed releases that are made available for public download
# NB: UPX v3.09 or later is needed for LZMA compression (http://upx.sourceforge.net/)
release: all

View File

@ -502,6 +502,9 @@ uninstall-am:
pdf-am ps ps-am tags tags-am uninstall uninstall-am
upx: all
@upx --lzma --best src/$(TARGET)$(EXEEXT)
# This step produces the UPX compressed and signed releases that are made available for public download
# NB: UPX v3.09 or later is needed for LZMA compression (http://upx.sourceforge.net/)
release: all

View File

@ -1,7 +1,9 @@
# Reporting a Vulnerability
# Reporting a security vulnerability
To report a vulnerability for Rufus, please e-mail support@akeo.ie.
To report a **security** vulnerability for Rufus (i.e. an issue that you believe could lead to malicious actors being able to exploit the Rufus application), please e-mail support@akeo.ie.
If you find a vulnerability, we will ask you to respect [responsible disclosure](https://en.wikipedia.org/wiki/Responsible_disclosure) practices.
Please do **NOT** use the e-mail above if you have a regular issue, such as a problem creating or using a bootable drive. Instead go back to https://github.com/pbatard/rufus/issues and create an issue using the regular *Issue Report* template.
In return, we will endeavour to respond to vulnerability reports within 48 hours.
For any security vulnerability report, we kindly ask you to respect [responsible disclosure](https://en.wikipedia.org/wiki/Responsible_disclosure) practices.
In return, we will endeavour to respond to security vulnerability reports within 48 hours.

View File

@ -1,5 +1,4 @@
#!/bin/sh
rm -f rufus*.exe
./configure --disable-debug "$@"
make -j12 clean
make -j12 release

29
configure vendored
View File

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.71 for rufus 4.6.
# Generated by GNU Autoconf 2.71 for rufus 4.12.
#
# Report bugs to <https://github.com/pbatard/rufus/issues>.
#
@ -611,8 +611,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='rufus'
PACKAGE_TARNAME='rufus'
PACKAGE_VERSION='4.6'
PACKAGE_STRING='rufus 4.6'
PACKAGE_VERSION='4.12'
PACKAGE_STRING='rufus 4.12'
PACKAGE_BUGREPORT='https://github.com/pbatard/rufus/issues'
PACKAGE_URL='https://rufus.ie'
@ -1269,7 +1269,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures rufus 4.6 to adapt to many kinds of systems.
\`configure' configures rufus 4.12 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1336,7 +1336,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of rufus 4.6:";;
short | recursive ) echo "Configuration of rufus 4.12:";;
esac
cat <<\_ACEOF
@ -1428,7 +1428,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
rufus configure 4.6
rufus configure 4.12
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@ -1504,7 +1504,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by rufus $as_me 4.6, which was
It was created by rufus $as_me 4.12, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@ -2767,7 +2767,7 @@ fi
# Define the identity of the package.
PACKAGE='rufus'
VERSION='4.6'
VERSION='4.12'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@ -4702,7 +4702,7 @@ fi
printf "%s\n" "enabling Large File Support (ISO support)" >&6; }
AM_CFLAGS="$AM_CFLAGS -D_FILE_OFFSET_BITS=64 -D_OFF_T_ -D_off_t=off64_t -Doff_t=off64_t -Doff32_t=long"
# check for -Wno-pointer-sign compiler support (GCC >= 4)
# Check for -Wno-pointer-sign compiler support (GCC >= 4)
saved_CFLAGS="${CFLAGS}"
CFLAGS="$CFLAGS -Wno-pointer-sign"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@ -4725,7 +4725,9 @@ fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
CFLAGS="${saved_CFLAGS}"
AM_CFLAGS="$AM_CFLAGS -DUNICODE -D_UNICODE -UNDEBUG -DCOBJMACROS -D__USE_MINGW_ANSI_STDIO=0 -std=gnu99 -Wshadow -Wall -Wformat-security -Wundef -Wunused -Wstrict-prototypes -Wno-restrict -Wno-array-bounds -Werror-implicit-function-declaration -Wbidi-chars=none $nopointersign_cflags"
# NB: The DECLSPEC_IMPORT redefinition below is a temporary(?) workaround for MinGW32 delay-loading
# See https://github.com/pbatard/rufus/pull/2513 as well as https://sourceware.org/bugzilla/show_bug.cgi?id=14339
AM_CFLAGS="$AM_CFLAGS -DUNICODE -D_UNICODE -UNDEBUG -DCOBJMACROS -D__USE_MINGW_ANSI_STDIO=0 -UDECLSPEC_IMPORT -DDECLSPEC_IMPORT=__attribute__\(\(visibility\(\\\"hidden\\\"\)\)\) -std=gnu11 -Wshadow -Wall -Wformat-security -Wundef -Wunused -Wstrict-prototypes -Wno-restrict -Wno-array-bounds -Werror-implicit-function-declaration -Wbidi-chars=none $nopointersign_cflags"
@ -4758,6 +4760,8 @@ ac_config_files="$ac_config_files src/syslinux/libinstaller/Makefile"
ac_config_files="$ac_config_files src/syslinux/win/Makefile"
ac_config_files="$ac_config_files src/wimlib/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
@ -5309,7 +5313,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by rufus $as_me 4.6, which was
This file was extended by rufus $as_me 4.12, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -5365,7 +5369,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
rufus config.status 4.6
rufus config.status 4.12
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
@ -5491,6 +5495,7 @@ do
"src/syslinux/libfat/Makefile") CONFIG_FILES="$CONFIG_FILES src/syslinux/libfat/Makefile" ;;
"src/syslinux/libinstaller/Makefile") CONFIG_FILES="$CONFIG_FILES src/syslinux/libinstaller/Makefile" ;;
"src/syslinux/win/Makefile") CONFIG_FILES="$CONFIG_FILES src/syslinux/win/Makefile" ;;
"src/wimlib/Makefile") CONFIG_FILES="$CONFIG_FILES src/wimlib/Makefile" ;;
*) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
esac

View File

@ -1,4 +1,4 @@
AC_INIT([rufus], [4.6], [https://github.com/pbatard/rufus/issues], [rufus], [https://rufus.ie])
AC_INIT([rufus], [4.12], [https://github.com/pbatard/rufus/issues], [rufus], [https://rufus.ie])
AM_INIT_AUTOMAKE([-Wno-portability foreign no-dist no-dependencies])
AC_CONFIG_SRCDIR([src/rufus.c])
AC_CONFIG_MACRO_DIR([m4])
@ -57,14 +57,16 @@ fi
AC_MSG_RESULT([enabling Large File Support (ISO support)])
AM_CFLAGS="$AM_CFLAGS -D_FILE_OFFSET_BITS=64 -D_OFF_T_ -D_off_t=off64_t -Doff_t=off64_t -Doff32_t=long"
# check for -Wno-pointer-sign compiler support (GCC >= 4)
# Check for -Wno-pointer-sign compiler support (GCC >= 4)
saved_CFLAGS="${CFLAGS}"
CFLAGS="$CFLAGS -Wno-pointer-sign"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],
[nopointersign_cflags="-Wno-pointer-sign"], [nopointersign_cflags=""])
CFLAGS="${saved_CFLAGS}"
AM_CFLAGS="$AM_CFLAGS -DUNICODE -D_UNICODE -UNDEBUG -DCOBJMACROS -D__USE_MINGW_ANSI_STDIO=0 -std=gnu99 -Wshadow -Wall -Wformat-security -Wundef -Wunused -Wstrict-prototypes -Wno-restrict -Wno-array-bounds -Werror-implicit-function-declaration -Wbidi-chars=none $nopointersign_cflags"
# NB: The DECLSPEC_IMPORT redefinition below is a temporary(?) workaround for MinGW32 delay-loading
# See https://github.com/pbatard/rufus/pull/2513 as well as https://sourceware.org/bugzilla/show_bug.cgi?id=14339
AM_CFLAGS="$AM_CFLAGS -DUNICODE -D_UNICODE -UNDEBUG -DCOBJMACROS -D__USE_MINGW_ANSI_STDIO=0 -UDECLSPEC_IMPORT -DDECLSPEC_IMPORT=__attribute__\(\(visibility\(\\\"hidden\\\"\)\)\) -std=gnu11 -Wshadow -Wall -Wformat-security -Wundef -Wunused -Wstrict-prototypes -Wno-restrict -Wno-array-bounds -Werror-implicit-function-declaration -Wbidi-chars=none $nopointersign_cflags"
AC_SUBST([VISIBILITY_CFLAGS])
AC_SUBST([AM_CFLAGS])
@ -84,4 +86,5 @@ AC_CONFIG_FILES([src/ms-sys/Makefile])
AC_CONFIG_FILES([src/syslinux/libfat/Makefile])
AC_CONFIG_FILES([src/syslinux/libinstaller/Makefile])
AC_CONFIG_FILES([src/syslinux/win/Makefile])
AC_CONFIG_FILES([src/wimlib/Makefile])
AC_OUTPUT

View File

@ -0,0 +1,62 @@
// Compile with: gcc -lversion -o get_pe_info get_pe_info.c
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
VS_FIXEDFILEINFO *file_info;
DWORD handle, size;
WORD lang, codepage;
UINT len;
void *buffer = NULL, *translation, *version_info;
char sub_block[50];
int ret = 1;
if (argc != 3 || argv[1][0] != '-') {
printf("Usage: %s [-i|-v] <path_to_executable>\n", argv[0]);
goto out;
}
size = GetFileVersionInfoSizeA(argv[2], &handle);
if (size == 0) {
fprintf(stderr, "Failed to get version info size.\n");
goto out;
}
buffer = malloc(size);
if (buffer == NULL)
goto out;
if (!GetFileVersionInfoA(argv[2], handle, size, buffer)) {
fprintf(stderr, "Failed to get version info.\n");
goto out;
}
if (argv[1][1] == 'i') {
if (!VerQueryValueA(buffer, "\\VarFileInfo\\Translation", &translation, &len) || len < 4) {
fprintf(stderr, "Failed to retrieve language and codepage information.\n");
goto out;
}
lang = *(WORD*)translation;
codepage = *((WORD*)translation + 1);
snprintf(sub_block, sizeof(sub_block), "\\StringFileInfo\\%04x%04x\\InternalName", lang, codepage);
if (!VerQueryValueA(buffer, sub_block, &version_info, &len)) {
fprintf(stderr, "Failed to retrieve Internal Name.\n");
goto out;
}
printf("%s\n", (char*)version_info);
} else {
if (!VerQueryValueA(buffer, "\\", (LPVOID*)&file_info, &len) || len < sizeof(VS_FIXEDFILEINFO)) {
fprintf(stderr, "Failed to retrieve file info.\n");
goto out;
}
printf("%d.%d.%d.%d\n", HIWORD(file_info->dwFileVersionMS), LOWORD(file_info->dwFileVersionMS),
HIWORD(file_info->dwFileVersionLS), LOWORD(file_info->dwFileVersionLS));
}
ret = 0;
out:
free(buffer);
return ret;
}

View File

@ -1,4 +1,4 @@
"Field","ID","Type (Type)","default","en-us","ar-sa","bg-bg","zh-cn","zh-tw","hr-hr","cs-cz","da-dk","nl-nl","fi-fi","fr-fr","de-de","el-gr","he-il","hu-hu","id-id","it-it","ja-jp","ko-kr","lv-lv","lt-lt","ms-my","nb-no","fa-ir","pl-pl","pt-br","pt-pt","ro-ro","ru-ru","sr-latn-rs","sk-sk","sl-si","es-es","sv-se","th-th","tr-tr","uk-ua","vi-vn"
"Field","ID","Type (Type)","default","en-us","ar-sa","bg-bg","zh-cn","zh-tw","hr-hr","cs-cz","da-dk","nl-nl","fi-fi","fr-fr","de-de","el-gr","he-il","hu-hu","id-id","it-it","ja-jp","ko-kr","lv-lv","lt-lt","ms-my","nb-no","fa-ir","pl-pl","pt-br","pt-pt","ro-ro","ru-ru","sr-latn-rs","sk-sk","sl-si","es-es","sv-se","th-th","tr-tr","uk-ua","vi-vn"
"Description","2","Text","","Rufus is a utility that helps format and create bootable USB flash drives, such as USB keys/pendrives, memory sticks, etc.
• Official site: https://rufus.ie
• Source Code: https://github.com/pbatard/rufus
@ -32,7 +32,7 @@
• Muutosloki: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt","Rufus est un utilitaire permettant de formater et de créer des média USB amorçables, tels que clés USB, mémoire flash, etc.
• Site officiel : https://rufus.ie
• Code source: https://github.com/pbatard/rufus
• ChangeLog: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt","Rufus ist ein Werkzeug, welches dabei hilft, bootfähige USB-Laufwerke zu erstellen, wie beispielweise USB-Keys, Speichersticks usw.
• ChangeLog: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt","Rufus ist ein Werkzeug, das beim Formatieren und Erstellen bootfähiger USB-Flash-Laufwerke wie USB-Sticks, Speichersticks usw. hilft.
• Offizielle Website: https://rufus.ie
• Quellcode: https://github.com/pbatard/rufus
• Änderungsprotokoll: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt","Το Rufus είναι ένα βοηθητικό πρόγραμμα που βοηθά στη διαμόρφωση και τη δημιουργία μονάδων flash USB με δυνατότητα εκκίνησης, όπως κλειδιά USB/pendrives,κάρτες μνήμης κ.λπ.
@ -110,25 +110,30 @@
• Sürüm Notları https://github.com/pbatard/rufus/blob/master/ChangeLog.txt","Rufus це утиліта, яка допомагає форматувати та створювати завантажувальні флешки, картки пам'яті, тощо.
• Офіційний сайт: https://rufus.ie
• Сирцевий код: https://github.com/pbatard/rufus
• Список змін: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt","Rufus là một tiện ích giúp định dạng và tạo khả năng khởi động cho USB, chẳng hạn như thẻ USB/đĩa di động, thẻ nhớ, vv.
• Список змін: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt","Rufus là một tiện ích giúp định dạng và tạo khả năng khởi động cho các thiết bị USB, ví dụ như thẻ USB/đĩa di động, thẻ nhớ, v.v...
• Trang web chính thức: https://rufus.ie
• Mã nguồn: https://github.com/pbatard/rufus
• Nhật ký thay đổi: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt"
"ReleaseNotes","3","Text","• Add a new setup.exe wrapper to bypass Windows 11 24H2 in-place upgrade restrictions
• Add TimeZone to regional options replication
• Set local account passwords to not expire by default
• Fix an error when trying to write compressed VHD images
• Fix an error when invoking Rufus from the PowerShell commandline
• Improve revoked UEFI bootloaders check to support Linux SBAT, Windows SVN and cert DBX
• Improve support for ReactOS boot media
",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"ReleaseNotes","3","Text","• Filter out the new Bitdefender VHDs
• Filter disallowed characters in local account names
• Improve Microsoft Dev Drive detection (courtesy of Martin Kuschnik)
• Improve the pre-formatting partition cleanup code
• Improve error reporting on ISO extraction issues
• Improve detection of drives with long hardware IDs (typically SSDs)
• Improve conflicting process reporting
• Improve support for Nutanix and umbrelOS ISOs
• Fix a TOCTOU vulnerability in Fido script execution (CVE-2026-2398, reported by @independent-arg)
• Fix replacement vulnerabilities for diskcopy.dll and oscdimg.exe
• Fix FFU image creation being erroneously invocated, when trying to save an ISO image
• Fix saving of ISO images to paths that contain spaces
• Update UEFI:NTFS and UEFI DBXs to latest",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"Title","4","Text","Rufus",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"ShortTitle","5","Text","",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"SortTitle","6","Text","",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"VoiceTitle","7","Text","",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"ShortDescription","8","Text","","Rufus - The Reliable USB Formatting Utility","Rufus - أداة فرمتة الـ USB جديرة بالثقة","Rufus - Надеждната USB форматираща програма","Rufus - 可靠的 USB 格式化工具","Rufus - 快速可靠的 USB 格式化工具","Rufus - Pouzdan alat za formatiranje USB-a","Rufus - Spolehlivý program pro formátování USB","Rufus - Det pålidelige USB-formateringsværktøj","Rufus - de betrouwbare USB-formatteertool","Rufus - Luotettava USB-alustusohjelma","Rufus - L'utilitaire de formatage USB fiable","Rufus - Das zuverlässige USB-Formatierungstool","Rufus - Μία αξιόπιστη εφαρμογή διαμόρφωσης USB","Rufus - הכלי לאתחול USB האמין ביותר","Rufus - A megbízható USB-formázó segédprogram","Rufus - Utilitas Pemformatan USB yang Handal","Rufus - Utility affidabile per la formattazione di unità USB","Rufus - 信頼性の高い USB フォーマット ユーティリティ","Rufus - 신뢰할 수 있는 USB 포맷 유틸리티","Rufus - uzticama un vienkārša USB formatēšanas utilīta","Rufus - patikima USB formatavimo priemonė","Rufus - Utiliti pemformatan USB yang dipercayai","Rufus - Det pålitelige USB-formateringsprogrammet","Rufus، ابزاری کاربردی و قابل‌اطمینان برای فرمت کردن درایوهای USB","Rufus - niezawodne narzędzie do formatowania USB","Rufus - O Utilitário de Formatação USB Confiável","Rufus - O utilitário de confiança para formatação USB","Rufus - Instrumentul de încredere pentru formatări USB","Rufus - Надёжная утилита для форматирования USB-дисков","Rufus - Pouzdan Alat Za Formatiranje USB diska","Rufus - Spoľahlivý program pre formátovanie USB","Rufus - zanesljivi pripomoček za USB formatiranje","Rufus, la herramienta de formateo de USBs en la que puedes confiar","Rufus - Det pålitliga verktyget för USB-formatering","Rufus - ยูทิลิตี้การฟอร์แมต USB ที่ไว้ใจได้","Rufus - Güvenilir USB Biçimlendirme Programı","Rufus - надійна утиліта для форматування USB-накопичувачів","Rufus - Tiện ích Định dạng USB Đáng tin cậy"
"DevStudio","9","Text","Pete Batard",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"CopyrightTrademarkInformation","12","Text","© 2011-2024 Pete Batard",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"CopyrightTrademarkInformation","12","Text","© 2011-2026 Pete Batard",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"AdditionalLicenseTerms","13","Text","https://www.gnu.org/licenses/gpl-3.0.html","This application is licensed under the terms of the GNU Public License (GPL) version 3.
See https://www.gnu.org/licenses/gpl-3.0.en.html for details.","هذا التطبيق مُرخص بموجب شروط رخصة جنو (GNU) العمومية (GPL) الإصدار 3.
راجع https://www.gnu.org/licenses/gpl-3.0.ar.html لمزيد من التفاصيل.","Тази програма е лицензирана според условията на GNU Public License (GPL) версия 3.
@ -148,7 +153,7 @@ További információ: https://www.gnu.org/licenses/gpl-3.0.html.","Aplikasi ini
Lihat https://www.gnu.org/licenses/gpl-3.0.html untuk detail lebih lanjut.","Questa applicazione è rilasciata sotto i termini della GNU Public License (GPL) versione 3.
Vedere https://www.gnu.org/licenses/gpl-3.0.html per dettagli.","このアプリケーションはGNU Public License (GPL) version 3でライセンスされています。
詳細は https://www.gnu.org/licenses/gpl-3.0.ja.html をご覧ください。","이 응용 프로그램은 GNU Public License (GPL) 버전 3의 조건에 따라 라이선스가 부여됩니다.
자세한 내용은 https://www.gnu.org/licenses/gpl-3.0.html 을 참조하십시오.","Šai programmai ir licences noteikumi, kā GNU Public License (GPL) version 3.
자세한 내용은 https://www.gnu.org/licenses/gpl-3.0.html 을 참조하세요.","Šai programmai ir licences noteikumi, kā GNU Public License (GPL) version 3.
Papildinformācijai skatīt https://www.gnu.org/licenses/gpl-3.0.html.","Ši programa yra licencijuota pagal GNU viešosios licencijos (GPL) 3 versijos sąlygas.
Daugiau informacijos rasite https://www.gnu.org/licenses/gpl-3.0.html.","Permohonan ini dilesenkan di bawah syarat-syarat Lesen Awam GNU (GPL) versi 3.
Lihat https://www.gnu.org/licenses/gpl-3.0.html untuk butiran.","Dette programmet er lisensiert under GNU Public Licence (GPL) versjon 3.
@ -264,14 +269,14 @@ Xem tại https://www.gnu.org/licenses/gpl-3.0.html để biết thêm chi tiế
"OptionalPromo414x180","613","Relative path (or URL to file in Partner Center)","",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
"Feature1","700","Text","","Format USB, flash card and virtual drives to FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","تهيئة USB وبطاقة الفلاش ومحركات الأقراص الافتراضية إلى FAT / FAT32 / NTFS / UDF / exFAT / ReFS / ext2 / ext3","Форматиране на USB, карти памет и виртуални устройства с FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","将 U 盘、存储卡或虚拟驱动器格式化为 FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3 格式","將隨身碟、記憶卡或虛擬光碟機格式化為 FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3 格式","Formatirajte USB, flash karticu i virtualne pogone na FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Formátování USB, flash karet a virtuálních jednotek na FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Formater USB, flash kort og virtuelle drev til FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","USB, flashkaart en virtuele schijven formatteren naar FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Alusta USB-asemia, muistikortteja ja virtuaalisia asemia muotoon FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Formatez des périphériques USB, des cartes flash et des disques virtuels en FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Formatieren von USB, Flash-Karte und virtuellen Laufwerken in FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Μορφοποίηση USB, κάρτας flash και εικονικών μονάδων δίσκου σε FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","אתחול USB, כרטיסי זיכרון וכוננים וירטואליים ל־FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","USB, flash memóriakártyák és virtuális meghajtók formázása FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3 fájlrendszerre","Format USB, kartu flash dan penyimpanan maya ke FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Formatta USB, flash card e unità virtuali in FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","USBメモリやSDカード、仮想ドライブをFAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3でフォーマットします。","USB, 플래시 카드 및 가상 드라이브를 FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3로 포맷","Formatē USB, atmiņas kartes un virtuālos diskus formātos FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Suformatuokite USB, flash kortelę ir virtualius diskus į FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Formatkan USB, kad flash dan pemacu maya kepada FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Formater USB, minnekort og virtuelle disker til FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","فرمت USB، فلش کارت و درایوهای مجازی به FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Sformatuj nośnik używając: FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Formatar dispositivos USB, cartões flash e discos virtuais com FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Formatar dispositivos USB, cartão de memória e drives virtuais em FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Formatează USB, card flash si drive-uri virtuale la FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Форматирование USB, флешек и виртуальных дисков в FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Formatiraj USB, flash kartice, i virtualne diskove u FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Naformátujte USB, kartu a virtuálne disky do FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Formatiranje USB, bliskavice in virtualnih pogonov na FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Formatee USB, tarjetas flash y unidades virtuales a FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Formatera USB-enheter, flash-kort och virtuella enheter till FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","ฟอร์แมต USB, แฟลชการ์ด หรือไดรฟ์เสมือน ให้อยู่ในรูปแบบของ FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","USB, flash kart ve sanal sürücüleri FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3 olarak biçimlendirin","Форматування USB-накопичувачів, флешок, карток пам'яті у FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3","Định dạng USB, thẻ nhớ hoặc ổ nhớ ảo với FAT/FAT32/NTFS/UDF/exFAT/ReFS/ext2/ext3"
"Feature2","701","Text","","Create FreeDOS bootable USB drives","إنشاء محركات أقراص USB قابلة للإقلاع من FreeDOS","Създаване на FreeDOS стартиращ USB устройства","创建 FreeDOS 可启动驱动器","建立 FreeDOS 可開機隨身碟","Stvaranje FreeDOS USB pogona za pokretanje","Vytvoření bootovacích disků USB se systémem FreeDOS","Lav FreeDOS opstartsbare USB drev","FreeDOS opstartbare USB-schijven aanmaken","Luo boottaavia FreeDOS USB-asemia","Créez des disques amorçable FreeDOS","FreeDOS-bootfähige USB-Laufwerke erstellen","Δημιουργήστε μονάδες USB με δυνατότητα εκκίνησης FreeDOS","יצירת כונני USB הניתנים לאתחול של FreeDOS","Bootolható FreeDOS USB meghajtó készítése","Buat perangkat USB FreeDOS yang dapat di boot","Crea unità USB avviabili FreeDOS","FreeDOSの起動可能ドライブを作成します。","FreeDOS 부팅 가능한 USB 드라이브 만들기","Izveido FreeDOS ielādes USB ierīces","Sukurkite FreeDOS įkrovos USB diskus","Buat pemacu USB boleh boot FreeDOS","Lag FreeDos oppstartbar USB stick","درایوهای USB قابل بوت FreeDOS را ایجاد کنید","Stwórz nośnik rozruchowy USB FreeDOS","Criar discos USB inicializáveis FreeDOS","Criar unidades USB inicializáveis FreeDOS","Crează drive USB bootabil FreeDOS","Создание загрузочных USB-дисков FreeDOS","Kreiraj FreeDOS butabilni USB disk","Vytvorte bootovacie usb zariadenia FreeDOS","Ustvarite FreeDOS zagonske USB pogone","Crear unidades USB de arranque FreeDOS","Skapa FreeDOS startbara USB-enheter","สร้าง USB ไดรฟ์บูตสำหรับระบบ FreeDOS","FreeDOS önyüklenebilir USB sürücüleri oluşturun","Створення завантажувальних пристроїв FreeDOS","Tạo USB có thể khởi động với FreeDOS"
"Feature3","702","Text","","Create bootable drives from bootable ISOs (Windows, Linux, etc.)","إنشاء محركات أقراص قابلة للإقلاع من ملفات ISO القابلة للإقلاع (Windows و Linux وما إلى ذلك)","Създаване на стартиращи устройства от ISO образи (Windows, Linux и др.)","从可启动 ISO 文件 (Windows 和 Linux 等) 创建可启动驱动器","從可開機 ISO 檔案 (Windows 和 Linux 等) 建立可開機隨身碟","Stvaranje pogona za pokretanje iz ISO-ova za pokretanje (Windows, Linux itd.)","Vytváření bootovacích jednotek ze zaváděcích ISO (Windows, Linux atd.)","Lav opstartsbarer drev fra opstartsbarer ISOer (Window, Linux, osv.)","Opstartbare schijven aanmaken via opstartbare ISO's (Windows, Linux, enz)","Luo käynnistysasemia boottaavista ISO-kuvista (Windows, Linux jne.)","Créez des disques amorçables à partir d'images ISOs (Windows, Linux, etc.)","Erstellen bootfähiger Laufwerke aus bootfähigen ISOs (Windows, Linux, etc.)","Δημιουργήστε εκκινήσιμες μονάδες από ISO με δυνατότητα εκκίνησης (Windows, Linux, κ.λπ.)","יצירת כוננים הניתנים לאתחול מקובצי ISO הניתנים לאתחול (Windows, Linux וכו')","Bootolható meghajtók készítése bootolható ISO képfájlokból (Windows, Linux, stb.)","Buat perangkat yang dapat di boot dari ISO (Windows, Linux, dll.)","Crea unità avviabili da ISO avviabili (Windows, Linux, ecc.)","WindowsやLinuxなどのISOファイルから起動可能ドライブを作成します。","부팅 가능한 ISO (Windows, Linux 등)에서 부팅 가능한 드라이브 만들기","Izveido ielādes ierīces no ISO failiem (Windows, Linux, u.c.)","Sukurkite įkrovos diskus iš įkrovos ISO (Windows, Linux ir kt.)","Buat pemacu boleh boot daripada ISO boleh boot (Windows, Linux, dll.)","Lag oppstartabar enhet/disk fra ISOer (Windows, Linux, etc.)","ایجاد درایوهای قابل بوت از ISOهای قابل بوت (ویندوز، لینوکس و غیره)","Twórz dyski rozruchowe z obrazów ISO (Windows, Linux itp.)","Criar discos inicializáveis a partir de ISOs inicializáveis (Windows, Linux, etc.)","Criar unidades inicializáveis a partir de ISOs inicializáveis (Windows, Linux, etc.)","Crează drive-uri bootabile de la ISO-uri bootabile (Windows, Linux, etc.)","Создание загрузочных дисков из загрузочных образов ISO (Windows, Linux и т.д.)","Kreirajte disk jedinice za pokretanje sistema od ISO-a koji se mogu pokretanja sistema (Windows, Linux itd.)","Vytvorte bootovacie jednotky z ISO súborov (Windows, Linux atď.)","Ustvarite zagonske pogone iz zagonskih ISO-jev (Windows, Linux itd.)","Cree unidades de arranque desde ISO de arranque (Windows, Linux, etc.)","Skapa startbara enheter från startbara ISO-filer (Windows, Linux, etc.)","สร้าง USB ไดรฟ์บูตจากไฟล์ ISO ที่บูตได้ (เช่น ไฟล์ติดตั้ง Windows หรือ Linux เป็นต้น)","Önyüklenebilir ISO'lardan önyüklenebilir sürücüler oluşturun (Windows, Linux, vb.)","Створення завантажувальних пристроїв з завантажувальних образів (Windows, Linux, тощо)","Tạo ổ đĩa có thể khởi động từ các file ISO có thể khởi động (Windows, Linux, v.v...)"
"Feature3","702","Text","","Create bootable drives from bootable ISOs (Windows, Linux, etc.)","إنشاء محركات أقراص قابلة للإقلاع من ملفات ISO القابلة للإقلاع (Windows و Linux وما إلى ذلك)","Създаване на стартиращи устройства от ISO образи (Windows, Linux и др.)","从可启动 ISO 文件 (Windows 和 Linux 等) 创建可启动驱动器","從可開機 ISO 檔案 (Windows 和 Linux 等) 建立可開機隨身碟","Stvaranje pogona za pokretanje iz ISO-ova za pokretanje (Windows, Linux itd.)","Vytváření bootovacích jednotek ze zaváděcích ISO (Windows, Linux atd.)","Lav opstartsbarer drev fra opstartsbarer ISOer (Window, Linux, osv.)","Opstartbare schijven aanmaken via opstartbare ISO's (Windows, Linux, enz)","Luo käynnistysasemia boottaavista ISO-kuvista (Windows, Linux jne.)","Créez des disques amorçables à partir d'images ISOs (Windows, Linux, etc.)","Erstellen bootfähiger Laufwerke aus bootfähigen ISOs (Windows, Linux etc.)","Δημιουργήστε εκκινήσιμες μονάδες από ISO με δυνατότητα εκκίνησης (Windows, Linux, κ.λπ.)","יצירת כוננים הניתנים לאתחול מקובצי ISO הניתנים לאתחול (Windows, Linux וכו')","Bootolható meghajtók készítése bootolható ISO képfájlokból (Windows, Linux, stb.)","Buat perangkat yang dapat di boot dari ISO (Windows, Linux, dll.)","Crea unità avviabili da ISO avviabili (Windows, Linux, ecc.)","WindowsやLinuxなどのISOファイルから起動可能ドライブを作成します。","부팅 가능한 ISO (Windows, Linux 등)에서 부팅 가능한 드라이브 만들기","Izveido ielādes ierīces no ISO failiem (Windows, Linux, u.c.)","Sukurkite įkrovos diskus iš įkrovos ISO (Windows, Linux ir kt.)","Buat pemacu boleh boot daripada ISO boleh boot (Windows, Linux, dll.)","Lag oppstartabar enhet/disk fra ISOer (Windows, Linux, etc.)","ایجاد درایوهای قابل بوت از ISOهای قابل بوت (ویندوز، لینوکس و غیره)","Twórz dyski rozruchowe z obrazów ISO (Windows, Linux itp.)","Criar discos inicializáveis a partir de ISOs inicializáveis (Windows, Linux, etc.)","Criar unidades inicializáveis a partir de ISOs inicializáveis (Windows, Linux, etc.)","Crează drive-uri bootabile de la ISO-uri bootabile (Windows, Linux, etc.)","Создание загрузочных дисков из загрузочных образов ISO (Windows, Linux и т.д.)","Kreirajte disk jedinice za pokretanje sistema od ISO-a koji se mogu pokretanja sistema (Windows, Linux itd.)","Vytvorte bootovacie jednotky z ISO súborov (Windows, Linux atď.)","Ustvarite zagonske pogone iz zagonskih ISO-jev (Windows, Linux itd.)","Cree unidades de arranque desde ISO de arranque (Windows, Linux, etc.)","Skapa startbara enheter från startbara ISO-filer (Windows, Linux, etc.)","สร้าง USB ไดรฟ์บูตจากไฟล์ ISO ที่บูตได้ (เช่น ไฟล์ติดตั้ง Windows หรือ Linux เป็นต้น)","Önyüklenebilir ISO'lardan önyüklenebilir sürücüler oluşturun (Windows, Linux, vb.)","Створення завантажувальних пристроїв з завантажувальних образів (Windows, Linux, тощо)","Tạo ổ đĩa có thể khởi động từ các file ISO có thể khởi động (Windows, Linux, v.v...)"
"Feature4","703","Text","","Create bootable drives from bootable disk images, including compressed ones","إنشاء محركات أقراص قابلة للإقلاع من صور الأقراص القابلة للإقلاع ، بما في ذلك الأقراص المضغوطة","Създаване на стартиращи устройства от образи, включително компресирани такива","从可启动硬盘镜像 (包括压缩镜像) 创建可启动驱动器","從可開機硬碟映像檔 (包括壓縮映像檔) 建立可開機隨身碟","Stvaranje pogona za pokretanje iz slika diska za pokretanje, uključujući komprimirane","Vytváření zaváděcích jednotek ze zaváděcích obrazů disků, včetně komprimovaných","Lav opstartsbarer drev fra opstartsbarer disk billeder, inklusiv komprimerede billeder","Opstartbare schijven aanmaken van opstartbare schijf-images, inclusief gecomprimeerde images","Luo käynnistysasemia boottaavista levykuvista, pakatut kuvat mukaanlukien","Créez des disques amorçables à partir d'images disque, y compris à partir d'images compressées","Erstellen bootfähiger Laufwerke aus bootfähigen Festplatten-Images, einschließlich komprimierter Images","Δημιουργήστε μονάδες εκκίνησης από εικόνες δίσκου με δυνατότητα εκκίνησης, συμπεριλαμβανομένων συμπιεσμένων","יצירת כוננים הניתנים לאתחול מקובצי תמונת דיסק הניתנים לאתחול, כולל קבצים דחוסים","Bootolható meghajtók készítése bootolható lemez képfájlokból, beleértve a tömörítetteket is","Buat perangkat yang dapat di boot dari Disk Image, termasuk yang Disk Image yang terkompresi","Crea unità avviabili da immagini disco avviabili, incluse quelle compresse","圧縮済みのものを含むディスクイメージから起動可能ドライブを作成します。","압축된 이미지를 포함하여 부팅 가능한 디스크 이미지에서 부팅 가능한 드라이브 만들기","Izveido ielādes ierīces no ielādes disku virtuālajiem attēliem, tai skaitā arī no saspiestajiem","Sukurkite įkrovos diskus iš įkrovos disko vaizdų, įskaitant suspaustus","Buat pemacu boleh boot daripada imej cakera boleh boot, termasuk yang dimampatkan","Lag oppstartbare disker fra images, inkludert komprimerte sådan","درایوهای قابل بوت را از تصاویر دیسک قابل بوت، از جمله موارد فشرده، ایجاد کنید","Twórz dyski rozruchowe z obrazów dysków, włączając skompresowane","Criar discos inicializáveis a partir de imagens de disco inicializáveis, inclusive de imagens compactadas","Criar unidades inicializáveis a partir de imagens de disco inicializáveis, inclusive de imagens compactadas","Crează drive-uri de la imagini de disc bootabile, incluzând cele compresate","Создание загрузочных дисков из образов загрузочных дисков, в том числе сжатых","Kreiranje disk jedinica za pokretanje sistema sa slika diska koji se može pokretanja, uključujući kompresovane","Vytvorte bootovacie jednotky z diskových obrazov, vrátane tých komprimovaných","Ustvarite zagonske pogone iz slik diska, ki jih je mogoče zagnati, vključno s stisnjenimi","Cree unidades de arranque a partir de imágenes de disco de arranque, incluidas las comprimidas","Skapa startbara enheter från startbara diskavbildningar, inklusive komprimerade","สร้างไดรฟ์บูตจากดิสก์อิมเมจที่บูตได้ (รองรับไฟล์ดิสก์อิมเมจที่ถูกบีบอัด)","Sıkıştırılmış olanlar da dahil olmak üzere önyüklenebilir disk yansısından önyüklenebilir sürücüler oluşturun","Створення завантажувальних пристроїв з завантажувальних образів, у тому числі стиснутих","Tạo ổ đĩa có thể khởi động từ các tệp đĩa có thể khởi động, bao gồm cả tệp nén"
"Feature5","704","Text","","Create BIOS or UEFI bootable drives, including UEFI bootable NTFS","إنشاء BIOS أو محركات أقراص UEFI قابلة للإقلاع ، بما في ذلك UEFI NTFS القابل للتشغيل","Създаване на BIOS или UEFI стартиращи устройства, включително UEFI стартиращ NTFS","创建 BIOS 或 UEFI 可启动驱动器,包括 UEFI 可启动的 NTFS 驱动器","建立 BIOS 或 UEFI 可開機隨身碟,包括 UEFI 下的可開機 NTFS 隨身碟","Stvaranje BIOS ili UEFI pogona za pokretanje, uključujući UEFI NTFS za pokretanje","Vytvořte zaváděcí jednotky BIOS nebo UEFI, včetně zaváděcích souborů NTFS UEFI","Lav BIOS eller UEFI opstartsbarer drev, inklusiv UEFI opstartsbarer NTFS","BIOS of UEFI opstartbare schijven aanmaken, inclusief UEFI opstartbare NTFS","Luo BIOS- tai UEFI-boottaavia asemia, mukaanlukien UEFI-boottaavat NTFS-asemat","Créez des disques amorçables BIOS ou UEFI, y compris des disques UEFI amorçables utilisant NTFS","Erstellen von BIOS- oder UEFI-bootfähigen Laufwerken, einschließlich UEFI-bootfähigem NTFS","Δημιουργήστε μονάδες δίσκου με δυνατότητα εκκίνησης BIOS ή UEFI, συμπεριλαμβανομένων NTFS με δυνατότητα εκκίνησης UEFI","יצירת כוננים הניתנים לאתחול ממחשבים התומכים ב־BIOS או UEFI, לרבות כוננים הניתנים לאתחול מ־UEFI, המשתמשים במערכת הקבצים NTFS","BIOS-ból vagy UEFI-ből bootolható meghajtók készítése, beleértve az UEFI-ből bootolható NTFS meghajtókat is","Buat perangkat BIOS atau UEFI yang dapat di boot, termasuk perangkat NTFS yang dapat di boot oleh UEFI","Crea unità avviabili BIOS o UEFI, incluso NTFS avviabile UEFI","UEFI:NTFSを含むBIOS及びUEFIで起動可能なドライブを作成します。","UEFI 부팅 가능한 NTFS를 포함하여 BIOS 또는 UEFI 부팅 가능 드라이브 만들기","Izveido BIOS vai UEFI ielādes ierīces, ieskaitot UEFI ielādi no NTFS","Sukurkite BIOS arba UEFI įkrovos diskus, įskaitant UEFI įkrovos NTFS","Buat pemacu boleh boot BIOS atau UEFI, termasuk NTFS boleh boot UEFI","Lag BIOS eller UEFI oppstartbare disker, inkludert UEFI oppstartbar NTFS","درایوهای قابل بوت بایوس یا UEFI از جمله NTFS قابل بوت UEFI ایجاد کنید","Stwórz dysk rozruchowy BIOS lub UEFI, włączając bootowalny dysk UEFI NTFS","Criar discos inicializáveis BIOS ou UEFI, inclusive discos UEFI inicializáveis usando NTFS","Criar discos inicializáveis BIOS ou UEFI, inclusive discos UEFI inicializáveis usando NTFS","Crează discuri bootabile BIOS sau UEFI, incluzând NTFS-uri bootabile de UEFI","Создание загрузочных дисков BIOS или UEFI, включая загрузочный UEFI NTFS","Kreiranje BIOS ili UEFI disk jedinica za pokretanje sistema, uključujući NTFS sa UEFI pokretanjem sistema","Vytvorte bootovacie jednotky systému BIOS alebo UEFI vrátane UEFI bootovateľnej jednotky NTFS","Ustvarite zagonske pogone BIOS ali UEFI, vključno z UEFI bootable NTFS","Cree unidades de arranque BIOS o UEFI, incluido NTFS de arranque UEFI","Skapa BIOS- eller UEFI-startbara enheter, inklusive UEFI-startbar NTFS","สร้างไดรฟ์บูตสำหรับระบบ BIOS หรือ UEFI และ UEFI bootable NTFS","UEFI önyüklenebilir NTFS dahil BIOS ya da UEFI önyüklenebilir sürücüler oluşturun","Створення завантажувальних пристроїв BIOS чи UEFI, включаючи завантажувальний UEFI NTFS","Tạo ổ đĩa có thể khởi động với hệ thống BIOS hoặc UEFI, bao gồm cả NTFS có thể khởi động với UEFI"
"Feature6","705","Text","","Create 'Windows To Go' drives","إنشاء محركات أقراص ""Windows To Go\","Създаване на 'Windows To Go' устройства","创建 'Windows To Go' 驱动器","建立 'Windows To Go' 隨身碟","Stvaranje pogona ""Windows To Go\","Vytvoření jednotek ""Windows To Go","Lav 'Windows To Go' drev","'Windows To Go'-schijven aanmaken","Luo 'Windows To Go' -asemia","Créez des disques 'Windows To Go'","Erstellen von ""Windows To Go""-Laufwerken","Δημιουργήστε μονάδες δίσκου ""Windows To Go\","יצירת כונני Windows To Go","'Windows To Go' meghajtók készítése","Buat perangkat Windows To Go","Crea unità 'Windows To Go'","Windows To Goドライブを作成します。","'Windows To Go' 드라이브 만들기","Izveido 'Windows To Go' ierīces","Sukurkite ""Windows To Go"" diskus","Buat pemacu 'Windows To Go'","Lag 'Windows To Go' disker","درایوهای ""Windows To Go"" را ایجاد کنید","Stwórz dysk 'Windows To Go'","Criar discos 'Windows To Go'","Criar discos 'Windows To Go'","Crează discuri 'Windows To Go'","Создание дисков Windows To Go","Kreiranje disk jedinica ""Windows to Go\","Vytvorte jednotky „Windows To Go\","Ustvarjanje pogonov »Windows To Go'","Cree unidades 'Windows To Go'","Skapa ""Windows To Go""-enheter","สร้างไดรฟ์ของ 'Windows To Go'","'Windows To Go' sürücüleri oluşturun","Створення пристроїв 'Windows To Go'","Tạo ổ đĩa 'Windows To Go'"
"Feature6","705","Text","","Create 'Windows To Go' drives","إنشاء محركات أقراص ""Windows To Go\","Създаване на 'Windows To Go' устройства","创建 'Windows To Go' 驱动器","建立 'Windows To Go' 隨身碟","Stvaranje pogona ""Windows To Go\","Vytvoření jednotek ""Windows To Go","Lav 'Windows To Go' drev","'Windows To Go'-schijven aanmaken","Luo 'Windows To Go' -asemia","Créez des disques 'Windows To Go'","Erstellen von 'Windows To Go'-Laufwerken","Δημιουργήστε μονάδες δίσκου ""Windows To Go\","יצירת כונני Windows To Go","'Windows To Go' meghajtók készítése","Buat perangkat Windows To Go","Crea unità 'Windows To Go'","Windows To Goドライブを作成します。","'Windows To Go' 드라이브 만들기","Izveido 'Windows To Go' ierīces","Sukurkite ""Windows To Go"" diskus","Buat pemacu 'Windows To Go'","Lag 'Windows To Go' disker","درایوهای ""Windows To Go"" را ایجاد کنید","Stwórz dysk 'Windows To Go'","Criar discos 'Windows To Go'","Criar discos 'Windows To Go'","Crează discuri 'Windows To Go'","Создание дисков Windows To Go","Kreiranje disk jedinica ""Windows to Go\","Vytvorte jednotky „Windows To Go\","Ustvarjanje pogonov »Windows To Go'","Cree unidades 'Windows To Go'","Skapa ""Windows To Go""-enheter","สร้างไดรฟ์ของ 'Windows To Go'","'Windows To Go' sürücüleri oluşturun","Створення пристроїв 'Windows To Go'","Tạo ổ đĩa 'Windows To Go'"
"Feature7","706","Text","","Create Windows 11 installation drives for PCs that don't have TPM or Secure Boot","قم بإنشاء محركات تثبيت ويندوز 11 لأجهزة الكمبيوتر التي لا تحتوي على TPM أو الإقلاع الآمن (Secure Boot)","Създаване на Windows 11 инсталационно устройство за компютри, които нямат TPM или Secure Boot","为没有 TPM 或安全启动功能的电脑创建 Windows 11 安装驱动器","為沒有 TPM 或安全開機功能的電腦建立 Windows 11 安裝隨身碟","Stvaranje instalacijskih pogona sustava Windows 11 za PC-jeve koji nemaju TPM ili Sigurno pokretanje","Vytvoření instalačních jednotek systému Windows 11 pro počítače bez čipu TPM nebo Secure Boot","Lav Windows 11 installations drev for PCer der ikker har TPM eller Secure Boot","Windows 11 installatieschijven aanmaken voor pc's die geen TPM of Secure Boot hebben","Luo Windows 11 -asennusasemia tietokoneille, jotka eivät tue TPM- tai Secure Boot -ominaisuuksia","Créez des disques d'installation Windows 11 pour des PCs qui ne disposent pas de TPM ou Secure Boot","Erstellen von Windows 11-Installationslaufwerken für PCs ohne TPM oder Secure Boot","Δημιουργήστε μονάδες εγκατάστασης των Windows 11 για υπολογιστές που δεν διαθέτουν TPM ή Ασφαλή Εκκίνηση","יצירת כונני התקנה של Windows 11 עבור מחשבים שאין להם TPM או Secure Boot","Windows 11 telepítési meghajtók készítése olyan PC-k számára, amelyek nem rendelkeznek TPM vagy Secure Boot funkciókkal","Buat perangkat pemasang Windows 11 untuk PC yang tidak mempunyai TPM atau Secure Boot","Crea unità di installazione di Windows 11 per PC che non dispongono di TPM o avvio protetto","TPM及びセキュアブート非対応のPC向けのWindows 11インストールドライブを作成します","TPM 또는 보안 부팅이 없는 PC용 Windows 11 설치 드라이브 만들기","Izveido Windows 11 instalācijas ierīces datoriem, kam nav TPM vai Secure Boot","Sukurkite Windows 11 diegimo diskus kompiuteriams, kuriuose nėra TPM arba saugaus įkrovimo","Buat pemacu pemasangan Windows 11 untuk PC yang tidak mempunyai TPM atau But Selamat","Lag oppstartsmedia for Windows 11 som ikke krever TPM eller Secure Boot","درایوهای نصب ویندوز 11 را برای رایانه هایی که TPM یا Secure Boot ندارند ایجاد کنید","Twórz dyski instalacyjne systemu Windows 11 dla komputerów, które nie posiadają modułu TPM ani Secure Boot","Criar discos de instalação do Windows 11 para PCs que não possuem TPM ou Secure Boot","Criar discos de instalação do Windows 11 para PCs que não possuem TPM ou Arranque Seguro","Crează drive de instalare Windows 11 pe computere care nu au TPM sau Bootare Securizată","Создание установочных дисков Windows 11 для компьютеров без TPM или безопасной загрузки","Kreiranje windows 11 instalacionih disk jedinica za računare koji nemaju TPM ili bezbedno pokretanje sistema","Vytvorte inštalačné jednotky Windows 11 pre počítače, ktoré nemajú modul TPM, ani Secure Boot","Ustvarjanje namestitvenih pogonov za Windows 11 za računalnike, ki nimate TPM ali Varnega zagona","Cree unidades de instalación de Windows 11 para PC que no tienen TPM o Arranque seguro","Skapa installationsenheter till Windows 11 för datorer som inte har TPM eller säker start","สร้างไดรฟ์ติดตั้ง Windows 11 สำหรับคอมพิวเตอร์ที่ไม่มี TPM หรือ Secure Boot","TPM ya da Güvenli Önyüklemeye sahip olmayan bilgisayarlar için Windows 11 kurulum sürücüleri oluşturun","Створення інсталяційних дисків Windows 11 для ПК, які не мають TPM чи Secure Boot","Tạo ổ đĩa cài đặt Windows 11 cho các máy tính không có TPM hoặc Secure Boot"
"Feature8","707","Text","","Create persistent Linux partitions","إنشاء Persistent Linux partitions","Създаване на устойчиви Linux дялове","创建持久 Linux 分区","建立持續性 Linux 磁區","Stvaranje trajnih Linux particija","Vytvoření trvalých oddílů systému Linux","Lav vedvarende Linux adskillelser","Persistent Linux partities aanmaken","Luo pysyviä Linux-osioita","Créez des partitions persistentes pour Linux","Persistente Linux-Partitionen erstellen","Δημιουργήστε μόνιμα διαμερίσματα Linux","יצירת מחיצות Linux קבועות","Tartós Linux partíciók készítése","Buat partisi Linux yang tetap/persistent","Crea partizioni persistenti Linux","記録用Linuxパーティションを作成します。","영구 리눅스 파티션 만들기","Izveido pastāvīgas Linux partīcijas","Sukurkite nuolatinius Linux skaidinius","Buat partition Linux berterusan","Lag persistente Linux partisjoner","ایجاد پارتیشن های لینوکس دائمی","Utwórz trwałe partycje Linux","Criar partições persistentes para Linux","Crie partições persistentes para Linux","Crează partiție de Linux persistentă","Создание постоянных разделов Linux","Kreiranje upornih Linux particija","Vytvorte trvalé oblasti systému Linux","Ustvarjanje trajnih Linux particij","Crear particiones persistentes de Linux","Skapa beständiga Linux-partitioner","สร้าง Linux partition แบบ persistent","Kalıcı Linux bölümleri oluşturun","Створення розділу збереження Linux","Tạo phân vùng Linux liên tục"
"Feature9","708","Text","","Create VHD/DD images of the selected drive","إنشاء صور VHD / DD لمحرك الأقراص المحدد","Създаване на VHD/DD образи на избраното устройство","为选择的驱动器创建 VHD/DD 镜像","為選取的磁碟機建立 VHD/DD 映像檔","Stvaranje VHD/DD slika odabranog pogona","Vytvoření obrazů VHD/DD z vybrané jednotky","Lav VHD/DD billeder af det valgte drev","VHD/DD-images van de geselecteerde schijf aanmaken","Luo VHD/DD-kuvia valitusta asemasta","Créez des images VHD/DD du périphérique sélectionné","VHD/DD-Images des ausgewählten Laufwerks erstellen","Δημιουργήστε εικόνες VHD/DD της επιλεγμένης μονάδας δίσκου","יצירת קובצי תמונה מסוג VHD/DD של הכונן שנבחר","VHD/DD képfájl készítése a kiválasztott meghajtóról","Buat image VHD/DD dari penyimpanan yang dipilih","Crea immagini VHD/DD dell'unità selezionata","選択されたドライブのVHD/DDイメージを作成します。","선택한 드라이브의 VHD/DD 이미지 만들기","Izveido izvēlētā diska VHD/DD virtuālos attēlus","Sukurkite pasirinkto disko VHD / DD vaizdus","Buat imej VHD/DD bagi pemacu yang dipilih","Lag VHD/DD speilinger av valgt disk","تصاویر VHD/DD از درایو انتخاب شده ایجاد کنید","Stwórz obraz VHD/DD z wybranego dysku","Criar imagens VHD/DD do dispositivo selecionado","Criar imagens VHD/DD do dispositivo selecionado","Crează imagini VHD/DD de pe drive-ul selectat","Создание образов VHD/DD выбранного диска","Kreiranje VHD/DD slika izabrane disk jedinice","Vytvorte obrazy VHD/DD z vybratej jednotky","Ustvarjanje VHD/DD slik izbranega pogona","Cree imágenes VHD/DD de la unidad seleccionada","Skapa VHD/DD-avbilder av den valda enheten","สร้างอิมเมจไฟล์แบบ VHD/DD จากไดรฟ์ที่เลือก","Seçilen sürücünün VHD/DD yansılarını oluşturun","Створення образів VHD/DD з вибраних дисків","Tạo tệp VHD/DD từ ổ đĩa đã chọn"
"Feature10","709","Text","","Compute MD5, SHA-1, SHA-256 and SHA-512 checksums of the selected image","حساب المجاميع الإختبارية MD5 و SHA-1 و SHA-256 و SHA-512 للصورة المحددة","Изчисляване на MD5, SHA-1, SHA-256 и SHA-512 чексуми на избраният образ","计算被选择镜像的 MD5、SHA-1、SHA-256 和 SHA-512 校验码","計算被選取映像的 MD5、SHA-1、SHA-256 和 SHA-512 檢查碼","Izračunajte kontrolne zbrojeve odabrane slike MD5, SHA-1, SHA-256 i SHA-512","Výpočet kontrolních součtů MD5, SHA-1, SHA-256 a SHA-512 vybraného obrazu","Beregn MD5, SHA-1, SHA-256 og SHA-512 checksums af det valgte billede","MD5, SHA-1, SHA-256 en SHA-512 controlesommen berekenen van de geselecteerde image","Laske MD5, SHA-1, SHA-256 ja SHA-512 tarkistussummia valitusta levykuvasta","Calculez les sommes de contrôle MD5, SHA-1, SHA-256 et SHA-512 de l'image sélectionnée","Berechnung von MD5-, SHA-1-, SHA-256- und SHA-512-Prüfsummen für das ausgewählte Bild","Υπολογίστε τα αθροίσματα ελέγχου MD5, SHA-1, SHA-256 και SHA-512 της επιλεγμένης εικόνας","חישוב סיכומי ביקורת מסוג MD5, SHA-1, SHA-256 ו־SHA-512 של קובץ התמונה שנבחרה","A kiválasztott képfájl MD5, SHA-1, SHA-256 és SHA-512 ellenőrző összegének kiszámítása","Hitung checksum MD5, SHA-1, SHA-256 dan SHA-512 dari image yang dipilih","Calcola i checksum MD5, SHA-1, SHA-256 e SHA-512 dell'immagine selezionata","選択されたイメージのMD5、SHA-1、SHA-256及びSHA-512チェックサムを計算します。","선택한 이미지의 MD5, SHA-1, SHA-256 및 SHA-512 체크섬 계산","Izskaitļo izvēlētā virtuālā attēla MD5, SHA-1, SHA-256 un SHA-512 kontrolsummas","Apskaičiuokite pasirinkto vaizdo MD5, SHA-1, SHA-256 ir SHA-512 kontrolines sumas","Kira MD5, SHA-1, SHA-256 dan SHA-512 checksum imej yang dipilih","Kalkuler MD5, SHA-1, SHA-256 og SHA-512 sjekksummer fra valgt speiling","MD5، SHA-1، SHA-256 و SHA-512 را برای تصویر انتخابی محاسبه کنید","Oblicz sumy kontrolne MD5, SHA-1, SHA-256 i SHA-512 dla wybranego obrazu","Calcular somas de verificação MD5, SHA-1, SHA-256 e SHA-512 da imagem selecionada","Calcular checksums MD5, SHA-1, SHA-256 e SHA-512 da imagem selecionada","Compută MD5, SHA-1, SHA-256 și SHA-512 suma de control ale imaginilor selectate","Вычисление контрольных сумм MD5, SHA-1, SHA-256 и SHA-512 выбранного образа","Izračunajte MD5, SHA-1, SHA-256 i SHA-512 kontrolne preglede izabrane slike","Vypočítajte kontrolné súčty vybratého obrazu (MD5, SHA-1, SHA-256 a SHA-512)","Račun MD5, SHA-1, SHA-256 in SHA-512 kontrolni vsoti izbrane slike","Calcule las sumas de comprobación MD5, SHA-1, SHA-256 y SHA-512 de la imagen seleccionada","Beräkna kontrollsummor MD5, SHA-1, SHA-256 och SHA-512 för den valda avbilden","คำนวณรหัส MD5, SHA-1, SHA-256, SHA-512 ของไฟล์อิมเมจที่เลือก","Seçilen yansının MD5, SHA-1, SHA-256 ve SHA-512 sağlama toplamlarını hesaplayın","Обчислення контрольних сум MD5, SHA-1, SHA-256 та SHA-512 для вибраних образів","Tính tổng kiểm MD5, SHA-1, SHA-256 và SHA-512 của tệp đã chọn"
"Feature10","709","Text","","Compute MD5, SHA-1, SHA-256 and SHA-512 checksums of the selected image","حساب المجاميع الإختبارية MD5 و SHA-1 و SHA-256 و SHA-512 للصورة المحددة","Изчисляване на MD5, SHA-1, SHA-256 и SHA-512 чексуми на избраният образ","计算被选择镜像的 MD5、SHA-1、SHA-256 和 SHA-512 校验码","計算被選取映像的 MD5、SHA-1、SHA-256 和 SHA-512 檢查碼","Izračunajte kontrolne zbrojeve odabrane slike MD5, SHA-1, SHA-256 i SHA-512","Výpočet kontrolních součtů MD5, SHA-1, SHA-256 a SHA-512 vybraného obrazu","Beregn MD5, SHA-1, SHA-256 og SHA-512 checksums af det valgte billede","MD5, SHA-1, SHA-256 en SHA-512 controlesommen berekenen van de geselecteerde image","Laske MD5, SHA-1, SHA-256 ja SHA-512 tarkistussummia valitusta levykuvasta","Calculez les sommes de contrôle MD5, SHA-1, SHA-256 et SHA-512 de l'image sélectionnée","Berechnung von MD5-, SHA-1-, SHA-256- und SHA-512-Prüfsummen für das ausgewählte Image","Υπολογίστε τα αθροίσματα ελέγχου MD5, SHA-1, SHA-256 και SHA-512 της επιλεγμένης εικόνας","חישוב סיכומי ביקורת מסוג MD5, SHA-1, SHA-256 ו־SHA-512 של קובץ התמונה שנבחרה","A kiválasztott képfájl MD5, SHA-1, SHA-256 és SHA-512 ellenőrző összegének kiszámítása","Hitung checksum MD5, SHA-1, SHA-256 dan SHA-512 dari image yang dipilih","Calcola i checksum MD5, SHA-1, SHA-256 e SHA-512 dell'immagine selezionata","選択されたイメージのMD5、SHA-1、SHA-256及びSHA-512チェックサムを計算します。","선택한 이미지의 MD5, SHA-1, SHA-256 및 SHA-512 체크섬 계산","Izskaitļo izvēlētā virtuālā attēla MD5, SHA-1, SHA-256 un SHA-512 kontrolsummas","Apskaičiuokite pasirinkto vaizdo MD5, SHA-1, SHA-256 ir SHA-512 kontrolines sumas","Kira MD5, SHA-1, SHA-256 dan SHA-512 checksum imej yang dipilih","Kalkuler MD5, SHA-1, SHA-256 og SHA-512 sjekksummer fra valgt speiling","MD5، SHA-1، SHA-256 و SHA-512 را برای تصویر انتخابی محاسبه کنید","Oblicz sumy kontrolne MD5, SHA-1, SHA-256 i SHA-512 dla wybranego obrazu","Calcular somas de verificação MD5, SHA-1, SHA-256 e SHA-512 da imagem selecionada","Calcular checksums MD5, SHA-1, SHA-256 e SHA-512 da imagem selecionada","Compută MD5, SHA-1, SHA-256 și SHA-512 suma de control ale imaginilor selectate","Вычисление контрольных сумм MD5, SHA-1, SHA-256 и SHA-512 выбранного образа","Izračunajte MD5, SHA-1, SHA-256 i SHA-512 kontrolne preglede izabrane slike","Vypočítajte kontrolné súčty vybratého obrazu (MD5, SHA-1, SHA-256 a SHA-512)","Račun MD5, SHA-1, SHA-256 in SHA-512 kontrolni vsoti izbrane slike","Calcule las sumas de comprobación MD5, SHA-1, SHA-256 y SHA-512 de la imagen seleccionada","Beräkna kontrollsummor MD5, SHA-1, SHA-256 och SHA-512 för den valda avbilden","คำนวณรหัส MD5, SHA-1, SHA-256, SHA-512 ของไฟล์อิมเมจที่เลือก","Seçilen yansının MD5, SHA-1, SHA-256 ve SHA-512 sağlama toplamlarını hesaplayın","Обчислення контрольних сум MD5, SHA-1, SHA-256 та SHA-512 для вибраних образів","Tính tổng kiểm MD5, SHA-1, SHA-256 và SHA-512 của tệp đã chọn"
"Feature11","710","Text","","Perform bad blocks checks, including detection of ""fake"" flash drives","إجراء فحوصات كتل تالفة ، بما في ذلك الكشف عن محركات أقراص فلاش ""زائفة\","Проверяване за лоши блокове, включително засичане на ""фалшиви"" устройства","执行坏块检查包括对”假“U盘的检测","執行壞軌檢查包括對”假“USB 快閃磁碟
的偵測","Izvršite provjere loših blokova, uključujući otkrivanje ""lažnih"" flash pogona","Provést kontrolu vadných bloků, včetně detekce ""falešných"" bloků. flash disky","Udøv dårlige blokke tjeks, inklusiv opdagelse af ""falske"" flashdrev","Controles uitvoeren op slechte blokken, inclusief detectie van ""valse"" flashdrives","Suorita viallisten lohkojen tarkistuksia, sisältäen ""valheellisten"" muistitikkujen tunnistamisen","Executez un test de mauvais secteurs avec detection des ""fake drives\","Durchführung von Prüfungen auf fehlerhafte Blöcke, einschließlich der Erkennung von ""gefälschten"" Flash-Laufwerken","Εκτελέστε ελέγχους εσφαλμένων block, συμπεριλαμβανομένου του εντοπισμού ""ψευδών"" μονάδων flash","ביצוע בדיקות אחר בלוקים (אזורים) פגומים, כולל זיהוי של כונני הבזק ""מזוייפים\","Hibás blokkok ellenőrzése, beleértve a ""hamis"" flash meghajtók detektálását","Lakukan cek Blok yang buruk, termasuk deteksi USB Flash Disk ""PALSU\","Esegui controlli dei blocchi danneggiati, incluso il rilevamento di unità flash ""false\","不良ブロックチェック及び容量詐欺ドライブの検知を行います。","""위조"" 플래시 드라이브 감지를 포함하여 불량 블록 검사 수행","Izpilda bojāto bloku pārbaudi ieskaitot ""falsificēto"" nesēju noteikšanu","Atlikite blogų blokų patikrinimus, įskaitant ""netikrų"" flash diskų aptikimą","Melakukan pemeriksaan blok buruk, termasuk pengesanan pemacu kilat ""palsu\","Utfør sjekk for dårlige sektorer, inkludert sjekk for forfalskede flash disker","بررسی بلوک های بد، از جمله تشخیص درایوهای فلش ""جعلی"" را انجام دهید","Sprawdź dysk pod względem spójności danych lub wykryj ""nieoryginalny"" pendrive","Executar verificações de blocos defeituosos, incluindo detecção de unidades flash ""falsificadas\","Executar verificações de blocos inválidos, incluindo a deteção de unidades flash ""falsas\","Verifică blocuri rele, incluzând detectarea de drive-uri flash ""false\","Проверка на плохие блоки, обнаружение ""поддельных"" флешек","Izvršite provere loših blokova, uključujući otkrivanje ""lažnih"" fleš diskova","Vykonajte kontroly zlých blokov vrátane detekcie „falošných"" prenosných diskov","Izvajanje preverjanj slabih blokov, vključno z odkrivanjem »lažnih« bliskavic","Realice comprobaciones de bloques defectuosos, incluida la detección de unidades flash ""falsas\","Utför kontroll av trasiga block, inklusive upptäckt av ""falska"" USB-minnen","ตรวจสอบจุดบกพร่อง รวมไปถึงการทดสอบแฟลชไดรฟ์ว่าเป็น ""ของปลอม"" หรือไม่","""Sahte"" flash sürücülerin tespiti de dahil olmak üzere hatalı blok kontrolleri gerçekleştirin","Перевірка дисків (включаючи фальшиві диски)","Thực hiện kiểm tra điểm lỗi, bao gồm phát hiện ổ đĩa ""giả\"
"Feature12","711","Text","","Download official Microsoft Windows retail ISOs","قم بتنزيل ملفات ISO الرسمية الخاصة بـ Microsoft Windows","Изтегляне на официални Microsoft Windows ISO образи","下载微软官方 Windows 镜像","下載微軟官方 Windows 映像檔","Preuzimanje službenih ISO-ova za maloprodaju sustava Microsoft Windows","Stažení oficiálních souborů ISO systému Microsoft Windows","Hent officielle Microsoft Windows detail ISOer","Officiële Microsoft Windows retail ISO's downloaden","Lataa virallisia Microsoft Windowsin jälleenmyyntiversion ISO-levykuvia","Téléchargez des images ISOs commerciales officielles de Microsoft Windows","Offizielle Microsoft Windows-ISOs herunterladen","Κατεβάστε τα επίσημα retail ISO των Microsoft Windows","הורדת קובצי ה־ISO הקמעונאיים הרשמיים של Microsoft Windows","Hivatalos Microsoft Windows kiskereskedelmi ISO képfájlok letöltése","Unduh ISO Microsoft Windows resmi","Scarica le ISO ufficiali di Microsoft Windows","マイクロソフト公式のWindows ISOをダウンロードします。","공식 Microsoft Windows 리테일 ISO 다운로드","Lejupielādē oficiālos Microsoft ISO failus","Atsisiųskite oficialius Microsoft Windows mažmeninės prekybos ISO","Muat turun rasmi ISO runcit Microsoft Windows","Last ned offisielle Windows ISOer","ISO های رسمی ماکروسافت را دریافت کنید","Pobierz oficjalny obraz ISO systemu Microsoft Windows","Baixar ISOs oficiais do Microsoft Windows","Transferir ISOs oficiais do Microsoft Windows Retail","Descarcă un Microsoft Windows ISO oficial de vânzare","Загрузка официальных ISO-образов Windows","Preuzmite zvanične Microsoft Windows maloprodajne ISO-ove","Stiahnite si oficiálne ISO pre Microsoft Windows","Prenos uradnih Microsoft Windows maloprodaja ISOs","Descargue los ISO oficiales de Microsoft Windows","Ladda ner officiella Microsoft Windows ISO-filer","ดาวน์โหลดไฟล์ ISO ของ Microsoft Windows จากเว็บไซต์ทางการของ Microsoft","Resmi Microsoft Windows Retail ISO'larını indirin","Завантаження офіційних образів Microsoft Windows","Tải xuống các tệp Microsoft Windows ISO bán lẻ chính thức"

1 Field ID Type (Type) default en-us ar-sa bg-bg zh-cn zh-tw hr-hr cs-cz da-dk nl-nl fi-fi fr-fr de-de el-gr he-il hu-hu id-id it-it ja-jp ko-kr lv-lv lt-lt ms-my nb-no fa-ir pl-pl pt-br pt-pt ro-ro ru-ru sr-latn-rs sk-sk sl-si es-es sv-se th-th tr-tr uk-ua vi-vn
2 Description 2 Text Rufus is a utility that helps format and create bootable USB flash drives, such as USB keys/pendrives, memory sticks, etc. • Official site: https://rufus.ie • Source Code: https://github.com/pbatard/rufus • ChangeLog: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt برنامج Rufus هو أداة تساعد في تنسيق وإنشاء أقراص الإقلاع USB، مثل مفاتيح USB، بطاقات الذاكرة، وغيرها. • الموقع الرسمي: https://rufus.ie • كود المصدر: https://github.com/pbatard/rufus • سجل التغييرات: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus е програма, с която можете лесно да форматирате и създавате стартиращи USB устройства, карти с памет и др. • Официален сайт: https://rufus.ie • Изходен код: https://github.com/pbatard/rufus • Лог на промените: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus 是一个帮助您格式化并创建可启动 USB 驱动器(如 U 盘和存储卡)的工具。 • 官方网站: https://rufus.ie • 源代码: https://github.com/pbatard/rufus • 更新日志: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus 是個能格式化並製作可開機 USB 快閃磁碟 (如 USB 隨身碟等) 的工具。 • 官方網站: https://rufus.ie • 原始碼: https://github.com/pbatard/rufus • 更新日誌: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus je aplikacija koja olakšava formatiranje i stvaranje USB pokretačkih jedinica. • Službena stranica: https://rufus.ie • Šifra izvora: https://github.com/pbatard/rufus • ChangeLog: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus je nástroj, který pomáhá formátovat a vytvářet bootovací USB flash disky, jako jsou USB klíče, paměťové karty atd. • Oficiální stránky: https://rufus.ie • Zdrojový kód: https://github.com/pbatard/rufus • Protokol změn: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus er et værktøj, der hjælper med at formatere og skabe startbare USB-flashdrev, såsom USB-nøgler/USB-pinde, USB-stik, osv. • Officiel side: https://rufus.ie • Kildekode: https://github.com/pbatard/rufus • Ændrings log: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus is een programma dat helpt bij het formatteren en aanmaken van opstartbare USB-flash-drives, zoals USB-sticks, geheugensticks, enz. • Officiële site: https://rufus.ie • Broncode: https://github.com/pbatard/rufus • Wijzigingslog: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus on ohjelma, joka auttaa alustamaan ja luomaan boottaavia USB-laitteita, kuten esimerkiksi USB-avaimia, muistitikkuja jne. • Virallinen sivusto: https://rufus.ie • Lähdekoodi: https://github.com/pbatard/rufus • Muutosloki: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus est un utilitaire permettant de formater et de créer des média USB amorçables, tels que clés USB, mémoire flash, etc. • Site officiel : https://rufus.ie • Code source: https://github.com/pbatard/rufus • ChangeLog: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus ist ein Werkzeug, welches dabei hilft, bootfähige USB-Laufwerke zu erstellen, wie beispielweise USB-Keys, Speichersticks usw. • Offizielle Website: https://rufus.ie • Quellcode: https://github.com/pbatard/rufus • Änderungsprotokoll: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus ist ein Werkzeug, das beim Formatieren und Erstellen bootfähiger USB-Flash-Laufwerke wie USB-Sticks, Speichersticks usw. hilft. • Offizielle Website: https://rufus.ie • Quellcode: https://github.com/pbatard/rufus • Änderungsprotokoll: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Το Rufus είναι ένα βοηθητικό πρόγραμμα που βοηθά στη διαμόρφωση και τη δημιουργία μονάδων flash USB με δυνατότητα εκκίνησης, όπως κλειδιά USB/pendrives,κάρτες μνήμης κ.λπ. • Επίσημος ιστότοπος: https://rufus.ie • Πηγαίος κώδικας: https://github.com/pbatard/rufus • Αρχείο καταγραφής αλλαγών: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus הוא כלי המסייע באתחול ויצירת כונני הבזק מסוג USB הניתנים לאתחול, כמו דיסק און קי, כרטיסי זיכרון וכו׳. • האתר הרשמי: https://rufus.ie • קוד מקור: https://github.com/pbatard/rufus • הערות שחרור: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt A Rufus egy segédprogram, amellyel bootolható USB flash meghajtókat formázhat és készíthet, például USB kulcsokat/pendrive-okat, memóriakártyákat, stb. • Hivatalos oldal: https://rufus.ie • Forráskód: https://github.com/pbatard/rufus • Változási napló: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus adalah alat yang membantu untuk memformat dan membuat perangkat USB flash menjadi bootable, seperti USB flashdisk, kartu memori, dll. • Situs resmi: https://rufus.ie • Kode Sumber: https://github.com/pbatard/rufus • Catatan pergantian: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus è un programma che ti aiuta a formattare e creare una unità flash USB avviabile, come una unità USB, memory stick, ecc. • Sito ufficiale: https://rufus.ie • Codice sorgente: https://github.com/pbatard/rufus • Novità: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus (ルーファス) とは、起動可能なUSBフラッシュドライブ(USBメモリなど)を作成したり、フォーマットをするためのソフトウェアです。 • 公式サイト: https://rufus.ie • ソースコード: https://github.com/pbatard/rufus • 変更履歴: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus는 USB 메모리 및 플래시 드라이브를 포맷하고 부팅할 수 있도록 만드는 도구입니다. • 공식 사이트: https://rufus.ie • 소스 코드: https://github.com/pbatard/rufus • 변경 사항: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus ir instruments ar kura palīdzību var formatēt un izveidot USB ielādes ierīces uz tādiem nesējiem, kā USB pieslēguma zibatmiņas, atmiņas kartes u.c. • Oficiālā mājas lapa: https://rufus.ie • Sākotnējais kods: https://github.com/pbatard/rufus • Izmaiņas: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus programa leidžia suženklinti ir sukurti sistemų paleidimo laikmenas, kaip pvz. USB atmintukus, atminties korteles ir pan. • Oficiali svetainė: https://rufus.ie • Šaltinio kodas: https://github.com/pbatard/rufus • Pakeitimų žurnalas: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus adalah utiliti yang membantu memformat dan mencipta pemacu kilat USB boot, seperti pemacu pen/kekunci USB, kayu memori, dan lain-lain. • Laman rasmi: https://rufus.ie • Kod Sumber: https://github.com/pbatard/rufus • ChangeLog: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus er et verktøy som hjelper til med å formatere og lage oppstartbare USB-stasjoner, for eksempel USB-minnepinner, USB-harddisker, og lignende. • Offisiell webside: https://rufus.ie • Kildekode: https://github.com/pbatard/rufus • Endringslogg: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus ابزاری است که به فرمت و ایجاد درایوهای فلش USB قابل بوت، مانند کلیدهای USB/pendrives، مموری استیک ها و غیره به شما کمک می کند. • سایت رسمی: https://rufus.ie • منبع کد: https://github.com/pbatard/rufus • لیست تغییرات https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus to narzędzie, które pomaga formatować i tworzyć dyski rozruchowe flash USB, takie jak klucze USB, pendrive-y itp. • Oficjalna strona: https://rufus.ie • Kod źródłowy: https://github.com/pbatard/rufus • Zmiany: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus é um utilitário que ajuda a formatar e a criar unidades flash USB inicializáveis, tais como pendrives USB, cartões de memória, etc. • Site oficial: https://rufus.ie • Código fonte: https://github.com/pbatard/rufus • Registro de alterações: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus é um utilitário que ajuda a formatar e a criar unidades USB inicializáveis, tais como dispositivos USB/pendrives, cartões de memória, etc. • Site oficial: https://rufus.ie • Código fonte: https://github.com/pbatard/rufus • Alterações: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus este un utilitar care ajută la formatarea și crearea de drive-uri USB bootabile, precum cheile sau pendriverele USB, unități de memorie, etc. • Site official: https://rufus.ie • Codul Sursei: https://github.com/pbatard/rufus • Listă de schimbări: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus - это утилита для форматирования и создания загрузочных флеш-накопителей USB. • Официальный сайт: https://rufus.ie • Исходный код: https://github.com/pbatard/rufus • Изменения: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus je uslužni program koji pomaže u formatiranju i kreiranju USB fleš diskova koji se mogu pokretati, kao što su USB ključevi, memorijski štapići itd. • Zvaničan sajt: https://rufus.ie • Izvorni kod: https://github.com/pbatard/rufus • Evidencija promena: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus je utilita, ktorá vám pomôže naformátovať a vytvoriť bootovacie jednotky USB Flash, ako sú napr. USB kľúče, pamäťové karty, atď. • Oficiálna stránka: https://rufus.ie • Zdrojový kód: https://github.com/pbatard/rufus • Zoznam zmien: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus je program za formatiranje in ustvarjanje zagonskih naprav USB. • Uradna stran: https://rufus.ie • Šifra vira: https://github.com/pbatard/rufus • Spremenitve: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus es una utilidad que le ayuda a formatear y crear dispositivos flash booteables, como «pendrives», tarjetas de memoria, etcétera. • Sitio oficial https://rufus.ie • Código fuente https://github.com/pbatard/rufus • Registro de cambios https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus är ett program som hjälper dig formatera och skapa startbara USB-diskar, så som USB-minnen, minneskort, etc. • Officiell webbplats: https://rufus.ie • Källkod: https://github.com/pbatard/rufus • Ändringslogg: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus คือ โปรแกรมที่ช่วยฟอร์แมต และสร้างไดรฟ์บูต USB จาก USB keys, pendrives, memory sticks เป็นต้น • เว็บไซต์ทางการ: https://rufus.ie • ซอร์สโค้ด: https://github.com/pbatard/rufus • บันทึกการเปลี่ยนแปลง: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus, USB anahtar/bellekler, hafıza kartları vb. USB sürücüleri, biçimlendirmeye ve önyüklemeli hale getirmeye yardımcı olan bir araçtır. • Resmi site: https://rufus.ie • Kaynak Kodu: https://github.com/pbatard/rufus • Sürüm Notları https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus це утиліта, яка допомагає форматувати та створювати завантажувальні флешки, картки пам'яті, тощо. • Офіційний сайт: https://rufus.ie • Сирцевий код: https://github.com/pbatard/rufus • Список змін: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus là một tiện ích giúp định dạng và tạo khả năng khởi động cho USB, chẳng hạn như thẻ USB/đĩa di động, thẻ nhớ, vv. • Trang web chính thức: https://rufus.ie • Mã nguồn: https://github.com/pbatard/rufus • Nhật ký thay đổi: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt Rufus là một tiện ích giúp định dạng và tạo khả năng khởi động cho các thiết bị USB, ví dụ như thẻ USB/đĩa di động, thẻ nhớ, v.v... • Trang web chính thức: https://rufus.ie • Mã nguồn: https://github.com/pbatard/rufus • Nhật ký thay đổi: https://github.com/pbatard/rufus/blob/master/ChangeLog.txt
3 ReleaseNotes 3 Text • Add a new setup.exe wrapper to bypass Windows 11 24H2 in-place upgrade restrictions • Add TimeZone to regional options replication • Set local account passwords to not expire by default • Fix an error when trying to write compressed VHD images • Fix an error when invoking Rufus from the PowerShell commandline • Improve revoked UEFI bootloaders check to support Linux SBAT, Windows SVN and cert DBX • Improve support for ReactOS boot media • Filter out the new Bitdefender VHDs • Filter disallowed characters in local account names • Improve Microsoft Dev Drive detection (courtesy of Martin Kuschnik) • Improve the pre-formatting partition cleanup code • Improve error reporting on ISO extraction issues • Improve detection of drives with long hardware IDs (typically SSDs) • Improve conflicting process reporting • Improve support for Nutanix and umbrelOS ISOs • Fix a TOCTOU vulnerability in Fido script execution (CVE-2026-2398, reported by @independent-arg) • Fix replacement vulnerabilities for diskcopy.dll and oscdimg.exe • Fix FFU image creation being erroneously invocated, when trying to save an ISO image • Fix saving of ISO images to paths that contain spaces • Update UEFI:NTFS and UEFI DBXs to latest
4 Title 4 Text Rufus
32 MobileScreenshot1 200 Relative path (or URL to file in Partner Center)
33 MobileScreenshot2 201 Relative path (or URL to file in Partner Center)
34 MobileScreenshot3 202 Relative path (or URL to file in Partner Center)
35 MobileScreenshot4 203 Relative path (or URL to file in Partner Center)
36 MobileScreenshot5 204 Relative path (or URL to file in Partner Center)
37 MobileScreenshot6 205 Relative path (or URL to file in Partner Center)
38 MobileScreenshot7 206 Relative path (or URL to file in Partner Center)
110 Feature5 704 Text Create BIOS or UEFI bootable drives, including UEFI bootable NTFS إنشاء BIOS أو محركات أقراص UEFI قابلة للإقلاع ، بما في ذلك UEFI NTFS القابل للتشغيل Създаване на BIOS или UEFI стартиращи устройства, включително UEFI стартиращ NTFS 创建 BIOS 或 UEFI 可启动驱动器,包括 UEFI 可启动的 NTFS 驱动器 建立 BIOS 或 UEFI 可開機隨身碟,包括 UEFI 下的可開機 NTFS 隨身碟 Stvaranje BIOS ili UEFI pogona za pokretanje, uključujući UEFI NTFS za pokretanje Vytvořte zaváděcí jednotky BIOS nebo UEFI, včetně zaváděcích souborů NTFS UEFI Lav BIOS eller UEFI opstartsbarer drev, inklusiv UEFI opstartsbarer NTFS BIOS of UEFI opstartbare schijven aanmaken, inclusief UEFI opstartbare NTFS Luo BIOS- tai UEFI-boottaavia asemia, mukaanlukien UEFI-boottaavat NTFS-asemat Créez des disques amorçables BIOS ou UEFI, y compris des disques UEFI amorçables utilisant NTFS Erstellen von BIOS- oder UEFI-bootfähigen Laufwerken, einschließlich UEFI-bootfähigem NTFS Δημιουργήστε μονάδες δίσκου με δυνατότητα εκκίνησης BIOS ή UEFI, συμπεριλαμβανομένων NTFS με δυνατότητα εκκίνησης UEFI יצירת כוננים הניתנים לאתחול ממחשבים התומכים ב־BIOS או UEFI, לרבות כוננים הניתנים לאתחול מ־UEFI, המשתמשים במערכת הקבצים NTFS BIOS-ból vagy UEFI-ből bootolható meghajtók készítése, beleértve az UEFI-ből bootolható NTFS meghajtókat is Buat perangkat BIOS atau UEFI yang dapat di boot, termasuk perangkat NTFS yang dapat di boot oleh UEFI Crea unità avviabili BIOS o UEFI, incluso NTFS avviabile UEFI UEFI:NTFSを含むBIOS及びUEFIで起動可能なドライブを作成します。 UEFI 부팅 가능한 NTFS를 포함하여 BIOS 또는 UEFI 부팅 가능 드라이브 만들기 Izveido BIOS vai UEFI ielādes ierīces, ieskaitot UEFI ielādi no NTFS Sukurkite BIOS arba UEFI įkrovos diskus, įskaitant UEFI įkrovos NTFS Buat pemacu boleh boot BIOS atau UEFI, termasuk NTFS boleh boot UEFI Lag BIOS eller UEFI oppstartbare disker, inkludert UEFI oppstartbar NTFS درایوهای قابل بوت بایوس یا UEFI از جمله NTFS قابل بوت UEFI ایجاد کنید Stwórz dysk rozruchowy BIOS lub UEFI, włączając bootowalny dysk UEFI NTFS Criar discos inicializáveis ​​BIOS ou UEFI, inclusive discos UEFI inicializáveis ​​usando NTFS Criar discos inicializáveis ​​BIOS ou UEFI, inclusive discos UEFI inicializáveis ​​usando NTFS Crează discuri bootabile BIOS sau UEFI, incluzând NTFS-uri bootabile de UEFI Создание загрузочных дисков BIOS или UEFI, включая загрузочный UEFI NTFS Kreiranje BIOS ili UEFI disk jedinica za pokretanje sistema, uključujući NTFS sa UEFI pokretanjem sistema Vytvorte bootovacie jednotky systému BIOS alebo UEFI vrátane UEFI bootovateľnej jednotky NTFS Ustvarite zagonske pogone BIOS ali UEFI, vključno z UEFI bootable NTFS Cree unidades de arranque BIOS o UEFI, incluido NTFS de arranque UEFI Skapa BIOS- eller UEFI-startbara enheter, inklusive UEFI-startbar NTFS สร้างไดรฟ์บูตสำหรับระบบ BIOS หรือ UEFI และ UEFI bootable NTFS UEFI önyüklenebilir NTFS dahil BIOS ya da UEFI önyüklenebilir sürücüler oluşturun Створення завантажувальних пристроїв BIOS чи UEFI, включаючи завантажувальний UEFI NTFS Tạo ổ đĩa có thể khởi động với hệ thống BIOS hoặc UEFI, bao gồm cả NTFS có thể khởi động với UEFI
111 Feature6 705 Text Create 'Windows To Go' drives إنشاء محركات أقراص "Windows To Go\ Създаване на 'Windows To Go' устройства 创建 'Windows To Go' 驱动器 建立 'Windows To Go' 隨身碟 Stvaranje pogona "Windows To Go\ Vytvoření jednotek "Windows To Go Lav 'Windows To Go' drev 'Windows To Go'-schijven aanmaken Luo 'Windows To Go' -asemia Créez des disques 'Windows To Go' Erstellen von "Windows To Go"-Laufwerken Erstellen von 'Windows To Go'-Laufwerken Δημιουργήστε μονάδες δίσκου "Windows To Go\ יצירת כונני Windows To Go 'Windows To Go' meghajtók készítése Buat perangkat Windows To Go Crea unità 'Windows To Go' Windows To Goドライブを作成します。 'Windows To Go' 드라이브 만들기 Izveido 'Windows To Go' ierīces Sukurkite "Windows To Go" diskus Buat pemacu 'Windows To Go' Lag 'Windows To Go' disker درایوهای "Windows To Go" را ایجاد کنید Stwórz dysk 'Windows To Go' Criar discos 'Windows To Go' Criar discos 'Windows To Go' Crează discuri 'Windows To Go' Создание дисков Windows To Go Kreiranje disk jedinica "Windows to Go\ Vytvorte jednotky „Windows To Go\ Ustvarjanje pogonov »Windows To Go' Cree unidades 'Windows To Go' Skapa "Windows To Go"-enheter สร้างไดรฟ์ของ 'Windows To Go' 'Windows To Go' sürücüleri oluşturun Створення пристроїв 'Windows To Go' Tạo ổ đĩa 'Windows To Go'
112 Feature7 706 Text Create Windows 11 installation drives for PCs that don't have TPM or Secure Boot قم بإنشاء محركات تثبيت ويندوز 11 لأجهزة الكمبيوتر التي لا تحتوي على TPM أو الإقلاع الآمن (Secure Boot) Създаване на Windows 11 инсталационно устройство за компютри, които нямат TPM или Secure Boot 为没有 TPM 或安全启动功能的电脑创建 Windows 11 安装驱动器 為沒有 TPM 或安全開機功能的電腦建立 Windows 11 安裝隨身碟 Stvaranje instalacijskih pogona sustava Windows 11 za PC-jeve koji nemaju TPM ili Sigurno pokretanje Vytvoření instalačních jednotek systému Windows 11 pro počítače bez čipu TPM nebo Secure Boot Lav Windows 11 installations drev for PCer der ikker har TPM eller Secure Boot Windows 11 installatieschijven aanmaken voor pc's die geen TPM of Secure Boot hebben Luo Windows 11 -asennusasemia tietokoneille, jotka eivät tue TPM- tai Secure Boot -ominaisuuksia Créez des disques d'installation Windows 11 pour des PCs qui ne disposent pas de TPM ou Secure Boot Erstellen von Windows 11-Installationslaufwerken für PCs ohne TPM oder Secure Boot Δημιουργήστε μονάδες εγκατάστασης των Windows 11 για υπολογιστές που δεν διαθέτουν TPM ή Ασφαλή Εκκίνηση יצירת כונני התקנה של Windows 11 עבור מחשבים שאין להם TPM או Secure Boot Windows 11 telepítési meghajtók készítése olyan PC-k számára, amelyek nem rendelkeznek TPM vagy Secure Boot funkciókkal Buat perangkat pemasang Windows 11 untuk PC yang tidak mempunyai TPM atau Secure Boot Crea unità di installazione di Windows 11 per PC che non dispongono di TPM o avvio protetto TPM及びセキュアブート非対応のPC向けのWindows 11インストールドライブを作成します TPM 또는 보안 부팅이 없는 PC용 Windows 11 설치 드라이브 만들기 Izveido Windows 11 instalācijas ierīces datoriem, kam nav TPM vai Secure Boot Sukurkite Windows 11 diegimo diskus kompiuteriams, kuriuose nėra TPM arba saugaus įkrovimo Buat pemacu pemasangan Windows 11 untuk PC yang tidak mempunyai TPM atau But Selamat Lag oppstartsmedia for Windows 11 som ikke krever TPM eller Secure Boot درایوهای نصب ویندوز 11 را برای رایانه هایی که TPM یا Secure Boot ندارند ایجاد کنید Twórz dyski instalacyjne systemu Windows 11 dla komputerów, które nie posiadają modułu TPM ani Secure Boot Criar discos de instalação do Windows 11 para PCs que não possuem TPM ou Secure Boot Criar discos de instalação do Windows 11 para PCs que não possuem TPM ou Arranque Seguro Crează drive de instalare Windows 11 pe computere care nu au TPM sau Bootare Securizată Создание установочных дисков Windows 11 для компьютеров без TPM или безопасной загрузки Kreiranje windows 11 instalacionih disk jedinica za računare koji nemaju TPM ili bezbedno pokretanje sistema Vytvorte inštalačné jednotky Windows 11 pre počítače, ktoré nemajú modul TPM, ani Secure Boot Ustvarjanje namestitvenih pogonov za Windows 11 za računalnike, ki nimate TPM ali Varnega zagona Cree unidades de instalación de Windows 11 para PC que no tienen TPM o Arranque seguro Skapa installationsenheter till Windows 11 för datorer som inte har TPM eller säker start สร้างไดรฟ์ติดตั้ง Windows 11 สำหรับคอมพิวเตอร์ที่ไม่มี TPM หรือ Secure Boot TPM ya da Güvenli Önyüklemeye sahip olmayan bilgisayarlar için Windows 11 kurulum sürücüleri oluşturun Створення інсталяційних дисків Windows 11 для ПК, які не мають TPM чи Secure Boot Tạo ổ đĩa cài đặt Windows 11 cho các máy tính không có TPM hoặc Secure Boot
113 Feature8 707 Text Create persistent Linux partitions إنشاء Persistent Linux partitions Създаване на устойчиви Linux дялове 创建持久 Linux 分区 建立持續性 Linux 磁區 Stvaranje trajnih Linux particija Vytvoření trvalých oddílů systému Linux Lav vedvarende Linux adskillelser Persistent Linux partities aanmaken Luo pysyviä Linux-osioita Créez des partitions persistentes pour Linux Persistente Linux-Partitionen erstellen Δημιουργήστε μόνιμα διαμερίσματα Linux יצירת מחיצות Linux קבועות Tartós Linux partíciók készítése Buat partisi Linux yang tetap/persistent Crea partizioni persistenti Linux 記録用Linuxパーティションを作成します。 영구 리눅스 파티션 만들기 Izveido pastāvīgas Linux partīcijas Sukurkite nuolatinius Linux skaidinius Buat partition Linux berterusan Lag persistente Linux partisjoner ایجاد پارتیشن های لینوکس دائمی Utwórz trwałe partycje Linux Criar partições persistentes para Linux Crie partições persistentes para Linux Crează partiție de Linux persistentă Создание постоянных разделов Linux Kreiranje upornih Linux particija Vytvorte trvalé oblasti systému Linux Ustvarjanje trajnih Linux particij Crear particiones persistentes de Linux Skapa beständiga Linux-partitioner สร้าง Linux partition แบบ persistent Kalıcı Linux bölümleri oluşturun Створення розділу збереження Linux Tạo phân vùng Linux liên tục
114 Feature9 708 Text Create VHD/DD images of the selected drive إنشاء صور VHD / DD لمحرك الأقراص المحدد Създаване на VHD/DD образи на избраното устройство 为选择的驱动器创建 VHD/DD 镜像 為選取的磁碟機建立 VHD/DD 映像檔 Stvaranje VHD/DD slika odabranog pogona Vytvoření obrazů VHD/DD z vybrané jednotky Lav VHD/DD billeder af det valgte drev VHD/DD-images van de geselecteerde schijf aanmaken Luo VHD/DD-kuvia valitusta asemasta Créez des images VHD/DD du périphérique sélectionné VHD/DD-Images des ausgewählten Laufwerks erstellen Δημιουργήστε εικόνες VHD/DD της επιλεγμένης μονάδας δίσκου יצירת קובצי תמונה מסוג VHD/DD של הכונן שנבחר VHD/DD képfájl készítése a kiválasztott meghajtóról Buat image VHD/DD dari penyimpanan yang dipilih Crea immagini VHD/DD dell'unità selezionata 選択されたドライブのVHD/DDイメージを作成します。 선택한 드라이브의 VHD/DD 이미지 만들기 Izveido izvēlētā diska VHD/DD virtuālos attēlus Sukurkite pasirinkto disko VHD / DD vaizdus Buat imej VHD/DD bagi pemacu yang dipilih Lag VHD/DD speilinger av valgt disk تصاویر VHD/DD از درایو انتخاب شده ایجاد کنید Stwórz obraz VHD/DD z wybranego dysku Criar imagens VHD/DD do dispositivo selecionado Criar imagens VHD/DD do dispositivo selecionado Crează imagini VHD/DD de pe drive-ul selectat Создание образов VHD/DD выбранного диска Kreiranje VHD/DD slika izabrane disk jedinice Vytvorte obrazy VHD/DD z vybratej jednotky Ustvarjanje VHD/DD slik izbranega pogona Cree imágenes VHD/DD de la unidad seleccionada Skapa VHD/DD-avbilder av den valda enheten สร้างอิมเมจไฟล์แบบ VHD/DD จากไดรฟ์ที่เลือก Seçilen sürücünün VHD/DD yansılarını oluşturun Створення образів VHD/DD з вибраних дисків Tạo tệp VHD/DD từ ổ đĩa đã chọn
115 Feature10 709 Text Compute MD5, SHA-1, SHA-256 and SHA-512 checksums of the selected image حساب المجاميع الإختبارية MD5 و SHA-1 و SHA-256 و SHA-512 للصورة المحددة Изчисляване на MD5, SHA-1, SHA-256 и SHA-512 чексуми на избраният образ 计算被选择镜像的 MD5、SHA-1、SHA-256 和 SHA-512 校验码 計算被選取映像的 MD5、SHA-1、SHA-256 和 SHA-512 檢查碼 Izračunajte kontrolne zbrojeve odabrane slike MD5, SHA-1, SHA-256 i SHA-512 Výpočet kontrolních součtů MD5, SHA-1, SHA-256 a SHA-512 vybraného obrazu Beregn MD5, SHA-1, SHA-256 og SHA-512 checksums af det valgte billede MD5, SHA-1, SHA-256 en SHA-512 controlesommen berekenen van de geselecteerde image Laske MD5, SHA-1, SHA-256 ja SHA-512 tarkistussummia valitusta levykuvasta Calculez les sommes de contrôle MD5, SHA-1, SHA-256 et SHA-512 de l'image sélectionnée Berechnung von MD5-, SHA-1-, SHA-256- und SHA-512-Prüfsummen für das ausgewählte Bild Berechnung von MD5-, SHA-1-, SHA-256- und SHA-512-Prüfsummen für das ausgewählte Image Υπολογίστε τα αθροίσματα ελέγχου MD5, SHA-1, SHA-256 και SHA-512 της επιλεγμένης εικόνας חישוב סיכומי ביקורת מסוג MD5,‏ SHA-1,‏ SHA-256 ו־SHA-512 של קובץ התמונה שנבחרה A kiválasztott képfájl MD5, SHA-1, SHA-256 és SHA-512 ellenőrző összegének kiszámítása Hitung checksum MD5, SHA-1, SHA-256 dan SHA-512 dari image yang dipilih Calcola i checksum MD5, SHA-1, SHA-256 e SHA-512 dell'immagine selezionata 選択されたイメージのMD5、SHA-1、SHA-256及びSHA-512チェックサムを計算します。 선택한 이미지의 MD5, SHA-1, SHA-256 및 SHA-512 체크섬 계산 Izskaitļo izvēlētā virtuālā attēla MD5, SHA-1, SHA-256 un SHA-512 kontrolsummas Apskaičiuokite pasirinkto vaizdo MD5, SHA-1, SHA-256 ir SHA-512 kontrolines sumas Kira MD5, SHA-1, SHA-256 dan SHA-512 checksum imej yang dipilih Kalkuler MD5, SHA-1, SHA-256 og SHA-512 sjekksummer fra valgt speiling MD5، SHA-1، SHA-256 و SHA-512 را برای تصویر انتخابی محاسبه کنید Oblicz sumy kontrolne MD5, SHA-1, SHA-256 i SHA-512 dla wybranego obrazu Calcular somas de verificação MD5, SHA-1, SHA-256 e SHA-512 da imagem selecionada Calcular checksums MD5, SHA-1, SHA-256 e SHA-512 da imagem selecionada Compută MD5, SHA-1, SHA-256 și SHA-512 suma de control ale imaginilor selectate Вычисление контрольных сумм MD5, SHA-1, SHA-256 и SHA-512 выбранного образа Izračunajte MD5, SHA-1, SHA-256 i SHA-512 kontrolne preglede izabrane slike Vypočítajte kontrolné súčty vybratého obrazu (MD5, SHA-1, SHA-256 a SHA-512) Račun MD5, SHA-1, SHA-256 in SHA-512 kontrolni vsoti izbrane slike Calcule las sumas de comprobación MD5, SHA-1, SHA-256 y SHA-512 de la imagen seleccionada Beräkna kontrollsummor MD5, SHA-1, SHA-256 och SHA-512 för den valda avbilden คำนวณรหัส MD5, SHA-1, SHA-256, SHA-512 ของไฟล์อิมเมจที่เลือก Seçilen yansının MD5, SHA-1, SHA-256 ve SHA-512 sağlama toplamlarını hesaplayın Обчислення контрольних сум MD5, SHA-1, SHA-256 та SHA-512 для вибраних образів Tính tổng kiểm MD5, SHA-1, SHA-256 và SHA-512 của tệp đã chọn
116 Feature11 710 Text Perform bad blocks checks, including detection of "fake" flash drives إجراء فحوصات كتل تالفة ، بما في ذلك الكشف عن محركات أقراص فلاش "زائفة\ Проверяване за лоши блокове, включително засичане на "фалшиви" устройства 执行坏块检查,包括对”假“U盘的检测 執行壞軌檢查,包括對”假“USB 快閃磁碟 的偵測 Izvršite provjere loših blokova, uključujući otkrivanje "lažnih" flash pogona Provést kontrolu vadných bloků, včetně detekce "falešných" bloků. flash disky Udøv dårlige blokke tjeks, inklusiv opdagelse af "falske" flashdrev Controles uitvoeren op slechte blokken, inclusief detectie van "valse" flashdrives Suorita viallisten lohkojen tarkistuksia, sisältäen "valheellisten" muistitikkujen tunnistamisen Executez un test de mauvais secteurs avec detection des "fake drives\ Durchführung von Prüfungen auf fehlerhafte Blöcke, einschließlich der Erkennung von "gefälschten" Flash-Laufwerken Εκτελέστε ελέγχους εσφαλμένων block, συμπεριλαμβανομένου του εντοπισμού "ψευδών" μονάδων flash ביצוע בדיקות אחר בלוקים (אזורים) פגומים, כולל זיהוי של כונני הבזק "מזוייפים\ Hibás blokkok ellenőrzése, beleértve a "hamis" flash meghajtók detektálását Lakukan cek Blok yang buruk, termasuk deteksi USB Flash Disk "PALSU\ Esegui controlli dei blocchi danneggiati, incluso il rilevamento di unità flash "false\ 不良ブロックチェック及び容量詐欺ドライブの検知を行います。 "위조" 플래시 드라이브 감지를 포함하여 불량 블록 검사 수행 Izpilda bojāto bloku pārbaudi ieskaitot "falsificēto" nesēju noteikšanu Atlikite blogų blokų patikrinimus, įskaitant "netikrų" flash diskų aptikimą Melakukan pemeriksaan blok buruk, termasuk pengesanan pemacu kilat "palsu\ Utfør sjekk for dårlige sektorer, inkludert sjekk for forfalskede flash disker بررسی بلوک های بد، از جمله تشخیص درایوهای فلش "جعلی" را انجام دهید Sprawdź dysk pod względem spójności danych lub wykryj "nieoryginalny" pendrive Executar verificações de blocos defeituosos, incluindo detecção de unidades flash "falsificadas\ Executar verificações de blocos inválidos, incluindo a deteção de unidades flash "falsas\ Verifică blocuri rele, incluzând detectarea de drive-uri flash "false\ Проверка на плохие блоки, обнаружение "поддельных" флешек Izvršite provere loših blokova, uključujući otkrivanje "lažnih" fleš diskova Vykonajte kontroly zlých blokov vrátane detekcie „falošných" prenosných diskov Izvajanje preverjanj slabih blokov, vključno z odkrivanjem »lažnih« bliskavic Realice comprobaciones de bloques defectuosos, incluida la detección de unidades flash "falsas\ Utför kontroll av trasiga block, inklusive upptäckt av "falska" USB-minnen ตรวจสอบจุดบกพร่อง รวมไปถึงการทดสอบแฟลชไดรฟ์ว่าเป็น "ของปลอม" หรือไม่ "Sahte" flash sürücülerin tespiti de dahil olmak üzere hatalı blok kontrolleri gerçekleştirin Перевірка дисків (включаючи фальшиві диски) Thực hiện kiểm tra điểm lỗi, bao gồm phát hiện ổ đĩa "giả\
117 Feature12 711 Text Download official Microsoft Windows retail ISOs قم بتنزيل ملفات ISO الرسمية الخاصة بـ Microsoft Windows Изтегляне на официални Microsoft Windows ISO образи 下载微软官方 Windows 镜像 下載微軟官方 Windows 映像檔 Preuzimanje službenih ISO-ova za maloprodaju sustava Microsoft Windows Stažení oficiálních souborů ISO systému Microsoft Windows Hent officielle Microsoft Windows detail ISOer Officiële Microsoft Windows retail ISO's downloaden Lataa virallisia Microsoft Windowsin jälleenmyyntiversion ISO-levykuvia Téléchargez des images ISOs commerciales officielles de Microsoft Windows Offizielle Microsoft Windows-ISOs herunterladen Κατεβάστε τα επίσημα retail ISO των Microsoft Windows הורדת קובצי ה־ISO הקמעונאיים הרשמיים של Microsoft Windows Hivatalos Microsoft Windows kiskereskedelmi ISO képfájlok letöltése Unduh ISO Microsoft Windows resmi Scarica le ISO ufficiali di Microsoft Windows マイクロソフト公式のWindows ISOをダウンロードします。 공식 Microsoft Windows 리테일 ISO 다운로드 Lejupielādē oficiālos Microsoft ISO failus Atsisiųskite oficialius Microsoft Windows mažmeninės prekybos ISO Muat turun rasmi ISO runcit Microsoft Windows Last ned offisielle Windows ISOer ISO های رسمی ماکروسافت را دریافت کنید Pobierz oficjalny obraz ISO systemu Microsoft Windows Baixar ISOs oficiais do Microsoft Windows Transferir ISOs oficiais do Microsoft Windows Retail Descarcă un Microsoft Windows ISO oficial de vânzare Загрузка официальных ISO-образов Windows Preuzmite zvanične Microsoft Windows maloprodajne ISO-ove Stiahnite si oficiálne ISO pre Microsoft Windows Prenos uradnih Microsoft Windows maloprodaja ISOs Descargue los ISO oficiales de Microsoft Windows Ladda ner officiella Microsoft Windows ISO-filer ดาวน์โหลดไฟล์ ISO ของ Microsoft Windows จากเว็บไซต์ทางการของ Microsoft Resmi Microsoft Windows Retail ISO'larını indirin Завантаження офіційних образів Microsoft Windows Tải xuống các tệp Microsoft Windows ISO bán lẻ chính thức
118 Feature13 712 Text Download UEFI Shell ISOs قم بتنزيل UEFI Shell ISOs Изтегляне на UEFI Shell образи 下载 UEFI Shell 镜像 下載 UEFI Shell 映像檔 Preuzmite ISO-ove UEFI ljuske Stažení souborů UEFI Shell ISO Hent UEFI Shell ISOer UEFI Shell ISO's downloaden Lataa UEFI Shell ISO-levykuvia Téléchargez des images ISOs du Shell UEFI UEFI-Shell-ISOs herunterladen Κατεβάστε τα ISO Shell UEFI הורדת קובצי ISO של מעטפת UEFI UEFI Shell ISO képfájlok letöltése Unduh Shell ISO UEFI Scarica le ISO della shell UEFI UEFIシェルのISOをダウンロードします。 UEFI Shell ISO 다운로드 Lejupielādē UEFI OS ISO failus Atsisiųskite UEFI Shell ISO Muat turun ISO Shell UEFI Last ned UEFI kommandolinje ISOer ISO های پوسته UEFI را دانلود کنید Ściągnij obrazy ISO UEFI Shell Baixar ISOs do Shell UEFI Transferir ISOs de UEFI Shell Descarcă UEFI Shell ISO-uri Загрузка ISO-образов оболочки UEFI Preuzmite UEFI Shell ISOs Stiahnite UEFI Shell ISO Prenos UEFI Shell ISOs Descargar ISO de UEFI Shell Ladda ner UEFI-skal ISO-filer ดาวน์โหลดไฟล์ ISO ของ UEFI Shell UEFI Shell ISO'larını indirin Завантаження командної оболонки UEFI ISO Tải xuống các tệp UEFI Shell ISO
119 Feature14 713 Text
120 Feature15 714 Text
121 Feature16 715 Text
122 Feature17 716 Text
123 Feature18 717 Text
124 Feature19 718 Text
125 Feature20 719 Text
126 MinimumHardwareReq1 800 Text
127 MinimumHardwareReq2 801 Text
128 MinimumHardwareReq3 802 Text
129 MinimumHardwareReq4 803 Text
130 Feature20 MinimumHardwareReq5 719 804 Text
131 MinimumHardwareReq1 MinimumHardwareReq6 800 805 Text
132 MinimumHardwareReq2 MinimumHardwareReq7 801 806 Text
133 MinimumHardwareReq3 MinimumHardwareReq8 802 807 Text
134 MinimumHardwareReq4 MinimumHardwareReq9 803 808 Text
135 MinimumHardwareReq5 MinimumHardwareReq10 804 809 Text
136 MinimumHardwareReq6 MinimumHardwareReq11 805 810 Text
137 MinimumHardwareReq7 RecommendedHardwareReq1 806 850 Text
138 MinimumHardwareReq8 RecommendedHardwareReq2 807 851 Text
139 MinimumHardwareReq9 RecommendedHardwareReq3 808 852 Text
153 SearchTerm1 SearchTerm6 900 905 Text Boot UEFI Boot الإقلاع (Boot) 启动 啟動 Opstarten Boottaus Amorçable בוט Avvio 起動 부팅 Ielāde Batas Oppstart راه‌اندازی Inicialização Inicializável Bootează Загрузочный boot Zagon Arranque Uppstart Önyükle Отримати Khởi động
154 SearchTerm2 SearchTerm7 901 906 Text USB Windows To Go
155 SearchTerm3 TrailerToPlayAtTopOfListing 902 999 Text Relative path (or URL to file in Partner Center) ISO
156 SearchTerm4 Trailer1 903 1000 Text Relative path (or URL to file in Partner Center) Windows
157 SearchTerm5 Trailer2 904 1001 Text Relative path (or URL to file in Partner Center) Linux
158 SearchTerm6 Trailer3 905 1002 Text Relative path (or URL to file in Partner Center) UEFI
159 SearchTerm7 Trailer4 906 1003 Text Relative path (or URL to file in Partner Center) Windows To Go
269
270
271
272
273
274
275
276
277
278
279
280
281
282

View File

@ -29,7 +29,7 @@ set WDK_PATH=C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x64
set ZIP_PATH=C:\Program Files\7-Zip
set SIGNATURE_SHA1=fc4686753937a93fdcd48c2bb4375e239af92dcb
set MANIFEST=AppxManifest.xml
set ARCHS=x86 x64 arm arm64
set ARCHS=x86 x64 arm64
set DEFAULT_SCALE=200
set OTHER_SCALES=100 125 150 400
set SCALED_IMAGES=LargeTile SmallTile Square44x44Logo Square150x150Logo StoreLogo Wide310x150Logo
@ -69,25 +69,25 @@ for %%a in (%ARCHS%) do (
)
)
rem exiftool.exe can't be installed in the Windows system directories...
if not exist exiftool.exe (
echo exiftool.exe must exist in this directory
rem Use our own get_pe_info executable - source is in this directory
if not exist ..\get_pe_info.exe (
echo ..\get_pe_info.exe must exist in the parent directory. Compile it with MinGW.
goto out
)
rem Make sure we're not trying to create a package from an ALPHA or BETA version!
exiftool -s3 -*InternalName* rufus_x64.exe | findstr /C:"ALPHA" 1>nul && (
..\get_pe_info.exe -i rufus_x64.exe | findstr /C:"ALPHA" 1>nul && (
echo Alpha version detected - ABORTED
goto out
)
exiftool -s3 -*InternalName* rufus_x64.exe | findstr /C:"BETA" 1>nul && (
..\get_pe_info.exe -i rufus_x64.exe | findstr /C:"BETA" 1>nul && (
echo Beta version detected - ABORTED
goto out
)
rem Populate the version from the executable
if "%VERSION_OVERRIDE%"=="" (
exiftool -s3 -*FileVersionNumber* rufus_x64.exe > version.txt
..\get_pe_info.exe -v rufus_x64.exe > version.txt
set /p VERSION=<version.txt
del version.txt
) else (

BIN
res/dbx/amd64_DBXUpdate.bin Normal file

Binary file not shown.

BIN
res/dbx/arm64_DBXUpdate.bin Normal file

Binary file not shown.

BIN
res/dbx/arm_DBXUpdate.bin Normal file

Binary file not shown.

17
res/dbx/dbx_info.h Normal file
View File

@ -0,0 +1,17 @@
// Autogenerated - DO NOT EDIT
#include <stdint.h>
#pragma once
struct {
char* url;
uint64_t timestamp;
} dbx_info[] = {
{ "https://api.github.com/repos/microsoft/secureboot_objects/contents/PostSignedObjects/DBX/x86/DBXUpdate.bin", 1760555920 },
{ "https://api.github.com/repos/microsoft/secureboot_objects/contents/PostSignedObjects/DBX/amd64/DBXUpdate.bin", 1760555920 },
{ "https://api.github.com/repos/microsoft/secureboot_objects/contents/PostSignedObjects/DBX/arm/DBXUpdate.bin", 1740428422 },
{ "https://api.github.com/repos/microsoft/secureboot_objects/contents/PostSignedObjects/DBX/arm64/DBXUpdate.bin", 1740428422 },
{ "https://api.github.com/repos/microsoft/secureboot_objects/contents/PostSignedObjects/DBX/ia64/DBXUpdate.bin", 0 },
{ "https://api.github.com/repos/microsoft/secureboot_objects/contents/PostSignedObjects/DBX/riscv64/DBXUpdate.bin", 0 },
{ "https://api.github.com/repos/microsoft/secureboot_objects/contents/PostSignedObjects/DBX/loongarch64/DBXUpdate.bin", 0 },
};

50
res/dbx/dbx_update.sh Executable file
View File

@ -0,0 +1,50 @@
#!/bin/env bash
# This script downloads the latest UEFI DBXs and creates the dbx_info.h header
github_url="https://api.github.com/"
# Retrieve the commit epoch from a GitHub URL or 0 if not available
get_commit_date() {
url=$1
if [[ "${url}" =~ ^"${github_url}" ]]; then
parts=($(awk -F'contents/' '{ for(i=1;i<=NF;i++) print $i }' <<< ${url}))
date_url="${parts[0]}commits?path=${parts[1]//\//%2F}&page=1&per_page=1"
epoch="$(curl -s -L ${date_url} | python -m json.tool | grep -m1 \"date\": | sed -e 's/^.*\"date\":.*\"\(.*\)\".*/\1/' | date -u -f - +%s)"
fi
echo ${epoch:-0}
}
# Should be in the same order as the ArchType enum in Rufus with the first entry (ARCH_UNKNOWN = 0) skipped
# Note that are GUESSING the RISC-V 64 and LoongArch 64 URLS since there are no DBX revocations for those archs yet.
# Also use api.github.com (which is rate limited) so we don't get the stupid 404 GitHub page on error, which is 10
# times larger than our largest DBX update binary...
declare -a dbx_urls=(
'https://api.github.com/repos/microsoft/secureboot_objects/contents/PostSignedObjects/DBX/x86/DBXUpdate.bin'
'https://api.github.com/repos/microsoft/secureboot_objects/contents/PostSignedObjects/DBX/amd64/DBXUpdate.bin'
'https://api.github.com/repos/microsoft/secureboot_objects/contents/PostSignedObjects/DBX/arm/DBXUpdate.bin'
'https://api.github.com/repos/microsoft/secureboot_objects/contents/PostSignedObjects/DBX/arm64/DBXUpdate.bin'
'https://api.github.com/repos/microsoft/secureboot_objects/contents/PostSignedObjects/DBX/ia64/DBXUpdate.bin'
'https://api.github.com/repos/microsoft/secureboot_objects/contents/PostSignedObjects/DBX/riscv64/DBXUpdate.bin'
'https://api.github.com/repos/microsoft/secureboot_objects/contents/PostSignedObjects/DBX/loongarch64/DBXUpdate.bin'
)
cat << EOF > dbx_info.h
// Autogenerated - DO NOT EDIT
#include <stdint.h>
#pragma once
struct {
char* url;
uint64_t timestamp;
} dbx_info[] = {
EOF
for url in "${dbx_urls[@]}"; do
if [[ ! -z "${url}" ]]; then
dst=$(echo ${url} | cut -f10,11 -d'/' | tr '/' '_')
curl -L -H "Accept: application/vnd.github.v3.raw" "${url}" -o "${dst}"
fgrep -q "Not Found" "${dst}" && :> "${dst}"
fi
echo " { \"${url}\", $(get_commit_date ${url}) }," >> dbx_info.h
done
echo "};" >> dbx_info.h

View File

View File

4
res/dbx/readme.txt Normal file
View File

@ -0,0 +1,4 @@
This directory contains the official UEFI revocation databases, as provided by
https://github.com/microsoft/secureboot_objects/tree/main/PostSignedObjects.
These are used by Rufus to warn the user if a UEFI bootloader has been revoked.

View File

BIN
res/dbx/x86_DBXUpdate.bin Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,5 +1,5 @@
All of the executables found in this repository where extracted from:
https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.3/official/FD13-FullUSB.zip
All of the executables found in this repository where extracted from FreeDOS v1.4:
https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.4/FD14-FullUSB.zip
o COMMAND.COM was extracted from packages\base\freecom.zip
o DISPLAY.EXE was extracted from packages\base\display.zip

Binary file not shown.

View File

@ -1,6 +1,6 @@
This directory contains the Grub4DOS boot records that are used by Rufus
* grldr.mbr was taken from the official 2023-03-06 release from
* grldr.mbr was taken from the official 2024-02-26 release from
https://github.com/chenall/grub4dos/releases/tag/0.4.6a
* Note that, for convenience reasons, the first 512 bytes from this grldr.mbr are

View File

@ -6,10 +6,16 @@ https://github.com/pbatard/rufus/wiki/Localization#Editing_an_existing_translati
Or simply download https://files.akeo.ie/pollock/pollock-1.5.exe and follow its directions.
o v4.? (????.??.??) ** NOT FINAL!!! PLEASE DO NOT SEND UNSOLICITED TRANSLATIONS! **
- *UPDATED* MSG_337 "An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:" -> "An additional file ('%s') must be downloaded from Microsoft to use this feature:"
// NB: I used Google translate to update existing messages, so please check for accuracy!
- *NEW* MSG_350 "Use 'Windows UEFI CA 2023' signed bootloaders [EXPERIMENTAL]"
- *NEW* MSG_351 "Checking for UEFI bootloader revocation..."
- *NEW* MSG_352 "Checking for UEFI DBX updates..."
- *NEW* MSG_353 "DBX update available"
- *NEW* MSG_354 "Rufus has found an updated version of the DBX files used to perform UEFI Secure Boot revocation checks..."
- *NEW* MSG_355 "ISO Image"
o v4.5 (2024.05.??)
o v4.5 (2024.05.22)
- *UPDATED* IDC_RUFUS_MBR -> IDC_UEFI_MEDIA_VALIDATION "Enable runtime UEFI media validation"
- *UPDATED* MSG_167 "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
- *NEW* MSG_337 "An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS (...)"

View File

@ -1,5 +1,5 @@
@echo off
if not exist pollock.exe curl https://files.akeo.ie/pollock/pollock-1.5.exe --output pollock.exe
if not exist pollock.exe curl https://files.akeo.ie/pollock/pollock-1.6.exe --output pollock.exe
cls
:menu
echo 1 - Import .po into .loc

View File

@ -1557,7 +1557,7 @@ msgid ""
"Please select the mode that you want to use to write this image:"
msgstr ""
"Obráz, který jste si vybrali, je obraz 'ISO Hybrid'. To znamená, že může být zapsán buď v %s (kopírování souborů) v režimu %s (obraz disku) režim.\n"
"Rufus doporučuje použití %s režim, pokud je plný přístu k jednotce pro zápis.\n"
"Rufus doporučuje použití %s režim, pokud je plný přístup k jednotce pro zápis.\n"
"Pokud narazíte na problémy při startu, můžete zkusit zapsat tento obraz znovu %s režim.\n"
"\n"
"Vyberte režim, který chcete použít k zapsání tohoto obrázu:"

View File

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: 4.5\n"
"Report-Msgid-Bugs-To: pete@akeo.ie\n"
"POT-Creation-Date: 2024-04-26 11:11+0200\n"
"PO-Revision-Date: 2024-04-26 11:48+0200\n"
"POT-Creation-Date: 2025-11-12 17:32+0000\n"
"PO-Revision-Date: 2025-11-12 17:32+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: de_DE\n"
@ -13,7 +13,7 @@ msgstr ""
"X-Poedit-SourceCharset: UTF-8\n"
"X-Rufus-LanguageName: German (Deutsch)\n"
"X-Rufus-LCID: 0x0407, 0x0807, 0x0c07, 0x1007, 0x1407\n"
"X-Generator: Poedit 3.4.2\n"
"X-Generator: Poedit 3.8\n"
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
msgid "Drive Properties"
@ -308,7 +308,7 @@ msgstr ""
#. • MSG_025
#.
#. *Short* version of the pentabyte size suffix
#. *Short* version of the petabyte size suffix
msgid "PB"
msgstr ""
@ -846,7 +846,7 @@ msgstr "Keine Persistenz"
#. • MSG_125
#.
#. Tooltips used for the peristence size slider and edit control
#. Tooltips used for the persistence size slider and edit control
msgid "Set the size of the persistent partition for live USB media. Setting the size to 0 disables the persistent partition."
msgstr "Größe der persistenten Partition des Live-USB-Systems. Eine Größe von 0 deaktiviert die Persistenz."
@ -867,7 +867,7 @@ msgid ""
"You have just created a media that uses the UEFI:NTFS bootloader. Please remember that, to boot this media, YOU MUST DISABLE SECURE BOOT.\n"
"For details on why this is necessary, see the 'More Information' button below."
msgstr ""
"Sie haben gerade ein Medium erstellt, das den UEFI:NTFS-Bootloader verwendet. Bitte denken Sie daran, dass Sie zum Starten dieses Mediums SECURE BOOT DEAKTIVIEREN müssen.\n"
"Sie haben gerade ein Medium erstellt, welches das UEFI:NTFS-Startprogramm verwendet. Bitte denken Sie daran, dass Sie zum Starten dieses Mediums SECURE BOOT DEAKTIVIEREN müssen.\n"
"Nach dem Abschluss des Vorgangs sollten Sie SECURE BOOT wieder aktivieren.\n"
"Weitere Informationen, warum dies notwendig ist, finden Sie über die Schaltfläche \"Weitere Informationen\"."
@ -1039,11 +1039,11 @@ msgstr "Image-Datei oder Download auswählen..."
#. • MSG_166
msgid "Check this box to allow the display of international labels and set a device icon (creates an autorun.inf)"
msgstr "Wählen Sie diese Option, um die Anzeige internationaler Bezeichnungen zu ermöglichen und ein Gerätesymbol zu erzeugen (autorun.inf)"
msgstr "Wählen Sie diese Option, um die Anzeige internationaler Bezeichnungen zu ermöglichen und ein Gerätesymbol zu erzeugen (autorun.inf)."
#. • MSG_167
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
msgstr "Ein UEFI Startprogramm installieren, das eine MD5Sum Dateiüberprüfung auf dem Datenträger durchführt"
msgstr "Ein UEFI-Startprogramm installieren, das eine MD5Sum-Dateiüberprüfung auf dem Datenträger durchführt"
#. • MSG_169
msgid ""
@ -1181,7 +1181,7 @@ msgid ""
"Conventional drives use a 512-byte sector size but this drive uses a %d-byte one. In many cases, this means that you will NOT be able to boot from this drive.\n"
"Rufus can try to create a bootable drive, but there is NO WARRANTY that it will work."
msgstr ""
"WICHTIG: DIESES LAUFWERK HAT EINE NICHT STANDARDISIERTE SEKTORGRÖSSE!\n"
"WICHTIG: DIESES LAUFWERK HAT EINE NICHT STANDARDISIERTE SEKTORGRÖE!\n"
"\n"
"Herkömmliche Laufwerke nutzen eine Sektorgröße von 512 Byte, aber dieses Laufwerk nutzt %d Byte. Höchstwahrscheinlich können Sie von diesem Laufwerk NICHT starten.\n"
"Rufus kann versuchen, ein startfähiges Laufwerk zu erstellen, aber es gibt KEINE GARANTIE, dass es funktionieren wird."
@ -1431,7 +1431,7 @@ msgstr "Es wurde keine neue Version von Rufus gefunden"
#. • MSG_248
msgid "Application registry keys successfully deleted"
msgstr "Anwendungeinstellungen in der Registrierdatenbank erfolgreich gelöscht"
msgstr "Anwendungseinstellungen in der Registrierdatenbank erfolgreich gelöscht"
#. • MSG_249
msgid "Failed to delete application registry keys"
@ -1740,13 +1740,13 @@ msgid ""
"\n"
"Please select the mode that you want to use to write this image:"
msgstr ""
"Das ausgewählte ISO-Image verwendet UEFI und ist klein genug, um auf eine EFI System-Partition (ESP) geschrieben zu werden. Es auf eine ESP- anstelle einer normalen Partition zu schrieben, kann für bestimmte Installationsarten vorteilhaft sein.\n"
"Das ausgewählte ISO-Image verwendet UEFI und ist klein genug, um auf eine EFI-Systempartition (ESP) geschrieben zu werden. Es auf eine ESP anstelle einer normalen Partition zu schreiben, die die gesamte Festplatte belegt, kann für bestimmte Installationsarten vorteilhaft sein.\n"
"\n"
"Bitte wählen Sie einen Modus aus:"
#. • MSG_311
msgid "Use %s (in the main application window) to enable."
msgstr "Verwende %s (Hauptfenster der Anwendung) zum aktivieren."
msgstr "Verwende %s (Hauptfenster der Anwendung) zum Aktivieren."
#. • MSG_312
msgid "Extra hashes (SHA512)"
@ -1789,7 +1789,7 @@ msgid ""
"The image you have selected is an ISOHybrid, but its creators have not made it compatible with ISO/File copy mode.\n"
"As a result, DD image writing mode will be enforced."
msgstr ""
"Das ausgewählte Image ist vom Typ ISOHybrid, aber der Ersteller hat es nicht mit dem ISO/Datei Kopier-Modus kompatibel gemacht.\n"
"Das ausgewählte Image ist vom Typ ISOHybrid, aber der Ersteller hat es nicht mit dem ISO/Dateikopiermodus kompatibel gemacht.\n"
"Deswegen wird der DD-Schreibmodus verwendet."
#. • MSG_322
@ -1798,7 +1798,7 @@ msgstr "'%' kann nicht geöffnet/gelesen werden"
#. • MSG_325
msgid "Applying Windows customization: %s"
msgstr "Windows Anpassungen anwenden: %s"
msgstr "Windows-Anpassungen anwenden: %s"
#. • MSG_326
msgid "Applying user options..."
@ -1806,7 +1806,7 @@ msgstr "Benutzereinstellungen anwenden..."
#. • MSG_327
msgid "Windows User Experience"
msgstr "Windows Benutzererfahrung"
msgstr "Windows-Benutzererfahrung"
#. • MSG_328
msgid "Customize Windows installation?"
@ -1818,7 +1818,7 @@ msgstr "Anforderung für 4GB+ RAM, Secure Boot und TPM 2.0 entfernen"
#. • MSG_330
msgid "Remove requirement for an online Microsoft account"
msgstr "Anforderung für Online Microsoft Konto entfernen"
msgstr "Anforderung für Online-Microsoft-Konto entfernen"
#. • MSG_331
msgid "Disable data collection (Skip privacy questions)"
@ -1846,21 +1846,21 @@ msgstr "Dauerhaftes Protokoll"
#. • MSG_337
msgid ""
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\n"
"An additional file ('%s') must be downloaded from Microsoft to use this feature:\n"
"- Select 'Yes' to connect to the Internet and download it\n"
"- Select 'No' to cancel the operation\n"
"\n"
"Note: The file will be downloaded in the application's directory and will be reused automatically if present."
msgstr ""
"Eine zusätzliche Datei ('diskcopy.dll') muss von Microsoft heruntergeladen werden um MS-DOS zu installieren:\n"
"- 'Ja' um eine Verbindung mit dem Internet herzustellen und die Datei herunterzuladen\n"
"- 'Nein' um den Vorgang abzubrechen\n"
"Eine zusätzliche Datei ('%s') muss von Microsoft heruntergeladen werden, um diese Funktion zu nutzen:\n"
"- Wählen Sie 'Ja', um eine Verbindung mit dem Internet herzustellen und die Datei herunterzuladen\n"
"- Wählen Sie 'Nein', um den Vorgang abzubrechen\n"
"\n"
"Hinweis: Die Datei wird ins Programmverzeichnis heruntergeladen und bei Bedarf wiederverwendet."
#. • MSG_338
msgid "Revoked UEFI bootloader detected"
msgstr "Zurückgezogenes UEFI Startprogramm erkannt"
msgstr "Zurückgezogenes UEFI-Startprogramm erkannt"
#. • MSG_339
msgid ""
@ -1869,10 +1869,10 @@ msgid ""
"- If you obtained this ISO image from a non reputable source, you should consider the possibility that it might contain UEFI malware and avoid booting from it.\n"
"- If you obtained it from a trusted source, you should try to locate a more up to date version, that will not produce this warning."
msgstr ""
"Rufus hat erkannt, dass das gewählte ISO-Image ein UEFI-Startprogramm enthält, dass zurückgezogen wurde und das führt zu %s, wenn das UEFI-System aktuell ist und Secure Boot aktiv ist.\n"
"Rufus hat erkannt, dass das gewählte ISO-Image ein UEFI-Startprogramm enthält, das zurückgezogen wurde. Das führt zu %s, wenn das UEFI-System aktuell ist und Secure Boot aktiv ist.\n"
"\n"
"- Wenn Sie das ISO-Image aus einer unzuverlässigen Quelle haben, sollten Sie in Betracht ziehen, dass es UEFI-Schadcode enthält und es deshalb nicht verwenden.\n"
"- Wenn Sie es aus einer vertrauenswürdigen Quelle haben, sollten Sie versuchen eine aktuellere Version zu bekommen, die dieses problem nicht hat."
"- Wenn Sie es aus einer vertrauenswürdigen Quelle haben, sollten Sie versuchen, eine aktuellere Version zu bekommen, die dieses Problem nicht hat."
#. • MSG_340
msgid "a \"Security Violation\" screen"
@ -1880,19 +1880,19 @@ msgstr "ein Bildschirm \"Sicherheitsverletzung\""
#. • MSG_341
msgid "a Windows Recovery Screen (BSOD) with '%s'"
msgstr "ein Windows Wiederherstellung-Bildschirm (BSOD) mit '%s'"
msgstr "ein Windows-Wiederherstellungsbildschirm (BSOD) mit '%s'"
#. • MSG_342
msgid "Compressed VHDX Image"
msgstr "Komprimiertes VHDX Image"
msgstr "Komprimiertes VHDX-Image"
#. • MSG_343
msgid "Uncompressed VHD Image"
msgstr "Unkomprimiertes VHD Image"
msgstr "Unkomprimiertes VHD-Image"
#. • MSG_344
msgid "Full Flash Update Image"
msgstr "Full Flash Update Image"
msgstr "Vollständiges Flash-Update-Image"
#. • MSG_345
msgid ""
@ -1901,8 +1901,8 @@ msgid ""
"- Select 'No' to cancel the operation"
msgstr ""
"Einige weitere Daten müssen von Microsoft heruntergeladen werden, um diese Funktion zu verwenden:\n"
"- 'Ja' um eine Verbindung mit dem Internet herzustellen und diese herunterzuladen\n"
"- 'Nein' um den Vorgang abzubrechen"
"- Wählen Sie 'Ja', um eine Verbindung mit dem Internet herzustellen und diese herunterzuladen\n"
"- Wählen Sie 'Nein', um den Vorgang abzubrechen"
#. • MSG_346
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
@ -1910,11 +1910,11 @@ msgstr "Windows im S-Modus (nicht kompatibel mit Online Konto-Umgehung)"
#. • MSG_347
msgid "Expert Mode"
msgstr "Experten-Modus"
msgstr "Expertenmodus"
#. • MSG_348
msgid "Extracting archive files: %s"
msgstr "Archiv-Datei extrahieren: %s"
msgstr "Archivdatei extrahieren: %s"
#. • MSG_349
msgid "Use Rufus MBR"
@ -1924,7 +1924,7 @@ msgstr "Rufus MBR verwenden"
#.
#. The following messages are for the Windows Store listing only and are not used by the application
msgid "Rufus is a utility that helps format and create bootable USB flash drives, such as USB keys/pendrives, memory sticks, etc."
msgstr "Rufus ist ein Werkzeug, welches dabei hilft, bootfähige USB-Laufwerke zu erstellen, wie beispielweise USB-Keys, Speichersticks usw."
msgstr "Rufus ist ein Werkzeug, das beim Formatieren und Erstellen bootfähiger USB-Flash-Laufwerke wie USB-Sticks, Speichersticks usw. hilft."
#. • MSG_901
msgid "Official site: %s"
@ -1967,7 +1967,7 @@ msgstr "FreeDOS-bootfähige USB-Laufwerke erstellen"
#. • MSG_912
msgid "Create bootable drives from bootable ISOs (Windows, Linux, etc.)"
msgstr "Erstellen bootfähiger Laufwerke aus bootfähigen ISOs (Windows, Linux, etc.)"
msgstr "Erstellen bootfähiger Laufwerke aus bootfähigen ISOs (Windows, Linux etc.)"
#. • MSG_913
msgid "Create bootable drives from bootable disk images, including compressed ones"
@ -1979,7 +1979,7 @@ msgstr "Erstellen von BIOS- oder UEFI-bootfähigen Laufwerken, einschließlich U
#. • MSG_915
msgid "Create 'Windows To Go' drives"
msgstr "Erstellen von \"Windows To Go\"-Laufwerken"
msgstr "Erstellen von 'Windows To Go'-Laufwerken"
#. • MSG_916
msgid "Create Windows 11 installation drives for PCs that don't have TPM or Secure Boot"
@ -1995,7 +1995,7 @@ msgstr "VHD/DD-Images des ausgewählten Laufwerks erstellen"
#. • MSG_919
msgid "Compute MD5, SHA-1, SHA-256 and SHA-512 checksums of the selected image"
msgstr "Berechnung von MD5-, SHA-1-, SHA-256- und SHA-512-Prüfsummen für das ausgewählte Bild"
msgstr "Berechnung von MD5-, SHA-1-, SHA-256- und SHA-512-Prüfsummen für das ausgewählte Image"
#. • MSG_920
msgid "Perform bad blocks checks, including detection of \"fake\" flash drives"

View File

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: 4.5\n"
"Report-Msgid-Bugs-To: pete@akeo.ie\n"
"POT-Creation-Date: 2024-04-29 19:24+0300\n"
"PO-Revision-Date: 2024-04-29 20:25+0330\n"
"PO-Revision-Date: 2025-02-13 12:00+0000\n"
"Last-Translator: MasterVito <mv@mvaop.ir>\n"
"Language-Team: \n"
"Language: fa_IR\n"
@ -13,7 +13,7 @@ msgstr ""
"X-Poedit-SourceCharset: UTF-8\n"
"X-Rufus-LanguageName: Persian (پارسی)\n"
"X-Rufus-LCID: 0x0429\n"
"X-Generator: Poedit 3.4.2\n"
"X-Generator: Poedit 3.5\n"
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
msgid "Drive Properties"
@ -1094,7 +1094,7 @@ msgstr "نسخه %d.%d (Build %d)"
#. • MSG_176
msgid "English translation: Pete Batard <mailto:pete@akeo.ie>"
msgstr "ترجمه فارسی:\\lineسید عرفان <mailto:aa3245540@gmail.com>\\line •ضیاءالدین عظیمی <mailto:s.zia.azimi@gmail.com>"
msgstr "ترجمه فارسی:\\lineمستر ویتو <mailto:mv@mvaop.ir>\\line •ضیاءالدین عظیمی <mailto:s.zia.azimi@gmail.com>"
#. • MSG_177
msgid "Report bugs or request enhancements at:"

View File

@ -1,9 +1,9 @@
msgid ""
msgstr ""
"Project-Id-Version: 3.22\n"
"Project-Id-Version: 4.5\n"
"Report-Msgid-Bugs-To: pete@akeo.ie\n"
"POT-Creation-Date: 2024-04-25 12:25+0100\n"
"PO-Revision-Date: 2024-04-25 12:46+0100\n"
"POT-Creation-Date: 2025-10-01 18:52+0100\n"
"PO-Revision-Date: 2025-10-01 18:53+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fr_FR\n"
@ -13,7 +13,7 @@ msgstr ""
"X-Poedit-SourceCharset: UTF-8\n"
"X-Rufus-LanguageName: French (Français)\n"
"X-Rufus-LCID: 0x040c, 0x080c, 0x0c0c, 0x100c, 0x140c, 0x180c, 0x1c0c, 0x200c, 0x240c, 0x280c, 0x2c0c, 0x300c, 0x340c, 0x380c, 0xe40c\n"
"X-Generator: Poedit 3.4.2\n"
"X-Generator: Poedit 3.7\n"
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
msgid "Drive Properties"
@ -161,7 +161,7 @@ msgstr "Recherche mises à jour"
#. • IDD_UPDATE_POLICY → IDS_INCLUDE_BETAS_TXT
msgid "Include beta versions"
msgstr "Inclure les bétas"
msgstr "Inclure les versions bêta"
#. • IDD_UPDATE_POLICY → IDC_CHECK_NOW
msgid "Check Now"
@ -460,7 +460,7 @@ msgstr "Veuillez insérer un média dans le lecteur."
#. • MSG_062
msgid "An unsupported command was received."
msgstr "Commande non supportée."
msgstr "Une commande non prise en charge a été reçue."
#. • MSG_063
msgid "Memory allocation error."
@ -484,7 +484,7 @@ msgstr "Impossible d'accéder au média. Il peut être en cours d'utilisation pa
#. • MSG_068
msgid "Could not partition drive."
msgstr "Echec de partitionnement."
msgstr "Échec de partitionnement."
#. • MSG_069
msgid "Could not copy files to target drive."
@ -506,23 +506,23 @@ msgstr "La vérification de blocs défectueux a été interrompue."
#. • MSG_073
msgid "ISO image scan failure."
msgstr "Echec d'analyse de l'image ISO."
msgstr "Échec d'analyse de l'image ISO."
#. • MSG_074
msgid "ISO image extraction failure."
msgstr "Echec d'extraction de l'image ISO."
msgstr "Échec d'extraction de l'image ISO."
#. • MSG_075
msgid "Unable to remount volume."
msgstr "Echec lors du remontage du volume."
msgstr "Échec lors du remontage du volume."
#. • MSG_076
msgid "Unable to patch/setup files for boot."
msgstr "Echec de modification des fichiers de démarrage."
msgstr "Échec de modification des fichiers de démarrage."
#. • MSG_077
msgid "Unable to assign a drive letter."
msgstr "Echec d'assignation d'une lettre de volume."
msgstr "Échec d'assignation d'une lettre de volume."
#. • MSG_078
msgid "Can't mount GUID volume."
@ -548,7 +548,7 @@ msgstr ""
#. • MSG_081
msgid "Unsupported image"
msgstr "Image non supportée"
msgstr "Image non prise en charge"
#. • MSG_082
msgid "This image is either non-bootable, or it uses a boot or compression method that is not supported by Rufus..."
@ -609,7 +609,7 @@ msgstr "L'image est trop large pour être copiée sur le périphérique sélecti
#. • MSG_090
msgid "Unsupported ISO"
msgstr "Image ISO non supportée"
msgstr "Image ISO non prise en charge"
#. • MSG_091
msgid "When using UEFI Target Type, only EFI bootable ISO images are supported. Please select an EFI bootable ISO or set the Target Type to BIOS."
@ -617,7 +617,7 @@ msgstr "Quand UEFI est sélectionné, seules les images ISO basées sur EFI sont
#. • MSG_092
msgid "Unsupported filesystem"
msgstr "Système de fichiers non supporté"
msgstr "Système de fichiers non pris en charge"
#. • MSG_093
msgid ""
@ -669,7 +669,7 @@ msgstr "Cette image ISO contient un fichier de plus de 4 Go, soit plus que la ta
#. • MSG_101
msgid "Missing WIM support"
msgstr "Support pour archives WIM non disponible"
msgstr "Prise en charge des archives WIM non disponible"
#. • MSG_102
msgid ""
@ -906,7 +906,7 @@ msgid ""
msgstr ""
"Parce que MBR a été sélectionné pour le schéma de partition, Rufus peut seulement créer une partition sur ce média occupant jusquà 2 To, ce qui laissera %s despace disque non-disponible.\n"
"\n"
"Etes-vous sûr de vouloir continuer ?"
"Êtes-vous sûr de vouloir continuer ?"
#. • MSG_135
msgid "Version"
@ -1080,7 +1080,7 @@ msgid "Version %d.%d (Build %d)"
msgstr ""
#. • MSG_176
msgid "mailto:support@akeo.ie"
msgid "English translation: Pete Batard <mailto:pete@akeo.ie>"
msgstr "Traduction Française : Pete Batard <mailto:pete@akeo.ie>"
#. • MSG_177
@ -1203,7 +1203,7 @@ msgstr "Analyse de l'image..."
#. • MSG_203
msgid "Failed to scan image"
msgstr "Echec d'analyse de l'image"
msgstr "Échec de l'analyse de l'image"
#. • MSG_204
#.
@ -1252,7 +1252,7 @@ msgstr "Opération annulée"
#. • MSG_212
msgid "Failed"
msgstr "ECHEC"
msgstr "Échec"
#. • MSG_213
#.
@ -1262,7 +1262,7 @@ msgstr "Lancement de la nouvelle application..."
#. • MSG_214
msgid "Failed to launch new application"
msgstr "Echec de lancement de l'application"
msgstr "Échec de lancement de l'application"
#. • MSG_215
#.
@ -1284,11 +1284,11 @@ msgstr "Formatage : %s"
#. • MSG_218
msgid "Creating file system: Task %d/%d completed"
msgstr "Système de fichiers : Tâche %d/%d complétée"
msgstr "Système de fichiers : Tâche %d/%d terminée"
#. • MSG_219
msgid "NTFS Fixup: %d%% completed"
msgstr "Finalisation NTFS : %d%% complété"
msgstr "Finalisation NTFS : %d%% terminé"
#. • MSG_220
#.
@ -1300,7 +1300,7 @@ msgstr "Formatage (%s) - durée estimée %d :%02d..."
#. • MSG_221
msgid "Setting label (%s)..."
msgstr "Ecriture du label (%s)..."
msgstr "Écriture du label (%s)..."
#. • MSG_222
#.
@ -1330,11 +1330,11 @@ msgstr "Fermeture des volumes existants..."
#. • MSG_228
msgid "Writing Master Boot Record..."
msgstr "Ecriture du MBR..."
msgstr "Écriture du MBR..."
#. • MSG_229
msgid "Writing Partition Boot Record..."
msgstr "Ecriture du PBR..."
msgstr "Écriture du PBR..."
#. • MSG_230
msgid "Copying DOS files..."
@ -1346,7 +1346,7 @@ msgstr "Copie des fichiers ISO : %s"
#. • MSG_232
msgid "Win7 EFI boot setup (%s)..."
msgstr "Ecriture boot Win7 EFI (%s)..."
msgstr "Écriture boot Win7 EFI (%s)..."
#. • MSG_233
msgid "Finalizing, please wait..."
@ -1392,7 +1392,7 @@ msgid ""
"\n"
"The download will be deleted. Please check the log for more details."
msgstr ""
"La signature de la mise à jour qui vient dêtre téléchargée ne peut pas être validée. Cela peut indiquer que votre système nest pas configuré correctement pour la validation de signatures digitales, ou que le téléchargement contient un fichier malicieux.\n"
"La signature de la mise à jour qui vient dêtre téléchargée ne peut pas être validée. Cela peut indiquer que votre système nest pas configuré correctement pour la validation de signatures numériques, ou que le téléchargement contient un fichier malicieux.\n"
"\n"
"Le téléchargement va être supprimé. Veuillez consulter le log pour plus de détails."
@ -1402,7 +1402,7 @@ msgstr "Téléchargement : %s"
#. • MSG_242
msgid "Failed to download file."
msgstr "Echec de téléchargement du fichier."
msgstr "Échec de téléchargement du fichier."
#. • MSG_243
msgid "Checking for Rufus updates..."
@ -1430,7 +1430,7 @@ msgstr "Clés de registre supprimées"
#. • MSG_249
msgid "Failed to delete application registry keys"
msgstr "Echec de suppression des clés registres"
msgstr "Échec de suppression des clés registres"
#. • MSG_250
#.
@ -1480,7 +1480,7 @@ msgstr "Compression NTFS"
#. • MSG_261
msgid "Writing image: %s"
msgstr "Ecriture d'image : %s"
msgstr "Écriture d'image : %s"
#. • MSG_262
#.
@ -1524,7 +1524,7 @@ msgstr "Debug USB"
#. • MSG_271
msgid "Computing image checksums: %s"
msgstr "Calculation des checksums de l'image : %s"
msgstr "Calcul des checksums de l'image : %s"
#. • MSG_272
msgid "Compute the MD5, SHA1 and SHA256 checksums for the selected image"
@ -1558,13 +1558,13 @@ msgstr ""
#.
#. '%s' will be replaced with your translation for MSG_036 ("ISO Image")
msgid "Write in %s mode (Recommended)"
msgstr "Ecrire en mode %s (Recommandé)"
msgstr "Écrire en mode %s (Recommandé)"
#. • MSG_277
#.
#. '%s' will be replaced with your translation for MSG_095 ("DD Image")
msgid "Write in %s mode"
msgstr "Ecrire en mode %s"
msgstr "Écrire en mode %s"
#. • MSG_278
msgid "Checking for conflicting processes..."
@ -1592,7 +1592,7 @@ msgstr "Signature invalide"
#. • MSG_284
msgid "The downloaded executable is missing a digital signature."
msgstr "L'exécutable téléchargé ne possède pas de signature digitale."
msgstr "L'exécutable téléchargé ne possède pas de signature numérique."
#. • MSG_285
msgid ""
@ -1610,7 +1610,7 @@ msgstr "Effacement à zéro : %s"
#. • MSG_287
msgid "Detection of non-USB removable drives"
msgstr "Détection disques non-USB détachables"
msgstr "Détection des disques détachables non-USB"
#. • MSG_288
msgid "Missing elevated privileges"
@ -1618,15 +1618,15 @@ msgstr "Privilèges élevés manquants"
#. • MSG_289
msgid "This application can only run with elevated privileges"
msgstr "Cette application peut seulement être exécutée avec privilèges administratifs"
msgstr "Cette application peut seulement être exécutée avec les privilèges administrateur"
#. • MSG_290
msgid "File Indexing"
msgstr "Indexation de fichiers"
msgstr "Indexation des fichiers"
#. • MSG_291
msgid "Version selection"
msgstr "Sélection de version"
msgstr "Sélection de la version"
#. • MSG_292
msgid "Please select the version of Windows you want to install:"
@ -1634,7 +1634,7 @@ msgstr "Sélectionnez la version de Windows que vous souhaitez installer :"
#. • MSG_293
msgid "Unsupported Windows version"
msgstr "Version de Windows non supportée"
msgstr "Version de Windows non prise en charge"
#. • MSG_294
msgid ""
@ -1656,7 +1656,7 @@ msgid ""
msgstr ""
"Cette version de Rufus n'a pas produite par ses développeurs officiels.\n"
"\n"
"Etes-vous sur de vouloir la lancer ?"
"Êtes-vous sûr de vouloir la lancer ?"
#. • MSG_297
msgid "Truncated ISO detected"
@ -1688,7 +1688,7 @@ msgid ""
msgstr ""
"Rufus n'a pas pu valider que le timestamp du fichier de mise à jour téléchargé est plus récent que celui de l'exécutable en cours.\n"
"\n"
"Afin de mitiger des scenarios d'attaque potentiels, le processus de mise à jour a été interrompu et le téléchargement va être supprimé. Pour plus de détails, veuillez consulter le log."
"Afin d'éviter des scenarios d'attaque potentiels, le processus de mise à jour a été interrompu et le téléchargement va être supprimé. Pour plus de détails, veuillez consulter le log."
#. • MSG_301
msgid "Show application settings"
@ -1744,7 +1744,7 @@ msgstr "Utilisez %s (dans la fenêtre dapplication principale) pour active."
#. • MSG_312
msgid "Extra hashes (SHA512)"
msgstr "Checksum hash supplémentaire (SHA512)"
msgstr "Checksum supplémentaire (SHA512)"
#. • MSG_313
msgid "Save to VHD"
@ -1752,7 +1752,7 @@ msgstr "Sauver en image VHD"
#. • MSG_314
msgid "Compute image checksums"
msgstr "Calculer les checksums the limage sélectionnée"
msgstr "Calculer les checksums de limage sélectionnée"
#. • MSG_315
msgid "Multiple buttons"
@ -1768,7 +1768,7 @@ msgstr "ID disque"
#. • MSG_318
msgid "Default thread priority: %d"
msgstr "Priorité de thread part default : %d"
msgstr "Priorité de thread par défaut : %d"
#. • MSG_319
msgid "Ignore Boot Marker"
@ -1776,7 +1776,7 @@ msgstr "Ignorer le marqueur de démarrage"
#. • MSG_320
msgid "Refreshing partition layout (%s)..."
msgstr "Rafraichissement du schéma de partition (%s)..."
msgstr "Rafraîchissement du schéma de partition (%s)..."
#. • MSG_321
msgid ""
@ -1784,7 +1784,7 @@ msgid ""
"As a result, DD image writing mode will be enforced."
msgstr ""
"Limage que vous avez sélectionnée est de type ISOHybrid, mais ses créateurs ne lont pas rendue compatible avec le mode ISO (i.e. copie de fichier).\n"
"A cause de cela, seule lécriture en mode DD est applicable."
"À cause de cela, seule lécriture en mode DD est applicable."
#. • MSG_322
msgid "Unable to open or read '%s'"
@ -1832,7 +1832,7 @@ msgstr "Définir les options régionales avec les mêmes valeurs que celles de c
#. • MSG_335
msgid "Disable BitLocker automatic device encryption"
msgstr "Désactiver l'encryption automatique BitLocker"
msgstr "Désactiver le chiffrement automatique BitLocker"
#. • MSG_336
msgid "Persistent log"
@ -1840,13 +1840,13 @@ msgstr "Log persistent"
#. • MSG_337
msgid ""
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\n"
"An additional file ('%s') must be downloaded from Microsoft to use this feature:\n"
"- Select 'Yes' to connect to the Internet and download it\n"
"- Select 'No' to cancel the operation\n"
"\n"
"Note: The file will be downloaded in the application's directory and will be reused automatically if present."
msgstr ""
"Un fichier supplémentaire ('diskcopy.dll') doit être téléchargé depuis Microsoft pour installer MS-DOS :\n"
"Un fichier supplémentaire ('%s') doit être téléchargé depuis Microsoft pour utiliser cette fonctionalité :\n"
"- Sélectionnez 'Oui' pour vous connecter à Internet et le télécharger\n"
"- Sélectionnez 'Non' pour annuler lopération\n"
"\n"
@ -1914,6 +1914,36 @@ msgstr "Extraction d'archive : %s"
msgid "Use Rufus MBR"
msgstr "Utilisation du MBR Rufus"
#. • MSG_350
msgid "Use 'Windows CA 2023' signed bootloaders (requires a compatible target PC)"
msgstr "Utiliser les bootloaders signés par 'Windows CA 2023' (nécessite un PC cible compatible)"
#. • MSG_351
msgid "Checking for UEFI bootloader revocation..."
msgstr "Vérification de la revocation des bootloaders UEFI..."
#. • MSG_352
msgid "Checking for UEFI DBX updates..."
msgstr "Vérification des mises à jour de DBX UEFI..."
#. • MSG_353
msgid "DBX update available"
msgstr "Mise à jour DBX disponible"
#. • MSG_354
msgid ""
"Rufus has found an updated version of the DBX files used to perform UEFI Secure Boot revocation checks. Do you want to download this update?\n"
"- Select 'Yes' to connect to the Internet and download this content\n"
"- Select 'No' to cancel the operation\n"
"\n"
"Note: The files will be downloaded in the application's directory and will be reused automatically if present."
msgstr ""
"Rufus a trouvé une mise à jour des fichiers DBX utilisés pour effectuer la validation des revocations Secure Boot sous UEFI. Voulez-vous télécharger cette mise à jour ?\n"
"- Sélectionnez 'Oui' pour vous connecter à Internet et le télécharger ce contenu\n"
"- Sélectionnez 'Non' pour annuler lopération\n"
"\n"
"Note : Ces fichiers seront téléchargés dans le répertoire de l'application et réutilisés automatiquement si ils sont présent."
#. • MSG_900
#.
#. The following messages are for the Windows Store listing only and are not used by the application

View File

@ -1875,7 +1875,7 @@ msgid ""
msgstr ""
"Rufus ha rilevato che l'ISO selezionata contiene un bootloader UEFI che è stato revocato e che quando Secure Boot è abilitato su un sistema UEFI completamente aggiornato produrrà %s. \n"
"\n"
"- Se hai ottenuto questa immagine ISO da una so0egente non affidabile, dovresti considerare la possibilità che possa contenere malware UEFI ed evitare di eseguire l'avvio da esso.\n"
"- Se hai ottenuto questa immagine ISO da una sorgente non affidabile, dovresti considerare la possibilità che possa contenere malware UEFI ed evitare di eseguire l'avvio da esso.\n"
"- Se l'hai ottenuto da una sorgente attendibile, dovresti provare a cercare una versione più aggiornata, che non genererà questo avviso."
#. • MSG_340

View File

@ -2,10 +2,10 @@ msgid ""
msgstr ""
"Project-Id-Version: 4.5\n"
"Report-Msgid-Bugs-To: pete@akeo.ie\n"
"POT-Creation-Date: 2024-04-29 04:19+0900\n"
"PO-Revision-Date: 2024-04-29 05:50+0900\n"
"Last-Translator: \n"
"Language-Team: \n"
"POT-Creation-Date: 2025-08-26 05:39+0900\n"
"PO-Revision-Date: 2026-01-28 21:33+0000\n"
"Last-Translator: VenusGirl <venusgirl@outlook.com>\n"
"Language-Team: 비너스걸 <https://venusgirls.tistory.com/>\n"
"Language: ko_KR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -13,7 +13,7 @@ msgstr ""
"X-Poedit-SourceCharset: UTF-8\n"
"X-Rufus-LanguageName: Korean (한국어)\n"
"X-Rufus-LCID: 0x0412\n"
"X-Generator: Poedit 3.4.2\n"
"X-Generator: Poedit 3.8\n"
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
msgid "Drive Properties"
@ -133,7 +133,7 @@ msgstr "예"
#. • IDD_NOTIFICATION → IDNO
#. • MSG_009
msgid "No"
msgstr "아니"
msgstr "아니"
#. • IDD_LOG → IDD_LOG
msgid "Log"
@ -574,7 +574,7 @@ msgstr ""
"\n"
"Rufus는 이 문제를 해결하기 위해 최신 버전을 다운로드할 수 있습니다:\n"
"- 인터넷에 연결하고 파일을 다운로드하려면 '예'를 선택합니다\n"
"- 기존 ISO 파일을 수정하지 않은 상태로 두려면 '아니'를 선택합니다\n"
"- 기존 ISO 파일을 수정하지 않은 상태로 두려면 '아니'를 선택합니다\n"
"무엇을 해야 할지 모르면 '예'를 선택해야 합니다.\n"
"\n"
"참고: 새 파일이 현재 디렉터리에 다운로드되고 '%s'가 있으면 자동으로 재사용됩니다."
@ -701,7 +701,7 @@ msgstr ""
"\n"
"Rufus가 누락된 파일을 다운로드할 수 있습니다:\n"
"- 인터넷에 연결하고 파일을 다운로드하려면 '예'를 선택합니다\n"
"- 나중에 드라이브에 이 파일을 수동으로 복사하려면 '아니'를 선택합니다\n"
"- 나중에 드라이브에 이 파일을 수동으로 복사하려면 '아니'를 선택합니다\n"
"\n"
"참고: 파일이 현재 디렉터리에 다운로드되고 '%s'가 있으면 자동으로 재사용됩니다."
@ -711,7 +711,7 @@ msgid ""
"If you are sure you want to cancel, click YES. Otherwise, click NO."
msgstr ""
"취소하면 장치를 사용할 수 없는 상태가 될 수 있습니다.\n"
"취소하려면 예를 클릭합니다. 그렇지 않으면 아니를 클릭합니다."
"취소하려면 예를 클릭합니다. 그렇지 않으면 아니를 클릭합니다."
#. • MSG_106
msgid "Please select folder"
@ -748,7 +748,7 @@ msgstr "호환되지 않는 클러스터 크기"
#.
#. "%d:%02d" is a duration (mins:secs)
msgid "Formatting a large UDF volumes can take a lot of time. At USB 2.0 speeds, the estimated formatting duration is %d:%02d, during which the progress bar will appear frozen. Please be patient!"
msgstr "대용량 UDF 볼륨을 포맷하는 데 많은 시간이 걸릴 수 있습니다. USB 2.0 속도에서 예상 포맷 지속 시간은 %d:%02d이며, 이 기간 동안 진행률 표시줄이 고정된 것처럼 보입니다. 기다려주십시오!"
msgstr "대용량 UDF 볼륨을 포맷하는 데 많은 시간이 걸릴 수 있습니다. USB 2.0 속도에서 예상 포맷 지속 시간은 %d:%02d이며, 이 기간 동안 진행률 표시줄이 고정된 것처럼 보입니다. 기다려주세요!"
#. • MSG_113
msgid "Large UDF volume"
@ -768,7 +768,7 @@ msgstr ""
"\n"
"새 버전의 Syslinux는 서로 호환되지 않으므로 Rufus가 모두 포함할 수 없으므로 인터넷에서 두 개의 추가 파일 ('ldlinux.sys' 및 'ldlinux.bss')을 다운로드해야 합니다:\n"
"- 인터넷에 연결하고 이러한 파일을 다운로드하려면 '예'를 선택합니다\n"
"- 작업을 취소하려면 '아니'를 선택합니다\n"
"- 작업을 취소하려면 '아니'를 선택합니다\n"
"\n"
"참고: 파일은 현재 응용 프로그램 디렉터리에 다운로드되며 있는 경우 자동으로 재사용됩니다."
@ -794,7 +794,7 @@ msgstr ""
"\n"
"다른 버전의 Grub은 서로 호환되지 않을 수 있으며, 모두 포함할 수 없기 때문에 Rufus는 이미지에서 일치하는 Grub 설치 파일 ('core.img')의 버전을 찾으려고 시도합니다:\n"
"- 인터넷에 연결하고 다운로드하려면 '예'를 선택합니다\n"
"- Rufus의 기본 버전을 사용하려면 '아니'를 선택합니다\n"
"- Rufus의 기본 버전을 사용하려면 '아니'를 선택합니다\n"
"- 작업을 중단하려면 '취소'를 선택합니다\n"
"\n"
"참고: 파일은 현재 응용 프로그램 디렉터리에 다운로드되며 있는 경우 자동으로 재사용됩니다. 일치하는 항목을 온라인으로 찾을 수 없는 경우 기본 버전이 사용됩니다."
@ -940,7 +940,7 @@ msgstr "뒤로"
#. • MSG_142
msgid "Please wait..."
msgstr "기다려주십시오..."
msgstr "기다려주세요..."
#. • MSG_143
msgid "Download using a browser"
@ -1085,7 +1085,7 @@ msgstr "버전 %d.%d (빌드 %d)"
#. • MSG_176
msgid "English translation: Pete Batard <mailto:pete@akeo.ie>"
msgstr "한국어 번역:\\line• 비너스걸 (VᴇɴsGɪʀʟ♥) <mailto:venusgirl@outlook.com>"
msgstr "한국어 번역:\\line• 세상사는이야기-나두 <mailto:ho82.kr@gmail.com>\\line• Uk-Jin Jang <mailto:doublestat@gmail.com>\\line• 비너스걸 (VᴇɴsGɪʀʟ♥) <mailto:venusgirl@outlook.com>"
#. • MSG_177
msgid "Report bugs or request enhancements at:"
@ -1199,7 +1199,7 @@ msgstr "이 플랫폼에서는 이 기능을 사용할 수 없습니다."
#. • MSG_201
msgid "Cancelling - Please wait..."
msgstr "취소 중 - 잠시 기다려 주십시오..."
msgstr "취소 중 - 잠시 기다려 주세요..."
#. • MSG_202
msgid "Scanning image..."
@ -1354,7 +1354,7 @@ msgstr "Win7 EFI 부팅 설정 (%s)..."
#. • MSG_233
msgid "Finalizing, please wait..."
msgstr "마무리 중, 기다려 주십시오..."
msgstr "마무리 중, 기다려 주세요..."
#. • MSG_234
#.
@ -1845,15 +1845,15 @@ msgstr "영구 로그"
#. • MSG_337
msgid ""
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\n"
"An additional file ('%s') must be downloaded from Microsoft to use this feature:\n"
"- Select 'Yes' to connect to the Internet and download it\n"
"- Select 'No' to cancel the operation\n"
"\n"
"Note: The file will be downloaded in the application's directory and will be reused automatically if present."
msgstr ""
"MS-DOS를 설치하려면 Microsoft에서 추가 파일 ('diskcopy.dll')을 다운로드해야 합니다:\n"
"이 기능을 사용하려면 Microsoft에서 추가 파일('%s')을 다운로드해야 합니다:\n"
"- 인터넷에 연결하여 다운로드하려면 '예'를 선택합니다\n"
"- 작업을 취소하려면 '아니'를 선택합니다\n"
"- 작업을 취소하려면 '아니'를 선택합니다\n"
"\n"
"참고: 해당 파일은 응용 프로그램의 디렉터리에 다운로드되며 존재하는 경우 자동으로 재사용됩니다."
@ -1901,7 +1901,7 @@ msgid ""
msgstr ""
"이 기능을 사용하려면 Microsoft에서 몇 가지 추가 데이터를 다운로드해야 합니다:\n"
"- 인터넷에 연결하여 다운로드하려면 '예'를 선택합니다\n"
"- 작업을 취소하려면 '아니'를 선택합니다"
"- 작업을 취소하려면 '아니'를 선택합니다"
#. • MSG_346
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
@ -1946,7 +1946,7 @@ msgid ""
"See https://www.gnu.org/licenses/gpl-3.0.en.html for details."
msgstr ""
"이 응용 프로그램은 GNU Public License (GPL) 버전 3의 조건에 따라 라이선스가 부여됩니다.\n"
"자세한 내용은 https://www.gnu.org/licenses/gpl-3.0.html 을 참조하십시오."
"자세한 내용은 https://www.gnu.org/licenses/gpl-3.0.html 을 참조하세요."
#. • MSG_905
#.

File diff suppressed because it is too large Load Diff

View File

@ -2,10 +2,10 @@ msgid ""
msgstr ""
"Project-Id-Version: 4.5\n"
"Report-Msgid-Bugs-To: pete@akeo.ie\n"
"POT-Creation-Date: 2024-04-26 00:51+0200\n"
"PO-Revision-Date: 2024-04-26 14:23+0100\n"
"POT-Creation-Date: 2025-09-23 20:25+0100\n"
"PO-Revision-Date: 2025-09-23 20:25+0100\n"
"Last-Translator: \n"
"Language-Team: Sopor <sopor@users.noreply.github.com>\n"
"Language-Team: \n"
"Language: sv_SE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -13,7 +13,7 @@ msgstr ""
"X-Poedit-SourceCharset: UTF-8\n"
"X-Rufus-LanguageName: Swedish (Svenska)\n"
"X-Rufus-LCID: 0x041d, 0x081d\n"
"X-Generator: Poedit 3.4.2\n"
"X-Generator: Poedit 3.7\n"
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
msgid "Drive Properties"
@ -62,7 +62,7 @@ msgstr "Aktivera runtime UEFI-mediavalidering"
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
msgid "Format Options"
msgstr "Formateringsinställningar"
msgstr "Formatalternativ"
#. • IDD_DIALOG → IDS_FILE_SYSTEM_TXT
msgid "File system"
@ -1134,7 +1134,7 @@ msgstr ""
#. • MSG_187
msgid "Invalid image for selected boot option"
msgstr "Ogiltig avbild för vald startinställning"
msgstr "Ogiltig avbild för valt startalternativ"
#. • MSG_188
msgid "The current image doesn't match the boot option selected. Please use a different image or choose a different boot option."
@ -1846,13 +1846,13 @@ msgstr "Bestående logg"
#. • MSG_337
msgid ""
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\n"
"An additional file ('%s') must be downloaded from Microsoft to use this feature:\n"
"- Select 'Yes' to connect to the Internet and download it\n"
"- Select 'No' to cancel the operation\n"
"\n"
"Note: The file will be downloaded in the application's directory and will be reused automatically if present."
msgstr ""
"En fil (diskcopy.dll) måste laddas ner från Microsoft för att installera MS-DOS:\n"
"En fil (%s) måste laddas ner från Microsoft för att använda den här funktionen:\n"
"- Välj \"Ja\" för att ansluta till Internet och ladda ner den\n"
"- Välj \"Nej\" för att avbryta operationen\n"
"\n"

View File

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: 4.5\n"
"Report-Msgid-Bugs-To: pete@akeo.ie\n"
"POT-Creation-Date: 2024-04-26 02:45+0900\n"
"PO-Revision-Date: 2024-04-26 03:13+0900\n"
"POT-Creation-Date: 2025-06-21 21:57+0700\n"
"PO-Revision-Date: 2025-06-21 22:47+0700\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: vi_VN\n"
@ -13,19 +13,19 @@ msgstr ""
"X-Poedit-SourceCharset: UTF-8\n"
"X-Rufus-LanguageName: Vietnamese (Tiếng Việt)\n"
"X-Rufus-LCID: 0x042A\n"
"X-Generator: Poedit 3.4.2\n"
"X-Generator: Poedit 3.6\n"
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
msgid "Drive Properties"
msgstr "Thuộc tính ổ đĩa"
msgstr "Thuộc tính thiết bị lưu"
#. • IDD_DIALOG → IDS_DEVICE_TXT
msgid "Device"
msgstr "Thiết bị"
msgstr "Thiết bị lưu"
#. • IDD_DIALOG → IDS_BOOT_SELECTION_TXT
msgid "Boot selection"
msgstr "Phương thức khởi động"
msgstr "Tùy chọn khởi động"
#. • IDD_DIALOG → IDC_SELECT
msgid "Select"
@ -37,28 +37,28 @@ msgstr "Tùy chọn tệp tin"
#. • IDD_DIALOG → IDS_PARTITION_TYPE_TXT
msgid "Partition scheme"
msgstr "Định dạng phân vùng"
msgstr "Sơ đồ phân vùng"
#. • IDD_DIALOG → IDS_TARGET_SYSTEM_TXT
msgid "Target system"
msgstr "Hệ thống áp dụng"
msgstr "Hệ thống khởi động"
#. • IDD_DIALOG → IDC_LIST_USB_HDD
msgid "List USB Hard Drives"
msgstr "Danh sách ổ cứng USB"
msgstr "Liệt kê danh sách ổ USB"
#. • IDD_DIALOG → IDC_OLD_BIOS_FIXES
#.
#. It is acceptable to drop the parenthesis () if you are running out of space
#. as there is a tooltip (MSG_169) providing these details.
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
msgstr "Thêm khắc phục cho BIOS cũ (phân vùng, sắp xếp...khác)"
msgstr "Thêm các bản sửa lỗi cho BIOS cũ (phân vùng phụ, căn lề phân vùng, v.v...)"
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
#.
#. It is acceptable to drop the "runtime" if you are running out of space
msgid "Enable runtime UEFI media validation"
msgstr "Bật xác thực phương tiện UEFI tại thời điểm chạy"
msgstr "Bật xác minh thiết bị UEFI trong thời gian chạy"
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
msgid "Format Options"
@ -70,11 +70,11 @@ msgstr "Hệ thống tập tin"
#. • IDD_DIALOG → IDS_CLUSTER_SIZE_TXT
msgid "Cluster size"
msgstr "Kích thước liên cung"
msgstr "Kích thước cụm"
#. • IDD_DIALOG → IDS_LABEL_TXT
msgid "Volume label"
msgstr "Nhãn ổ đĩa"
msgstr "Nhãn thiết bị lưu"
#. • IDD_DIALOG → IDC_QUICK_FORMAT
msgid "Quick format"
@ -82,11 +82,11 @@ msgstr "Định dạng nhanh"
#. • IDD_DIALOG → IDC_BAD_BLOCKS
msgid "Check device for bad blocks"
msgstr "Kiểm tra khối hỏng trong thiết bị"
msgstr "Kiểm tra lỗi khối trên thiết bị lưu trữ"
#. • IDD_DIALOG → IDC_EXTENDED_LABEL
msgid "Create extended label and icon files"
msgstr "Tạo tên mở rộng và tập tin biểu tượng"
msgstr "Tạo nhãn mở rộng và tệp tin biểu tượng"
#. • IDD_DIALOG → IDS_STATUS_TXT
msgid "Status"
@ -115,7 +115,7 @@ msgstr "Giấy phép"
#. • IDD_ABOUTBOX → IDOK
msgid "OK"
msgstr "OK"
msgstr ""
#. • IDD_LICENSE → IDD_LICENSE
msgid "Rufus License"
@ -161,7 +161,7 @@ msgstr "Kiểm tra cập nhật"
#. • IDD_UPDATE_POLICY → IDS_INCLUDE_BETAS_TXT
msgid "Include beta versions"
msgstr "Gồm bản thử nghiệm"
msgstr "Bao gồm bản thử nghiệm"
#. • IDD_UPDATE_POLICY → IDC_CHECK_NOW
msgid "Check Now"
@ -173,7 +173,7 @@ msgstr "Kiểm tra cập nhật - Rufus"
#. • IDD_NEW_VERSION → IDS_NEW_VERSION_AVAIL_TXT
msgid "A newer version is available. Please download the latest version!"
msgstr "Đã có phiên bản mới. Vui lòng tải phiên bản mới nhất!"
msgstr "Đã có phiên bản mới hơn. Vui lòng tải phiên bản mới nhất!"
#. • IDD_NEW_VERSION → IDC_WEBSITE
msgid "Click here to go to the website"
@ -191,7 +191,7 @@ msgstr "Tải xuống"
#. • MSG_001
msgid "Other instance detected"
msgstr "Phát hiện tiến trình chạy đồng thời"
msgstr "Đã phát hiện tiến trình chạy đồng thời"
#. • MSG_002
msgid ""
@ -199,14 +199,14 @@ msgid ""
"Please close the first application before running another one."
msgstr ""
"Ứng dụng Rufus khác đang chạy.\n"
"Vui lòng đóng ứng dụng đầu tiên trước khi chạy tiếp."
"Vui lòng đóng ứng dụng đầu tiên trước khi chạy một ứng dụng mới."
#. • MSG_003
msgid ""
"WARNING: ALL DATA ON DEVICE '%s' WILL BE DESTROYED.\n"
"To continue with this operation, click OK. To quit click CANCEL."
msgstr ""
"CẢNH BÁO: TẤT CẢ DỮ LIỆU TRÊN THIẾT BỊ '%s' SẼ BỊ HUỶ.\n"
"CẢNH BÁO: TẤT CẢ DỮ LIỆU TRÊN THIẾT BỊ '%s' SẼ BỊ XOÁ.\n"
"Để tiếp tục tiến trình này, nhấn OK. Để thoát nhấn HUỶ."
#. • MSG_004
@ -215,7 +215,7 @@ msgstr "Chính sách cập nhật Rufus"
#. • MSG_005
msgid "Do you want to allow Rufus to check for application updates online?"
msgstr "Bạn có muốn cho phép Rufus kiểm tra cập nhật ứng dụng trực tuyến?"
msgstr "Bạn có muốn cho phép Rufus kiểm tra các bản cập nhật ứng dụng trực tuyến?"
#. • MSG_007
msgid "Cancel"
@ -280,45 +280,45 @@ msgstr "Phiên bản mới nhất: %d.%d (Bản dựng %d)"
#. • MSG_020
#. • MSG_026
msgid "bytes"
msgstr "bytes"
msgstr ""
#. • MSG_021
#.
#. *Short* version of the kilobyte size suffix
msgid "KB"
msgstr "KB"
msgstr ""
#. • MSG_022
#.
#. *Short* version of the megabyte size suffix
msgid "MB"
msgstr "MB"
msgstr ""
#. • MSG_023
#.
#. *Short* version of the gigabyte size suffix
msgid "GB"
msgstr "GB"
msgstr ""
#. • MSG_024
#.
#. *Short* version of the terabyte size suffix
msgid "TB"
msgstr "TB"
msgstr ""
#. • MSG_025
#.
#. *Short* version of the pentabyte size suffix
msgid "PB"
msgstr "PB"
msgstr ""
#. • MSG_027
msgid "kilobytes"
msgstr "kilobytes"
msgstr ""
#. • MSG_028
msgid "megabytes"
msgstr "megabytes"
msgstr ""
#. • MSG_029
msgid "Default"
@ -346,14 +346,14 @@ msgstr "BIOS hoặc UEFI"
#.
#. Number of bad block check passes (singular for 1 pass)
msgid "%d pass"
msgstr "Qua %d lần"
msgstr "Đạt %d lần"
#. • MSG_035
#.
#. Number of bad block check passes (plural for 2 or more passes).
#. See MSG_087 for the message that %s gets replaced with.
msgid "%d passes %s"
msgstr "Qua %d lần %s"
msgstr "Đã đạt %d lần %s"
#. • MSG_036
msgid "ISO Image"
@ -373,7 +373,7 @@ msgstr "Khởi chạy"
#. • MSG_041
msgid "Operation cancelled by the user"
msgstr "Tiến trình bị huỷ bởi người dùng"
msgstr "Tiến trình đã bị huỷ bởi người dùng"
#. • MSG_042
msgid "Error"
@ -403,11 +403,11 @@ msgstr "Đa phân vùng"
#. • MSG_048
msgid "Rufus - Flushing buffers"
msgstr "Rufus - Xoá bộ đệm"
msgstr "Rufus - Đang xả bộ đệm"
#. • MSG_049
msgid "Rufus - Cancellation"
msgstr "Rufus - Huỷ"
msgstr "Rufus - Hủy bỏ"
#. • MSG_050
msgid "Success."
@ -423,15 +423,15 @@ msgstr "Không thể dùng hệ thống tập tin đã chọn cho thiết bị n
#. • MSG_053
msgid "Access to the device is denied."
msgstr "Thiết bị từ chối truy cập."
msgstr "Truy cập tới thiết bị đã bị từ chối."
#. • MSG_054
msgid "Media is write protected."
msgstr "Thiết bị được bảo vệ ghi."
msgstr "Thiết bị đang được bảo vệ ghi."
#. • MSG_055
msgid "The device is in use by another process. Please close any other process that may be accessing the device."
msgstr "Thiết bị đang được dùng bởi tiến trình khác. Vui lòng đóng mọi tiến trình có thể truy cập thiết bị."
msgstr "Thiết bị đang được dùng bởi tiến trình khác. Vui lòng đóng mọi tiến trình có thể đang truy cập thiết bị."
#. • MSG_056
msgid "Quick format is not available for this device."
@ -439,23 +439,23 @@ msgstr "Định dạng nhanh không khả dụng với thiết bị này."
#. • MSG_057
msgid "The volume label is invalid."
msgstr "n ổ đĩa không hợp lệ."
msgstr "Nhãn ổ đĩa không hợp lệ."
#. • MSG_058
msgid "The device handle is invalid."
msgstr "Xử lý thiết bị không hợp lệ."
msgstr "Tham chiếu thiết bị không hợp lệ."
#. • MSG_059
msgid "The selected cluster size is not valid for this device."
msgstr "Kích cỡ liên cung đã chọn không thích hợp với thiết bị này."
msgstr "Kích thước cụm đã chọn không hợp lệ với thiết bị này."
#. • MSG_060
msgid "The volume size is invalid."
msgstr "Kích cỡ ổ đĩa không hợp lệ."
msgstr "Kích cỡ thiết bị không hợp lệ."
#. • MSG_061
msgid "Please insert a removable media in drive."
msgstr "Vui lòng kết nối ổ gắn ngoài vào."
msgstr "Vui lòng cắm thiết bị lưu trữ di động vào ổ."
#. • MSG_062
msgid "An unsupported command was received."
@ -483,11 +483,11 @@ msgstr "Không thể mở thiết bị. Có thể nó đang được tiến trì
#. • MSG_068
msgid "Could not partition drive."
msgstr "Không thể phân vùng ổ đĩa."
msgstr "Không thể phân vùng thiết bị."
#. • MSG_069
msgid "Could not copy files to target drive."
msgstr "Không thể chép tập tin vào đĩa."
msgstr "Không thể sao chép tệp vào thiết bị đích."
#. • MSG_070
msgid "Cancelled by user."
@ -521,11 +521,11 @@ msgstr "Không thể vá/cài đặt tập tin cho việc khởi động."
#. • MSG_077
msgid "Unable to assign a drive letter."
msgstr "Không thể định ký tự ổ đĩa."
msgstr "Không thể gán ký tự ổ đĩa."
#. • MSG_078
msgid "Can't mount GUID volume."
msgstr "Không thể gắn kết GUID."
msgstr "Không thể gắn kết phân vùng GUID."
#. • MSG_079
msgid "The device is not ready."
@ -539,11 +539,11 @@ msgid ""
"\n"
"We recommend that you let Windows finish, to avoid corruption. But if you grow tired of waiting, you can just unplug the device..."
msgstr ""
"Rufus đã phát hiện Windows vẫn đang làm sạch bộ đệm bên trong thiết bị USB.\n"
"Rufus đã phát hiện Windows vẫn đang xả bộ đệm bên trong thiết bị USB.\n"
"\n"
"Tuỳ thuộc vào tốc độ của thiết bị USB, hoạt động này có thể mất một thời gian dài để hoàn tất, đặc biệt với những tập tin lớn.\n"
"Tuỳ thuộc vào tốc độ thiết bị USB của bạn, hoạt động này có thể mất một thời gian dài để hoàn tất, đặc biệt với những tập tin lớn.\n"
"\n"
"Chúng tôi khuyên bạn nên để Windows kết thúc để phòng hỏng dữ liệu. Nhưng nếu bạn cảm thấy quá lâu, hãy cứ tháo thiết bị ra..."
"Chúng tôi khuyên rằng bạn nên để Windows kết thúc để phòng hỏng dữ liệu. Nhưng nếu bạn cảm thấy quá lâu, hãy cứ tháo thiết bị ra..."
#. • MSG_081
msgid "Unsupported image"
@ -551,7 +551,7 @@ msgstr "Tệp tin không được hỗ trợ"
#. • MSG_082
msgid "This image is either non-bootable, or it uses a boot or compression method that is not supported by Rufus..."
msgstr "Tệp này không có khả năng khởi động hoặc sử dụng một phương thức khởi động hoặc nén không được Rufus hỗ trợ..."
msgstr "Tệp này không có khả năng khởi động hoặc sử dụng một tuỳ chọn khởi động hoặc nén không được Rufus hỗ trợ..."
#. • MSG_083
msgid "Replace %s?"
@ -585,7 +585,7 @@ msgstr "Đang tải xuống %s"
#. • MSG_086
msgid "No image selected"
msgstr "Chưa chọn tệp tin"
msgstr "Chưa tệp tin nào được chọn"
#. • MSG_087
#.
@ -604,7 +604,7 @@ msgstr "Tệp tin quá lớn"
#. • MSG_089
msgid "The image is too big for the selected target."
msgstr "Tệp tin quá lớn cho đĩa đã chọn."
msgstr "Tệp tin quá lớn cho thiết bị đích đã chọn."
#. • MSG_090
msgid "Unsupported ISO"
@ -612,7 +612,7 @@ msgstr "ISO không được hỗ trợ"
#. • MSG_091
msgid "When using UEFI Target Type, only EFI bootable ISO images are supported. Please select an EFI bootable ISO or set the Target Type to BIOS."
msgstr "Khi dùng loại hệ thống là UEFI, chỉ có tệp ISO có thể khởi động với EFI được hỗ trợ. Vui lòng chọn tệp phù hợp hoặc chọn loại hệ thống là BIOS."
msgstr "Khi sử dụng kiểu hệ thống khởi động UEFI, chỉ hỗ trợ các tệp ISO có khả năng khởi động bằng EFI. Vui lòng chọn một tệp ISO có hỗ trợ EFI hoặc chuyển kiểu hệ thống khởi động sang BIOS."
#. • MSG_092
msgid "Unsupported filesystem"
@ -638,7 +638,7 @@ msgstr "Tệp tin DD"
#. • MSG_096
msgid "The file system currently selected can not be used with this type of ISO. Please select a different file system or use a different ISO."
msgstr "Không thể dùng loại ISO này với hệ thống tập tin đã chọn. Vui lòng chọn một hệ thống tập tin hoặc ISO khác."
msgstr "Không thể dùng loại ISO này với hệ thống tập tin đã chọn. Vui lòng chọn một hệ thống tập tin hoặc chọn tệp ISO khác."
#. • MSG_097
msgid "'%s' can only be applied if the file system is NTFS."
@ -652,11 +652,11 @@ msgid ""
"\n"
"Note: The 'FIXED/REMOVABLE' attribute is a hardware property that can only be changed using custom tools from the drive manufacturer. However those tools are ALMOST NEVER provided to the public..."
msgstr ""
"QUAN TRỌNG: Bạn đang cố cài đặt 'Windows To Go', nhưng ổ đĩa không có thuộc tính 'CỐ ĐỊNH'. Vì vậy, Windows có thể sẽ đóng băng tại điểm khởi động, do Microsoft không thiết kế nó để chạy với ổ đĩa có thuộc tính 'CÓ THỂ THÁO ĐƯỢC'. \n"
"QUAN TRỌNG: Bạn đang cố cài đặt Windows To Go, nhưng ổ đĩa đích của bạn không có thuộc tính “CỐ ĐỊNH” (FIXED). Do đó, Windows có thể bị treo khi khởi động, vì Microsoft không thiết kế Windows To Go để hoạt động với ổ đĩa có thuộc tính “THÁO RỜI” (REMOVABLE).\n"
"\n"
"Bạn vẫn muốn tiến hành?\n"
"Bạn có chắc chắn muốn tiếp tục không?\n"
"\n"
"Ghi chú: Thuộc tính 'CỐ ĐỊNH/CÓ THỂ THÁO ĐƯỢC' là một thuộc tính phần cứng chỉ có thể thay đổi bằng các công cụ tuỳ chỉnh từ nhà sản xuất ổ đĩa. Tuy nhiên những công cụ này HẦU NHƯ KHÔNG BAO GIỜ được cung cấp công khai..."
"Lưu ý: Thuộc tính “CỐ ĐỊNH/THÁO RỜI” là một đặc điểm phần cứng và chỉ có thể thay đổi bằng công cụ đặc biệt từ nhà sản xuất ổ đĩa. Tuy nhiên, những công cụ này HẦU NHƯ KHÔNG bao giờ được cung cấp cho người dùng phổ thông..."
#. • MSG_099
msgid "Filesystem limitation"
@ -697,7 +697,7 @@ msgid ""
"Note: The file will be downloaded in the current directory and once a '%s' exists there, it will be reused automatically."
msgstr ""
"%s hoặc mới hơn yêu cầu tập tin '%s' được cài đặt.\n"
"Vì tập tin này lớn hơn 100 KB, và luôn có trong ảnh ISO %s, nó không được kèm theo trong Rufus.\n"
"Vì tập tin này lớn hơn 100 KB, và luôn có trong các tệp ISO %s, nó không được kèm theo trong Rufus.\n"
"\n"
"Rufus có thể tải xuống tập tin còn thiếu cho bạn:\n"
"- Chọn 'Có' để kết nối với Internet và tải tập tin\n"
@ -737,12 +737,12 @@ msgid ""
"MS-DOS cannot boot from a drive using a 64 kilobytes Cluster size.\n"
"Please change the Cluster size or use FreeDOS."
msgstr ""
"MS-DOS không thể khởi động từ ổ đĩa dùng kích thước liên cung 64 kilobytes.\n"
"Vui lòng thay đổi kích thước liên cung hoặc dùng FreeDOS."
"MS-DOS không thể khởi động từ ổ đĩa có kích thước cụm là 64 kilobyte.\n"
"Vui lòng thay đổi kích thước cụm hoặc sử dụng FreeDOS thay thế."
#. • MSG_111
msgid "Incompatible Cluster size"
msgstr "Kích thước liên cung không tương thích"
msgstr "Kích thước cụm không tương thích"
#. • MSG_112
#.
@ -809,7 +809,7 @@ msgstr "Cài đặt Windows tiêu chuẩn"
#. http://en.wikipedia.org/wiki/Windows_To_Go in your language.
#. Otherwise, you may add a parenthesis eg. "Windows To Go (<hint at what it does>)"
msgid "Windows To Go"
msgstr "Windows To Go"
msgstr ""
#. • MSG_119
msgid "advanced drive properties"
@ -884,7 +884,7 @@ msgstr ""
#. • MSG_132
msgid "Another program or process is accessing this drive. Do you want to format it anyway?"
msgstr "Có một chương trình hoặc tiến trình nào đó đang truy cập ổ. Bạn vẫn muốn định dạng ổ đĩa?"
msgstr "Có một chương trình hoặc tiến trình khác đang truy cập ổ. Bạn vẫn muốn định dạng ổ đĩa?"
#. • MSG_133
msgid ""
@ -1014,11 +1014,11 @@ msgstr ""
#. • MSG_160
msgid "Toggle advanced options"
msgstr "Bật/tắt tuỳ chọn nâng cao"
msgstr "Bật/tắt các tuỳ chọn nâng cao"
#. • MSG_161
msgid "Check the device for bad blocks using a test pattern"
msgstr "Kiểm tra khối hỏng bằng mẫu thử"
msgstr "Kiểm tra thiết bị tìm khối lỗi bằng mẫu kiểm tra"
#. • MSG_162
msgid "Uncheck this box to use the \"slow\" format method"
@ -1054,7 +1054,7 @@ msgstr ""
#. • MSG_170
msgid "Enable the listing of USB Hard Drive enclosures. USE AT YOUR OWN RISKS!!!"
msgstr "Kích hoạt liệt kê ổ cứng USB trong máy. DÙNG CẨN TRỌNG!!!"
msgstr "Bật hiển thị các ổ cứng gắn ngoài qua USB. TỰ CHỊU RỦI RO KHI SỬ DỤNG!!!"
#. • MSG_171
msgid ""
@ -1085,7 +1085,7 @@ msgstr "Phiên bản %d.%d (Bản dựng %d)"
#. • MSG_176
msgid "English translation: Pete Batard <mailto:pete@akeo.ie>"
msgstr "Bản dịch tiếng Việt:\\line• thanhtai2009 <mailto:thanhtai2009@outlook.com>\\line• caobach <mailto:caobach@gmail.com>\\line• VNSpringRice <mailto:admin@quangminh.name.vn>"
msgstr "Bản dịch Tiếng Việt:\\line• thanhtai2009 <mailto:thanhtai2009@outlook.com>\\line• caobach <mailto:caobach@gmail.com>\\line• Nguyễn Quang Minh (MinhNQ101) <mailto:admin@quangminh.name.vn>"
#. • MSG_177
msgid "Report bugs or request enhancements at:"
@ -1580,7 +1580,7 @@ msgstr "Không có khả năng khởi động"
#. • MSG_280
msgid "Disk or ISO image"
msgstr "Đĩa hoặc tệp tin"
msgstr "Đĩa hoặc tệp tin ISO"
#. • MSG_281
msgid "%s (Please select)"
@ -1588,7 +1588,7 @@ msgstr "%s (Vui lòng chọn)"
#. • MSG_282
msgid "Exclusive USB drive locking"
msgstr "Khoá ổ USB đặc biệt"
msgstr "Chặn truy cập ổ USB từ chương trình khác"
#. • MSG_283
msgid "Invalid signature"
@ -1618,7 +1618,7 @@ msgstr "Phát hiện ổ đĩa tháo được không phải USB"
#. • MSG_288
msgid "Missing elevated privileges"
msgstr "Thiếu đặc quyền"
msgstr "Thiếu quyền quản trị"
#. • MSG_289
msgid "This application can only run with elevated privileges"
@ -1805,7 +1805,7 @@ msgstr "Đang áp dụng các cài đặt người dùng..."
#. • MSG_327
msgid "Windows User Experience"
msgstr "Trải nghiệm người dùng Windows"
msgstr ""
#. • MSG_328
msgid "Customize Windows installation?"
@ -1829,7 +1829,7 @@ msgstr "Ngăn cản Windows To Go truy cập ổ đĩa trong"
#. • MSG_333
msgid "Create a local account with username:"
msgstr "Tạo tài khoản nội bộ với tên:"
msgstr "Tạo tài khoản nội bộ với tên người dùng:"
#. • MSG_334
msgid "Set regional options to the same values as this user's"
@ -1841,7 +1841,7 @@ msgstr "Vô hiệu tự động mã hoá thiết bị BitLocker"
#. • MSG_336
msgid "Persistent log"
msgstr "Nhật ký"
msgstr "Nhật ký lưu vĩnh viễn"
#. • MSG_337
msgid ""
@ -1899,7 +1899,7 @@ msgid ""
"- Select 'Yes' to connect to the Internet and download it\n"
"- Select 'No' to cancel the operation"
msgstr ""
"Một vài dữ lieu phải được tải xuống từ Microsoft để sử dụng tính năng này:\n"
"Một vài dữ liu phải được tải xuống từ Microsoft để sử dụng tính năng này:\n"
"- Chọn 'Có' để kết nối tới Internet và tải xuống nó\n"
"- Chọn 'Không' để huỷ tiến trình"
@ -1919,11 +1919,41 @@ msgstr "Đang giải nén tệp lưu trữ: %s"
msgid "Use Rufus MBR"
msgstr "Sử dụng Rufus MBR"
#. • MSG_350
msgid "Use 'Windows UEFI CA 2023' signed bootloaders [EXPERIMENTAL]"
msgstr "Sử dụng bootloader đã được ký bởi chứng chỉ “Windows UEFI CA 2023” (TÍNH NĂNG THỬ NGHIỆM)"
#. • MSG_351
msgid "Checking for UEFI bootloader revocation..."
msgstr "Đang kiểm tra trạng thái thu hồi của bootloader UEFI..."
#. • MSG_352
msgid "Checking for UEFI DBX updates..."
msgstr "Đang kiểm tra cập nhật cơ sở dữ liệu chặn (DBX) của UEFI…"
#. • MSG_353
msgid "DBX update available"
msgstr "Đã phát hiện bản cập nhật DBX của UEFI"
#. • MSG_354
msgid ""
"Rufus has found an updated version of the DBX files used to perform UEFI Secure Boot revocation checks. Do you want to download this update?\n"
"- Select 'Yes' to connect to the Internet and download this content\n"
"- Select 'No' to cancel the operation\n"
"\n"
"Note: The files will be downloaded in the application's directory and will be reused automatically if present."
msgstr ""
"Rufus đã phát hiện phiên bản cập nhật của các tệp DBX, được dùng để kiểm tra thu hồi Secure Boot trong UEFI. Bạn có muốn tải bản cập nhật này không?\n"
"- Chọn “Có” để kết nối Internet và tải nội dung này.\n"
"- Chọn “Không” để hủy thao tác.\n"
"\n"
"Lưu ý: Các tệp sẽ được tải về thư mục của ứng dụng và sẽ tự động được sử dụng lại nếu đã có sẵn."
#. • MSG_900
#.
#. The following messages are for the Windows Store listing only and are not used by the application
msgid "Rufus is a utility that helps format and create bootable USB flash drives, such as USB keys/pendrives, memory sticks, etc."
msgstr "Rufus là một tiện ích giúp định dạng và tạo khả năng khởi động cho USB, chẳng hạn như thẻ USB/đĩa di động, thẻ nhớ, vv."
msgstr "Rufus là một tiện ích giúp định dạng và tạo khả năng khởi động cho các thiết bị USB, ví dụ như thẻ USB/đĩa di động, thẻ nhớ, v.v..."
#. • MSG_901
msgid "Official site: %s"

File diff suppressed because it is too large Load Diff

BIN
res/md5/bootloongarch64.efi Normal file

Binary file not shown.

63
res/scripts/loadcfg.py Normal file
View File

@ -0,0 +1,63 @@
#!/bin/env python3
# PE Load Configuration section enabler for MinGW/gcc executables.
# The PE executable should have a IMAGE_LOAD_CONFIG_DIRECTORY## section
# in .rdata with a 16-byte IMAGE_DIRECTORY_ENTRY_MARKER marker.
import os
import sys
import pefile
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG = 10
IMAGE_DIRECTORY_ENTRY_MARKER = b"_RUFUS_LOAD_CFG"
if len(sys.argv) < 2:
raise RuntimeError("No executable path supplied")
# Create a temp file as our source
pe_dst = sys.argv[1]
pe_src = sys.argv[1] + ".tmp"
os.replace(pe_dst, pe_src)
# Open and parse PE
pe = pefile.PE(pe_src)
# Find .rdata section
rdata_section = next(
(s for s in pe.sections if s.Name.rstrip(b'\x00') == b'.rdata'),
None
)
if not rdata_section:
raise RuntimeError(".rdata section not found")
# Read the section's raw data to search for the target string
raw_data = rdata_section.get_data()
# Look for the target data in the raw section data
offset = raw_data.find(IMAGE_DIRECTORY_ENTRY_MARKER)
if offset == -1:
raise RuntimeError("Load Config marker not found")
# Move past our 16 bytes marker
offset += 0x10
# Calculate the RVA and size of the Load Config section
load_config_rva = rdata_section.VirtualAddress + offset
print(f"RVA of Load Config: 0x{load_config_rva:X}")
load_config_size = pe.get_dword_at_rva(load_config_rva)
if (load_config_size < 0x20):
raise RuntimeError("Size of Load Config section is too small")
print(f"Size of Load Config: 0x{load_config_size:X}")
# Update Load Config directory entry
pe.OPTIONAL_HEADER.DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG].VirtualAddress = load_config_rva
pe.OPTIONAL_HEADER.DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG].Size = load_config_size
# Update the checksum
pe.OPTIONAL_HEADER.CheckSum = pe.generate_checksum()
# Write the updated PE file and remove temp
pe.write(pe_dst)
os.remove(pe_src)
# Can be validated with `DUMPBIN /LOADCONFIG <.exe>` or `objdump -x <.exe> | grep "Load Configuration"`
print(f"Successfully enabled Load Config section in '{pe_dst}'")

View File

@ -33,11 +33,11 @@ and can be validated to not have been tampered through SHA-256 validation (Since
produce SHA-256 hashes during the build process per:
https://github.com/pbatard/rufus/blob/master/.github/workflows/setup.yml).
Per the https://github.com/pbatard/rufus/actions/runs/11195726475 GitHub Actions
Per the https://github.com/pbatard/rufus/actions/runs/16191913388 GitHub Actions
workflow run, the SHA-256 for the executables (before signature was applied) were:
* 4e99f49b456781c92d2010a626706557df69334c6fc71ac129625f41fa311dd8 *./setup_x64.exe
* a0d7dea2228415eb5afe34419a31eeda90f9b51338f47bc8a5ef591054277f4b *./setup_arm64.exe
* f8e1c7c5f1297be7a76d73567d4d82f61bb20c2e5c86d2a2f8d2e5961751d658 *./setup_x64.exe
* e6ff77b859231cc58c872c7b14ce9def73244641e487bbb074d3a759bdfcbc8d *./setup_arm64.exe
You will also find the VirusTotal reports for the current signed executable at:
* https://www.virustotal.com/gui/file/a74dbfc0e2a5b2e3fd4ad3f9fdaea0060c5d29a16151b9a570a9bd653db966a7/detection
* https://www.virustotal.com/gui/file/629fdda27e200ec98703a7606ca4e2d0e44c578341779e4d5c447d45fc860c69/detection
* https://www.virustotal.com/gui/file/11df838dc69378187e1e1aaf32d34384157642d07096c6e49c1d0e7375634544/detection
* https://www.virustotal.com/gui/file/14bd07f559513890a0f6565df3927392b4fe6b8e6fc3f5e832e9d69c8b7bb7eb/detection

View File

@ -98,6 +98,13 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
STARTUPINFOA si = { 0 };
PROCESS_INFORMATION pi = { 0 };
SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };
WCHAR *wc, wPath[MAX_PATH] = { 0 };
// If invoked from a different directory, cd to where this executable resides
if (GetModuleFileName(NULL, wPath, ARRAYSIZE(wPath)) != 0 && (wc = wcsrchr(wPath, L'\\')) != NULL) {
*wc = L'\0';
SetCurrentDirectory(wPath);
}
// Make sure we have 'setup.dll' in the same directory
dwAttrib = GetFileAttributesA("setup.dll");
@ -118,7 +125,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNORMAL;
CreateProcessA("setup.dll", NULL, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
CreateProcessA("setup.dll", lpCmdLine, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);

Binary file not shown.

Binary file not shown.

View File

@ -13,11 +13,11 @@ o Secure Boot signed NTFS UEFI drivers, derived from ntfs-3g [1].
ARM driver (ntfs_arm.efi) is not Secure Boot signed.
o Non Secure Boot signed exFAT UEFI drivers from EfiFs [2].
These drivers are the exact same as the binaries from EfiFs release 1.9 but,
These drivers are the exact same as the binaries from EfiFs release 1.11 but,
because they are licensed under GPLv3, cannot be Secure Boot signed.
o Secure Boot signed UEFI:NTFS bootloader binaries [3].
These drivers are the exact same as the binaries from release 2.3, except for
These drivers are the exact same as the binaries from release 2.6, except for
the addition of Microsoft's Secure Boot signature.
Note that, per Microsoft's current Secure Boot signing policies, the 32-bit
ARM bootloader (bootarm.efi) is not Secure Boot signed.

Binary file not shown.

View File

@ -1,8 +1,11 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29215.179
# Visual Studio Version 17
VisualStudioVersion = 17.8.34330.188
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "rufus", ".vs\rufus.vcxproj", "{731858A7-0303-4988-877B-9C0DD6471864}"
ProjectSection(ProjectDependencies) = postProject
{633CFC82-E01B-4777-BDE4-DC0739804332} = {633CFC82-E01B-4777-BDE4-DC0739804332}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ms-sys", ".vs\ms-sys.vcxproj", "{2B1D078D-8EB4-4398-9CA4-23457265A7F6}"
EndProject
@ -24,8 +27,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bled", ".vs\bled.vcxproj",
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ext2fs", ".vs\ext2fs.vcxproj", "{B01F5886-2B39-4B66-B65C-6427135B6A02}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wimlib", ".vs\wimlib.vcxproj", "{633CFC82-E01B-4777-BDE4-DC0739804332}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|arm = Debug|arm
@ -214,6 +217,22 @@ Global
{B01F5886-2B39-4B66-B65C-6427135B6A02}.Release|x64.Build.0 = Release|x64
{B01F5886-2B39-4B66-B65C-6427135B6A02}.Release|x86.ActiveCfg = Release|Win32
{B01F5886-2B39-4B66-B65C-6427135B6A02}.Release|x86.Build.0 = Release|Win32
{633CFC82-E01B-4777-BDE4-DC0739804332}.Debug|arm.ActiveCfg = Debug|ARM
{633CFC82-E01B-4777-BDE4-DC0739804332}.Debug|arm.Build.0 = Debug|ARM
{633CFC82-E01B-4777-BDE4-DC0739804332}.Debug|arm64.ActiveCfg = Debug|ARM64
{633CFC82-E01B-4777-BDE4-DC0739804332}.Debug|arm64.Build.0 = Debug|ARM64
{633CFC82-E01B-4777-BDE4-DC0739804332}.Debug|x64.ActiveCfg = Debug|x64
{633CFC82-E01B-4777-BDE4-DC0739804332}.Debug|x64.Build.0 = Debug|x64
{633CFC82-E01B-4777-BDE4-DC0739804332}.Debug|x86.ActiveCfg = Debug|Win32
{633CFC82-E01B-4777-BDE4-DC0739804332}.Debug|x86.Build.0 = Debug|Win32
{633CFC82-E01B-4777-BDE4-DC0739804332}.Release|arm.ActiveCfg = Release|ARM
{633CFC82-E01B-4777-BDE4-DC0739804332}.Release|arm.Build.0 = Release|ARM
{633CFC82-E01B-4777-BDE4-DC0739804332}.Release|arm64.ActiveCfg = Release|ARM64
{633CFC82-E01B-4777-BDE4-DC0739804332}.Release|arm64.Build.0 = Release|ARM64
{633CFC82-E01B-4777-BDE4-DC0739804332}.Release|x64.ActiveCfg = Release|x64
{633CFC82-E01B-4777-BDE4-DC0739804332}.Release|x64.Build.0 = Release|x64
{633CFC82-E01B-4777-BDE4-DC0739804332}.Release|x86.ActiveCfg = Release|Win32
{633CFC82-E01B-4777-BDE4-DC0739804332}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -1,11 +1,9 @@
SUBDIRS = ../.mingw bled ext2fs ms-sys syslinux/libfat syslinux/libinstaller syslinux/win libcdio/iso9660 libcdio/udf libcdio/driver ../res/loc
SUBDIRS = ../.mingw bled ext2fs ms-sys syslinux/libfat syslinux/libinstaller syslinux/win libcdio/iso9660 libcdio/udf libcdio/driver wimlib ../res/loc
# As far as I can tell, the following libraries are *not* vulnerable to side-loading, so we link using their regular version:
NONVULNERABLE_LIBS = -lsetupapi -lole32 -lgdi32 -lshlwapi -lcrypt32 -lcomctl32 -luuid
NONVULNERABLE_LIBS = -lole32 -lgdi32 -lshlwapi -lcomctl32 -luuid -lntdll
# The following libraries are vulnerable (or have an unknown vulnerability status), so we link using our delay-loaded replacement:
# Ideally there would also be virtdisk and wininet as delaylib's below, but the MinGW folks haven't quite sorted out delay-loading
# for x86_32 so as soon as you try to call APIs from these, the application will crash!
# See https://github.com/pbatard/rufus/issues/2272
VULNERABLE_LIBS = -ldwmapi-delaylib -lversion-delaylib -lvirtdisk-delaylib -lwininet-delaylib -lwintrust-delaylib
VULNERABLE_LIBS = -lcrypt32-delaylib -ldwmapi-delaylib -lsetupapi-delaylib -luxtheme-delaylib -lversion-delaylib -lvirtdisk-delaylib -lwininet-delaylib -lwintrust-delaylib
noinst_PROGRAMS = rufus
@ -17,10 +15,10 @@ AM_V_WINDRES = $(AM_V_WINDRES_$(V))
%_rc.o: %.rc ../res/loc/embedded.loc
$(AM_V_WINDRES) $(AM_RCFLAGS) -i $< -o $@
rufus_SOURCES = badblocks.c cpu.c dev.c dos.c dos_locale.c drive.c format.c format_ext.c format_fat32.c hash.c icon.c iso.c \
localization.c net.c parser.c pki.c process.c re.c rufus.c smart.c stdfn.c stdio.c stdlg.c syslinux.c ui.c vhd.c wue.c
rufus_CFLAGS = -I$(srcdir)/ms-sys/inc -I$(srcdir)/syslinux/libfat -I$(srcdir)/syslinux/libinstaller -I$(srcdir)/syslinux/win -I$(srcdir)/libcdio $(AM_CFLAGS) \
-DEXT2_FLAT_INCLUDES=0 -DSOLUTION=rufus
rufus_LDFLAGS = $(AM_LDFLAGS) -mwindows -L ../.mingw
rufus_SOURCES = badblocks.c darkmode.c dev.c dos.c dos_locale.c drive.c format.c format_ext.c format_fat32.c hash.c icon.c iso.c localization.c \
net.c parser.c pki.c process.c cregex_compile.c cregex_parse.c cregex_vm.c rufus.c smart.c stdfn.c stdio.c stdlg.c syslinux.c ui.c vhd.c wue.c xml.c
rufus_CFLAGS = -I$(srcdir)/ms-sys/inc -I$(srcdir)/syslinux/libfat -I$(srcdir)/syslinux/libinstaller -I$(srcdir)/syslinux/win -I$(srcdir)/libcdio -I$(srcdir)/wimlib -I$(srcdir)/../res $(AM_CFLAGS) \
-DEXT2_FLAT_INCLUDES=0 -D_RUFUS -DSOLUTION=rufus
rufus_LDFLAGS = $(AM_LDFLAGS) -mwindows -L../.mingw
rufus_LDADD = rufus_rc.o bled/libbled.a ext2fs/libext2fs.a ms-sys/libmssys.a syslinux/libfat/libfat.a syslinux/libinstaller/libinstaller.a syslinux/win/libwin.a \
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a libcdio/driver/libdriver.a $(NONVULNERABLE_LIBS) $(VULNERABLE_LIBS)
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a libcdio/driver/libdriver.a wimlib/libwim.a $(NONVULNERABLE_LIBS) $(VULNERABLE_LIBS)

View File

@ -87,7 +87,7 @@ mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
PROGRAMS = $(noinst_PROGRAMS)
am_rufus_OBJECTS = rufus-badblocks.$(OBJEXT) rufus-cpu.$(OBJEXT) \
am_rufus_OBJECTS = rufus-badblocks.$(OBJEXT) rufus-darkmode.$(OBJEXT) \
rufus-dev.$(OBJEXT) rufus-dos.$(OBJEXT) \
rufus-dos_locale.$(OBJEXT) rufus-drive.$(OBJEXT) \
rufus-format.$(OBJEXT) rufus-format_ext.$(OBJEXT) \
@ -95,19 +95,21 @@ am_rufus_OBJECTS = rufus-badblocks.$(OBJEXT) rufus-cpu.$(OBJEXT) \
rufus-icon.$(OBJEXT) rufus-iso.$(OBJEXT) \
rufus-localization.$(OBJEXT) rufus-net.$(OBJEXT) \
rufus-parser.$(OBJEXT) rufus-pki.$(OBJEXT) \
rufus-process.$(OBJEXT) rufus-re.$(OBJEXT) \
rufus-process.$(OBJEXT) rufus-cregex_compile.$(OBJEXT) \
rufus-cregex_parse.$(OBJEXT) rufus-cregex_vm.$(OBJEXT) \
rufus-rufus.$(OBJEXT) rufus-smart.$(OBJEXT) \
rufus-stdfn.$(OBJEXT) rufus-stdio.$(OBJEXT) \
rufus-stdlg.$(OBJEXT) rufus-syslinux.$(OBJEXT) \
rufus-ui.$(OBJEXT) rufus-vhd.$(OBJEXT) rufus-wue.$(OBJEXT)
rufus-ui.$(OBJEXT) rufus-vhd.$(OBJEXT) rufus-wue.$(OBJEXT) \
rufus-xml.$(OBJEXT)
rufus_OBJECTS = $(am_rufus_OBJECTS)
am__DEPENDENCIES_1 =
rufus_DEPENDENCIES = rufus_rc.o bled/libbled.a ext2fs/libext2fs.a \
ms-sys/libmssys.a syslinux/libfat/libfat.a \
syslinux/libinstaller/libinstaller.a syslinux/win/libwin.a \
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a \
libcdio/driver/libdriver.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
libcdio/driver/libdriver.a wimlib/libwim.a \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
rufus_LINK = $(CCLD) $(rufus_CFLAGS) $(CFLAGS) $(rufus_LDFLAGS) \
$(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
@ -273,27 +275,25 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = ../.mingw bled ext2fs ms-sys syslinux/libfat syslinux/libinstaller syslinux/win libcdio/iso9660 libcdio/udf libcdio/driver ../res/loc
SUBDIRS = ../.mingw bled ext2fs ms-sys syslinux/libfat syslinux/libinstaller syslinux/win libcdio/iso9660 libcdio/udf libcdio/driver wimlib ../res/loc
# As far as I can tell, the following libraries are *not* vulnerable to side-loading, so we link using their regular version:
NONVULNERABLE_LIBS = -lsetupapi -lole32 -lgdi32 -lshlwapi -lcrypt32 -lcomctl32 -luuid
NONVULNERABLE_LIBS = -lole32 -lgdi32 -lshlwapi -lcomctl32 -luuid -lntdll
# The following libraries are vulnerable (or have an unknown vulnerability status), so we link using our delay-loaded replacement:
# Ideally there would also be virtdisk and wininet as delaylib's below, but the MinGW folks haven't quite sorted out delay-loading
# for x86_32 so as soon as you try to call APIs from these, the application will crash!
# See https://github.com/pbatard/rufus/issues/2272
VULNERABLE_LIBS = -ldwmapi-delaylib -lversion-delaylib -lvirtdisk-delaylib -lwininet-delaylib -lwintrust-delaylib
VULNERABLE_LIBS = -lcrypt32-delaylib -ldwmapi-delaylib -lsetupapi-delaylib -luxtheme-delaylib -lversion-delaylib -lvirtdisk-delaylib -lwininet-delaylib -lwintrust-delaylib
AM_V_WINDRES_0 = @echo " RC $@";$(WINDRES)
AM_V_WINDRES_1 = $(WINDRES)
AM_V_WINDRES_ = $(AM_V_WINDRES_$(AM_DEFAULT_VERBOSITY))
AM_V_WINDRES = $(AM_V_WINDRES_$(V))
rufus_SOURCES = badblocks.c cpu.c dev.c dos.c dos_locale.c drive.c format.c format_ext.c format_fat32.c hash.c icon.c iso.c \
localization.c net.c parser.c pki.c process.c re.c rufus.c smart.c stdfn.c stdio.c stdlg.c syslinux.c ui.c vhd.c wue.c
rufus_SOURCES = badblocks.c darkmode.c dev.c dos.c dos_locale.c drive.c format.c format_ext.c format_fat32.c hash.c icon.c iso.c localization.c \
net.c parser.c pki.c process.c cregex_compile.c cregex_parse.c cregex_vm.c rufus.c smart.c stdfn.c stdio.c stdlg.c syslinux.c ui.c vhd.c wue.c xml.c
rufus_CFLAGS = -I$(srcdir)/ms-sys/inc -I$(srcdir)/syslinux/libfat -I$(srcdir)/syslinux/libinstaller -I$(srcdir)/syslinux/win -I$(srcdir)/libcdio $(AM_CFLAGS) \
-DEXT2_FLAT_INCLUDES=0 -DSOLUTION=rufus
rufus_CFLAGS = -I$(srcdir)/ms-sys/inc -I$(srcdir)/syslinux/libfat -I$(srcdir)/syslinux/libinstaller -I$(srcdir)/syslinux/win -I$(srcdir)/libcdio -I$(srcdir)/wimlib -I$(srcdir)/../res $(AM_CFLAGS) \
-DEXT2_FLAT_INCLUDES=0 -D_RUFUS -DSOLUTION=rufus
rufus_LDFLAGS = $(AM_LDFLAGS) -mwindows -L ../.mingw
rufus_LDFLAGS = $(AM_LDFLAGS) -mwindows -L../.mingw
rufus_LDADD = rufus_rc.o bled/libbled.a ext2fs/libext2fs.a ms-sys/libmssys.a syslinux/libfat/libfat.a syslinux/libinstaller/libinstaller.a syslinux/win/libwin.a \
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a libcdio/driver/libdriver.a $(NONVULNERABLE_LIBS) $(VULNERABLE_LIBS)
libcdio/iso9660/libiso9660.a libcdio/udf/libudf.a libcdio/driver/libdriver.a wimlib/libwim.a $(NONVULNERABLE_LIBS) $(VULNERABLE_LIBS)
all: all-recursive
@ -355,11 +355,11 @@ rufus-badblocks.o: badblocks.c
rufus-badblocks.obj: badblocks.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-badblocks.obj `if test -f 'badblocks.c'; then $(CYGPATH_W) 'badblocks.c'; else $(CYGPATH_W) '$(srcdir)/badblocks.c'; fi`
rufus-cpu.o: cpu.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-cpu.o `test -f 'cpu.c' || echo '$(srcdir)/'`cpu.c
rufus-darkmode.o: darkmode.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-darkmode.o `test -f 'darkmode.c' || echo '$(srcdir)/'`darkmode.c
rufus-cpu.obj: cpu.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-cpu.obj `if test -f 'cpu.c'; then $(CYGPATH_W) 'cpu.c'; else $(CYGPATH_W) '$(srcdir)/cpu.c'; fi`
rufus-darkmode.obj: darkmode.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-darkmode.obj `if test -f 'darkmode.c'; then $(CYGPATH_W) 'darkmode.c'; else $(CYGPATH_W) '$(srcdir)/darkmode.c'; fi`
rufus-dev.o: dev.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-dev.o `test -f 'dev.c' || echo '$(srcdir)/'`dev.c
@ -451,11 +451,23 @@ rufus-process.o: process.c
rufus-process.obj: process.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-process.obj `if test -f 'process.c'; then $(CYGPATH_W) 'process.c'; else $(CYGPATH_W) '$(srcdir)/process.c'; fi`
rufus-re.o: re.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-re.o `test -f 're.c' || echo '$(srcdir)/'`re.c
rufus-cregex_compile.o: cregex_compile.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-cregex_compile.o `test -f 'cregex_compile.c' || echo '$(srcdir)/'`cregex_compile.c
rufus-re.obj: re.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-re.obj `if test -f 're.c'; then $(CYGPATH_W) 're.c'; else $(CYGPATH_W) '$(srcdir)/re.c'; fi`
rufus-cregex_compile.obj: cregex_compile.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-cregex_compile.obj `if test -f 'cregex_compile.c'; then $(CYGPATH_W) 'cregex_compile.c'; else $(CYGPATH_W) '$(srcdir)/cregex_compile.c'; fi`
rufus-cregex_parse.o: cregex_parse.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-cregex_parse.o `test -f 'cregex_parse.c' || echo '$(srcdir)/'`cregex_parse.c
rufus-cregex_parse.obj: cregex_parse.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-cregex_parse.obj `if test -f 'cregex_parse.c'; then $(CYGPATH_W) 'cregex_parse.c'; else $(CYGPATH_W) '$(srcdir)/cregex_parse.c'; fi`
rufus-cregex_vm.o: cregex_vm.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-cregex_vm.o `test -f 'cregex_vm.c' || echo '$(srcdir)/'`cregex_vm.c
rufus-cregex_vm.obj: cregex_vm.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-cregex_vm.obj `if test -f 'cregex_vm.c'; then $(CYGPATH_W) 'cregex_vm.c'; else $(CYGPATH_W) '$(srcdir)/cregex_vm.c'; fi`
rufus-rufus.o: rufus.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-rufus.o `test -f 'rufus.c' || echo '$(srcdir)/'`rufus.c
@ -511,6 +523,12 @@ rufus-wue.o: wue.c
rufus-wue.obj: wue.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-wue.obj `if test -f 'wue.c'; then $(CYGPATH_W) 'wue.c'; else $(CYGPATH_W) '$(srcdir)/wue.c'; fi`
rufus-xml.o: xml.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-xml.o `test -f 'xml.c' || echo '$(srcdir)/'`xml.c
rufus-xml.obj: xml.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rufus_CFLAGS) $(CFLAGS) -c -o rufus-xml.obj `if test -f 'xml.c'; then $(CYGPATH_W) 'xml.c'; else $(CYGPATH_W) '$(srcdir)/xml.c'; fi`
# This directory's subdirectories are mostly independent; you can cd
# into them and run 'make' without going through this Makefile.
# To change the values of 'make' variables: instead of editing Makefiles,

View File

@ -549,7 +549,7 @@ static unsigned int test_rw(HANDLE hDrive, blk64_t last_block, size_t block_size
if (memcmp(read_buffer + i * block_size,
buffer + i * block_size,
block_size)) {
if_not_assert(currently_testing * block_size < 1 * PB)
if_assert_fails(currently_testing * block_size < 1 * PB)
goto out;
// coverity[overflow_const]
bb_count += bb_output(currently_testing+i-got, CORRUPTION_ERROR);

View File

@ -2,7 +2,9 @@ noinst_LIBRARIES = libbled.a
libbled_a_SOURCES = bled.c crc32.c data_align.c data_extract_all.c data_skip.c decompress_bunzip2.c \
decompress_gunzip.c decompress_uncompress.c decompress_unlzma.c decompress_unxz.c decompress_unzip.c \
decompress_vtsi.c filter_accept_all.c filter_accept_list.c filter_accept_reject_list.c find_list_entry.c \
header_list.c header_skip.c header_verbose_list.c init_handle.c open_transformer.c \
seek_by_jump.c seek_by_read.c xz_dec_bcj.c xz_dec_lzma2.c xz_dec_stream.c
decompress_unzstd.c decompress_vtsi.c filter_accept_all.c filter_accept_list.c filter_accept_reject_list.c \
find_list_entry.c fse_decompress.c header_list.c header_skip.c header_verbose_list.c huf_decompress.c \
init_handle.c open_transformer.c seek_by_jump.c seek_by_read.c xz_dec_bcj.c xz_dec_lzma2.c xz_dec_stream.c \
xxhash.c zstd_common.c zstd_decompress.c zstd_decompress_block.c zstd_ddict.c zstd_entropy_common.c \
zstd_error_private.c
libbled_a_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/.. -Wno-undef -Wno-strict-aliasing

View File

@ -103,21 +103,30 @@ am_libbled_a_OBJECTS = libbled_a-bled.$(OBJEXT) \
libbled_a-decompress_unlzma.$(OBJEXT) \
libbled_a-decompress_unxz.$(OBJEXT) \
libbled_a-decompress_unzip.$(OBJEXT) \
libbled_a-decompress_unzstd.$(OBJEXT) \
libbled_a-decompress_vtsi.$(OBJEXT) \
libbled_a-filter_accept_all.$(OBJEXT) \
libbled_a-filter_accept_list.$(OBJEXT) \
libbled_a-filter_accept_reject_list.$(OBJEXT) \
libbled_a-find_list_entry.$(OBJEXT) \
libbled_a-fse_decompress.$(OBJEXT) \
libbled_a-header_list.$(OBJEXT) \
libbled_a-header_skip.$(OBJEXT) \
libbled_a-header_verbose_list.$(OBJEXT) \
libbled_a-huf_decompress.$(OBJEXT) \
libbled_a-init_handle.$(OBJEXT) \
libbled_a-open_transformer.$(OBJEXT) \
libbled_a-seek_by_jump.$(OBJEXT) \
libbled_a-seek_by_read.$(OBJEXT) \
libbled_a-xz_dec_bcj.$(OBJEXT) \
libbled_a-xz_dec_lzma2.$(OBJEXT) \
libbled_a-xz_dec_stream.$(OBJEXT)
libbled_a-xz_dec_stream.$(OBJEXT) libbled_a-xxhash.$(OBJEXT) \
libbled_a-zstd_common.$(OBJEXT) \
libbled_a-zstd_decompress.$(OBJEXT) \
libbled_a-zstd_decompress_block.$(OBJEXT) \
libbled_a-zstd_ddict.$(OBJEXT) \
libbled_a-zstd_entropy_common.$(OBJEXT) \
libbled_a-zstd_error_private.$(OBJEXT)
libbled_a_OBJECTS = $(am_libbled_a_OBJECTS)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@ -269,9 +278,11 @@ top_srcdir = @top_srcdir@
noinst_LIBRARIES = libbled.a
libbled_a_SOURCES = bled.c crc32.c data_align.c data_extract_all.c data_skip.c decompress_bunzip2.c \
decompress_gunzip.c decompress_uncompress.c decompress_unlzma.c decompress_unxz.c decompress_unzip.c \
decompress_vtsi.c filter_accept_all.c filter_accept_list.c filter_accept_reject_list.c find_list_entry.c \
header_list.c header_skip.c header_verbose_list.c init_handle.c open_transformer.c \
seek_by_jump.c seek_by_read.c xz_dec_bcj.c xz_dec_lzma2.c xz_dec_stream.c
decompress_unzstd.c decompress_vtsi.c filter_accept_all.c filter_accept_list.c filter_accept_reject_list.c \
find_list_entry.c fse_decompress.c header_list.c header_skip.c header_verbose_list.c huf_decompress.c \
init_handle.c open_transformer.c seek_by_jump.c seek_by_read.c xz_dec_bcj.c xz_dec_lzma2.c xz_dec_stream.c \
xxhash.c zstd_common.c zstd_decompress.c zstd_decompress_block.c zstd_ddict.c zstd_entropy_common.c \
zstd_error_private.c
libbled_a_CFLAGS = $(AM_CFLAGS) -I$(srcdir)/.. -Wno-undef -Wno-strict-aliasing
all: all-am
@ -395,6 +406,12 @@ libbled_a-decompress_unzip.o: decompress_unzip.c
libbled_a-decompress_unzip.obj: decompress_unzip.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-decompress_unzip.obj `if test -f 'decompress_unzip.c'; then $(CYGPATH_W) 'decompress_unzip.c'; else $(CYGPATH_W) '$(srcdir)/decompress_unzip.c'; fi`
libbled_a-decompress_unzstd.o: decompress_unzstd.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-decompress_unzstd.o `test -f 'decompress_unzstd.c' || echo '$(srcdir)/'`decompress_unzstd.c
libbled_a-decompress_unzstd.obj: decompress_unzstd.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-decompress_unzstd.obj `if test -f 'decompress_unzstd.c'; then $(CYGPATH_W) 'decompress_unzstd.c'; else $(CYGPATH_W) '$(srcdir)/decompress_unzstd.c'; fi`
libbled_a-decompress_vtsi.o: decompress_vtsi.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-decompress_vtsi.o `test -f 'decompress_vtsi.c' || echo '$(srcdir)/'`decompress_vtsi.c
@ -425,6 +442,12 @@ libbled_a-find_list_entry.o: find_list_entry.c
libbled_a-find_list_entry.obj: find_list_entry.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-find_list_entry.obj `if test -f 'find_list_entry.c'; then $(CYGPATH_W) 'find_list_entry.c'; else $(CYGPATH_W) '$(srcdir)/find_list_entry.c'; fi`
libbled_a-fse_decompress.o: fse_decompress.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-fse_decompress.o `test -f 'fse_decompress.c' || echo '$(srcdir)/'`fse_decompress.c
libbled_a-fse_decompress.obj: fse_decompress.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-fse_decompress.obj `if test -f 'fse_decompress.c'; then $(CYGPATH_W) 'fse_decompress.c'; else $(CYGPATH_W) '$(srcdir)/fse_decompress.c'; fi`
libbled_a-header_list.o: header_list.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-header_list.o `test -f 'header_list.c' || echo '$(srcdir)/'`header_list.c
@ -443,6 +466,12 @@ libbled_a-header_verbose_list.o: header_verbose_list.c
libbled_a-header_verbose_list.obj: header_verbose_list.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-header_verbose_list.obj `if test -f 'header_verbose_list.c'; then $(CYGPATH_W) 'header_verbose_list.c'; else $(CYGPATH_W) '$(srcdir)/header_verbose_list.c'; fi`
libbled_a-huf_decompress.o: huf_decompress.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-huf_decompress.o `test -f 'huf_decompress.c' || echo '$(srcdir)/'`huf_decompress.c
libbled_a-huf_decompress.obj: huf_decompress.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-huf_decompress.obj `if test -f 'huf_decompress.c'; then $(CYGPATH_W) 'huf_decompress.c'; else $(CYGPATH_W) '$(srcdir)/huf_decompress.c'; fi`
libbled_a-init_handle.o: init_handle.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-init_handle.o `test -f 'init_handle.c' || echo '$(srcdir)/'`init_handle.c
@ -485,6 +514,48 @@ libbled_a-xz_dec_stream.o: xz_dec_stream.c
libbled_a-xz_dec_stream.obj: xz_dec_stream.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-xz_dec_stream.obj `if test -f 'xz_dec_stream.c'; then $(CYGPATH_W) 'xz_dec_stream.c'; else $(CYGPATH_W) '$(srcdir)/xz_dec_stream.c'; fi`
libbled_a-xxhash.o: xxhash.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-xxhash.o `test -f 'xxhash.c' || echo '$(srcdir)/'`xxhash.c
libbled_a-xxhash.obj: xxhash.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-xxhash.obj `if test -f 'xxhash.c'; then $(CYGPATH_W) 'xxhash.c'; else $(CYGPATH_W) '$(srcdir)/xxhash.c'; fi`
libbled_a-zstd_common.o: zstd_common.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-zstd_common.o `test -f 'zstd_common.c' || echo '$(srcdir)/'`zstd_common.c
libbled_a-zstd_common.obj: zstd_common.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-zstd_common.obj `if test -f 'zstd_common.c'; then $(CYGPATH_W) 'zstd_common.c'; else $(CYGPATH_W) '$(srcdir)/zstd_common.c'; fi`
libbled_a-zstd_decompress.o: zstd_decompress.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-zstd_decompress.o `test -f 'zstd_decompress.c' || echo '$(srcdir)/'`zstd_decompress.c
libbled_a-zstd_decompress.obj: zstd_decompress.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-zstd_decompress.obj `if test -f 'zstd_decompress.c'; then $(CYGPATH_W) 'zstd_decompress.c'; else $(CYGPATH_W) '$(srcdir)/zstd_decompress.c'; fi`
libbled_a-zstd_decompress_block.o: zstd_decompress_block.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-zstd_decompress_block.o `test -f 'zstd_decompress_block.c' || echo '$(srcdir)/'`zstd_decompress_block.c
libbled_a-zstd_decompress_block.obj: zstd_decompress_block.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-zstd_decompress_block.obj `if test -f 'zstd_decompress_block.c'; then $(CYGPATH_W) 'zstd_decompress_block.c'; else $(CYGPATH_W) '$(srcdir)/zstd_decompress_block.c'; fi`
libbled_a-zstd_ddict.o: zstd_ddict.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-zstd_ddict.o `test -f 'zstd_ddict.c' || echo '$(srcdir)/'`zstd_ddict.c
libbled_a-zstd_ddict.obj: zstd_ddict.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-zstd_ddict.obj `if test -f 'zstd_ddict.c'; then $(CYGPATH_W) 'zstd_ddict.c'; else $(CYGPATH_W) '$(srcdir)/zstd_ddict.c'; fi`
libbled_a-zstd_entropy_common.o: zstd_entropy_common.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-zstd_entropy_common.o `test -f 'zstd_entropy_common.c' || echo '$(srcdir)/'`zstd_entropy_common.c
libbled_a-zstd_entropy_common.obj: zstd_entropy_common.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-zstd_entropy_common.obj `if test -f 'zstd_entropy_common.c'; then $(CYGPATH_W) 'zstd_entropy_common.c'; else $(CYGPATH_W) '$(srcdir)/zstd_entropy_common.c'; fi`
libbled_a-zstd_error_private.o: zstd_error_private.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-zstd_error_private.o `test -f 'zstd_error_private.c' || echo '$(srcdir)/'`zstd_error_private.c
libbled_a-zstd_error_private.obj: zstd_error_private.c
$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libbled_a_CFLAGS) $(CFLAGS) -c -o libbled_a-zstd_error_private.obj `if test -f 'zstd_error_private.c'; then $(CYGPATH_W) 'zstd_error_private.c'; else $(CYGPATH_W) '$(srcdir)/zstd_error_private.c'; fi`
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am

View File

@ -17,6 +17,9 @@ enum {
/* (unsigned) cast suppresses "integer overflow in expression" warning */
XZ_MAGIC1a = 256 * (unsigned)(256 * (256 * 0xfd + '7') + 'z') + 'X',
XZ_MAGIC2a = 256 * 'Z' + 0,
ZSTD_MAGIC1 = 0x28B5,
ZSTD_MAGIC2 = 0x2FFD,
ZSTD_MAGIC = 0x28B52FFD,
#else
COMPRESS_MAGIC = 0x9d1f,
GZIP_MAGIC = 0x8b1f,
@ -25,6 +28,9 @@ enum {
XZ_MAGIC2 = 'z' + ('X' + ('Z' + 0 * 256) * 256) * 256,
XZ_MAGIC1a = 0xfd + ('7' + ('z' + 'X' * 256) * 256) * 256,
XZ_MAGIC2a = 'Z' + 0 * 256,
ZSTD_MAGIC1 = 0xB528,
ZSTD_MAGIC2 = 0xFD2F,
ZSTD_MAGIC = 0xFD2FB528,
#endif
};
@ -290,6 +296,7 @@ IF_DESKTOP(long long) int unpack_bz2_stream(transformer_state_t *xstate) FAST_FU
IF_DESKTOP(long long) int unpack_lzma_stream(transformer_state_t *xstate) FAST_FUNC;
IF_DESKTOP(long long) int unpack_xz_stream(transformer_state_t *xstate) FAST_FUNC;
IF_DESKTOP(long long) int unpack_vtsi_stream(transformer_state_t *xstate) FAST_FUNC;
IF_DESKTOP(long long) int unpack_zstd_stream(transformer_state_t *xstate) FAST_FUNC;
char* append_ext(char *filename, const char *expected_ext) FAST_FUNC;
int bbunpack(char **argv,

View File

@ -1,7 +1,7 @@
/*
* Bled (Base Library for Easy Decompression)
*
* Copyright © 2014-2023 Pete Batard <pete@akeo.ie>
* Copyright © 2014-2024 Pete Batard <pete@akeo.ie>
*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
@ -31,7 +31,9 @@ jmp_buf bb_error_jmp;
char* bb_virtual_buf = NULL;
size_t bb_virtual_len = 0, bb_virtual_pos = 0;
int bb_virtual_fd = -1;
uint32_t BB_BUFSIZE = 0x10000;
// ZSTD has a minimal buffer size of (1 << ZSTD_BLOCKSIZELOG_MAX) + ZSTD_blockHeaderSize = 128 KB + 3
// So we set our bufsize to 256 KB
uint32_t BB_BUFSIZE = 0x40000;
static long long int unpack_none(transformer_state_t *xstate)
{
@ -49,6 +51,7 @@ unpacker_t unpacker[BLED_COMPRESSION_MAX] = {
unpack_xz_stream,
unpack_none,
unpack_vtsi_stream,
unpack_zstd_stream,
};
/* Uncompress file 'src', compressed using 'type', to file 'dst' */
@ -267,7 +270,7 @@ int64_t bled_uncompress_from_buffer_to_buffer(const char* src, const size_t src_
/* Initialize the library.
* When the parameters are not NULL or zero you can:
* - specify the buffer size to use (must be larger than 64KB and a power of two)
* - specify the buffer size to use (must be larger than 256KB and a power of two)
* - specify the printf-like function you want to use to output message
* void print_function(const char* format, ...);
* - specify the read/write functions you want to use;
@ -283,11 +286,11 @@ int bled_init(uint32_t buffer_size, printf_t print_function, read_t read_functio
if (bled_initialized)
return -1;
BB_BUFSIZE = buffer_size;
/* buffer_size must be larger than 64 KB and a power of two */
if (buffer_size < 0x10000 || (buffer_size & (buffer_size - 1)) != 0) {
/* buffer_size must be larger than 256 KB and a power of two */
if (buffer_size < 0x40000 || (buffer_size & (buffer_size - 1)) != 0) {
if (buffer_size != 0 && print_function != NULL)
print_function("bled_init: invalid buffer_size, defaulting to 64 KB");
BB_BUFSIZE = 0x10000;
BB_BUFSIZE = 0x40000;
}
bled_printf = print_function;
bled_read = read_function;

View File

@ -1,7 +1,7 @@
/*
* Bled (Base Library for Easy Decompression)
*
* Copyright © 2014-2015 Pete Batard <pete@akeo.ie>
* Copyright © 2014-2024 Pete Batard <pete@akeo.ie>
*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
@ -31,6 +31,7 @@ typedef enum {
BLED_COMPRESSION_XZ, // .xz
BLED_COMPRESSION_7ZIP, // .7z
BLED_COMPRESSION_VTSI, // .vtsi
BLED_COMPRESSION_ZSTD, // .zst
BLED_COMPRESSION_MAX
} bled_compression_type;

View File

@ -2,7 +2,6 @@
/*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include "libbb.h"
#include "bb_archive.h"

View File

@ -2,7 +2,6 @@
/*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include "libbb.h"
#include "bb_archive.h"

View File

@ -163,7 +163,7 @@ static int get_next_block(bunzip_data *bd)
uint32_t *dbuf;
unsigned origPtr, t;
unsigned dbufCount, runPos;
unsigned runCnt = 0; // runCnt; /* for compiler */
unsigned runCnt = 0; /* for compiler */
dbuf = bd->dbuf;
selectors = bd->selectors;
@ -843,7 +843,7 @@ char* FAST_FUNC
unpack_bz2_data(const char *packed, int packed_len, int unpacked_len)
{
char *outbuf = NULL;
bunzip_data *bd;
bunzip_data *bd = NULL;
int i;
jmp_buf jmpbuf;

View File

@ -1269,7 +1269,6 @@ unpack_gz_stream(transformer_state_t *xstate)
return -1;
}
to_read = -1;
// bytebuffer_max = 0x8000;
bytebuffer = xmalloc(bytebuffer_max);
if (bytebuffer == NULL) {
bb_error_msg("alloc error");

View File

@ -11,9 +11,6 @@
#include "bb_archive.h"
#define XZ_EXTERN static
// We get XZ_OPTIONS_ERROR in xz_dec_stream if this is not defined
#define XZ_DEC_ANY_CHECK
#define XZ_BUFSIZE BB_BUFSIZE
#include "xz_dec_bcj.c"
@ -89,7 +86,7 @@ IF_DESKTOP(long long) int FAST_FUNC unpack_xz_stream(transformer_state_t *xstate
#ifdef XZ_DEC_ANY_CHECK
if (ret == XZ_UNSUPPORTED_CHECK) {
bb_error_msg("unsupported check; not verifying file integrity");
// bb_error_msg("unsupported check; not verifying file integrity");
continue;
}
#endif

View File

@ -17,8 +17,6 @@
# define dbg(...) ((void)0)
#endif
#define xread safe_read
enum {
#if BB_BIG_ENDIAN
ZIP_FILEHEADER_MAGIC = 0x504b0304,

View File

@ -0,0 +1,141 @@
/* vi: set sw=4 ts=4: */
/*
* Glue for zstd decompression
* Copyright (c) 2021 Norbert Lange <nolange79@gmail.com>
* Copyright (c) 2024 Pete Batard <pete@akeo.ie>
*
* Based on compress.c from the systemd project,
* provided by Norbert Lange <nolange79@gmail.com>.
* Which originally was copied from the streaming_decompression.c
* example from the zstd project, written by Yann Collet
*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include "libbb.h"
#include "bb_archive.h"
#include "zstd_deps.h"
#include "zstd_internal.h"
ALWAYS_INLINE static size_t roundupsize(size_t size, size_t align)
{
return (size + align - 1U) & ~(align - 1);
}
ALWAYS_INLINE static IF_DESKTOP(long long) int
unpack_zstd_stream_inner(transformer_state_t *xstate,
ZSTD_DStream *dctx, void *out_buff)
{
const U32 zstd_magic = ZSTD_MAGIC;
const size_t in_allocsize = roundupsize(ZSTD_DStreamInSize(), 1024),
out_allocsize = roundupsize(ZSTD_DStreamOutSize(), 1024);
IF_DESKTOP(long long int total = 0;)
size_t last_result = ZSTD_error_maxCode + 1;
ssize_t nwrote = 0;
unsigned input_fixup;
void *in_buff = (char *)out_buff + out_allocsize;
memcpy(in_buff, &zstd_magic, 4);
input_fixup = xstate->signature_skipped ? 4 : 0;
/* This loop assumes that the input file is one or more concatenated
* zstd streams. This example won't work if there is trailing non-zstd
* data at the end, but streaming decompression in general handles this
* case. ZSTD_decompressStream() returns 0 exactly when the frame is
* completed, and doesn't consume input after the frame.
*/
for (;;) {
bool has_error = false;
ZSTD_inBuffer input;
ssize_t red;
red = safe_read(xstate->src_fd, (char *)in_buff + input_fixup, (unsigned int)(in_allocsize - input_fixup));
if (red < 0) {
bb_perror_msg(bb_msg_read_error);
return -1;
}
if (red == 0) {
break;
}
input.src = in_buff;
input.size = (size_t)red + input_fixup;
input.pos = 0;
input_fixup = 0;
/* Given a valid frame, zstd won't consume the last byte of the
* frame until it has flushed all of the decompressed data of
* the frame. So input.pos < input.size means frame is not done
* or there is still output available.
*/
while (input.pos < input.size) {
ZSTD_outBuffer output = { out_buff, out_allocsize, 0 };
/* The return code is zero if the frame is complete, but
* there may be multiple frames concatenated together.
* Zstd will automatically reset the context when a
* frame is complete. Still, calling ZSTD_DCtx_reset()
* can be useful to reset the context to a clean state,
* for instance if the last decompression call returned
* an error.
*/
last_result = ZSTD_decompressStream(dctx, &output, &input);
if (ZSTD_isError(last_result)) {
has_error = true;
break;
}
nwrote = transformer_write(xstate, output.dst, output.pos);
if (nwrote < 0 && nwrote != -ENOSPC) {
has_error = true;
break;
}
IF_DESKTOP(total = (nwrote == -ENOSPC) ? xstate->mem_output_size_max : total + output.pos);
}
if (has_error)
break;
}
if (last_result != 0) {
/* The last return value from ZSTD_decompressStream did not end
* on a frame, but we reached the end of the file! We assume
* this is an error, and the input was truncated.
*/
if (last_result == ZSTD_error_maxCode + 1) {
bb_simple_error_msg("could not read zstd data");
} else {
#if defined(ZSTD_STRIP_ERROR_STRINGS) && ZSTD_STRIP_ERROR_STRINGS == 1
bb_error_msg("zstd decoder error: %u", (unsigned)last_result);
#else
bb_error_msg("zstd decoder error: %s", ZSTD_getErrorName(last_result));
#endif
}
return -1;
}
return IF_DESKTOP(total) + 0;
}
IF_DESKTOP(long long) int FAST_FUNC
unpack_zstd_stream(transformer_state_t *xstate)
{
const size_t in_allocsize = roundupsize(ZSTD_DStreamInSize(), 1024),
out_allocsize = roundupsize(ZSTD_DStreamOutSize(), 1024);
IF_DESKTOP(long long) int result;
void *out_buff;
ZSTD_DStream *dctx;
dctx = ZSTD_createDStream();
if (!dctx) {
/* should be the only possibly reason of failure */
bb_error_msg_and_die("memory exhausted");
}
out_buff = xmalloc(in_allocsize + out_allocsize);
result = unpack_zstd_stream_inner(xstate, dctx, out_buff);
free(out_buff);
ZSTD_freeDStream(dctx);
return result;
}

View File

@ -4,7 +4,6 @@
*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include "libbb.h"
#include "bb_archive.h"

View File

@ -4,7 +4,6 @@
*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include "libbb.h"
#include "bb_archive.h"

View File

@ -5,7 +5,6 @@
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
//#include <fnmatch.h>
#include "libbb.h"
#include "bb_archive.h"

640
src/bled/fse.h Normal file
View File

@ -0,0 +1,640 @@
/* ******************************************************************
* FSE : Finite State Entropy codec
* Public Prototypes declaration
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
*
* This source code is licensed under both the BSD-style license (found in the
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
* in the COPYING file in the root directory of this source tree).
* You may select, at your option, one of the above-listed licenses.
****************************************************************** */
#if defined (__cplusplus)
extern "C" {
#endif
#ifndef FSE_H
#define FSE_H
/*-*****************************************
* Dependencies
******************************************/
#include "zstd_deps.h" /* size_t, ptrdiff_t */
/*-*****************************************
* FSE_PUBLIC_API : control library symbols visibility
******************************************/
#if defined(FSE_DLL_EXPORT) && (FSE_DLL_EXPORT==1) && defined(__GNUC__) && (__GNUC__ >= 4)
# define FSE_PUBLIC_API __attribute__ ((visibility ("default")))
#elif defined(FSE_DLL_EXPORT) && (FSE_DLL_EXPORT==1) /* Visual expected */
# define FSE_PUBLIC_API __declspec(dllexport)
#elif defined(FSE_DLL_IMPORT) && (FSE_DLL_IMPORT==1)
# define FSE_PUBLIC_API __declspec(dllimport) /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/
#else
# define FSE_PUBLIC_API
#endif
/*------ Version ------*/
#define FSE_VERSION_MAJOR 0
#define FSE_VERSION_MINOR 9
#define FSE_VERSION_RELEASE 0
#define FSE_LIB_VERSION FSE_VERSION_MAJOR.FSE_VERSION_MINOR.FSE_VERSION_RELEASE
#define FSE_QUOTE(str) #str
#define FSE_EXPAND_AND_QUOTE(str) FSE_QUOTE(str)
#define FSE_VERSION_STRING FSE_EXPAND_AND_QUOTE(FSE_LIB_VERSION)
#define FSE_VERSION_NUMBER (FSE_VERSION_MAJOR *100*100 + FSE_VERSION_MINOR *100 + FSE_VERSION_RELEASE)
FSE_PUBLIC_API unsigned FSE_versionNumber(void); /**< library version number; to be used when checking dll version */
/*-*****************************************
* Tool functions
******************************************/
FSE_PUBLIC_API size_t FSE_compressBound(size_t size); /* maximum compressed size */
/* Error Management */
FSE_PUBLIC_API unsigned FSE_isError(size_t code); /* tells if a return value is an error code */
FSE_PUBLIC_API const char* FSE_getErrorName(size_t code); /* provides error code string (useful for debugging) */
/*-*****************************************
* FSE detailed API
******************************************/
/*!
FSE_compress() does the following:
1. count symbol occurrence from source[] into table count[] (see hist.h)
2. normalize counters so that sum(count[]) == Power_of_2 (2^tableLog)
3. save normalized counters to memory buffer using writeNCount()
4. build encoding table 'CTable' from normalized counters
5. encode the data stream using encoding table 'CTable'
FSE_decompress() does the following:
1. read normalized counters with readNCount()
2. build decoding table 'DTable' from normalized counters
3. decode the data stream using decoding table 'DTable'
The following API allows targeting specific sub-functions for advanced tasks.
For example, it's possible to compress several blocks using the same 'CTable',
or to save and provide normalized distribution using external method.
*/
/* *** COMPRESSION *** */
/*! FSE_optimalTableLog():
dynamically downsize 'tableLog' when conditions are met.
It saves CPU time, by using smaller tables, while preserving or even improving compression ratio.
@return : recommended tableLog (necessarily <= 'maxTableLog') */
FSE_PUBLIC_API unsigned FSE_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue);
/*! FSE_normalizeCount():
normalize counts so that sum(count[]) == Power_of_2 (2^tableLog)
'normalizedCounter' is a table of short, of minimum size (maxSymbolValue+1).
useLowProbCount is a boolean parameter which trades off compressed size for
faster header decoding. When it is set to 1, the compressed data will be slightly
smaller. And when it is set to 0, FSE_readNCount() and FSE_buildDTable() will be
faster. If you are compressing a small amount of data (< 2 KB) then useLowProbCount=0
is a good default, since header deserialization makes a big speed difference.
Otherwise, useLowProbCount=1 is a good default, since the speed difference is small.
@return : tableLog,
or an errorCode, which can be tested using FSE_isError() */
FSE_PUBLIC_API size_t FSE_normalizeCount(short* normalizedCounter, unsigned tableLog,
const unsigned* count, size_t srcSize, unsigned maxSymbolValue, unsigned useLowProbCount);
/*! FSE_NCountWriteBound():
Provides the maximum possible size of an FSE normalized table, given 'maxSymbolValue' and 'tableLog'.
Typically useful for allocation purpose. */
FSE_PUBLIC_API size_t FSE_NCountWriteBound(unsigned maxSymbolValue, unsigned tableLog);
/*! FSE_writeNCount():
Compactly save 'normalizedCounter' into 'buffer'.
@return : size of the compressed table,
or an errorCode, which can be tested using FSE_isError(). */
FSE_PUBLIC_API size_t FSE_writeNCount (void* buffer, size_t bufferSize,
const short* normalizedCounter,
unsigned maxSymbolValue, unsigned tableLog);
/*! Constructor and Destructor of FSE_CTable.
Note that FSE_CTable size depends on 'tableLog' and 'maxSymbolValue' */
typedef unsigned FSE_CTable; /* don't allocate that. It's only meant to be more restrictive than void* */
/*! FSE_buildCTable():
Builds `ct`, which must be already allocated, using FSE_createCTable().
@return : 0, or an errorCode, which can be tested using FSE_isError() */
FSE_PUBLIC_API size_t FSE_buildCTable(FSE_CTable* ct, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog);
/*! FSE_compress_usingCTable():
Compress `src` using `ct` into `dst` which must be already allocated.
@return : size of compressed data (<= `dstCapacity`),
or 0 if compressed data could not fit into `dst`,
or an errorCode, which can be tested using FSE_isError() */
FSE_PUBLIC_API size_t FSE_compress_usingCTable (void* dst, size_t dstCapacity, const void* src, size_t srcSize, const FSE_CTable* ct);
/*!
Tutorial :
----------
The first step is to count all symbols. FSE_count() does this job very fast.
Result will be saved into 'count', a table of unsigned int, which must be already allocated, and have 'maxSymbolValuePtr[0]+1' cells.
'src' is a table of bytes of size 'srcSize'. All values within 'src' MUST be <= maxSymbolValuePtr[0]
maxSymbolValuePtr[0] will be updated, with its real value (necessarily <= original value)
FSE_count() will return the number of occurrence of the most frequent symbol.
This can be used to know if there is a single symbol within 'src', and to quickly evaluate its compressibility.
If there is an error, the function will return an ErrorCode (which can be tested using FSE_isError()).
The next step is to normalize the frequencies.
FSE_normalizeCount() will ensure that sum of frequencies is == 2 ^'tableLog'.
It also guarantees a minimum of 1 to any Symbol with frequency >= 1.
You can use 'tableLog'==0 to mean "use default tableLog value".
If you are unsure of which tableLog value to use, you can ask FSE_optimalTableLog(),
which will provide the optimal valid tableLog given sourceSize, maxSymbolValue, and a user-defined maximum (0 means "default").
The result of FSE_normalizeCount() will be saved into a table,
called 'normalizedCounter', which is a table of signed short.
'normalizedCounter' must be already allocated, and have at least 'maxSymbolValue+1' cells.
The return value is tableLog if everything proceeded as expected.
It is 0 if there is a single symbol within distribution.
If there is an error (ex: invalid tableLog value), the function will return an ErrorCode (which can be tested using FSE_isError()).
'normalizedCounter' can be saved in a compact manner to a memory area using FSE_writeNCount().
'buffer' must be already allocated.
For guaranteed success, buffer size must be at least FSE_headerBound().
The result of the function is the number of bytes written into 'buffer'.
If there is an error, the function will return an ErrorCode (which can be tested using FSE_isError(); ex : buffer size too small).
'normalizedCounter' can then be used to create the compression table 'CTable'.
The space required by 'CTable' must be already allocated, using FSE_createCTable().
You can then use FSE_buildCTable() to fill 'CTable'.
If there is an error, both functions will return an ErrorCode (which can be tested using FSE_isError()).
'CTable' can then be used to compress 'src', with FSE_compress_usingCTable().
Similar to FSE_count(), the convention is that 'src' is assumed to be a table of char of size 'srcSize'
The function returns the size of compressed data (without header), necessarily <= `dstCapacity`.
If it returns '0', compressed data could not fit into 'dst'.
If there is an error, the function will return an ErrorCode (which can be tested using FSE_isError()).
*/
/* *** DECOMPRESSION *** */
/*! FSE_readNCount():
Read compactly saved 'normalizedCounter' from 'rBuffer'.
@return : size read from 'rBuffer',
or an errorCode, which can be tested using FSE_isError().
maxSymbolValuePtr[0] and tableLogPtr[0] will also be updated with their respective values */
FSE_PUBLIC_API size_t FSE_readNCount (short* normalizedCounter,
unsigned* maxSymbolValuePtr, unsigned* tableLogPtr,
const void* rBuffer, size_t rBuffSize);
/*! FSE_readNCount_bmi2():
* Same as FSE_readNCount() but pass bmi2=1 when your CPU supports BMI2 and 0 otherwise.
*/
FSE_PUBLIC_API size_t FSE_readNCount_bmi2(short* normalizedCounter,
unsigned* maxSymbolValuePtr, unsigned* tableLogPtr,
const void* rBuffer, size_t rBuffSize, int bmi2);
typedef unsigned FSE_DTable; /* don't allocate that. It's just a way to be more restrictive than void* */
/*!
Tutorial :
----------
(Note : these functions only decompress FSE-compressed blocks.
If block is uncompressed, use memcpy() instead
If block is a single repeated byte, use memset() instead )
The first step is to obtain the normalized frequencies of symbols.
This can be performed by FSE_readNCount() if it was saved using FSE_writeNCount().
'normalizedCounter' must be already allocated, and have at least 'maxSymbolValuePtr[0]+1' cells of signed short.
In practice, that means it's necessary to know 'maxSymbolValue' beforehand,
or size the table to handle worst case situations (typically 256).
FSE_readNCount() will provide 'tableLog' and 'maxSymbolValue'.
The result of FSE_readNCount() is the number of bytes read from 'rBuffer'.
Note that 'rBufferSize' must be at least 4 bytes, even if useful information is less than that.
If there is an error, the function will return an error code, which can be tested using FSE_isError().
The next step is to build the decompression tables 'FSE_DTable' from 'normalizedCounter'.
This is performed by the function FSE_buildDTable().
The space required by 'FSE_DTable' must be already allocated using FSE_createDTable().
If there is an error, the function will return an error code, which can be tested using FSE_isError().
`FSE_DTable` can then be used to decompress `cSrc`, with FSE_decompress_usingDTable().
`cSrcSize` must be strictly correct, otherwise decompression will fail.
FSE_decompress_usingDTable() result will tell how many bytes were regenerated (<=`dstCapacity`).
If there is an error, the function will return an error code, which can be tested using FSE_isError(). (ex: dst buffer too small)
*/
#endif /* FSE_H */
#if defined(FSE_STATIC_LINKING_ONLY) && !defined(FSE_H_FSE_STATIC_LINKING_ONLY)
#define FSE_H_FSE_STATIC_LINKING_ONLY
/* *** Dependency *** */
#include "fse_bitstream.h"
/* *****************************************
* Static allocation
*******************************************/
/* FSE buffer bounds */
#define FSE_NCOUNTBOUND 512
#define FSE_BLOCKBOUND(size) ((size) + ((size)>>7) + 4 /* fse states */ + sizeof(size_t) /* bitContainer */)
#define FSE_COMPRESSBOUND(size) (FSE_NCOUNTBOUND + FSE_BLOCKBOUND(size)) /* Macro version, useful for static allocation */
/* It is possible to statically allocate FSE CTable/DTable as a table of FSE_CTable/FSE_DTable using below macros */
#define FSE_CTABLE_SIZE_U32(maxTableLog, maxSymbolValue) (1 + (1<<((maxTableLog)-1)) + (((maxSymbolValue)+1)*2))
#define FSE_DTABLE_SIZE_U32(maxTableLog) (1 + (1<<(maxTableLog)))
/* or use the size to malloc() space directly. Pay attention to alignment restrictions though */
#define FSE_CTABLE_SIZE(maxTableLog, maxSymbolValue) (FSE_CTABLE_SIZE_U32(maxTableLog, maxSymbolValue) * sizeof(FSE_CTable))
#define FSE_DTABLE_SIZE(maxTableLog) (FSE_DTABLE_SIZE_U32(maxTableLog) * sizeof(FSE_DTable))
/* *****************************************
* FSE advanced API
***************************************** */
unsigned FSE_optimalTableLog_internal(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue, unsigned minus);
/**< same as FSE_optimalTableLog(), which used `minus==2` */
size_t FSE_buildCTable_rle (FSE_CTable* ct, unsigned char symbolValue);
/**< build a fake FSE_CTable, designed to compress always the same symbolValue */
/* FSE_buildCTable_wksp() :
* Same as FSE_buildCTable(), but using an externally allocated scratch buffer (`workSpace`).
* `wkspSize` must be >= `FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog)` of `unsigned`.
* See FSE_buildCTable_wksp() for breakdown of workspace usage.
*/
#define FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog) (((maxSymbolValue + 2) + (1ull << (tableLog)))/2 + sizeof(U64)/sizeof(U32) /* additional 8 bytes for potential table overwrite */)
#define FSE_BUILD_CTABLE_WORKSPACE_SIZE(maxSymbolValue, tableLog) (sizeof(unsigned) * FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(maxSymbolValue, tableLog))
size_t FSE_buildCTable_wksp(FSE_CTable* ct, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize);
#define FSE_BUILD_DTABLE_WKSP_SIZE(maxTableLog, maxSymbolValue) (sizeof(short) * (maxSymbolValue + 1) + (1ULL << maxTableLog) + 8)
#define FSE_BUILD_DTABLE_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) ((FSE_BUILD_DTABLE_WKSP_SIZE(maxTableLog, maxSymbolValue) + sizeof(unsigned) - 1) / sizeof(unsigned))
FSE_PUBLIC_API size_t FSE_buildDTable_wksp(FSE_DTable* dt, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize);
/**< Same as FSE_buildDTable(), using an externally allocated `workspace` produced with `FSE_BUILD_DTABLE_WKSP_SIZE_U32(maxSymbolValue)` */
#define FSE_DECOMPRESS_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) (FSE_DTABLE_SIZE_U32(maxTableLog) + 1 + FSE_BUILD_DTABLE_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) + (FSE_MAX_SYMBOL_VALUE + 1) / 2 + 1)
#define FSE_DECOMPRESS_WKSP_SIZE(maxTableLog, maxSymbolValue) (FSE_DECOMPRESS_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) * sizeof(unsigned))
size_t FSE_decompress_wksp_bmi2(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize, int bmi2);
/**< same as FSE_decompress(), using an externally allocated `workSpace` produced with `FSE_DECOMPRESS_WKSP_SIZE_U32(maxLog, maxSymbolValue)`.
* Set bmi2 to 1 if your CPU supports BMI2 or 0 if it doesn't */
typedef enum {
FSE_repeat_none, /**< Cannot use the previous table */
FSE_repeat_check, /**< Can use the previous table but it must be checked */
FSE_repeat_valid /**< Can use the previous table and it is assumed to be valid */
} FSE_repeat;
/* *****************************************
* FSE symbol compression API
*******************************************/
/*!
This API consists of small unitary functions, which highly benefit from being inlined.
Hence their body are included in next section.
*/
typedef struct {
ptrdiff_t value;
const void* stateTable;
const void* symbolTT;
unsigned stateLog;
} FSE_CState_t;
static void FSE_initCState(FSE_CState_t* CStatePtr, const FSE_CTable* ct);
static void FSE_encodeSymbol(BIT_CStream_t* bitC, FSE_CState_t* CStatePtr, unsigned symbol);
static void FSE_flushCState(BIT_CStream_t* bitC, const FSE_CState_t* CStatePtr);
/**<
These functions are inner components of FSE_compress_usingCTable().
They allow the creation of custom streams, mixing multiple tables and bit sources.
A key property to keep in mind is that encoding and decoding are done **in reverse direction**.
So the first symbol you will encode is the last you will decode, like a LIFO stack.
You will need a few variables to track your CStream. They are :
FSE_CTable ct; // Provided by FSE_buildCTable()
BIT_CStream_t bitStream; // bitStream tracking structure
FSE_CState_t state; // State tracking structure (can have several)
The first thing to do is to init bitStream and state.
size_t errorCode = BIT_initCStream(&bitStream, dstBuffer, maxDstSize);
FSE_initCState(&state, ct);
Note that BIT_initCStream() can produce an error code, so its result should be tested, using FSE_isError();
You can then encode your input data, byte after byte.
FSE_encodeSymbol() outputs a maximum of 'tableLog' bits at a time.
Remember decoding will be done in reverse direction.
FSE_encodeByte(&bitStream, &state, symbol);
At any time, you can also add any bit sequence.
Note : maximum allowed nbBits is 25, for compatibility with 32-bits decoders
BIT_addBits(&bitStream, bitField, nbBits);
The above methods don't commit data to memory, they just store it into local register, for speed.
Local register size is 64-bits on 64-bits systems, 32-bits on 32-bits systems (size_t).
Writing data to memory is a manual operation, performed by the flushBits function.
BIT_flushBits(&bitStream);
Your last FSE encoding operation shall be to flush your last state value(s).
FSE_flushState(&bitStream, &state);
Finally, you must close the bitStream.
The function returns the size of CStream in bytes.
If data couldn't fit into dstBuffer, it will return a 0 ( == not compressible)
If there is an error, it returns an errorCode (which can be tested using FSE_isError()).
size_t size = BIT_closeCStream(&bitStream);
*/
/* *****************************************
* FSE symbol decompression API
*******************************************/
typedef struct {
size_t state;
const void* table; /* precise table may vary, depending on U16 */
} FSE_DState_t;
static void FSE_initDState(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD, const FSE_DTable* dt);
static unsigned char FSE_decodeSymbol(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD);
static unsigned FSE_endOfDState(const FSE_DState_t* DStatePtr);
/**<
Let's now decompose FSE_decompress_usingDTable() into its unitary components.
You will decode FSE-encoded symbols from the bitStream,
and also any other bitFields you put in, **in reverse order**.
You will need a few variables to track your bitStream. They are :
BIT_DStream_t DStream; // Stream context
FSE_DState_t DState; // State context. Multiple ones are possible
FSE_DTable* DTablePtr; // Decoding table, provided by FSE_buildDTable()
The first thing to do is to init the bitStream.
errorCode = BIT_initDStream(&DStream, srcBuffer, srcSize);
You should then retrieve your initial state(s)
(in reverse flushing order if you have several ones) :
errorCode = FSE_initDState(&DState, &DStream, DTablePtr);
You can then decode your data, symbol after symbol.
For information the maximum number of bits read by FSE_decodeSymbol() is 'tableLog'.
Keep in mind that symbols are decoded in reverse order, like a LIFO stack (last in, first out).
unsigned char symbol = FSE_decodeSymbol(&DState, &DStream);
You can retrieve any bitfield you eventually stored into the bitStream (in reverse order)
Note : maximum allowed nbBits is 25, for 32-bits compatibility
size_t bitField = BIT_readBits(&DStream, nbBits);
All above operations only read from local register (which size depends on size_t).
Refueling the register from memory is manually performed by the reload method.
endSignal = FSE_reloadDStream(&DStream);
BIT_reloadDStream() result tells if there is still some more data to read from DStream.
BIT_DStream_unfinished : there is still some data left into the DStream.
BIT_DStream_endOfBuffer : Dstream reached end of buffer. Its container may no longer be completely filled.
BIT_DStream_completed : Dstream reached its exact end, corresponding in general to decompression completed.
BIT_DStream_tooFar : Dstream went too far. Decompression result is corrupted.
When reaching end of buffer (BIT_DStream_endOfBuffer), progress slowly, notably if you decode multiple symbols per loop,
to properly detect the exact end of stream.
After each decoded symbol, check if DStream is fully consumed using this simple test :
BIT_reloadDStream(&DStream) >= BIT_DStream_completed
When it's done, verify decompression is fully completed, by checking both DStream and the relevant states.
Checking if DStream has reached its end is performed by :
BIT_endOfDStream(&DStream);
Check also the states. There might be some symbols left there, if some high probability ones (>50%) are possible.
FSE_endOfDState(&DState);
*/
/* *****************************************
* FSE unsafe API
*******************************************/
static unsigned char FSE_decodeSymbolFast(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD);
/* faster, but works only if nbBits is always >= 1 (otherwise, result will be corrupted) */
/* *****************************************
* Implementation of inlined functions
*******************************************/
typedef struct {
int deltaFindState;
U32 deltaNbBits;
} FSE_symbolCompressionTransform; /* total 8 bytes */
MEM_STATIC void FSE_initCState(FSE_CState_t* statePtr, const FSE_CTable* ct)
{
const void* ptr = ct;
const U16* u16ptr = (const U16*) ptr;
const U32 tableLog = MEM_read16(ptr);
statePtr->value = (ptrdiff_t)1<<tableLog;
statePtr->stateTable = u16ptr+2;
statePtr->symbolTT = ct + 1 + (tableLog ? (1<<(tableLog-1)) : 1);
statePtr->stateLog = tableLog;
}
/*! FSE_initCState2() :
* Same as FSE_initCState(), but the first symbol to include (which will be the last to be read)
* uses the smallest state value possible, saving the cost of this symbol */
MEM_STATIC void FSE_initCState2(FSE_CState_t* statePtr, const FSE_CTable* ct, U32 symbol)
{
FSE_initCState(statePtr, ct);
{ const FSE_symbolCompressionTransform symbolTT = ((const FSE_symbolCompressionTransform*)(statePtr->symbolTT))[symbol];
const U16* stateTable = (const U16*)(statePtr->stateTable);
U32 nbBitsOut = (U32)((symbolTT.deltaNbBits + (1<<15)) >> 16);
statePtr->value = (nbBitsOut << 16) - symbolTT.deltaNbBits;
statePtr->value = stateTable[(statePtr->value >> nbBitsOut) + symbolTT.deltaFindState];
}
}
MEM_STATIC void FSE_encodeSymbol(BIT_CStream_t* bitC, FSE_CState_t* statePtr, unsigned symbol)
{
FSE_symbolCompressionTransform const symbolTT = ((const FSE_symbolCompressionTransform*)(statePtr->symbolTT))[symbol];
const U16* const stateTable = (const U16*)(statePtr->stateTable);
U32 const nbBitsOut = (U32)((statePtr->value + symbolTT.deltaNbBits) >> 16);
BIT_addBits(bitC, (size_t)statePtr->value, nbBitsOut);
statePtr->value = stateTable[ (statePtr->value >> nbBitsOut) + symbolTT.deltaFindState];
}
MEM_STATIC void FSE_flushCState(BIT_CStream_t* bitC, const FSE_CState_t* statePtr)
{
BIT_addBits(bitC, (size_t)statePtr->value, statePtr->stateLog);
BIT_flushBits(bitC);
}
/* FSE_getMaxNbBits() :
* Approximate maximum cost of a symbol, in bits.
* Fractional get rounded up (i.e. a symbol with a normalized frequency of 3 gives the same result as a frequency of 2)
* note 1 : assume symbolValue is valid (<= maxSymbolValue)
* note 2 : if freq[symbolValue]==0, @return a fake cost of tableLog+1 bits */
MEM_STATIC U32 FSE_getMaxNbBits(const void* symbolTTPtr, U32 symbolValue)
{
const FSE_symbolCompressionTransform* symbolTT = (const FSE_symbolCompressionTransform*) symbolTTPtr;
return (symbolTT[symbolValue].deltaNbBits + ((1<<16)-1)) >> 16;
}
/* FSE_bitCost() :
* Approximate symbol cost, as fractional value, using fixed-point format (accuracyLog fractional bits)
* note 1 : assume symbolValue is valid (<= maxSymbolValue)
* note 2 : if freq[symbolValue]==0, @return a fake cost of tableLog+1 bits */
MEM_STATIC U32 FSE_bitCost(const void* symbolTTPtr, U32 tableLog, U32 symbolValue, U32 accuracyLog)
{
const FSE_symbolCompressionTransform* symbolTT = (const FSE_symbolCompressionTransform*) symbolTTPtr;
U32 const minNbBits = symbolTT[symbolValue].deltaNbBits >> 16;
U32 const threshold = (minNbBits+1) << 16;
assert(tableLog < 16);
assert(accuracyLog < 31-tableLog); /* ensure enough room for renormalization double shift */
{ U32 const tableSize = 1 << tableLog;
U32 const deltaFromThreshold = threshold - (symbolTT[symbolValue].deltaNbBits + tableSize);
U32 const normalizedDeltaFromThreshold = (deltaFromThreshold << accuracyLog) >> tableLog; /* linear interpolation (very approximate) */
U32 const bitMultiplier = 1 << accuracyLog;
assert(symbolTT[symbolValue].deltaNbBits + tableSize <= threshold);
assert(normalizedDeltaFromThreshold <= bitMultiplier);
return (minNbBits+1)*bitMultiplier - normalizedDeltaFromThreshold;
}
}
/* ====== Decompression ====== */
typedef struct {
U16 tableLog;
U16 fastMode;
} FSE_DTableHeader; /* sizeof U32 */
typedef struct
{
unsigned short newState;
unsigned char symbol;
unsigned char nbBits;
} FSE_decode_t; /* size == U32 */
MEM_STATIC void FSE_initDState(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD, const FSE_DTable* dt)
{
const void* ptr = dt;
const FSE_DTableHeader* const DTableH = (const FSE_DTableHeader*)ptr;
DStatePtr->state = BIT_readBits(bitD, DTableH->tableLog);
BIT_reloadDStream(bitD);
DStatePtr->table = dt + 1;
}
MEM_STATIC BYTE FSE_peekSymbol(const FSE_DState_t* DStatePtr)
{
FSE_decode_t const DInfo = ((const FSE_decode_t*)(DStatePtr->table))[DStatePtr->state];
return DInfo.symbol;
}
MEM_STATIC void FSE_updateState(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD)
{
FSE_decode_t const DInfo = ((const FSE_decode_t*)(DStatePtr->table))[DStatePtr->state];
U32 const nbBits = DInfo.nbBits;
size_t const lowBits = BIT_readBits(bitD, nbBits);
DStatePtr->state = DInfo.newState + lowBits;
}
MEM_STATIC BYTE FSE_decodeSymbol(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD)
{
FSE_decode_t const DInfo = ((const FSE_decode_t*)(DStatePtr->table))[DStatePtr->state];
U32 const nbBits = DInfo.nbBits;
BYTE const symbol = DInfo.symbol;
size_t const lowBits = BIT_readBits(bitD, nbBits);
DStatePtr->state = DInfo.newState + lowBits;
return symbol;
}
/*! FSE_decodeSymbolFast() :
unsafe, only works if no symbol has a probability > 50% */
MEM_STATIC BYTE FSE_decodeSymbolFast(FSE_DState_t* DStatePtr, BIT_DStream_t* bitD)
{
FSE_decode_t const DInfo = ((const FSE_decode_t*)(DStatePtr->table))[DStatePtr->state];
U32 const nbBits = DInfo.nbBits;
BYTE const symbol = DInfo.symbol;
size_t const lowBits = BIT_readBitsFast(bitD, nbBits);
DStatePtr->state = DInfo.newState + lowBits;
return symbol;
}
MEM_STATIC unsigned FSE_endOfDState(const FSE_DState_t* DStatePtr)
{
return DStatePtr->state == 0;
}
#ifndef FSE_COMMONDEFS_ONLY
/* **************************************************************
* Tuning parameters
****************************************************************/
/*!MEMORY_USAGE :
* Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.)
* Increasing memory usage improves compression ratio
* Reduced memory usage can improve speed, due to cache effect
* Recommended max value is 14, for 16KB, which nicely fits into Intel x86 L1 cache */
#ifndef FSE_MAX_MEMORY_USAGE
# define FSE_MAX_MEMORY_USAGE 14
#endif
#ifndef FSE_DEFAULT_MEMORY_USAGE
# define FSE_DEFAULT_MEMORY_USAGE 13
#endif
#if (FSE_DEFAULT_MEMORY_USAGE > FSE_MAX_MEMORY_USAGE)
# error "FSE_DEFAULT_MEMORY_USAGE must be <= FSE_MAX_MEMORY_USAGE"
#endif
/*!FSE_MAX_SYMBOL_VALUE :
* Maximum symbol value authorized.
* Required for proper stack allocation */
#ifndef FSE_MAX_SYMBOL_VALUE
# define FSE_MAX_SYMBOL_VALUE 255
#endif
/* **************************************************************
* template functions type & suffix
****************************************************************/
#define FSE_FUNCTION_TYPE BYTE
#define FSE_FUNCTION_EXTENSION
#define FSE_DECODE_TYPE FSE_decode_t
#endif /* !FSE_COMMONDEFS_ONLY */
/* ***************************************************************
* Constants
*****************************************************************/
#define FSE_MAX_TABLELOG (FSE_MAX_MEMORY_USAGE-2)
#define FSE_MAX_TABLESIZE (1U<<FSE_MAX_TABLELOG)
#define FSE_MAXTABLESIZE_MASK (FSE_MAX_TABLESIZE-1)
#define FSE_DEFAULT_TABLELOG (FSE_DEFAULT_MEMORY_USAGE-2)
#define FSE_MIN_TABLELOG 5
#define FSE_TABLELOG_ABSOLUTE_MAX 15
#if FSE_MAX_TABLELOG > FSE_TABLELOG_ABSOLUTE_MAX
# error "FSE_MAX_TABLELOG > FSE_TABLELOG_ABSOLUTE_MAX is not supported"
#endif
#define FSE_TABLESTEP(tableSize) (((tableSize)>>1) + ((tableSize)>>3) + 3)
#endif /* FSE_STATIC_LINKING_ONLY */
#if defined (__cplusplus)
}
#endif

456
src/bled/fse_bitstream.h Normal file
View File

@ -0,0 +1,456 @@
/* ******************************************************************
* bitstream
* Part of FSE library
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
*
* This source code is licensed under both the BSD-style license (found in the
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
* in the COPYING file in the root directory of this source tree).
* You may select, at your option, one of the above-listed licenses.
****************************************************************** */
#ifndef BITSTREAM_H_MODULE
#define BITSTREAM_H_MODULE
#if defined (__cplusplus)
extern "C" {
#endif
/*
* This API consists of small unitary functions, which must be inlined for best performance.
* Since link-time-optimization is not available for all compilers,
* these functions are defined into a .h to be included.
*/
/*-****************************************
* Dependencies
******************************************/
#include "zstd_mem.h" /* unaligned access routines */
#include "zstd_compiler.h" /* UNLIKELY() */
#include "zstd_error_private.h" /* error codes and messages */
#include "zstd_bits.h" /* ZSTD_highbit32 */
/*=========================================
* Target specific
=========================================*/
#ifndef ZSTD_NO_INTRINSICS
# if (defined(__BMI__) || defined(__BMI2__)) && defined(__GNUC__)
# include <immintrin.h> /* support for bextr (experimental)/bzhi */
# elif defined(__ICCARM__)
# include <intrinsics.h>
# endif
#endif
#define STREAM_ACCUMULATOR_MIN_32 25
#define STREAM_ACCUMULATOR_MIN_64 57
#define STREAM_ACCUMULATOR_MIN ((U32)(MEM_32bits() ? STREAM_ACCUMULATOR_MIN_32 : STREAM_ACCUMULATOR_MIN_64))
/*-******************************************
* bitStream encoding API (write forward)
********************************************/
/* bitStream can mix input from multiple sources.
* A critical property of these streams is that they encode and decode in **reverse** direction.
* So the first bit sequence you add will be the last to be read, like a LIFO stack.
*/
typedef struct {
size_t bitContainer;
unsigned bitPos;
char* startPtr;
char* ptr;
char* endPtr;
} BIT_CStream_t;
MEM_STATIC size_t BIT_initCStream(BIT_CStream_t* bitC, void* dstBuffer, size_t dstCapacity);
MEM_STATIC void BIT_addBits(BIT_CStream_t* bitC, size_t value, unsigned nbBits);
MEM_STATIC void BIT_flushBits(BIT_CStream_t* bitC);
MEM_STATIC size_t BIT_closeCStream(BIT_CStream_t* bitC);
/* Start with initCStream, providing the size of buffer to write into.
* bitStream will never write outside of this buffer.
* `dstCapacity` must be >= sizeof(bitD->bitContainer), otherwise @return will be an error code.
*
* bits are first added to a local register.
* Local register is size_t, hence 64-bits on 64-bits systems, or 32-bits on 32-bits systems.
* Writing data into memory is an explicit operation, performed by the flushBits function.
* Hence keep track how many bits are potentially stored into local register to avoid register overflow.
* After a flushBits, a maximum of 7 bits might still be stored into local register.
*
* Avoid storing elements of more than 24 bits if you want compatibility with 32-bits bitstream readers.
*
* Last operation is to close the bitStream.
* The function returns the final size of CStream in bytes.
* If data couldn't fit into `dstBuffer`, it will return a 0 ( == not storable)
*/
/*-********************************************
* bitStream decoding API (read backward)
**********************************************/
typedef size_t BitContainerType;
typedef struct {
BitContainerType bitContainer;
unsigned bitsConsumed;
const char* ptr;
const char* start;
const char* limitPtr;
} BIT_DStream_t;
typedef enum { BIT_DStream_unfinished = 0, /* fully refilled */
BIT_DStream_endOfBuffer = 1, /* still some bits left in bitstream */
BIT_DStream_completed = 2, /* bitstream entirely consumed, bit-exact */
BIT_DStream_overflow = 3 /* user requested more bits than present in bitstream */
} BIT_DStream_status; /* result of BIT_reloadDStream() */
MEM_STATIC size_t BIT_initDStream(BIT_DStream_t* bitD, const void* srcBuffer, size_t srcSize);
MEM_STATIC size_t BIT_readBits(BIT_DStream_t* bitD, unsigned nbBits);
MEM_STATIC BIT_DStream_status BIT_reloadDStream(BIT_DStream_t* bitD);
MEM_STATIC unsigned BIT_endOfDStream(const BIT_DStream_t* bitD);
/* Start by invoking BIT_initDStream().
* A chunk of the bitStream is then stored into a local register.
* Local register size is 64-bits on 64-bits systems, 32-bits on 32-bits systems (BitContainerType).
* You can then retrieve bitFields stored into the local register, **in reverse order**.
* Local register is explicitly reloaded from memory by the BIT_reloadDStream() method.
* A reload guarantee a minimum of ((8*sizeof(bitD->bitContainer))-7) bits when its result is BIT_DStream_unfinished.
* Otherwise, it can be less than that, so proceed accordingly.
* Checking if DStream has reached its end can be performed with BIT_endOfDStream().
*/
/*-****************************************
* unsafe API
******************************************/
MEM_STATIC void BIT_addBitsFast(BIT_CStream_t* bitC, size_t value, unsigned nbBits);
/* faster, but works only if value is "clean", meaning all high bits above nbBits are 0 */
MEM_STATIC void BIT_flushBitsFast(BIT_CStream_t* bitC);
/* unsafe version; does not check buffer overflow */
MEM_STATIC size_t BIT_readBitsFast(BIT_DStream_t* bitD, unsigned nbBits);
/* faster, but works only if nbBits >= 1 */
/*===== Local Constants =====*/
static const unsigned BIT_mask[] = {
0, 1, 3, 7, 0xF, 0x1F,
0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF,
0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF, 0x1FFFF,
0x3FFFF, 0x7FFFF, 0xFFFFF, 0x1FFFFF, 0x3FFFFF, 0x7FFFFF,
0xFFFFFF, 0x1FFFFFF, 0x3FFFFFF, 0x7FFFFFF, 0xFFFFFFF, 0x1FFFFFFF,
0x3FFFFFFF, 0x7FFFFFFF}; /* up to 31 bits */
#define BIT_MASK_SIZE (sizeof(BIT_mask) / sizeof(BIT_mask[0]))
/*-**************************************************************
* bitStream encoding
****************************************************************/
/*! BIT_initCStream() :
* `dstCapacity` must be > sizeof(size_t)
* @return : 0 if success,
* otherwise an error code (can be tested using ERR_isError()) */
MEM_STATIC size_t BIT_initCStream(BIT_CStream_t* bitC,
void* startPtr, size_t dstCapacity)
{
bitC->bitContainer = 0;
bitC->bitPos = 0;
bitC->startPtr = (char*)startPtr;
bitC->ptr = bitC->startPtr;
bitC->endPtr = bitC->startPtr + dstCapacity - sizeof(bitC->bitContainer);
if (dstCapacity <= sizeof(bitC->bitContainer)) return ERROR(dstSize_tooSmall);
return 0;
}
FORCE_INLINE_TEMPLATE size_t BIT_getLowerBits(size_t bitContainer, U32 const nbBits)
{
#if defined(STATIC_BMI2) && STATIC_BMI2 == 1 && !defined(ZSTD_NO_INTRINSICS)
return _bzhi_u64(bitContainer, nbBits);
#else
assert(nbBits < BIT_MASK_SIZE);
return bitContainer & BIT_mask[nbBits];
#endif
}
/*! BIT_addBits() :
* can add up to 31 bits into `bitC`.
* Note : does not check for register overflow ! */
MEM_STATIC void BIT_addBits(BIT_CStream_t* bitC,
size_t value, unsigned nbBits)
{
DEBUG_STATIC_ASSERT(BIT_MASK_SIZE == 32);
assert(nbBits < BIT_MASK_SIZE);
assert(nbBits + bitC->bitPos < sizeof(bitC->bitContainer) * 8);
bitC->bitContainer |= BIT_getLowerBits(value, nbBits) << bitC->bitPos;
bitC->bitPos += nbBits;
}
/*! BIT_addBitsFast() :
* works only if `value` is _clean_,
* meaning all high bits above nbBits are 0 */
MEM_STATIC void BIT_addBitsFast(BIT_CStream_t* bitC,
size_t value, unsigned nbBits)
{
assert((value>>nbBits) == 0);
assert(nbBits + bitC->bitPos < sizeof(bitC->bitContainer) * 8);
bitC->bitContainer |= value << bitC->bitPos;
bitC->bitPos += nbBits;
}
/*! BIT_flushBitsFast() :
* assumption : bitContainer has not overflowed
* unsafe version; does not check buffer overflow */
MEM_STATIC void BIT_flushBitsFast(BIT_CStream_t* bitC)
{
size_t const nbBytes = bitC->bitPos >> 3;
assert(bitC->bitPos < sizeof(bitC->bitContainer) * 8);
assert(bitC->ptr <= bitC->endPtr);
MEM_writeLEST(bitC->ptr, bitC->bitContainer);
bitC->ptr += nbBytes;
bitC->bitPos &= 7;
bitC->bitContainer >>= nbBytes*8;
}
/*! BIT_flushBits() :
* assumption : bitContainer has not overflowed
* safe version; check for buffer overflow, and prevents it.
* note : does not signal buffer overflow.
* overflow will be revealed later on using BIT_closeCStream() */
MEM_STATIC void BIT_flushBits(BIT_CStream_t* bitC)
{
size_t const nbBytes = bitC->bitPos >> 3;
assert(bitC->bitPos < sizeof(bitC->bitContainer) * 8);
assert(bitC->ptr <= bitC->endPtr);
MEM_writeLEST(bitC->ptr, bitC->bitContainer);
bitC->ptr += nbBytes;
if (bitC->ptr > bitC->endPtr) bitC->ptr = bitC->endPtr;
bitC->bitPos &= 7;
bitC->bitContainer >>= nbBytes*8;
}
/*! BIT_closeCStream() :
* @return : size of CStream, in bytes,
* or 0 if it could not fit into dstBuffer */
MEM_STATIC size_t BIT_closeCStream(BIT_CStream_t* bitC)
{
BIT_addBitsFast(bitC, 1, 1); /* endMark */
BIT_flushBits(bitC);
if (bitC->ptr >= bitC->endPtr) return 0; /* overflow detected */
return (bitC->ptr - bitC->startPtr) + (bitC->bitPos > 0);
}
/*-********************************************************
* bitStream decoding
**********************************************************/
/*! BIT_initDStream() :
* Initialize a BIT_DStream_t.
* `bitD` : a pointer to an already allocated BIT_DStream_t structure.
* `srcSize` must be the *exact* size of the bitStream, in bytes.
* @return : size of stream (== srcSize), or an errorCode if a problem is detected
*/
MEM_STATIC size_t BIT_initDStream(BIT_DStream_t* bitD, const void* srcBuffer, size_t srcSize)
{
if (srcSize < 1) { ZSTD_memset(bitD, 0, sizeof(*bitD)); return ERROR(srcSize_wrong); }
bitD->start = (const char*)srcBuffer;
bitD->limitPtr = bitD->start + sizeof(bitD->bitContainer);
if (srcSize >= sizeof(bitD->bitContainer)) { /* normal case */
bitD->ptr = (const char*)srcBuffer + srcSize - sizeof(bitD->bitContainer);
bitD->bitContainer = MEM_readLEST(bitD->ptr);
{ BYTE const lastByte = ((const BYTE*)srcBuffer)[srcSize-1];
bitD->bitsConsumed = lastByte ? 8 - ZSTD_highbit32(lastByte) : 0; /* ensures bitsConsumed is always set */
if (lastByte == 0) return ERROR(GENERIC); /* endMark not present */ }
} else {
bitD->ptr = bitD->start;
bitD->bitContainer = *(const BYTE*)(bitD->start);
switch(srcSize)
{
case 7: bitD->bitContainer += (BitContainerType)(((const BYTE*)(srcBuffer))[6]) << (sizeof(bitD->bitContainer)*8 - 16);
ZSTD_FALLTHROUGH;
case 6: bitD->bitContainer += (BitContainerType)(((const BYTE*)(srcBuffer))[5]) << (sizeof(bitD->bitContainer)*8 - 24);
ZSTD_FALLTHROUGH;
case 5: bitD->bitContainer += (BitContainerType)(((const BYTE*)(srcBuffer))[4]) << (sizeof(bitD->bitContainer)*8 - 32);
ZSTD_FALLTHROUGH;
case 4: bitD->bitContainer += (BitContainerType)(((const BYTE*)(srcBuffer))[3]) << 24;
ZSTD_FALLTHROUGH;
case 3: bitD->bitContainer += (BitContainerType)(((const BYTE*)(srcBuffer))[2]) << 16;
ZSTD_FALLTHROUGH;
case 2: bitD->bitContainer += (BitContainerType)(((const BYTE*)(srcBuffer))[1]) << 8;
ZSTD_FALLTHROUGH;
default: break;
}
{ BYTE const lastByte = ((const BYTE*)srcBuffer)[srcSize-1];
bitD->bitsConsumed = lastByte ? 8 - ZSTD_highbit32(lastByte) : 0;
if (lastByte == 0) return ERROR(corruption_detected); /* endMark not present */
}
bitD->bitsConsumed += (U32)(sizeof(bitD->bitContainer) - srcSize)*8;
}
return srcSize;
}
FORCE_INLINE_TEMPLATE size_t BIT_getUpperBits(BitContainerType bitContainer, U32 const start)
{
return bitContainer >> start;
}
FORCE_INLINE_TEMPLATE size_t BIT_getMiddleBits(BitContainerType bitContainer, U32 const start, U32 const nbBits)
{
U32 const regMask = sizeof(bitContainer)*8 - 1;
/* if start > regMask, bitstream is corrupted, and result is undefined */
assert(nbBits < BIT_MASK_SIZE);
/* x86 transform & ((1 << nbBits) - 1) to bzhi instruction, it is better
* than accessing memory. When bmi2 instruction is not present, we consider
* such cpus old (pre-Haswell, 2013) and their performance is not of that
* importance.
*/
#if defined(__x86_64__) || defined(_M_X64)
return (bitContainer >> (start & regMask)) & ((((U64)1) << nbBits) - 1);
#else
return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
#endif
}
/*! BIT_lookBits() :
* Provides next n bits from local register.
* local register is not modified.
* On 32-bits, maxNbBits==24.
* On 64-bits, maxNbBits==56.
* @return : value extracted */
FORCE_INLINE_TEMPLATE size_t BIT_lookBits(const BIT_DStream_t* bitD, U32 nbBits)
{
/* arbitrate between double-shift and shift+mask */
#if 1
/* if bitD->bitsConsumed + nbBits > sizeof(bitD->bitContainer)*8,
* bitstream is likely corrupted, and result is undefined */
return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
#else
/* this code path is slower on my os-x laptop */
U32 const regMask = sizeof(bitD->bitContainer)*8 - 1;
return ((bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> 1) >> ((regMask-nbBits) & regMask);
#endif
}
/*! BIT_lookBitsFast() :
* unsafe version; only works if nbBits >= 1 */
MEM_STATIC size_t BIT_lookBitsFast(const BIT_DStream_t* bitD, U32 nbBits)
{
U32 const regMask = sizeof(bitD->bitContainer)*8 - 1;
assert(nbBits >= 1);
return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
}
FORCE_INLINE_TEMPLATE void BIT_skipBits(BIT_DStream_t* bitD, U32 nbBits)
{
bitD->bitsConsumed += nbBits;
}
/*! BIT_readBits() :
* Read (consume) next n bits from local register and update.
* Pay attention to not read more than nbBits contained into local register.
* @return : extracted value. */
FORCE_INLINE_TEMPLATE size_t BIT_readBits(BIT_DStream_t* bitD, unsigned nbBits)
{
size_t const value = BIT_lookBits(bitD, nbBits);
BIT_skipBits(bitD, nbBits);
return value;
}
/*! BIT_readBitsFast() :
* unsafe version; only works if nbBits >= 1 */
MEM_STATIC size_t BIT_readBitsFast(BIT_DStream_t* bitD, unsigned nbBits)
{
size_t const value = BIT_lookBitsFast(bitD, nbBits);
assert(nbBits >= 1);
BIT_skipBits(bitD, nbBits);
return value;
}
/*! BIT_reloadDStream_internal() :
* Simple variant of BIT_reloadDStream(), with two conditions:
* 1. bitstream is valid : bitsConsumed <= sizeof(bitD->bitContainer)*8
* 2. look window is valid after shifted down : bitD->ptr >= bitD->start
*/
MEM_STATIC BIT_DStream_status BIT_reloadDStream_internal(BIT_DStream_t* bitD)
{
assert(bitD->bitsConsumed <= sizeof(bitD->bitContainer)*8);
bitD->ptr -= bitD->bitsConsumed >> 3;
assert(bitD->ptr >= bitD->start);
bitD->bitsConsumed &= 7;
bitD->bitContainer = MEM_readLEST(bitD->ptr);
return BIT_DStream_unfinished;
}
/*! BIT_reloadDStreamFast() :
* Similar to BIT_reloadDStream(), but with two differences:
* 1. bitsConsumed <= sizeof(bitD->bitContainer)*8 must hold!
* 2. Returns BIT_DStream_overflow when bitD->ptr < bitD->limitPtr, at this
* point you must use BIT_reloadDStream() to reload.
*/
MEM_STATIC BIT_DStream_status BIT_reloadDStreamFast(BIT_DStream_t* bitD)
{
if (UNLIKELY(bitD->ptr < bitD->limitPtr))
return BIT_DStream_overflow;
return BIT_reloadDStream_internal(bitD);
}
/*! BIT_reloadDStream() :
* Refill `bitD` from buffer previously set in BIT_initDStream() .
* This function is safe, it guarantees it will not never beyond src buffer.
* @return : status of `BIT_DStream_t` internal register.
* when status == BIT_DStream_unfinished, internal register is filled with at least 25 or 57 bits */
FORCE_INLINE_TEMPLATE BIT_DStream_status BIT_reloadDStream(BIT_DStream_t* bitD)
{
/* note : once in overflow mode, a bitstream remains in this mode until it's reset */
if (UNLIKELY(bitD->bitsConsumed > (sizeof(bitD->bitContainer)*8))) {
static const BitContainerType zeroFilled = 0;
bitD->ptr = (const char*)&zeroFilled; /* aliasing is allowed for char */
/* overflow detected, erroneous scenario or end of stream: no update */
return BIT_DStream_overflow;
}
assert(bitD->ptr >= bitD->start);
if (bitD->ptr >= bitD->limitPtr) {
return BIT_reloadDStream_internal(bitD);
}
if (bitD->ptr == bitD->start) {
/* reached end of bitStream => no update */
if (bitD->bitsConsumed < sizeof(bitD->bitContainer)*8) return BIT_DStream_endOfBuffer;
return BIT_DStream_completed;
}
/* start < ptr < limitPtr => cautious update */
{ U32 nbBytes = bitD->bitsConsumed >> 3;
BIT_DStream_status result = BIT_DStream_unfinished;
if (bitD->ptr - nbBytes < bitD->start) {
nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
result = BIT_DStream_endOfBuffer;
}
bitD->ptr -= nbBytes;
bitD->bitsConsumed -= nbBytes*8;
bitD->bitContainer = MEM_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD->bitContainer), otherwise bitD->ptr == bitD->start */
return result;
}
}
/*! BIT_endOfDStream() :
* @return : 1 if DStream has _exactly_ reached its end (all bits consumed).
*/
MEM_STATIC unsigned BIT_endOfDStream(const BIT_DStream_t* DStream)
{
return ((DStream->ptr == DStream->start) && (DStream->bitsConsumed == sizeof(DStream->bitContainer)*8));
}
#if defined (__cplusplus)
}
#endif
#endif /* BITSTREAM_H_MODULE */

314
src/bled/fse_decompress.c Normal file
View File

@ -0,0 +1,314 @@
/* ******************************************************************
* FSE : Finite State Entropy decoder
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* You can contact the author at :
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
* - Public forum : https://groups.google.com/forum/#!forum/lz4c
*
* This source code is licensed under both the BSD-style license (found in the
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
* in the COPYING file in the root directory of this source tree).
* You may select, at your option, one of the above-listed licenses.
****************************************************************** */
/* **************************************************************
* Includes
****************************************************************/
#include "fse_bitstream.h"
#include "zstd_compiler.h"
#define FSE_STATIC_LINKING_ONLY
#include "fse.h"
#include "zstd_error_private.h"
#include "zstd_deps.h" /* ZSTD_memcpy */
#include "zstd_bits.h" /* ZSTD_highbit32 */
/* **************************************************************
* Error Management
****************************************************************/
#define FSE_isError ERR_isError
#define FSE_STATIC_ASSERT(c) DEBUG_STATIC_ASSERT(c) /* use only *after* variable declarations */
/* **************************************************************
* Templates
****************************************************************/
/*
designed to be included
for type-specific functions (template emulation in C)
Objective is to write these functions only once, for improved maintenance
*/
/* safety checks */
#ifndef FSE_FUNCTION_EXTENSION
# error "FSE_FUNCTION_EXTENSION must be defined"
#endif
#ifndef FSE_FUNCTION_TYPE
# error "FSE_FUNCTION_TYPE must be defined"
#endif
/* Function names */
#define FSE_CAT(X,Y) X##Y
#define FSE_FUNCTION_NAME(X,Y) FSE_CAT(X,Y)
#define FSE_TYPE_NAME(X,Y) FSE_CAT(X,Y)
static size_t FSE_buildDTable_internal(FSE_DTable* dt, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize)
{
void* const tdPtr = dt+1; /* because *dt is unsigned, 32-bits aligned on 32-bits */
FSE_DECODE_TYPE* const tableDecode = (FSE_DECODE_TYPE*) (tdPtr);
U16* symbolNext = (U16*)workSpace;
BYTE* spread = (BYTE*)(symbolNext + maxSymbolValue + 1);
U32 const maxSV1 = maxSymbolValue + 1;
U32 const tableSize = 1 << tableLog;
U32 highThreshold = tableSize-1;
/* Sanity Checks */
if (FSE_BUILD_DTABLE_WKSP_SIZE(tableLog, maxSymbolValue) > wkspSize) return ERROR(maxSymbolValue_tooLarge);
if (maxSymbolValue > FSE_MAX_SYMBOL_VALUE) return ERROR(maxSymbolValue_tooLarge);
if (tableLog > FSE_MAX_TABLELOG) return ERROR(tableLog_tooLarge);
/* Init, lay down lowprob symbols */
{ FSE_DTableHeader DTableH;
DTableH.tableLog = (U16)tableLog;
DTableH.fastMode = 1;
{ S16 const largeLimit= (S16)(1 << (tableLog-1));
U32 s;
for (s=0; s<maxSV1; s++) {
if (normalizedCounter[s]==-1) {
tableDecode[highThreshold--].symbol = (FSE_FUNCTION_TYPE)s;
symbolNext[s] = 1;
} else {
if (normalizedCounter[s] >= largeLimit) DTableH.fastMode=0;
symbolNext[s] = (U16)normalizedCounter[s];
} } }
ZSTD_memcpy(dt, &DTableH, sizeof(DTableH));
}
/* Spread symbols */
if (highThreshold == tableSize - 1) {
size_t const tableMask = tableSize-1;
size_t const step = FSE_TABLESTEP(tableSize);
/* First lay down the symbols in order.
* We use a uint64_t to lay down 8 bytes at a time. This reduces branch
* misses since small blocks generally have small table logs, so nearly
* all symbols have counts <= 8. We ensure we have 8 bytes at the end of
* our buffer to handle the over-write.
*/
{ U64 const add = 0x0101010101010101ull;
size_t pos = 0;
U64 sv = 0;
U32 s;
for (s=0; s<maxSV1; ++s, sv += add) {
int i;
int const n = normalizedCounter[s];
MEM_write64(spread + pos, sv);
for (i = 8; i < n; i += 8) {
MEM_write64(spread + pos + i, sv);
}
pos += (size_t)n;
} }
/* Now we spread those positions across the table.
* The benefit of doing it in two stages is that we avoid the
* variable size inner loop, which caused lots of branch misses.
* Now we can run through all the positions without any branch misses.
* We unroll the loop twice, since that is what empirically worked best.
*/
{
size_t position = 0;
size_t s;
size_t const unroll = 2;
assert(tableSize % unroll == 0); /* FSE_MIN_TABLELOG is 5 */
for (s = 0; s < (size_t)tableSize; s += unroll) {
size_t u;
for (u = 0; u < unroll; ++u) {
size_t const uPosition = (position + (u * step)) & tableMask;
tableDecode[uPosition].symbol = spread[s + u];
}
position = (position + (unroll * step)) & tableMask;
}
assert(position == 0);
}
} else {
U32 const tableMask = tableSize-1;
U32 const step = FSE_TABLESTEP(tableSize);
U32 s, position = 0;
for (s=0; s<maxSV1; s++) {
int i;
for (i=0; i<normalizedCounter[s]; i++) {
tableDecode[position].symbol = (FSE_FUNCTION_TYPE)s;
position = (position + step) & tableMask;
while (position > highThreshold) position = (position + step) & tableMask; /* lowprob area */
} }
if (position!=0) return ERROR(GENERIC); /* position must reach all cells once, otherwise normalizedCounter is incorrect */
}
/* Build Decoding table */
{ U32 u;
for (u=0; u<tableSize; u++) {
FSE_FUNCTION_TYPE const symbol = (FSE_FUNCTION_TYPE)(tableDecode[u].symbol);
U32 const nextState = symbolNext[symbol]++;
tableDecode[u].nbBits = (BYTE) (tableLog - ZSTD_highbit32(nextState) );
tableDecode[u].newState = (U16) ( (nextState << tableDecode[u].nbBits) - tableSize);
} }
return 0;
}
size_t FSE_buildDTable_wksp(FSE_DTable* dt, const short* normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize)
{
return FSE_buildDTable_internal(dt, normalizedCounter, maxSymbolValue, tableLog, workSpace, wkspSize);
}
#ifndef FSE_COMMONDEFS_ONLY
/*-*******************************************************
* Decompression (Byte symbols)
*********************************************************/
FORCE_INLINE_TEMPLATE size_t FSE_decompress_usingDTable_generic(
void* dst, size_t maxDstSize,
const void* cSrc, size_t cSrcSize,
const FSE_DTable* dt, const unsigned fast)
{
BYTE* const ostart = (BYTE*) dst;
BYTE* op = ostart;
BYTE* const omax = op + maxDstSize;
BYTE* const olimit = omax-3;
BIT_DStream_t bitD;
FSE_DState_t state1;
FSE_DState_t state2;
/* Init */
CHECK_F(BIT_initDStream(&bitD, cSrc, cSrcSize));
FSE_initDState(&state1, &bitD, dt);
FSE_initDState(&state2, &bitD, dt);
RETURN_ERROR_IF(BIT_reloadDStream(&bitD)==BIT_DStream_overflow, corruption_detected, "");
#define FSE_GETSYMBOL(statePtr) fast ? FSE_decodeSymbolFast(statePtr, &bitD) : FSE_decodeSymbol(statePtr, &bitD)
/* 4 symbols per loop */
for ( ; (BIT_reloadDStream(&bitD)==BIT_DStream_unfinished) & (op<olimit) ; op+=4) {
op[0] = FSE_GETSYMBOL(&state1);
if (FSE_MAX_TABLELOG*2+7 > sizeof(bitD.bitContainer)*8) /* This test must be static */
BIT_reloadDStream(&bitD);
op[1] = FSE_GETSYMBOL(&state2);
if (FSE_MAX_TABLELOG*4+7 > sizeof(bitD.bitContainer)*8) /* This test must be static */
{ if (BIT_reloadDStream(&bitD) > BIT_DStream_unfinished) { op+=2; break; } }
op[2] = FSE_GETSYMBOL(&state1);
if (FSE_MAX_TABLELOG*2+7 > sizeof(bitD.bitContainer)*8) /* This test must be static */
BIT_reloadDStream(&bitD);
op[3] = FSE_GETSYMBOL(&state2);
}
/* tail */
/* note : BIT_reloadDStream(&bitD) >= FSE_DStream_partiallyFilled; Ends at exactly BIT_DStream_completed */
while (1) {
if (op>(omax-2)) return ERROR(dstSize_tooSmall);
*op++ = FSE_GETSYMBOL(&state1);
if (BIT_reloadDStream(&bitD)==BIT_DStream_overflow) {
*op++ = FSE_GETSYMBOL(&state2);
break;
}
if (op>(omax-2)) return ERROR(dstSize_tooSmall);
*op++ = FSE_GETSYMBOL(&state2);
if (BIT_reloadDStream(&bitD)==BIT_DStream_overflow) {
*op++ = FSE_GETSYMBOL(&state1);
break;
} }
assert(op >= ostart);
return (size_t)(op-ostart);
}
typedef struct {
short ncount[FSE_MAX_SYMBOL_VALUE + 1];
} FSE_DecompressWksp;
FORCE_INLINE_TEMPLATE size_t FSE_decompress_wksp_body(
void* dst, size_t dstCapacity,
const void* cSrc, size_t cSrcSize,
unsigned maxLog, void* workSpace, size_t wkspSize,
int bmi2)
{
const BYTE* const istart = (const BYTE*)cSrc;
const BYTE* ip = istart;
unsigned tableLog;
unsigned maxSymbolValue = FSE_MAX_SYMBOL_VALUE;
FSE_DecompressWksp* const wksp = (FSE_DecompressWksp*)workSpace;
size_t const dtablePos = sizeof(FSE_DecompressWksp) / sizeof(FSE_DTable);
FSE_DTable* const dtable = (FSE_DTable*)workSpace + dtablePos;
FSE_STATIC_ASSERT((FSE_MAX_SYMBOL_VALUE + 1) % 2 == 0);
if (wkspSize < sizeof(*wksp)) return ERROR(GENERIC);
/* correct offset to dtable depends on this property */
FSE_STATIC_ASSERT(sizeof(FSE_DecompressWksp) % sizeof(FSE_DTable) == 0);
/* normal FSE decoding mode */
{ size_t const NCountLength =
FSE_readNCount_bmi2(wksp->ncount, &maxSymbolValue, &tableLog, istart, cSrcSize, bmi2);
if (FSE_isError(NCountLength)) return NCountLength;
if (tableLog > maxLog) return ERROR(tableLog_tooLarge);
assert(NCountLength <= cSrcSize);
ip += NCountLength;
cSrcSize -= NCountLength;
}
if (FSE_DECOMPRESS_WKSP_SIZE(tableLog, maxSymbolValue) > wkspSize) return ERROR(tableLog_tooLarge);
assert(sizeof(*wksp) + FSE_DTABLE_SIZE(tableLog) <= wkspSize);
workSpace = (BYTE*)workSpace + sizeof(*wksp) + FSE_DTABLE_SIZE(tableLog);
wkspSize -= sizeof(*wksp) + FSE_DTABLE_SIZE(tableLog);
CHECK_F( FSE_buildDTable_internal(dtable, wksp->ncount, maxSymbolValue, tableLog, workSpace, wkspSize) );
{
const void* ptr = dtable;
const FSE_DTableHeader* DTableH = (const FSE_DTableHeader*)ptr;
const U32 fastMode = DTableH->fastMode;
/* select fast mode (static) */
if (fastMode) return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, dtable, 1);
return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, dtable, 0);
}
}
/* Avoids the FORCE_INLINE of the _body() function. */
static size_t FSE_decompress_wksp_body_default(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize)
{
return FSE_decompress_wksp_body(dst, dstCapacity, cSrc, cSrcSize, maxLog, workSpace, wkspSize, 0);
}
#if DYNAMIC_BMI2
BMI2_TARGET_ATTRIBUTE static size_t FSE_decompress_wksp_body_bmi2(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize)
{
return FSE_decompress_wksp_body(dst, dstCapacity, cSrc, cSrcSize, maxLog, workSpace, wkspSize, 1);
}
#endif
size_t FSE_decompress_wksp_bmi2(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize, int bmi2)
{
#if DYNAMIC_BMI2
if (bmi2) {
return FSE_decompress_wksp_body_bmi2(dst, dstCapacity, cSrc, cSrcSize, maxLog, workSpace, wkspSize);
}
#endif
(void)bmi2;
return FSE_decompress_wksp_body_default(dst, dstCapacity, cSrc, cSrcSize, maxLog, workSpace, wkspSize);
}
#endif /* FSE_COMMONDEFS_ONLY */

View File

@ -11,7 +11,6 @@ void FAST_FUNC header_verbose_list(const file_header_t *file_header)
struct tm *ptm = &tm_time; //localtime(&file_header->mtime);
#if ENABLE_FEATURE_TAR_UNAME_GNAME
char modestr[12];
char uid[sizeof(int)*3 + 2];
/*char gid[sizeof(int)*3 + 2];*/
char *user;
@ -29,8 +28,8 @@ void FAST_FUNC header_verbose_list(const file_header_t *file_header)
/*sprintf(gid, "%u", (unsigned)file_header->gid);*/
group = utoa(file_header->gid);
}
printf("%s %s/%s %9"OFF_FMT"u %4u-%02u-%02u %02u:%02u:%02u %s",
bb_mode_string(modestr, file_header->mode),
printf("%u %s/%s %9"OFF_FMT"u %4u-%02u-%02u %02u:%02u:%02u %s",
file_header->mode,
user,
group,
file_header->size,
@ -46,8 +45,8 @@ void FAST_FUNC header_verbose_list(const file_header_t *file_header)
localtime_r(&file_header->mtime, ptm);
printf("%s %u/%u %9"OFF_FMT"u %4u-%02u-%02u %02u:%02u:%02u %s",
bb_mode_string(modestr, file_header->mode),
printf("%u %u/%u %9"OFF_FMT"u %4u-%02u-%02u %02u:%02u:%02u %s",
file_header->mode,
(unsigned)file_header->uid,
(unsigned)file_header->gid,
file_header->size,

286
src/bled/huf.h Normal file
View File

@ -0,0 +1,286 @@
/* ******************************************************************
* huff0 huffman codec,
* part of Finite State Entropy library
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
*
* This source code is licensed under both the BSD-style license (found in the
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
* in the COPYING file in the root directory of this source tree).
* You may select, at your option, one of the above-listed licenses.
****************************************************************** */
#if defined (__cplusplus)
extern "C" {
#endif
#ifndef HUF_H_298734234
#define HUF_H_298734234
/* *** Dependencies *** */
#include "zstd_deps.h" /* size_t */
#include "zstd_mem.h" /* U32 */
#define FSE_STATIC_LINKING_ONLY
#include "fse.h"
/* *** Tool functions *** */
#define HUF_BLOCKSIZE_MAX (128 * 1024) /**< maximum input size for a single block compressed with HUF_compress */
size_t HUF_compressBound(size_t size); /**< maximum compressed size (worst case) */
/* Error Management */
unsigned HUF_isError(size_t code); /**< tells if a return value is an error code */
const char* HUF_getErrorName(size_t code); /**< provides error code string (useful for debugging) */
#define HUF_WORKSPACE_SIZE ((8 << 10) + 512 /* sorting scratch space */)
#define HUF_WORKSPACE_SIZE_U64 (HUF_WORKSPACE_SIZE / sizeof(U64))
/* *** Constants *** */
#define HUF_TABLELOG_MAX 12 /* max runtime value of tableLog (due to static allocation); can be modified up to HUF_TABLELOG_ABSOLUTEMAX */
#define HUF_TABLELOG_DEFAULT 11 /* default tableLog value when none specified */
#define HUF_SYMBOLVALUE_MAX 255
#define HUF_TABLELOG_ABSOLUTEMAX 12 /* absolute limit of HUF_MAX_TABLELOG. Beyond that value, code does not work */
#if (HUF_TABLELOG_MAX > HUF_TABLELOG_ABSOLUTEMAX)
# error "HUF_TABLELOG_MAX is too large !"
#endif
/* ****************************************
* Static allocation
******************************************/
/* HUF buffer bounds */
#define HUF_CTABLEBOUND 129
#define HUF_BLOCKBOUND(size) (size + (size>>8) + 8) /* only true when incompressible is pre-filtered with fast heuristic */
#define HUF_COMPRESSBOUND(size) (HUF_CTABLEBOUND + HUF_BLOCKBOUND(size)) /* Macro version, useful for static allocation */
/* static allocation of HUF's Compression Table */
/* this is a private definition, just exposed for allocation and strict aliasing purpose. never EVER access its members directly */
typedef size_t HUF_CElt; /* consider it an incomplete type */
#define HUF_CTABLE_SIZE_ST(maxSymbolValue) ((maxSymbolValue)+2) /* Use tables of size_t, for proper alignment */
#define HUF_CTABLE_SIZE(maxSymbolValue) (HUF_CTABLE_SIZE_ST(maxSymbolValue) * sizeof(size_t))
#define HUF_CREATE_STATIC_CTABLE(name, maxSymbolValue) \
HUF_CElt name[HUF_CTABLE_SIZE_ST(maxSymbolValue)] /* no final ; */
/* static allocation of HUF's DTable */
typedef U32 HUF_DTable;
#define HUF_DTABLE_SIZE(maxTableLog) (1 + (1<<(maxTableLog)))
#define HUF_CREATE_STATIC_DTABLEX1(DTable, maxTableLog) \
HUF_DTable DTable[HUF_DTABLE_SIZE((maxTableLog)-1)] = { ((U32)((maxTableLog)-1) * 0x01000001) }
#define HUF_CREATE_STATIC_DTABLEX2(DTable, maxTableLog) \
HUF_DTable DTable[HUF_DTABLE_SIZE(maxTableLog)] = { ((U32)(maxTableLog) * 0x01000001) }
/* ****************************************
* Advanced decompression functions
******************************************/
/**
* Huffman flags bitset.
* For all flags, 0 is the default value.
*/
typedef enum {
/**
* If compiled with DYNAMIC_BMI2: Set flag only if the CPU supports BMI2 at runtime.
* Otherwise: Ignored.
*/
HUF_flags_bmi2 = (1 << 0),
/**
* If set: Test possible table depths to find the one that produces the smallest header + encoded size.
* If unset: Use heuristic to find the table depth.
*/
HUF_flags_optimalDepth = (1 << 1),
/**
* If set: If the previous table can encode the input, always reuse the previous table.
* If unset: If the previous table can encode the input, reuse the previous table if it results in a smaller output.
*/
HUF_flags_preferRepeat = (1 << 2),
/**
* If set: Sample the input and check if the sample is uncompressible, if it is then don't attempt to compress.
* If unset: Always histogram the entire input.
*/
HUF_flags_suspectUncompressible = (1 << 3),
/**
* If set: Don't use assembly implementations
* If unset: Allow using assembly implementations
*/
HUF_flags_disableAsm = (1 << 4),
/**
* If set: Don't use the fast decoding loop, always use the fallback decoding loop.
* If unset: Use the fast decoding loop when possible.
*/
HUF_flags_disableFast = (1 << 5)
} HUF_flags_e;
/* ****************************************
* HUF detailed API
* ****************************************/
#define HUF_OPTIMAL_DEPTH_THRESHOLD ZSTD_btultra
/*! HUF_compress() does the following:
* 1. count symbol occurrence from source[] into table count[] using FSE_count() (exposed within "fse.h")
* 2. (optional) refine tableLog using HUF_optimalTableLog()
* 3. build Huffman table from count using HUF_buildCTable()
* 4. save Huffman table to memory buffer using HUF_writeCTable()
* 5. encode the data stream using HUF_compress4X_usingCTable()
*
* The following API allows targeting specific sub-functions for advanced tasks.
* For example, it's possible to compress several blocks using the same 'CTable',
* or to save and regenerate 'CTable' using external methods.
*/
unsigned HUF_minTableLog(unsigned symbolCardinality);
unsigned HUF_cardinality(const unsigned* count, unsigned maxSymbolValue);
unsigned HUF_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue, void* workSpace,
size_t wkspSize, HUF_CElt* table, const unsigned* count, int flags); /* table is used as scratch space for building and testing tables, not a return value */
size_t HUF_writeCTable_wksp(void* dst, size_t maxDstSize, const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog, void* workspace, size_t workspaceSize);
size_t HUF_compress4X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable, int flags);
size_t HUF_estimateCompressedSize(const HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue);
int HUF_validateCTable(const HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue);
typedef enum {
HUF_repeat_none, /**< Cannot use the previous table */
HUF_repeat_check, /**< Can use the previous table but it must be checked. Note : The previous table must have been constructed by HUF_compress{1, 4}X_repeat */
HUF_repeat_valid /**< Can use the previous table and it is assumed to be valid */
} HUF_repeat;
/** HUF_compress4X_repeat() :
* Same as HUF_compress4X_wksp(), but considers using hufTable if *repeat != HUF_repeat_none.
* If it uses hufTable it does not modify hufTable or repeat.
* If it doesn't, it sets *repeat = HUF_repeat_none, and it sets hufTable to the table used.
* If preferRepeat then the old table will always be used if valid.
* If suspectUncompressible then some sampling checks will be run to potentially skip huffman coding */
size_t HUF_compress4X_repeat(void* dst, size_t dstSize,
const void* src, size_t srcSize,
unsigned maxSymbolValue, unsigned tableLog,
void* workSpace, size_t wkspSize, /**< `workSpace` must be aligned on 4-bytes boundaries, `wkspSize` must be >= HUF_WORKSPACE_SIZE */
HUF_CElt* hufTable, HUF_repeat* repeat, int flags);
/** HUF_buildCTable_wksp() :
* Same as HUF_buildCTable(), but using externally allocated scratch buffer.
* `workSpace` must be aligned on 4-bytes boundaries, and its size must be >= HUF_CTABLE_WORKSPACE_SIZE.
*/
#define HUF_CTABLE_WORKSPACE_SIZE_U32 ((4 * (HUF_SYMBOLVALUE_MAX + 1)) + 192)
#define HUF_CTABLE_WORKSPACE_SIZE (HUF_CTABLE_WORKSPACE_SIZE_U32 * sizeof(unsigned))
size_t HUF_buildCTable_wksp (HUF_CElt* tree,
const unsigned* count, U32 maxSymbolValue, U32 maxNbBits,
void* workSpace, size_t wkspSize);
/*! HUF_readStats() :
* Read compact Huffman tree, saved by HUF_writeCTable().
* `huffWeight` is destination buffer.
* @return : size read from `src` , or an error Code .
* Note : Needed by HUF_readCTable() and HUF_readDTableXn() . */
size_t HUF_readStats(BYTE* huffWeight, size_t hwSize,
U32* rankStats, U32* nbSymbolsPtr, U32* tableLogPtr,
const void* src, size_t srcSize);
/*! HUF_readStats_wksp() :
* Same as HUF_readStats() but takes an external workspace which must be
* 4-byte aligned and its size must be >= HUF_READ_STATS_WORKSPACE_SIZE.
* If the CPU has BMI2 support, pass bmi2=1, otherwise pass bmi2=0.
*/
#define HUF_READ_STATS_WORKSPACE_SIZE_U32 FSE_DECOMPRESS_WKSP_SIZE_U32(6, HUF_TABLELOG_MAX-1)
#define HUF_READ_STATS_WORKSPACE_SIZE (HUF_READ_STATS_WORKSPACE_SIZE_U32 * sizeof(unsigned))
size_t HUF_readStats_wksp(BYTE* huffWeight, size_t hwSize,
U32* rankStats, U32* nbSymbolsPtr, U32* tableLogPtr,
const void* src, size_t srcSize,
void* workspace, size_t wkspSize,
int flags);
/** HUF_readCTable() :
* Loading a CTable saved with HUF_writeCTable() */
size_t HUF_readCTable (HUF_CElt* CTable, unsigned* maxSymbolValuePtr, const void* src, size_t srcSize, unsigned *hasZeroWeights);
/** HUF_getNbBitsFromCTable() :
* Read nbBits from CTable symbolTable, for symbol `symbolValue` presumed <= HUF_SYMBOLVALUE_MAX
* Note 1 : If symbolValue > HUF_readCTableHeader(symbolTable).maxSymbolValue, returns 0
* Note 2 : is not inlined, as HUF_CElt definition is private
*/
U32 HUF_getNbBitsFromCTable(const HUF_CElt* symbolTable, U32 symbolValue);
typedef struct {
BYTE tableLog;
BYTE maxSymbolValue;
BYTE unused[sizeof(size_t) - 2];
} HUF_CTableHeader;
/** HUF_readCTableHeader() :
* @returns The header from the CTable specifying the tableLog and the maxSymbolValue.
*/
HUF_CTableHeader HUF_readCTableHeader(HUF_CElt const* ctable);
/*
* HUF_decompress() does the following:
* 1. select the decompression algorithm (X1, X2) based on pre-computed heuristics
* 2. build Huffman table from save, using HUF_readDTableX?()
* 3. decode 1 or 4 segments in parallel using HUF_decompress?X?_usingDTable()
*/
/** HUF_selectDecoder() :
* Tells which decoder is likely to decode faster,
* based on a set of pre-computed metrics.
* @return : 0==HUF_decompress4X1, 1==HUF_decompress4X2 .
* Assumption : 0 < dstSize <= 128 KB */
U32 HUF_selectDecoder (size_t dstSize, size_t cSrcSize);
/**
* The minimum workspace size for the `workSpace` used in
* HUF_readDTableX1_wksp() and HUF_readDTableX2_wksp().
*
* The space used depends on HUF_TABLELOG_MAX, ranging from ~1500 bytes when
* HUF_TABLE_LOG_MAX=12 to ~1850 bytes when HUF_TABLE_LOG_MAX=15.
* Buffer overflow errors may potentially occur if code modifications result in
* a required workspace size greater than that specified in the following
* macro.
*/
#define HUF_DECOMPRESS_WORKSPACE_SIZE ((2 << 10) + (1 << 9))
#define HUF_DECOMPRESS_WORKSPACE_SIZE_U32 (HUF_DECOMPRESS_WORKSPACE_SIZE / sizeof(U32))
/* ====================== */
/* single stream variants */
/* ====================== */
size_t HUF_compress1X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable, int flags);
/** HUF_compress1X_repeat() :
* Same as HUF_compress1X_wksp(), but considers using hufTable if *repeat != HUF_repeat_none.
* If it uses hufTable it does not modify hufTable or repeat.
* If it doesn't, it sets *repeat = HUF_repeat_none, and it sets hufTable to the table used.
* If preferRepeat then the old table will always be used if valid.
* If suspectUncompressible then some sampling checks will be run to potentially skip huffman coding */
size_t HUF_compress1X_repeat(void* dst, size_t dstSize,
const void* src, size_t srcSize,
unsigned maxSymbolValue, unsigned tableLog,
void* workSpace, size_t wkspSize, /**< `workSpace` must be aligned on 4-bytes boundaries, `wkspSize` must be >= HUF_WORKSPACE_SIZE */
HUF_CElt* hufTable, HUF_repeat* repeat, int flags);
size_t HUF_decompress1X_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize, int flags);
#ifndef HUF_FORCE_DECOMPRESS_X1
size_t HUF_decompress1X2_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize, int flags); /**< double-symbols decoder */
#endif
/* BMI2 variants.
* If the CPU has BMI2 support, pass bmi2=1, otherwise pass bmi2=0.
*/
size_t HUF_decompress1X_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable, int flags);
#ifndef HUF_FORCE_DECOMPRESS_X2
size_t HUF_decompress1X1_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize, int flags);
#endif
size_t HUF_decompress4X_usingDTable(void* dst, size_t maxDstSize, const void* cSrc, size_t cSrcSize, const HUF_DTable* DTable, int flags);
size_t HUF_decompress4X_hufOnly_wksp(HUF_DTable* dctx, void* dst, size_t dstSize, const void* cSrc, size_t cSrcSize, void* workSpace, size_t wkspSize, int flags);
#ifndef HUF_FORCE_DECOMPRESS_X2
size_t HUF_readDTableX1_wksp(HUF_DTable* DTable, const void* src, size_t srcSize, void* workSpace, size_t wkspSize, int flags);
#endif
#ifndef HUF_FORCE_DECOMPRESS_X1
size_t HUF_readDTableX2_wksp(HUF_DTable* DTable, const void* src, size_t srcSize, void* workSpace, size_t wkspSize, int flags);
#endif
#endif /* HUF_H_298734234 */
#if defined (__cplusplus)
}
#endif

1945
src/bled/huf_decompress.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,6 @@
/*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include "libbb.h"
#include "bb_archive.h"

View File

@ -23,7 +23,6 @@
#include "platform.h"
#include "msapi_utf8.h"
#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
@ -40,24 +39,37 @@
#include <sys/types.h>
#include <io.h>
#define ONE_TB 1099511627776ULL
#define ONE_TB 1099511627776ULL
#define ENABLE_DESKTOP 1
#define ENABLE_DESKTOP 1
#if ENABLE_DESKTOP
#define IF_DESKTOP(x) x
#define IF_DESKTOP(x) x
#define IF_NOT_DESKTOP(x)
#else
#define IF_DESKTOP(x)
#define IF_NOT_DESKTOP(x) x
#define IF_NOT_DESKTOP(x) x
#endif
#define IF_NOT_FEATURE_LZMA_FAST(x) x
#define ENABLE_FEATURE_UNZIP_CDF 1
#define ENABLE_FEATURE_UNZIP_BZIP2 1
#define ENABLE_FEATURE_UNZIP_LZMA 1
#define ENABLE_FEATURE_UNZIP_XZ 1
#define IF_NOT_FEATURE_LZMA_FAST(x) x
#define ENABLE_FEATURE_UNZIP_CDF 1
#define ENABLE_FEATURE_UNZIP_BZIP2 1
#define ENABLE_FEATURE_UNZIP_LZMA 1
#define ENABLE_FEATURE_UNZIP_XZ 1
#define ENABLE_FEATURE_CLEAN_UP 1
#define uoff_t unsigned off_t
#define OFF_FMT "ll"
#define uoff_t unsigned off_t
#define OFF_FMT "ll"
#define SEAMLESS_COMPRESSION 0
#if (SEAMLESS_COMPRESSION)
#define ENABLE_FEATURE_SEAMLESS_BZ2 1
#define ENABLE_FEATURE_SEAMLESS_GZ 1
#define ENABLE_FEATURE_SEAMLESS_LZMA 1
#define ENABLE_FEATURE_SEAMLESS_XZ 1
#define ENABLE_FEATURE_SEAMLESS_Z 1
#define ENABLE_FEATURE_SEAMLESS_ZSTD 1
#define IF_FEATURE_SEAMLESS_BZ2(x) x
#define IF_FEATURE_SEAMLESS_XZ(x) x
#define IF_FEATURE_SEAMLESS_ZSTD(x) x
#endif
#ifndef _MODE_T_
#define _MODE_T_
@ -150,8 +162,8 @@ extern unsigned long* bled_cancel_request;
#define bb_printf(...) do { if (bled_printf != NULL) bled_printf(__VA_ARGS__); \
else { printf(__VA_ARGS__); putchar('\n'); } } while(0)
#define bb_error_msg(...) bb_printf("\nError: " __VA_ARGS__)
#define bb_error_msg_and_die(...) do {bb_error_msg(__VA_ARGS__); xfunc_die();} while(0)
#define bb_error_msg_and_err(...) do {bb_error_msg(__VA_ARGS__); goto err;} while(0)
#define bb_error_msg_and_die(...) do { bb_error_msg(__VA_ARGS__); xfunc_die(); } while(0)
#define bb_error_msg_and_err(...) do { bb_error_msg(__VA_ARGS__); goto err; } while(0)
#define bb_perror_msg bb_error_msg
#define bb_perror_msg_and_die bb_error_msg_and_die
#define bb_simple_error_msg bb_error_msg
@ -168,15 +180,14 @@ static inline void *xrealloc(void *ptr, size_t size) {
#define bb_msg_read_error "read error"
#define bb_msg_write_error "write error"
#define bb_mode_string(str, mode) "[not implemented]"
#define bb_make_directory(path, mode, flags) SHCreateDirectoryExU(NULL, path, NULL)
static inline int link(const char *oldpath, const char *newpath) {errno = ENOSYS; return -1;}
static inline int symlink(const char *oldpath, const char *newpath) {errno = ENOSYS; return -1;}
static inline int chown(const char *path, uid_t owner, gid_t group) {errno = ENOSYS; return -1;}
static inline int mknod(const char *pathname, mode_t mode, dev_t dev) {errno = ENOSYS; return -1;}
static inline int link(const char *oldpath, const char *newpath) { errno = ENOSYS; return -1; }
static inline int symlink(const char *oldpath, const char *newpath) { errno = ENOSYS; return -1; }
static inline int chown(const char *path, uid_t owner, gid_t group) { errno = ENOSYS; return -1; }
static inline int mknod(const char *pathname, mode_t mode, dev_t dev) { errno = ENOSYS; return -1; }
static inline int utimes64(const char* filename, const struct timeval64 times64[2]) { errno = ENOSYS; return -1; }
static inline int fnmatch(const char *pattern, const char *string, int flags) {return PathMatchSpecA(string, pattern)?0:1;}
static inline int fnmatch(const char *pattern, const char *string, int flags) { return PathMatchSpecA(string, pattern) ? 0 : 1; }
static inline pid_t wait(int* status) { *status = 4; return -1; }
#define wait_any_nohang wait
@ -284,6 +295,19 @@ static inline struct tm *localtime_r(const time_t *timep, struct tm *result) {
#define xzalloc(x) calloc(x, 1)
#define malloc_or_warn malloc
#define mkdir(x, y) _mkdirU(x)
struct fd_pair { int rd; int wr; };
void xpipe(int filedes[2]) FAST_FUNC;
#define xpiped_pair(pair) xpipe(&((pair).rd))
#define xpipe(filedes) _pipe(filedes, 0x1000, _O_BINARY)
#define xlseek lseek
#define xread safe_read
static inline void xmove_fd(int from, int to)
{
if (from != to) {
(void)_dup2(from, to);
_close(from);
}
}
#if defined(_MSC_VER)
#define _S_IFBLK 0x3000

View File

@ -2,7 +2,6 @@
/*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include "libbb.h"
#include "bb_archive.h"
@ -17,12 +16,9 @@ int FAST_FUNC check_signature16(transformer_state_t *xstate, unsigned magic16)
uint16_t magic2;
if (full_read(xstate->src_fd, &magic2, 2) != 2 || magic2 != magic16) {
bb_error_msg("invalid magic");
#if 0 /* possible future extension */
if (xstate->check_signature > 1)
xfunc_die();
#endif
return -1;
}
xstate->signature_skipped = 2;
}
return 0;
}
@ -101,7 +97,7 @@ void check_errors_in_children(int signo)
/* transformer(), more than meets the eye */
#if BB_MMU
void FAST_FUNC fork_transformer(int fd,
int check_signature,
int signature_skipped,
IF_DESKTOP(long long) int FAST_FUNC (*transformer)(transformer_state_t *xstate)
)
#else
@ -115,20 +111,20 @@ void FAST_FUNC fork_transformer(int fd, const char *transform_prog)
pid = BB_MMU ? xfork() : xvfork();
if (pid == 0) {
/* Child */
close(fd_pipe.rd); /* we don't want to read from the parent */
_close(fd_pipe.rd); /* we don't want to read from the parent */
// FIXME: error check?
#if BB_MMU
{
IF_DESKTOP(long long) int r;
transformer_state_t xstate;
init_transformer_state(&xstate);
xstate.check_signature = check_signature;
xstate.signature_skipped = signature_skipped;
xstate.src_fd = fd;
xstate.dst_fd = fd_pipe.wr;
r = transformer(&xstate);
if (ENABLE_FEATURE_CLEAN_UP) {
close(fd_pipe.wr); /* send EOF */
close(fd);
_close(fd_pipe.wr); /* send EOF */
_close(fd);
}
/* must be _exit! bug was actually seen here */
_exit(/*error if:*/ r < 0);
@ -150,7 +146,7 @@ void FAST_FUNC fork_transformer(int fd, const char *transform_prog)
}
/* parent process */
close(fd_pipe.wr); /* don't want to write to the child */
_close(fd_pipe.wr); /* don't want to write to the child */
xmove_fd(fd_pipe.rd, fd);
}
@ -159,59 +155,69 @@ void FAST_FUNC fork_transformer(int fd, const char *transform_prog)
*/
static transformer_state_t *setup_transformer_on_fd(int fd, int fail_if_not_compressed)
{
union {
uint8_t b[4];
uint16_t b16[2];
uint32_t b32[1];
} magic;
int offset;
transformer_state_t *xstate;
offset = -2;
xstate = xzalloc(sizeof(*xstate));
xstate->src_fd = fd;
/* .gz and .bz2 both have 2-byte signature, and their
* unpack_XXX_stream wants this header skipped. */
xread(fd, magic.b16, sizeof(magic.b16[0]));
xstate->signature_skipped = 2;
xread(fd, xstate->magic.b16, 2);
if (ENABLE_FEATURE_SEAMLESS_GZ
&& magic.b16[0] == GZIP_MAGIC
&& xstate->magic.b16[0] == GZIP_MAGIC
) {
xstate->xformer = unpack_gz_stream;
USE_FOR_NOMMU(xstate->xformer_prog = "gunzip";)
goto found_magic;
}
if (ENABLE_FEATURE_SEAMLESS_Z
&& magic.b16[0] == COMPRESS_MAGIC
&& xstate->magic.b16[0] == COMPRESS_MAGIC
) {
xstate->xformer = unpack_Z_stream;
USE_FOR_NOMMU(xstate->xformer_prog = "uncompress";)
goto found_magic;
}
if (ENABLE_FEATURE_SEAMLESS_BZ2
&& magic.b16[0] == BZIP2_MAGIC
&& xstate->magic.b16[0] == BZIP2_MAGIC
) {
xstate->xformer = unpack_bz2_stream;
USE_FOR_NOMMU(xstate->xformer_prog = "bunzip2";)
goto found_magic;
}
if (ENABLE_FEATURE_SEAMLESS_XZ
&& magic.b16[0] == XZ_MAGIC1
&& xstate->magic.b16[0] == XZ_MAGIC1
) {
offset = -6;
xread(fd, magic.b32, sizeof(magic.b32[0]));
if (magic.b32[0] == XZ_MAGIC2) {
uint32_t v32;
xstate->signature_skipped = 6;
xread(fd, &xstate->magic.b16[1], 4);
move_from_unaligned32(v32, &xstate->magic.b16[1]);
if (v32 == XZ_MAGIC2) {
xstate->xformer = unpack_xz_stream;
USE_FOR_NOMMU(xstate->xformer_prog = "unxz";)
goto found_magic;
}
}
if (ENABLE_FEATURE_SEAMLESS_ZSTD
&& xstate->magic.b16[0] == ZSTD_MAGIC1
) {
uint16_t v16;
xstate->signature_skipped = 4;
xread(fd, &xstate->magic.b16[1], 2);
move_from_unaligned16(v16, &xstate->magic.b16[1]);
if (v16 == ZSTD_MAGIC2) {
xstate->xformer = unpack_zstd_stream;
USE_FOR_NOMMU(xstate->xformer_prog = "unzstd";)
goto found_magic;
}
}
/* No known magic seen */
if (fail_if_not_compressed)
bb_error_msg_and_die("no gzip"
IF_FEATURE_SEAMLESS_BZ2("/bzip2")
IF_FEATURE_SEAMLESS_XZ("/xz")
IF_FEATURE_SEAMLESS_ZSTD("/zstd")
" magic");
/* Some callers expect this function to "consume" fd
@ -220,19 +226,25 @@ static transformer_state_t *setup_transformer_on_fd(int fd, int fail_if_not_comp
*/
// USE_FOR_MMU(xstate->xformer = copy_stream;)
// USE_FOR_NOMMU(xstate->xformer_prog = "cat";)
/* fall through to seeking bck over bytes we read earlier */
USE_FOR_NOMMU(found_magic:)
found_magic:
return xstate;
}
static void fork_transformer_and_free(transformer_state_t *xstate)
{
# if BB_MMU
fork_transformer_with_no_sig(xstate->src_fd, xstate->xformer);
# else
/* NOMMU version of fork_transformer execs
* an external unzipper that wants
* file position at the start of the file.
*/
xlseek(fd, offset, SEEK_CUR);
USE_FOR_MMU(found_magic:)
/* In MMU case, if magic was found, seeking back is not necessary */
return xstate;
xlseek(xstate->src_fd, - xstate->signature_skipped, SEEK_CUR);
xstate->signature_skipped = 0;
fork_transformer_with_sig(xstate->src_fd, xstate->xformer, xstate->xformer_prog);
# endif
free(xstate);
}
/* Used by e.g. rpm which gives us a fd without filename,
@ -247,21 +259,27 @@ int FAST_FUNC setup_unzip_on_fd(int fd, int fail_if_not_compressed)
return 1;
}
# if BB_MMU
fork_transformer_with_no_sig(xstate->src_fd, xstate->xformer);
# else
fork_transformer_with_sig(xstate->src_fd, xstate->xformer, xstate->xformer_prog);
# endif
free(xstate);
fork_transformer_and_free(xstate);
return 0;
}
#if ENABLE_FEATURE_SEAMLESS_LZMA
/* ...and custom version for LZMA */
void FAST_FUNC setup_lzma_on_fd(int fd)
{
transformer_state_t *xstate = xzalloc(sizeof(*xstate));
xstate->src_fd = fd;
xstate->xformer = unpack_lzma_stream;
USE_FOR_NOMMU(xstate->xformer_prog = "unlzma";)
fork_transformer_and_free(xstate);
}
#endif
static transformer_state_t *open_transformer(const char *fname, int fail_if_not_compressed)
{
transformer_state_t *xstate;
int fd;
fd = open(fname, O_RDONLY);
fd = _open(fname, O_RDONLY);
if (fd < 0)
return NULL;
@ -292,14 +310,22 @@ int FAST_FUNC open_zipped(const char *fname, int fail_if_not_compressed)
return -1;
fd = xstate->src_fd;
if (xstate->xformer) {
# if BB_MMU
fork_transformer_with_no_sig(xstate->src_fd, xstate->xformer);
# else
fork_transformer_with_sig(xstate->src_fd, xstate->xformer, xstate->xformer_prog);
# endif
if (xstate->xformer) {
fork_transformer_with_no_sig(fd, xstate->xformer);
} else {
/* the file is not compressed */
xlseek(fd, - xstate->signature_skipped, SEEK_CUR);
xstate->signature_skipped = 0;
}
/* else: the file is not compressed */
# else
/* NOMMU can't avoid the seek :( */
xlseek(fd, - xstate->signature_skipped, SEEK_CUR);
xstate->signature_skipped = 0;
if (xstate->xformer) {
fork_transformer_with_sig(fd, xstate->xformer, xstate->xformer_prog);
} /* else: the file is not compressed */
# endif
free(xstate);
return fd;
@ -326,13 +352,29 @@ void* FAST_FUNC xmalloc_open_zipped_read_close(const char *fname, size_t *maxsz_
*maxsz_p = xstate->mem_output_size;
}
} else {
/* File is not compressed */
image = xmalloc_read(xstate->src_fd, maxsz_p);
/* File is not compressed.
* We already read first few bytes, account for that.
* Example where it happens:
* "modinfo MODULE.ko" (not compressed)
* open("MODULE.ko", O_RDONLY|O_LARGEFILE) = 4
* read(4, "\177E", 2) = 2
* fstat64(4, ...)
* mmap(...)
* read(4, "LF\2\1\1\0\0\0\0"...
* ...and we avoided seeking on the fd! :)
*/
image = xmalloc_read_with_initial_buf(
xstate->src_fd,
maxsz_p,
xmemdup(&xstate->magic, xstate->signature_skipped),
xstate->signature_skipped
);
xstate->signature_skipped = 0;
}
if (!image)
bb_perror_msg("read error from '%s'", fname);
close(xstate->src_fd);
_close(xstate->src_fd);
free(xstate);
return image;
# else

View File

@ -261,7 +261,7 @@ typedef uint64_t bb__aliased_uint64_t FIX_ALIASING;
/* NB: unaligned parameter should be a pointer, aligned one -
* a lvalue. This makes it more likely to not swap them by mistake
*/
#if defined(i386) || defined(__x86_64__) || defined(__powerpc__)
#if defined(i386) || defined(__x86_64__) || defined(_M_IX86) || defined(_M_X64) || defined(__powerpc__)
# define BB_UNALIGNED_MEMACCESS_OK 1
# define move_from_unaligned_int(v, intp) ((v) = *(bb__aliased_int*)(intp))
# define move_from_unaligned_long(v, longp) ((v) = *(bb__aliased_long*)(longp))

View File

@ -2,7 +2,6 @@
/*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include "libbb.h"
#include "bb_archive.h"

View File

@ -2,7 +2,6 @@
/*
* Licensed under GPLv2 or later, see file LICENSE in this source tree.
*/
#include "libbb.h"
#include "bb_archive.h"

18
src/bled/xxhash.c Normal file
View File

@ -0,0 +1,18 @@
/*
* xxHash - Extremely Fast Hash algorithm
* Copyright (c) Yann Collet - Meta Platforms, Inc
*
* This source code is licensed under both the BSD-style license (found in the
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
* in the COPYING file in the root directory of this source tree).
* You may select, at your option, one of the above-listed licenses.
*/
/*
* xxhash.c instantiates functions defined in xxhash.h
*/
#define XXH_STATIC_LINKING_ONLY /* access advanced declarations */
#define XXH_IMPLEMENTATION /* access definitions */
#include "xxhash.h"

7021
src/bled/xxhash.h Normal file

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More