mirror of https://github.com/pbatard/rufus.git
Compare commits
72 Commits
Author | SHA1 | Date |
---|---|---|
Костянтин Сергійович | 1d4eea4926 | |
Pete Batard | e596e1a550 | |
Riku Brander | 49be8c34b5 | |
Aldis Tutins | 3fdf6e121f | |
a1346054 | 97d69d84c6 | |
Pete Batard | 45423becd5 | |
Martin Kubánik | fb43dc8957 | |
Roberto Boriotti | d12e845b9a | |
Miloš Ljubičić | 236b4e60eb | |
Jakub Zieciak | b2f06d746b | |
Ben Gamer | 8727d3b3f6 | |
Marco A. Ramirez Madrid | ef2cac008d | |
Csizmadia Gábor | 9476bb41ad | |
五月雨 | 412f1c63da | |
Christos Alvanos | 0c38268665 | |
Pete Batard | 03d46b3d87 | |
Pete Batard | d0bc05077a | |
Pete Batard | 180a61736c | |
Pete Batard | 2106be0c3b | |
Marcos Mello | ddc7f1b89d | |
Pete Batard | 39a5ae6d36 | |
Pete Batard | cba95f7710 | |
Erfan Al | 4df3fd8d16 | |
VenusGirl | d38664dde8 | |
Mehmetali Kuran | 7d63b78571 | |
Wang JiaWei | 2767fdbfd3 | |
Ahmed Rasnaama | 569b1e2971 | |
Pete Batard | 2a6df95cad | |
Pete Batard | 83e0bdad7a | |
Pete Batard | df9e333f3a | |
Pete Batard | 4ec57dc5d7 | |
Pete Batard | 6ac2dfb0df | |
Suttirak Mattayawerakiat | 00dc0473b5 | |
Pete Batard | 4286871f50 | |
Thilo Langbein | 2c3e560ba3 | |
Thomas De Rocker | 2ecb8b54b2 | |
Sopor | 4019bc135f | |
Дмитрий Ерохин | 0a956f38b0 | |
Itiel | 37ccc8d1e1 | |
Mike Handberg Hovedskov | 13ae9b3339 | |
Richard Kahl | 11f74cde01 | |
Fedorovici Constantin-Robert | b28eb88e3b | |
Minh Nguyễn Quang | 8b0531e4dc | |
Pete Batard | 855a06d3a0 | |
Pete Batard | eb45c97667 | |
Pete Batard | 513c5f44a5 | |
Pete Batard | 92ac1c770c | |
Pete Batard | f813eb05d8 | |
Pete Batard | 34e6e43a97 | |
Pete Batard | 8a8e418751 | |
Pete Batard | 4eda8d9d5c | |
Pete Batard | 5061af2b7c | |
Pete Batard | dd8314b2f0 | |
Pete Batard | 6dac531552 | |
Pete Batard | 8a5a5a318a | |
Pete Batard | 52ca79816f | |
Pete Batard | b7568ab30a | |
Pete Batard | a59389e1e1 | |
Pete Batard | d3f78c4e01 | |
Pete Batard | 5eae8a6441 | |
Pete Batard | abc33122a0 | |
Pete Batard | 8738e7a7de | |
Bella Zhang | 026afa7e3d | |
Pete Batard | 172888ac32 | |
Pete Batard | 15e3886499 | |
Pete Batard | 0f23c47184 | |
Pete Batard | 164d4b0ab0 | |
Pete Batard | 1be7eaf306 | |
Pete Batard | ac9a3f42d8 | |
Pete Batard | c2b2624b62 | |
Pete Batard | 018ed3414b | |
Pete Batard | f6fd520d2a |
|
@ -48,7 +48,7 @@ jobs:
|
|||
languages: cpp
|
||||
|
||||
- name: Add MSBuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1.1
|
||||
uses: microsoft/setup-msbuild@v2
|
||||
with:
|
||||
msbuild-architecture: x64
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ jobs:
|
|||
run: echo "${{github.workspace}}/cov-analysis-win64/bin" >> $GITHUB_PATH
|
||||
|
||||
- name: Add MSBuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1.1
|
||||
uses: microsoft/setup-msbuild@v2
|
||||
|
||||
- name: Build with Coverity
|
||||
run: |
|
||||
|
@ -52,7 +52,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@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: cov-int
|
||||
path: cov-int/
|
||||
|
|
|
@ -3,7 +3,7 @@ name: '[cron] Lock stale issues'
|
|||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
- cron: '33 22 * * *'
|
||||
|
||||
jobs:
|
||||
lock:
|
||||
|
@ -11,7 +11,7 @@ jobs:
|
|||
steps:
|
||||
- uses: dessant/lock-threads@v5
|
||||
with:
|
||||
github-token: ${{ github.token }}
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
issue-inactive-days: '90'
|
||||
issue-comment: >
|
||||
This thread has been automatically locked since there has not been
|
||||
|
|
|
@ -63,14 +63,18 @@ jobs:
|
|||
shell: bash
|
||||
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
|
||||
# This ONLY works if the shell is bash or if using $env:GITHUB_OUTPUT
|
||||
run: echo "option=--enable-alpha" >> $GITHUB_OUTPUT
|
||||
run: |
|
||||
echo "option=--enable-alpha" >> $GITHUB_OUTPUT
|
||||
sed -b -i 's/VALUE "InternalName", "Rufus"/VALUE "InternalName", "Rufus (ALPHA)"/' ./src/rufus.rc
|
||||
|
||||
- name: Set BETA
|
||||
id: set_beta
|
||||
shell: bash
|
||||
if: ${{ startsWith(github.ref, 'refs/tags/') && contains(github.ref, 'BETA') }}
|
||||
# This ONLY works if the shell is bash or if using $env:GITHUB_OUTPUT
|
||||
run: echo "option=--enable-beta" >> $GITHUB_OUTPUT
|
||||
run: |
|
||||
echo "option=--enable-beta" >> $GITHUB_OUTPUT
|
||||
sed -b -i 's/VALUE "InternalName", "Rufus"/VALUE "InternalName", "Rufus (BETA)"/' ./src/rufus.rc
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
|
@ -92,7 +96,18 @@ jobs:
|
|||
|
||||
- name: Upload artifacts
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: MinGW
|
||||
name: ${{ matrix.sys }}
|
||||
path: ./*.exe
|
||||
|
||||
Extra-Step-To-Merge-Artifacts-Thanks-To-Upload-Artifact-v4-Breaking-Backwards-Compatibility:
|
||||
runs-on: windows-latest
|
||||
needs: MinGW-Build
|
||||
steps:
|
||||
- name: Merge Artifacts
|
||||
uses: actions/upload-artifact/merge@v4
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
with:
|
||||
name: MinGW
|
||||
delete-merged: true
|
|
@ -45,7 +45,7 @@ jobs:
|
|||
submodules: recursive
|
||||
|
||||
- name: Add MSBuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1
|
||||
uses: microsoft/setup-msbuild@v2
|
||||
with:
|
||||
msbuild-architecture: x64
|
||||
|
||||
|
@ -54,14 +54,18 @@ jobs:
|
|||
shell: bash
|
||||
if: ${{ !startsWith(github.ref, 'refs/tags/') }}
|
||||
# This ONLY works if the shell is bash or if using $env:GITHUB_OUTPUT
|
||||
run: echo "option=/DALPHA" >> $GITHUB_OUTPUT
|
||||
run: |
|
||||
echo "option=/DALPHA" >> $GITHUB_OUTPUT
|
||||
sed -b -i 's/VALUE "InternalName", "Rufus"/VALUE "InternalName", "Rufus (ALPHA)"/' ./src/rufus.rc
|
||||
|
||||
- name: Set BETA
|
||||
id: set_beta
|
||||
shell: bash
|
||||
if: ${{ startsWith(github.ref, 'refs/tags/') && contains(github.ref, 'BETA') }}
|
||||
# This ONLY works if the shell is bash or if using $env:GITHUB_OUTPUT
|
||||
run: echo "option=/DBETA" >> $GITHUB_OUTPUT
|
||||
run: |
|
||||
echo "option=/DBETA" >> $GITHUB_OUTPUT
|
||||
sed -b -i 's/VALUE "InternalName", "Rufus"/VALUE "InternalName", "Rufus (BETA)"/' ./src/rufus.rc
|
||||
|
||||
- name: Build
|
||||
shell: cmd
|
||||
|
@ -82,10 +86,21 @@ 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@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
with:
|
||||
name: VS2022
|
||||
name: ${{ matrix.TARGET_PLATFORM }}
|
||||
path: |
|
||||
./*.exe
|
||||
./*.pdb
|
||||
|
||||
Extra-Step-To-Merge-Artifacts-Thanks-To-Upload-Artifact-v4-Breaking-Backwards-Compatibility:
|
||||
runs-on: windows-latest
|
||||
needs: VS2022-Build
|
||||
steps:
|
||||
- name: Merge Artifacts
|
||||
uses: actions/upload-artifact/merge@v4
|
||||
if: ${{ github.event_name == 'push' }}
|
||||
with:
|
||||
name: VS2022
|
||||
delete-merged: true
|
||||
|
|
|
@ -1,27 +1,40 @@
|
|||
*.a
|
||||
*.aps
|
||||
*.appx
|
||||
*.appxupload
|
||||
*.bak
|
||||
*.db
|
||||
*.db-shm
|
||||
*.db-wal
|
||||
*.dep
|
||||
*.diff
|
||||
*.dll
|
||||
*.efi
|
||||
*.exe
|
||||
*.htm
|
||||
*.idb
|
||||
*.ipch
|
||||
*.la
|
||||
*.lib
|
||||
*.lo
|
||||
*.lock
|
||||
*.log
|
||||
*.mac
|
||||
*.mo
|
||||
*.mp4
|
||||
*.ncb
|
||||
*.nope
|
||||
*.o
|
||||
*.obj
|
||||
*.old
|
||||
*.opendb
|
||||
*.opt
|
||||
*.org
|
||||
*.p7x
|
||||
*.patch
|
||||
*.pc
|
||||
*.pdb
|
||||
*.pdf
|
||||
*.plg
|
||||
*.res
|
||||
*.sig
|
||||
|
|
|
@ -1,3 +1,15 @@
|
|||
o Version 4.5 (2024.05.??)
|
||||
Add a new advanced option, that adds runtime UEFI media validation to suitable images (Windows, most Linux)
|
||||
Move the 'Use Rufus MBR' advanced option to a cheat mode (Alt-A)
|
||||
Fix truncation of VHDX images, as well as a benign error message when writing VHD/VHDX
|
||||
Fix support for Linux persistence in some configurations (Mint, Ubuntu 24.04)
|
||||
Fix multiple potential vulnerabilities (with thanks to Mansour Gashasbi)
|
||||
Update internal GRUB to version 2.12
|
||||
Update UEFI:NTFS to latest (now always uses the ntfs-3g driver, rather than the buggy AMI NTFS one)
|
||||
Increase buffer size when copying ISO files, in an attempt to minimize the AMI NTFS UEFI driver bug
|
||||
Improve partition creation handling
|
||||
Don't display the WUE dialog when a conflicting 'unattend.xml' already exists
|
||||
|
||||
o Version 4.4 (2024.01.17)
|
||||
Add workaround for distros that use broken symbolic links as their UEFI bootloaders (such as Mint 21.3)
|
||||
Add support for GRUB 2.12
|
||||
|
|
|
@ -26,6 +26,7 @@ Features
|
|||
* Create VHD/DD, VHDX and FFU images of an existing drive
|
||||
* Create persistent Linux partitions
|
||||
* Compute MD5, SHA-1, SHA-256 and SHA-512 checksums of the selected image
|
||||
* Perform runtime validation of UEFI bootable media
|
||||
* Improve Windows installation experience by automatically setting up OOBE parameters (local account, privacy options, etc.)
|
||||
* Perform bad blocks checks, including detection of "fake" flash drives
|
||||
* Download official Microsoft Windows 8, Windows 10 or Windows 11 retail ISOs
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.71 for rufus 4.4.
|
||||
# Generated by GNU Autoconf 2.71 for rufus 4.5.
|
||||
#
|
||||
# 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.4'
|
||||
PACKAGE_STRING='rufus 4.4'
|
||||
PACKAGE_VERSION='4.5'
|
||||
PACKAGE_STRING='rufus 4.5'
|
||||
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.4 to adapt to many kinds of systems.
|
||||
\`configure' configures rufus 4.5 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.4:";;
|
||||
short | recursive ) echo "Configuration of rufus 4.5:";;
|
||||
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.4
|
||||
rufus configure 4.5
|
||||
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.4, which was
|
||||
It was created by rufus $as_me 4.5, 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.4'
|
||||
VERSION='4.5'
|
||||
|
||||
|
||||
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
|
||||
|
@ -5309,7 +5309,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.4, which was
|
||||
This file was extended by rufus $as_me 4.5, which was
|
||||
generated by GNU Autoconf 2.71. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -5365,7 +5365,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.4
|
||||
rufus config.status 4.5
|
||||
configured by $0, generated by GNU Autoconf 2.71,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
AC_INIT([rufus], [4.4], [https://github.com/pbatard/rufus/issues], [rufus], [https://rufus.ie])
|
||||
AC_INIT([rufus], [4.5], [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])
|
||||
|
|
|
@ -3,6 +3,9 @@
|
|||
@echo off
|
||||
setlocal EnableExtensions DisableDelayedExpansion
|
||||
|
||||
rem if set, this will override the version for the package
|
||||
rem set VERSION_OVERRIDE=4.4.2104.0
|
||||
|
||||
goto main
|
||||
|
||||
:ReplaceTokenInFile
|
||||
|
@ -66,13 +69,31 @@ 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
|
||||
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 && (
|
||||
echo Alpha version detected - ABORTED
|
||||
goto out
|
||||
)
|
||||
exiftool -s3 -*InternalName* rufus_x64.exe | findstr /C:"BETA" 1>nul && (
|
||||
echo Beta version detected - ABORTED
|
||||
goto out
|
||||
)
|
||||
|
||||
rem Populate the version from the executable
|
||||
set target=%~dp0rufus_x64.exe
|
||||
set target=%target:\=\\%
|
||||
wmic datafile where "name='%target%'" get version | find /v "Version" > version.txt
|
||||
set /p VERSION=<version.txt
|
||||
set VERSION=%VERSION: =%
|
||||
del version.txt
|
||||
if "%VERSION_OVERRIDE%"=="" (
|
||||
exiftool -s3 -*FileVersionNumber* rufus_x64.exe > version.txt
|
||||
set /p VERSION=<version.txt
|
||||
del version.txt
|
||||
) else (
|
||||
echo WARNING: Forcing version to %VERSION_OVERRIDE%
|
||||
set VERSION=%VERSION_OVERRIDE%
|
||||
)
|
||||
|
||||
echo Will create %VERSION% AppStore Bundle
|
||||
pause
|
||||
|
|
Binary file not shown.
|
@ -4,4 +4,4 @@
|
|||
*/
|
||||
#pragma once
|
||||
|
||||
#define GRUB2_PACKAGE_VERSION "2.06"
|
||||
#define GRUB2_PACKAGE_VERSION "2.12"
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
This directory contains the Grub 2.0 boot records that are used by Rufus
|
||||
|
||||
* boot.img and core.img were created from:
|
||||
https://ftp.gnu.org/gnu/grub/grub-2.06.tar.xz
|
||||
on a Debian 10.9 x64 system using the commands:
|
||||
* boot.img and core.img were created from a patched (since the offcial GRUB 2.12 release is *BROKEN*):
|
||||
https://ftp.gnu.org/gnu/grub/grub-2.12.tar.xz
|
||||
on a Debian 12.5 x64 system using the commands:
|
||||
./autogen.sh
|
||||
# --enable-boot-time for Manjaro Linux
|
||||
./configure --disable-nls --enable-boot-time
|
||||
|
|
|
@ -5,7 +5,9 @@ To edit a translation, please make sure to follow:
|
|||
https://github.com/pbatard/rufus/wiki/Localization#Editing_an_existing_translation
|
||||
Or simply download https://files.akeo.ie/pollock/pollock-1.5.exe and follow its directions.
|
||||
|
||||
o v4.?? (202?.??.??)
|
||||
o v4.5 (2024.05.??)
|
||||
- *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 (...)"
|
||||
- *NEW* MSG_338 "Revoked UEFI bootloader detected"
|
||||
- *NEW* MSG_339 "Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked (...)"
|
||||
|
@ -15,8 +17,12 @@ o v4.?? (202?.??.??)
|
|||
- *NEW* MSG_343 "Uncompressed VHD Image"
|
||||
- *NEW* MSG_344 "Full Flash Update Image"
|
||||
- *NEW* MSG_345 "Some additional data must be downloaded from Microsoft to use this functionality (...)"
|
||||
- *NEW* MSG_346 "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
- *NEW* MSG_347 "Expert Mode"
|
||||
- *NEW* MSG_348 "Extracting archive files: %s"
|
||||
- *NEW* MSG_349 "Use Rufus MBR"
|
||||
|
||||
o v3.22 (2023.??.??)
|
||||
o v3.22 (2023.03.25)
|
||||
// MSG_144 is aimed the the ISO download feature
|
||||
- *UPDATED* MSG_144 "Temporarily banned by Microsoft for requesting too many downloads (...)" -> "Download of Windows ISOs is unavailable due to Microsoft having altered their website to prevent it."
|
||||
// MSG_199 will appear for the ISO download feature if running on Windows 7
|
||||
|
|
|
@ -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: 2023-04-24 12:17+0300\n"
|
||||
"PO-Revision-Date: 2023-04-25 13:09+0100\n"
|
||||
"POT-Creation-Date: 2024-04-26 10:29+0100\n"
|
||||
"PO-Revision-Date: 2024-04-29 10:22+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ar_SA\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Arabic (العربية)\n"
|
||||
"X-Rufus-LCID: 0x0401, 0x0801, 0x0c01, 0x1001, 0x1401, 0x1801, 0x1c01, 0x2001, 0x2401, 0x2801, 0x2c01, 0x3001, 0x3401, 0x3801, 0x3c01, 0x4001\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "قائمة محركات الأقراص الثابتة USB"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "إضافة إصلاحات لنظام الإدخال والإخراج الأساسي (BIOS) القديم"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "استخدام Rufus MBR مع معرف BIOS"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "تمكين التحقق من صحة وسائط UEFI في وقت التشغيل"
|
||||
|
||||
# fixed translation since فورمات is the pronounce of format in arabic, correct translation is تهّيئة
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
|
@ -73,7 +71,7 @@ msgstr "نظام الملفات"
|
|||
|
||||
#. • IDD_DIALOG → IDS_CLUSTER_SIZE_TXT
|
||||
msgid "Cluster size"
|
||||
msgstr "حجم الكتلة"
|
||||
msgstr "حجم المجموعة"
|
||||
|
||||
#. • IDD_DIALOG → IDS_LABEL_TXT
|
||||
msgid "Volume label"
|
||||
|
@ -145,7 +143,7 @@ msgstr "السجل"
|
|||
|
||||
#. • IDD_LOG → IDC_LOG_CLEAR
|
||||
msgid "Clear"
|
||||
msgstr "مسح"
|
||||
msgstr "مسح الكل"
|
||||
|
||||
#. • IDD_LOG → IDC_LOG_SAVE
|
||||
msgid "Save"
|
||||
|
@ -215,11 +213,11 @@ msgstr ""
|
|||
|
||||
#. • MSG_004
|
||||
msgid "Rufus update policy"
|
||||
msgstr "سياسة تحديث Rufus"
|
||||
msgstr "تحديث سياسة Rufus"
|
||||
|
||||
#. • MSG_005
|
||||
msgid "Do you want to allow Rufus to check for application updates online?"
|
||||
msgstr "هل تريد السماح لـ Rufus بالتحقق من تحديثات التطبيق عبر الإنترنت؟"
|
||||
msgstr "هل تريد السماح لـ Rufus بالتحقق من وجود تحديثات التطبيق عبر الإنترنت؟"
|
||||
|
||||
#. • MSG_007
|
||||
msgid "Cancel"
|
||||
|
@ -250,7 +248,7 @@ msgid ""
|
|||
"%s"
|
||||
msgstr ""
|
||||
"%s\n"
|
||||
"يمكن الإطلاع على تقرير مفصّل خلال:\n"
|
||||
"يمكن الإطلاع على تقرير مفصّل من خلال:\n"
|
||||
"%s"
|
||||
|
||||
#. • MSG_013
|
||||
|
@ -373,7 +371,7 @@ msgstr "إيقاف"
|
|||
|
||||
#. • MSG_039
|
||||
msgid "Launch"
|
||||
msgstr "إطلاق"
|
||||
msgstr "بدأ"
|
||||
|
||||
#. • MSG_041
|
||||
msgid "Operation cancelled by the user"
|
||||
|
@ -407,11 +405,11 @@ msgstr "أقسام متعددة"
|
|||
|
||||
#. • MSG_048
|
||||
msgid "Rufus - Flushing buffers"
|
||||
msgstr "روفوس - تفريغ الذاكرة"
|
||||
msgstr "Rufus - تفريغ الذاكرة"
|
||||
|
||||
#. • MSG_049
|
||||
msgid "Rufus - Cancellation"
|
||||
msgstr "روفوس - إلغاء"
|
||||
msgstr "Rufus - إلغاء"
|
||||
|
||||
#. • MSG_050
|
||||
msgid "Success."
|
||||
|
@ -451,7 +449,7 @@ msgstr "معالج الجهاز غير صالح."
|
|||
|
||||
#. • MSG_059
|
||||
msgid "The selected cluster size is not valid for this device."
|
||||
msgstr "حجم الكتلة المحدد غير صالح لهذا الجهاز."
|
||||
msgstr "حجم المجموعة المحدد غير صالح لهذا الجهاز."
|
||||
|
||||
#. • MSG_060
|
||||
msgid "The volume size is invalid."
|
||||
|
@ -509,7 +507,7 @@ msgstr "لم يكتمل فحص الأجزاء السيئة."
|
|||
|
||||
#. • MSG_073
|
||||
msgid "ISO image scan failure."
|
||||
msgstr "فشل مسح صورة قرص ISO."
|
||||
msgstr "فشل فحص صورة قرص ISO."
|
||||
|
||||
#. • MSG_074
|
||||
msgid "ISO image extraction failure."
|
||||
|
@ -525,7 +523,7 @@ msgstr "تعذر تصحيح/إعداد ملفات الاقلاع."
|
|||
|
||||
#. • MSG_077
|
||||
msgid "Unable to assign a drive letter."
|
||||
msgstr "تعذر تعيين حرف محرك أقراص."
|
||||
msgstr "تعذر تعيين حرف لمحرك أقراص."
|
||||
|
||||
#. • MSG_078
|
||||
msgid "Can't mount GUID volume."
|
||||
|
@ -574,14 +572,14 @@ msgid ""
|
|||
"Note: The new file will be downloaded in the current directory and once a '%s' exists there, it will be reused automatically."
|
||||
msgstr ""
|
||||
"صورة الـISO يبدو استخدامها لإصدار قديم من '%s'. \n"
|
||||
"قوائم التمهيد قد لا يتم عرضها بشكل صحيح بهذا السبب.\n"
|
||||
"قوائم الإقلاع قد لا يتم عرضها بشكل صحيح بهذا السبب.\n"
|
||||
"\n"
|
||||
"لإصلاح الخلل يمكنك تحميل إصدار جديد من قبل روفوس:\n"
|
||||
"لإصلاح الخلل يمكنك تحميل إصدار جديد من قبل Rufus:\n"
|
||||
"- إختر ‘نعم’ للإتصال بالإنترنت وتحميل الملف\n"
|
||||
"- إختر ‘لا’ لترك ملف الISO دون تعديل\n"
|
||||
"إذا كنت لا تعرف ما عليك فعله, عليك اختيار ‘نعم’.\n"
|
||||
"\n"
|
||||
"ملاحظة: سيتم تحميل ملف جديد في الدليل الحالي وبعد العثور على ‘%s’ هناك, سوف يتم إعادة إستخدامه تلقائياً."
|
||||
"ملاحظة: سيتم تحميل ملف جديد في المجلد الحالي للتطبيق وبعد العثور على ‘%s’ هناك, سوف يتم إعادة إستخدامه تلقائياً."
|
||||
|
||||
#. • MSG_085
|
||||
msgid "Downloading %s"
|
||||
|
@ -630,7 +628,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"هام: هذا المحرك يحتوي على أجزاء متعددة !!\n"
|
||||
"\n"
|
||||
"قد يشمل ذلك أقسامًا / وحدات تخزين غير مدرجة أو حتى مرئية من Windows. إذا كنت ترغب في المتابعة، فأنت مسؤول عن أي فقد للبيانات في هذه الأقسام."
|
||||
"قد يشمل ذلك أقسامًا أو وحدات تخزين غير مدرجة أو حتى مرئية من Windows. إذا كنت ترغب في المتابعة، فأنت مسؤول عن أي فقدان للبيانات في هذه الأقسام."
|
||||
|
||||
#. • MSG_094
|
||||
msgid "Multiple partitions detected"
|
||||
|
@ -656,11 +654,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 ""
|
||||
"هام: أنت تحاول تثبيت 'Windows To Go'، لكن القرص المستهدف ليس لديه السمة 'FIXED'. على الأرجح سيتسبب هذا في تجمد ويندوز أثناء الإقلاع، لأن ميكروسوفت لم تصممه ليعمل مع الأقراص ذات السمة البديلة 'REMOVABLE'.\n"
|
||||
"هام: أنت تحاول تثبيت 'Windows To Go'، لكن القرص المستهدف ليس لديه السمة 'FIXED'. على الأرجح سيتسبب هذا في تجمد ويندوز أثناء الإقلاع، لأن ميكروسوفت لم تصممه ليعمل مع الأقراص ذات السمة 'REMOVABLE'.\n"
|
||||
"\n"
|
||||
"هل لا زلت تريد الإستمرار؟\n"
|
||||
"\n"
|
||||
"ملاحظة: السمات 'FIXED/REMOVABLE' هي خصائص للعتاد ينكم تغييرها فقط باستعمال أدوات خاصة من مُصنع الأقراص. لكن هذه الأدوات لا تُّوفر للعامة غالبا..."
|
||||
"ملاحظة: السمات 'FIXED/REMOVABLE' هي خصائص للعتاد يمكن تغييرها فقط باستعمال أدوات خاصة من مُصنع الأقراص. لكن هذه الأدوات لا تُّوفر للعامة غالبا..."
|
||||
|
||||
#. • MSG_099
|
||||
msgid "Filesystem limitation"
|
||||
|
@ -679,7 +677,7 @@ msgid ""
|
|||
"Your platform cannot extract files from WIM archives. WIM extraction is required to create EFI bootable Windows 7 and Windows Vista USB drives. You can fix that by installing a recent version of 7-Zip.\n"
|
||||
"Do you want to visit the 7-zip download page?"
|
||||
msgstr ""
|
||||
"لا يمكن للنظام الأساسي الخاص بك استخراج الملفات من أرشيفات WIM. يلزم استخراج WIM لإنشاء محركات أقراص USB قابلة للتمهيد من EFI لنظامي التشغيل Windows 7 و Windows Vista. يمكنك إصلاح ذلك عن طريق تثبيت إصدار حديث من 7-Zip.\n"
|
||||
"لا يمكن لنظامك الأساسي استخراج الملفات من أرشيفات WIM. يلزم استخراج WIM لإنشاء محركات أقراص USB قابلة للإقلاع من EFI لنظامي التشغيل Windows 7 و Windows Vista. يمكنك إصلاح ذلك عن طريق تثبيت إصدار حديث من 7-Zip.\n"
|
||||
"هل تريد زيارة صفحة التنزيل 7-zip؟"
|
||||
|
||||
#. • MSG_103
|
||||
|
@ -701,13 +699,13 @@ msgid ""
|
|||
"Note: The file will be downloaded in the current directory and once a '%s' exists there, it will be reused automatically."
|
||||
msgstr ""
|
||||
"%s أو أحدث تتطلّب ملف '%s' ليتم التثبيت.\n"
|
||||
"لأن هذا الملف هو أكثر من 100KB في الحجم، ومتوفّر دائماً في ملفات ISO %s, ليس متوفّر في روفوس. \n"
|
||||
"لأن هذا الملف هو أكثر من 100KB في الحجم، ومتوفّر دائماً في ملفات ISO %s, ليس متوفّرا في Rufus. \n"
|
||||
"\n"
|
||||
"روفوس يمكنه تحميل الملف المفقود لك: \n"
|
||||
"Rufus يمكنه تحميل الملف المفقود لك: \n"
|
||||
"- إختر ‘نعم’ للإتصال بالإنترنت وتحميل الملف\n"
|
||||
"- إختر ‘لا’ إذا كنت تريد نسخ هذا الملف على محرك الأقراص يدوياً في وقت لاحق\n"
|
||||
"\n"
|
||||
"ملاحظة: سيتم تحميل ملف جديد في الدليل الحالي وبعد العثور على ‘%s’ هناك, سوف يتم إعادة إستخدامه تلقائياً."
|
||||
"ملاحظة: سيتم تحميل ملف جديد في المجلد الحالي للتطبيق وبعد العثور على ‘%s’ هناك, سوف يتم إعادة إستخدامه تلقائياً."
|
||||
|
||||
#. • MSG_105
|
||||
msgid ""
|
||||
|
@ -715,11 +713,11 @@ msgid ""
|
|||
"If you are sure you want to cancel, click YES. Otherwise, click NO."
|
||||
msgstr ""
|
||||
"الإلغاء قد يترك الجهاز في حالة غير صالحة للاستعمال.\n"
|
||||
"إذا كنت متأكداً من أنك تريد الإلغاء، إضغط نعم، وإلا، إضغط لا."
|
||||
"إذا كنت متأكداً من أنك تريد الإلغاء، إضغط \"نعم\"، وإلا، إضغط \"لا\"."
|
||||
|
||||
#. • MSG_106
|
||||
msgid "Please select folder"
|
||||
msgstr "الرجاء إختيار المجلد"
|
||||
msgstr "الرجاء إختيار مجلد"
|
||||
|
||||
#. • MSG_107
|
||||
msgid "All files"
|
||||
|
@ -727,7 +725,7 @@ msgstr "جميع الملفات"
|
|||
|
||||
#. • MSG_108
|
||||
msgid "Rufus log"
|
||||
msgstr "سجلّ روفوس"
|
||||
msgstr "سجلّ Rufus"
|
||||
|
||||
#. • MSG_109
|
||||
msgid "0x%02X (Disk %d)"
|
||||
|
@ -741,7 +739,7 @@ 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 التمهيد من محرك أقراص يستخدم حجم الكتلة 64 كيلو بايت.\n"
|
||||
"لا يمكن لـ MS-DOS الإقلاع من محرك أقراص يستخدم حجم الكتلة 64 كيلو بايت.\n"
|
||||
"الرجاء تغيير حجم الكتلة أو استخدام FreeDOS."
|
||||
|
||||
#. • MSG_111
|
||||
|
@ -752,7 +750,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"
|
||||
|
@ -774,11 +772,11 @@ msgstr ""
|
|||
"- قم بتحديد 'نعم' للاتصال بالإنترنت وتنزيل هذه الملفات\n"
|
||||
"- قم بتحديد 'لا' لإلغاء العملية\n"
|
||||
"\n"
|
||||
"ملاحظة: سيتم تنزيل الملفات في دليل التطبيق الحالي وستتم إعادة استخدامها تلقائيًا إذا كانت موجودة."
|
||||
"ملاحظة: سيتم تنزيل الملفات في مجلد التطبيق الحالي وستتم إعادة استخدامها تلقائيًا إذا كانت موجودة."
|
||||
|
||||
#. • MSG_115
|
||||
msgid "Download required"
|
||||
msgstr "التنزيل مطلوب"
|
||||
msgstr "التنزيل من الانترنت مطلوب"
|
||||
|
||||
#. • MSG_116
|
||||
#.
|
||||
|
@ -794,11 +792,11 @@ msgid ""
|
|||
"\n"
|
||||
"Note: The file will be downloaded in the current application directory and will be reused automatically if present. If no match can be found online, then the default version will be used."
|
||||
msgstr ""
|
||||
"هذه الصورة (الإيميج) تستعمل Grub %s لكن التطبيق يحتوي فقط على ملفات تثبيت Grub %s.\n"
|
||||
"هذه الصورة (image) تستعمل Grub %s لكن التطبيق يحتوي فقط على ملفات تثبيت Grub %s.\n"
|
||||
"\n"
|
||||
"بما أن إصدارات Grub المختلفة قد لا تتوافق مع بعضهاالبعض، وبما أنه لا يمكن ضمها كلها، فسيحاول روفوس تحديد مكان إصدار من ملف تثبيت Grub ('core.img') يتوافق مع الموجود في صورتك:\n"
|
||||
"بما أن إصدارات Grub المختلفة قد لا تتوافق مع بعضهاالبعض، وبما أنه لا يمكن ضمها كلها، فسيحاول Rufus تحديد مكان إصدار من ملف تثبيت Grub ('core.img') يتوافق مع الموجود في صورتك:\n"
|
||||
"- إختر 'نعم' للاتصال بلالأنترنت ومحاولة تنزيله\n"
|
||||
"- إختر 'لا' لاستعمال الإصدار الافتراضي من روفوس\n"
|
||||
"- إختر 'لا' لاستعمال الإصدار الافتراضي من Rufus\n"
|
||||
"- إختر 'إلغاء' لوقف العملية\n"
|
||||
"\n"
|
||||
"ملاحظة: سيتم تنزيل الملف في المجلد الحالي للتطبيق و سيستعمل تلقائيا إذا كان موجداً. إذا لم يتم العثور على إصدار موافق، فسيُستعمل الإصدار الافتراضي كبديل."
|
||||
|
@ -813,7 +811,7 @@ msgstr "التثبيت القياسي لنظام التشغيل Windows"
|
|||
#. 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 ""
|
||||
msgstr "Windows To Go"
|
||||
|
||||
#. • MSG_119
|
||||
msgid "advanced drive properties"
|
||||
|
@ -846,7 +844,7 @@ msgstr "حجم التقسيم المستمر"
|
|||
#. It is okay to use "No partition" or "None" or "Deactivated" to indicate that a persistent partition will not be
|
||||
#. created if the width of the control is too small (since the 'Size' edit control is *not* adjusted for width).
|
||||
msgid "No persistence"
|
||||
msgstr "لا استمرار"
|
||||
msgstr "لا استمرارية"
|
||||
|
||||
#. • MSG_125
|
||||
#.
|
||||
|
@ -856,7 +854,7 @@ msgstr "حدد حجم التقسيم المستمر لجهاز ال USB الحي
|
|||
|
||||
#. • MSG_126
|
||||
msgid "Set the partition size units."
|
||||
msgstr "حدد وحدات حجم التقسيم."
|
||||
msgstr "حدد حجم وحدات التقسيم."
|
||||
|
||||
#. • MSG_127
|
||||
msgid "Do not show this message again"
|
||||
|
@ -871,7 +869,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 ""
|
||||
"لقد قمت بإنشاء وسائط تستخدم محمل الإقلاع UEFI:NTFS. يرجى التذكر أنه يجب تعطيل Secure Boot للتمكن من إقلاع الوسائط.\n"
|
||||
"لقد قمت لتوك بإنشاء وسائط تستخدم محمل الإقلاع UEFI:NTFS. يرجى التذكر أنه يجب تعطيل Secure Boot للتمكن من إقلاع الوسائط.\n"
|
||||
"للمزيد من التفاصيل عن ضرورة الإجراء المذكور, إضغط على زر 'مزيد من المعلومات' أدناه."
|
||||
|
||||
#. • MSG_130
|
||||
|
@ -888,7 +886,7 @@ msgstr ""
|
|||
|
||||
#. • MSG_132
|
||||
msgid "Another program or process is accessing this drive. Do you want to format it anyway?"
|
||||
msgstr "هذا القرص يستخدم من قبل برنامج / إجراء آخر. هل تود التهيئة على أية حال ؟"
|
||||
msgstr "هذا القرص يستخدم من قبل برنامج آخر. هل تود التهيئة على أية حال ؟"
|
||||
|
||||
#. • MSG_133
|
||||
msgid ""
|
||||
|
@ -898,11 +896,11 @@ msgid ""
|
|||
"\n"
|
||||
"Also note that the reason Rufus cannot automatically fix this for you is that 'WppRecorder.sys' is a Microsoft copyrighted file, so we cannot legally embed a copy of the file in the application..."
|
||||
msgstr ""
|
||||
"لقد قام روفوس بإكتشاف أنك تحاول إنشاء وسائط Windows To Go بناءً على ISO 1809\n"
|
||||
"لقد قام Rufus بإكتشاف أنك تحاول إنشاء وسائط Windows To Go بناءً على ISO 1809\n"
|
||||
"\n"
|
||||
"بسبب عيب في Microsoft, سوف تتوقف الوسائط خلال إقلاع Windows (شاشة الموت الزرقاء) ما لم تقم يدوياً بإستبدال ملف 'WppRecorder.sys' بإصدار 1803.\n"
|
||||
"\n"
|
||||
"يرجى العلم أن سبب عدم إمكانية روفوس من إصلاح المشكلة تلقائيا هو أن ملف 'WppRecorder.sys' محفوظ الحقوق ل Microsoft, لذلك لا يمكننا تضمين نسخة من الملف في التطبيق..."
|
||||
"يرجى العلم أن سبب عدم إمكانية Rufus من إصلاح المشكلة تلقائيا هو أن ملف 'WppRecorder.sys' محفوظ الحقوق ل Microsoft, لذلك لا يمكننا تضمين نسخة من الملف في التطبيق..."
|
||||
|
||||
#. • MSG_134
|
||||
msgid ""
|
||||
|
@ -910,7 +908,7 @@ msgid ""
|
|||
"\n"
|
||||
"Are you sure you want to continue?"
|
||||
msgstr ""
|
||||
"بسبب إختيار نظام التجزئة MBR, روفوس قادر فقط على إنشاء تجزئة لغاية 2 TB على هذه الوسائط, الذي سوف يؤدي إلى عدم توفر %s من مساحة القرص.\n"
|
||||
"بسبب إختيار نظام التجزئة MBR, Rufus(Rufus) قادر فقط على إنشاء تجزئة لغاية 2 TB على هذه الوسائط, الذي سوف يؤدي إلى عدم توفر %s من مساحة القرص.\n"
|
||||
"\n"
|
||||
"هل تريد المتابعة ؟"
|
||||
|
||||
|
@ -1035,7 +1033,7 @@ msgstr "الطريقة اللتي سيتم إستخدامها لإنشاء ال
|
|||
|
||||
#. • MSG_164
|
||||
msgid "Method that will be used to make the drive bootable"
|
||||
msgstr "الطريقة التي سيتّم إستخدامها لخلق محرك أقراص تمهيدي"
|
||||
msgstr "الطريقة التي سيتّم إستخدامها لخلق محرك أقراص إقلاعي"
|
||||
|
||||
#. • MSG_165
|
||||
msgid "Click to select or download an image..."
|
||||
|
@ -1046,16 +1044,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "حدّد هذا المربّع للسماح بعرض التسميات الدولية وتعيين أيقونة الجهاز (إنشاء autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "تثبيت MBR للسماح باختيار التمهيد ويمكن تنكّر الـ BIOS ID لقرص USB"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"محاولة تنكّر محرّك قرص USB (عادة 0x80) كقرص مختلف.\n"
|
||||
"Tهذا ضروري فقط إذا أردت تثبيت ويندوز إكس بي ولديك أكثر من قرص واحد."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "قم بتثبيت أداة تحميل تشغيل UEFI، و التي ستقوم بالتحقق من صحة الملف بإستخدام MD5"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1063,7 +1053,7 @@ msgid ""
|
|||
"This can improve boot detection for older BIOSes."
|
||||
msgstr ""
|
||||
"إنشاء قسم إضافي خفي ومحاذاة حدود الأقسام.\n"
|
||||
"هذا يمكنه تحسين إكتشاف التمهيد لـ BIOSes قديمة."
|
||||
"هذا يمكنه تحسين إكتشاف الإقلاع لـ BIOSes قديمة."
|
||||
|
||||
#. • MSG_170
|
||||
msgid "Enable the listing of USB Hard Drive enclosures. USE AT YOUR OWN RISKS!!!"
|
||||
|
@ -1098,7 +1088,7 @@ msgstr "إصدار %d.%d (بناء %d)"
|
|||
|
||||
#. • MSG_176
|
||||
msgid "English translation: Pete Batard <mailto:pete@akeo.ie>"
|
||||
msgstr "الترجمة إلى العربية: أ. راس النعامة / عمر الصمد / فراس السيخ / عبدالمجيد"
|
||||
msgstr "الترجمة إلى العربية:\\line• أ. راس النعامة \\line• عمر الصمد \\line• فراس السيخ \\line• عبدالمجيد"
|
||||
|
||||
#. • MSG_177
|
||||
msgid "Report bugs or request enhancements at:"
|
||||
|
@ -1130,7 +1120,7 @@ msgstr "عنوان IP الخاص بك"
|
|||
|
||||
#. • MSG_184
|
||||
msgid "For the purpose of generating private usage statistics, we may keep the information collected, \\b for at most a year\\b0 . However, we will not willingly disclose any of this individual data to third parties."
|
||||
msgstr "لغرض إنشاء إحصاءات الاستخدام الخاصة، قد نحتفظ بالمعلومات التي تم جمعها, \\b لمدة عام على الأكثر\\b0 . ومع ذلك،، فإننا لن نكشف عن أي من هذه البيانات الفردية عن طيب خاطر لأطراف ثالثة."
|
||||
msgstr "لغرض إنشاء إحصاءات الاستخدام الخاصة، قد نحتفظ بالمعلومات التي تم جمعها, \\b لمدة عام على الأكثر\\b0 . ومع ذلك،، فإننا لن نكشف عن أي من هذه البيانات الفردية طوعًا لأطراف ثالثة."
|
||||
|
||||
#. • MSG_185
|
||||
msgid "Update Process:"
|
||||
|
@ -1141,20 +1131,20 @@ msgid ""
|
|||
"Rufus does not install or run background services, therefore update checks are performed only when the main application is running.\\line\n"
|
||||
"Internet access is of course required when checking for updates."
|
||||
msgstr ""
|
||||
"روفوس لا يقوم بتثبيت أو تشغيل خدمات خلفية, وبالتالي يتم التحقّق من تحديثات فقط عند تشغيل التطبيق الرئيسي. \\line\n"
|
||||
"Rufus لا يقوم بتثبيت أو تشغيل خدمات خلفية, وبالتالي يتم التحقّق من تحديثات فقط عند تشغيل التطبيق الرئيسي. \\line\n"
|
||||
"الإتصال بالإنترنت بالطبع مطلوب عند التحقّق من وجود تحديثات."
|
||||
|
||||
#. • MSG_187
|
||||
msgid "Invalid image for selected boot option"
|
||||
msgstr "صورة (إيميج) غير صالحة للخيار التمهيدي المحدّد"
|
||||
msgstr "صورة (image) غير صالحة للخيار الإقلاعي المحدّد"
|
||||
|
||||
#. • MSG_188
|
||||
msgid "The current image doesn't match the boot option selected. Please use a different image or choose a different boot option."
|
||||
msgstr "الصورة (الإيميج) الحالية لا تتطابق مع الخيار التمهيدي المحدّد. يُرجى إستخدام صورة مختلفة أو تحديد خيار تمهيدي آخر."
|
||||
msgstr "الصورة (image) الحالية لا تتطابق مع الخيار الإقلاعي المحدّد. يُرجى إستخدام صورة مختلفة أو تحديد خيار إقلاعي آخر."
|
||||
|
||||
#. • MSG_189
|
||||
msgid "This ISO image is not compatible with the selected filesystem"
|
||||
msgstr "صورة (إيميج) ISO هذه غير متوافقة مع نظام الملفات المحدّد"
|
||||
msgstr "صورة ISO هذه غير متوافقة مع نظام الملفات المحدّد"
|
||||
|
||||
#. • MSG_190
|
||||
msgid "Incompatible drive detected"
|
||||
|
@ -1196,7 +1186,7 @@ msgstr ""
|
|||
"هام: هذا القرص يستخدم حجم قطاع غير قياسي!\n"
|
||||
"\n"
|
||||
"الأقراص التقليدية تستعمل 512-بايت كحجن قطاع لكن هذا القراص يستعمل %d-بايت. في العديد من الحالات، هذا يعني أنك لن تستطيع الإقلاع من هذا القرص.\n"
|
||||
"يستطيع روفوس محاولة إنشاء قرص إقلاع، لكن من دون ضمان أنه سيعمل."
|
||||
"يستطيع Rufus محاولة إنشاء قرص إقلاع، لكن من دون ضمان أنه سيعمل."
|
||||
|
||||
#. • MSG_197
|
||||
msgid "Nonstandard sector size detected"
|
||||
|
@ -1204,7 +1194,7 @@ msgstr "إكتشاف حجم قطاع غير قياسي"
|
|||
|
||||
#. • MSG_198
|
||||
msgid "'Windows To Go' can only be installed on a GPT partitioned drive if it has the FIXED attribute set. The current drive was not detected as FIXED."
|
||||
msgstr "يمكن تثبيت 'Windows To Go' على قرص بتقسيمات GPT فقط إذا كان عندهالسمة FIXED مُحددة. لم يتم إكتشاف FIXED في القرص الحالي."
|
||||
msgstr "يمكن تثبيت 'Windows To Go' فقط على قرص بتقسيمات GPT إذا كان عنده السمة FIXED مُحددة. لم يتم إكتشاف FIXED في القرص الحالي."
|
||||
|
||||
#. • MSG_199
|
||||
msgid "This feature is not available on this platform."
|
||||
|
@ -1216,17 +1206,17 @@ msgstr "جاري الإلغاء – الرجاء الإنتظار..."
|
|||
|
||||
#. • MSG_202
|
||||
msgid "Scanning image..."
|
||||
msgstr "مسح الصورة..."
|
||||
msgstr "فحص الصورة (image)..."
|
||||
|
||||
#. • MSG_203
|
||||
msgid "Failed to scan image"
|
||||
msgstr "فشل لمسح الصورة"
|
||||
msgstr "فشل فحص الصورة"
|
||||
|
||||
#. • MSG_204
|
||||
#.
|
||||
#. %s is the name of an obsolete Syslinux .c32 module. Example: "Obsolete vesamenu.c32 detected"
|
||||
msgid "Obsolete %s detected"
|
||||
msgstr "إكتشاف %s قديمة مهملة"
|
||||
msgstr "إكتشاف %s قديمة"
|
||||
|
||||
#. • MSG_205
|
||||
#.
|
||||
|
@ -1285,13 +1275,13 @@ msgstr "فشل إطلاق تطبيق جديد"
|
|||
#.
|
||||
#. Example: "Opened some_file.txt"
|
||||
msgid "Opened %s"
|
||||
msgstr "فتح %s"
|
||||
msgstr "تم فتح %s"
|
||||
|
||||
#. • MSG_216
|
||||
#.
|
||||
#. Example: "Saved rufus.log"
|
||||
msgid "Saved %s"
|
||||
msgstr "حفظ %s"
|
||||
msgstr "تم حفظ %s"
|
||||
|
||||
#. • MSG_217
|
||||
#.
|
||||
|
@ -1301,11 +1291,11 @@ msgstr "التهيئة: %s"
|
|||
|
||||
#. • MSG_218
|
||||
msgid "Creating file system: Task %d/%d completed"
|
||||
msgstr "إنشاء نظام الملفات: تمت %d/%d عملية"
|
||||
msgstr "إنشاء نظام الملفات: عملية %d/%d تمت"
|
||||
|
||||
#. • MSG_219
|
||||
msgid "NTFS Fixup: %d%% completed"
|
||||
msgstr "إصلاح NTFS: تم %d%%"
|
||||
msgstr "إصلاح NTFS: تم إصلاح %d%%"
|
||||
|
||||
#. • MSG_220
|
||||
#.
|
||||
|
@ -1313,7 +1303,7 @@ msgstr "إصلاح NTFS: تم %d%%"
|
|||
#. Example: "Formatting (UDF) - Estimated duration 3:21..."
|
||||
#. If "estimated duration" is too long, just use "estimated" or an abbreviation
|
||||
msgid "Formatting (%s) - estimated duration %d:%02d..."
|
||||
msgstr "فرمتة (%s) – تقديرياً %d:%02d..."
|
||||
msgstr "فرمتة (%s) – المدة التقديرية %d:%02d..."
|
||||
|
||||
#. • MSG_221
|
||||
msgid "Setting label (%s)..."
|
||||
|
@ -1339,7 +1329,7 @@ msgstr "طلب الوصول إلى القرص..."
|
|||
|
||||
#. • MSG_226
|
||||
msgid "Analyzing existing boot records..."
|
||||
msgstr "تحليل سجلّات التمهيد الموجودة..."
|
||||
msgstr "تحليل سجلّات الإقلاع الموجودة..."
|
||||
|
||||
#. • MSG_227
|
||||
msgid "Closing existing volume..."
|
||||
|
@ -1347,11 +1337,11 @@ msgstr "غلق وحدة التخزين الموجودة..."
|
|||
|
||||
#. • MSG_228
|
||||
msgid "Writing Master Boot Record..."
|
||||
msgstr "كتابة سجلّ التمهيد الرئيسي (MBR) ..."
|
||||
msgstr "كتابة سجلّ الإقلاع الرئيسي (MBR) ..."
|
||||
|
||||
#. • MSG_229
|
||||
msgid "Writing Partition Boot Record..."
|
||||
msgstr "كتابة سجل تمهيد القسم ..."
|
||||
msgstr "كتابة سجل إقلاع القسم ..."
|
||||
|
||||
#. • MSG_230
|
||||
msgid "Copying DOS files..."
|
||||
|
@ -1363,7 +1353,7 @@ msgstr "نسخ ملفات الـISO: %s"
|
|||
|
||||
#. • MSG_232
|
||||
msgid "Win7 EFI boot setup (%s)..."
|
||||
msgstr "إعداد تمهيد EFI ل ويندوز7 (%s)..."
|
||||
msgstr "إعداد إقلاع EFI ل ويندوز7 (%s)..."
|
||||
|
||||
#. • MSG_233
|
||||
msgid "Finalizing, please wait..."
|
||||
|
@ -1423,7 +1413,7 @@ msgstr "فشل في تحميل الملف."
|
|||
|
||||
#. • MSG_243
|
||||
msgid "Checking for Rufus updates..."
|
||||
msgstr "التحقّق من تحديثات روفوس..."
|
||||
msgstr "التحقّق من تحديثات Rufus..."
|
||||
|
||||
#. • MSG_244
|
||||
msgid "Updates: Unable to connect to the internet"
|
||||
|
@ -1435,11 +1425,11 @@ msgstr "التحديثات: عدم القدرة على الوصول إلى بي
|
|||
|
||||
#. • MSG_246
|
||||
msgid "A new version of Rufus is available!"
|
||||
msgstr "إصدار جديد متاح من روفوس!"
|
||||
msgstr "إصدار جديد متاح من Rufus!"
|
||||
|
||||
#. • MSG_247
|
||||
msgid "No new version of Rufus was found"
|
||||
msgstr "لم يتم العثور على إصدار جديد من روفوس"
|
||||
msgstr "لم يتم العثور على إصدار جديد من Rufus"
|
||||
|
||||
#. • MSG_248
|
||||
msgid "Application registry keys successfully deleted"
|
||||
|
@ -1493,7 +1483,7 @@ msgstr "فرض التحديث"
|
|||
|
||||
#. • MSG_260
|
||||
msgid "NTFS compression"
|
||||
msgstr "إنضغاط NTFS"
|
||||
msgstr "ضغط NTFS"
|
||||
|
||||
#. • MSG_261
|
||||
msgid "Writing image: %s"
|
||||
|
@ -1509,11 +1499,11 @@ msgstr "دعم ISO"
|
|||
#.
|
||||
#. Cheat mode to force legacy size units, where 1 KB is 1024 bytes and NOT that fake 1000 bytes abomination!
|
||||
msgid "Use PROPER size units"
|
||||
msgstr "استعمل وحدات حجم مناسبة"
|
||||
msgstr "استعمل وحدات حجم مناسبة (PROPER)"
|
||||
|
||||
#. • MSG_264
|
||||
msgid "Deleting directory '%s'"
|
||||
msgstr "حذف الدليل '%s'"
|
||||
msgstr "حذف المجلد '%s'"
|
||||
|
||||
#. • MSG_265
|
||||
msgid "VMWare disk detection"
|
||||
|
@ -1529,7 +1519,7 @@ msgstr "تطبيق صورة (نسخة) ويندوز: %s"
|
|||
|
||||
#. • MSG_268
|
||||
msgid "Applying Windows image..."
|
||||
msgstr "تطبيق صورة (إيميج) ويندوز..."
|
||||
msgstr "تطبيق صورة (نسخة) ويندوز..."
|
||||
|
||||
#. • MSG_269
|
||||
msgid "Preserve timestamps"
|
||||
|
@ -1541,7 +1531,7 @@ msgstr "تنقيح الأخطاء عن طريق USB"
|
|||
|
||||
#. • MSG_271
|
||||
msgid "Computing image checksums: %s"
|
||||
msgstr "حساب مجاميع اختبار (Checksums) الصورة: %s"
|
||||
msgstr "حساب مجاميع الإختبار (Checksums) للصورة (Image): %s"
|
||||
|
||||
#. • MSG_272
|
||||
msgid "Compute the MD5, SHA1 and SHA256 checksums for the selected image"
|
||||
|
@ -1565,8 +1555,8 @@ msgid ""
|
|||
"\n"
|
||||
"Please select the mode that you want to use to write this image:"
|
||||
msgstr ""
|
||||
"الصورة التي اخترتها هي صورة 'ISOHybrid'. هذا يعني أنه يمكن كتابتها في نمط %s (نسخة ملف) أو نمط %s.\n"
|
||||
" (صورة قرص)روفوس يوصي باستعمال نمط %s، كي تتمكن دوما من الوصول الكامل إلى القرص بعد كتابته.\n"
|
||||
"الصورة التي اخترتها هي صورة 'ISOHybrid'. هذا يعني أنه يمكن كتابتها إما في نمط نسخة ملف %s وإما في نمط نسخة قرص %s.\n"
|
||||
" Rufus يوصي باستعمال نمط %s، كي تتمكن دوما من الوصول الكامل إلى القرص بعد كتابته.\n"
|
||||
"لكن، إذا واجهت مشاكلا خلال الإقلاع يمكنك محاولة كتابة هاته الصورة مرة أخرى في نمط %s.\n"
|
||||
"\n"
|
||||
"فضلا اختر النمط الذي تريده لكتابة هاته الصورة:"
|
||||
|
@ -1609,7 +1599,7 @@ msgstr "التوفيع الرقمي غير صالح"
|
|||
|
||||
#. • MSG_284
|
||||
msgid "The downloaded executable is missing a digital signature."
|
||||
msgstr "الملف التنفيذي المحمل ينقصه توقيع رقمي معين."
|
||||
msgstr "الملف التنفيذي المحمل ينقصه توقيع رقمي."
|
||||
|
||||
#. • MSG_285
|
||||
msgid ""
|
||||
|
@ -1627,11 +1617,11 @@ msgstr "تصفير القرص: %s"
|
|||
|
||||
#. • MSG_287
|
||||
msgid "Detection of non-USB removable drives"
|
||||
msgstr "الكشف عن أقراص الUSB القابلة للإزالة"
|
||||
msgstr "الكشف عن الأقراص غير USB القابلة للإزالة"
|
||||
|
||||
#. • MSG_288
|
||||
msgid "Missing elevated privileges"
|
||||
msgstr "صلاحيات رفيعة مفقوده"
|
||||
msgstr "عدم التوفر على صلاحيات رفيعة"
|
||||
|
||||
#. • MSG_289
|
||||
msgid "This application can only run with elevated privileges"
|
||||
|
@ -1671,7 +1661,7 @@ msgid ""
|
|||
"\n"
|
||||
"Are you sure you want to run it?"
|
||||
msgstr ""
|
||||
"هذا الإصدار من روفوس لم يتم إنتاجه من قبل المطورين الرسميين.\n"
|
||||
"هذا الإصدار من Rufus لم يتم إنتاجه من قبل المطورين الرسميين.\n"
|
||||
"\n"
|
||||
"؟هل أنت متأكد من الأستمرار?"
|
||||
|
||||
|
@ -1691,7 +1681,7 @@ msgstr ""
|
|||
"\n"
|
||||
"إذا قمت بالحصول على هذا الملف من الإنترنت, يجب عليك تحميل نسخة جديدة و التحقق من أن المجموع الإختباري لMD5 و SHA مطابق للنسخ(ة) الأصلية.\n"
|
||||
"\n"
|
||||
"علماُ بانه يمكنك مقارنة الMD5 و SHA في روفوس عن طريق الضغط على زر (✓)"
|
||||
"علماُ بانه يمكنك مقارنة الMD5 و SHA في Rufus عن طريق الضغط على زر (✓)"
|
||||
|
||||
#. • MSG_299
|
||||
msgid "Timestamp validation error"
|
||||
|
@ -1705,7 +1695,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Rufus لم يتمكن من التحقق أن الطابع الزمني للتحديث الذي تم تنزيله أحدث من ذلك الذي في البرنامج التنفيذي الحالي. \n"
|
||||
"\n"
|
||||
" من أجل منع سيناريوهات الهجوم المحتملة, تم إحباط عملية الاتحديث و سيتم حذف التحديث, الرجاء التحقق من السجل لمزيد من التفاصيل."
|
||||
" من أجل منع سيناريوهات الهجوم المحتملة, تم إحباط عملية التحديث و سيتم حذف التحديث, الرجاء التحقق من السجل لمزيد من التفاصيل."
|
||||
|
||||
#. • MSG_301
|
||||
msgid "Show application settings"
|
||||
|
@ -1752,7 +1742,7 @@ msgid ""
|
|||
"\n"
|
||||
"Please select the mode that you want to use to write this image:"
|
||||
msgstr ""
|
||||
"يستخدم ISO الذي حددته UEFI وهو صغير بما يكفي ليتم كتابته كقسم نظام EFI (ESP). يمكن أن تكون الكتابة إلى ESP ، بدلاً من الكتابة إلى قسم بيانات عام يشغل القرص بأكمله ، هي الأفضل لبعض أنواع التثبيتات.\n"
|
||||
"يستخدم ISO الذي حددته UEFI وهو صغير بما يكفي ليتم كتابته كقسم نظام EFI (ESP). يمكن أن تكون الكتابة إلى ESP ، بدلاً من الكتابة إلى قسم بيانات عام تشغل القرص بأكمله ، هي الأفضل لبعض أنواع التثبيتات.\n"
|
||||
"\n"
|
||||
"الرجاء تحديد الوضع الذي تريد استخدامه لكتابة هذه الصورة(Image):"
|
||||
|
||||
|
@ -1786,11 +1776,11 @@ msgstr "رقم تعريف القرص"
|
|||
|
||||
#. • MSG_318
|
||||
msgid "Default thread priority: %d"
|
||||
msgstr "الأفضلية الافتراضية لمؤشر الترابط: %d"
|
||||
msgstr "الأفضلية الافتراضية لـ thread : %d"
|
||||
|
||||
#. • MSG_319
|
||||
msgid "Ignore Boot Marker"
|
||||
msgstr "تجاهل علامة التمهيد"
|
||||
msgstr "تجاهل علامة الإقلاع"
|
||||
|
||||
#. • MSG_320
|
||||
msgid "Refreshing partition layout (%s)..."
|
||||
|
@ -1801,8 +1791,8 @@ 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 ""
|
||||
"الصورة التي حددتها هي ISO-Hybrid (هجينة) ، لكن منشئوها لم يجعلوها متوافقة مع وضع نسخ ملف ISO. \n"
|
||||
"نتيجة لذلك ، سيتم فرض وضع كتابة صورة DD."
|
||||
"الصورة التي حددتها هي ISO-Hybrid (هجينة) ، لكن منشئوها لم يجعلوها متوافقة مع وضع نسخ ملف ISO. \n"
|
||||
"نتيجة لذلك ، سيتم فرض وضع DD لكتابة الصورة."
|
||||
|
||||
#. • MSG_322
|
||||
msgid "Unable to open or read '%s'"
|
||||
|
@ -1810,7 +1800,7 @@ msgstr "غير قادر على فتح أو قراءة '%s'"
|
|||
|
||||
#. • MSG_325
|
||||
msgid "Applying Windows customization: %s"
|
||||
msgstr "تطبيق تخصيص ويندوز: %s"
|
||||
msgstr "جاري تطبيق تخصيصات ويندوز: %s"
|
||||
|
||||
#. • MSG_326
|
||||
msgid "Applying user options..."
|
||||
|
@ -1830,7 +1820,7 @@ msgstr "قم بإزالة متطلبات 4GB + RAM ، Secure Boot و TPM 2.0"
|
|||
|
||||
#. • MSG_330
|
||||
msgid "Remove requirement for an online Microsoft account"
|
||||
msgstr "إزالة متطلبات حساب مايكروسوفت عبر الإنترنت"
|
||||
msgstr "قم بإزالة متطلبات حساب مايكروسوفت عبر الإنترنت"
|
||||
|
||||
#. • MSG_331
|
||||
msgid "Disable data collection (Skip privacy questions)"
|
||||
|
@ -1856,11 +1846,87 @@ msgstr "تعطيل التشفير التلقائي BitLocker للجهاز"
|
|||
msgid "Persistent log"
|
||||
msgstr "سجل متواصل"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"يجب تنزيل ملف إضافي ('diskcopy.dll') من Microsoft لتثبيت MS-DOS:\n"
|
||||
"- حدد \"نعم\" للاتصال بالإنترنت وتنزيله\n"
|
||||
"- اختر \"لا\" لإلغاء العملية\n"
|
||||
"\n"
|
||||
"ملاحظة: سيتم تنزيل الملف في مجلد التطبيق وسيتم إعادة استخدامه تلقائيًا إذا كان موجودًا."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "تم اكتشاف أداة تحميل التشغيل UEFI التي تم إبطالها سابقا"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 أن ملف ISO الذي حددته يحتوي على أداة تحميل التشغيل UEFI التي تم إبطالها سابقا والتي ستنتج %s، عند تمكين Secure Boot محدث بالكامل على نظام UEFI .\n"
|
||||
"\n"
|
||||
"- إذا حصلت على صورة ISO هذه من مصدر غير حسن السمعة، فيجب أن تفكر في احتمالية احتوائها على برامج UEFI ضارة وتجنب التشغيل منها.\n"
|
||||
"- إذا حصلت على صورة ISO هذه من مصدر موثوق به، فعليك محاولة العثور على إصدار أكثر حداثة، والذي لن ينتج عنه هذا التحذير."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "شاشة \"الانتهاكات الأمنية\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "شاشة استرداد ويندوز (BSOD) مع '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "صورة VHDX مضغوطة"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "صورة VHD غير مضغوطة"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "صورة (image) لتحديث فلاشة كاملة (FFU)"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"يجب تنزيل بعض البيانات الإضافية من Microsoft لاستخدام هذه الوظيفة:\n"
|
||||
"- اختر \"نعم\" للاتصال بالإنترنت وتنزيلها\n"
|
||||
"- اختر \"لا\" لإلغاء العملية"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "تقييد Windows على الوضع \"S\" (S-Mode، غير متوافق مع تجاوز الحساب عبر الإنترنت)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "وضع الخبير"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "استخراج ملفات الأرشيف: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "استخدم Refus MBR"
|
||||
|
||||
#. • 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 هو أداة تساعد في تنسيق وإنشاء أقراص الإقلاع عن طريق USB، مثل مفاتيح USB، بطاقات الذاكرة، وغيرها."
|
||||
msgstr "برنامج Rufus هو أداة تساعد في تنسيق وإنشاء أقراص الإقلاع USB، مثل مفاتيح USB، بطاقات الذاكرة، وغيرها."
|
||||
|
||||
#. • MSG_901
|
||||
msgid "Official site: %s"
|
||||
|
@ -1889,7 +1955,7 @@ msgstr ""
|
|||
#.
|
||||
#. Keyword for "boot" will be used for search in the Windows Store
|
||||
msgid "Boot"
|
||||
msgstr "التمهيد (Boot)"
|
||||
msgstr "الإقلاع (Boot)"
|
||||
|
||||
#. • MSG_910
|
||||
#.
|
||||
|
@ -1899,19 +1965,19 @@ msgstr "تهيئة USB وبطاقة الفلاش ومحركات الأقراص
|
|||
|
||||
#. • MSG_911
|
||||
msgid "Create FreeDOS bootable USB drives"
|
||||
msgstr "إنشاء محركات أقراص USB قابلة للتشغيل من FreeDOS"
|
||||
msgstr "إنشاء محركات أقراص USB قابلة للإقلاع من FreeDOS"
|
||||
|
||||
#. • MSG_912
|
||||
msgid "Create bootable drives from bootable ISOs (Windows, Linux, etc.)"
|
||||
msgstr "إنشاء محركات أقراص قابلة للتمهيد من ملفات ISO القابلة للتمهيد (Windows و Linux وما إلى ذلك)"
|
||||
msgstr "إنشاء محركات أقراص قابلة للإقلاع من ملفات ISO القابلة للإقلاع (Windows و Linux وما إلى ذلك)"
|
||||
|
||||
#. • MSG_913
|
||||
msgid "Create bootable drives from bootable disk images, including compressed ones"
|
||||
msgstr "إنشاء محركات أقراص قابلة للتمهيد من صور الأقراص القابلة للتمهيد ، بما في ذلك الأقراص المضغوطة"
|
||||
msgstr "إنشاء محركات أقراص قابلة للإقلاع من صور الأقراص القابلة للإقلاع ، بما في ذلك الأقراص المضغوطة"
|
||||
|
||||
#. • MSG_914
|
||||
msgid "Create BIOS or UEFI bootable drives, including UEFI bootable NTFS"
|
||||
msgstr "إنشاء BIOS أو محركات أقراص UEFI قابلة للتمهيد ، بما في ذلك NTFS القابل للتشغيل من UEFI"
|
||||
msgstr "إنشاء BIOS أو محركات أقراص UEFI قابلة للإقلاع ، بما في ذلك UEFI NTFS القابل للتشغيل"
|
||||
|
||||
#. • MSG_915
|
||||
msgid "Create 'Windows To Go' drives"
|
||||
|
@ -1919,7 +1985,7 @@ msgstr "إنشاء محركات أقراص \"Windows To Go\""
|
|||
|
||||
#. • MSG_916
|
||||
msgid "Create Windows 11 installation drives for PCs that don't have TPM or Secure Boot"
|
||||
msgstr "قم بإنشاء محركات تثبيت ويندوز 11 لأجهزة الكمبيوتر التي لا تحتوي على TPM أو التمهيد الآمن"
|
||||
msgstr "قم بإنشاء محركات تثبيت ويندوز 11 لأجهزة الكمبيوتر التي لا تحتوي على TPM أو الإقلاع الآمن (Secure Boot)"
|
||||
|
||||
#. • MSG_917
|
||||
msgid "Create persistent Linux partitions"
|
||||
|
@ -1931,7 +1997,7 @@ msgstr "إنشاء صور VHD / DD لمحرك الأقراص المحدد"
|
|||
|
||||
#. • MSG_919
|
||||
msgid "Compute MD5, SHA-1, SHA-256 and SHA-512 checksums of the selected image"
|
||||
msgstr "حساب المجموع الاختباري MD5 و SHA-1 و SHA-256 و SHA-512 للصورة المحددة"
|
||||
msgstr "حساب المجاميع الإختبارية MD5 و SHA-1 و SHA-256 و SHA-512 للصورة المحددة"
|
||||
|
||||
#. • MSG_920
|
||||
msgid "Perform bad blocks checks, including detection of \"fake\" flash drives"
|
||||
|
|
|
@ -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: 2023-02-16 20:14+0100\n"
|
||||
"PO-Revision-Date: 2023-02-17 12:30+0000\n"
|
||||
"POT-Creation-Date: 2024-04-25 20:58+0200\n"
|
||||
"PO-Revision-Date: 2024-04-25 21:23+0200\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: cs_CZ\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Czech (Čeština)\n"
|
||||
"X-Rufus-LCID: 0x0405\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Seznam USB disků"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Přidat opravu pro starší BIOSy (extra partition, align, etc.)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Použijte Rufus MBR s ID BIOS"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Povolit ověřování médií UEFI za běhu"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -105,7 +103,7 @@ msgstr "Zavřít"
|
|||
|
||||
#. • IDD_DIALOG → IDC_START
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
msgstr "Spustit"
|
||||
|
||||
#. • IDD_ABOUTBOX → IDD_ABOUTBOX
|
||||
msgid "About Rufus"
|
||||
|
@ -397,7 +395,7 @@ msgstr "Zařízení USB (Obecné)"
|
|||
|
||||
#. • MSG_046
|
||||
msgid "%s (Disk %d) [%s]"
|
||||
msgstr ""
|
||||
msgstr "%s (Disk %d) [%s]"
|
||||
|
||||
#. • MSG_047
|
||||
#.
|
||||
|
@ -770,7 +768,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Tento obraz používá Syslinux %s%s, tato aplikace však obsahuje pouze instalační soubory pro Syslinux %s%s.\n"
|
||||
"\n"
|
||||
"Jelikož nové verze Syslinux nejsou vzájemně kompatibilní a není možné v programu Rufus zahrnout všechny verze, je nutné z Internetu stáhnout dodatečné dva soubory (ldlinux.sys a ldlinux.bss):\n"
|
||||
"Jelikož nové verze Syslinux nejsou vzájemně kompatibilní a není možné v programu Rufus zahrnout všechny verze, je nutné z Internetu stáhnout dodatečné dva soubory (ldlinux.sys a ldlinux.bss):\n"
|
||||
"- Zvolte 'Ano' pro stažení souborů z Internetu\n"
|
||||
"- Zvolte 'Ne' pro zrušení operace\n"
|
||||
"\n"
|
||||
|
@ -1047,16 +1045,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Povolíte v názvu disku zobrazení mezinárodních znaků a vytvoření ikony zařízení (vytvořením souboru autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Instalovat MBR, který umožní výběr při zavádění systému a zamaskování BIOS ID disku USB"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Pokusit se o zamaskování boot USB jednotky (většinou 0x80) jako jiného disku.\n"
|
||||
"Obvykle nutné pouze pokud chcete instalovat Windows XP a máte více jak jeden disk."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Nainstalujte zavaděč UEFI, který provede ověření souboru MD5Sum na médiu"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1410,7 +1400,7 @@ msgid ""
|
|||
"\n"
|
||||
"The download will be deleted. Please check the log for more details."
|
||||
msgstr ""
|
||||
"Podpis stažené aktualizace nelze ověřit. To může znamenat, že systém je nesprávně nakonfigurován pro ověření podpisu nebo označil stažený soubor jako škodlivý.\n"
|
||||
"Podpis stažené aktualizace nelze ověřit. To může znamenat, že systém je nesprávně nakonfigurován pro ověření podpisu nebo označil stažený soubor jako škodlivý.\n"
|
||||
"\n"
|
||||
"Stahování bude smazáno. Zkontrolujte podrobnosti v protokolu."
|
||||
|
||||
|
@ -1857,6 +1847,82 @@ msgstr "Zakázání automatického šifrování zařízení nástrojem BitLocker
|
|||
msgid "Persistent log"
|
||||
msgstr "Trvalý protokol"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Pro instalaci systému MS-DOS je nutné stáhnout další soubor ('diskcopy.dll') od společnosti Microsoft:\n"
|
||||
"- Vyberte 'Ano' pro připojení k internetu a stažení\n"
|
||||
"- Výběrem možnosti \"Ne\" operaci zrušíte\n"
|
||||
"\n"
|
||||
"Poznámka: Soubor bude stažen do adresáře aplikace a bude automaticky znovu použit, pokud je přítomen."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Byl zjištěn odvolaný zavaděč UEFI"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 zjistil, že vámi vybraný ISO obsahuje zavaděč UEFI, který byl odvolán a který vytvoří %s, když je v plně aktuálním systému UEFI povoleno Secure Boot.\n"
|
||||
"\n"
|
||||
"- Pokud jste tento obraz ISO získali z nerenomovaného zdroje, měli byste zvážit možnost, že by mohl obsahovat malware UEFI a vyhnout se bootování z něj.\n"
|
||||
"- Pokud jste jej získali z důvěryhodného zdroje, měli byste se pokusit najít aktuálnější verzi, která toto varování nevyvolá."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "obrazovka \"Porušení zabezpečení\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "a Obrazovka zotavení systému Windows (BSOD) s '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Komprimovaný obraz VHDX"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Nekomprimovaný obraz VHD"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Úplná aktualizace Flash Image"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"K použití této funkce je třeba stáhnout některá další data od společnosti Microsoft:\n"
|
||||
"- Vyberte 'Ano' pro připojení k internetu a stažení\n"
|
||||
"- Výběrem možnosti \"Ne\" operaci zrušíte"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Omezit Windows na S-Mode (NEKOMPATIBILNÍ s online vynecháním účtu)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Expertní režim"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Rozbalení archivních souborů: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Použijte Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-04-05 13.03+0200\n"
|
||||
"PO-Revision-Date: 2023-04-25 13:46+0100\n"
|
||||
"POT-Creation-Date: 2024-04-25 13:41-0700\n"
|
||||
"PO-Revision-Date: 2024-04-25 14:34-0700\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: da_DK\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Danish (Dansk)\n"
|
||||
"X-Rufus-LCID: 0x0406\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Vis USB-harddiske"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Tilføj rettelser for ældre BIOS'er"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Brug Rufus MBR med BIOS ID"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Slå runtime UEFI medie validering til"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -1044,16 +1042,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Vælg denne mulighed for at tillade visning af internationale etiketter og skabe et enheds-ikon (opretter en autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Installer en MBR, der tillader boot valg og kan maskere et BIOS USB-drev ID"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Forsøg at maskere det først fundne USB boot-drev (normalt 0x80) som en anden disk.\n"
|
||||
"Dette burde kun være nødvendigt hvis du installerer Windows XP og ejer mere end én disk."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Installer en UEFI bootloader, der vil udføre en MD5Sum fil validering af mediet"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1856,6 +1846,82 @@ msgstr "Deaktiver Bitlockers automatiske apparat kryptering"
|
|||
msgid "Persistent log"
|
||||
msgstr "Vedvarende log"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ekstra fil ('diskcopy.dll') skal hentes fra Microsoft for at installere MS-DOS:\n"
|
||||
"- Vælg 'Ja' for at tilslutte til internettet og hente den\n"
|
||||
"- Vælg 'Nej' for at afbryde operationen\n"
|
||||
"\n"
|
||||
"Note: Filen vil blive hentet i programmets mappe og vil blive genbrugt automatisk hvis tilstede."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Tilbagekaldt UEFI Bootloader opdaget"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 har opdaget at ISO filen du har valgt indeholder en UEFI bootloader der er blevet tilbagekaldt og vil producere %s, når Secure Boot er slået til på et fuldt opdateret UEFI system.\n"
|
||||
"\n"
|
||||
"- Hvis du har hentet dette ISO billed fra en upålidelig kilde, bør du overveje muligheden for at den muligvis indeholder UEFI malware og undgå at boote fra den.\n"
|
||||
"- Hvis du har hentet den fra en pålidelig kilde, bør du kigge efter en nyere version, som ikke vil producere denne advarsel."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "en \"Sikkerhedsbrud\" skærm"
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "en Windows Gendannelsesskærm (BSOD) med '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Komprimeret VHDX Afbildning"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Ukomprimeret VHD Afbildning"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Full Flash Update Afbildning"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Noget ekstra data skal hentes fra Microsoft for at udnytte denne funktionalitet:\n"
|
||||
"- Vælg 'Ja' for at tilslutte til internettet og hente det\n"
|
||||
"- Vælg 'Nej' for at afbryde operationen"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Begræns Windows til S-Mode (Inkompatibel med Online bruger bypass)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Ekspert Tilstand"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Udpakker arkiv filer: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Brug Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-02-18 16:30+0100\n"
|
||||
"PO-Revision-Date: 2023-04-05 12:34+0200\n"
|
||||
"POT-Creation-Date: 2024-04-26 11:11+0200\n"
|
||||
"PO-Revision-Date: 2024-04-26 11:48+0200\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.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "USB-Festplatten anzeigen"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Fix für ältere BIOSe verwenden (zusätzliche Partition usw.)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Rufus-MBR mit BIOS-ID benutzen"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "UEFI-Medienvalidierung zur Laufzeit aktivieren"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -1044,16 +1042,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
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 an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Erzeugt einen MBR, der ein Bootmenü erzeugt und die ID des BIOS-USB-Laufwerks maskieren kann"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Das erste startfähige USB-Laufwerk als andere Festplatte (normalerweise 0x80) maskieren.\n"
|
||||
"Das sollte nur notwendig sein, wenn Sie Windows XP installieren und mehr als eine Festplatte haben."
|
||||
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"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1840,7 +1830,7 @@ msgstr "Verhindern, dass Windows To Go auf interne Laufwerke zugreifen kann"
|
|||
|
||||
#. • MSG_333
|
||||
msgid "Create a local account with username:"
|
||||
msgstr "Ein lokales Benutzerkonto erstellen: "
|
||||
msgstr "Ein lokales Benutzerkonto erstellen:"
|
||||
|
||||
#. • MSG_334
|
||||
msgid "Set regional options to the same values as this user's"
|
||||
|
@ -1854,6 +1844,82 @@ msgstr "Deaktivieren der automatischen BitLocker-Laufwerksverschlüsselung"
|
|||
msgid "Persistent log"
|
||||
msgstr "Dauerhaftes Protokoll"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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"
|
||||
"\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"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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"
|
||||
"\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."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "ein Bildschirm \"Sicherheitsverletzung\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "ein Windows Wiederherstellung-Bildschirm (BSOD) mit '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Komprimiertes VHDX Image"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Unkomprimiertes VHD Image"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Full Flash Update Image"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- 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"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Windows im S-Modus (nicht kompatibel mit Online Konto-Umgehung)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Experten-Modus"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Archiv-Datei extrahieren: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Rufus MBR verwenden"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-03-04 18:22+0000\n"
|
||||
"PO-Revision-Date: 2023-03-04 18:27+0000\n"
|
||||
"POT-Creation-Date: 2024-05-09 12:52+0300\n"
|
||||
"PO-Revision-Date: 2024-05-09 13:07+0300\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: el_GR\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Greek (Ελληνικά)\n"
|
||||
"X-Rufus-LCID: 0x0408\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Εμφάνιση συσκευων USB"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Προσθήκη διορθώσεων για παλαιότερα BIOS(επιπλέον διχοτόμηση, ευθυγράμμιση, κλπ.)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Χρήση του Rufus MBR με BIOS ID"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Ενεργοποίηση επικύρωσης μέσων UEFI χρόνου εκτέλεσης"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -117,7 +115,7 @@ msgstr "Άδεια χρήσης"
|
|||
|
||||
#. • IDD_ABOUTBOX → IDOK
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
msgstr "OK"
|
||||
|
||||
#. • IDD_LICENSE → IDD_LICENSE
|
||||
msgid "Rufus License"
|
||||
|
@ -523,7 +521,7 @@ msgstr "Δεν είναι δυνατή η εγκατάσταση/τροποπο
|
|||
|
||||
#. • MSG_077
|
||||
msgid "Unable to assign a drive letter."
|
||||
msgstr "Αδυναμία αναθέτησης γράμματος στη μονάδα δίσκου."
|
||||
msgstr "Αδυναμία αναθέτησης γράμματος στη μονάδα δίσκου."
|
||||
|
||||
#. • MSG_078
|
||||
msgid "Can't mount GUID volume."
|
||||
|
@ -654,7 +652,7 @@ 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 ""
|
||||
"ΣΗΜΑΝΤΙΚΟ: Προσπαθείτε να εγκαταστήσετε τα 'Windows To Go', αλλά ο επιλεγμένος δίσκος δεν διαθέτει το χαρακτηριστικό 'ΣΤΑΘΕΡΑ'. Λόγω αυτού, τα Windows πιθανότατα θα 'παγώνουν' κατά τη διάρκεια της εκκίνησης εφόσον η Microsoft δεν έχει σχεδιάσει τα 'Windows To Go' για λειτουργία με δίσκους που έχουν το χαρακτηριστικό 'ΑΦΑΙΡΟΥΜΕΝΟΣ'.\n"
|
||||
"ΣΗΜΑΝΤΙΚΟ: Προσπαθείτε να εγκαταστήσετε τα 'Windows To Go', αλλά ο επιλεγμένος δίσκος δεν διαθέτει το χαρακτηριστικό 'ΣΤΑΘΕΡΑ'. Λόγω αυτού, τα Windows πιθανότατα θα 'παγώνουν' κατά τη διάρκεια της εκκίνησης εφόσον η Microsoft δεν έχει σχεδιάσει τα 'Windows To Go' για λειτουργία με δίσκους που έχουν το χαρακτηριστικό 'ΑΦΑΙΡΟΥΜΕΝΟΣ'.\n"
|
||||
"\n"
|
||||
"Είστε σίγουροι ότι θέλετε να συνεχίσετε?\n"
|
||||
"\n"
|
||||
|
@ -766,7 +764,7 @@ msgid ""
|
|||
"\n"
|
||||
"Note: The files will be downloaded in the current application directory and will be reused automatically if present."
|
||||
msgstr ""
|
||||
"Αυτό το αρχείο χρησιμοποιεί το Syslinux %s%s παρόλα αυτά η εφαρμογή(Rufus) εμπεριέχει μόνο τα αρχεία εγκατάστασης του Syslinux %s%s.\n"
|
||||
"Αυτό το αρχείο χρησιμοποιεί το Syslinux %s%s παρόλα αυτά η εφαρμογή(Rufus) εμπεριέχει μόνο τα αρχεία εγκατάστασης του Syslinux %s%s.\n"
|
||||
"\n"
|
||||
" Εφόσον οι νέες εκδόσεις του Syslinux δεν είναι συμβατές μεταξύ τους, δεν είναι δυνατό για το Rufus να τις εμπεριέχει όλες. Επομένως, απαιτείται η λήψη δύο νέων αρχείων απο το διαδίκτυο ('ldlinux.sys' και 'ldlinux.bss'): \n"
|
||||
"- Επιλέξτε το 'Ναι' για να συνδεθείτε στο διαδίκτυο και να κάνετε λήψη των αρχείων\n"
|
||||
|
@ -1040,16 +1038,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Επιλέξτε αυτό το πλαίσιο για να επιτραπεί η εμφάνιση των διεθνών ετικετών και ο ορισμός ενός εικονιδίου συσκευής (δημιουργείτε ένα autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Εγκατάσταση ενός MBR που επιτρέπει την επιλογή εκκίνησης και μπορεί να υποδυθεί το ρόλο του ID του BIOS USB δίσκου"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Μετατροπή του πρώτου δίσκου USB με δυνατότητα εκκίνησης (συνήθως 0x80) ως ενός διαφορετικού δίσκου.\n"
|
||||
"Αυτό θα είναι απαραίτητο μόνο αν εγκαταστήσετε τα Windows XP και έχετε περισσότερους από ένα δίσκους."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Εγκαταστήστε UEFI bootloader, ο οποίος θα εκτελέσει την επικύρωση του αρχείου MD5Sum των μέσων"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1756,7 +1746,7 @@ msgstr "Χρησιμοποιήστε %s (στο κύριο παράθυρο τη
|
|||
|
||||
#. • MSG_312
|
||||
msgid "Extra hashes (SHA512)"
|
||||
msgstr "Επιπλέον hashes (SHA512)"
|
||||
msgstr "Επιπλέον hashes (SHA512)"
|
||||
|
||||
#. • MSG_313
|
||||
msgid "Save to VHD"
|
||||
|
@ -1780,7 +1770,7 @@ msgstr "ID δίσκου"
|
|||
|
||||
#. • MSG_318
|
||||
msgid "Default thread priority: %d"
|
||||
msgstr "Προεπιλεγμένη προτεραιότητα πυρήνα %d"
|
||||
msgstr "Προεπιλεγμένη προτεραιότητα πυρήνα %d"
|
||||
|
||||
#. • MSG_319
|
||||
msgid "Ignore Boot Marker"
|
||||
|
@ -1850,6 +1840,82 @@ msgstr "Απενεργοποιήστε την αυτόματη κρυπτογρ
|
|||
msgid "Persistent log"
|
||||
msgstr "Διατήρηση log"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Πρέπει να γίνει λήψη ενός πρόσθετου αρχείου ('diskcopy.dll') από τη Microsoft για να εγκαταστήσετε το MS-DOS:\n"
|
||||
"- Επιλέξτε 'Ναι' για να συνδεθείτε στο Internet και να το κατεβάσετε\n"
|
||||
"- Επιλέξτε 'Όχι' για να ακυρώσετε τη λειτουργία\n"
|
||||
"\n"
|
||||
"Σημείωση: Το αρχείο θα ληφθεί στον κατάλογο της εφαρμογής και θα επαναχρησιμοποιηθεί αυτόματα εάν υπάρχει."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Εντοπίστηκε ανακληθέν bootloader UEFI"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 εντόπισε ότι το ISO που επιλέξατε περιέχει έναν bootloader UEFI που έχει ανακληθεί και θα παράγει %s, όταν η Ασφαλής Εκκίνηση είναι ενεργοποιημένη σε ένα πλήρως ενημερωμένο σύστημα UEFI.\n"
|
||||
"\n"
|
||||
"- Εάν λάβατε αυτήν την εικόνα ISO από μη αξιόπιστη πηγή, θα πρέπει να εξετάσετε το ενδεχόμενο να περιέχει κακόβουλο λογισμικό UEFI και να αποφύγετε την εκκίνηση από αυτό.\n"
|
||||
"- Εάν το λάβατε από αξιόπιστη πηγή, θα πρέπει να προσπαθήσετε να εντοπίσετε μια πιο ενημερωμένη έκδοση, η οποία δεν θα παράγει αυτήν την προειδοποίηση."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "μια οθόνη \"Παραβίαση ασφαλείας\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "μια οθόνη αποκατάστασης των Windows (BSOD) με '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Συμπιεσμένη εικόνα VHDX"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Μη συμπιεσμένη εικόνα VHDX"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Full Flash Update Image"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Ορισμένα πρόσθετα δεδομένα πρέπει να ληφθούν από τη Microsoft για να χρησιμοποιήσετε αυτήν τη λειτουργία:\n"
|
||||
"- Επιλέξτε 'Ναι' για να συνδεθείτε στο Internet και να τα κατεβάσετε\n"
|
||||
"- Επιλέξτε 'Όχι' για να ακυρώσετε τη λειτουργία"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Περιορισμός των Windows σε S-Mode (ΑΣΥΜΒΑΤΟ με ηλεκτρονική παράκαμψη λογαριασμού)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Λειτουργία ειδικού"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Εξαγωγή αρχείων: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Χρησιμοποίηση του Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-03-15 23:07+0000\n"
|
||||
"PO-Revision-Date: 2023-03-15 23:15+0000\n"
|
||||
"POT-Creation-Date: 2024-05-09 12:54-0300\n"
|
||||
"PO-Revision-Date: 2024-05-09 12:58-0300\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: es_ES\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Spanish (Español)\n"
|
||||
"X-Rufus-LCID: 0x040a, 0x080a, 0x0c0a, 0x100a, 0x140a, 0x180a, 0x1c0a, 0x200a, 0x240a, 0x280a, 0x2c0a, 0x300a, 0x340a, 0x380a, 0x3c0a, 0x400a, 0x440a, 0x480a, 0x4c0a, 0x500a, 0x540a, 0x580a\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Listar los discos duros USB"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Agrega correcciones para BIOS viejos (partición extra, alineación, etc.)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Usar MBR de Rufus con ID de BIOS"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Habilitar la validación de medios UEFI en tiempo de ejecución"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -911,7 +909,7 @@ msgid ""
|
|||
"\n"
|
||||
"Are you sure you want to continue?"
|
||||
msgstr ""
|
||||
"Debido a que has seleccionado MBR para el sistema de particiones, Rufus sólo puede crear una partición de hasta 2TB en este dispositivo, lo que dejará %s del disco no disponibles.\n"
|
||||
"Debido a que has seleccionado MBR para el sistema de particiones, Rufus sólo puede crear una partición de hasta 2TB en este dispositivo, lo que dejará %s del disco no disponibles.\n"
|
||||
"\n"
|
||||
"¿Estas seguro de que deseas continuar?"
|
||||
|
||||
|
@ -1046,16 +1044,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Seleccione esta opción para permitir que se muestren caracteres internacionales y establecer un icono para la unidad (crea un archivo autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Instala un MBR que permite seleccionar el dispositivo de arranque y puede enmascarar el ID de identificación del dispositivo USB del BIOS"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Trata de enmascarar el primer dispositivo USB de arranque (normalmente 0x80) como un disco diferente.\n"
|
||||
"Sólo debiera ser necesario si instala Windows XP y tiene más de un disco duro."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Instale un gestor de arranque UEFI, que realizará la validación del archivo MD5Sum del medio"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1856,6 +1846,82 @@ msgstr "Deshabilitar el cifrado automático de dispositivos BitLocker"
|
|||
msgid "Persistent log"
|
||||
msgstr "Registro persistente"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Se debe descargar un archivo adicional ('diskcopy.dll') de Microsoft para instalar MS-DOS:\n"
|
||||
"- Seleccione 'Sí' para conectarse a Internet y descargarlo\n"
|
||||
"- Seleccione 'No' para cancelar la operación.\n"
|
||||
"\n"
|
||||
"Nota: El archivo se descargará en el directorio de la aplicación y se reutilizará automáticamente si está presente."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Se detectó un gestor de arranque UEFI revocado"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 detectó que el ISO que seleccionó contiene un gestor de arranque UEFI que ha sido revocado y que producirá %s, cuando el arranque seguro esté habilitado en un sistema UEFI completamente actualizado.\n"
|
||||
"\n"
|
||||
"- Si obtuvo esta imagen ISO de una fuente no confiable, debe considerar la posibilidad de que contenga malware UEFI y evitar arrancar desde allí.\n"
|
||||
"- Si lo obtuvo de una fuente confiable, debe intentar localizar una versión más actualizada, que no producirá esta advertencia."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "una pantalla de \"violación de seguridad\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "una pantalla de recuperación de Windows (BSOD) con '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Imagen VHDX comprimida"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Imagen VHD sin comprimir"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Imagen de actualización completa de Flash"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Se deben descargar algunos datos adicionales de Microsoft para utilizar esta funcionalidad:\n"
|
||||
"- Seleccione 'Sí' para conectarse a Internet y descargarlo\n"
|
||||
"- Seleccione 'No' para cancelar la operación."
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Restringir Windows al Modo S (INCOMPATIBLE con la omisión de cuenta en línea)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Modo experto"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Extrayendo archivos comprimidos: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Utilice Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
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: 2023-03-13 17:25+0000\n"
|
||||
"PO-Revision-Date: 2023-03-13 17:25+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"POT-Creation-Date: 2024-04-29 19:24+0300\n"
|
||||
"PO-Revision-Date: 2024-04-29 20:25+0330\n"
|
||||
"Last-Translator: MasterVito <mv@mvaop.ir>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: fa_IR\n"
|
||||
"MIME-Version: 1.0\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.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "نمایش هارد دیسکهای اکسترنال در فهرست
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "بهسازی و اصلاح تنظیمات برای شناسایی بهتر درایو در BIOSهای قدیمی"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "استفاده از Rufus MBR با BIOS ID برابر با"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "فغال سازی زمان اجرا UEFI media تایید"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -349,7 +347,7 @@ msgstr "BIOS (یا UEFI-CSM)"
|
|||
|
||||
#. • MSG_032
|
||||
msgid "UEFI (non CSM)"
|
||||
msgstr ""
|
||||
msgstr "UEFI (بجز CSM)"
|
||||
|
||||
#. • MSG_033
|
||||
msgid "BIOS or UEFI"
|
||||
|
@ -406,7 +404,7 @@ msgstr ""
|
|||
|
||||
#. • MSG_046
|
||||
msgid "%s (Disk %d) [%s]"
|
||||
msgstr ""
|
||||
msgstr "%s (هارد %d) [%s]"
|
||||
|
||||
#. • MSG_047
|
||||
#.
|
||||
|
@ -1054,16 +1052,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "اگر نامی که برای درایو موردنظر انتخاب کردهاید طولانی و یا دارای حروف غیر انگلیسی است و یا اگر میخواهید درایو موردنظر آیکون داشته باشد؛ این گزینه را انتخاب کنید."
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "نصبِ MBR سفارشیِ نرمافزارِ Rufus که با استفاده از آن میتوان نحوه راهاندازی را انتخاب و شناسه (ID) درایو USB بایوس را جعل کرد"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"با انتخاب یکی از این گزینهها میتوانید بهصورت ساختگی و جعلی، اولین درایو USB با قابلیت راهاندازی (معمولاً 0x80) را بهعنوان هارددیسک جداگانه معرفی کنید.\n"
|
||||
"انتخاب این گزینه فقط زمانی ضروری است که بیش از یک هارددیسک دارید و میخواهید ویندوز XP نصب کنید."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "نصب یک UEFI bootloader این کار باعث اعتبارسنجی نوع md5sUM برای رسانه میشود"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1252,7 +1242,7 @@ msgstr "فایل %s موجود نیست"
|
|||
#. The name proposed by Windows' Computer Management → Disk Management when you try to format
|
||||
#. a drive with an empty label. For an example, see https://rufus.ie/pics/default_name.png.
|
||||
msgid "New Volume"
|
||||
msgstr ""
|
||||
msgstr "بخش جدید"
|
||||
|
||||
#. • MSG_208
|
||||
#.
|
||||
|
@ -1856,7 +1846,81 @@ msgstr "رمزگذاری خودکار دستگاه BitLocker را غیرفعال
|
|||
|
||||
#. • MSG_336
|
||||
msgid "Persistent log"
|
||||
msgstr "لیست مداوم"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"فایل دیگری ('diskcopy.dll:) نیاز است دانلود شود از مایکروسافت برای نصب MS-DOS:\n"
|
||||
"- انتخاب :'بله' برای وصل شدن به اینترنت و دانلود آن\n"
|
||||
"- انتخاب 'نه' برای کنسل کردن این کار\n"
|
||||
"\n"
|
||||
"نکته: فایل در مکان نرم افزار دانلود میشود و دوباره استفاده میشود درصورت انجام مجدد این کار."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "بوت لودر UEFI کنسل شده شناسایی شد"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 متوجه شده که فایل ISO که انتخاب کردید دارای UEFI بوت لودری است که لفو شده و باعث %s, درصورتی که بوت امن فعال شده بر روی سیستم کاملا اپدیت شده UEFI\v\v- اگه شما این فایل ISO رو از یک جای غیر قابل اعتماد دریافت کردید ممکن است این فایل دارای ویروس UEFI باشد و نباید آنرا بوت کرد \n"
|
||||
"\v- اگه شما شما از جای مورد اغفماد دریافت کردیدش, میتونید تلاش کنید برای پیدا کردن نسخه جدیدتر, با اینکار دیگر این هشتار را دریافت نمیکنید."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "یک صفحه \"مشکلی امنیتی\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "یک صفخه ریکاوری ویندوز (BSOD) با '%S\""
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "فایل VHDX فشرده شده"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "فایل VHD فشرده نشده"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr ""
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"دیتا های دیگری نیاز به دانلود از مایکروسافت برای انجام دادن این کار نیاز است:\n"
|
||||
"- انتخاب 'بله' برای وصل شدن به اینترنت و دانلود آنها\n"
|
||||
"- انتخاب 'نه' برای لغو کردن این کار"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "مجبور کردن ویندوز به S-Mode ( دارای مشکلات با حذفز استفاده اکانت آنلاین )"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "بخش حرفه ای"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "استراج کردن فایل های آرشیو: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "استفاده از Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
|
|
|
@ -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: 2023-03-03 15:43+0200\n"
|
||||
"PO-Revision-Date: 2023-03-03 16:58+0200\n"
|
||||
"POT-Creation-Date: 2024-05-14 12:47+0300\n"
|
||||
"PO-Revision-Date: 2024-05-14 14:07+0300\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: fi_FI\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Finnish (Suomi)\n"
|
||||
"X-Rufus-LCID: 0x040B\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.4\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Näytä USB-kiintolevyt"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Lisää korjauksia vanhoja BIOS-versioita varten"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Käytä Rufus-MBR:ää, BIOS ID:llä"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Ota käyttöön ajonaikainen UEFI-tietovälineen tarkistus"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -579,7 +577,7 @@ msgstr ""
|
|||
"- Valitse 'Ei' jättääksesi ISO-levykuvan alkuperäiseen muotoonsa\n"
|
||||
"Jos et ole varma, sinun kannattaa valita 'Kyllä'.\n"
|
||||
"\n"
|
||||
"Huomio: Uusi tiedosto ladataan nykyiseen sijaintiin ja kun '%s' löytyy sijainnista, sitä käytetään automaattisesti."
|
||||
"Huomio: Uusi tiedosto ladataan nykyiseen sijaintiin ja kun '%s' löytyy sijainnista, sitä käytetään automaattisesti."
|
||||
|
||||
#. • MSG_085
|
||||
msgid "Downloading %s"
|
||||
|
@ -768,11 +766,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Tämä kuva käyttää Syslinuxia %s%s, mutta tämä sovellus sisältää asennustiedostot vain Syslinuxille %s%s.\n"
|
||||
"\n"
|
||||
"Koska Syslinuxin uudet versiot eivät ole keskenään yhteensopivia, eikä Rufus voisi sisältää niitä kaikkia, on kaksi lisätiedostoa ladattava internetistä ('ldlinux.sys' ja 'ldlinux.bss'):\n"
|
||||
"Koska Syslinuxin uudet versiot eivät ole keskenään yhteensopivia, eikä Rufus voisi sisältää niitä kaikkia, on kaksi lisätiedostoa ladattava internetistä ('ldlinux.sys' ja 'ldlinux.bss'):\n"
|
||||
"- Valitse 'Kyllä' yhdistääksesi internetiin ja ladataksesi nämä tiedostot\n"
|
||||
"- Valitse 'Ei' peruaksesi toiminnon\n"
|
||||
"\n"
|
||||
"Huomio: Tiedosto ladataan nykyiseen sovelluskansioon ja niitä käytetäänautomaattisesti uudelleen niiden löytyessä."
|
||||
"Huomio: Tiedostot ladataan nykyiseen sovelluskansioon ja niitä uudelleenkäytetään automaattisesti, jos se ovat jo olemassa."
|
||||
|
||||
#. • MSG_115
|
||||
msgid "Download required"
|
||||
|
@ -1043,16 +1041,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Valitse valintaruutu salliaksesi kansainvälisten merkkien näyttämisen ja asettaaksesi laitekuvakkeen (luo autorun.inf-tiedoston)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Asenna MBR, joka sallii käynnistysvalinnan ja voi naamioida USB-aseman BIOS ID:n"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Yritä naamioida ensimmäinen boottaava USB-asema (yleensä 0x80) eri asemaksi.\n"
|
||||
"Tämän tulisi olla tarpeellista vain asennettaessa Windows XP:tä, kun levyjä on useampia."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Asenna UEFI-käynnistyslataaja, joka tulee suorittamaan tietovälineelle MD5Sum-tiedostotarkistuksen"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1733,7 +1723,7 @@ msgstr "Pikanollataan asemaa: %s"
|
|||
|
||||
#. • MSG_307
|
||||
msgid "this may take a while"
|
||||
msgstr "Tämä voi viedä hetken"
|
||||
msgstr "tämä voi viedä hetken"
|
||||
|
||||
#. • MSG_308
|
||||
msgid "VHD detection"
|
||||
|
@ -1843,7 +1833,7 @@ msgstr "Luo paikallinen käyttäjätili käyttäjänimellä:"
|
|||
|
||||
#. • MSG_334
|
||||
msgid "Set regional options to the same values as this user's"
|
||||
msgstr "Aseta alueelliset vaihtoehdot samoihin asetuksiin kuin tällä käyttäjällä"
|
||||
msgstr "Aseta alueelliset vaihtoehdot samoihin asetuksiin kuin nykyisellä käyttäjällä"
|
||||
|
||||
#. • MSG_335
|
||||
msgid "Disable BitLocker automatic device encryption"
|
||||
|
@ -1853,6 +1843,82 @@ msgstr "Poista käytöstä automaattinen laitteen BitLocker-salaus"
|
|||
msgid "Persistent log"
|
||||
msgstr "Pysyvä lokitiedosto"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Uusi tiedosto ('diskcopy.dll') on ladattava Microsoftilta MS-DOSin asennusta varten:\n"
|
||||
"- Valitse 'Kyllä' yhdistääksesi internetiin ja ladataksesi sen\n"
|
||||
"- Valitse 'Ei' peruuttaaksesi toiminnon\n"
|
||||
"\n"
|
||||
"Huomio: Tiedosto ladataan sovelluksen kansioon ja sitä uudelleenkäytetään automaattisesti, jos se on jo olemassa."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Mitätöity UEFI-käynnistyslataaja havaittu"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 havaitsi, että käyttämäsi ISO-levykuva sisältää UEFI-käynnistyslataajan, joka on mitätöity ja tulee aiheuttamaan %s Secure Bootin ollessa päällä ajantasaisessa UEFI-kokoonpanossa.\n"
|
||||
"\n"
|
||||
"- Jos olet hankkinut tämän ISO-levykuvan ei-luotettavasta lähteestä, huomioi UEFI-haittaohjelmien mahdollisuus ja vältä siltä käynnistämistä.\n"
|
||||
"- Jos olet hankkinut sen luotettavasta lähteestä, sinun tulisi yrittää etsiä uudempi versio, joka ei aiheuta tätä varoitusta."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "\"Turvallisuusrikkomus\"-näkymän"
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "Windowsin palautusnäkymän (BSOD) viestillä '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Pakattu VHDX-levykuva"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Pakkaamaton VHD-levykuva"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Full Flash Update -levykuva"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Tämän toiminnon käyttäminen vaatii lisätiedostojen lataamista Microsoftilta:\n"
|
||||
"- Valitse 'Kyllä' yhdistääksesi internetiin ja ladataksesi ne\n"
|
||||
"- Valitse 'Ei' peruuttaaksesi toiminnon"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Rajoita Windows S Mode-tilaan (EI YHTEENSOPIVA verkkotilin ohituksen kanssa)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Asiantuntijatila"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Puretaan tiedostoarkistoja: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Rufusin MBR:n käyttö"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -2,8 +2,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: 3.22\n"
|
||||
"Report-Msgid-Bugs-To: pete@akeo.ie\n"
|
||||
"POT-Creation-Date: 2023-07-10 11:13+0200\n"
|
||||
"PO-Revision-Date: 2023-07-10 11:25+0200\n"
|
||||
"POT-Creation-Date: 2024-04-25 12:25+0100\n"
|
||||
"PO-Revision-Date: 2024-04-25 12:46+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.3.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Lister les disques durs USB"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Ajouter les options de compatibilité pour vieux BIOS"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Utiliser le MBR Rufus avec ID"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Activer la validation des média sous UEFI"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -1041,16 +1039,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Cochez cette case pour permettre l’affichage des caractères étendus/internationaux et ajouter une icône (ceci crée un fichier autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Installe un MBR permettant la sélection du périphérique de démarrage. Peut aussi camoufler l’ID de disque pour le BIOS"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Camoufle le premier disque USB démarrable (généralement 0x80) sous une ID différente.\n"
|
||||
"Changez cette option si vous installez Windows XP avec plus d’un disque dur."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Installe un fichier de démarrage UEFI, qui effectue une validation MD5Sum du média"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1822,7 +1812,7 @@ msgstr "Supprimer la nécessité d'avoir 4Go+ de RAM, Secure Boot et TPM 2.0"
|
|||
|
||||
#. • MSG_330
|
||||
msgid "Remove requirement for an online Microsoft account"
|
||||
msgstr "Supprimer la nécessité d'utiliser un compte Microsoft en ligne"
|
||||
msgstr "Supprimer la nécessité d'utiliser un compte utilisateur Microsoft en ligne"
|
||||
|
||||
#. • MSG_331
|
||||
msgid "Disable data collection (Skip privacy questions)"
|
||||
|
@ -1908,6 +1898,22 @@ msgstr ""
|
|||
"- Sélectionnez 'Oui' pour vous connecter à Internet et le télécharger ces données\n"
|
||||
"- Sélectionnez 'Non' pour annuler l’opération"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Restreint Windows au mode \"S\" (INCOMPATIBLE avec l'option de désactivation d'un compte utilisateur Microsoft en ligne)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Mode expert"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Extraction d'archive : %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Utilisation du MBR Rufus"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-02-16 22:57+0200\n"
|
||||
"PO-Revision-Date: 2023-02-24 13:13+0000\n"
|
||||
"POT-Creation-Date: 2024-04-25 21:07+0300\n"
|
||||
"PO-Revision-Date: 2024-04-26 01:31+0300\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: he_IL\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Hebrew (עברית)\n"
|
||||
"X-Rufus-LCID: 0x040d\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "הצגת רשימה של כונני USB קשיחים"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "הוספת תיקונים ל־BIOS־ים ישנים (מחיצה נוספת, יישור...)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "שימוש ב־MBR של Rufus עם מזהה BIOS"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "הפעלת אימות מדיה של UEFI בזמן ריצה"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -481,7 +479,7 @@ msgstr "שגיאת התקנה"
|
|||
|
||||
#. • MSG_067
|
||||
msgid "Could not open media. It may be in use by another process. Please re-plug the media and try again."
|
||||
msgstr "לא ניתן לפתוח את המדיה. יתכן שהיא בשימוש על־ידי תהליך אחר. נא לחבר מחדש את המדיה ולנסות שוב."
|
||||
msgstr "לא ניתן לפתוח את המדיה. ייתכן שהיא בשימוש על־ידי תהליך אחר. נא לחבר מחדש את המדיה ולנסות שוב."
|
||||
|
||||
#. • MSG_068
|
||||
msgid "Could not partition drive."
|
||||
|
@ -572,7 +570,7 @@ msgid ""
|
|||
"Note: The new file will be downloaded in the current directory and once a '%s' exists there, it will be reused automatically."
|
||||
msgstr ""
|
||||
"נראה שקובץ ה־ISO הזה משתמש בגרסה מיושנת של '%s'.\n"
|
||||
"לפיכך, יתכן שתפריטי האתחול לא יוצגו כראוי.\n"
|
||||
"לפיכך, ייתכן שתפריטי האתחול לא יוצגו כראוי.\n"
|
||||
"\n"
|
||||
"Rufus יכול להוריד גרסה חדשה יותר כדי לתקן בעיה זו:\n"
|
||||
"- יש לבחור 'כן' כדי להתחבר לאינטרנט ולהוריד את הקובץ\n"
|
||||
|
@ -1043,16 +1041,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "יש לסמן תיבה זו כדי לאפשר הצגה של תוויות שם בינלאומיות וכדי להגדיר סמל להתקן (יוצר קובץ autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "מתקין MBR שמאפשר בחירת אתחול ויכול לגרום למזהה כונן ה־USB ב־BIOS להזדהות כמזהה אחר"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"מנסה לגרום לכונן ה־USB בר־האתחול הראשון (בדרך כלל 0x80) להזדהות כדיסק אחר.\n"
|
||||
"זה אמור להיות נחוץ רק אם ברצונך להתקין Windows XP ויש לך יותר מדיסק אחד."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "מתקין מנהל אתחול UEFI שיבצע אימות קבצים שעל המדיה בשיטת MD5Sum"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1127,7 +1117,7 @@ msgstr "כתובת ה־IP שלך"
|
|||
|
||||
#. • MSG_184
|
||||
msgid "For the purpose of generating private usage statistics, we may keep the information collected, \\b for at most a year\\b0 . However, we will not willingly disclose any of this individual data to third parties."
|
||||
msgstr "לצורך יצירת סטטיסטיקת שימוש פרטית, יתכן שנשמור את המידע שייאסף \\b לשנה לכל היותר\\b0 . עם זאת, אנחנו לא נמסור מרצוננו החופשי את הנתונים האלה לשום גורם צד שלישי."
|
||||
msgstr "לצורך יצירת סטטיסטיקת שימוש פרטית, ייתכן שנשמור את המידע שייאסף \\b לשנה לכל היותר\\b0 . עם זאת, אנחנו לא נמסור מרצוננו החופשי את הנתונים האלה לשום גורם צד שלישי."
|
||||
|
||||
#. • MSG_185
|
||||
msgid "Update Process:"
|
||||
|
@ -1665,7 +1655,7 @@ msgid ""
|
|||
"The last version of Rufus compatible with this platform is v%d.%d."
|
||||
msgstr ""
|
||||
"גרסה זו של Windows אינה נתמכת יותר על־ידי Rufus.\n"
|
||||
"הגרסה האחרונה של Rufus הנתמכת בפלטפורמה זו היא %d.%d."
|
||||
"הגרסה האחרונה של Rufus הנתמכת בפלטפורמה זו היא v%d.%d."
|
||||
|
||||
#. • MSG_295
|
||||
msgid "Warning: Unofficial version"
|
||||
|
@ -1862,6 +1852,82 @@ msgstr "השבתת הצפנת מכשיר אוטומטית של BitLocker"
|
|||
msgid "Persistent log"
|
||||
msgstr "יומן קבוע"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"יש להוריד קובץ נוסף ('diskcopy.dll') מ־Microsoft על מנת להתקין MS-DOS:\n"
|
||||
"- יש לבחור 'כן' כדי להתחבר לאינטרנט ולהוריד אותו\n"
|
||||
"- יש לבחור 'לא' כדי לבטל את הפעולה\n"
|
||||
"\n"
|
||||
"הערה: הקובץ יירד לספרייה בה ממוקם היישום וכל עוד הקובץ יהיה שם, Rufus ישתמש בו באופן אוטומטי במידת הצורך."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "אותר מנהל אתחול UEFI שנאסר לשימוש"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 איתר שקובץ ה־ISO שבחרת מכיל מנהל אתחול UEFI שנאסר לשימוש ושיציג %s, כאשר Secure Boot מופעל על מערכת UEFI מעודכנת לחלוטין.\n"
|
||||
"\n"
|
||||
"- אם השגת את קובץ תמונת ISO זה ממקור מפוקפק, כדאי לשקול את האפשרות שייתכן שהוא מכיל נוזקת UEFI, ולהימנע מלאתחל ממנו.\n"
|
||||
"- אם השגת אותה ממקור מהימן, כדאי לנסות לאתר גרסה יותר עדכנית, שלא תציג אזהרה זו."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "מסך \"הפרת אבטחה\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "מסך שחזור של Windows (BSOD) עם '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "קובץ תמונה VHDX מכווץ"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "קובץ תמונה VHD שאינו מכווץ"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "קובץ תמונה של Full Flash Update"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"יש להוריד נתונים נוספים מ־Microsoft על מנת להשתמש באפשרות זו:\n"
|
||||
"- יש לבחור 'כן' כדי להתחבר לאינטרנט ולהוריד אותם\n"
|
||||
"- יש לבחור 'לא' כדי לבטל את הפעולה"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "הגבלת ההתקנה של Windows למצב S-Mode (אינו נתמך עם האפשרות לעקיפת חשבון מקוון)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "מצב מומחה"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "מחלץ קובצי ארכיון: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "שימוש ב־MBR של Rufus"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-04-25 13:11+0100\n"
|
||||
"PO-Revision-Date: 2023-04-25 13:14+0100\n"
|
||||
"POT-Creation-Date: 2024-05-09 18:57+0200\n"
|
||||
"PO-Revision-Date: 2024-05-09 19:30+0200\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: hr_HR\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Croatian (Hrvatski)\n"
|
||||
"X-Rufus-LCID: 0x041a, 0x081a, 0x101a\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Prikaži USB čvrste diskove"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Dodavanje zakrpa za stari BIOS (dodatne particije, poravnanje, itd.)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Koristi Rufus MBR za BIOS ID"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Omogućite provjeru valjanosti UEFI medija"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -1041,16 +1039,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Potvrdite ovo da dozvolite prikaz internacionalnih oznaka i napravite ikonu (stvara autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Instaliraj MBR koji omogućuje boot odabir i može pretvoriti BIOS USB drive ID"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Maskiraj prvi butabilni USB pogon (uobičajeno 0x80) kao drugačiji disk.\n"
|
||||
"Ovo je potrebno ako instalirate Windows XP i imate više diskova."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Instaliraj UEFI bootloader koji će izvršiti MD5 Sum provjeru valjanosti datoteke medije"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1851,6 +1841,82 @@ msgstr "Onemogući BitLocker automatsko šifriranje uređaja"
|
|||
msgid "Persistent log"
|
||||
msgstr "Stalni zapisnik"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Dodatnu datoteku ('diskcopy.dll') potrebno je preuzeti s Microsofta da biste instalirali MS-DOS:\n"
|
||||
"- Odaberite 'Da' za spajanje na Internet i preuzimanje\n"
|
||||
"- Odaberite 'Ne' za poništavanje operacije\n"
|
||||
"\n"
|
||||
"Napomena: Datoteka će se preuzeti u imenik aplikacije i automatski će se ponovno koristiti ako postoji."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Otkriven opozvani UEFI pokretački program"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 je otkrio da ISO koji ste odabrali sadrži UEFI bootloader koji je opozvan i koji će proizvesti %s, kada je Secure Boot omogućen na potpuno ažuriranom UEFI sustavu.\n"
|
||||
"\n"
|
||||
"- Ako ste nabavili ovu ISO sliku iz izvora koji nije renomiran, trebali biste razmotriti mogućnost da ona sadrži zlonamjerni softver UEFI i izbjegavati pokretanje ga.\n"
|
||||
"- Ako ste ga dobili od pouzdanog izvora, trebali biste pokušati locirati noviju verziju koja neće proizvesti ovo upozorenje."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "zaslon \"Sigurnosna povreda\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "zaslon za oporavak sustava Windows (BSOD) s '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Komprimirana VHDX slika"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Nekomprimirana VHD slika"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Potpuna ažuriranje flash slike"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Za korištenje ove funkcije potrebno je preuzeti neke dodatne podatke od Microsofta:\n"
|
||||
"- Odaberite 'Da' za spajanje na Internet i preuzimanje\n"
|
||||
"- Odaberite 'Ne' za poništavanje operacije"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Ograniči Windows na S-Mode (NEKOMPATIBILNO s mrežnim zaobilaženjem računa)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Stručnog načina rada"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Izdvajanje arhivskih datoteka: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Koristiti Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-03-12 13:52+0000\n"
|
||||
"PO-Revision-Date: 2023-03-12 13:52+0000\n"
|
||||
"POT-Creation-Date: 2024-05-09 13:01+0200\n"
|
||||
"PO-Revision-Date: 2024-05-10 10:46+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: hu_HU\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Hungarian (Magyar)\n"
|
||||
"X-Rufus-LCID: 0x040e\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.4\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "USB merevlemezek listázása"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Javítások hozzáadása régi BIOS-okhoz (extra partíció, igazítás, stb.)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Rufus MBR használata BIOS azonosítóval"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Futásidejű UEFI adathordozó érvényesítés"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -1044,16 +1042,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Pipáld be a nemzetközi címkék megjelenítésének engedélyezéséhez, és az eszköz ikon beállításához (egy autorun.inf fájlt készít)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Olyan MBR telepítése, ami engedélyezi a boot meghajtó kiválasztását, és képes a BIOS USB eszköz azonosítóját maszkolni"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Próbáld meg az első bootolható USB eszközt (általában: 0x80) egy másik lemezként mutatni.\n"
|
||||
"Ez csak akkor lehet szükséges, ha Windows XP-t telepítesz, és egynél több lemezed van."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Olyan UEFI rendszerbetöltő telepítése, ami elvégzi az adathordozón található fájlok MD5Sum érvényesítését"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1855,6 +1845,82 @@ msgstr "BitLocker automatikus eszköz titkosítás letiltása"
|
|||
msgid "Persistent log"
|
||||
msgstr "Tartós naplózás"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Az MS-DOS telepítéséhez egy további fájlt ('diskcopy.dll') kell letölteni a Microsofttól:\n"
|
||||
"- Válaszd az 'Igen' gombot az internethez történő kapcsolódáshoz, és a fájl letöltéséhez\n"
|
||||
"- Válaszd a 'Nem' gombot a művelet megszakításához\n"
|
||||
"\n"
|
||||
"Megjegyzés: A fájl a program mappájába lesz letöltve, és automatikusan újra lesz használva, ha létezik."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Visszavont UEFI rendszerbetöltő detektálva"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 ""
|
||||
"A Rufus észlelte, hogy a kiválasztott ISO egy olyan UEFI rendszerbetöltőt tartalmaz, amelyet visszavontak, és ha a Secure Boot engedélyezve van egy teljesen naprakész UEFI rendszeren, akkor ehhez vezet: %s.\n"
|
||||
"\n"
|
||||
"- Ha ezt az ISO képet nem megbízható forrásból szerezted be, akkor számolnod kell azzal a lehetőséggel, hogy UEFI kártevőt tartalmazhat, és elkerülendő az erről történő rendszerindítás.\n"
|
||||
"- Ha megbízható forrásból szerezted be, akkor próbálj meg egy naprakészebb verziót találni, amelyre ez a figyelmeztetés nem jelenik meg."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "\"Security Violation\" képernyő"
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "Windows helyreállítási képernyő (BSOD / kék halál) ezzel: '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Tömörített VHDX képfájl"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Nem tömörített VHD képfájl"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Full Flash Update (FFU) képfájl"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"E funkcionalitás használatához néhány további adat letöltése szükséges a Microsofttól:\n"
|
||||
"- Válaszd az 'Igen' gombot az internethez történő csatlakozáshoz, és az adatok letöltéséhez\n"
|
||||
"- Válaszd a 'Nem' gombot a művelet megszakításához"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Windows korlátozása S módra (NEM KOMPATIBILIS az online Microsoft-fiók követelmény eltávolításával)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Szakértő mód"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Archív fájlok kibontása: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Rufus MBR használata"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-02-17 10:50+0100\n"
|
||||
"PO-Revision-Date: 2023-02-21 19:52+0000\n"
|
||||
"POT-Creation-Date: 2024-05-12 12:06+0100\n"
|
||||
"PO-Revision-Date: 2024-05-12 12:12+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: it_IT\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Italian (Italiano)\n"
|
||||
"X-Rufus-LCID: 0x0410, 0x0810\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.4\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -25,7 +25,7 @@ msgstr "Dispositivo/unità"
|
|||
|
||||
#. • IDD_DIALOG → IDS_BOOT_SELECTION_TXT
|
||||
msgid "Boot selection"
|
||||
msgstr "Selezione boot"
|
||||
msgstr "Tipo boot sistema"
|
||||
|
||||
#. • IDD_DIALOG → IDC_SELECT
|
||||
msgid "Select"
|
||||
|
@ -37,11 +37,11 @@ msgstr "Opzioni immagine"
|
|||
|
||||
#. • IDD_DIALOG → IDS_PARTITION_TYPE_TXT
|
||||
msgid "Partition scheme"
|
||||
msgstr "Schema partizione"
|
||||
msgstr "Tipo schema partizione"
|
||||
|
||||
#. • IDD_DIALOG → IDS_TARGET_SYSTEM_TXT
|
||||
msgid "Target system"
|
||||
msgstr "Sistema destinazione"
|
||||
msgstr "Tipo sistema destinazione"
|
||||
|
||||
#. • IDD_DIALOG → IDC_LIST_USB_HDD
|
||||
msgid "List USB Hard Drives"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Elenco unità disco USB"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Aggiungi correzioni per vecchi BIOS (partizioni extra, allineamento, etc)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Usa MBR Rufus con ID BIOS"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Abilita convalida multimediale UEFI in runtime"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -208,7 +206,7 @@ msgid ""
|
|||
"WARNING: ALL DATA ON DEVICE '%s' WILL BE DESTROYED.\n"
|
||||
"To continue with this operation, click OK. To quit click CANCEL."
|
||||
msgstr ""
|
||||
"ATTENZIONE: TUTTI I DATI SULL'UNITÀ '%s' SARANNO CANCELLATI.\n"
|
||||
"ATTENZIONE: TUTTI I DATI NELL'UNITÀ '%s' SARANNO CANCELLATI.\n"
|
||||
"Per continuare seleziona 'OK'. Per annullare seleziona 'ANNULLA'."
|
||||
|
||||
#. • MSG_004
|
||||
|
@ -677,7 +675,7 @@ msgid ""
|
|||
"Your platform cannot extract files from WIM archives. WIM extraction is required to create EFI bootable Windows 7 and Windows Vista USB drives. You can fix that by installing a recent version of 7-Zip.\n"
|
||||
"Do you want to visit the 7-zip download page?"
|
||||
msgstr ""
|
||||
"Il tuo sistema operativo non può estrarre file dall'archivio WIM. L'estrazione WIM è necessaria per creare una unità USB avviabile EFI Windows 7 e Windows Vista. Puoi correggere ciò installando una versione recente di 7-Zip.\n"
|
||||
"Il sistema operativo non può estrarre file dall'archivio WIM. L'estrazione WIM è necessaria per creare una unità USB avviabile EFI Windows 7 e Windows Vista. Puoi correggere ciò installando una versione recente di 7-Zip.\n"
|
||||
"Vuoi visitare la pagina web da cui scaricare 7-zip?"
|
||||
|
||||
#. • MSG_103
|
||||
|
@ -1048,17 +1046,9 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Abilita questa opzione per permettere la visualizzazione delle etichette internazionali e impostare una icona dispositivo (creerà un file autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Installa un MBR che permette la selezione all'avvio e maschera l'ID unità USB del BIOS"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Prova prima a mascherare l'unità avviabile USB (normalmente 0x80) come un disco differente.\n"
|
||||
"Questo potrebbe essere necessario solo se installi Windows XP e hai più di un disco."
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
"Create an extra hidden partition and try to align partitions boundaries.\n"
|
||||
|
@ -1100,7 +1090,7 @@ msgstr "Versione %d.%d (build %d)"
|
|||
|
||||
#. • MSG_176
|
||||
msgid "English translation: Pete Batard <mailto:pete@akeo.ie>"
|
||||
msgstr "Traduzione italiana a cura di bovirus"
|
||||
msgstr "Traduzione italiana a cura di R.B."
|
||||
|
||||
#. • MSG_177
|
||||
msgid "Report bugs or request enhancements at:"
|
||||
|
@ -1116,11 +1106,11 @@ msgstr "Policy aggiornamenti:"
|
|||
|
||||
#. • MSG_180
|
||||
msgid "If you choose to allow this program to check for application updates, you agree that the following information may be collected on our server(s):"
|
||||
msgstr "Se scegli di permettere a questo programma di controllare automaticamente gli aggiornamenti, accetti che le seguenti informazioni saranno catalogate nei nostri server:"
|
||||
msgstr "Se permetti a questo programma di controllare automaticamente gli aggiornamenti, accetti che le seguenti informazioni saranno catalogate nei nostri server:"
|
||||
|
||||
#. • MSG_181
|
||||
msgid "Your operating system's architecture and version"
|
||||
msgstr "L'architettura del tuo sistema operativo e la versione"
|
||||
msgstr "L'architettura del sistema operativo e la versione"
|
||||
|
||||
#. • MSG_182
|
||||
msgid "The version of the application you use"
|
||||
|
@ -1128,7 +1118,7 @@ msgstr "La versione dell'applicazione in uso"
|
|||
|
||||
#. • MSG_183
|
||||
msgid "Your IP address"
|
||||
msgstr "Il tuo indirizzo IP"
|
||||
msgstr "Indirizzo IP"
|
||||
|
||||
#. • MSG_184
|
||||
msgid "For the purpose of generating private usage statistics, we may keep the information collected, \\b for at most a year\\b0 . However, we will not willingly disclose any of this individual data to third parties."
|
||||
|
@ -1595,7 +1585,7 @@ msgstr "Non avviabile"
|
|||
|
||||
#. • MSG_280
|
||||
msgid "Disk or ISO image"
|
||||
msgstr "Immagine disco o ISO"
|
||||
msgstr "File immagine disco o file ISO"
|
||||
|
||||
#. • MSG_281
|
||||
msgid "%s (Please select)"
|
||||
|
@ -1820,7 +1810,7 @@ msgstr "Applicando opzioni utente..."
|
|||
|
||||
#. • MSG_327
|
||||
msgid "Windows User Experience"
|
||||
msgstr "Windows User Experience"
|
||||
msgstr "Esperienza utente Windows"
|
||||
|
||||
#. • MSG_328
|
||||
msgid "Customize Windows installation?"
|
||||
|
@ -1858,6 +1848,82 @@ msgstr "Disabilita la crittografia automatica dei dispositivi BitLocker"
|
|||
msgid "Persistent log"
|
||||
msgstr "Log persistente"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Per installare MS-DOS è necessario scaricare da Microsoft un file aggiuntivo (\"diskcopy.dll\"):\n"
|
||||
"- Seleziona 'Sì' per connettersi ad internet e scaricarlo\n"
|
||||
"- Seleziona 'No' per annullare l'operazione\n"
|
||||
"\n"
|
||||
"Nota: il file verrà scaricato nella cartella dell'applicazione e se presente verrà riutilizzato automaticamente."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Rilevato bootloader UEFI revocato"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 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 l'hai ottenuto da una sorgente attendibile, dovresti provare a cercare una versione più aggiornata, che non genererà questo avviso."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "una schermata \"Violazione sicurezza\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "una schermata di ripristino Windows (BSOD) con '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Immagine VHDX compressa"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Immagine VHD non compressa"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Immagine aggiornamento flash completa"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Per usare questa funzionalità è necessario scaricare da Microsoft alcuni dati aggiuntivi:\n"
|
||||
"- Seleziona 'Sì' per connettersi ad internet e scaricarli\n"
|
||||
"- Seleziona 'No' per annullare l'operazione"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Limita Windows alla modalità S (INCOMPATIBILE con il bypass dell'account online)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Modalità esperto"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Estrazione file archivio: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Usa MBR Rufus"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
@ -1874,7 +1940,7 @@ msgstr "Codice sorgente: %s"
|
|||
|
||||
#. • MSG_903
|
||||
msgid "ChangeLog: %s"
|
||||
msgstr "ChangeLog: %s"
|
||||
msgstr "Novità: %s"
|
||||
|
||||
#. • MSG_904
|
||||
#.
|
||||
|
|
|
@ -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: 2023-04-06 11:46+0900\n"
|
||||
"PO-Revision-Date: 2023-04-06 18:36+0200\n"
|
||||
"POT-Creation-Date: 2024-05-09 21:04+0900\n"
|
||||
"PO-Revision-Date: 2024-05-09 22:07+0900\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ja_JP\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Japanese (日本語)\n"
|
||||
"X-Rufus-LCID: 0x0411\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "USB 接続の HDD を一覧表示"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "古い BIOS のために修正を追加 (パーティションの拡張、並び替え、その他)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "BIOS ID で Rufus の MBR を作成"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "ランタイムUEFIメディア検証を有効化"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -1046,16 +1044,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "機能拡張されたラベルの表示とデバイス アイコンの設定を有効するにはこのチェック ボックスをオンにします。“autorun.inf” を作成します。"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "ブート選択が可能で BIOS の USB ドライブ ID に見えるよう偽装された MBR をインストールします。"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"最優先でブートする USB ドライブ (通常は 0x80) を別のディスクとして偽装します。\n"
|
||||
"Windows XP をインストールして複数のディスクを使用する場合にのみ必要です。"
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "MD5チェックサム検証を行うUEFIブートローダーをインストールします。"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1857,6 +1847,82 @@ msgstr "BitLocker 自動デバイス暗号化を無効化します。"
|
|||
msgid "Persistent log"
|
||||
msgstr "永続ログ"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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"
|
||||
"- はいを選択すると、インターネットに接続しダウンロードします。\n"
|
||||
"- いいえを選択すると、キャンセルします\n"
|
||||
"\n"
|
||||
"注意:ファイルはアプリケーションのディレクトリへダウンロードされ、今後自動的に再利用されます。"
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "無効なUEFIブートローダーが検出されました。"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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は選択されたISOイメージが無効なUEFIブートローダーを含み、最新のUEFIでセキュアブートが有効である場合%sを引き起こすことを検出しました。\n"
|
||||
"\n"
|
||||
"- このファイルが信頼できないソースから入手されたものであれば、マルウェア混入の可能性があるため起動しないことをお勧めします。\n"
|
||||
"- このファイルが信頼できるソースから取得したものであれば、警告が発生しない新しいバージョンを探すことをお勧めします。"
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "セキュリティ侵害表示"
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "\"%s\"によるWindowsのブルースクリーン"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "圧縮されたVHDXイメージ"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "圧縮されていないVHDイメージ"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Full Flash Updateイメージ"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"この機能を使用するにはMicrosoftから追加のファイルをいくつかダウンロードする必要があります。\n"
|
||||
"- はいを選択すると、インターネットに接続しダウンロードします。\n"
|
||||
"- いいえを選択すると、キャンセルします"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "WindowsのSモードを強制する(オンラインアカウント要件の削除と同時に使用できません)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "エキスパートモード"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "ファイルを展開中: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Rufus MBRを使用する"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-03-10 13:36+0000\n"
|
||||
"PO-Revision-Date: 2023-03-10 13:40+0000\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"
|
||||
"Language: ko_KR\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.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "USB 하드 드라이브 목록"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "오래된 BIOS에 대한 수정 추가 (추가 파티션, 정렬 등)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "BIOS ID로 Rufus MBR 사용"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "런타임 UEFI 미디어 유효성 검증 사용"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -175,11 +173,11 @@ msgstr "업데이트 확인 - Rufus"
|
|||
|
||||
#. • IDD_NEW_VERSION → IDS_NEW_VERSION_AVAIL_TXT
|
||||
msgid "A newer version is available. Please download the latest version!"
|
||||
msgstr "새 버전을 사용할 수 있습니다. 최신 버전을 다운로드하십시오!"
|
||||
msgstr "최신 버전을 사용할 수 있습니다. 최신 버전을 다운로드하세요!"
|
||||
|
||||
#. • IDD_NEW_VERSION → IDC_WEBSITE
|
||||
msgid "Click here to go to the website"
|
||||
msgstr "웹 사이트로 이동하려면 여기를 클릭하십시오"
|
||||
msgstr "웹사이트로 이동하려면 여기를 클릭하세요"
|
||||
|
||||
#. • IDD_NEW_VERSION → IDS_NEW_VERSION_NOTES_GRP
|
||||
msgid "Release Notes"
|
||||
|
@ -201,7 +199,7 @@ msgid ""
|
|||
"Please close the first application before running another one."
|
||||
msgstr ""
|
||||
"다른 Rufus 응용 프로그램이 실행 중입니다.\n"
|
||||
"다른 응용 프로그램을 실행하기 전에 첫 번째 응용 프로그램을 닫으십시오."
|
||||
"다른 응용 프로그램을 실행하기 전에 첫 번째 응용 프로그램을 닫아주세요."
|
||||
|
||||
#. • MSG_003
|
||||
msgid ""
|
||||
|
@ -209,7 +207,7 @@ msgid ""
|
|||
"To continue with this operation, click OK. To quit click CANCEL."
|
||||
msgstr ""
|
||||
"경고: '%s' 장치의 모든 데이터가 삭제됩니다.\n"
|
||||
"이 작업을 계속하려면 확인을 클릭하십시오. 끝내려면 취소를 클릭하십시오."
|
||||
"이 작업을 계속하려면 확인을 클릭합니다. 종료하려면 취소를 클릭합니다."
|
||||
|
||||
#. • MSG_004
|
||||
msgid "Rufus update policy"
|
||||
|
@ -217,7 +215,7 @@ msgstr "Rufus 업데이트 정책"
|
|||
|
||||
#. • MSG_005
|
||||
msgid "Do you want to allow Rufus to check for application updates online?"
|
||||
msgstr "Rufus가 온라인으로 응용프로그램 업데이트를 확인할 수 있도록 허용하시겠습니까?"
|
||||
msgstr "Rufus가 온라인으로 응용 프로그램 업데이트를 확인할 수 있도록 허용하시겠습니까?"
|
||||
|
||||
#. • MSG_007
|
||||
msgid "Cancel"
|
||||
|
@ -237,7 +235,7 @@ msgstr ""
|
|||
"검사 완료: %d개의 불량 블록을 찾았습니다\n"
|
||||
" %d개 읽기 오류\n"
|
||||
" %d개 쓰기 오류\n"
|
||||
" %d개 손상 오류"
|
||||
" %d개 손상 오류"
|
||||
|
||||
#. • MSG_012
|
||||
#.
|
||||
|
@ -433,7 +431,7 @@ msgstr "미디어가 쓰기 금지되어 있습니다."
|
|||
|
||||
#. • MSG_055
|
||||
msgid "The device is in use by another process. Please close any other process that may be accessing the device."
|
||||
msgstr "장치가 다른 프로세스에서 사용 중입니다. 장치에 액세스할 수 있는 다른 프로세스를 닫으십시오."
|
||||
msgstr "다른 프로세스에서 장치를 사용 중입니다. 장치에 액세스할 수 있는 다른 프로세스를 모두 닫으세요."
|
||||
|
||||
#. • MSG_056
|
||||
msgid "Quick format is not available for this device."
|
||||
|
@ -457,7 +455,7 @@ msgstr "볼륨 크기가 유효하지 않습니다."
|
|||
|
||||
#. • MSG_061
|
||||
msgid "Please insert a removable media in drive."
|
||||
msgstr "드라이브에 이동식 미디어를 삽입하십시오."
|
||||
msgstr "드라이브에 이동식 미디어를 삽입하세요."
|
||||
|
||||
#. • MSG_062
|
||||
msgid "An unsupported command was received."
|
||||
|
@ -481,7 +479,7 @@ msgstr "설치 실패"
|
|||
|
||||
#. • MSG_067
|
||||
msgid "Could not open media. It may be in use by another process. Please re-plug the media and try again."
|
||||
msgstr "미디어를 열 수 없습니다. 다른 프로세스에서 사용 중일 수 있습니다. 미디어를 다시 연결하고 다시 시도하십시오."
|
||||
msgstr "미디어를 열 수 없습니다. 다른 프로세스에서 사용 중일 수 있습니다. 미디어를 다시 연결하고 다시 시도하세요."
|
||||
|
||||
#. • MSG_068
|
||||
msgid "Could not partition drive."
|
||||
|
@ -575,8 +573,8 @@ msgstr ""
|
|||
"이로 인해 부팅 메뉴가 제대로 표시되지 않을 수 있습니다.\n"
|
||||
"\n"
|
||||
"Rufus는 이 문제를 해결하기 위해 최신 버전을 다운로드할 수 있습니다:\n"
|
||||
"- 인터넷에 연결하고 파일을 다운로드하려면 '예'를 선택하십시오.\n"
|
||||
"- 기존 ISO 파일을 수정하지 않은 상태로 두려면 '아니오'를 선택하십시오.\n"
|
||||
"- 인터넷에 연결하고 파일을 다운로드하려면 '예'를 선택합니다\n"
|
||||
"- 기존 ISO 파일을 수정하지 않은 상태로 두려면 '아니오'를 선택합니다\n"
|
||||
"무엇을 해야 할지 모르면 '예'를 선택해야 합니다.\n"
|
||||
"\n"
|
||||
"참고: 새 파일이 현재 디렉터리에 다운로드되고 '%s'가 있으면 자동으로 재사용됩니다."
|
||||
|
@ -614,7 +612,7 @@ msgstr "지원되지 않는 ISO"
|
|||
|
||||
#. • 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 "UEFI 대상 유형을 사용하는 경우 EFI 부팅 ISO 이미지만 지원됩니다. EFI 부팅 ISO를 선택하거나 대상 유형을 BIOS로 설정하십시오."
|
||||
msgstr "UEFI 대상 유형을 사용하는 경우, EFI 부팅 가능한 ISO 이미지만 지원됩니다. EFI 부팅 가능한 ISO를 선택하거나 대상 유형을 BIOS로 설정하세요."
|
||||
|
||||
#. • MSG_092
|
||||
msgid "Unsupported filesystem"
|
||||
|
@ -640,7 +638,7 @@ msgstr "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 "현재 선택한 파일 시스템은 이 유형의 ISO에서 사용할 수 없습니다. 다른 파일 시스템을 선택하거나 다른 ISO를 사용하십시오."
|
||||
msgstr "현재 선택한 파일 시스템은 이 유형의 ISO와 함께 사용할 수 없습니다. 다른 파일 시스템을 선택하거나 다른 ISO를 사용하세요."
|
||||
|
||||
#. • MSG_097
|
||||
msgid "'%s' can only be applied if the file system is NTFS."
|
||||
|
@ -702,8 +700,8 @@ msgstr ""
|
|||
"이 파일은 크기가 100KB 이상이고 항상 %s ISO 이미지에 존재하기 때문에 Rufus에 포함되어 있지 않습니다.\n"
|
||||
"\n"
|
||||
"Rufus가 누락된 파일을 다운로드할 수 있습니다:\n"
|
||||
"- 인터넷에 연결하고 파일을 다운로드하려면 '예'를 선택하십시오\n"
|
||||
"- 나중에 드라이브에 이 파일을 수동으로 복사하려면 '아니오'를 선택하십시오\n"
|
||||
"- 인터넷에 연결하고 파일을 다운로드하려면 '예'를 선택합니다\n"
|
||||
"- 나중에 드라이브에 이 파일을 수동으로 복사하려면 '아니오'를 선택합니다\n"
|
||||
"\n"
|
||||
"참고: 파일이 현재 디렉터리에 다운로드되고 '%s'가 있으면 자동으로 재사용됩니다."
|
||||
|
||||
|
@ -713,11 +711,11 @@ msgid ""
|
|||
"If you are sure you want to cancel, click YES. Otherwise, click NO."
|
||||
msgstr ""
|
||||
"취소하면 장치를 사용할 수 없는 상태가 될 수 있습니다.\n"
|
||||
"취소하려면 예를 클릭하십시오. 그렇지 않으면 아니요를 클릭합니다."
|
||||
"취소하려면 예를 클릭합니다. 그렇지 않으면 아니오를 클릭합니다."
|
||||
|
||||
#. • MSG_106
|
||||
msgid "Please select folder"
|
||||
msgstr "폴더를 선택하십시오"
|
||||
msgstr "폴더를 선택하세요"
|
||||
|
||||
#. • MSG_107
|
||||
msgid "All files"
|
||||
|
@ -740,7 +738,7 @@ msgid ""
|
|||
"Please change the Cluster size or use FreeDOS."
|
||||
msgstr ""
|
||||
"MS-DOS는 64KB 클러스터 크기를 사용하는 드라이브에서 부팅할 수 없습니다.\n"
|
||||
"클러스터 크기를 변경하거나 FreeDOS를 사용하십시오."
|
||||
"클러스터 크기를 변경하거나 FreeDOS를 사용하세요."
|
||||
|
||||
#. • MSG_111
|
||||
msgid "Incompatible Cluster size"
|
||||
|
@ -769,8 +767,8 @@ msgstr ""
|
|||
"이 이미지에서는 Syslinux %s%s를 사용하지만 이 응용 프로그램에는 Syslinux %s%s에 대한 설치 파일만 포함됩니다.\n"
|
||||
"\n"
|
||||
"새 버전의 Syslinux는 서로 호환되지 않으므로 Rufus가 모두 포함할 수 없으므로 인터넷에서 두 개의 추가 파일 ('ldlinux.sys' 및 'ldlinux.bss')을 다운로드해야 합니다:\n"
|
||||
"- 인터넷에 연결하고 이러한 파일을 다운로드하려면 '예'를 선택하십시오\n"
|
||||
"- 작업을 취소하려면 '아니오'를 선택하십시오\n"
|
||||
"- 인터넷에 연결하고 이러한 파일을 다운로드하려면 '예'를 선택합니다\n"
|
||||
"- 작업을 취소하려면 '아니오'를 선택합니다\n"
|
||||
"\n"
|
||||
"참고: 파일은 현재 응용 프로그램 디렉터리에 다운로드되며 있는 경우 자동으로 재사용됩니다."
|
||||
|
||||
|
@ -795,9 +793,9 @@ msgstr ""
|
|||
"이 이미지는 Grub %s을(를) 사용하지만 응용 프로그램에는 Grub %s에 대한 설치 파일만 포함합니다.\n"
|
||||
"\n"
|
||||
"다른 버전의 Grub은 서로 호환되지 않을 수 있으며, 모두 포함할 수 없기 때문에 Rufus는 이미지에서 일치하는 Grub 설치 파일 ('core.img')의 버전을 찾으려고 시도합니다:\n"
|
||||
"- 인터넷에 연결하고 다운로드하려면 '예'를 선택하십시오\n"
|
||||
"- Rufus의 기본 버전을 사용하려면 '아니요'를 선택하십시오\n"
|
||||
"- 작업을 중단하려면 '취소'를 선택하십시오\n"
|
||||
"- 인터넷에 연결하고 다운로드하려면 '예'를 선택합니다\n"
|
||||
"- Rufus의 기본 버전을 사용하려면 '아니오'를 선택합니다\n"
|
||||
"- 작업을 중단하려면 '취소'를 선택합니다\n"
|
||||
"\n"
|
||||
"참고: 파일은 현재 응용 프로그램 디렉터리에 다운로드되며 있는 경우 자동으로 재사용됩니다. 일치하는 항목을 온라인으로 찾을 수 없는 경우 기본 버전이 사용됩니다."
|
||||
|
||||
|
@ -870,7 +868,7 @@ msgid ""
|
|||
"For details on why this is necessary, see the 'More Information' button below."
|
||||
msgstr ""
|
||||
"UEFI:NTFS 부트 로더를 사용하는 미디어를 방금 만들었습니다. 이 미디어를 부팅하려면 보안 부팅을 비활성화해야 합니다.\n"
|
||||
"이 작업이 필요한 이유에 대한 자세한 내용은 아래의 '추가 정보' 버튼을 참조하십시오."
|
||||
"이 기능이 필요한 이유에 대한 자세한 내용은 아래의 '추가 정보' 버튼을 참조하세요."
|
||||
|
||||
#. • MSG_130
|
||||
msgid "Windows image selection"
|
||||
|
@ -882,7 +880,7 @@ msgid ""
|
|||
"Please select the image you wish to use for this installation:"
|
||||
msgstr ""
|
||||
"이 ISO에는 여러 개의 Windows 이미지가 포함되어 있습니다.\n"
|
||||
"이 설치에 사용할 이미지를 선택하십시오:"
|
||||
"이 설치에 사용할 이미지를 선택하세요:"
|
||||
|
||||
#. • MSG_132
|
||||
msgid "Another program or process is accessing this drive. Do you want to format it anyway?"
|
||||
|
@ -950,7 +948,7 @@ msgstr "브라우저를 사용하여 다운로드"
|
|||
|
||||
#. • MSG_144
|
||||
msgid "Download of Windows ISOs is unavailable due to Microsoft having altered their website to prevent it."
|
||||
msgstr "너무 많은 다운로드를 요청하여 Microsoft에서 일시적으로 금지했습니다. 나중에 다시 시도하십시오."
|
||||
msgstr "Microsoft가 이를 방지하기 위해 웹사이트를 변경했기 때문에 Windows ISO를 다운로드할 수 없습니다."
|
||||
|
||||
#. • MSG_145
|
||||
msgid "PowerShell 3.0 or later is required to run this script."
|
||||
|
@ -970,7 +968,7 @@ msgstr "ISO 이미지 다운로드"
|
|||
|
||||
#. • MSG_150
|
||||
msgid "Type of computer you plan to use this bootable drive with. It is your responsibility to determine whether your target is of BIOS or UEFI type before you start creating the drive, as it may fail to boot otherwise."
|
||||
msgstr "이 부팅 드라이브를 사용할 컴퓨터 유형입니다. 드라이브 생성을 시작하기 전에 대상이 BIOS인지 UEFI 유형인지 확인하는 것은 사용자의 책임입니다. 그렇지 않으면 부팅에 실패할 수 있습니다."
|
||||
msgstr "이 부팅 가능한 드라이브를 사용하려는 컴퓨터 유형입니다. 드라이브를 만들기 전에 대상이 BIOS인지 UEFI 유형인지 확인해야 합니다. 그렇지 않으면 부팅에 실패할 수도 있기 때문입니다."
|
||||
|
||||
#. • MSG_151
|
||||
#.
|
||||
|
@ -1012,7 +1010,7 @@ msgid ""
|
|||
"International characters are accepted."
|
||||
msgstr ""
|
||||
"이 필드를 사용하여 드라이브 레이블을 설정합니다.\n"
|
||||
"국제 문자는 사용할 수 있습니다."
|
||||
"국제 문자를 사용할 수 있습니다."
|
||||
|
||||
#. • MSG_160
|
||||
msgid "Toggle advanced options"
|
||||
|
@ -1028,31 +1026,23 @@ msgstr "\"느린\" 포맷 방법을 사용하려면 이 상자의 선택을 취
|
|||
|
||||
#. • MSG_163
|
||||
msgid "Method that will be used to create partitions"
|
||||
msgstr "파티션을 만드는 데 사용할 방식입니다"
|
||||
msgstr "파티션을 만드는 데 사용할 방법"
|
||||
|
||||
#. • MSG_164
|
||||
msgid "Method that will be used to make the drive bootable"
|
||||
msgstr "드라이브를 부팅 가능한 상태로 만드는 데 사용되는 방식입니다"
|
||||
msgstr "드라이브를 부팅 가능하게 만드는 데 사용되는 방법"
|
||||
|
||||
#. • MSG_165
|
||||
msgid "Click to select or download an image..."
|
||||
msgstr "이미지를 선택하거나 다운로드하려면 클릭하십시오..."
|
||||
msgstr "이미지를 선택하거나 다운로드하려면 클릭..."
|
||||
|
||||
#. • MSG_166
|
||||
msgid "Check this box to allow the display of international labels and set a device icon (creates an autorun.inf)"
|
||||
msgstr "국제 레이블을 표시하고 장치 아이콘을 설정하려면 이 확인란을 선택합니다 (autorun.inf 생성)."
|
||||
msgstr "이 확인란을 선택하면 국제 레이블 표시를 허용하고 장치 아이콘을 설정할 수 있습니다 (autorun.inf 생성)."
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "부팅 선택을 허용하고 BIOS USB 드라이브 ID를 위장할 수 있는 MBR 설치"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"부팅 가능한 첫 번째 USB 드라이브 (일반적으로 0x80)를 다른 디스크로 위장해 보십시오.\n"
|
||||
"Windows XP를 설치하고 디스크가 두 개 이상인 경우에만 필요합니다."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "미디어의 MD5Sum 파일 유효성 검사를 수행할 UEFI 부트로더 설치"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1095,7 +1085,7 @@ msgstr "버전 %d.%d (빌드 %d)"
|
|||
|
||||
#. • MSG_176
|
||||
msgid "English translation: Pete Batard <mailto:pete@akeo.ie>"
|
||||
msgstr "한국어 번역:\\line• Uk-Jin Jang <mailto:doublestat@gmail.com>\\line• 비너스걸-VᴇɴᴜsGɪʀʟ♥ <mailto:venusgirl@outlook.com>"
|
||||
msgstr "한국어 번역:\\line• 비너스걸 (VᴇɴᴜsGɪʀʟ♥) <mailto:venusgirl@outlook.com>"
|
||||
|
||||
#. • MSG_177
|
||||
msgid "Report bugs or request enhancements at:"
|
||||
|
@ -1111,7 +1101,7 @@ msgstr "업데이트 정책:"
|
|||
|
||||
#. • MSG_180
|
||||
msgid "If you choose to allow this program to check for application updates, you agree that the following information may be collected on our server(s):"
|
||||
msgstr "이 프로그램에서 응용프로그램 업데이트를 확인하도록 선택한 경우, 다음 정보가 서버에서 수집될 수 있다는 데 동의하는 것입니다:"
|
||||
msgstr "이 프로그램에서 응용 프로그램 업데이트를 확인하도록 선택한 경우, 다음 정보가 서버에서 수집될 수 있다는 데 동의하는 것입니다:"
|
||||
|
||||
#. • MSG_181
|
||||
msgid "Your operating system's architecture and version"
|
||||
|
@ -1147,7 +1137,7 @@ msgstr "선택한 부팅 옵션에 대한 잘못된 이미지"
|
|||
|
||||
#. • MSG_188
|
||||
msgid "The current image doesn't match the boot option selected. Please use a different image or choose a different boot option."
|
||||
msgstr "현재 이미지가 선택한 부팅 옵션과 일치하지 않습니다. 다른 이미지를 사용하거나 다른 부팅 옵션을 선택하십시오."
|
||||
msgstr "현재 이미지가 선택한 부팅 옵션과 일치하지 않습니다. 다른 이미지를 사용하거나 다른 부팅 옵션을 선택하세요."
|
||||
|
||||
#. • MSG_189
|
||||
msgid "This ISO image is not compatible with the selected filesystem"
|
||||
|
@ -1378,7 +1368,7 @@ msgstr "Syslinux %s 설치 중..."
|
|||
#. Bad blocks status. Example: "Bad Blocks: Write pass 1/2 - 12.34% (0/0/1 errors)"
|
||||
#. See MSG_191 & MSG_192 for "Write pass"/"Read pass" translation.
|
||||
msgid "Bad Blocks: %s %d/%d - %0.2f%% (%d/%d/%d errors)"
|
||||
msgstr "불량 블록: 통과 %d/%d - %0.2f%% (%d/%d/%d 오류)"
|
||||
msgstr "불량 블록: %s %d/%d - %0.2f%% (%d/%d/%d 오류)"
|
||||
|
||||
#. • MSG_236
|
||||
msgid "Bad Blocks: Testing with random pattern"
|
||||
|
@ -1406,9 +1396,9 @@ msgid ""
|
|||
"\n"
|
||||
"The download will be deleted. Please check the log for more details."
|
||||
msgstr ""
|
||||
"다운로드한 업데이트의 서명을 확인할 수 없습니다. 이는 시스템이 서명 유효성 검사를 위해 잘못 구성되었거나 악의적인 다운로드를 나타냈음을 의미할 수 있습니다.\n"
|
||||
"다운로드한 업데이트의 서명을 확인할 수 없습니다. 이는 시스템이 서명 유효성 검사를 위해 잘못 구성되었거나 악의적인 다운로드를 의미할 수 있습니다.\n"
|
||||
"\n"
|
||||
"다운로드가 삭제됩니다. 자세한 내용은 로그를 확인하십시오."
|
||||
"다운로드가 삭제됩니다. 자세한 내용은 로그에서 확인하세요."
|
||||
|
||||
#. • MSG_241
|
||||
msgid "Downloading: %s"
|
||||
|
@ -1462,7 +1452,7 @@ msgstr "크기 확인"
|
|||
|
||||
#. • MSG_253
|
||||
msgid "Hard disk detection"
|
||||
msgstr "하드디스크 감지"
|
||||
msgstr "하드 디스크 감지"
|
||||
|
||||
#. • MSG_254
|
||||
msgid "Force large FAT32 formatting"
|
||||
|
@ -1564,9 +1554,9 @@ msgid ""
|
|||
msgstr ""
|
||||
"선택한 이미지는 'ISO 하이브리드' 이미지입니다. 즉, %s (파일 복사) 모드 또는 %s (디스크 이미지) 모드로 쓸 수 있습니다.\n"
|
||||
"Rufus는 %s 모드를 사용하는 것이 좋습니다. 따라서 드라이브를 작성한 후에는 항상 드라이브에 대한 전체 액세스 권한을 가질 수 있습니다.\n"
|
||||
"그러나 부팅하는 동안 문제가 발생하면 %s 모드에서 이 이미지를 다시 쓰십시오.\n"
|
||||
"그러나 부팅하는 동안 문제가 발생하면 %s 모드에서 이 이미지를 다시 작성해 볼 수 있습니다.\n"
|
||||
"\n"
|
||||
"이 이미지를 쓰는 데 사용할 모드를 선택하십시오:"
|
||||
"이 이미지를 작성하는 데 사용할 모드를 선택하세요:"
|
||||
|
||||
#. • MSG_276
|
||||
#.
|
||||
|
@ -1594,7 +1584,7 @@ msgstr "디스크 또는 ISO 이미지"
|
|||
|
||||
#. • MSG_281
|
||||
msgid "%s (Please select)"
|
||||
msgstr "%s (선택하십시오)"
|
||||
msgstr "%s (선택해 주세요)"
|
||||
|
||||
#. • MSG_282
|
||||
msgid "Exclusive USB drive locking"
|
||||
|
@ -1620,11 +1610,11 @@ msgstr ""
|
|||
|
||||
#. • MSG_286
|
||||
msgid "Zeroing drive: %s"
|
||||
msgstr "드라이브 0 채우기: %s"
|
||||
msgstr "드라이브 제로화 중: %s"
|
||||
|
||||
#. • MSG_287
|
||||
msgid "Detection of non-USB removable drives"
|
||||
msgstr "USB가 아닌 이동식 드라이브가 감지됩니다"
|
||||
msgstr "비 USB 이동식 드라이브 감지"
|
||||
|
||||
#. • MSG_288
|
||||
msgid "Missing elevated privileges"
|
||||
|
@ -1644,7 +1634,7 @@ msgstr "버전 선택"
|
|||
|
||||
#. • MSG_292
|
||||
msgid "Please select the version of Windows you want to install:"
|
||||
msgstr "설치할 Windows 버전을 선택하십시오:"
|
||||
msgstr "설치하려는 Windows 버전을 선택하세요:"
|
||||
|
||||
#. • MSG_293
|
||||
msgid "Unsupported Windows version"
|
||||
|
@ -1702,7 +1692,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Rufus가 다운로드한 업데이트의 타임스탬프가 현재 실행 파일의 타임스탬프보다 최신인지 확인할 수 없습니다.\n"
|
||||
"\n"
|
||||
"잠재적인 공격 시나리오를 방지하기 위해 업데이트 프로세스가 중단되었으며 다운로드가 삭제됩니다. 자세한 내용은 로그를 확인하십시오."
|
||||
"잠재적인 공격 시나리오를 방지하기 위해 업데이트 프로세스가 중단되었으며 다운로드가 삭제됩니다. 자세한 내용은 로그를 확인하시기 바랍니다."
|
||||
|
||||
#. • MSG_301
|
||||
msgid "Show application settings"
|
||||
|
@ -1751,7 +1741,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"선택한 ISO는 UEFI를 사용하며 EFI 시스템 파티션 (ESP)으로 작성할 수 있을 정도로 작습니다. 일부 유형의 설치에서는 전체 디스크를 차지하는 일반 데이터 파티션에 쓰는 대신 ESP에 쓰는 것이 바람직할 수 있습니다.\n"
|
||||
"\n"
|
||||
"이 이미지를 쓰는 데 사용할 모드를 선택하십시오:"
|
||||
"이 이미지를 작성하는 데 사용할 모드를 선택하세요:"
|
||||
|
||||
#. • MSG_311
|
||||
msgid "Use %s (in the main application window) to enable."
|
||||
|
@ -1853,6 +1843,82 @@ msgstr "BitLocker 자동 장치 암호화 사용 안 함"
|
|||
msgid "Persistent log"
|
||||
msgstr "영구 로그"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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"
|
||||
"- 인터넷에 연결하여 다운로드하려면 '예'를 선택합니다\n"
|
||||
"- 작업을 취소하려면 '아니오'를 선택합니다\n"
|
||||
"\n"
|
||||
"참고: 해당 파일은 응용 프로그램의 디렉터리에 다운로드되며 존재하는 경우 자동으로 재사용됩니다."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "취소된 UEFI 부트로더가 탐지됨"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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는 사용자가 선택한 ISO에 취소된 UEFI 부트로더가 포함되어 있으며, 이는 완전히 최신 UEFI 시스템에서 보안 부팅이 활성화된 경우에 %s을(를) 생성한다는 것을 감지했습니다.\n"
|
||||
"\n"
|
||||
"- 평판이 좋지 않은 소스에서 이 ISO 이미지를 가져온 경우 UEFI 멀웨어가 포함되어 있을 가능성을 고려하고 부팅을 피해야 합니다.\n"
|
||||
"- 신뢰할 수 있는 소스에서 가져온 경우에는 보다 최신 버전을 찾아야 합니다. 그러면 이 경고가 발생하지 않습니다.."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "\"보안 위반\" 화면"
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "%s이(가) 있는 Windows 복구 화면 (BSOD)"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "압축된 VHDX 이미지"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "압축되지 않은 VHD 이미지"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "전체 플래시 업데이트 이미지"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"이 기능을 사용하려면 Microsoft에서 몇 가지 추가 데이터를 다운로드해야 합니다:\n"
|
||||
"- 인터넷에 연결하여 다운로드하려면 '예'를 선택합니다\n"
|
||||
"- 작업을 취소하려면 '아니오'를 선택합니다"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Windows를 S-Mode로 제한 (온라인 계정 우회와 호환되지 않음)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "전문가 모드"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "압축 파일 추출 중: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Rufus MBR 사용"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-02-24 15:38+0200\n"
|
||||
"PO-Revision-Date: 2023-02-26 22:12+0000\n"
|
||||
"POT-Creation-Date: 2024-05-14 16:22+0100\n"
|
||||
"PO-Revision-Date: 2024-05-14 16:22+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: lv_LV\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Latvian (Latviešu)\n"
|
||||
"X-Rufus-LCID: 0x0426\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.4\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "USB disku saraksts"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Pievienot vecāku BIOSu labojumus (partīcijām, dalījumam, u.c.)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Izmantot MBR ar BIOS ID"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Ieslēgt UEFI nesēja pārbaudi izpildīšanas laikā"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -117,7 +115,7 @@ msgstr "Licence"
|
|||
|
||||
#. • IDD_ABOUTBOX → IDOK
|
||||
msgid "OK"
|
||||
msgstr "Aprstiprināt"
|
||||
msgstr "Apstiprināt"
|
||||
|
||||
#. • IDD_LICENSE → IDD_LICENSE
|
||||
msgid "Rufus License"
|
||||
|
@ -273,11 +271,11 @@ msgstr "Citādi"
|
|||
|
||||
#. • MSG_018
|
||||
msgid "Your version: %d.%d (Build %d)"
|
||||
msgstr "Jūsu versija: %d.%d (Build %d)"
|
||||
msgstr "Jūsu versija: %d.%d (Būvējums %d)"
|
||||
|
||||
#. • MSG_019
|
||||
msgid "Latest version: %d.%d (Build %d)"
|
||||
msgstr "Pēdējā versija: %d.%d (Build %d)"
|
||||
msgstr "Pēdējā versija: %d.%d (Būvējums %d)"
|
||||
|
||||
#. • MSG_020
|
||||
#. • MSG_026
|
||||
|
@ -768,7 +766,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Šis virtuālais attēls izmanto Syslinux %s%s, bet programma satur instalācijas failus Syslinux %s%s.\n"
|
||||
"\n"
|
||||
"Tā kā jaunās Syslinux versijas nav savstarpēji atbalstāmas, nepieciešams ielādēt no interneta vajadzīgos failus ('ldlinux.sys' un 'ldlinux.bss'):\n"
|
||||
"Tā kā jaunās Syslinux versijas nav savstarpēji atbalstāmas, nepieciešams ielādēt no interneta vajadzīgos failus ('ldlinux.sys' un 'ldlinux.bss'):\n"
|
||||
"- Izvēlieties 'Jā' lai pieslēgtos pie interneta un mēģināt ielādētu šos failus\n"
|
||||
"- Izvēlieties 'Nē' lai atceltu šo darbību\n"
|
||||
"\n"
|
||||
|
@ -914,7 +912,7 @@ msgstr ""
|
|||
|
||||
#. • MSG_135
|
||||
msgid "Version"
|
||||
msgstr "Vesija"
|
||||
msgstr "Versija"
|
||||
|
||||
#. • MSG_136
|
||||
msgid "Release"
|
||||
|
@ -1043,23 +1041,15 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Atzīmējiet starptautisko simbolu atbalstam un ierīces ikonas izveidei (tiek izveidots fails autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Instalēt MBR, kur var izvēlēties ielādi un kurš var maskēties BIOS'ā ar ierīces identifikatoru"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Mēģināt maskēt pirmo USB ielādes ierīci (parasti 0x80) kā citu disku.\n"
|
||||
"Tas nepieciešams, kad instalējat Windows XP un izmantojat vairāk nekā vienu dieskus."
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
"Create an extra hidden partition and try to align partitions boundaries.\n"
|
||||
"This can improve boot detection for older BIOSes."
|
||||
msgstr ""
|
||||
"IZveidot papildus slēpto partīciju un izlīdzināt partīciju robežas.\n"
|
||||
"Izveidot papildus slēpto partīciju un izlīdzināt partīciju robežas.\n"
|
||||
"Šī opcija var atvieglot ielādes noteikšanu vecākās BIOS versijās."
|
||||
|
||||
#. • MSG_170
|
||||
|
@ -1734,7 +1724,7 @@ msgstr "Ātrā diska nullēšana: %s"
|
|||
|
||||
#. • MSG_307
|
||||
msgid "this may take a while"
|
||||
msgstr "Šī darbība var aizņemt laiku"
|
||||
msgstr "šī darbība var aizņemt laiku"
|
||||
|
||||
#. • MSG_308
|
||||
msgid "VHD detection"
|
||||
|
@ -1750,7 +1740,7 @@ msgid ""
|
|||
"\n"
|
||||
"Please select the mode that you want to use to write this image:"
|
||||
msgstr ""
|
||||
"Izvēlētais ISO-fails izmanto UEFI un ir pietiekoši mazs, lai varētu tikt ierakstīts, kā EFI (ESP) sistēmas sadaļa. Ieraksts iekš ESP, nevis kopējā datu sadaļā, kas aizņem visu disku, var būt ieteicamāks dažu ielāžu tipiem.\n"
|
||||
"Izvēlētais ISO-fails izmanto UEFI un ir pietiekoši mazs, lai varētu tikt ierakstīts, kā EFI (ESP) sistēmas sadaļa. Ieraksts iekš ESP, nevis kopējā datu sadaļā, kas aizņem visu disku, var būt ieteicamāks dažu ielāžu tipiem.\n"
|
||||
"\n"
|
||||
"Izvēlieties to režīmu, kuru nepieciešams izmantot lai ierakstīt šo virtuālo attēlu:"
|
||||
|
||||
|
@ -1816,7 +1806,7 @@ msgstr "Lietotāja opciju pielietošana..."
|
|||
|
||||
#. • MSG_327
|
||||
msgid "Windows User Experience"
|
||||
msgstr "Windows User Experience"
|
||||
msgstr "Windows lietotāju pieredze"
|
||||
|
||||
#. • MSG_328
|
||||
msgid "Customize Windows installation?"
|
||||
|
@ -1854,6 +1844,82 @@ msgstr "Atslēgt automātisko šifrēšanu ar BitLocker"
|
|||
msgid "Persistent log"
|
||||
msgstr "Pastāvīgs žurnāls"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Lai instalēt MS-DOS no Microsoft vietnes nepieciešams lejuplādēt papildus failu («diskcopy.dll»):\n"
|
||||
"- Izvēlieties «Jā», lai pieslēgties pie Interneta un failu lejuplādēt.\n"
|
||||
"- Izvēlieties «Nē», lai atcelt darbību.\n"
|
||||
"\n"
|
||||
"Piezīme. Fails tiks lejuplādēts programmas mapē, ja tas jau eksistē, tiks izmantots atkārtoti."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Pamanīts atceltais UEFI ielādes ieraksts"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 konstatēja Jūsu izvēlētais ISO-fails satur atceltu UEFI ielādes ierakstu, kurš izdos %s, ja būs ieslēgta drošā ielāde pilnīgi jauninātajā UEFI sistēmā.\n"
|
||||
"\n"
|
||||
"- Ja šis ISO fails ir iegūts no nedrošiem avotiem, vajag ņemt vērā, ka tas var saturēt UEFI ļaunatūru un censties no tā nestartēt.\n"
|
||||
"- Ja fails iegūts no droša avota, būtu jāatrod jaunāka versija, kurai nerādīs šādu brīdinājumu."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "a \"Drošības pārkāpuma\" ekrāns"
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "a Windows atkopšanas ekrāns (BSOD) ar '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Saspiests VHDX attēls"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Nesaspiests VHDX attēls"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Full Flash atjauninājuma attēls"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Lai izmantotu šo funkcionalitāti, no Microsoft ir jālejupielādē daži papildus dati:\n"
|
||||
"- Izvēlieties 'Jā', lai izveidotu savienojumu ar Internetu un lejupielādētu tos\n"
|
||||
"- Izvēlieties \"Nē\", lai atceltu darbību"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Ierobežot Windows tikai S režīmā (NESADERĪGS ar tiešsaistes konta apiešanu)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Eksperta režīms"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Atpakot arhīva failus: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Izmantot Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
@ -1887,7 +1953,7 @@ msgstr ""
|
|||
#.
|
||||
#. Keyword for "boot" will be used for search in the Windows Store
|
||||
msgid "Boot"
|
||||
msgstr ""
|
||||
msgstr "Ielāde"
|
||||
|
||||
#. • MSG_910
|
||||
#.
|
||||
|
|
|
@ -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: 2023-04-17 13:44+0100\n"
|
||||
"PO-Revision-Date: 2024-01-10 12:20+0000\n"
|
||||
"POT-Creation-Date: 2024-05-09 19:38+0100\n"
|
||||
"PO-Revision-Date: 2024-05-09 19:44+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: nb_NO\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Norwegian (Norsk)\n"
|
||||
"X-Rufus-LCID: 0x0414\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
"X-Generator: Poedit 3.4.4\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Før opp USB harddisker"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Legger til fiks for gamle BIOSer (ekstra partisjon, etc.)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Bruk Rufus MBR med BIOS ID"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Aktiver runtime UEFI-medievalidering"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -1043,16 +1041,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Merk denne boksen for å tillate visning av internasjonal merkelapp og lage et stasjonsikon (lager en autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Installerer en MBR som tillater oppstartsvalg og kan maskere BIOS USB-stasjons ID"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Forsøk å maskere første oppstartbare USB-stasjon (vanligvis 0x80) som en annen stasjon.\n"
|
||||
"Dette er kun nødvendig hvis du installerer Windows XP og har mer enn en stasjon."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Installer en UEFI bootloader, som vil utføre MD5Sum-filvalidering av media"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1095,7 +1085,7 @@ msgstr "Versjon %d.%d (Utgave %d)"
|
|||
|
||||
#. • MSG_176
|
||||
msgid "English translation: Pete Batard <mailto:pete@akeo.ie>"
|
||||
msgstr "Norsk oversettelse:\\line• JED <mailto:translator744@outlook.com>\\line• Thorbjørn Bruarøy <mailto:problemkontroll@gmail.com>\\line• Jakub Zieciak <mailto:jakub.zieciak@gmail.com>"
|
||||
msgstr "Norsk oversettelse:\\line• JED <mailto:translator744@outlook.com>\\line• Thorbjørn Bruarøy <mailto:problemkontroll@gmail.com>\\line• Jakub Zieciak"
|
||||
|
||||
#. • MSG_177
|
||||
msgid "Report bugs or request enhancements at:"
|
||||
|
@ -1843,7 +1833,7 @@ msgstr "Lag en lokal brukerkonto med brukernavnet:"
|
|||
|
||||
#. • MSG_334
|
||||
msgid "Set regional options to the same values as this user's"
|
||||
msgstr "Sett regionale instillinger til det samme som den aktive brukerkontoen"
|
||||
msgstr "Sett regionale innstillinger til det samme som den aktive brukerkontoen"
|
||||
|
||||
#. • MSG_335
|
||||
msgid "Disable BitLocker automatic device encryption"
|
||||
|
@ -1853,6 +1843,82 @@ msgstr "Deaktiver BitLocker kryptering av enheten"
|
|||
msgid "Persistent log"
|
||||
msgstr "Behold log"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ekstra fil ('diskcopy.dll') må lastes ned fra Microsoft for å installere MS-DOS:\n"
|
||||
"- Velg \"Ja\" for å koble til Internett og laste den ned\n"
|
||||
"- Velg 'Nei' for å avbryte operasjonen\n"
|
||||
"\n"
|
||||
"Merk: Filen vil bli lastet ned i programmets katalog og vil automatisk bli gjenbrukt hvis den er tilstede."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Opphevet UEFI bootloader oppdaget"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 oppdaget at ISO-en du har valgt inneholder en UEFI-oppstartslaster som har blitt tilbakekalt og som vil produsere %s, når sikker oppstart er aktivert på et fullstendig oppdatert UEFI-system.\n"
|
||||
"\n"
|
||||
"- Hvis du har fått dette ISO-bildet fra en ikke-anerkjent kilde, bør du vurdere muligheten for at det kan inneholde UEFI-malware og unngå å starte opp fra det.\n"
|
||||
"- Hvis du har fått det fra en pålitelig kilde, bør du prøve å finne en mer oppdatert versjon, som ikke vil gi denne advarselen."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "en \"Sikkerhetsbrudd\"-skjerm"
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "en Windows-gjenopprettingsskjerm (BSOD) med '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Komprimert VHDX-imaget"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Ukomprimert VHD-imaget"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Full Flash Update Image"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Noen tilleggsdata må lastes ned fra Microsoft for å bruke denne funksjonaliteten:\n"
|
||||
"- Velg \"Ja\" for å koble til Internett og laste den ned\n"
|
||||
"- Velg 'Nei' for å avbryte operasjonen"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Begrens Windows til S-modus (INKOMPATIBEL med online kontoomgåelse)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Ekspert modus"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Pakker ut arkivfiler: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Bruk Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-02-17 09:03+0100\n"
|
||||
"PO-Revision-Date: 2023-02-17 17:02+0000\n"
|
||||
"POT-Creation-Date: 2024-04-26 11:15+0200\n"
|
||||
"PO-Revision-Date: 2024-04-26 11:44+0200\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: nl_NL\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Dutch (Nederlands)\n"
|
||||
"X-Rufus-LCID: 0x0413, 0x0813\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "USB-harde schijven weergeven"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Oplossingen voor oude BIOS'en toevoegen (extra partitie, uitlijnen, etc.)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Rufus MBR met BIOS ID gebruiken"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Media-validatie via UEFI inschakelen"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -92,7 +90,7 @@ msgstr "Uitgebreid label en pictogrambestanden aanmaken"
|
|||
|
||||
#. • IDD_DIALOG → IDS_STATUS_TXT
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
msgstr ""
|
||||
|
||||
#. • IDD_DIALOG → IDCANCEL
|
||||
#. • IDD_LICENSE → IDCANCEL
|
||||
|
@ -139,7 +137,7 @@ msgstr "Nee"
|
|||
|
||||
#. • IDD_LOG → IDD_LOG
|
||||
msgid "Log"
|
||||
msgstr "Log"
|
||||
msgstr ""
|
||||
|
||||
#. • IDD_LOG → IDC_LOG_CLEAR
|
||||
msgid "Clear"
|
||||
|
@ -282,7 +280,7 @@ msgstr "Laatste versie: %d.%d (Build %d)"
|
|||
#. • MSG_020
|
||||
#. • MSG_026
|
||||
msgid "bytes"
|
||||
msgstr "bytes"
|
||||
msgstr ""
|
||||
|
||||
#. • MSG_021
|
||||
#.
|
||||
|
@ -294,19 +292,19 @@ msgstr "kB"
|
|||
#.
|
||||
#. *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
|
||||
#.
|
||||
|
@ -811,7 +809,7 @@ msgstr "Standaard Windows-installatie"
|
|||
#. 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"
|
||||
|
@ -918,7 +916,7 @@ msgstr "Versie"
|
|||
|
||||
#. • MSG_136
|
||||
msgid "Release"
|
||||
msgstr "Release"
|
||||
msgstr ""
|
||||
|
||||
#. • MSG_137
|
||||
msgid "Edition"
|
||||
|
@ -1043,16 +1041,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Aanvinken om weergave van internationale labels toe te laten en een apparaat-pictogram in te stellen (maakt een autorun.inf aan)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Installeert een MBR die een opstartselectie toestaat en de BIOS USB-drive ID kan verbergen"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Probeert de eerste opstartbare USB drive (gewoonlijk 0x80) voor te laten doen als een andere schijf.\n"
|
||||
"Dit is alleen nodig als u Windows XP installeert en meer dan één schijf heeft."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Installeert een UEFI-bootloader die bij elke opstart vanaf het medium een MD5Sum-bestandsvalidatie uitvoert op het medium zelf"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1759,7 +1749,7 @@ msgstr "Gebruik %s (in het hoofdvenster) om in te schakelen."
|
|||
|
||||
#. • MSG_312
|
||||
msgid "Extra hashes (SHA512)"
|
||||
msgstr "Extra hashes (SHA512)"
|
||||
msgstr ""
|
||||
|
||||
#. • MSG_313
|
||||
msgid "Save to VHD"
|
||||
|
@ -1851,7 +1841,83 @@ msgstr "Automatische Bitlocker-apparaatversleuteling uitschakelen"
|
|||
|
||||
#. • MSG_336
|
||||
msgid "Persistent log"
|
||||
msgstr "Persistent log"
|
||||
msgstr ""
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Er moet een extra bestand ('diskcopy.dll') worden gedownload van Microsoft om MS-DOS te installeren:\n"
|
||||
"- Selecteer 'Ja' om verbinding te maken met internet en het bestand te downloaden\n"
|
||||
"- Selecteer 'Nee' om de bewerking te annuleren\n"
|
||||
"\n"
|
||||
"Opmerking: het bestand wordt gedownload in de map van de toepassing en wordt automatisch opnieuw gebruikt als het aanwezig is."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Ingetrokken UEFI-bootloader gedetecteerd"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 heeft gedetecteerd dat de ISO die u hebt geselecteerd een UEFI-bootloader bevat die is ingetrokken en %s zal produceren wanneer Secure Boot is ingeschakeld op een volledig bijgewerkt UEFI-systeem.\n"
|
||||
"\n"
|
||||
"- Als u deze ISO-image hebt verkregen van een niet-vertrouwde bron, houdt u best rekening met de mogelijkheid dat het UEFI-malware bevat en vermijdt u om ervan op te starten.\n"
|
||||
"- Als u het van een betrouwbare bron hebt verkregen, moet u proberen een meer up-to-date versie te vinden die deze waarschuwing niet produceert."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "een \"Security Violation\"-scherm"
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "een Windows-herstelscherm (BSOD) met '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Gecomprimeerde VHDX-image"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Niet-gecomprimeerde VHD-image"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Full Flash Update image"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Om deze functionaliteit te kunnen gebruiken, moeten enkele extra gegevens worden gedownload van Microsoft:\n"
|
||||
"- Selecteer 'Ja' om verbinding te maken met internet en ze te downloaden\n"
|
||||
"- Selecteer 'Nee' om de bewerking te annuleren"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Windows beperken tot S-Modus (NIET COMPATIBEL met omzeiling voor online account)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Expert-modus"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Archiefbestanden uitpakken: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Rufus MBR gebruiken"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
|
@ -1886,7 +1952,7 @@ msgstr ""
|
|||
#.
|
||||
#. Keyword for "boot" will be used for search in the Windows Store
|
||||
msgid "Boot"
|
||||
msgstr "Boot"
|
||||
msgstr "Opstarten"
|
||||
|
||||
#. • MSG_910
|
||||
#.
|
||||
|
|
|
@ -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: 2023-03-16 00:35+0000\n"
|
||||
"PO-Revision-Date: 2023-04-05 12:41+0200\n"
|
||||
"POT-Creation-Date: 2024-05-09 19:08+0100\n"
|
||||
"PO-Revision-Date: 2024-05-09 19:38+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: pl_PL\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Polish (Polski)\n"
|
||||
"X-Rufus-LCID: 0x0415\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.4\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Pokaż dyski twarde USB"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Dodaj łatkę dla starych BIOSów (dodatkowa partycja, itp.)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Użyj MBR Rufusa z ID BIOSu"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Włącz weryfikację nośnika UEFI w czasie wykonywania"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -1043,16 +1041,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Zaznacz to pole, aby zezwolić na wyświetlanie etykiet międzynarodowych i ustawić ikonę urządzenia (tworzy plik autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Instaluje MBR, który pozwala wybrać uruchamianie i może zmienić ID dysku USB w BIOSie"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Próbuje przedstawić pierwszy bootowalny dysk USB (zazwyczaj 0x80) jako inny dysk.\n"
|
||||
"Będzie to konieczne tylko przy instalowaniu Windowsa XP i posiadaniu więcej niż jednego dysku."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Zainstaluj bootloader UEFI, który przeprowadzi weryfikację typu MD5SUM na nośniku"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1095,7 +1085,7 @@ msgstr "Wersja %d.%d (Build %d)"
|
|||
|
||||
#. • MSG_176
|
||||
msgid "English translation: Pete Batard <mailto:pete@akeo.ie>"
|
||||
msgstr "Polskie tłumaczenie:\\line• Piotr Halama <http://halamix2.pl>\\line• Krzysztof J. Szklarski\\line• Jakub Zieciak <mailto:jakub.zieciak@gmail.com>\\line• Jakub Mierzejewski <mailto:jakmierzejewski@gmail.com>"
|
||||
msgstr "Polskie tłumaczenie:\\line• Piotr Halama <http://halamix2.pl>\\line• Krzysztof J. Szklarski\\line• Jakub Zieciak\\line• Jakub Mierzejewski <mailto:jakmierzejewski@gmail.com>"
|
||||
|
||||
#. • MSG_177
|
||||
msgid "Report bugs or request enhancements at:"
|
||||
|
@ -1853,6 +1843,82 @@ msgstr "Dezaktywuj automatyczne szyfrowanie BitLocker"
|
|||
msgid "Persistent log"
|
||||
msgstr "Stały dziennik (log)"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Dodatkowy plik (\"diskcopy.dll\") musi zostać pobrany od Microsoft, żeby zainstalować MS-DOS:\n"
|
||||
"- Wybierz opcję \"Tak\", aby pobrać pliku z internetu\n"
|
||||
"- Wybierz opcję \"Nie\", aby anulować operajcę\n"
|
||||
"\n"
|
||||
"Uwaga: Plik zostanie pobrany do folderu aplikacji i będzie użyty pownownie, gdy będzie dostępny."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Wykryto unieważniony bootloader UEFI"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 wykrył, że wybrany plik ISO zawiera bootloader UEFI, który został unieważniony, i który wygenereuje %s. gdy włączony zostanie \"Secure Boot\" w pełni zaktualizowanym systemie UEFI.\n"
|
||||
"\n"
|
||||
"- Jeśli uzyskałeś ten obraz ISO z niezaufanego źródła, powinienneś rozważyć możliwość, że może on zawierać złośliwe oprogramowanie dla UEFI i unikać jego uruchamiania.\n"
|
||||
"- Jeśli uzyskałeś go z zaufanego źródła, powinieneś spróbować znaleźć nowszą wersję, która nie wygeneruje tego ostrzeżenia."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "ekran \"Naruszenie Bezpieczeństwa\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "\"Ekran odzyskiwania systemu Windows\" (BSOD) z '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Zkompresowany obraz VHDX"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Zdekompresowany obraz VHD"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Obraz typu \"aktualizacja full flush\""
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Aby móc korzystać z tej funkcji, należy pobrać pewne dodatkowe dane od firmy Microsoft:\n"
|
||||
"- Wybierz opcję „Tak”, aby połączyć się z Internetem i pobrać plik\n"
|
||||
"- Wybierz opcję „Nie”, aby anulować operację"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Ogranicz system Windows do trybu S (NIEZGODNY z obejściem konta online)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Tryb eksperta"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Wypakowywanie plików z archiwum: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Użyj Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2022-06-07 16:25+0100\n"
|
||||
"PO-Revision-Date: 2023-03-17 14:32+0000\n"
|
||||
"POT-Creation-Date: 2024-05-01 14:24-0300\n"
|
||||
"PO-Revision-Date: 2024-05-04 12:06+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: pt_BR\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Portuguese Brazilian (Português do Brasil)\n"
|
||||
"X-Rufus-LCID: 0x0416\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Listar Discos Rígidos USB"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Opções de compatibilidade para BIOSs antigos"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Usar MBR do Rufus com ID de BIOS"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Habilitar validação de mídia UEFI"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -655,7 +653,7 @@ 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 ""
|
||||
"IMPORTANTE: Você está tentando instalar 'Windows Para Levar', porém o drive de destino não tem o atributo 'FIXED'. Portanto, é possível que o Windows trave durante a inicialização, pois a Microsoft não o desenvolveu para funcionar em drives que, em lugar daquele, tenham o atributo 'REMOVABLE'. \n"
|
||||
"IMPORTANTE: Você está tentando instalar 'Windows To Go', porém o drive de destino não tem o atributo 'FIXED'. Portanto, é possível que o Windows trave durante a inicialização, pois a Microsoft não o desenvolveu para funcionar em drives que, em lugar daquele, tenham o atributo 'REMOVABLE'. \n"
|
||||
"\n"
|
||||
"Você ainda deseja continuar?\n"
|
||||
"\n"
|
||||
|
@ -1044,16 +1042,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Selecione esta opção para permitir a exibição de caracteres acentuados e atribuir um ícone para a unidade (cria um arquivo autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Instalar um MBR que permita a seleção de inicialização e possa mascarar o ID de identificação do drive USB do BIOS"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Tenta mascarar o primeiro drive USB inicializável (geralmente 0x80) como um disco diferente.\n"
|
||||
"Isso só deve ser necessário se você instalar o Windows XP e tiver mais de um disco."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Instalar um carregador de inicialização que realizará validação da mídia usando MD5Sum"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1202,7 +1192,7 @@ msgstr "Detectado tamanho de setor fora do padrão"
|
|||
|
||||
#. • MSG_198
|
||||
msgid "'Windows To Go' can only be installed on a GPT partitioned drive if it has the FIXED attribute set. The current drive was not detected as FIXED."
|
||||
msgstr "'Windows Para Levar' só pode ser instalado em um drive particionado como GPT se ele tiver o atributo FIXO ativo. O drive atual não apresenta o atributo FIXO."
|
||||
msgstr "'Windows To Go' só pode ser instalado em um drive particionado como GPT se ele tiver o atributo FIXO ativo. O drive atual não apresenta o atributo FIXO."
|
||||
|
||||
#. • MSG_199
|
||||
msgid "This feature is not available on this platform."
|
||||
|
@ -1722,9 +1712,7 @@ msgid "Create a disk image of the selected device"
|
|||
msgstr "Criar uma imagem do dispositivo selecionado"
|
||||
|
||||
#. • MSG_305
|
||||
msgid ""
|
||||
"Use this option to indicate if you plan to install Windows to a different disk, or if you want to run Windows directly from this drive (Windows To Go).\r\n"
|
||||
"In 'Extended Windows 11 Installation' mode, Rufus will patch the media so that Windows 11 can be installed on platforms that don't meet the TPM 2.0 or Secure Boot requirements."
|
||||
msgid "Use this option to indicate if you plan to install Windows to a different disk, or if you want to run Windows directly from this drive (Windows To Go)."
|
||||
msgstr "Use esta opção caso queira instalar o Windows neste dispositivo ou em outro, ou se deseja rodar o Windows direto deste dispositivo (Windows To Go)."
|
||||
|
||||
#. • MSG_306
|
||||
|
@ -1856,6 +1844,82 @@ msgstr "Desativar a encriptação automática BitLocker"
|
|||
msgid "Persistent log"
|
||||
msgstr "Registo persistente"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Um arquivo adicional ('diskcopy.dll') precisa ser baixado da Microsoft para instalar o MS-DOS:\n"
|
||||
"- Selecione 'Sim' para se conectar à Internet e baixá-lo\n"
|
||||
"- Selecione 'Não' para cancelar a operação\n"
|
||||
"\n"
|
||||
"Nota: O arquivo será baixado no diretório da aplicação e será reutilizado automaticamente caso presente."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Detectado carregador de inicialização UEFI revogado"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 detectou que o ISO selecionado contém um carregador de inicialização UEFI que foi revogado e produzirá %s quando Secure Boot estiver habilitado em um sistema UEFI atualizado.\n"
|
||||
"\n"
|
||||
"- Se você obteve essa imagem ISO de uma fonte não confiável, você deve considerar a possibilidade da mesma conter malware UEFI e evitar inicializar através dela.\n"
|
||||
"- Se você a obteve de uma fonte confiável, você deve tentar achar uma versão mais recente, que não produza este aviso."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "uma tela \"Security Violation\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "uma tela de Reparo do Windows (BSOD) com '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Imagem VHDX comprimida"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Imagem VHD não comprimida"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Imagem Full Flash Update"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Alguns dados adicionais precisam ser baixados da Microsoft para usar essa funcionalidade:\n"
|
||||
"- Selecione 'Sim' para se conectar à Internet e baixá-los\n"
|
||||
"- Selecione 'Não' para cancelar a operação"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Restringir Windows ao modo S (INCOMPATÍVEL com remoção de exigência de conta online)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Modo Especialista"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Extraindo arquivos: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Usar MBR do Rufus"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-03-20 12:57+0000\n"
|
||||
"PO-Revision-Date: 2023-03-20 12:57+0000\n"
|
||||
"POT-Creation-Date: 2024-04-25 21:23+0300\n"
|
||||
"PO-Revision-Date: 2024-04-25 22:00+0300\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: ro_RO\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Romanian (Română)\n"
|
||||
"X-Rufus-LCID: 0x0418, 0x0818\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Afișare unități conectate prin USB"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Adăugare remedieri pentru BIOS-uri vechi (partiție extra, aliniere, etc.)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Utilizare MBR Rufus cu ID BIOS"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Activați validarea mediilor UEFI în timpul execuției"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -338,7 +336,7 @@ msgstr "BIOS (sau UEFI-CSM)"
|
|||
|
||||
#. • MSG_032
|
||||
msgid "UEFI (non CSM)"
|
||||
msgstr ""
|
||||
msgstr "UEFI (fără CSM)"
|
||||
|
||||
#. • MSG_033
|
||||
msgid "BIOS or UEFI"
|
||||
|
@ -1043,16 +1041,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Bifați această casetă pentru a permite afișarea etichetelor internaționale și pentru a seta o pictogramă pentru dispozitiv (se va crea un fișier autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Instalează un MBR care permite pornirea și selecția dispozitivului USB din BIOS"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Se va încerca mascarea primei unități USB (de obicei 0x80) ca fiind un alt disc.\n"
|
||||
"Acest lucru este necesar numai dacă instalați Windows XP și aveți mai mult decât un singur disc."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Instalează un bootloader UEFI care poate performa validări MD5sum a fișierelor media"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1853,6 +1843,82 @@ msgstr "Blochează BitLocker de la encriptarea automată a dispozitivului"
|
|||
msgid "Persistent log"
|
||||
msgstr "Logare persistentă"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 fișier adițional ('diskcopy.dll') trebuie să fie descărcat de la Microsoft pentru a instala MS-DOS:\n"
|
||||
"- Selectează 'Da' ca să te conectezi la Internet și să le descarci\n"
|
||||
"- Selectează 'Nu' pentru a anula operațiunea\n"
|
||||
"\n"
|
||||
"Notiță: Acest fișier va fi descărcat in aceeași locație cu aplicația și va fi reutilizat automat dacă este prezent."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Bootloader UEFI nepermis detectat"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 a detectat că fișierul ISO care lai selectat conține un bootloader UEFI care nu este permis si ar produce %s, cand Secure Boot este activat pe un system UEFI actualizat.\n"
|
||||
"\n"
|
||||
"- Dacă ai făcut rost de aceasta imagine ISO de la o sursă de neîncredere, este recomandat să consideri posibilitatea că ar putea conține malware UEFI ce nu ar permite pornirea de la aceasta.\n"
|
||||
"- Dacă ai făcut rost de aceasta de la o sursă de încredere, ar putea fi necesară căutarea unei versiuni mai noi, care nu ar produce acest avertisment."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "un ecran de \"Încălcare de Securitate\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "un ecran de Recuperare Windows (BSOD) cu '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Imagine VHDX comprimată"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Imagine VHD necomprimată"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Flash complet de imagine de actualizare"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Niște date adiționale trebuie descărcate de la Microsoft pentru a folosii această funție:\n"
|
||||
"- Selectează 'Da' ca să te conectezi la Internet și să le descarci\n"
|
||||
"- Selectează 'Nu' pentru a anula operațiunea"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Restricționează Windows la S-Mode (INCOMPATIBIL cu bypass-ul pentru un cont online)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Mod expert"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Extractând fișiere arhivate: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Folosește Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,10 +1,10 @@
|
|||
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: 2023-02-26 22:16+0000\n"
|
||||
"PO-Revision-Date: 2023-02-26 22:16+0000\n"
|
||||
"Last-Translator: \n"
|
||||
"POT-Creation-Date: 2024-05-12 10:18+0200\n"
|
||||
"PO-Revision-Date: 2024-05-12 10:38+0200\n"
|
||||
"Last-Translator: martinco78\n"
|
||||
"Language-Team: \n"
|
||||
"Language: sk_SK\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Slovak (Slovensky)\n"
|
||||
"X-Rufus-LCID: 0x041B\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.4\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Zobraziť zoznam USB pevných diskov (USB HDD)"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Pridať úpravy pre staré BIOSy (extra partície, ...)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Použiť Rufus MBR s BIOS ID"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Povoliť overenie médií UEFI v runtime režime"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -117,7 +115,7 @@ msgstr "Licencia"
|
|||
|
||||
#. • IDD_ABOUTBOX → IDOK
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
msgstr "OK"
|
||||
|
||||
#. • IDD_LICENSE → IDD_LICENSE
|
||||
msgid "Rufus License"
|
||||
|
@ -290,31 +288,31 @@ msgstr "bajtov"
|
|||
#.
|
||||
#. *Short* version of the kilobyte size suffix
|
||||
msgid "KB"
|
||||
msgstr ""
|
||||
msgstr "KB"
|
||||
|
||||
#. • MSG_022
|
||||
#.
|
||||
#. *Short* version of the megabyte size suffix
|
||||
msgid "MB"
|
||||
msgstr ""
|
||||
msgstr "MB"
|
||||
|
||||
#. • MSG_023
|
||||
#.
|
||||
#. *Short* version of the gigabyte size suffix
|
||||
msgid "GB"
|
||||
msgstr ""
|
||||
msgstr "GB"
|
||||
|
||||
#. • MSG_024
|
||||
#.
|
||||
#. *Short* version of the terabyte size suffix
|
||||
msgid "TB"
|
||||
msgstr ""
|
||||
msgstr "TB"
|
||||
|
||||
#. • MSG_025
|
||||
#.
|
||||
#. *Short* version of the pentabyte size suffix
|
||||
msgid "PB"
|
||||
msgstr ""
|
||||
msgstr "PB"
|
||||
|
||||
#. • MSG_027
|
||||
msgid "kilobytes"
|
||||
|
@ -397,7 +395,7 @@ msgstr "Úložné zariadenie USB (všeobecné)"
|
|||
|
||||
#. • MSG_046
|
||||
msgid "%s (Disk %d) [%s]"
|
||||
msgstr ""
|
||||
msgstr "%s (Disk %d) [%s]"
|
||||
|
||||
#. • MSG_047
|
||||
#.
|
||||
|
@ -491,7 +489,7 @@ msgstr "Nie je možné vytvoriť oddiely."
|
|||
|
||||
#. • MSG_069
|
||||
msgid "Could not copy files to target drive."
|
||||
msgstr "Nie je možné kopírovať súbory do cieľovej jednotky."
|
||||
msgstr "Nie je možné kopírovať súbory do cieľovej jednotky."
|
||||
|
||||
#. • MSG_070
|
||||
msgid "Cancelled by user."
|
||||
|
@ -735,7 +733,7 @@ msgstr "Záznam programu Rufus"
|
|||
|
||||
#. • MSG_109
|
||||
msgid "0x%02X (Disk %d)"
|
||||
msgstr ""
|
||||
msgstr "0x%02X (Disk %d)"
|
||||
|
||||
#. • MSG_110
|
||||
#.
|
||||
|
@ -745,7 +743,7 @@ 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 nemôže byť bootovaný z jednotky používajúcich klastre s veľkosťou 64kb.\n"
|
||||
"Systém MS-DOS nemôže byť spustený z jednotky používajúcej klastre s veľkosťou 64kb.\n"
|
||||
"Zmeňte veľkosť klastra alebo použite FreeDOS."
|
||||
|
||||
#. • MSG_111
|
||||
|
@ -774,7 +772,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Tento obraz používa Syslinux %s%s ale tento program obsahuje inštaláciu pre Syslinux %s%s.\n"
|
||||
"\n"
|
||||
"Ak nová verzia Syslinuxu nie je kompaktibilná s ďalším obrazom, je možné, že program Rufus neobsahuje dva doplnkové súbory, ktoré budú musieť byť stiahnuté z internetu (ldlinux.sys a ldlinux.bss):\n"
|
||||
"Ak nová verzia Syslinuxu nie je kompaktibilná s ďalším obrazom, je možné, že program Rufus neobsahuje dva doplnkové súbory, ktoré budú musieť byť stiahnuté z internetu (ldlinux.sys a ldlinux.bss):\n"
|
||||
"- Stlačte „Áno\" pre stiahnutie týchto súborov z internetu\n"
|
||||
"- Stlačte „Nie\" pre zrušenie operácie\n"
|
||||
"\n"
|
||||
|
@ -1051,16 +1049,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Označením tohto políčka povolíte v názve disku zobrazenie medzinárodných znakov a vytvorenie ikony zariadenia (vytvorením súboru autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Inštalovaním MBR programu povolíte výber pri bootovaní a možnosť maskovania použitím BIOS USB drive ID"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Vyskúšajte maskovanie prvej bootovacej USB jednotky (zvyčajne 0x80) ako odlišného disku.\n"
|
||||
"Toto je nevyhnutné, ak chcete inštalovať Windows XP a máte viac ako jeden disk."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Nainštalovať zavádzač UEFI, ktorý vykoná overenie média prostredníctvom MD5Sum súboru"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1861,6 +1851,82 @@ msgstr "Vypnutie automatického šifrovania zariadenia BitLocker"
|
|||
msgid "Persistent log"
|
||||
msgstr "Trvalý záznam činností"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Pre inštaláciu systému MS-DOS je potrebné prevziať od spoločnosti Microsoft ďalší súbor („diskcopy.dll\"):\n"
|
||||
"- Výberom možnosti „Áno\" ho stiahnete z internetu\n"
|
||||
"- Výberom možnosti „Nie\" zrušíte operáciu\n"
|
||||
"\n"
|
||||
"Poznámka: Súbor sa stiahne do adresára aplikácie a automaticky sa znova použije, ak je k dispozícii."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Bol zistený zrušený zavádzač UEFI"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 ""
|
||||
"Program Rufus zistil, že ISO, ktoré ste vybrali, obsahuje zavádzač UEFI, ktorý bol zrušený a ktorý bude produkovať %s, keď je povolené zabezpečené spustenie na plne aktuálnom systéme UEFI.\n"
|
||||
"\n"
|
||||
"- Ak ste tento obraz ISO získali z neseriózneho zdroja, mali by ste zvážiť možnosť, že by mohol obsahovať malvér UEFI a vyhnúť sa bootovaniu z neho.\n"
|
||||
"- Ak ste ho získali z dôveryhodného zdroja, mali by ste sa pokúsiť nájsť aktuálnejšiu verziu, ktorá toto upozornenie nespustí."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "obrazovka „Narušenie bezpečnosti\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "a Obrazovka obnovenia systému Windows (BSOD) s %s"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Komprimovaný obraz VHDX"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Nekomprimovaný obraz VHD"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Obraz úplnej flash aktualizácie"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Ak chcete používať túto funkciu, musíte si od spoločnosti Microsoft stiahnuť niektoré ďalšie dáta:\n"
|
||||
"- Výberom možnosti „Áno\" ich stiahnete z internetu\n"
|
||||
"- Výberom možnosti „Nie\" zrušíte túto operáciu"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Obmedziť systém Windows s režimom S (NEKOMPATIBILNÝ s obídením konta online)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Expertný režim"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Extrahovanie archívnych súborov: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Použiť Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
@ -1894,7 +1960,7 @@ msgstr ""
|
|||
#.
|
||||
#. Keyword for "boot" will be used for search in the Windows Store
|
||||
msgid "Boot"
|
||||
msgstr ""
|
||||
msgstr "boot"
|
||||
|
||||
#. • MSG_910
|
||||
#.
|
||||
|
|
|
@ -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: 2023-02-17 17:21+0000\n"
|
||||
"PO-Revision-Date: 2023-02-17 17:22+0000\n"
|
||||
"POT-Creation-Date: 2024-05-10 22:14+0200\n"
|
||||
"PO-Revision-Date: 2024-05-10 22:25+0200\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: sr_RS\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Serbian (Srpski)\n"
|
||||
"X-Rufus-LCID: 0x241a, 0x081a, 0x181a, 0x2c1a, 0x701a, 0x7c1a\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.4\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Pokaži USB čvrste diskove"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Dodaj ispravke za stare BIOS-e (dodatne particije, svrstanje, itd.)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Koristi Rufus MBR sa BIOS ID-em"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Омогућите проверу UEFI медија током извршавања"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -545,7 +543,7 @@ msgstr ""
|
|||
"\n"
|
||||
"Zavsino od brzine vašeg USB uređaja, ova operacija može potrajati dugo, naročito za velike datoteke.\n"
|
||||
"\n"
|
||||
"Preporučujemo da dozvolite Windows-u da završi, kako bi izbjegli korupciju. Ukoliko ne želite čekati, samo izvadite USB uređaj..."
|
||||
"Preporučujemo da dozvolite Windows-u da završi, kako bi izbjegli korupciju. Ukoliko ne želite čekati, samo izvadite USB uređaj..."
|
||||
|
||||
#. • MSG_081
|
||||
msgid "Unsupported image"
|
||||
|
@ -850,7 +848,7 @@ msgstr "Bez stalne veličine"
|
|||
#.
|
||||
#. Tooltips used for the peristence 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 "Izaberite veličinu stalne particije za live USB datoteku. Podešavanjem na 0 onemogućava stalnu particiju."
|
||||
msgstr "Izaberite veličinu stalne particije za live USB datoteku. Podešavanjem na 0 onemogućava stalnu particiju."
|
||||
|
||||
#. • MSG_126
|
||||
msgid "Set the partition size units."
|
||||
|
@ -1043,16 +1041,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Označite ovo polje kako biste dozvolili prikaz internacionalnih oznaka i napravite ikonicu uređaja (izrađuje autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Instaliraj MBR koji omogućava odabir pri podizanju sistema i može pretvoriti ID BIOS-a USB uređaja"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Pokušaj maskirati prvi USB uređaj za podizanje sistema (uobičajeno 0x80) kao drugačiji disk.\n"
|
||||
"Ovo je samo potrebno ako instalirate Windows XP i imate više od jednog diska."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Инсталирајте UEFI боотлоадер, који ће извршити проверу МД5Сум-y датотеке медија"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1853,6 +1843,82 @@ msgstr "Onemogući BitLocker automatsku enkripciju uređaja"
|
|||
msgid "Persistent log"
|
||||
msgstr "Trajna evidencija"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Додатна датотека ('diskcopy.dll') мора да се преузме са Microsoft-a да би се инсталирао MS-DOS:\n"
|
||||
"- Изаберите „Да“ да бисте се повезали на Интернет и преузели га\n"
|
||||
"- Изаберите „Не“ да бисте отказали операцију\n"
|
||||
"\n"
|
||||
"Напомена: Датотека ће бити преузета у директоријум апликације и аутоматски ће се поново користити ако постоји."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Откривен је опозвани UEFI покретач"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 ""
|
||||
"Руфус је открио да ISO који сте изабрали садржи UEFI покретач који је опозван и који ће произвести %s када је безбедно покретање омогућено на потпуно ажурираном UEFI систему.\n"
|
||||
"\n"
|
||||
"- Ако сте ову ISO слику добили од неугледног извора, требало би да размотрите могућност да садржи UEIFI малвер и избегавајте покретање са њега.\n"
|
||||
"- Ако сте га добили од поузданог извора, покушајте да пронађете новију верзију, која неће произвести ово упозорење."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "екран „Нарушавање безбедности“"
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "Windows Рековери Екран (BSOD) са „%s“"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Компресована VHDX слика"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Некомпримована VHD слика"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Фулл Фласх Упдате Имаге"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Неки додатни подаци морају се преузети од Microsoft-a да бисте користили ову функцију:\n"
|
||||
"- Изаберите „Да“ да бисте се повезали на Интернет и преузели га\n"
|
||||
"- Изаберите „Не“ да бисте отказали операцију"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Ограничите Виндовс на С-Моде (НИЈЕ КОМПАТИБИЛАН са заобилажењем налога на мрежи)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Ekspertni Rezim"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Распакивање архивских датотека: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Koritsti Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
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: 2023-02-16 22:33+0100\n"
|
||||
"PO-Revision-Date: 2023-02-16 23:43+0100\n"
|
||||
"Last-Translator: Sopor <sopor@hotmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"POT-Creation-Date: 2024-04-26 00:51+0200\n"
|
||||
"PO-Revision-Date: 2024-04-26 14:23+0100\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Sopor <sopor@users.noreply.github.com>\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.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -52,15 +52,13 @@ msgstr "Lista USB-hårddiskar"
|
|||
#. 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 "Lägg till korrigeringar för äldre BIOS:ar"
|
||||
msgstr "Lägg till korrigeringar för äldre BIOS:ar (extra partition, etc)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Använd Rufus MBR med BIOS-ID"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Aktivera runtime UEFI-mediavalidering"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -92,7 +90,7 @@ msgstr "Skapa utökat namn och ikonfiler"
|
|||
|
||||
#. • IDD_DIALOG → IDS_STATUS_TXT
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
msgstr ""
|
||||
|
||||
#. • IDD_DIALOG → IDCANCEL
|
||||
#. • IDD_LICENSE → IDCANCEL
|
||||
|
@ -117,7 +115,7 @@ msgstr "Licens"
|
|||
|
||||
#. • IDD_ABOUTBOX → IDOK
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
msgstr ""
|
||||
|
||||
#. • IDD_LICENSE → IDD_LICENSE
|
||||
msgid "Rufus License"
|
||||
|
@ -171,7 +169,7 @@ msgstr "Uppdatera nu"
|
|||
|
||||
#. • IDD_NEW_VERSION → IDD_NEW_VERSION
|
||||
msgid "Check For Updates - Rufus"
|
||||
msgstr "Kontrollera efter uppdateringar - Rufus"
|
||||
msgstr "Sök efter uppdateringar - Rufus"
|
||||
|
||||
#. • IDD_NEW_VERSION → IDS_NEW_VERSION_AVAIL_TXT
|
||||
msgid "A newer version is available. Please download the latest version!"
|
||||
|
@ -193,7 +191,7 @@ msgstr "Nerladdning"
|
|||
|
||||
#. • MSG_001
|
||||
msgid "Other instance detected"
|
||||
msgstr "Program redan i gång"
|
||||
msgstr "Programmet körs redan"
|
||||
|
||||
#. • MSG_002
|
||||
msgid ""
|
||||
|
@ -201,7 +199,7 @@ msgid ""
|
|||
"Please close the first application before running another one."
|
||||
msgstr ""
|
||||
"Rufus körs redan.\n"
|
||||
"Stäng det andra programmet innan du startar ännu ett."
|
||||
"Stäng det första programmet innan du startar ett nytt."
|
||||
|
||||
#. • MSG_003
|
||||
msgid ""
|
||||
|
@ -209,8 +207,8 @@ msgid ""
|
|||
"To continue with this operation, click OK. To quit click CANCEL."
|
||||
msgstr ""
|
||||
"VARNING: ALL DATA PÅ ENHETEN '%s'\n"
|
||||
"KOMMER ATT FÖRSVINNA.\n"
|
||||
"För att fortsätta, tryck OK. För att avbryta tryck AVBRYT."
|
||||
"KOMMER ATT TAS BORT.\n"
|
||||
"För att fortsätta tryck OK. För att avbryta tryck AVBRYT."
|
||||
|
||||
#. • MSG_004
|
||||
msgid "Rufus update policy"
|
||||
|
@ -283,37 +281,37 @@ msgstr "Senaste version: %d.%d (Build %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"
|
||||
|
@ -396,7 +394,7 @@ msgstr "USB-lagringsenhet (Allmänt)"
|
|||
|
||||
#. • MSG_046
|
||||
msgid "%s (Disk %d) [%s]"
|
||||
msgstr "%s (Disk %d) [%s]"
|
||||
msgstr ""
|
||||
|
||||
#. • MSG_047
|
||||
#.
|
||||
|
@ -728,7 +726,7 @@ msgstr "Rufus logg"
|
|||
|
||||
#. • MSG_109
|
||||
msgid "0x%02X (Disk %d)"
|
||||
msgstr "0x%02X (Disk %d)"
|
||||
msgstr ""
|
||||
|
||||
#. • MSG_110
|
||||
#.
|
||||
|
@ -810,7 +808,7 @@ msgstr "Standard Windowsinstallation"
|
|||
#. 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"
|
||||
|
@ -913,11 +911,11 @@ msgstr ""
|
|||
|
||||
#. • MSG_135
|
||||
msgid "Version"
|
||||
msgstr "Version"
|
||||
msgstr ""
|
||||
|
||||
#. • MSG_136
|
||||
msgid "Release"
|
||||
msgstr "Release"
|
||||
msgstr ""
|
||||
|
||||
#. • MSG_137
|
||||
msgid "Edition"
|
||||
|
@ -975,11 +973,11 @@ msgstr "Typ av dator du planerar att använda den här startbara enheten på. De
|
|||
#.
|
||||
#. You shouldn't translate 'Legacy Mode' as this is an option that usually appears in English in the UEFI settings.
|
||||
msgid "'UEFI-CSM' means that the device will only boot in BIOS emulation mode (also known as 'Legacy Mode') under UEFI, and not in native UEFI mode."
|
||||
msgstr "'UEFI-CSM' innebär att enheten startar i BIOS-emuleringsläge (kallas också för 'Legacy Mode') under UEFI och inte i nativ UEFI-läge."
|
||||
msgstr "\"UEFI-CSM\" innebär att enheten startar i BIOS-emuleringsläge (kallas också för 'Legacy Mode') under UEFI och inte i nativ UEFI-läge."
|
||||
|
||||
#. • MSG_152
|
||||
msgid "'non CSM' means that the device will only boot in native UEFI mode, and not in BIOS emulation mode (also known as 'Legacy Mode')."
|
||||
msgstr "'icke CSM' innebär att enheten startar i nativ UEFI-läge och inte i BIOS-emuleringsläge (kallas också för 'Legacy Mode')."
|
||||
msgstr "\"icke CSM\" innebär att enheten startar i nativ UEFI-läge och inte i BIOS-emuleringsläge (kallas också för 'Legacy Mode')."
|
||||
|
||||
#. • MSG_153
|
||||
msgid "Test pattern: 0x%02X"
|
||||
|
@ -1015,7 +1013,7 @@ msgstr ""
|
|||
|
||||
#. • MSG_160
|
||||
msgid "Toggle advanced options"
|
||||
msgstr "Visa/Dölj avancerat"
|
||||
msgstr "Visa/dölj avancerat"
|
||||
|
||||
#. • MSG_161
|
||||
msgid "Check the device for bad blocks using a test pattern"
|
||||
|
@ -1042,16 +1040,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Markera för att tillåta visa internationella namn och sätta en enhetsikon (en autorun.inf skapas)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Installera en MBR som tillåter flera uppstartsmöjligheter och som kan maskera bort BIOS USB enhets-ID"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Prova att maskera bort den första startbara USB-enheten (vanligtvis 0x80) som en annan disk.\n"
|
||||
"Detta är endast nödvändigt om du installerar Windows XP och du har mer än en disk."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Installera en UEFI-starthanterare som kommer att utföra MD5Sum-filvalidering av media"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1092,11 +1082,11 @@ msgstr "Rufus - Det pålitliga verktyget för USB-formatering"
|
|||
|
||||
#. • MSG_175
|
||||
msgid "Version %d.%d (Build %d)"
|
||||
msgstr "Version %d.%d (Build %d)"
|
||||
msgstr ""
|
||||
|
||||
#. • MSG_176
|
||||
msgid "English translation: Pete Batard <mailto:pete@akeo.ie>"
|
||||
msgstr "Svensk översättning: Sopor <mailto:sopor@hotmail.com>"
|
||||
msgstr "Svensk översättning: Sopor"
|
||||
|
||||
#. • MSG_177
|
||||
msgid "Report bugs or request enhancements at:"
|
||||
|
@ -1202,7 +1192,7 @@ msgstr "En icke standard sektorstorlek upptäckt"
|
|||
|
||||
#. • MSG_198
|
||||
msgid "'Windows To Go' can only be installed on a GPT partitioned drive if it has the FIXED attribute set. The current drive was not detected as FIXED."
|
||||
msgstr "'Windows To Go' kan endast installeras på en enhet med GPT-partition om det är en FIXERAD enhet. Nuvarande enhet är inte FIXERAD."
|
||||
msgstr "\"Windows To Go\" kan endast installeras på en enhet med GPT-partition om det är en FIXERAD enhet. Nuvarande enhet är inte FIXERAD."
|
||||
|
||||
#. • MSG_199
|
||||
msgid "This feature is not available on this platform."
|
||||
|
@ -1563,7 +1553,7 @@ msgid ""
|
|||
"\n"
|
||||
"Please select the mode that you want to use to write this image:"
|
||||
msgstr ""
|
||||
"Avbilden du har valt är en 'ISOHybrid-avbild'. Detta innebär att den kan skrivas i både läge %s (filkopiering) eller i läge %s (disk-avbild).\n"
|
||||
"Avbilden du har valt är en \"ISOHybrid-avbild\". Detta innebär att den kan skrivas i både läge %s (filkopiering) eller i läge %s (disk-avbild).\n"
|
||||
"Rufus rekommenderar att läge %s används, så att du alltid har full tillgång till enheten efter att du skrivit till den.\n"
|
||||
"Skulle du få problem vid uppstarten, kan du i stället prova skriva avbilden i läge %s.\n"
|
||||
"\n"
|
||||
|
@ -1824,7 +1814,7 @@ msgstr "Anpassa Windows-installationen?"
|
|||
|
||||
#. • MSG_329
|
||||
msgid "Remove requirement for 4GB+ RAM, Secure Boot and TPM 2.0"
|
||||
msgstr "Ta bort kravet på 4 GB+ RAM, Secure Boot och TPM 2.0"
|
||||
msgstr "Ta bort kravet på 4GB+ RAM, Secure Boot och TPM 2.0"
|
||||
|
||||
#. • MSG_330
|
||||
msgid "Remove requirement for an online Microsoft account"
|
||||
|
@ -1836,7 +1826,7 @@ msgstr "Inaktivera datainsamling (Hoppa över sekretessfrågor)"
|
|||
|
||||
#. • MSG_332
|
||||
msgid "Prevent Windows To Go from accessing internal disks"
|
||||
msgstr "Förhindra Windows To Go från att komma åt interna diskar"
|
||||
msgstr "Förhindra \"Windows To Go\" från att komma åt interna diskar"
|
||||
|
||||
#. • MSG_333
|
||||
msgid "Create a local account with username:"
|
||||
|
@ -1854,6 +1844,82 @@ msgstr "Inaktivera BitLockers automatiska enhetskryptering"
|
|||
msgid "Persistent log"
|
||||
msgstr "Bestående logg"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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"
|
||||
"- Välj \"Ja\" för att ansluta till Internet och ladda ner den\n"
|
||||
"- Välj \"Nej\" för att avbryta operationen\n"
|
||||
"\n"
|
||||
"Obs: Filen kommer att laddas ner i programmets katalog och kommer att återanvändas automatiskt om den finns."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Återkallad UEFI-starthanterare upptäcktes"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 upptäckte att den ISO-filen du har valt innehåller en UEFI-starthanterare som har återkallats och som kommer att producera %s, när \"Secure Boot\" är aktiverat på ett helt uppdaterat UEFI-system.\n"
|
||||
"\n"
|
||||
"- Om du skaffade den här ISO-avbilden från en icke ansedd källa bör du överväga möjligheten att den kan innehålla UEFI-skadlig programvara och undvika att starta från den.\n"
|
||||
"- Om du har fått det från en pålitlig källa bör du försöka hitta en mer uppdaterad version som inte ger den här varningen."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "en \"Säkerhetsöverträdelseskärm\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "en Windows-återställningsskärm (BSOD) med '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Komprimerad VHDX-avbild"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Okomprimerad VHD-avbild"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Full flash uppdateringsavbild"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Ytterligare data måste laddas ner från Microsoft för att kunna 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"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Begränsa Windows till S-läge (INKOMPATIBEL med förbikoppling av onlinekonto)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Expertläge"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Extraherar arkivfiler: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Använd Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
@ -1913,7 +1979,7 @@ msgstr "Skapa BIOS- eller UEFI-startbara enheter, inklusive UEFI-startbar NTFS"
|
|||
|
||||
#. • MSG_915
|
||||
msgid "Create 'Windows To Go' drives"
|
||||
msgstr "Skapa 'Windows To Go'-enheter"
|
||||
msgstr "Skapa \"Windows To Go\"-enheter"
|
||||
|
||||
#. • MSG_916
|
||||
msgid "Create Windows 11 installation drives for PCs that don't have TPM or Secure Boot"
|
||||
|
@ -1941,4 +2007,4 @@ msgstr "Ladda ner officiella Microsoft Windows ISO-filer"
|
|||
|
||||
#. • MSG_922
|
||||
msgid "Download UEFI Shell ISOs"
|
||||
msgstr "Ladda ner UEFI-shell ISO-filer"
|
||||
msgstr "Ladda ner UEFI-skal ISO-filer"
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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: 2023-02-23 15:14+0300\n"
|
||||
"PO-Revision-Date: 2023-04-05 12:42+0200\n"
|
||||
"POT-Creation-Date: 2024-04-28 09:05+0300\n"
|
||||
"PO-Revision-Date: 2024-04-28 09:32+0300\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: tr_TR\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Turkish (Türkçe)\n"
|
||||
"X-Rufus-LCID: 0x041F\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "USB Sabit Sürücüleri Listele"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Eski BIOSlar için düzeltme ekle (ekstra bölüm, hizalama vs.)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Rufus MBR kullan. BIOS Kimliği Seçin"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Çalışma zamanı UEFI ortam doğrulamasını etkinleştir"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -1043,16 +1041,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Uluslararası etiketleri görüntülemek için bu onay kutusunu seçin ve aygıt simgesini belirleyin (autorun.inf oluşturur)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Açılış seçimine izin veren ve BIOS USB Sürücü kimliğini taklit edebilen bir MBR yükler"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"İlk açılabilir USB sürücüsünü farklı bir disk olarak taklit etmeye çalış (genellikle 0x80).\n"
|
||||
"Bu sadece Windows XP yüklemesinde ve birden fazla diske varsa gerekebilir."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Medyanın MD5Sum dosya doğrulamasını gerçekleştirecek bir UEFI önyükleyici yükleyin"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1798,7 +1788,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 ""
|
||||
"Seçtiğiniz yansı bir ISOHybrid, ancak yansı ISO/Dosya kopyalama modu ile uyumlu hale olrak oluşturulmamış.\n"
|
||||
"Seçtiğiniz yansı bir ISOHybrid, ancak yansı ISO/Dosya kopyalama modu ile uyumlu hale olrak oluşturulmamış.\n"
|
||||
"Sonuç olarak, DD yansısı yazma modu uygulanacaktır."
|
||||
|
||||
#. • MSG_322
|
||||
|
@ -1853,6 +1843,82 @@ msgstr "BitLocker otomatik cihaz şifrelemesini devre dışı bırakın"
|
|||
msgid "Persistent log"
|
||||
msgstr "Kalıcı günlük"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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'u yüklemek için Microsoft'tan ek bir dosyanın ('diskcopy.dll') indirilmesi gerekir:\n"
|
||||
"- İnternete bağlanıp indirmek için 'Evet'i seçin\n"
|
||||
"- İşlemden vazgeçmek için 'Hayır'ı seçin\n"
|
||||
"\n"
|
||||
"Not: Dosya uygulamanın dizinine indirilecek ve varsa otomatik olarak yeniden kullanılacaktır."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "İptal edilen UEFI önyükleyici algılandı"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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, seçtiğiniz ISO'nun iptal edilmiş bir UEFI önyükleyici içerdiğini ve tamamen güncel bir UEFI sisteminde Güvenli Önyükleme etkinleştirildiğinde %s oluşturacağını algıladı.\n"
|
||||
"\n"
|
||||
"- Bu ISO görüntüsünü saygın olmayan bir kaynaktan aldıysanız, bunun UEFI kötü amaçlı yazılım içerme olasılığını göz önünde bulundurmalı ve bu görüntüden önyükleme yapmaktan kaçınmalısınız.\n"
|
||||
"- Eğer güvenilir bir kaynaktan aldıysanız bu uyarıyı vermeyecek daha güncel bir versiyon bulmaya çalışmalısınız."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "\"Güvenlik İhlali\" ekranı"
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "'%s' içeren bir Windows Kurtarma Ekranı (BSOD)"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Sıkıştırılmış VHDX Yansısı"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Sıkıştırılmamış VHD Yansısı"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Full Flash Update Yansısı"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Bu işlevselliği kullanmak için Microsoft'tan bazı ek verilerin indirilmesi gerekir:\n"
|
||||
"- İnternete bağlanıp indirmek için 'Evet'i seçin\n"
|
||||
"- İşlemden vazgeçmek için 'Hayır'ı seçin"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Windows'u S-Mode ile Kısıtlayın (çevrimiçi hesap atlamayla UYUMSUZ)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Uzman Modu"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Arşiv dosyaları çıkarılıyor: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Rufus MBR'yi kullanın"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-03-09 10:21+0200\n"
|
||||
"PO-Revision-Date: 2023-03-12 14:09+0000\n"
|
||||
"POT-Creation-Date: 2024-05-14 13:59+0300\n"
|
||||
"PO-Revision-Date: 2024-05-15 21:15+0300\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: uk_UA\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Ukrainian (Українська)\n"
|
||||
"X-Rufus-LCID: 0x0422\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.4\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Список USB накопичувачів"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "Додати виправлення для старих BIOS (додатковий розділ, вирівнювання, тощо)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Використовувати Rufus MBR з BIOS ID"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "Увімкнути перевірку носія UEFI під час виконання"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -92,7 +90,7 @@ msgstr "Створити розширену мітку та значок при
|
|||
|
||||
#. • IDD_DIALOG → IDS_STATUS_TXT
|
||||
msgid "Status"
|
||||
msgstr "Статус"
|
||||
msgstr "Стан"
|
||||
|
||||
#. • IDD_DIALOG → IDCANCEL
|
||||
#. • IDD_LICENSE → IDCANCEL
|
||||
|
@ -433,7 +431,7 @@ msgstr "Вибраний пристрій захищений від запису
|
|||
|
||||
#. • MSG_055
|
||||
msgid "The device is in use by another process. Please close any other process that may be accessing the device."
|
||||
msgstr "Вибраний пристрій використовується іншим процесом. Будь ласка, закінчіть процес перед використанням вибраного пристрою."
|
||||
msgstr "Вибраний пристрій використовується іншим процесом. Будь ласка, завершіть процес перед використанням вибраного пристрою."
|
||||
|
||||
#. • MSG_056
|
||||
msgid "Quick format is not available for this device."
|
||||
|
@ -575,9 +573,9 @@ msgstr ""
|
|||
"Через це завантажувальне меню може відображатися неправильно.\n"
|
||||
"\n"
|
||||
"Нову версію можна завантажити за допомогою Rufus:\n"
|
||||
"- Оберіть 'Так', щоб завантажити файл з інтернету\n"
|
||||
"- Оберіть 'Ні', щоб не модифікувати ISO-образ\n"
|
||||
"Якщо ви не знаєте що робити, то оберіть 'Так'.\n"
|
||||
"- Виберіть 'Так', щоб завантажити файл з інтернету\n"
|
||||
"- Виберіть 'Ні', щоб не модифікувати ISO-образ\n"
|
||||
"Якщо ви не знаєте що робити, то виберіть 'Так'.\n"
|
||||
"\n"
|
||||
"Файл буде завантажений в поточну директорію, а в разі наявності '%s' - замінений автоматично."
|
||||
|
||||
|
@ -614,7 +612,7 @@ msgstr "Непідтримуваний ISO-образ"
|
|||
|
||||
#. • 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 "При використанні системного інтерфейсу UEFI підтримуються тільки завантажувальні EFI ISO-образи. Будь ласка, оберіть завантажувальний EFI ISO-образ чи змініть системний інтерфейс на BIOS."
|
||||
msgstr "При використанні системного інтерфейсу UEFI підтримуються тільки завантажувальні EFI ISO-образи. Будь ласка, виберіть завантажувальний EFI ISO-образ чи змініть системний інтерфейс на BIOS."
|
||||
|
||||
#. • MSG_092
|
||||
msgid "Unsupported filesystem"
|
||||
|
@ -702,8 +700,8 @@ msgstr ""
|
|||
"Оскільки цей файл більший за 100 Кб, і завжди присутній в %s ISO-образах, він не був вбудований в Rufus.\n"
|
||||
"\n"
|
||||
"Rufus може завантажити відсутній файл:\n"
|
||||
"- Оберіть 'Так', якщо хочете завантажити даний файл\n"
|
||||
"- Оберіть 'Ні', якщо хочете завантажити його вручну пізніше\n"
|
||||
"- Виберіть 'Так', якщо хочете завантажити даний файл\n"
|
||||
"- Виберіть 'Ні', якщо хочете завантажити його вручну пізніше\n"
|
||||
"\n"
|
||||
"Примітка: Файл буде завантажений в поточну директорію. За наявності '%s', він буде перезаписаний автоматично."
|
||||
|
||||
|
@ -717,7 +715,7 @@ msgstr ""
|
|||
|
||||
#. • MSG_106
|
||||
msgid "Please select folder"
|
||||
msgstr "Будь ласка, оберіть теку"
|
||||
msgstr "Будь ласка, виберіть теку"
|
||||
|
||||
#. • MSG_107
|
||||
msgid "All files"
|
||||
|
@ -769,8 +767,8 @@ msgstr ""
|
|||
"Даний образ використовує Syslinux %s%s, проте даний додаток включає в себе тільки настановні файли для Syslinux %s%s.\n"
|
||||
"\n"
|
||||
"Так як нові версії Syslinux несумісні одна з одною, необхідно, щоб додаткові файли ('ldlinux.sys' та 'ldlinux.bss') були завантажені з інтернету:\n"
|
||||
"- Оберіть 'Так', щоб завантажити файли з інтернету\n"
|
||||
"- Оберіть 'Ні', щоб відмінити операцію\n"
|
||||
"- Виберіть 'Так', щоб завантажити файли з інтернету\n"
|
||||
"- Виберіть 'Ні', щоб відмінити операцію\n"
|
||||
"\n"
|
||||
"Примітка: Файли будуть завантажені в поточний каталог додатку і будуть використовуватися повторно за необхідності."
|
||||
|
||||
|
@ -795,9 +793,9 @@ msgstr ""
|
|||
"Даний образ використовує завантажувач Grub %s, але додаток включає тільки настановні файли для завантажувача Grub %s.\n"
|
||||
"\n"
|
||||
"Різні версії завантажувача Grub можуть бути несумісними одна з одною та увімкнення їх усіх не являється можливим. Rufus намагатиметься знайти потрібну версію настановного файла завантажувача Grub ('core.img'), що відповідає версії завантажувача вашого образу:\n"
|
||||
"- Оберіть 'Так', щоб скачати завантажувальний файл з Інтернета\n"
|
||||
"- Оберіть 'Ні', щоб використовувати версію за замовчуванням із Rufus\n"
|
||||
"- Оберіть 'Відмінити', щоб відмінити операцію\n"
|
||||
"- Виберіть 'Так', щоб скачати завантажувальний файл з інтернету\n"
|
||||
"- Виберіть 'Ні', щоб використовувати версію за замовчуванням із Rufus\n"
|
||||
"- Виберіть 'Відмінити', щоб відмінити операцію\n"
|
||||
"\n"
|
||||
"Примітка: Файл буде завантажено в поточний каталог додатку та буде використаний повторно наступного разу. Якщо потрібна версія настановного файла не буде знайдена в інтернеті, то буде використовуватися версія за замовчуванням."
|
||||
|
||||
|
@ -811,7 +809,7 @@ msgstr "Стандартне встановлення Windows"
|
|||
#. 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"
|
||||
|
@ -1043,16 +1041,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Дозволити відображення міток з міжнародними символами та задати значок пристрою (створюється autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Використовувати MBR, що дозволяє вибрати завантажувач та може замаскувати ідентифікатор пристрою в BIOS"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Спробуйте замаскувати перший завантажувальний USB-накопичувач (зазвичай 0x80) як інший диск.\n"
|
||||
"Це необхідно тільки якщо ви встановлюєте Windows XP та маєте більше ніж один диск."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Встановити завантажувач UEFI, який буде виконувати перевірку MD5Sum"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1095,7 +1085,7 @@ msgstr "Версія %d.%d (Збірка %d)"
|
|||
|
||||
#. • MSG_176
|
||||
msgid "English translation: Pete Batard <mailto:pete@akeo.ie>"
|
||||
msgstr "Українською переклав:\\line• Великожон Костянтин <mailto:mind.converter@gmail.com>"
|
||||
msgstr "Українською переклав: Великожон Костянтин <mailto:mind.converter@gmail.com>"
|
||||
|
||||
#. • MSG_177
|
||||
msgid "Report bugs or request enhancements at:"
|
||||
|
@ -1566,7 +1556,7 @@ msgstr ""
|
|||
"Rufus рекомендує використовувати %s режим для повного доступу до диска після запису.\n"
|
||||
"Однак, якщо ви зіштовхнетесь з проблемами під час завантаження ви можете ще раз спробувати записати образ в %s режимі.\n"
|
||||
"\n"
|
||||
"Будь ласка, оберіть режим, який ви хочете використовувати для запису обраного образа:"
|
||||
"Будь ласка, виберіть режим, який ви хочете використовувати для запису обраного образа:"
|
||||
|
||||
#. • MSG_276
|
||||
#.
|
||||
|
@ -1594,7 +1584,7 @@ msgstr "Диск чи ISO-образ"
|
|||
|
||||
#. • MSG_281
|
||||
msgid "%s (Please select)"
|
||||
msgstr "%s (Будь ласка, оберіть)"
|
||||
msgstr "%s (Будь ласка, виберіть)"
|
||||
|
||||
#. • MSG_282
|
||||
msgid "Exclusive USB drive locking"
|
||||
|
@ -1686,7 +1676,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Розмір вибраного файла ISO не співпадає з оголошеним розміром: %s даних відсутні!\n"
|
||||
"\n"
|
||||
"Якщо ви завантажили цей файл з Інтернету, вам слід завантажити нову копію файла або перевірити співпадіння контрольних сум MD5 чи SHA з офіційним файлом.\n"
|
||||
"Якщо ви завантажили цей файл з інтернету, вам слід завантажити нову копію файла або перевірити співпадіння контрольних сум MD5 чи SHA з офіційним файлом.\n"
|
||||
"\n"
|
||||
"Пам'ятайте, що ви можете порівняти MD5 чи SHA в Rufus, натиснувши кнопку (✓)."
|
||||
|
||||
|
@ -1853,6 +1843,82 @@ msgstr "Вимкнути автоматичне шифрування прист
|
|||
msgid "Persistent log"
|
||||
msgstr "Постійний журнал"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Необхідно завантажити додатковий файл ('diskcopy.dll') з сайту Microsoft для встановлення MS-DOS:\n"
|
||||
"- Виберіть 'Так' для з'єднання з інтернетом та його завантаження\n"
|
||||
"- Виберіть 'Ні' для скасування операції\n"
|
||||
"\n"
|
||||
"Примітка: файл буде завантажено в каталог додатку та повторно використано за наявності."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Виявлено відкликаний завантажувач UEFI"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 виявив, що вибраний ISO містить відкликаний завантажувач UEFI, що буде створювати %s, коли в оновленій системі UEFI буде ввімкнено безпечне завантаження.\n"
|
||||
"\n"
|
||||
"- Якщо ви отримали цей образ з неперевіреного джерела, Вам слід розглянути можливість того, що він може містити зловмисне ПЗ і уникнути завантаження з нього.\n"
|
||||
"- Якщо ви отримали цей образ з довіреного джерела, Вам слід спробувати знайти більш актуальну версію, що не буде провокувати це попередження."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "вікно \"Security Violation\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "вікно Windows Recovery Screen (BSOD) з '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Образ VHDX зі стисненням"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Образ VHD без стиснення"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Образ Full Flash Update"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"Для використання даного функціоналу необхідно завантажити деякі додаткові дані з сайту Microsoft:\n"
|
||||
"- Виберіть 'Так' для з'єднання з інтернетом та завантаження даних\n"
|
||||
"- Виберіть 'Ні' для скасування операції"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Обмежити Windows до S-Mode (НЕСУМІСНО з обходом облікового запису)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Просунутий режим"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Видобування архівованих файлів: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Використовувати Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-04-16 06:07+0700\n"
|
||||
"PO-Revision-Date: 2023-04-17 13:37+0100\n"
|
||||
"POT-Creation-Date: 2024-04-26 02:45+0900\n"
|
||||
"PO-Revision-Date: 2024-04-26 03:13+0900\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: vi_VN\n"
|
||||
|
@ -13,7 +13,7 @@ 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.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "Danh sách ổ cứng USB"
|
|||
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)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "Dùng MBR của Rufus với ID BIOS"
|
||||
#. 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"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -1043,16 +1041,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "Chọn mục này để cho phép hiện tên ổ đĩa toàn hệ thống và đặt biểu tượng thiết bị (khởi tạo autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "Cài đặt một MBR cho phép lựa chọn khởi động và có thể giả ID ổ đĩa USB BIOS"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"Thử giả ổ đĩa USB khởi động đầu tiên (thường là 0x80) như một đĩa khác.\n"
|
||||
"Điều này chỉ cần thiết nếu bạn cài đặt Windows XP và có nhiều hơn một đĩa."
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "Cài đặt bộ khởi động UEFI, cùng với việc tiến trình xác thực MD5Sum của phương tiện"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1853,6 +1843,82 @@ msgstr "Vô hiệu tự động mã hoá thiết bị BitLocker"
|
|||
msgid "Persistent log"
|
||||
msgstr "Nhật ký"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"Một tệp tin bổ sung ('diskcopy.dll') phải được tải về từ Microsoft để cài đặt MS-DOS:\n"
|
||||
"- Chọn 'Có' để kết nối tới Internet và tải nó xuống\n"
|
||||
"- Chọn 'Không' để huỷ tiến trình\n"
|
||||
"\n"
|
||||
"Ghi chú: Tệp tin sẽ được tải xuống tại đường dẫn của phần mềm và sẽ được tự động tái sử dụng nếu có sẵn."
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "Đã phát hiện bộ khởi động UEFI bị thu hồi"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 đã phát hiện ra rằng tệp ISO bạn đã chọn có chứa một bộ khởi động UEFI đã bị thu hồi và nó sẽ tạo ra %s, khi Secure Boot được kích hoạt trên một hệ thống UEFI được cập nhật đầy đủ và mới nhất.\n"
|
||||
"\n"
|
||||
"- Nếu bạn sở hữu tệp ISO này từ một nguồn không đáng tin cậy, bạn nên cân nhắc khả năng có thể chứa mã độc UEFI và tránh khởi động từ nó.\n"
|
||||
"- Nếu bạn sở hữu từ một nguồn uy tín, bạn nên thử tìm một bản mới hơn, theo đó cảnh báo này sẽ không hiện ra."
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "một màn hình \"Vi phạm Bảo mật\""
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "một Màn hình Khôi phục Windows (BSOD) với '%s'"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "Tệp VHDX đã nén"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "Tệp VHD chưa nén"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "Ghi Đầy đủ Tệp Cập nhật"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- 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"
|
||||
"- 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"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "Giới hạn Windows vào S-Mode (KHÔNG TƯƠNG THÍCH với việc bỏ qua tài khoản trực tuyến)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "Chế độ Chuyên nghiệp"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "Đang giải nén tệp lưu trữ: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "Sử dụng Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
|
|
@ -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: 2023-02-19 23:07+0800\n"
|
||||
"PO-Revision-Date: 2023-02-20 13:37+0000\n"
|
||||
"POT-Creation-Date: 2024-04-28 10:38+0800\n"
|
||||
"PO-Revision-Date: 2024-04-28 10:59+0800\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: zh_CN\n"
|
||||
|
@ -13,7 +13,7 @@ msgstr ""
|
|||
"X-Poedit-SourceCharset: UTF-8\n"
|
||||
"X-Rufus-LanguageName: Chinese Simplified (简体中文)\n"
|
||||
"X-Rufus-LCID: 0x0804, 0x1004\n"
|
||||
"X-Generator: Poedit 3.2.2\n"
|
||||
"X-Generator: Poedit 3.4.2\n"
|
||||
|
||||
#. • IDD_DIALOG → IDS_DRIVE_PROPERTIES_TXT
|
||||
msgid "Drive Properties"
|
||||
|
@ -54,13 +54,11 @@ msgstr "显示 USB 外置硬盘"
|
|||
msgid "Add fixes for old BIOSes (extra partition, align, etc.)"
|
||||
msgstr "添加对旧 BIOS 修正(额外的分区,校准等)"
|
||||
|
||||
#. • IDD_DIALOG → IDC_RUFUS_MBR
|
||||
#. • IDD_DIALOG → IDC_UEFI_MEDIA_VALIDATION
|
||||
#.
|
||||
#. 'MBR': See http://en.wikipedia.org/wiki/Master_boot_record
|
||||
#. Rufus can install it's own custom MBR (the Rufus MBR), which also allows users to
|
||||
#. specify a custom disk ID for the BIOS. The tooltip for this control is MSG_167.
|
||||
msgid "Use Rufus MBR with BIOS ID"
|
||||
msgstr "使用 Rufus MBR 配合 BIOS ID"
|
||||
#. It is acceptable to drop the "runtime" if you are running out of space
|
||||
msgid "Enable runtime UEFI media validation"
|
||||
msgstr "启用运行时 UEFI 介质验证"
|
||||
|
||||
#. • IDD_DIALOG → IDS_FORMAT_OPTIONS_TXT
|
||||
msgid "Format Options"
|
||||
|
@ -1047,16 +1045,8 @@ msgid "Check this box to allow the display of international labels and set a dev
|
|||
msgstr "勾选本框允许国际卷标的显示并设置一个设备图标(创建一个 autorun.inf)"
|
||||
|
||||
#. • MSG_167
|
||||
msgid "Install an MBR that allows boot selection and can masquerade the BIOS USB drive ID"
|
||||
msgstr "安装一个可以引导选择内容并可以伪装 BIOS USB 盘 ID 的 MBR"
|
||||
|
||||
#. • MSG_168
|
||||
msgid ""
|
||||
"Try to masquerade first bootable USB drive (usually 0x80) as a different disk.\n"
|
||||
"This should only be necessary if you install Windows XP and have more than one disk."
|
||||
msgstr ""
|
||||
"尝试将首个可引导的 USB 驱动器 (通常为 0x80) 伪装为不同的磁盘。\n"
|
||||
"只有当您安装 Windows XP,并拥有多个磁盘时才需要此选项。"
|
||||
msgid "Install a UEFI bootloader, that will perform MD5Sum file validation of the media"
|
||||
msgstr "安装 UEFI 引导加载器,该加载器将对介质进行 MD5 校验"
|
||||
|
||||
#. • MSG_169
|
||||
msgid ""
|
||||
|
@ -1859,6 +1849,82 @@ msgstr "禁用 BitLocker 自动设备加密"
|
|||
msgid "Persistent log"
|
||||
msgstr "持久化日志"
|
||||
|
||||
#. • MSG_337
|
||||
msgid ""
|
||||
"An additional file ('diskcopy.dll') must be downloaded from Microsoft to install MS-DOS:\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 ""
|
||||
"必须从微软下载额外的文件(\"diskcopy.dll\"),以安装 MS-DOS:\n"
|
||||
"- 选择 '是' 连接网络并下载这些文件\n"
|
||||
"- 选择 '否' 取消此项操作\n"
|
||||
"\n"
|
||||
"注意:文件将会被下载到当前应用程序目录,如果存在则会自动选用。"
|
||||
|
||||
#. • MSG_338
|
||||
msgid "Revoked UEFI bootloader detected"
|
||||
msgstr "检测到被吊销的 UEFI 引导加载器"
|
||||
|
||||
#. • MSG_339
|
||||
msgid ""
|
||||
"Rufus detected that the ISO you have selected contains a UEFI bootloader that has been revoked and that will produce %s, when Secure Boot is enabled on a fully up to date UEFI system.\n"
|
||||
"\n"
|
||||
"- 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 检测到您选择的 ISO 包含一个已被吊销的 UEFI 引导加载器,当在最新的 UEFI 系统上启用安全启动时,将产生%s。\n"
|
||||
"\n"
|
||||
"- 如果您从非可信来源获取此 ISO 镜像,则应考虑其中可能包含 UEFI 恶意软件,应当避免启动此镜像。\n"
|
||||
"- 如果是从可信来源获取的,则应尝试查找不会产生此警告的最新版本。"
|
||||
|
||||
#. • MSG_340
|
||||
msgid "a \"Security Violation\" screen"
|
||||
msgstr "一个“安全违规”界面"
|
||||
|
||||
#. • MSG_341
|
||||
msgid "a Windows Recovery Screen (BSOD) with '%s'"
|
||||
msgstr "一个包含 '%s' 的蓝屏界面"
|
||||
|
||||
#. • MSG_342
|
||||
msgid "Compressed VHDX Image"
|
||||
msgstr "压缩的 VHDX 镜像"
|
||||
|
||||
#. • MSG_343
|
||||
msgid "Uncompressed VHD Image"
|
||||
msgstr "未压缩的 VHD 镜像"
|
||||
|
||||
#. • MSG_344
|
||||
msgid "Full Flash Update Image"
|
||||
msgstr "完整闪存更新镜像"
|
||||
|
||||
#. • MSG_345
|
||||
msgid ""
|
||||
"Some additional data must be downloaded from Microsoft to use this functionality:\n"
|
||||
"- Select 'Yes' to connect to the Internet and download it\n"
|
||||
"- Select 'No' to cancel the operation"
|
||||
msgstr ""
|
||||
"使用此功能需要从微软下载一些额外数据:\n"
|
||||
"- 选择 '是' 连接网络并下载这些文件\n"
|
||||
"- 选择 '否' 取消此项操作"
|
||||
|
||||
#. • MSG_346
|
||||
msgid "Restrict Windows to S-Mode (INCOMPATIBLE with online account bypass)"
|
||||
msgstr "将 Windows 限制为 S 模式(与绕过在线账户功能不兼容)"
|
||||
|
||||
#. • MSG_347
|
||||
msgid "Expert Mode"
|
||||
msgstr "专家模式"
|
||||
|
||||
#. • MSG_348
|
||||
msgid "Extracting archive files: %s"
|
||||
msgstr "正在解压文件: %s"
|
||||
|
||||
#. • MSG_349
|
||||
msgid "Use Rufus MBR"
|
||||
msgstr "使用 Rufus MBR"
|
||||
|
||||
#. • MSG_900
|
||||
#.
|
||||
#. The following messages are for the Windows Store listing only and are not used by the application
|
||||
|
@ -1902,7 +1968,7 @@ msgstr "将 U 盘、存储卡或虚拟驱动器格式化为 FAT/FAT32/NTFS/UDF/e
|
|||
|
||||
#. • MSG_911
|
||||
msgid "Create FreeDOS bootable USB drives"
|
||||
msgstr "创建 FreeDOS 可启动驱动器"
|
||||
msgstr "创建 FreeDOS 可启动驱动器"
|
||||
|
||||
#. • MSG_912
|
||||
msgid "Create bootable drives from bootable ISOs (Windows, Linux, etc.)"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Poedit <-> rufus.loc conversion utility
|
||||
* Copyright © 2018-2023 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2018-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -41,9 +41,9 @@ using System.Windows.Forms;
|
|||
[assembly: AssemblyDescription("Poedit ↔ Rufus loc conversion utility")]
|
||||
[assembly: AssemblyCompany("Akeo Consulting")]
|
||||
[assembly: AssemblyProduct("Pollock")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018-2023 Pete Batard <pete@akeo.ie>")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018-2024 Pete Batard <pete@akeo.ie>")]
|
||||
[assembly: AssemblyTrademark("GNU GPLv3")]
|
||||
[assembly: AssemblyVersion("1.5.*")]
|
||||
[assembly: AssemblyVersion("1.6.*")]
|
||||
|
||||
namespace pollock
|
||||
{
|
||||
|
@ -1244,9 +1244,9 @@ Retry:
|
|||
|
||||
if ((list.Count >= 2) && (index >= 0))
|
||||
{
|
||||
Process.Start($"mailto:pete@akeo.ie?subject=Rufus {list[index][0]} translation v{list[0][2]} update" +
|
||||
$"&body=Hi Pete,%0D%0A%0D%0APlease find attached the latest {list[index][0]} translation." +
|
||||
$"%0D%0A%0D%0A<PLEASE ATTACH '{app_dir}{po_file}' AND REMOVE THIS LINE>" +
|
||||
Process.Start($"mailto:pete@akeo.ie?subject=Rufus%20{list[index][0]}%20translation%20v{list[0][2]}%20update" +
|
||||
$"&body=Hi%20Pete,%0D%0A%0D%0APlease%20find%20attached%20the%20latest%20{list[index][0]}%20translation." +
|
||||
$"%0D%0A%0D%0A<PLEASE%20ATTACH%20'{app_dir}{po_file}'%20AND%20REMOVE%20THIS%20LINE>" +
|
||||
$"%0D%0A%0D%0ARegards,");
|
||||
}
|
||||
return;
|
||||
|
|
1696
res/loc/rufus.loc
1696
res/loc/rufus.loc
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,3 @@
|
|||
This directory contains the uefi-md5sum bootloaders added by Rufus for media validation.
|
||||
|
||||
See https://github.com/pbatard/uefi-md5sum for details.
|
Binary file not shown.
|
@ -4,7 +4,7 @@
|
|||
* Copyright 1992-1994 Remy Card <card@masi.ibp.fr>
|
||||
* Copyright 1995-1999 Theodore Ts'o
|
||||
* Copyright 1999 David Beattie
|
||||
* Copyright 2011-2023 Pete Batard <pete@akeo.ie>
|
||||
* Copyright 2011-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This file is based on the minix file system programs fsck and mkfs
|
||||
* written and copyrighted by Linus Torvalds <Linus.Torvalds@cs.helsinki.fi>
|
||||
|
@ -318,7 +318,7 @@ static void CALLBACK alarm_intr(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dw
|
|||
{
|
||||
if (!num_blocks)
|
||||
return;
|
||||
if (FormatStatus) {
|
||||
if (ErrorStatus) {
|
||||
uprintf("%sInterrupting at block %" PRIu64 "\n", bb_prefix,
|
||||
(unsigned long long) currently_testing);
|
||||
cancel_ops = -1;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
*
|
||||
* Copyright 1995, 1996, 1997, 1998, 1999 by Theodore Ts'o
|
||||
* Copyright 1999 by David Beattie
|
||||
* Copyright 2011-2018 by Pete Batard
|
||||
* Copyright 2011-2024 by Pete Batard
|
||||
*
|
||||
* This file is based on the minix file system programs fsck and mkfs
|
||||
* written and copyrighted by Linus Torvalds <Linus.Torvalds@cs.helsinki.fi>
|
||||
|
@ -28,12 +28,11 @@ typedef struct bb_struct_u64_iterate *bb_badblocks_iterate;
|
|||
typedef struct bb_struct_u64_list *bb_u64_list;
|
||||
typedef struct bb_struct_u64_iterate *bb_u64_iterate;
|
||||
|
||||
#define BB_ET_NO_MEMORY (ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_NOT_ENOUGH_MEMORY)
|
||||
#define BB_ET_MAGIC_BADBLOCKS_LIST (ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_OBJECT_IN_LIST)
|
||||
#define BB_ET_MAGIC_BADBLOCKS_ITERATE (ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INVALID_BLOCK)
|
||||
#define BB_ET_NO_MEMORY RUFUS_ERROR(ERROR_NOT_ENOUGH_MEMORY)
|
||||
#define BB_ET_MAGIC_BADBLOCKS_LIST RUFUS_ERROR(ERROR_OBJECT_IN_LIST)
|
||||
#define BB_ET_MAGIC_BADBLOCKS_ITERATE RUFUS_ERROR(ERROR_INVALID_BLOCK)
|
||||
|
||||
#define BB_CHECK_MAGIC(struct, code) \
|
||||
if ((struct)->magic != (code)) return (code)
|
||||
#define BB_CHECK_MAGIC(struct, code) if ((struct)->magic != (code)) return (code)
|
||||
#define BB_BAD_BLOCKS_THRESHOLD 256
|
||||
#define BB_BLOCKS_AT_ONCE 64
|
||||
#define BB_SYS_PAGE_SIZE 4096
|
||||
|
|
|
@ -255,6 +255,11 @@ unpack_lzma_stream(transformer_state_t *xstate)
|
|||
header.dict_size = SWAP_LE32(header.dict_size);
|
||||
header.dst_size = SWAP_LE64(header.dst_size);
|
||||
|
||||
if (header.dict_size > 1024 * 1024 * 1024) {
|
||||
bb_simple_error_msg("lzma dictionary size too large");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (header.dict_size == 0)
|
||||
header.dict_size++;
|
||||
|
||||
|
|
18
src/dev.c
18
src/dev.c
|
@ -384,8 +384,7 @@ BOOL GetOpticalMedia(IMG_SAVE* img_save)
|
|||
FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
|
||||
if (hDrive == INVALID_HANDLE_VALUE)
|
||||
continue;
|
||||
if (!DeviceIoControl(hDrive, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,
|
||||
NULL, 0, geometry, sizeof(geometry), &size, NULL))
|
||||
if (!DeviceIoControl(hDrive, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, geometry, sizeof(geometry), &size, NULL))
|
||||
continue;
|
||||
// Rewritable media usually has a one sector
|
||||
if (DiskGeometry->DiskSize.QuadPart <= 4096)
|
||||
|
@ -594,7 +593,7 @@ BOOL GetDevices(DWORD devnum)
|
|||
uprintf("Could not allocate Device ID list");
|
||||
goto out;
|
||||
}
|
||||
for (s=0, i=0; s<ARRAYSIZE(usbstor_name); s++) {
|
||||
for (s = 0, i = 0; s < ARRAYSIZE(usbstor_name); s++) {
|
||||
list_start[s] = i;
|
||||
if (list_size[s] > 1) {
|
||||
if (CM_Get_Device_ID_ListA(usbstor_name[s], &devid_list[i], list_size[s], ulFlags) != CR_SUCCESS)
|
||||
|
@ -891,8 +890,8 @@ BOOL GetDevices(DWORD devnum)
|
|||
break;
|
||||
}
|
||||
drive_size = GetDriveSize(drive_index);
|
||||
if (drive_size < (MIN_DRIVE_SIZE * MB)) {
|
||||
uprintf("Device eliminated because it is smaller than %d MB", MIN_DRIVE_SIZE);
|
||||
if (drive_size < MIN_DRIVE_SIZE) {
|
||||
uprintf("Device eliminated because it is smaller than %s", SizeToHumanReadable(MIN_DRIVE_SIZE, FALSE, FALSE));
|
||||
safe_free(devint_detail_data);
|
||||
break;
|
||||
}
|
||||
|
@ -928,8 +927,9 @@ BOOL GetDevices(DWORD devnum)
|
|||
uprintf("NOTE: You can enable the listing of Hard Drives under 'advanced drive properties'");
|
||||
safe_free(devint_detail_data);
|
||||
break;
|
||||
} else if ((!enable_HDDs) && (props.is_CARD) && (drive_size > MAX_DEFAULT_LIST_CARD_SIZE * GB)) {
|
||||
uprintf("Device eliminated because it was detected as a card larger than %d GB", MAX_DEFAULT_LIST_CARD_SIZE);
|
||||
} else if ((!enable_HDDs) && (props.is_CARD) && (drive_size > MAX_DEFAULT_LIST_CARD_SIZE)) {
|
||||
uprintf("Device eliminated because it was detected as a card larger than %s",
|
||||
SizeToHumanReadable(MAX_DEFAULT_LIST_CARD_SIZE, FALSE, FALSE));
|
||||
uprintf("To use such a card, check 'List USB Hard Drives' under 'advanced drive properties'");
|
||||
safe_free(devint_detail_data);
|
||||
break;
|
||||
|
@ -986,8 +986,8 @@ BOOL GetDevices(DWORD devnum)
|
|||
safe_free(devint_detail_data);
|
||||
break;
|
||||
}
|
||||
safe_sprintf(&display_msg[strlen(display_msg)], sizeof(display_msg) - strlen(display_msg),
|
||||
"%s [%s]", (right_to_left_mode)?RIGHT_TO_LEFT_MARK:"",
|
||||
safe_sprintf(&display_msg[strlen(display_msg)], sizeof(display_msg) - strlen(display_msg) - 1,
|
||||
"%s [%s]", (right_to_left_mode) ? RIGHT_TO_LEFT_MARK : "",
|
||||
SizeToHumanReadable(drive_size, FALSE, use_fake_units));
|
||||
display_name = display_msg;
|
||||
}
|
||||
|
|
10
src/dos.c
10
src/dos.c
|
@ -2,7 +2,7 @@
|
|||
* Rufus: The Reliable USB Formatting Utility
|
||||
* DOS boot file extraction, from the FAT12 floppy image in diskcopy.dll
|
||||
* (MS WinME DOS) or from the embedded FreeDOS resource files
|
||||
* Copyright © 2011-2023 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2011-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -352,7 +352,7 @@ BOOL ExtractFreeDOS(const char* path)
|
|||
IDR_FD_EGA17_CPX, IDR_FD_EGA18_CPX };
|
||||
char filename[MAX_PATH], locale_path[MAX_PATH];
|
||||
BYTE* res_data;
|
||||
DWORD res_size, Size;
|
||||
DWORD res_size;
|
||||
HANDLE hFile;
|
||||
int i;
|
||||
|
||||
|
@ -366,10 +366,10 @@ BOOL ExtractFreeDOS(const char* path)
|
|||
static_strcat(locale_path, "LOCALE\\");
|
||||
CreateDirectoryA(locale_path, NULL);
|
||||
|
||||
for (i=0; i<ARRAYSIZE(res_name); i++) {
|
||||
for (i = 0; i < ARRAYSIZE(res_name); i++) {
|
||||
res_data = (BYTE*)GetResource(hMainInstance, MAKEINTRESOURCEA(res_id[i]), _RT_RCDATA, res_name[i], &res_size, FALSE);
|
||||
|
||||
static_strcpy(filename, ((i<2)?path:locale_path));
|
||||
static_strcpy(filename, ((i<2) ? path : locale_path));
|
||||
static_strcat(filename, res_name[i]);
|
||||
|
||||
hFile = CreateFileA(filename, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL,
|
||||
|
@ -379,7 +379,7 @@ BOOL ExtractFreeDOS(const char* path)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
if (!WriteFileWithRetry(hFile, res_data, res_size, &Size, WRITE_RETRIES)) {
|
||||
if (!WriteFileWithRetry(hFile, res_data, res_size, NULL, WRITE_RETRIES)) {
|
||||
uprintf("Could not write file '%s': %s.", filename, WindowsErrorString());
|
||||
safe_closehandle(hFile);
|
||||
return FALSE;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* DOS keyboard locale setup
|
||||
* Copyright © 2011-2021 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2011-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -197,8 +197,8 @@ static kb_list fd_kb_list[] = {
|
|||
static int ms_get_kbdrv(const char* kb)
|
||||
{
|
||||
unsigned int i, j;
|
||||
for (i=0; i<ARRAYSIZE(ms_kb_list); i++) {
|
||||
for (j=0; j<ms_kb_list[i].size; j++) {
|
||||
for (i = 0; i<ARRAYSIZE(ms_kb_list); i++) {
|
||||
for (j = 0; j < ms_kb_list[i].size; j++) {
|
||||
if (safe_strcmp(ms_kb_list[i].list[j], kb) == 0) {
|
||||
return i;
|
||||
}
|
||||
|
@ -210,8 +210,8 @@ static int ms_get_kbdrv(const char* kb)
|
|||
static int fd_get_kbdrv(const char* kb)
|
||||
{
|
||||
unsigned int i, j;
|
||||
for (i=0; i<ARRAYSIZE(fd_kb_list); i++) {
|
||||
for (j=0; j<fd_kb_list[i].size; j++) {
|
||||
for (i = 0; i < ARRAYSIZE(fd_kb_list); i++) {
|
||||
for (j = 0; j < fd_kb_list[i].size; j++) {
|
||||
if (safe_strcmp(fd_kb_list[i].list[j], kb) == 0) {
|
||||
return i;
|
||||
}
|
||||
|
@ -250,7 +250,7 @@ static const char* kb_hr_list[][2] = {
|
|||
{"is", "Icelandic"},
|
||||
{"it", "Italian"},
|
||||
{"jp", "Japanese"},
|
||||
// {"ko", "Korean"}, // Unsupported by FreeDOS?
|
||||
// {"ko", "Korean"}, // Unsupported by FreeDOS
|
||||
{"nl", "Dutch"},
|
||||
{"no", "Norwegian"},
|
||||
{"pl", "Polish"},
|
||||
|
@ -270,7 +270,7 @@ static const char* kb_hr_list[][2] = {
|
|||
{"lv", "Latvian"},
|
||||
{"lt", "Lithuanian"},
|
||||
{"tj", "Tajik"},
|
||||
// {"fa", "Persian"}; // Unsupported by FreeDOS?
|
||||
// {"fa", "Persian"}; // Unsupported by FreeDOS
|
||||
{"vi", "Vietnamese"},
|
||||
{"hy", "Armenian"},
|
||||
{"az", "Azeri"},
|
||||
|
@ -288,7 +288,7 @@ static const char* kb_hr_list[][2] = {
|
|||
static const char* kb_to_hr(const char* kb)
|
||||
{
|
||||
int i;
|
||||
for (i=0; i<ARRAYSIZE(kb_hr_list); i++) {
|
||||
for (i = 0; i < ARRAYSIZE(kb_hr_list); i++) {
|
||||
if (safe_strcmp(kb, kb_hr_list[i][0]) == 0) {
|
||||
return kb_hr_list[i][1];
|
||||
}
|
||||
|
@ -426,7 +426,7 @@ static cp_list cp_hr_list[] = {
|
|||
static const char* cp_to_hr(ULONG cp)
|
||||
{
|
||||
int i;
|
||||
for (i=0; i<ARRAYSIZE(cp_hr_list); i++) {
|
||||
for (i = 0; i < ARRAYSIZE(cp_hr_list); i++) {
|
||||
if (cp_hr_list[i].cp == cp) {
|
||||
return cp_hr_list[i].name;
|
||||
}
|
||||
|
@ -449,13 +449,13 @@ static const char* get_kb(void)
|
|||
// need an KLID which GetKeyboardLayoutNameA() does return ...but only as a
|
||||
// string of an hex value...
|
||||
GetKeyboardLayoutNameA(kbid_str);
|
||||
if (sscanf(kbid_str, "%x", &kbid) == 0) {
|
||||
uprintf("Could not scan keyboard layout name - falling back to US as default\n");
|
||||
if (sscanf(kbid_str, "%x", &kbid) <= 0) {
|
||||
uprintf("Could not scan keyboard layout name - defaulting to US");
|
||||
kbid = 0x00000409;
|
||||
}
|
||||
uprintf("Windows KBID 0x%08x\n", kbid);
|
||||
|
||||
for (pass=0; pass<3; pass++) {
|
||||
for (pass = 0; pass < 3; pass++) {
|
||||
// Some of these return values are defined in
|
||||
// HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes
|
||||
// Others are picked up in FreeDOS official keyboard layouts, v3.0
|
||||
|
@ -748,12 +748,12 @@ static const char* get_kb(void)
|
|||
} else if (pass == 1) {
|
||||
// If we still didn't get a match, use the system's primary language
|
||||
kbid = PRIMARYLANGID(GetSystemDefaultLangID());
|
||||
uprintf("Unable to match KBID, trying LangID 0x%04x\n", kbid);
|
||||
uprintf("Unable to match KBID, trying LangID 0x%04x", kbid);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
uprintf("Unable to match KBID and LangID - defaulting to US\n");
|
||||
uprintf("Unable to match KBID and LangID - defaulting to US");
|
||||
return "us";
|
||||
}
|
||||
|
||||
|
@ -976,14 +976,14 @@ BOOL SetDOSLocale(const char* path, BOOL bFreeDOS)
|
|||
// First handle the codepage
|
||||
kb = get_kb();
|
||||
// We have a keyboard ID, but that doesn't mean it's supported
|
||||
kbdrv = bFreeDOS?fd_get_kbdrv(kb):ms_get_kbdrv(kb);
|
||||
kbdrv = bFreeDOS ? fd_get_kbdrv(kb) : ms_get_kbdrv(kb);
|
||||
if (kbdrv < 0) {
|
||||
uprintf("Keyboard id '%s' is not supported - falling back to 'us'\n", kb);
|
||||
uprintf("Keyboard id '%s' is not supported - falling back to 'us'", kb);
|
||||
kb = "us";
|
||||
kbdrv = bFreeDOS?fd_get_kbdrv(kb):ms_get_kbdrv(kb); // Always succeeds
|
||||
kbdrv = bFreeDOS ? fd_get_kbdrv(kb) : ms_get_kbdrv(kb); // Always succeeds
|
||||
}
|
||||
assert(kbdrv >= 0);
|
||||
uprintf("Will use DOS keyboard '%s' [%s]\n", kb, kb_to_hr(kb));
|
||||
uprintf("Will use DOS keyboard '%s' [%s]", kb, kb_to_hr(kb));
|
||||
|
||||
// Now get a codepage
|
||||
cp = GetOEMCP();
|
||||
|
@ -994,16 +994,16 @@ BOOL SetDOSLocale(const char* path, BOOL bFreeDOS)
|
|||
(char*)&actual_cp, sizeof(actual_cp)))
|
||||
cp = actual_cp;
|
||||
}
|
||||
egadrv = bFreeDOS?fd_get_ega(cp):ms_get_ega(cp);
|
||||
egadrv = bFreeDOS ? fd_get_ega(cp) : ms_get_ega(cp);
|
||||
if (egadrv == NULL) {
|
||||
// We need to use the fallback CP from the keyboard we got above, as 437 is not always available
|
||||
uprintf("Unable to find an EGA file with codepage %d [%s]\n", cp, cp_to_hr(cp));
|
||||
uprintf("Unable to find an EGA file with codepage %d [%s]", cp, cp_to_hr(cp));
|
||||
cp = kbdrv_data[kbdrv].default_cp;
|
||||
egadrv = bFreeDOS?"ega.cpx":"ega.cpi";
|
||||
egadrv = bFreeDOS ? "ega.cpx" : "ega.cpi";
|
||||
} else if (bFreeDOS) {
|
||||
cp = fd_upgrade_cp(cp);
|
||||
}
|
||||
uprintf("Will use codepage %d [%s]\n", cp, cp_to_hr(cp));
|
||||
uprintf("Will use codepage %d [%s]", cp, cp_to_hr(cp));
|
||||
|
||||
if ((cp == 437) && (strcmp(kb, "us") == 0)) {
|
||||
// Nothing much to do if US/US - just notify in autoexec.bat
|
||||
|
@ -1011,14 +1011,14 @@ BOOL SetDOSLocale(const char* path, BOOL bFreeDOS)
|
|||
static_strcat(filename, "\\AUTOEXEC.BAT");
|
||||
fd = fopen(filename, "w+");
|
||||
if (fd == NULL) {
|
||||
uprintf("Unable to create 'AUTOEXEC.BAT': %s.\n", WindowsErrorString());
|
||||
uprintf("Unable to create 'AUTOEXEC.BAT': %s", WindowsErrorString());
|
||||
return FALSE;
|
||||
}
|
||||
fprintf(fd, "@echo off\n");
|
||||
fprintf(fd, "set PATH=.;\\;\\LOCALE\n");
|
||||
fprintf(fd, "echo Using %s keyboard with %s codepage [%d]\n", kb_to_hr("us"), cp_to_hr(437), 437);
|
||||
fclose(fd);
|
||||
uprintf("Successfully wrote 'AUTOEXEC.BAT'\n");
|
||||
uprintf("Successfully wrote 'AUTOEXEC.BAT'");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -1027,7 +1027,7 @@ BOOL SetDOSLocale(const char* path, BOOL bFreeDOS)
|
|||
static_strcat(filename, "\\CONFIG.SYS");
|
||||
fd = fopen(filename, "w+");
|
||||
if (fd == NULL) {
|
||||
uprintf("Unable to create 'CONFIG.SYS': %s.\n", WindowsErrorString());
|
||||
uprintf("Unable to create 'CONFIG.SYS': %s.", WindowsErrorString());
|
||||
return FALSE;
|
||||
}
|
||||
if (bFreeDOS) {
|
||||
|
@ -1045,14 +1045,14 @@ BOOL SetDOSLocale(const char* path, BOOL bFreeDOS)
|
|||
bFreeDOS?"MENU ":"MENUITEM=", bFreeDOS?')':',', kb_to_hr("us"), cp_to_hr(437), 437);
|
||||
fprintf(fd, "%s", bFreeDOS?"MENU\n12?\n":"[1]\ndevice=\\locale\\display.sys con=(ega,,1)\n[2]\n");
|
||||
fclose(fd);
|
||||
uprintf("Successfully wrote 'CONFIG.SYS'\n");
|
||||
uprintf("Successfully wrote 'CONFIG.SYS'");
|
||||
|
||||
// AUTOEXEC.BAT
|
||||
static_strcpy(filename, path);
|
||||
static_strcat(filename, "\\AUTOEXEC.BAT");
|
||||
fd = fopen(filename, "w+");
|
||||
if (fd == NULL) {
|
||||
uprintf("Unable to create 'AUTOEXEC.BAT': %s.\n", WindowsErrorString());
|
||||
uprintf("Unable to create 'AUTOEXEC.BAT': %s", WindowsErrorString());
|
||||
return FALSE;
|
||||
}
|
||||
fprintf(fd, "@echo off\n");
|
||||
|
@ -1066,7 +1066,7 @@ BOOL SetDOSLocale(const char* path, BOOL bFreeDOS)
|
|||
fprintf(fd, "keyb %s,,\\locale\\%s\n", kb, kbdrv_data[kbdrv].name);
|
||||
fprintf(fd, ":2\n");
|
||||
fclose(fd);
|
||||
uprintf("Successfully wrote 'AUTOEXEC.BAT'\n");
|
||||
uprintf("Successfully wrote 'AUTOEXEC.BAT'");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
464
src/drive.c
464
src/drive.c
|
@ -74,7 +74,7 @@ PF_TYPE_DECL(NTAPI, NTSTATUS, NtQueryVolumeInformationFile, (HANDLE, PIO_STATUS_
|
|||
RUFUS_DRIVE_INFO SelectedDrive;
|
||||
extern BOOL write_as_esp;
|
||||
extern windows_version_t WindowsVersion;
|
||||
uint64_t partition_offset[PI_MAX];
|
||||
int partition_index[PI_MAX];
|
||||
uint64_t persistence_size = 0;
|
||||
|
||||
/*
|
||||
|
@ -90,13 +90,12 @@ uint64_t persistence_size = 0;
|
|||
BOOL SetAutoMount(BOOL enable)
|
||||
{
|
||||
HANDLE hMountMgr;
|
||||
DWORD size;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
hMountMgr = CreateFileA(MOUNTMGR_DOS_DEVICE_NAME, 0, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
if (hMountMgr == INVALID_HANDLE_VALUE)
|
||||
return FALSE;
|
||||
ret = DeviceIoControl(hMountMgr, IOCTL_MOUNTMGR_SET_AUTO_MOUNT, &enable, sizeof(enable), NULL, 0, &size, NULL);
|
||||
ret = DeviceIoControl(hMountMgr, IOCTL_MOUNTMGR_SET_AUTO_MOUNT, &enable, sizeof(enable), NULL, 0, NULL, NULL);
|
||||
CloseHandle(hMountMgr);
|
||||
return ret;
|
||||
}
|
||||
|
@ -137,7 +136,6 @@ static HANDLE GetHandle(char* Path, BOOL bLockDrive, BOOL bWriteAccess, BOOL bWr
|
|||
{
|
||||
int i;
|
||||
BYTE access_mask = 0;
|
||||
DWORD size;
|
||||
uint64_t EndTime;
|
||||
HANDLE hDrive = INVALID_HANDLE_VALUE;
|
||||
char DevPath[MAX_PATH];
|
||||
|
@ -186,22 +184,22 @@ static HANDLE GetHandle(char* Path, BOOL bLockDrive, BOOL bWriteAccess, BOOL bWr
|
|||
}
|
||||
|
||||
if (bLockDrive) {
|
||||
if (DeviceIoControl(hDrive, FSCTL_ALLOW_EXTENDED_DASD_IO, NULL, 0, NULL, 0, &size, NULL)) {
|
||||
if (DeviceIoControl(hDrive, FSCTL_ALLOW_EXTENDED_DASD_IO, NULL, 0, NULL, 0, NULL, NULL)) {
|
||||
uprintf("I/O boundary checks disabled");
|
||||
}
|
||||
|
||||
EndTime = GetTickCount64() + DRIVE_ACCESS_TIMEOUT;
|
||||
do {
|
||||
if (DeviceIoControl(hDrive, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, &size, NULL))
|
||||
if (DeviceIoControl(hDrive, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, NULL, NULL))
|
||||
goto out;
|
||||
if (IS_ERROR(FormatStatus)) // User cancel
|
||||
if (IS_ERROR(ErrorStatus)) // User cancel
|
||||
break;
|
||||
Sleep(DRIVE_ACCESS_TIMEOUT / DRIVE_ACCESS_RETRIES);
|
||||
} while (GetTickCount64() < EndTime);
|
||||
// If we reached this section, either we didn't manage to get a lock or the user cancelled
|
||||
uprintf("Could not lock access to %s: %s", Path, WindowsErrorString());
|
||||
// See if we can report the processes are accessing the drive
|
||||
if (!IS_ERROR(FormatStatus) && (access_mask == 0))
|
||||
if (!IS_ERROR(ErrorStatus) && (access_mask == 0))
|
||||
access_mask = GetProcessSearch(SEARCH_PROCESS_TIMEOUT, 0x07, FALSE);
|
||||
// Try to continue if the only access rights we saw were for read-only
|
||||
if ((access_mask & 0x07) != 0x01)
|
||||
|
@ -311,8 +309,7 @@ char* GetLogicalName(DWORD DriveIndex, uint64_t PartitionOffset, BOOL bKeepTrail
|
|||
continue;
|
||||
}
|
||||
|
||||
r = DeviceIoControl(hDrive, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0,
|
||||
&DiskExtents, sizeof(DiskExtents), &size, NULL);
|
||||
r = DeviceIoControl(hDrive, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0, &DiskExtents, sizeof(DiskExtents), &size, NULL);
|
||||
if ((!r) || (size == 0)) {
|
||||
suprintf("Could not get Disk Extents: %s", r ? "(empty data)" : WindowsErrorString());
|
||||
safe_closehandle(hDrive);
|
||||
|
@ -392,7 +389,7 @@ char* AltGetLogicalName(DWORD DriveIndex, uint64_t PartitionOffset, BOOL bKeepTr
|
|||
if (PartitionOffset == 0) {
|
||||
i = 0;
|
||||
} else if (matching_drive) {
|
||||
for (i = 0; (i < MAX_PARTITIONS) && (PartitionOffset != SelectedDrive.PartitionOffset[i]); i++);
|
||||
for (i = 0; (i < MAX_PARTITIONS) && (PartitionOffset != SelectedDrive.Partition[i].Offset); i++);
|
||||
if (i >= MAX_PARTITIONS) {
|
||||
suprintf("Error: Could not find a partition at offset %lld on this disk", PartitionOffset);
|
||||
goto out;
|
||||
|
@ -428,11 +425,11 @@ char* GetExtPartitionName(DWORD DriveIndex, uint64_t PartitionOffset)
|
|||
if (DriveIndex != SelectedDrive.DeviceNumber)
|
||||
goto out;
|
||||
CheckDriveIndex(DriveIndex);
|
||||
for (i = 0; (i < MAX_PARTITIONS) && (PartitionOffset != SelectedDrive.PartitionOffset[i]); i++);
|
||||
for (i = 0; (i < MAX_PARTITIONS) && (PartitionOffset != SelectedDrive.Partition[i].Offset); i++);
|
||||
if (i >= MAX_PARTITIONS)
|
||||
goto out;
|
||||
static_sprintf(volume_name, "\\\\.\\PhysicalDrive%lu %I64u %I64u", DriveIndex,
|
||||
SelectedDrive.PartitionOffset[i], SelectedDrive.PartitionSize[i]);
|
||||
SelectedDrive.Partition[i].Offset, SelectedDrive.Partition[i].Size);
|
||||
ret = safe_strdup(volume_name);
|
||||
out:
|
||||
return ret;
|
||||
|
@ -1006,7 +1003,7 @@ BOOL WaitForLogical(DWORD DriveIndex, uint64_t PartitionOffset)
|
|||
return TRUE;
|
||||
}
|
||||
free(LogicalPath);
|
||||
if (IS_ERROR(FormatStatus)) // User cancel
|
||||
if (IS_ERROR(ErrorStatus)) // User cancel
|
||||
return FALSE;
|
||||
Sleep(DRIVE_ACCESS_TIMEOUT / DRIVE_ACCESS_RETRIES);
|
||||
} while (GetTickCount64() < EndTime);
|
||||
|
@ -1063,13 +1060,12 @@ int GetDriveNumber(HANDLE hDrive, char* path)
|
|||
BOOL s;
|
||||
int r = -1;
|
||||
|
||||
if (!DeviceIoControl(hDrive, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0,
|
||||
&DiskExtents, sizeof(DiskExtents), &size, NULL) || (size <= 0) || (DiskExtents.NumberOfDiskExtents < 1) ) {
|
||||
if (!DeviceIoControl(hDrive, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0, &DiskExtents, sizeof(DiskExtents), &size, NULL) ||
|
||||
(size <= 0) || (DiskExtents.NumberOfDiskExtents < 1)) {
|
||||
// DiskExtents are NO_GO (which is the case for external USB HDDs...)
|
||||
s = DeviceIoControl(hDrive, IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL, 0, &DeviceNumber, sizeof(DeviceNumber),
|
||||
&size, NULL);
|
||||
s = DeviceIoControl(hDrive, IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL, 0, &DeviceNumber, sizeof(DeviceNumber), &size, NULL);
|
||||
if ((!s) || (size == 0)) {
|
||||
uprintf("Could not get device number for device %s %s", path, s ? "(empty data)" : WindowsErrorString());
|
||||
uuprintf("Could not get device number for device %s %s", path, s ? "(empty data)" : WindowsErrorString());
|
||||
return -1;
|
||||
}
|
||||
r = (int)DeviceNumber.DeviceNumber;
|
||||
|
@ -1181,8 +1177,7 @@ static BOOL _GetDriveLettersAndType(DWORD DriveIndex, char* drive_letters, UINT*
|
|||
// handling to determine if they are fixed or removable.
|
||||
if ((drives_found == 0) && (drive_type != NULL)) {
|
||||
hPhysical = GetPhysicalHandle(DriveIndex + DRIVE_INDEX_MIN, FALSE, FALSE, FALSE);
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,
|
||||
NULL, 0, geometry, sizeof(geometry), &size, NULL);
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, geometry, sizeof(geometry), &size, NULL);
|
||||
safe_closehandle(hPhysical);
|
||||
if (r && size > 0) {
|
||||
if (DiskGeometry->Geometry.MediaType == FixedMedia)
|
||||
|
@ -1314,7 +1309,7 @@ BOOL IsDriveLetterInUse(const char drive_letter)
|
|||
BOOL GetDriveLabel(DWORD DriveIndex, char* letters, char** label, BOOL bSilent)
|
||||
{
|
||||
HANDLE hPhysical;
|
||||
DWORD size, error;
|
||||
DWORD error;
|
||||
static char VolumeLabel[MAX_PATH + 1] = { 0 };
|
||||
char DrivePath[] = "#:\\", AutorunPath[] = "#:\\autorun.inf", *AutorunLabel = NULL;
|
||||
WCHAR VolumeName[MAX_PATH + 1] = { 0 }, FileSystemName[64];
|
||||
|
@ -1344,7 +1339,7 @@ BOOL GetDriveLabel(DWORD DriveIndex, char* letters, char** label, BOOL bSilent)
|
|||
// In the case of card readers with no card, users can get an annoying popup asking them
|
||||
// to insert media. Use IOCTL_STORAGE_CHECK_VERIFY to prevent this
|
||||
hPhysical = GetPhysicalHandle(DriveIndex, FALSE, FALSE, TRUE);
|
||||
if (DeviceIoControl(hPhysical, IOCTL_STORAGE_CHECK_VERIFY, NULL, 0, NULL, 0, &size, NULL))
|
||||
if (DeviceIoControl(hPhysical, IOCTL_STORAGE_CHECK_VERIFY, NULL, 0, NULL, 0, NULL, NULL))
|
||||
AutorunLabel = get_token_data_file("label", AutorunPath);
|
||||
else if (GetLastError() == ERROR_NOT_READY)
|
||||
suprintf("Ignoring 'autorun.inf' label for drive %c: No media", toupper(letters[0]));
|
||||
|
@ -1386,8 +1381,7 @@ uint64_t GetDriveSize(DWORD DriveIndex)
|
|||
if (hPhysical == INVALID_HANDLE_VALUE)
|
||||
return FALSE;
|
||||
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,
|
||||
NULL, 0, geometry, sizeof(geometry), &size, NULL);
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, geometry, sizeof(geometry), &size, NULL);
|
||||
safe_closehandle(hPhysical);
|
||||
if (!r || size <= 0)
|
||||
return 0;
|
||||
|
@ -1405,8 +1399,7 @@ BOOL IsMediaPresent(DWORD DriveIndex)
|
|||
BYTE geometry[128];
|
||||
|
||||
hPhysical = GetPhysicalHandle(DriveIndex, FALSE, FALSE, TRUE);
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,
|
||||
NULL, 0, geometry, sizeof(geometry), &size, NULL) && (size > 0);
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, geometry, sizeof(geometry), &size, NULL) && (size > 0);
|
||||
safe_closehandle(hPhysical);
|
||||
return r;
|
||||
}
|
||||
|
@ -1509,8 +1502,7 @@ uint64_t GetEspOffset(DWORD DriveIndex)
|
|||
if (hPhysical == INVALID_HANDLE_VALUE)
|
||||
return FALSE;
|
||||
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_LAYOUT_EX,
|
||||
NULL, 0, layout, sizeof(layout), &size, NULL);
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, NULL, 0, layout, sizeof(layout), &size, NULL);
|
||||
if (!r || size <= 0) {
|
||||
uprintf("Could not get layout for drive 0x%02x: %s", DriveIndex, WindowsErrorString());
|
||||
goto out;
|
||||
|
@ -1694,7 +1686,7 @@ BOOL ToggleEsp(DWORD DriveIndex, uint64_t PartitionOffset)
|
|||
}
|
||||
|
||||
DriveLayout->PartitionEntry[esp_index].RewritePartition = TRUE; // Just in case
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_SET_DRIVE_LAYOUT_EX, (BYTE*)DriveLayout, dl_size, NULL, 0, &dl_size, NULL);
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_SET_DRIVE_LAYOUT_EX, (BYTE*)DriveLayout, dl_size, NULL, 0, NULL, NULL);
|
||||
if (!r) {
|
||||
uprintf("Could not set drive layout: %s", WindowsErrorString());
|
||||
goto out;
|
||||
|
@ -1868,8 +1860,7 @@ BOOL GetDrivePartitionData(DWORD DriveIndex, char* FileSystemName, DWORD FileSys
|
|||
return FALSE;
|
||||
|
||||
SelectedDrive.nPartitions = 0;
|
||||
memset(SelectedDrive.PartitionOffset, 0, sizeof(SelectedDrive.PartitionOffset));
|
||||
memset(SelectedDrive.PartitionSize, 0, sizeof(SelectedDrive.PartitionSize));
|
||||
memset(SelectedDrive.Partition, 0, sizeof(SelectedDrive.Partition));
|
||||
// Populate the filesystem data
|
||||
FileSystemName[0] = 0;
|
||||
volume_name = GetLogicalName(DriveIndex, 0, TRUE, FALSE);
|
||||
|
@ -1882,8 +1873,7 @@ BOOL GetDrivePartitionData(DWORD DriveIndex, char* FileSystemName, DWORD FileSys
|
|||
if (hPhysical == INVALID_HANDLE_VALUE)
|
||||
return FALSE;
|
||||
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,
|
||||
NULL, 0, geometry, sizeof(geometry), &size, NULL);
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, geometry, sizeof(geometry), &size, NULL);
|
||||
if (!r || size <= 0) {
|
||||
suprintf("Could not get geometry for drive 0x%02x: %s", DriveIndex, WindowsErrorString());
|
||||
safe_closehandle(hPhysical);
|
||||
|
@ -1905,8 +1895,7 @@ BOOL GetDrivePartitionData(DWORD DriveIndex, char* FileSystemName, DWORD FileSys
|
|||
suprintf("Cylinders: %" PRIi64 ", Tracks per cylinder: %d, Sectors per track: %d",
|
||||
DiskGeometry->Geometry.Cylinders, DiskGeometry->Geometry.TracksPerCylinder, DiskGeometry->Geometry.SectorsPerTrack);
|
||||
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_LAYOUT_EX,
|
||||
NULL, 0, layout, sizeof(layout), &size, NULL );
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, NULL, 0, layout, sizeof(layout), &size, NULL );
|
||||
if (!r || size <= 0) {
|
||||
suprintf("Could not get layout for drive 0x%02x: %s", DriveIndex, WindowsErrorString());
|
||||
safe_closehandle(hPhysical);
|
||||
|
@ -1961,8 +1950,8 @@ BOOL GetDrivePartitionData(DWORD DriveIndex, char* FileSystemName, DWORD FileSys
|
|||
}
|
||||
}
|
||||
if (i < MAX_PARTITIONS) {
|
||||
SelectedDrive.PartitionOffset[i] = DriveLayout->PartitionEntry[i].StartingOffset.QuadPart;
|
||||
SelectedDrive.PartitionSize[i] = DriveLayout->PartitionEntry[i].PartitionLength.QuadPart;
|
||||
SelectedDrive.Partition[i].Offset = DriveLayout->PartitionEntry[i].StartingOffset.QuadPart;
|
||||
SelectedDrive.Partition[i].Size = DriveLayout->PartitionEntry[i].PartitionLength.QuadPart;
|
||||
}
|
||||
suprintf(" Type: %s (0x%02x)\r\n Detected File System: %s\r\n"
|
||||
" Size: %s (%lld bytes)\r\n Start Sector: %lld, Boot: %s",
|
||||
|
@ -1992,12 +1981,13 @@ BOOL GetDrivePartitionData(DWORD DriveIndex, char* FileSystemName, DWORD FileSys
|
|||
DriveLayout->Gpt.MaxPartitionCount, DriveLayout->Gpt.StartingUsableOffset.QuadPart, DriveLayout->Gpt.UsableLength.QuadPart);
|
||||
for (i = 0; i < DriveLayout->PartitionCount; i++) {
|
||||
if (i < MAX_PARTITIONS) {
|
||||
SelectedDrive.PartitionOffset[i] = DriveLayout->PartitionEntry[i].StartingOffset.QuadPart;
|
||||
SelectedDrive.PartitionSize[i] = DriveLayout->PartitionEntry[i].PartitionLength.QuadPart;
|
||||
SelectedDrive.Partition[i].Offset = DriveLayout->PartitionEntry[i].StartingOffset.QuadPart;
|
||||
SelectedDrive.Partition[i].Size = DriveLayout->PartitionEntry[i].PartitionLength.QuadPart;
|
||||
wcscpy(SelectedDrive.Partition[i].Name, DriveLayout->PartitionEntry[i].Gpt.Name);
|
||||
}
|
||||
SelectedDrive.nPartitions++;
|
||||
isUefiNtfs = (wcscmp(DriveLayout->PartitionEntry[i].Gpt.Name, L"UEFI:NTFS") == 0);
|
||||
suprintf("Partition %d%s:\r\n Type: %s", i+1, isUefiNtfs ? " (UEFI:NTFS)" : "",
|
||||
suprintf("Partition %d%s:\r\n Type: %s", i + 1, isUefiNtfs ? " (UEFI:NTFS)" : "",
|
||||
GetGPTPartitionType(&DriveLayout->PartitionEntry[i].Gpt.PartitionType));
|
||||
if (DriveLayout->PartitionEntry[i].Gpt.Name[0] != 0)
|
||||
suprintf(" Name: '%S'", DriveLayout->PartitionEntry[i].Gpt.Name);
|
||||
|
@ -2062,9 +2052,7 @@ out:
|
|||
*/
|
||||
BOOL UnmountVolume(HANDLE hDrive)
|
||||
{
|
||||
DWORD size;
|
||||
|
||||
if (!DeviceIoControl(hDrive, FSCTL_DISMOUNT_VOLUME, NULL, 0, NULL, 0, &size, NULL)) {
|
||||
if (!DeviceIoControl(hDrive, FSCTL_DISMOUNT_VOLUME, NULL, 0, NULL, 0, NULL, NULL)) {
|
||||
uprintf("Could not unmount drive: %s", WindowsErrorString());
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -2219,7 +2207,7 @@ BOOL RemountVolume(char* drive_name, BOOL bSilent)
|
|||
} else {
|
||||
suprintf("Could not remount %s as %c: %s", volume_name, toupper(drive_name[0]), WindowsErrorString());
|
||||
// This will leave the drive inaccessible and must be flagged as an error
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_CANT_REMOUNT_VOLUME);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_REMOUNT_VOLUME));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -2232,15 +2220,17 @@ BOOL RemountVolume(char* drive_name, BOOL bSilent)
|
|||
* (especially IOCTL_DISK_UPDATE_PROPERTIES is *USELESS*), and therefore the OS will try to
|
||||
* read the file system data at an old location, even if the partition has just been deleted.
|
||||
*/
|
||||
static BOOL ClearPartition(HANDLE hDrive, LARGE_INTEGER offset, DWORD size)
|
||||
static BOOL ClearPartition(HANDLE hDrive, uint64_t offset, DWORD size)
|
||||
{
|
||||
BOOL r = FALSE;
|
||||
uint8_t* buffer = calloc(size, 1);
|
||||
LARGE_INTEGER li_offset;
|
||||
|
||||
if (buffer == NULL)
|
||||
return FALSE;
|
||||
|
||||
if (!SetFilePointerEx(hDrive, offset, NULL, FILE_BEGIN)) {
|
||||
li_offset.QuadPart = offset;
|
||||
if (!SetFilePointerEx(hDrive, li_offset, NULL, FILE_BEGIN)) {
|
||||
free(buffer);
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -2260,17 +2250,14 @@ static BOOL ClearPartition(HANDLE hDrive, LARGE_INTEGER offset, DWORD size)
|
|||
BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL mbr_uefi_marker, uint8_t extra_partitions)
|
||||
{
|
||||
const char* PartitionTypeName[] = { "MBR", "GPT", "SFD" };
|
||||
const wchar_t *extra_part_name = L"", *main_part_name = write_as_esp ? L"EFI System Partition" : L"Main Data Partition";
|
||||
const LONGLONG main_part_size = write_as_esp ? MAX_ISO_TO_ESP_SIZE * MB : SelectedDrive.DiskSize;
|
||||
const LONGLONG bytes_per_track = ((LONGLONG)SelectedDrive.SectorsPerTrack) * SelectedDrive.SectorSize;
|
||||
const DWORD size_to_clear = MAX_SECTORS_TO_CLEAR * SelectedDrive.SectorSize;
|
||||
uint8_t* buffer;
|
||||
uint64_t last_offset = SelectedDrive.DiskSize;
|
||||
size_t uefi_ntfs_size = 0;
|
||||
DWORD pi = 0, mi, i, size, bufsize;
|
||||
CREATE_DISK CreateDisk = { PARTITION_STYLE_RAW, { { 0 } } };
|
||||
DRIVE_LAYOUT_INFORMATION_EX4 DriveLayoutEx = { 0 };
|
||||
BOOL r;
|
||||
DWORD i, size, bufsize, pn = 0;
|
||||
LONGLONG main_part_size_in_sectors, extra_part_size_in_tracks = 0;
|
||||
// Go for a 260 MB sized ESP by default to keep everyone happy, including 4K sector users:
|
||||
// https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/configure-uefigpt-based-hard-drive-partitions
|
||||
// and folks using MacOS: https://github.com/pbatard/rufus/issues/979
|
||||
|
@ -2288,17 +2275,19 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
|
|||
|
||||
if (extra_partitions & XP_UEFI_NTFS) {
|
||||
uefi_ntfs_size = GetResourceSize(hMainInstance, MAKEINTRESOURCEA(IDR_UEFI_NTFS), _RT_RCDATA, "uefi-ntfs.img");
|
||||
if (uefi_ntfs_size == 0)
|
||||
if (uefi_ntfs_size == 0) {
|
||||
uprintf("Could not access embedded 'uefi-ntfs.img'");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
memset(partition_offset, 0, sizeof(partition_offset));
|
||||
memset(SelectedDrive.PartitionOffset, 0, sizeof(SelectedDrive.PartitionOffset));
|
||||
memset(SelectedDrive.PartitionSize, 0, sizeof(SelectedDrive.PartitionSize));
|
||||
|
||||
// Compute the start offset of our first partition
|
||||
memset(partition_index, 0, sizeof(partition_index));
|
||||
memset(SelectedDrive.Partition, 0, sizeof(SelectedDrive.Partition));
|
||||
|
||||
// Compute the starting offset of the first partition
|
||||
if ((partition_style == PARTITION_STYLE_GPT) || (!IsChecked(IDC_OLD_BIOS_FIXES))) {
|
||||
// Go with the MS 1 MB wastage at the beginning...
|
||||
DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart = MB;
|
||||
SelectedDrive.Partition[pi].Offset = 1 * MB;
|
||||
} else {
|
||||
// Some folks appear to think that 'Fixes for old BIOSes' is some kind of magic
|
||||
// wand and are adamant to try to apply them when creating *MODERN* VHD drives.
|
||||
|
@ -2308,11 +2297,10 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
|
|||
// CHS sizes that IBM imparted upon us. Long story short, we now align to a
|
||||
// cylinder size that is itself aligned to the cluster size.
|
||||
// If this actually breaks old systems, please send your complaints to IBM.
|
||||
DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart =
|
||||
((bytes_per_track + (ClusterSize - 1)) / ClusterSize) * ClusterSize;
|
||||
SelectedDrive.Partition[pi].Offset = HI_ALIGN_X_TO_Y(bytes_per_track, ClusterSize);
|
||||
// GRUB2 no longer fits in the usual 31½ KB that the above computation provides
|
||||
// so just unconditionally double that size and get on with it.
|
||||
DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart *= 2;
|
||||
SelectedDrive.Partition[pi].Offset *= 2;
|
||||
}
|
||||
|
||||
// Having the ESP up front may help (and is the Microsoft recommended way) but this
|
||||
|
@ -2321,22 +2309,16 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
|
|||
if (((SelectedDrive.MediaType == FixedMedia) || (WindowsVersion.BuildNumber > 15000)) &&
|
||||
(extra_partitions & XP_ESP)) {
|
||||
assert(partition_style == PARTITION_STYLE_GPT);
|
||||
extra_part_name = L"EFI System Partition";
|
||||
DriveLayoutEx.PartitionEntry[pn].PartitionLength.QuadPart = esp_size;
|
||||
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = PARTITION_GENERIC_ESP;
|
||||
uprintf("● Creating %S (offset: %lld, size: %s)", extra_part_name, DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart,
|
||||
SizeToHumanReadable(DriveLayoutEx.PartitionEntry[pn].PartitionLength.QuadPart, TRUE, FALSE));
|
||||
IGNORE_RETVAL(CoCreateGuid(&DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionId));
|
||||
wcsncpy(DriveLayoutEx.PartitionEntry[pn].Gpt.Name, extra_part_name, ARRAYSIZE(DriveLayoutEx.PartitionEntry[pn].Gpt.Name));
|
||||
// Zero the first sectors from this partition to avoid file system caching issues
|
||||
if (!ClearPartition(hDrive, DriveLayoutEx.PartitionEntry[pn].StartingOffset, size_to_clear))
|
||||
uprintf("Could not zero %S: %s", extra_part_name, WindowsErrorString());
|
||||
SelectedDrive.PartitionOffset[pn] = DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart;
|
||||
SelectedDrive.PartitionSize[pn] = DriveLayoutEx.PartitionEntry[pn].PartitionLength.QuadPart;
|
||||
partition_offset[PI_ESP] = SelectedDrive.PartitionOffset[pn];
|
||||
pn++;
|
||||
DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart = DriveLayoutEx.PartitionEntry[pn - 1].StartingOffset.QuadPart +
|
||||
DriveLayoutEx.PartitionEntry[pn - 1].PartitionLength.QuadPart;
|
||||
partition_index[PI_ESP] = pi;
|
||||
wcscpy(SelectedDrive.Partition[pi].Name, L"EFI System Partition");
|
||||
SelectedDrive.Partition[pi].Size = esp_size;
|
||||
SelectedDrive.Partition[pi + 1].Offset = SelectedDrive.Partition[pi].Offset + SelectedDrive.Partition[pi].Size;
|
||||
// Align next partition to track and cluster
|
||||
SelectedDrive.Partition[pi + 1].Offset = HI_ALIGN_X_TO_Y(SelectedDrive.Partition[pi + 1].Offset, bytes_per_track);
|
||||
if (ClusterSize % SelectedDrive.SectorSize == 0)
|
||||
SelectedDrive.Partition[pi + 1].Offset = LO_ALIGN_X_TO_Y(SelectedDrive.Partition[pi + 1].Offset, ClusterSize);
|
||||
assert(SelectedDrive.Partition[pi + 1].Offset >= SelectedDrive.Partition[pi].Offset + SelectedDrive.Partition[pi].Size);
|
||||
pi++;
|
||||
// Clear the extra partition we processed
|
||||
extra_partitions &= ~(XP_ESP);
|
||||
}
|
||||
|
@ -2344,192 +2326,166 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
|
|||
// If required, set the MSR partition (GPT only - must be created before the data part)
|
||||
if (extra_partitions & XP_MSR) {
|
||||
assert(partition_style == PARTITION_STYLE_GPT);
|
||||
extra_part_name = L"Microsoft Reserved Partition";
|
||||
DriveLayoutEx.PartitionEntry[pn].PartitionLength.QuadPart = 128*MB;
|
||||
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = PARTITION_MICROSOFT_RESERVED;
|
||||
uprintf("● Creating %S (offset: %lld, size: %s)", extra_part_name, DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart,
|
||||
SizeToHumanReadable(DriveLayoutEx.PartitionEntry[pn].PartitionLength.QuadPart, TRUE, FALSE));
|
||||
IGNORE_RETVAL(CoCreateGuid(&DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionId));
|
||||
wcsncpy(DriveLayoutEx.PartitionEntry[pn].Gpt.Name, extra_part_name, ARRAYSIZE(DriveLayoutEx.PartitionEntry[pn].Gpt.Name));
|
||||
// Zero the first sectors from this partition to avoid file system caching issues
|
||||
if (!ClearPartition(hDrive, DriveLayoutEx.PartitionEntry[pn].StartingOffset, size_to_clear))
|
||||
uprintf("Could not zero %S: %s", extra_part_name, WindowsErrorString());
|
||||
SelectedDrive.PartitionOffset[pn] = DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart;
|
||||
SelectedDrive.PartitionSize[pn] = DriveLayoutEx.PartitionEntry[pn].PartitionLength.QuadPart;
|
||||
pn++;
|
||||
DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart = DriveLayoutEx.PartitionEntry[pn-1].StartingOffset.QuadPart +
|
||||
DriveLayoutEx.PartitionEntry[pn-1].PartitionLength.QuadPart;
|
||||
// Clear the extra partition we processed
|
||||
wcscpy(SelectedDrive.Partition[pi].Name, L"Microsoft Reserved Partition");
|
||||
SelectedDrive.Partition[pi].Size = 128 * MB;
|
||||
SelectedDrive.Partition[pi + 1].Offset = SelectedDrive.Partition[pi].Offset + SelectedDrive.Partition[pi].Size;
|
||||
SelectedDrive.Partition[pi + 1].Offset = HI_ALIGN_X_TO_Y(SelectedDrive.Partition[pi + 1].Offset, bytes_per_track);
|
||||
if (ClusterSize % SelectedDrive.SectorSize == 0)
|
||||
SelectedDrive.Partition[pi + 1].Offset = LO_ALIGN_X_TO_Y(SelectedDrive.Partition[pi + 1].Offset, ClusterSize);
|
||||
assert(SelectedDrive.Partition[pi + 1].Offset >= SelectedDrive.Partition[pi].Offset + SelectedDrive.Partition[pi].Size);
|
||||
pi++;
|
||||
extra_partitions &= ~(XP_MSR);
|
||||
}
|
||||
|
||||
// Set our main data partition
|
||||
if (write_as_esp) {
|
||||
// Align ESP to 64 MB while leaving at least 32 MB free space
|
||||
esp_size = max(esp_size, ((((LONGLONG)img_report.projected_size / MB) + 96) / 64) * 64 * MB);
|
||||
main_part_size_in_sectors = (esp_size - DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart) /
|
||||
SelectedDrive.SectorSize;
|
||||
} else {
|
||||
main_part_size_in_sectors = (main_part_size - DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart) /
|
||||
// Need 33 sectors at the end for secondary GPT
|
||||
SelectedDrive.SectorSize - ((partition_style == PARTITION_STYLE_GPT) ? 33 : 0);
|
||||
}
|
||||
// Reserve an entry for the main partition
|
||||
partition_index[PI_MAIN] = pi++;
|
||||
// Shorthand for the main index.
|
||||
mi = partition_index[PI_MAIN];
|
||||
wcscpy(SelectedDrive.Partition[mi].Name, write_as_esp ? L"EFI System Partition" : L"Main Data Partition");
|
||||
|
||||
if (extra_partitions) {
|
||||
// Adjust the size according to extra partitions (which we always align to a track)
|
||||
if (extra_partitions & XP_ESP) {
|
||||
extra_part_name = L"EFI System";
|
||||
extra_part_size_in_tracks = (esp_size + bytes_per_track - 1) / bytes_per_track;
|
||||
} else if (extra_partitions & XP_UEFI_NTFS) {
|
||||
extra_part_name = L"UEFI:NTFS";
|
||||
extra_part_size_in_tracks = (max(MIN_EXTRA_PART_SIZE, uefi_ntfs_size) + bytes_per_track - 1) / bytes_per_track;
|
||||
} else if ((extra_partitions & XP_CASPER)) {
|
||||
// TODO: Should we align these to cluster as well?
|
||||
if (extra_partitions & XP_PERSISTENCE) {
|
||||
assert(persistence_size != 0);
|
||||
extra_part_name = L"Linux Persistence";
|
||||
extra_part_size_in_tracks = persistence_size / bytes_per_track;
|
||||
} else if (extra_partitions & XP_COMPAT) {
|
||||
extra_part_name = L"BIOS Compatibility";
|
||||
extra_part_size_in_tracks = 1; // One track for the extra partition
|
||||
} else {
|
||||
assert(FALSE);
|
||||
partition_index[PI_CASPER] = pi;
|
||||
wcscpy(SelectedDrive.Partition[pi].Name, L"Linux Persistence");
|
||||
SelectedDrive.Partition[pi++].Size = HI_ALIGN_X_TO_Y(persistence_size, bytes_per_track);
|
||||
}
|
||||
if (extra_partitions & XP_ESP) {
|
||||
partition_index[PI_ESP] = pi;
|
||||
wcscpy(SelectedDrive.Partition[pi].Name, L"EFI System Partition");
|
||||
SelectedDrive.Partition[pi++].Size = HI_ALIGN_X_TO_Y(esp_size, bytes_per_track);
|
||||
} else if (extra_partitions & XP_UEFI_NTFS) {
|
||||
partition_index[PI_UEFI_NTFS] = pi;
|
||||
wcscpy(SelectedDrive.Partition[pi].Name, L"UEFI:NTFS");
|
||||
SelectedDrive.Partition[pi++].Size = HI_ALIGN_X_TO_Y(uefi_ntfs_size, bytes_per_track);
|
||||
} else if (extra_partitions & XP_COMPAT) {
|
||||
wcscpy(SelectedDrive.Partition[pi].Name, L"BIOS Compatibility");
|
||||
SelectedDrive.Partition[pi++].Size = bytes_per_track; // One track for the extra partition
|
||||
}
|
||||
// NB: Because we already subtracted the backup GPT size from the main partition size and
|
||||
// this extra partition is indexed on main size, it does not overflow into the backup GPT.
|
||||
main_part_size_in_sectors = ((main_part_size_in_sectors / SelectedDrive.SectorsPerTrack) -
|
||||
extra_part_size_in_tracks) * SelectedDrive.SectorsPerTrack;
|
||||
}
|
||||
assert(pi <= MAX_PARTITIONS);
|
||||
if (pi > MAX_PARTITIONS)
|
||||
return FALSE;
|
||||
|
||||
// Compute the offsets of the extra partitions (which we always align to a track)
|
||||
last_offset = SelectedDrive.DiskSize;
|
||||
if (partition_style == PARTITION_STYLE_GPT)
|
||||
last_offset -= 33ULL * SelectedDrive.SectorSize;
|
||||
for (i = pi - 1; i > mi; i--) {
|
||||
assert(SelectedDrive.Partition[i].Size < last_offset);
|
||||
SelectedDrive.Partition[i].Offset = LO_ALIGN_X_TO_Y(last_offset - SelectedDrive.Partition[i].Size, bytes_per_track);
|
||||
last_offset = SelectedDrive.Partition[i].Offset;
|
||||
}
|
||||
|
||||
// With the above, Compute the main partition size (which we align to a track)
|
||||
assert(last_offset > SelectedDrive.Partition[mi].Offset);
|
||||
SelectedDrive.Partition[mi].Size = LO_ALIGN_X_TO_Y(last_offset - SelectedDrive.Partition[mi].Offset, bytes_per_track);
|
||||
// Try to make sure that the main partition size is a multiple of the cluster size
|
||||
// This can be especially important when trying to capture an NTFS partition as FFU, as, when
|
||||
// the NTFS partition is aligned to cluster size, the FFU capture parses the NTFS allocated
|
||||
// map to only record clusters that are in use, whereas, if not aligned, the FFU capture uses
|
||||
// a full sector by sector scan of the NTFS partition and records any non-zero garbage, which
|
||||
// may include garbage leftover data from a previous reformat...
|
||||
if (ClusterSize % SelectedDrive.SectorSize == 0) {
|
||||
main_part_size_in_sectors = (((main_part_size_in_sectors * SelectedDrive.SectorSize) /
|
||||
ClusterSize) * ClusterSize) / SelectedDrive.SectorSize;
|
||||
}
|
||||
if (main_part_size_in_sectors <= 0) {
|
||||
uprintf("Error: Invalid %S size", main_part_name);
|
||||
if (ClusterSize % SelectedDrive.SectorSize == 0)
|
||||
SelectedDrive.Partition[mi].Size = LO_ALIGN_X_TO_Y(SelectedDrive.Partition[mi].Size, ClusterSize);
|
||||
if (SelectedDrive.Partition[mi].Size <= 0) {
|
||||
uprintf("Error: Invalid %S size", SelectedDrive.Partition[mi].Name);
|
||||
return FALSE;
|
||||
}
|
||||
uprintf("● Creating %S (offset: %lld, size: %s)", main_part_name, DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart,
|
||||
SizeToHumanReadable(main_part_size_in_sectors * SelectedDrive.SectorSize, TRUE, FALSE));
|
||||
// Zero the beginning of this partition to avoid conflicting leftovers
|
||||
if (!ClearPartition(hDrive, DriveLayoutEx.PartitionEntry[pn].StartingOffset, size_to_clear))
|
||||
uprintf("Could not zero %S: %s", main_part_name, WindowsErrorString());
|
||||
|
||||
DriveLayoutEx.PartitionEntry[pn].PartitionLength.QuadPart = main_part_size_in_sectors * SelectedDrive.SectorSize;
|
||||
if (partition_style == PARTITION_STYLE_MBR) {
|
||||
DriveLayoutEx.PartitionEntry[pn].Mbr.BootIndicator = (boot_type != BT_NON_BOOTABLE);
|
||||
switch (file_system) {
|
||||
case FS_FAT16:
|
||||
DriveLayoutEx.PartitionEntry[pn].Mbr.PartitionType = 0x0e; // FAT16 LBA
|
||||
break;
|
||||
case FS_NTFS:
|
||||
case FS_EXFAT:
|
||||
case FS_UDF:
|
||||
case FS_REFS:
|
||||
DriveLayoutEx.PartitionEntry[pn].Mbr.PartitionType = 0x07;
|
||||
break;
|
||||
case FS_EXT2:
|
||||
case FS_EXT3:
|
||||
case FS_EXT4:
|
||||
DriveLayoutEx.PartitionEntry[pn].Mbr.PartitionType = 0x83;
|
||||
break;
|
||||
case FS_FAT32:
|
||||
DriveLayoutEx.PartitionEntry[pn].Mbr.PartitionType = 0x0c; // FAT32 LBA
|
||||
break;
|
||||
default:
|
||||
uprintf("Unsupported file system");
|
||||
return FALSE;
|
||||
}
|
||||
} else {
|
||||
if (write_as_esp)
|
||||
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = PARTITION_GENERIC_ESP;
|
||||
else if (IS_EXT(file_system))
|
||||
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = PARTITION_LINUX_DATA;
|
||||
else
|
||||
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = PARTITION_MICROSOFT_DATA;
|
||||
IGNORE_RETVAL(CoCreateGuid(&DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionId));
|
||||
wcsncpy(DriveLayoutEx.PartitionEntry[pn].Gpt.Name, main_part_name, ARRAYSIZE(DriveLayoutEx.PartitionEntry[pn].Gpt.Name));
|
||||
}
|
||||
SelectedDrive.PartitionOffset[pn] = DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart;
|
||||
SelectedDrive.PartitionSize[pn] = DriveLayoutEx.PartitionEntry[pn].PartitionLength.QuadPart;
|
||||
partition_offset[PI_MAIN] = SelectedDrive.PartitionOffset[pn];
|
||||
pn++;
|
||||
|
||||
// Set the optional extra partition
|
||||
if (extra_partitions) {
|
||||
// Should end on a track boundary
|
||||
DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart = DriveLayoutEx.PartitionEntry[pn-1].StartingOffset.QuadPart +
|
||||
DriveLayoutEx.PartitionEntry[pn-1].PartitionLength.QuadPart;
|
||||
DriveLayoutEx.PartitionEntry[pn].PartitionLength.QuadPart = (extra_partitions & XP_UEFI_NTFS) ? uefi_ntfs_size :
|
||||
extra_part_size_in_tracks * bytes_per_track;
|
||||
uprintf("● Creating %S Partition (offset: %lld, size: %s)", extra_part_name, DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart,
|
||||
SizeToHumanReadable(DriveLayoutEx.PartitionEntry[pn].PartitionLength.QuadPart, TRUE, FALSE));
|
||||
SelectedDrive.PartitionOffset[pn] = DriveLayoutEx.PartitionEntry[pn].StartingOffset.QuadPart;
|
||||
SelectedDrive.PartitionSize[pn] = DriveLayoutEx.PartitionEntry[pn].PartitionLength.QuadPart;
|
||||
if (extra_partitions & XP_CASPER)
|
||||
partition_offset[PI_CASPER] = SelectedDrive.PartitionOffset[pn];
|
||||
else if (extra_partitions & XP_ESP)
|
||||
partition_offset[PI_ESP] = SelectedDrive.PartitionOffset[pn];
|
||||
|
||||
if (partition_style == PARTITION_STYLE_GPT) {
|
||||
if (extra_partitions & XP_ESP)
|
||||
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = PARTITION_GENERIC_ESP;
|
||||
else if (extra_partitions & XP_CASPER)
|
||||
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = PARTITION_LINUX_DATA;
|
||||
else
|
||||
DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionType = PARTITION_MICROSOFT_DATA;
|
||||
if (extra_partitions & XP_UEFI_NTFS) {
|
||||
// Build the DriveLayoutEx table
|
||||
for (i = 0; i < pi; i++) {
|
||||
uprintf("● Creating %S%s (offset: %lld, size: %s)", SelectedDrive.Partition[i].Name,
|
||||
(wcsstr(SelectedDrive.Partition[i].Name, L"Partition") == NULL) ? " Partition" : "",
|
||||
SelectedDrive.Partition[i].Offset,
|
||||
SizeToHumanReadable(SelectedDrive.Partition[i].Size, TRUE, FALSE));
|
||||
// Zero the first sectors of the partition to avoid file system caching issues
|
||||
if (!ClearPartition(hDrive, SelectedDrive.Partition[i].Offset,
|
||||
(DWORD)MIN(size_to_clear, SelectedDrive.Partition[i].Size)))
|
||||
uprintf("Could not zero %S: %s", SelectedDrive.Partition[i].Name, WindowsErrorString());
|
||||
DriveLayoutEx.PartitionEntry[i].PartitionStyle = partition_style;
|
||||
DriveLayoutEx.PartitionEntry[i].StartingOffset.QuadPart = SelectedDrive.Partition[i].Offset;
|
||||
DriveLayoutEx.PartitionEntry[i].PartitionLength.QuadPart = SelectedDrive.Partition[i].Size;
|
||||
DriveLayoutEx.PartitionEntry[i].PartitionNumber = i + 1;
|
||||
DriveLayoutEx.PartitionEntry[i].RewritePartition = TRUE;
|
||||
if (partition_style == PARTITION_STYLE_MBR) {
|
||||
if (i == mi) {
|
||||
DriveLayoutEx.PartitionEntry[i].Mbr.BootIndicator = (boot_type != BT_NON_BOOTABLE);
|
||||
switch (file_system) {
|
||||
case FS_FAT16:
|
||||
DriveLayoutEx.PartitionEntry[i].Mbr.PartitionType = 0x0e; // FAT16 LBA
|
||||
break;
|
||||
case FS_NTFS:
|
||||
case FS_EXFAT:
|
||||
case FS_UDF:
|
||||
case FS_REFS:
|
||||
DriveLayoutEx.PartitionEntry[i].Mbr.PartitionType = 0x07;
|
||||
break;
|
||||
case FS_EXT2:
|
||||
case FS_EXT3:
|
||||
case FS_EXT4:
|
||||
DriveLayoutEx.PartitionEntry[i].Mbr.PartitionType = 0x83;
|
||||
break;
|
||||
case FS_FAT32:
|
||||
DriveLayoutEx.PartitionEntry[i].Mbr.PartitionType = 0x0c; // FAT32 LBA
|
||||
break;
|
||||
default:
|
||||
uprintf("Unsupported file system");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
// May override the the type of main partition if write_as_esp is active
|
||||
if ((wcscmp(SelectedDrive.Partition[i].Name, L"EFI System Partition") == 0) ||
|
||||
(wcscmp(SelectedDrive.Partition[i].Name, L"UEFI:NTFS") == 0))
|
||||
DriveLayoutEx.PartitionEntry[i].Mbr.PartitionType = 0xef;
|
||||
else if (wcscmp(SelectedDrive.Partition[i].Name, L"Linux Persistence") == 0)
|
||||
DriveLayoutEx.PartitionEntry[i].Mbr.PartitionType = 0x83;
|
||||
else if (wcscmp(SelectedDrive.Partition[i].Name, L"BIOS Compatibility") == 0)
|
||||
DriveLayoutEx.PartitionEntry[i].Mbr.PartitionType = RUFUS_EXTRA_PARTITION_TYPE;
|
||||
} else {
|
||||
assert(partition_style == PARTITION_STYLE_GPT);
|
||||
if (wcscmp(SelectedDrive.Partition[i].Name, L"UEFI:NTFS") == 0) {
|
||||
DriveLayoutEx.PartitionEntry[i].Gpt.PartitionType = PARTITION_GENERIC_ESP;
|
||||
// Prevent a drive letter from being assigned to the UEFI:NTFS partition
|
||||
DriveLayoutEx.PartitionEntry[pn].Gpt.Attributes = GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER;
|
||||
DriveLayoutEx.PartitionEntry[i].Gpt.Attributes = GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER;
|
||||
#if !defined(_DEBUG)
|
||||
// Also make the partition read-only for release versions
|
||||
DriveLayoutEx.PartitionEntry[pn].Gpt.Attributes += GPT_BASIC_DATA_ATTRIBUTE_READ_ONLY;
|
||||
DriveLayoutEx.PartitionEntry[i].Gpt.Attributes += GPT_BASIC_DATA_ATTRIBUTE_READ_ONLY;
|
||||
#endif
|
||||
}
|
||||
IGNORE_RETVAL(CoCreateGuid(&DriveLayoutEx.PartitionEntry[pn].Gpt.PartitionId));
|
||||
wcsncpy(DriveLayoutEx.PartitionEntry[pn].Gpt.Name, (extra_partitions & XP_ESP) ? L"EFI System Partition" : extra_part_name,
|
||||
ARRAYSIZE(DriveLayoutEx.PartitionEntry[pn].Gpt.Name));
|
||||
} else {
|
||||
if (extra_partitions & (XP_UEFI_NTFS | XP_ESP)) {
|
||||
DriveLayoutEx.PartitionEntry[pn].Mbr.PartitionType = 0xef;
|
||||
} else if (extra_partitions & XP_CASPER) {
|
||||
DriveLayoutEx.PartitionEntry[pn].Mbr.PartitionType = 0x83;
|
||||
} else if (extra_partitions & XP_COMPAT) {
|
||||
DriveLayoutEx.PartitionEntry[pn].Mbr.PartitionType = RUFUS_EXTRA_PARTITION_TYPE;
|
||||
// Set the one track compatibility partition to be all hidden sectors
|
||||
DriveLayoutEx.PartitionEntry[pn].Mbr.HiddenSectors = SelectedDrive.SectorsPerTrack;
|
||||
} else {
|
||||
assert(FALSE);
|
||||
}
|
||||
} else if (wcscmp(SelectedDrive.Partition[i].Name, L"EFI System Partition") == 0)
|
||||
DriveLayoutEx.PartitionEntry[i].Gpt.PartitionType = PARTITION_GENERIC_ESP;
|
||||
else if (wcscmp(SelectedDrive.Partition[i].Name, L"Linux Persistence") == 0)
|
||||
DriveLayoutEx.PartitionEntry[i].Gpt.PartitionType = PARTITION_LINUX_DATA;
|
||||
else if (wcscmp(SelectedDrive.Partition[i].Name, L"Microsoft Reserved Partition") == 0)
|
||||
DriveLayoutEx.PartitionEntry[i].Gpt.PartitionType = PARTITION_MICROSOFT_RESERVED;
|
||||
else
|
||||
DriveLayoutEx.PartitionEntry[i].Gpt.PartitionType = PARTITION_MICROSOFT_DATA;
|
||||
IGNORE_RETVAL(CoCreateGuid(&DriveLayoutEx.PartitionEntry[i].Gpt.PartitionId));
|
||||
wcscpy(DriveLayoutEx.PartitionEntry[i].Gpt.Name, SelectedDrive.Partition[i].Name);
|
||||
}
|
||||
|
||||
// We need to write the UEFI:NTFS partition before we refresh the disk
|
||||
if (extra_partitions & XP_UEFI_NTFS) {
|
||||
uprintf("Writing %S data...", extra_part_name);
|
||||
if (!SetFilePointerEx(hDrive, DriveLayoutEx.PartitionEntry[pn].StartingOffset, NULL, FILE_BEGIN)) {
|
||||
uprintf("Could not set position");
|
||||
return FALSE;
|
||||
}
|
||||
buffer = GetResource(hMainInstance, MAKEINTRESOURCEA(IDR_UEFI_NTFS), _RT_RCDATA, "uefi-ntfs.img", &bufsize, FALSE);
|
||||
if (buffer == NULL) {
|
||||
uprintf("Could not access source image");
|
||||
return FALSE;
|
||||
}
|
||||
if(!WriteFileWithRetry(hDrive, buffer, bufsize, &size, WRITE_RETRIES)) {
|
||||
uprintf("Write error: %s", WindowsErrorString());
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
pn++;
|
||||
}
|
||||
|
||||
// Initialize the remaining partition data
|
||||
for (i = 0; i < pn; i++) {
|
||||
DriveLayoutEx.PartitionEntry[i].PartitionNumber = i + 1;
|
||||
DriveLayoutEx.PartitionEntry[i].PartitionStyle = partition_style;
|
||||
DriveLayoutEx.PartitionEntry[i].RewritePartition = TRUE;
|
||||
// We need to write the UEFI:NTFS partition before we refresh the disk
|
||||
if (extra_partitions & XP_UEFI_NTFS) {
|
||||
LARGE_INTEGER li;
|
||||
uprintf("Writing UEFI:NTFS data...", SelectedDrive.Partition[partition_index[PI_UEFI_NTFS]].Name);
|
||||
li.QuadPart = SelectedDrive.Partition[partition_index[PI_UEFI_NTFS]].Offset;
|
||||
if (!SetFilePointerEx(hDrive, li, NULL, FILE_BEGIN)) {
|
||||
uprintf(" Could not set position");
|
||||
return FALSE;
|
||||
}
|
||||
buffer = GetResource(hMainInstance, MAKEINTRESOURCEA(IDR_UEFI_NTFS), _RT_RCDATA,
|
||||
"uefi-ntfs.img", &bufsize, FALSE);
|
||||
if (buffer == NULL) {
|
||||
uprintf(" Could not access source image");
|
||||
return FALSE;
|
||||
}
|
||||
if(!WriteFileWithRetry(hDrive, buffer, bufsize, NULL, WRITE_RETRIES)) {
|
||||
uprintf(" Write error: %s", WindowsErrorString());
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
switch (partition_style) {
|
||||
|
@ -2539,7 +2495,7 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
|
|||
// This helps us reselect the partition scheme option that was used when creating the
|
||||
// drive in Rufus. As far as I can tell, Windows doesn't care much if this signature
|
||||
// isn't unique for USB drives.
|
||||
CreateDisk.Mbr.Signature = mbr_uefi_marker?MBR_UEFI_MARKER:(DWORD)GetTickCount64();
|
||||
CreateDisk.Mbr.Signature = mbr_uefi_marker ? MBR_UEFI_MARKER : (DWORD)GetTickCount64();
|
||||
|
||||
DriveLayoutEx.PartitionStyle = PARTITION_STYLE_MBR;
|
||||
DriveLayoutEx.PartitionCount = 4; // Must be multiple of 4 for MBR
|
||||
|
@ -2558,10 +2514,10 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
|
|||
CreateDisk.Gpt.MaxPartitionCount = MAX_PARTITIONS;
|
||||
|
||||
DriveLayoutEx.PartitionStyle = PARTITION_STYLE_GPT;
|
||||
DriveLayoutEx.PartitionCount = pn;
|
||||
DriveLayoutEx.PartitionCount = pi;
|
||||
// At the very least, a GPT disk has 34 reserved sectors at the beginning and 33 at the end.
|
||||
DriveLayoutEx.Type.Gpt.StartingUsableOffset.QuadPart = 34 * SelectedDrive.SectorSize;
|
||||
DriveLayoutEx.Type.Gpt.UsableLength.QuadPart = SelectedDrive.DiskSize - (34+33) * SelectedDrive.SectorSize;
|
||||
DriveLayoutEx.Type.Gpt.UsableLength.QuadPart = SelectedDrive.DiskSize - (34 + 33) * SelectedDrive.SectorSize;
|
||||
DriveLayoutEx.Type.Gpt.MaxPartitionCount = MAX_PARTITIONS;
|
||||
DriveLayoutEx.Type.Gpt.DiskId = CreateDisk.Gpt.DiskId;
|
||||
break;
|
||||
|
@ -2569,8 +2525,7 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
|
|||
|
||||
// If you don't call IOCTL_DISK_CREATE_DISK, the IOCTL_DISK_SET_DRIVE_LAYOUT_EX call will fail
|
||||
size = sizeof(CreateDisk);
|
||||
r = DeviceIoControl(hDrive, IOCTL_DISK_CREATE_DISK, (BYTE*)&CreateDisk, size, NULL, 0, &size, NULL);
|
||||
if (!r) {
|
||||
if (!DeviceIoControl(hDrive, IOCTL_DISK_CREATE_DISK, (BYTE*)&CreateDisk, size, NULL, 0, NULL, NULL)) {
|
||||
uprintf("Could not reset disk: %s", WindowsErrorString());
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -2578,9 +2533,11 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
|
|||
// "The goggles, they do nothing!"
|
||||
RefreshDriveLayout(hDrive);
|
||||
|
||||
size = sizeof(DriveLayoutEx) - ((partition_style == PARTITION_STYLE_GPT)?((4-pn)*sizeof(PARTITION_INFORMATION_EX)):0);
|
||||
r = DeviceIoControl(hDrive, IOCTL_DISK_SET_DRIVE_LAYOUT_EX, (BYTE*)&DriveLayoutEx, size, NULL, 0, &size, NULL);
|
||||
if (!r) {
|
||||
size = sizeof(DriveLayoutEx) - ((partition_style == PARTITION_STYLE_GPT) ?
|
||||
((MAX_PARTITIONS - pi) * sizeof(PARTITION_INFORMATION_EX)) : 0);
|
||||
// The DRIVE_LAYOUT_INFORMATION_EX used by Microsoft, with its 1-sized array, is designed to overrun...
|
||||
// coverity[overrun-buffer-arg]
|
||||
if (!DeviceIoControl(hDrive, IOCTL_DISK_SET_DRIVE_LAYOUT_EX, (BYTE*)&DriveLayoutEx, size, NULL, 0, NULL, NULL)) {
|
||||
uprintf("Could not set drive layout: %s", WindowsErrorString());
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -2594,10 +2551,9 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
|
|||
BOOL RefreshDriveLayout(HANDLE hDrive)
|
||||
{
|
||||
BOOL r;
|
||||
DWORD size;
|
||||
|
||||
// Diskpart does call the following IOCTL this after updating the partition table, so we do too
|
||||
r = DeviceIoControl(hDrive, IOCTL_DISK_UPDATE_PROPERTIES, NULL, 0, NULL, 0, &size, NULL );
|
||||
r = DeviceIoControl(hDrive, IOCTL_DISK_UPDATE_PROPERTIES, NULL, 0, NULL, 0, NULL, NULL);
|
||||
if (!r)
|
||||
uprintf("Could not refresh drive layout: %s", WindowsErrorString());
|
||||
return r;
|
||||
|
@ -2607,20 +2563,17 @@ BOOL RefreshDriveLayout(HANDLE hDrive)
|
|||
BOOL InitializeDisk(HANDLE hDrive)
|
||||
{
|
||||
BOOL r;
|
||||
DWORD size;
|
||||
CREATE_DISK CreateDisk = {PARTITION_STYLE_RAW, {{0}}};
|
||||
|
||||
uprintf("Initializing disk...");
|
||||
|
||||
size = sizeof(CreateDisk);
|
||||
r = DeviceIoControl(hDrive, IOCTL_DISK_CREATE_DISK,
|
||||
(BYTE*)&CreateDisk, size, NULL, 0, &size, NULL );
|
||||
r = DeviceIoControl(hDrive, IOCTL_DISK_CREATE_DISK, (BYTE*)&CreateDisk, sizeof(CreateDisk), NULL, 0, NULL, NULL);
|
||||
if (!r) {
|
||||
uprintf("Could not delete drive layout: %s", WindowsErrorString());
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
r = DeviceIoControl(hDrive, IOCTL_DISK_UPDATE_PROPERTIES, NULL, 0, NULL, 0, &size, NULL );
|
||||
r = DeviceIoControl(hDrive, IOCTL_DISK_UPDATE_PROPERTIES, NULL, 0, NULL, 0, NULL, NULL);
|
||||
if (!r) {
|
||||
uprintf("Could not refresh drive layout: %s", WindowsErrorString());
|
||||
return FALSE;
|
||||
|
@ -2663,8 +2616,7 @@ BOOL IsMsDevDrive(DWORD DriveIndex)
|
|||
if (hPhysical == INVALID_HANDLE_VALUE)
|
||||
goto out;
|
||||
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_LAYOUT_EX,
|
||||
NULL, 0, layout, sizeof(layout), &size, NULL);
|
||||
r = DeviceIoControl(hPhysical, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, NULL, 0, layout, sizeof(layout), &size, NULL);
|
||||
if (!r || size <= 0)
|
||||
goto out;
|
||||
|
||||
|
|
19
src/drive.h
19
src/drive.h
|
@ -36,12 +36,13 @@
|
|||
#define XP_ESP 0x02
|
||||
#define XP_UEFI_NTFS 0x04
|
||||
#define XP_COMPAT 0x08
|
||||
#define XP_CASPER 0x10
|
||||
#define XP_PERSISTENCE 0x10
|
||||
|
||||
#define PI_MAIN 0
|
||||
#define PI_ESP 1
|
||||
#define PI_CASPER 2
|
||||
#define PI_MAX 3
|
||||
#define PI_UEFI_NTFS 3
|
||||
#define PI_MAX 4
|
||||
|
||||
// The following should match VDS_FSOF_FLAGS as much as possible
|
||||
#define FP_FORCE 0x00000001
|
||||
|
@ -57,7 +58,7 @@
|
|||
#define VDS_RESCAN_REFRESH 0x00000001
|
||||
#define VDS_RESCAN_REENUMERATE 0x00000002
|
||||
|
||||
#define VDS_SET_ERROR(hr) do { if (hr != S_OK) { SetLastError((DWORD)hr); FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_GEN_FAILURE; } } while(0)
|
||||
#define VDS_SET_ERROR(hr) do { if (hr != S_OK) { SetLastError((DWORD)hr); ErrorStatus = RUFUS_ERROR(ERROR_GEN_FAILURE); } } while(0)
|
||||
|
||||
#if !defined(__MINGW32__)
|
||||
typedef enum _FSINFOCLASS {
|
||||
|
@ -347,8 +348,7 @@ typedef struct _DRIVE_LAYOUT_INFORMATION_EX4 {
|
|||
} DRIVE_LAYOUT_INFORMATION_EX4, *PDRIVE_LAYOUT_INFORMATION_EX4;
|
||||
|
||||
static __inline BOOL UnlockDrive(HANDLE hDrive) {
|
||||
DWORD size;
|
||||
return DeviceIoControl(hDrive, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, &size, NULL);
|
||||
return DeviceIoControl(hDrive, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, NULL, NULL);
|
||||
}
|
||||
#define safe_unlockclose(h) do {if ((h != INVALID_HANDLE_VALUE) && (h != NULL)) {UnlockDrive(h); CloseHandle(h); h = INVALID_HANDLE_VALUE;}} while(0)
|
||||
|
||||
|
@ -362,8 +362,11 @@ typedef struct {
|
|||
MEDIA_TYPE MediaType;
|
||||
int PartitionStyle;
|
||||
int nPartitions; // number of partitions we actually care about
|
||||
uint64_t PartitionOffset[MAX_PARTITIONS];
|
||||
uint64_t PartitionSize[MAX_PARTITIONS];
|
||||
struct {
|
||||
wchar_t Name[36];
|
||||
uint64_t Offset;
|
||||
uint64_t Size;
|
||||
} Partition[MAX_PARTITIONS];
|
||||
int FSType;
|
||||
char proposed_label[16];
|
||||
BOOL has_protective_mbr;
|
||||
|
@ -374,7 +377,7 @@ typedef struct {
|
|||
} ClusterSize[FS_MAX];
|
||||
} RUFUS_DRIVE_INFO;
|
||||
extern RUFUS_DRIVE_INFO SelectedDrive;
|
||||
extern uint64_t partition_offset[PI_MAX];
|
||||
extern int partition_index[PI_MAX];
|
||||
|
||||
BOOL SetAutoMount(BOOL enable);
|
||||
BOOL GetAutoMount(BOOL* enabled);
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
*
|
||||
* Copyright (C) 1993, 1994, 1995 Theodore Ts'o.
|
||||
* Copyright (C) 1998 Andrey Shedel <andreys@ns.cr.cyco.com>
|
||||
* Copyright (C) 2018-2019 Pete Batard <pete@akeo.ie>
|
||||
* Copyright (C) 2018-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* %Begin-Header%
|
||||
* This file may be redistributed under the terms of the GNU Library
|
||||
|
@ -180,7 +180,7 @@ static __inline unsigned _MapNtStatus(IN NTSTATUS Status)
|
|||
// Return the last Windows Error
|
||||
DWORD ext2_last_winerror(DWORD default_error)
|
||||
{
|
||||
return ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | (LastWinError ? LastWinError : default_error);
|
||||
return RUFUS_ERROR(LastWinError ? LastWinError : default_error);
|
||||
}
|
||||
|
||||
//
|
||||
|
|
334
src/format.c
334
src/format.c
|
@ -65,16 +65,18 @@
|
|||
* Globals
|
||||
*/
|
||||
const char* FileSystemLabel[FS_MAX] = { "FAT", "FAT32", "NTFS", "UDF", "exFAT", "ReFS", "ext2", "ext3", "ext4" };
|
||||
DWORD FormatStatus = 0, LastWriteError = 0;
|
||||
DWORD ErrorStatus = 0, LastWriteError = 0;
|
||||
badblocks_report report = { 0 };
|
||||
static float format_percent = 0.0f;
|
||||
static int task_number = 0, actual_fs_type;
|
||||
static unsigned int sec_buf_pos = 0;
|
||||
extern const int nb_steps[FS_MAX];
|
||||
extern const char* md5sum_name[2];
|
||||
extern uint32_t dur_mins, dur_secs;
|
||||
extern uint32_t wim_nb_files, wim_proc_files, wim_extra_files;
|
||||
extern BOOL force_large_fat32, enable_ntfs_compression, lock_drive, zero_drive, fast_zeroing, enable_file_indexing;
|
||||
extern BOOL write_as_image, use_vds, write_as_esp, is_vds_available, has_ffu_support;
|
||||
extern BOOL write_as_image, use_vds, write_as_esp, is_vds_available, has_ffu_support, use_rufus_mbr;
|
||||
extern char* archive_path;
|
||||
uint8_t *grub2_buf = NULL, *sec_buf = NULL;
|
||||
long grub2_len;
|
||||
|
||||
|
@ -112,7 +114,7 @@ out:
|
|||
static BOOLEAN __stdcall FormatExCallback(FILE_SYSTEM_CALLBACK_COMMAND Command, DWORD Action, PVOID pData)
|
||||
{
|
||||
char percent_str[8];
|
||||
if (IS_ERROR(FormatStatus))
|
||||
if (IS_ERROR(ErrorStatus))
|
||||
return FALSE;
|
||||
|
||||
assert((actual_fs_type >= 0) && (actual_fs_type < FS_MAX));
|
||||
|
@ -139,38 +141,38 @@ static BOOLEAN __stdcall FormatExCallback(FILE_SYSTEM_CALLBACK_COMMAND Command,
|
|||
UpdateProgress(OP_CREATE_FS, 100.0f);
|
||||
if(*(BOOLEAN*)pData == FALSE) {
|
||||
uprintf("Error while formatting");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_GEN_FAILURE;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_GEN_FAILURE);
|
||||
}
|
||||
break;
|
||||
case FCC_DONE_WITH_STRUCTURE:
|
||||
break;
|
||||
case FCC_INCOMPATIBLE_FILE_SYSTEM:
|
||||
uprintf("Incompatible File System");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_INCOMPATIBLE_FS);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_INCOMPATIBLE_FS));
|
||||
break;
|
||||
case FCC_ACCESS_DENIED:
|
||||
uprintf("Access denied");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_ACCESS_DENIED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_ACCESS_DENIED);
|
||||
break;
|
||||
case FCC_MEDIA_WRITE_PROTECTED:
|
||||
uprintf("Media is write protected");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_PROTECT;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_WRITE_PROTECT);
|
||||
break;
|
||||
case FCC_VOLUME_IN_USE:
|
||||
uprintf("Volume is in use");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_DEVICE_IN_USE;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_DEVICE_IN_USE);
|
||||
break;
|
||||
case FCC_DEVICE_NOT_READY:
|
||||
uprintf("The device is not ready");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_NOT_READY;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_NOT_READY);
|
||||
break;
|
||||
case FCC_CANT_QUICK_FORMAT:
|
||||
uprintf("Cannot quick format this volume");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_CANT_QUICK_FORMAT);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_QUICK_FORMAT));
|
||||
break;
|
||||
case FCC_BAD_LABEL:
|
||||
uprintf("Bad label");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_LABEL_TOO_LONG;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_LABEL_TOO_LONG);
|
||||
break;
|
||||
case FCC_OUTPUT:
|
||||
OutputUTF8Message(((PTEXTOUTPUT)pData)->Output);
|
||||
|
@ -178,27 +180,27 @@ static BOOLEAN __stdcall FormatExCallback(FILE_SYSTEM_CALLBACK_COMMAND Command,
|
|||
case FCC_CLUSTER_SIZE_TOO_BIG:
|
||||
case FCC_CLUSTER_SIZE_TOO_SMALL:
|
||||
uprintf("Unsupported cluster size");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_INVALID_CLUSTER_SIZE);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_INVALID_CLUSTER_SIZE));
|
||||
break;
|
||||
case FCC_VOLUME_TOO_BIG:
|
||||
case FCC_VOLUME_TOO_SMALL:
|
||||
uprintf("Volume is too %s", (Command == FCC_VOLUME_TOO_BIG)?"big":"small");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_INVALID_VOLUME_SIZE);
|
||||
uprintf("Volume is too %s", (Command == FCC_VOLUME_TOO_BIG) ? "big" : "small");
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_INVALID_VOLUME_SIZE));
|
||||
break;
|
||||
case FCC_NO_MEDIA_IN_DRIVE:
|
||||
uprintf("No media in drive");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_NO_MEDIA_IN_DRIVE;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_NO_MEDIA_IN_DRIVE);
|
||||
break;
|
||||
case FCC_ALIGNMENT_VIOLATION:
|
||||
uprintf("Partition start offset is not aligned to the cluster size");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_OFFSET_ALIGNMENT_VIOLATION;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_OFFSET_ALIGNMENT_VIOLATION);
|
||||
break;
|
||||
default:
|
||||
uprintf("FormatExCallback: Received unhandled command 0x%02X - aborting", Command);
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_NOT_SUPPORTED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_NOT_SUPPORTED);
|
||||
break;
|
||||
}
|
||||
return (!IS_ERROR(FormatStatus));
|
||||
return (!IS_ERROR(ErrorStatus));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -207,7 +209,7 @@ static BOOLEAN __stdcall FormatExCallback(FILE_SYSTEM_CALLBACK_COMMAND Command,
|
|||
static BOOLEAN __stdcall ChkdskCallback(FILE_SYSTEM_CALLBACK_COMMAND Command, DWORD Action, PVOID pData)
|
||||
{
|
||||
DWORD* percent;
|
||||
if (IS_ERROR(FormatStatus))
|
||||
if (IS_ERROR(ErrorStatus))
|
||||
return FALSE;
|
||||
|
||||
switch (Command) {
|
||||
|
@ -357,7 +359,7 @@ static BOOL FormatNativeVds(DWORD DriveIndex, uint64_t PartitionOffset, DWORD Cl
|
|||
wVolumeName = utf8_to_wchar(VolumeName);
|
||||
if (wVolumeName == NULL) {
|
||||
uprintf("Could not read volume name");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_GEN_FAILURE;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_GEN_FAILURE);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -528,7 +530,7 @@ static BOOL FormatNativeVds(DWORD DriveIndex, uint64_t PartitionOffset, DWORD Cl
|
|||
|
||||
hr = IVdsVolumeMF3_FormatEx2(pVolumeMF3, wFSName, usFsVersion, ClusterSize, wLabel, Flags, &pAsync);
|
||||
while (SUCCEEDED(hr)) {
|
||||
if (IS_ERROR(FormatStatus)) {
|
||||
if (IS_ERROR(ErrorStatus)) {
|
||||
IVdsAsync_Cancel(pAsync);
|
||||
break;
|
||||
}
|
||||
|
@ -558,7 +560,7 @@ static BOOL FormatNativeVds(DWORD DriveIndex, uint64_t PartitionOffset, DWORD Cl
|
|||
IVdsAsync_Release(pAsync);
|
||||
IVdsVolumeMF3_Release(pVolumeMF3);
|
||||
|
||||
if (!IS_ERROR(FormatStatus)) {
|
||||
if (!IS_ERROR(ErrorStatus)) {
|
||||
uprintf("Format completed.");
|
||||
r = TRUE;
|
||||
}
|
||||
|
@ -568,8 +570,8 @@ static BOOL FormatNativeVds(DWORD DriveIndex, uint64_t PartitionOffset, DWORD Cl
|
|||
}
|
||||
|
||||
out:
|
||||
if ((!bFoundVolume) && (FormatStatus == 0))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_PATH_NOT_FOUND;
|
||||
if ((!bFoundVolume) && (ErrorStatus == 0))
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_PATH_NOT_FOUND);
|
||||
safe_free(VolumeName);
|
||||
safe_free(wVolumeName);
|
||||
safe_free(wLabel);
|
||||
|
@ -601,7 +603,7 @@ static BOOL FormatNative(DWORD DriveIndex, uint64_t PartitionOffset, DWORD Clust
|
|||
wVolumeName = utf8_to_wchar(VolumeName);
|
||||
if (wVolumeName == NULL) {
|
||||
uprintf("Could not read volume name (%s)", VolumeName);
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_GEN_FAILURE;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_GEN_FAILURE);
|
||||
goto out;
|
||||
}
|
||||
// Hey, nice consistency here, Microsoft! - FormatEx() fails if wVolumeName has
|
||||
|
@ -630,12 +632,12 @@ static BOOL FormatNative(DWORD DriveIndex, uint64_t PartitionOffset, DWORD Clust
|
|||
for (i = 0; i < WRITE_RETRIES; i++) {
|
||||
pfFormatEx(wVolumeName, SelectedDrive.MediaType, wFSName, wLabel,
|
||||
(Flags & FP_QUICK), ClusterSize, FormatExCallback);
|
||||
if (!IS_ERROR(FormatStatus) || (HRESULT_CODE(FormatStatus) == ERROR_CANCELLED))
|
||||
if (!IS_ERROR(ErrorStatus) || (HRESULT_CODE(ErrorStatus) == ERROR_CANCELLED))
|
||||
break;
|
||||
uprintf("%s - Retrying...", WindowsErrorString());
|
||||
Sleep(WRITE_TIMEOUT);
|
||||
}
|
||||
if (IS_ERROR(FormatStatus))
|
||||
if (IS_ERROR(ErrorStatus))
|
||||
goto out;
|
||||
|
||||
if (Flags & FP_COMPRESSION) {
|
||||
|
@ -647,14 +649,14 @@ static BOOL FormatNative(DWORD DriveIndex, uint64_t PartitionOffset, DWORD Clust
|
|||
}
|
||||
}
|
||||
|
||||
if (!IS_ERROR(FormatStatus)) {
|
||||
if (!IS_ERROR(ErrorStatus)) {
|
||||
uprintf("Format completed.");
|
||||
r = TRUE;
|
||||
}
|
||||
|
||||
out:
|
||||
if (!r && !IS_ERROR(FormatStatus))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|SCODE_CODE(GetLastError());
|
||||
if (!r && !IS_ERROR(ErrorStatus))
|
||||
ErrorStatus = RUFUS_ERROR(SCODE_CODE(GetLastError()));
|
||||
safe_free(VolumeName);
|
||||
safe_free(wVolumeName);
|
||||
safe_free(wLabel);
|
||||
|
@ -666,7 +668,7 @@ BOOL FormatPartition(DWORD DriveIndex, uint64_t PartitionOffset, DWORD UnitAlloc
|
|||
{
|
||||
if ((DriveIndex < 0x80) || (DriveIndex > 0x100) || (FSType >= FS_MAX) ||
|
||||
((UnitAllocationSize != 0) && (!IS_POWER_OF_2(UnitAllocationSize)))) {
|
||||
ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_INVALID_PARAMETER;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_INVALID_PARAMETER);
|
||||
return FALSE;
|
||||
}
|
||||
actual_fs_type = FSType;
|
||||
|
@ -706,8 +708,8 @@ static BOOL CheckDisk(char DriveLetter)
|
|||
}
|
||||
|
||||
pfChkdsk(wDriveRoot, wFSType, FALSE, FALSE, FALSE, FALSE, NULL, NULL, ChkdskCallback);
|
||||
if (!IS_ERROR(FormatStatus)) {
|
||||
uprintf("NTFS Fixup completed.\n");
|
||||
if (!IS_ERROR(ErrorStatus)) {
|
||||
uprintf("NTFS Fixup completed.");
|
||||
r = TRUE;
|
||||
}
|
||||
|
||||
|
@ -740,7 +742,7 @@ static BOOL ClearMBRGPT(HANDLE hPhysicalDrive, LONGLONG DiskSize, DWORD SectorSi
|
|||
uprintf("Erasing %llu sectors", num_sectors_to_clear);
|
||||
pZeroBuf = calloc(SectorSize, (size_t)num_sectors_to_clear);
|
||||
if (pZeroBuf == NULL) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_NOT_ENOUGH_MEMORY;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_NOT_ENOUGH_MEMORY);
|
||||
goto out;
|
||||
}
|
||||
liFilePointer.QuadPart = 0ULL;
|
||||
|
@ -769,8 +771,8 @@ out:
|
|||
static BOOL WriteMBR(HANDLE hPhysicalDrive)
|
||||
{
|
||||
BOOL r = FALSE;
|
||||
DWORD size;
|
||||
unsigned char* buffer = NULL;
|
||||
BOOL needs_masquerading = HAS_WINPE(img_report) && (!img_report.uses_minint);
|
||||
uint8_t* buffer = NULL;
|
||||
FAKE_FD fake_fd = { 0 };
|
||||
FILE* fp = (FILE*)&fake_fd;
|
||||
const char* using_msg = "Using %s MBR";
|
||||
|
@ -789,47 +791,46 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive)
|
|||
|
||||
// FormatEx rewrites the MBR and removes the LBA attribute of FAT16
|
||||
// and FAT32 partitions - we need to correct this in the MBR
|
||||
buffer = (unsigned char*)_mm_malloc(SelectedDrive.SectorSize, 16);
|
||||
buffer = (uint8_t*)_mm_malloc(SelectedDrive.SectorSize, 16);
|
||||
if (buffer == NULL) {
|
||||
uprintf("Could not allocate memory for MBR");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_NOT_ENOUGH_MEMORY;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_NOT_ENOUGH_MEMORY);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (!read_sectors(hPhysicalDrive, SelectedDrive.SectorSize, 0, 1, buffer)) {
|
||||
uprintf("Could not read MBR\n");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_READ_FAULT;
|
||||
uprintf("Could not read MBR");
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_READ_FAULT);
|
||||
goto out;
|
||||
}
|
||||
|
||||
switch (ComboBox_GetCurItemData(hFileSystem)) {
|
||||
case FS_FAT16:
|
||||
if (buffer[0x1c2] == 0x0e) {
|
||||
uprintf("Partition is already FAT16 LBA...\n");
|
||||
uprintf("Partition is already FAT16 LBA...");
|
||||
} else if ((buffer[0x1c2] != 0x04) && (buffer[0x1c2] != 0x06)) {
|
||||
uprintf("Warning: converting a non FAT16 partition to FAT16 LBA: FS type=0x%02x\n", buffer[0x1c2]);
|
||||
uprintf("Warning: converting a non FAT16 partition to FAT16 LBA: FS type=0x%02x", buffer[0x1c2]);
|
||||
}
|
||||
buffer[0x1c2] = 0x0e;
|
||||
break;
|
||||
case FS_FAT32:
|
||||
if (buffer[0x1c2] == 0x0c) {
|
||||
uprintf("Partition is already FAT32 LBA...\n");
|
||||
uprintf("Partition is already FAT32 LBA...");
|
||||
} else if (buffer[0x1c2] != 0x0b) {
|
||||
uprintf("Warning: converting a non FAT32 partition to FAT32 LBA: FS type=0x%02x\n", buffer[0x1c2]);
|
||||
uprintf("Warning: converting a non FAT32 partition to FAT32 LBA: FS type=0x%02x", buffer[0x1c2]);
|
||||
}
|
||||
buffer[0x1c2] = 0x0c;
|
||||
break;
|
||||
}
|
||||
if ((boot_type != BT_NON_BOOTABLE) && (target_type == TT_BIOS)) {
|
||||
// Set first partition bootable - masquerade as per the DiskID selected
|
||||
buffer[0x1be] = IsChecked(IDC_RUFUS_MBR) ?
|
||||
(BYTE)ComboBox_GetCurItemData(hDiskID):0x80;
|
||||
uprintf("Set bootable USB partition as 0x%02X\n", buffer[0x1be]);
|
||||
// Set first partition bootable or masquerade as second disk
|
||||
buffer[0x1be] = needs_masquerading ? 0x81 : 0x80;
|
||||
uprintf("Set bootable USB partition as 0x%02X", buffer[0x1be]);
|
||||
}
|
||||
|
||||
if (!write_sectors(hPhysicalDrive, SelectedDrive.SectorSize, 0, 1, buffer)) {
|
||||
uprintf("Could not write MBR\n");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT;
|
||||
uprintf("Could not write MBR");
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_WRITE_FAULT);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -886,7 +887,7 @@ static BOOL WriteMBR(HANDLE hPhysicalDrive)
|
|||
|
||||
// If everything else failed, fall back to a conventional Windows/Rufus MBR
|
||||
windows_mbr:
|
||||
if ((HAS_WINPE(img_report) && !img_report.uses_minint) || (IsChecked(IDC_RUFUS_MBR))) {
|
||||
if (needs_masquerading || use_rufus_mbr) {
|
||||
uprintf(using_msg, APPLICATION_NAME);
|
||||
r = write_rufus_mbr(fp);
|
||||
} else {
|
||||
|
@ -896,8 +897,8 @@ windows_mbr:
|
|||
|
||||
notify:
|
||||
// Tell the system we've updated the disk properties
|
||||
if (!DeviceIoControl(hPhysicalDrive, IOCTL_DISK_UPDATE_PROPERTIES, NULL, 0, NULL, 0, &size, NULL))
|
||||
uprintf("Failed to notify system about disk properties update: %s\n", WindowsErrorString());
|
||||
if (!DeviceIoControl(hPhysicalDrive, IOCTL_DISK_UPDATE_PROPERTIES, NULL, 0, NULL, 0, NULL, NULL))
|
||||
uprintf("Failed to notify system about disk properties update: %s", WindowsErrorString());
|
||||
|
||||
out:
|
||||
safe_mm_free(buffer);
|
||||
|
@ -972,7 +973,7 @@ static BOOL WriteSBR(HANDLE hPhysicalDrive)
|
|||
}
|
||||
|
||||
// Ensure that we have sufficient space for the SBR
|
||||
max_size = (DWORD)SelectedDrive.PartitionOffset[0];
|
||||
max_size = (DWORD)SelectedDrive.Partition[0].Offset;
|
||||
if (br_size + size > max_size) {
|
||||
uprintf(" SBR size is too large - You may need to uncheck 'Add fixes for old BIOSes'.");
|
||||
if (sub_type == BT_MAX)
|
||||
|
@ -1022,7 +1023,7 @@ BOOL WritePBR(HANDLE hLogicalVolume)
|
|||
} else if (boot_type == BT_REACTOS) {
|
||||
if (!write_fat_16_ros_br(fp, 0)) break;
|
||||
} else if ((boot_type == BT_IMAGE) && HAS_KOLIBRIOS(img_report)) {
|
||||
uprintf("FAT16 is not supported for KolibriOS\n"); break;
|
||||
uprintf("FAT16 is not supported for KolibriOS"); break;
|
||||
} else {
|
||||
if (!write_fat_16_br(fp, 0)) break;
|
||||
}
|
||||
|
@ -1034,11 +1035,11 @@ BOOL WritePBR(HANDLE hLogicalVolume)
|
|||
uprintf(using_msg, bt_to_name(), "FAT32");
|
||||
for (i = 0; i < 2; i++) {
|
||||
if (!is_fat_32_fs(fp)) {
|
||||
uprintf("New volume does not have a %s FAT32 boot sector - aborting\n", i?"secondary":"primary");
|
||||
uprintf("New volume does not have a %s FAT32 boot sector - aborting", i ? "secondary" : "primary");
|
||||
break;
|
||||
}
|
||||
uprintf("Confirmed new volume has a %s FAT32 boot sector\n", i?"secondary":"primary");
|
||||
uprintf("Setting %s FAT32 boot sector for boot...\n", i?"secondary":"primary");
|
||||
uprintf("Confirmed new volume has a %s FAT32 boot sector", i ? "secondary" : "primary");
|
||||
uprintf("Setting %s FAT32 boot sector for boot...", i ? "secondary" : "primary");
|
||||
if (boot_type == BT_FREEDOS) {
|
||||
if (!write_fat_32_fd_br(fp, 0)) break;
|
||||
} else if (boot_type == BT_REACTOS) {
|
||||
|
@ -1061,10 +1062,10 @@ BOOL WritePBR(HANDLE hLogicalVolume)
|
|||
case FS_NTFS:
|
||||
uprintf(using_msg, bt_to_name(), "NTFS");
|
||||
if (!is_ntfs_fs(fp)) {
|
||||
uprintf("New volume does not have an NTFS boot sector - aborting\n");
|
||||
uprintf("New volume does not have an NTFS boot sector - aborting");
|
||||
break;
|
||||
}
|
||||
uprintf("Confirmed new volume has an NTFS boot sector\n");
|
||||
uprintf("Confirmed new volume has an NTFS boot sector");
|
||||
if (!write_ntfs_br(fp)) break;
|
||||
// Note: NTFS requires a full remount after writing the PBR. We dismount when we lock
|
||||
// and also go through a forced remount, so that shouldn't be an issue.
|
||||
|
@ -1075,10 +1076,10 @@ BOOL WritePBR(HANDLE hLogicalVolume)
|
|||
case FS_EXT4:
|
||||
return TRUE;
|
||||
default:
|
||||
uprintf("Unsupported FS for FS BR processing - aborting\n");
|
||||
uprintf("Unsupported FS for FS BR processing - aborting");
|
||||
break;
|
||||
}
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_WRITE_FAULT);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -1151,7 +1152,7 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive)
|
|||
HANDLE hSourceImage = INVALID_HANDLE_VALUE;
|
||||
DWORD i, read_size[NUM_BUFFERS], write_size, comp_size, buf_size;
|
||||
uint64_t wb, target_size = bZeroDrive ? SelectedDrive.DiskSize : img_report.image_size;
|
||||
uint64_t cur_value, last_value = UINT64_MAX;
|
||||
uint64_t cur_value, last_value = 0;
|
||||
int64_t bled_ret;
|
||||
uint8_t* buffer = NULL;
|
||||
uint32_t zero_data, *cmp_buffer = NULL;
|
||||
|
@ -1175,7 +1176,7 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive)
|
|||
buf_size = ((DD_BUFFER_SIZE + SelectedDrive.SectorSize - 1) / SelectedDrive.SectorSize) * SelectedDrive.SectorSize;
|
||||
buffer = (uint8_t*)_mm_malloc(buf_size, SelectedDrive.SectorSize);
|
||||
if (buffer == NULL) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_NOT_ENOUGH_MEMORY;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_NOT_ENOUGH_MEMORY);
|
||||
uprintf("Could not allocate disk zeroing buffer");
|
||||
goto out;
|
||||
}
|
||||
|
@ -1187,7 +1188,7 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive)
|
|||
if (fast_zeroing) {
|
||||
cmp_buffer = (uint32_t*)_mm_malloc(buf_size, SelectedDrive.SectorSize);
|
||||
if (cmp_buffer == NULL) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_NOT_ENOUGH_MEMORY;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_NOT_ENOUGH_MEMORY);
|
||||
uprintf("Could not allocate disk comparison buffer");
|
||||
goto out;
|
||||
}
|
||||
|
@ -1197,11 +1198,9 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive)
|
|||
read_size[0] = buf_size;
|
||||
for (wb = 0, write_size = 0; wb < target_size; wb += write_size) {
|
||||
UpdateProgressWithInfo(OP_FORMAT, fast_zeroing ? MSG_306 : MSG_286, wb, target_size);
|
||||
cur_value = (wb * min(80, target_size)) / target_size;
|
||||
if (cur_value != last_value) {
|
||||
last_value = cur_value;
|
||||
cur_value = (wb * 80) / target_size;
|
||||
for (; cur_value > last_value && last_value < 80; last_value++)
|
||||
uprintfs("+");
|
||||
}
|
||||
// Don't overflow our projected size (mostly for VHDs)
|
||||
if (wb + read_size[0] > target_size)
|
||||
read_size[0] = (DWORD)(target_size - wb);
|
||||
|
@ -1267,7 +1266,7 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive)
|
|||
goto out;
|
||||
}
|
||||
} else {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_WRITE_FAULT;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_WRITE_FAULT);
|
||||
goto out;
|
||||
}
|
||||
Sleep(200);
|
||||
|
@ -1275,24 +1274,25 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive)
|
|||
if (i > WRITE_RETRIES)
|
||||
goto out;
|
||||
}
|
||||
uprintfs("\r\n");
|
||||
} else if (img_report.compression_type != BLED_COMPRESSION_NONE && img_report.compression_type < BLED_COMPRESSION_MAX) {
|
||||
uprintf("Writing compressed image:");
|
||||
hSourceImage = CreateFileU(image_path, GENERIC_READ, FILE_SHARE_READ, NULL,
|
||||
OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
|
||||
if (hSourceImage == INVALID_HANDLE_VALUE) {
|
||||
uprintf("Could not open image '%s': %s", image_path, WindowsErrorString());
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_OPEN_FAILED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_OPEN_FAILED);
|
||||
goto out;
|
||||
}
|
||||
sec_buf = (uint8_t*)_mm_malloc(SelectedDrive.SectorSize, SelectedDrive.SectorSize);
|
||||
if (sec_buf == NULL) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_NOT_ENOUGH_MEMORY;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_NOT_ENOUGH_MEMORY);
|
||||
uprintf("Could not allocate disk write buffer");
|
||||
goto out;
|
||||
}
|
||||
assert((uintptr_t)sec_buf % SelectedDrive.SectorSize == 0);
|
||||
sec_buf_pos = 0;
|
||||
bled_init(256 * KB, uprintf, NULL, sector_write, update_progress, NULL, &FormatStatus);
|
||||
bled_init(256 * KB, uprintf, NULL, sector_write, update_progress, NULL, &ErrorStatus);
|
||||
bled_ret = bled_uncompress_with_handles(hSourceImage, hPhysicalDrive, img_report.compression_type);
|
||||
bled_exit();
|
||||
uprintfs("\r\n");
|
||||
|
@ -1305,10 +1305,10 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive)
|
|||
WriteFile(hPhysicalDrive, sec_buf, SelectedDrive.SectorSize, &write_size, NULL);
|
||||
}
|
||||
safe_mm_free(sec_buf);
|
||||
if ((bled_ret < 0) && (SCODE_CODE(FormatStatus) != ERROR_CANCELLED)) {
|
||||
if ((bled_ret < 0) && (SCODE_CODE(ErrorStatus) != ERROR_CANCELLED)) {
|
||||
// Unfortunately, different compression backends return different negative error codes
|
||||
uprintf("Could not write compressed image: %lld", bled_ret);
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_WRITE_FAULT;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_WRITE_FAULT);
|
||||
goto out;
|
||||
}
|
||||
} else {
|
||||
|
@ -1316,8 +1316,9 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive)
|
|||
// VHD/VHDX require mounting the image first
|
||||
if (img_report.compression_type == IMG_COMPRESSION_VHD ||
|
||||
img_report.compression_type == IMG_COMPRESSION_VHDX) {
|
||||
vhd_path = VhdMountImage(image_path);
|
||||
if (vhd_path == NULL)
|
||||
// Since VHDX images are compressed, we need to obtain the actual size
|
||||
vhd_path = VhdMountImageAndGetSize(image_path, &target_size);
|
||||
if (vhd_path == NULL || target_size == 0)
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -1325,7 +1326,7 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive)
|
|||
FILE_SHARE_READ, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN);
|
||||
if (hSourceImage == NULL) {
|
||||
uprintf("Could not open image '%s': %s", image_path, WindowsErrorString());
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_OPEN_FAILED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_OPEN_FAILED);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -1333,7 +1334,7 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive)
|
|||
buf_size = ((DD_BUFFER_SIZE + SelectedDrive.SectorSize - 1) / SelectedDrive.SectorSize) * SelectedDrive.SectorSize;
|
||||
buffer = (uint8_t*)_mm_malloc(buf_size * NUM_BUFFERS, SelectedDrive.SectorSize);
|
||||
if (buffer == NULL) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_NOT_ENOUGH_MEMORY;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_NOT_ENOUGH_MEMORY);
|
||||
uprintf("Could not allocate disk write buffer");
|
||||
goto out;
|
||||
}
|
||||
|
@ -1346,17 +1347,18 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive)
|
|||
for (wb = 0; read_size[proc_bufnum] != 0; wb += read_size[proc_bufnum]) {
|
||||
// 0. Update the progress
|
||||
UpdateProgressWithInfo(OP_FORMAT, MSG_261, wb, target_size);
|
||||
cur_value = (wb * min(80, target_size)) / target_size;
|
||||
if (cur_value != last_value) {
|
||||
last_value = cur_value;
|
||||
cur_value = (wb * 80) / target_size;
|
||||
for ( ; cur_value > last_value && last_value < 80; last_value++)
|
||||
uprintfs("+");
|
||||
}
|
||||
|
||||
if (wb >= target_size)
|
||||
break;
|
||||
|
||||
// 1. Wait for the current read operation to complete (and update the read size)
|
||||
if ((!WaitFileAsync(hSourceImage, DRIVE_ACCESS_TIMEOUT)) ||
|
||||
(!GetSizeAsync(hSourceImage, &read_size[read_bufnum]))) {
|
||||
uprintf("\r\nRead error: %s", WindowsErrorString());
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_READ_FAULT;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_READ_FAULT);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -1395,7 +1397,7 @@ static BOOL WriteDrive(HANDLE hPhysicalDrive, BOOL bZeroDrive)
|
|||
goto out;
|
||||
}
|
||||
} else {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_WRITE_FAULT;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_WRITE_FAULT);
|
||||
goto out;
|
||||
}
|
||||
Sleep(200);
|
||||
|
@ -1456,23 +1458,32 @@ DWORD WINAPI FormatThread(void* param)
|
|||
large_drive = (SelectedDrive.DiskSize > (1*TB));
|
||||
if (large_drive)
|
||||
uprintf("Notice: Large drive detected (may produce short writes)");
|
||||
|
||||
// Find out if we need to add any extra partitions
|
||||
extra_partitions = 0;
|
||||
if ((boot_type == BT_IMAGE) && !write_as_image && HAS_PERSISTENCE(img_report) && persistence_size)
|
||||
extra_partitions |= XP_PERSISTENCE;
|
||||
// According to Microsoft, every GPT disk (we RUN Windows from) must have an MSR due to not having hidden sectors
|
||||
// https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-and-gpt-faq#disks-that-require-an-msr
|
||||
if ((windows_to_go) && (target_type == TT_UEFI) && (partition_type == PARTITION_STYLE_GPT))
|
||||
// According to Microsoft, every GPT disk (we RUN Windows from) must have an MSR due to not having hidden sectors
|
||||
// https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-and-gpt-faq#disks-that-require-an-msr
|
||||
extra_partitions = XP_ESP | XP_MSR;
|
||||
else if ( ((fs_type == FS_NTFS) || (fs_type == FS_EXFAT)) &&
|
||||
((boot_type == BT_UEFI_NTFS) || ((boot_type == BT_IMAGE) && IS_EFI_BOOTABLE(img_report) &&
|
||||
((target_type == TT_UEFI) || (windows_to_go) || (allow_dual_uefi_bios) ||
|
||||
(img_report.has_4GB_file) || (img_report.needs_ntfs)))) )
|
||||
extra_partitions = XP_UEFI_NTFS;
|
||||
else if ((boot_type == BT_IMAGE) && !write_as_image && HAS_PERSISTENCE(img_report) && persistence_size)
|
||||
extra_partitions = XP_CASPER;
|
||||
else if (IsChecked(IDC_OLD_BIOS_FIXES))
|
||||
extra_partitions = XP_COMPAT;
|
||||
extra_partitions |= XP_ESP | XP_MSR;
|
||||
// If we have a bootable image with UEFI bootloaders and the target file system is NTFS or exFAT
|
||||
// or the UEFI:NTFS option is selected, we add the UEFI:NTFS partition...
|
||||
else if ((((boot_type == BT_IMAGE) && IS_EFI_BOOTABLE(img_report)) && ((fs_type == FS_NTFS) || (fs_type == FS_EXFAT))) ||
|
||||
(boot_type == BT_UEFI_NTFS)) {
|
||||
extra_partitions |= XP_UEFI_NTFS;
|
||||
// ...but only if we're not dealing with a Windows image in installer mode with target
|
||||
// system set to BIOS and without dual BIOS+UEFI boot enabled.
|
||||
if ((boot_type == BT_IMAGE) && HAS_BOOTMGR_BIOS(img_report) && (!windows_to_go) &&
|
||||
(target_type == TT_BIOS) && (!allow_dual_uefi_bios))
|
||||
extra_partitions &= ~XP_UEFI_NTFS;
|
||||
}
|
||||
if (IsChecked(IDC_OLD_BIOS_FIXES))
|
||||
extra_partitions |= XP_COMPAT;
|
||||
|
||||
// On pre 1703 platforms (and even on later ones), anything with ext2/ext3 doesn't sit
|
||||
// too well with Windows. Same with ESPs. Relaxing our locking rules seems to help...
|
||||
if ((extra_partitions & (XP_ESP | XP_CASPER)) || IS_EXT(fs_type))
|
||||
if ((extra_partitions & (XP_ESP | XP_PERSISTENCE)) || IS_EXT(fs_type))
|
||||
actual_lock_drive = FALSE;
|
||||
// Windows 11 is a lot more proactive in locking ESPs and MSRs than previous versions
|
||||
// were, meaning that we also can't lock the drive without incurring errors...
|
||||
|
@ -1484,14 +1495,14 @@ DWORD WINAPI FormatThread(void* param)
|
|||
PrintInfoDebug(0, MSG_225);
|
||||
hPhysicalDrive = GetPhysicalHandle(DriveIndex, actual_lock_drive, FALSE, !actual_lock_drive);
|
||||
if (hPhysicalDrive == INVALID_HANDLE_VALUE) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_OPEN_FAILED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_OPEN_FAILED);
|
||||
goto out;
|
||||
}
|
||||
|
||||
// At this stage we have both a handle and a lock to the physical drive
|
||||
if (!GetDriveLetters(DriveIndex, drive_letters)) {
|
||||
uprintf("Failed to get a drive letter");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_CANT_ASSIGN_LETTER);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_ASSIGN_LETTER));
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -1499,7 +1510,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
drive_name[0] = RemoveDriveLetters(DriveIndex, TRUE, FALSE);
|
||||
if (drive_name[0] == 0) {
|
||||
uprintf("Unable to find a drive letter to use");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_ASSIGN_LETTER);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_ASSIGN_LETTER));
|
||||
goto out;
|
||||
}
|
||||
uprintf("Will use '%c:' as volume mountpoint", toupper(drive_name[0]));
|
||||
|
@ -1510,8 +1521,8 @@ DWORD WINAPI FormatThread(void* param)
|
|||
PrintInfo(0, MSG_239, lmprintf(MSG_307));
|
||||
if (!is_vds_available || !DeletePartition(DriveIndex, 0, TRUE)) {
|
||||
uprintf("Warning: Could not delete partition(s): %s", is_vds_available ? WindowsErrorString() : "VDS is not available");
|
||||
SetLastError(FormatStatus);
|
||||
FormatStatus = 0;
|
||||
SetLastError(ErrorStatus);
|
||||
ErrorStatus = 0;
|
||||
// If we couldn't delete partitions, Windows give us trouble unless we
|
||||
// request access to the logical drive. Don't ask me why!
|
||||
need_logical = TRUE;
|
||||
|
@ -1525,7 +1536,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
// Now get RW access to the physical drive
|
||||
hPhysicalDrive = GetPhysicalHandle(DriveIndex, actual_lock_drive, TRUE, !actual_lock_drive);
|
||||
if (hPhysicalDrive == INVALID_HANDLE_VALUE) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_OPEN_FAILED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_OPEN_FAILED);
|
||||
goto out;
|
||||
}
|
||||
RefreshDriveLayout(hPhysicalDrive);
|
||||
|
@ -1538,7 +1549,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
hLogicalVolume = GetLogicalHandle(DriveIndex, 0, TRUE, FALSE, !actual_lock_drive);
|
||||
if (hLogicalVolume == INVALID_HANDLE_VALUE) {
|
||||
uprintf("Could not access logical volume");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_OPEN_FAILED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_OPEN_FAILED);
|
||||
goto out;
|
||||
// If the call succeeds (and we don't get a NULL logical handle as returned for
|
||||
// unpartitioned drives), try to unmount the volume.
|
||||
|
@ -1567,7 +1578,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
if ((!ClearMBRGPT(hPhysicalDrive, SelectedDrive.DiskSize, SelectedDrive.SectorSize, use_large_fat32)) ||
|
||||
(!InitializeDisk(hPhysicalDrive))) {
|
||||
uprintf("Could not reset partitions");
|
||||
FormatStatus = (LastWriteError != 0) ? LastWriteError : (ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_PARTITION_FAILURE);
|
||||
ErrorStatus = (LastWriteError != 0) ? LastWriteError : RUFUS_ERROR(ERROR_PARTITION_FAILURE);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
@ -1582,7 +1593,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
static_strcpy(logfile, userdir);
|
||||
safe_free(userdir);
|
||||
GetLocalTime(<);
|
||||
safe_sprintf(&logfile[strlen(logfile)], sizeof(logfile)-strlen(logfile)-1,
|
||||
safe_sprintf(&logfile[strlen(logfile)], sizeof(logfile) - strlen(logfile) - 1,
|
||||
"\\rufus_%04d%02d%02d_%02d%02d%02d.log",
|
||||
lt.wYear, lt.wMonth, lt.wDay, lt.wHour, lt.wMinute, lt.wSecond);
|
||||
log_fd = fopenU(logfile, "w+");
|
||||
|
@ -1597,8 +1608,8 @@ DWORD WINAPI FormatThread(void* param)
|
|||
|
||||
if (!BadBlocks(hPhysicalDrive, SelectedDrive.DiskSize, (sel >= 2) ? 4 : sel +1, sel, &report, log_fd)) {
|
||||
uprintf("Bad blocks: Check failed.");
|
||||
if (!IS_ERROR(FormatStatus))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_BADBLOCKS_FAILURE);
|
||||
if (!IS_ERROR(ErrorStatus))
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_BADBLOCKS_FAILURE));
|
||||
ClearMBRGPT(hPhysicalDrive, SelectedDrive.DiskSize, SelectedDrive.SectorSize, FALSE);
|
||||
fclose(log_fd);
|
||||
DeleteFileU(logfile);
|
||||
|
@ -1617,7 +1628,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
lt.wYear, lt.wMonth, lt.wDay, lt.wHour, lt.wMinute, lt.wSecond);
|
||||
fclose(log_fd);
|
||||
r = MessageBoxExU(hMainDialog, lmprintf(MSG_012, bb_msg, logfile),
|
||||
lmprintf(MSG_010), MB_ABORTRETRYIGNORE|MB_ICONWARNING|MB_IS_RTL, selected_langid);
|
||||
lmprintf(MSG_010), MB_ABORTRETRYIGNORE | MB_ICONWARNING | MB_IS_RTL, selected_langid);
|
||||
} else {
|
||||
// We didn't get any errors => delete the log file
|
||||
fclose(log_fd);
|
||||
|
@ -1625,7 +1636,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
}
|
||||
} while (r == IDRETRY);
|
||||
if (r == IDABORT) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_CANCELLED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_CANCELLED);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -1633,8 +1644,8 @@ DWORD WINAPI FormatThread(void* param)
|
|||
// before repartitioning. Else, all kind of bad things happen.
|
||||
if (!ClearMBRGPT(hPhysicalDrive, SelectedDrive.DiskSize, SelectedDrive.SectorSize, use_large_fat32)) {
|
||||
uprintf("unable to zero MBR/GPT");
|
||||
if (!IS_ERROR(FormatStatus))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT;
|
||||
if (!IS_ERROR(ErrorStatus))
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_WRITE_FAULT);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
@ -1652,10 +1663,10 @@ DWORD WINAPI FormatThread(void* param)
|
|||
safe_free(physical);
|
||||
uprintf("Running command: '%s", cmd);
|
||||
cr = RunCommandWithProgress(cmd, sysnative_dir, TRUE, MSG_261);
|
||||
if (cr != 0 && !IS_ERROR(FormatStatus)) {
|
||||
if (cr != 0 && !IS_ERROR(ErrorStatus)) {
|
||||
SetLastError(cr);
|
||||
uprintf("Failed to apply FFU image: %s", WindowsErrorString());
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_WINDOWS) | SCODE_CODE(cr);
|
||||
ErrorStatus = RUFUS_ERROR(SCODE_CODE(cr));
|
||||
}
|
||||
} else {
|
||||
WriteDrive(hPhysicalDrive, FALSE);
|
||||
|
@ -1668,7 +1679,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
|
||||
if (!CreatePartition(hPhysicalDrive, partition_type, fs_type, (partition_type == PARTITION_STYLE_MBR)
|
||||
&& (target_type == TT_UEFI), extra_partitions)) {
|
||||
FormatStatus = (LastWriteError != 0) ? LastWriteError : (ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_PARTITION_FAILURE);
|
||||
ErrorStatus = (LastWriteError != 0) ? LastWriteError : RUFUS_ERROR(ERROR_PARTITION_FAILURE);
|
||||
goto out;
|
||||
}
|
||||
UpdateProgress(OP_PARTITION, -1.0f);
|
||||
|
@ -1679,7 +1690,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
if (!CloseHandle(hLogicalVolume)) {
|
||||
hLogicalVolume = INVALID_HANDLE_VALUE;
|
||||
uprintf("Could not close volume: %s", WindowsErrorString());
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_ACCESS_DENIED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_ACCESS_DENIED);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
@ -1710,16 +1721,16 @@ DWORD WINAPI FormatThread(void* param)
|
|||
Sleep(200);
|
||||
if (write_as_esp || write_as_ext) {
|
||||
// Can't format ESPs or ext2/ext3 partitions unless we mount them ourselves
|
||||
volume_name = AltMountVolume(DriveIndex, partition_offset[PI_MAIN], FALSE);
|
||||
volume_name = AltMountVolume(DriveIndex, SelectedDrive.Partition[partition_index[PI_MAIN]].Offset, FALSE);
|
||||
if (volume_name == NULL) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_ASSIGN_LETTER);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_ASSIGN_LETTER));
|
||||
goto out;
|
||||
}
|
||||
} else {
|
||||
if (!WaitForLogical(DriveIndex, partition_offset[PI_MAIN])) {
|
||||
if (!WaitForLogical(DriveIndex, SelectedDrive.Partition[partition_index[PI_MAIN]].Offset)) {
|
||||
uprintf("Logical drive was not found - aborting");
|
||||
if (!IS_ERROR(FormatStatus))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_TIMEOUT;
|
||||
if (!IS_ERROR(ErrorStatus))
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_TIMEOUT);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
@ -1727,17 +1738,17 @@ DWORD WINAPI FormatThread(void* param)
|
|||
|
||||
// Format Casper partition if required. Do it before we format anything with
|
||||
// a file system that Windows will recognize, to avoid concurrent access.
|
||||
if (extra_partitions & XP_CASPER) {
|
||||
if (extra_partitions & XP_PERSISTENCE) {
|
||||
uint32_t ext_version = ReadSetting32(SETTING_USE_EXT_VERSION);
|
||||
if ((ext_version < 2) || (ext_version > 4))
|
||||
ext_version = 3;
|
||||
uprintf("Using %s-like method to enable persistence", img_report.uses_casper ? "Ubuntu" : "Debian");
|
||||
if (!FormatPartition(DriveIndex, partition_offset[PI_CASPER], 0, FS_EXT2 + (ext_version - 2),
|
||||
if (!FormatPartition(DriveIndex, SelectedDrive.Partition[partition_index[PI_CASPER]].Offset, 0, FS_EXT2 + (ext_version - 2),
|
||||
img_report.uses_casper ? "casper-rw" : "persistence",
|
||||
(img_report.uses_casper ? 0 : FP_CREATE_PERSISTENCE_CONF) |
|
||||
(IsChecked(IDC_QUICK_FORMAT) ? FP_QUICK : 0))) {
|
||||
if (!IS_ERROR(FormatStatus))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT;
|
||||
if (!IS_ERROR(ErrorStatus))
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_WRITE_FAULT);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
@ -1757,10 +1768,10 @@ DWORD WINAPI FormatThread(void* param)
|
|||
if (write_as_esp)
|
||||
Flags |= FP_LARGE_FAT32;
|
||||
|
||||
ret = FormatPartition(DriveIndex, partition_offset[PI_MAIN], ClusterSize, fs_type, label, Flags);
|
||||
ret = FormatPartition(DriveIndex, SelectedDrive.Partition[partition_index[PI_MAIN]].Offset, ClusterSize, fs_type, label, Flags);
|
||||
if (!ret) {
|
||||
// Error will be set by FormatPartition() in FormatStatus
|
||||
uprintf("Format error: %s", StrError(FormatStatus, TRUE));
|
||||
// Error will be set by FormatPartition() in ErrorStatus
|
||||
uprintf("Format error: %s", StrError(ErrorStatus, TRUE));
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -1768,7 +1779,7 @@ DWORD WINAPI FormatThread(void* param)
|
|||
// Get RW access back to the physical drive...
|
||||
hPhysicalDrive = GetPhysicalHandle(DriveIndex, actual_lock_drive, TRUE, !actual_lock_drive);
|
||||
if (hPhysicalDrive == INVALID_HANDLE_VALUE) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_OPEN_FAILED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_OPEN_FAILED);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
@ -1777,8 +1788,8 @@ DWORD WINAPI FormatThread(void* param)
|
|||
if ((partition_type == PARTITION_STYLE_MBR) || ((boot_type != BT_NON_BOOTABLE) && (partition_type == PARTITION_STYLE_GPT))) {
|
||||
PrintInfoDebug(0, MSG_228); // "Writing master boot record..."
|
||||
if ((!WriteMBR(hPhysicalDrive)) || (!WriteSBR(hPhysicalDrive))) {
|
||||
if (!IS_ERROR(FormatStatus))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT;
|
||||
if (!IS_ERROR(ErrorStatus))
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_WRITE_FAULT);
|
||||
goto out;
|
||||
}
|
||||
UpdateProgress(OP_FIX_MBR, -1.0f);
|
||||
|
@ -1790,10 +1801,10 @@ DWORD WINAPI FormatThread(void* param)
|
|||
// Try to continue
|
||||
CHECK_FOR_USER_CANCEL;
|
||||
|
||||
volume_name = GetLogicalName(DriveIndex, partition_offset[PI_MAIN], TRUE, TRUE);
|
||||
volume_name = GetLogicalName(DriveIndex, SelectedDrive.Partition[partition_index[PI_MAIN]].Offset, TRUE, TRUE);
|
||||
if (volume_name == NULL) {
|
||||
uprintf("Could not get volume name");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_NO_VOLUME_ID;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_NO_VOLUME_ID);
|
||||
goto out;
|
||||
}
|
||||
uprintf("Found volume %s", volume_name);
|
||||
|
@ -1803,8 +1814,8 @@ DWORD WINAPI FormatThread(void* param)
|
|||
// we forcibly removed them, so add yet another explicit call to RemoveDriveLetters()
|
||||
RemoveDriveLetters(DriveIndex, FALSE, TRUE);
|
||||
if (!MountVolume(drive_name, volume_name)) {
|
||||
uprintf("Could not remount %s as %c: %s\n", volume_name, toupper(drive_name[0]), WindowsErrorString());
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_MOUNT_VOLUME);
|
||||
uprintf("Could not remount %s as %c: %s", volume_name, toupper(drive_name[0]), WindowsErrorString());
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_MOUNT_VOLUME));
|
||||
goto out;
|
||||
}
|
||||
CHECK_FOR_USER_CANCEL;
|
||||
|
@ -1835,31 +1846,31 @@ DWORD WINAPI FormatThread(void* param)
|
|||
// For once, no need to do anything - just check our sanity
|
||||
assert((boot_type == BT_IMAGE) && IS_EFI_BOOTABLE(img_report) && (fs_type <= FS_NTFS));
|
||||
if ( (boot_type != BT_IMAGE) || !IS_EFI_BOOTABLE(img_report) || (fs_type > FS_NTFS) ) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_INSTALL_FAILURE);
|
||||
goto out;
|
||||
}
|
||||
} else if ( (boot_type == BT_SYSLINUX_V4) || (boot_type == BT_SYSLINUX_V6) ||
|
||||
((boot_type == BT_IMAGE) && (HAS_SYSLINUX(img_report) || HAS_REACTOS(img_report)) &&
|
||||
(!HAS_WINDOWS(img_report) || !allow_dual_uefi_bios)) ) {
|
||||
if (!InstallSyslinux(DriveIndex, drive_name[0], fs_type)) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_INSTALL_FAILURE;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_INSTALL_FAILURE);
|
||||
goto out;
|
||||
}
|
||||
} else {
|
||||
// We still have a lock, which we need to modify the volume boot record
|
||||
// => no need to reacquire the lock...
|
||||
hLogicalVolume = GetLogicalHandle(DriveIndex, partition_offset[PI_MAIN], FALSE, TRUE, FALSE);
|
||||
hLogicalVolume = GetLogicalHandle(DriveIndex, SelectedDrive.Partition[partition_index[PI_MAIN]].Offset, FALSE, TRUE, FALSE);
|
||||
if ((hLogicalVolume == INVALID_HANDLE_VALUE) || (hLogicalVolume == NULL)) {
|
||||
uprintf("Could not re-mount volume for partition boot record access");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_OPEN_FAILED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_OPEN_FAILED);
|
||||
goto out;
|
||||
}
|
||||
// NB: if you unmount the logical volume here, XP will report error:
|
||||
// [0x00000456] The media in the drive may have changed
|
||||
PrintInfoDebug(0, MSG_229);
|
||||
if (!WritePBR(hLogicalVolume)) {
|
||||
if (!IS_ERROR(FormatStatus))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT;
|
||||
if (!IS_ERROR(ErrorStatus))
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_WRITE_FAULT);
|
||||
goto out;
|
||||
}
|
||||
// We must close and unlock the volume to write files to it
|
||||
|
@ -1883,8 +1894,8 @@ DWORD WINAPI FormatThread(void* param)
|
|||
UpdateProgress(OP_FILE_COPY, -1.0f);
|
||||
PrintInfoDebug(0, MSG_230);
|
||||
if (!ExtractDOS(drive_name)) {
|
||||
if (!IS_ERROR(FormatStatus))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_CANNOT_COPY;
|
||||
if (!IS_ERROR(ErrorStatus))
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_CANNOT_COPY);
|
||||
goto out;
|
||||
}
|
||||
} else if (boot_type == BT_GRUB4DOS) {
|
||||
|
@ -1900,26 +1911,26 @@ DWORD WINAPI FormatThread(void* param)
|
|||
if (windows_to_go) {
|
||||
PrintInfoDebug(0, MSG_268);
|
||||
if (!SetupWinToGo(DriveIndex, drive_name, (extra_partitions & XP_ESP))) {
|
||||
if (!IS_ERROR(FormatStatus))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_ISO_EXTRACT);
|
||||
if (!IS_ERROR(ErrorStatus))
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_ISO_EXTRACT));
|
||||
goto out;
|
||||
}
|
||||
if (unattend_xml_path != NULL) {
|
||||
if (!ApplyWindowsCustomization(drive_name[0], unattend_xml_flags | UNATTEND_WINDOWS_TO_GO))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_PATCH);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_PATCH));
|
||||
}
|
||||
} else {
|
||||
assert(!img_report.is_windows_img);
|
||||
if (!ExtractISO(image_path, drive_name, FALSE)) {
|
||||
if (!IS_ERROR(FormatStatus))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_ISO_EXTRACT);
|
||||
if (!IS_ERROR(ErrorStatus))
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_ISO_EXTRACT));
|
||||
goto out;
|
||||
}
|
||||
if (HAS_KOLIBRIOS(img_report)) {
|
||||
kolibri_dst[0] = drive_name[0];
|
||||
uprintf("Installing: %s (KolibriOS loader)", kolibri_dst);
|
||||
if (ExtractISOFile(image_path, "HD_Load/USB_Boot/MTLD_F32", kolibri_dst,
|
||||
FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM) == 0) {
|
||||
FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM) == 0) {
|
||||
uprintf("Warning: loader installation failed - KolibriOS will not boot!");
|
||||
}
|
||||
}
|
||||
|
@ -1932,12 +1943,12 @@ DWORD WINAPI FormatThread(void* param)
|
|||
efi_dst[sizeof(efi_dst) - sizeof("\\bootx64.efi")] = 0;
|
||||
if (!CreateDirectoryA(efi_dst, 0)) {
|
||||
uprintf("Could not create directory '%s': %s", efi_dst, WindowsErrorString());
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_CANT_PATCH);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_PATCH));
|
||||
} else {
|
||||
efi_dst[sizeof(efi_dst) - sizeof("\\bootx64.efi")] = '\\';
|
||||
if (!WimExtractFile(img_report.wininst_path[0], 1, "Windows\\Boot\\EFI\\bootmgfw.efi", efi_dst, FALSE)) {
|
||||
uprintf("Failed to setup Win7 EFI boot");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_CANT_PATCH);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_PATCH));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1945,16 +1956,19 @@ DWORD WINAPI FormatThread(void* param)
|
|||
if ( (target_type == TT_BIOS) && HAS_WINPE(img_report) ) {
|
||||
// Apply WinPE fixup
|
||||
if (!SetupWinPE(drive_name[0]))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_CANT_PATCH);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_PATCH));
|
||||
}
|
||||
if (unattend_xml_path != NULL) {
|
||||
if (!ApplyWindowsCustomization(drive_name[0], unattend_xml_flags))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_PATCH);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_PATCH));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UpdateProgress(OP_FINALIZE, -1.0f);
|
||||
PrintInfoDebug(0, MSG_233);
|
||||
if ((boot_type == BT_IMAGE) && (image_path != NULL) && (img_report.is_iso) && (!windows_to_go))
|
||||
UpdateMD5Sum(drive_name, md5sum_name[img_report.has_md5sum ? img_report.has_md5sum - 1 : 0]);
|
||||
if (IsChecked(IDC_EXTENDED_LABEL))
|
||||
SetAutorun(drive_name);
|
||||
// Issue another complete remount before we exit, to ensure we're clean
|
||||
|
@ -1972,6 +1986,14 @@ DWORD WINAPI FormatThread(void* param)
|
|||
}
|
||||
}
|
||||
|
||||
// Copy any additonal files from an optional zip archive selected by the user
|
||||
if (!IS_ERROR(ErrorStatus)) {
|
||||
UpdateProgress(OP_EXTRACT_ZIP, 0.0f);
|
||||
drive_name[2] = 0;
|
||||
if (archive_path != NULL && fs_type < FS_EXT2 && !ExtractZip(archive_path, drive_name) && !IS_ERROR(ErrorStatus))
|
||||
uprintf("Warning: Could not copy additional files");
|
||||
}
|
||||
|
||||
out:
|
||||
if ((write_as_esp || write_as_ext) && volume_name != NULL)
|
||||
AltUnmountVolume(volume_name, TRUE);
|
||||
|
@ -1998,8 +2020,8 @@ out:
|
|||
}
|
||||
}
|
||||
}
|
||||
if (IS_ERROR(FormatStatus)) {
|
||||
volume_name = GetLogicalName(DriveIndex, partition_offset[PI_MAIN], TRUE, TRUE);
|
||||
if (IS_ERROR(ErrorStatus)) {
|
||||
volume_name = GetLogicalName(DriveIndex, SelectedDrive.Partition[partition_index[PI_MAIN]].Offset, TRUE, TRUE);
|
||||
if (volume_name != NULL) {
|
||||
if (MountVolume(drive_name, volume_name))
|
||||
uprintf("Re-mounted volume as %c: after error", toupper(drive_name[0]));
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* extfs formatting
|
||||
* Copyright © 2019-2021 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2019-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -178,7 +178,7 @@ const char* error_message(errcode_t error_code)
|
|||
if ((error_code > EXT2_ET_BASE) && error_code < (EXT2_ET_BASE + 1000)) {
|
||||
static_sprintf(error_string, "Unknown ext2fs error %ld (EXT2_ET_BASE + %ld)", error_code, error_code - EXT2_ET_BASE);
|
||||
} else {
|
||||
SetLastError((FormatStatus == 0) ? (ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | (error_code & 0xFFFF)) : FormatStatus);
|
||||
SetLastError((ErrorStatus == 0) ? RUFUS_ERROR(error_code & 0xFFFF) : ErrorStatus);
|
||||
static_sprintf(error_string, "%s", WindowsErrorString());
|
||||
}
|
||||
return error_string;
|
||||
|
@ -196,7 +196,7 @@ errcode_t ext2fs_print_progress(int64_t cur_value, int64_t max_value)
|
|||
last_value = cur_value;
|
||||
uprintfs("+");
|
||||
}
|
||||
return IS_ERROR(FormatStatus) ? EXT2_ET_CANCEL_REQUESTED : 0;
|
||||
return IS_ERROR(ErrorStatus) ? EXT2_ET_CANCEL_REQUESTED : 0;
|
||||
}
|
||||
|
||||
const char* GetExtFsLabel(DWORD DriveIndex, uint64_t PartitionOffset)
|
||||
|
@ -223,7 +223,7 @@ const char* GetExtFsLabel(DWORD DriveIndex, uint64_t PartitionOffset)
|
|||
|
||||
#define TEST_IMG_PATH "\\??\\C:\\tmp\\disk.img"
|
||||
#define TEST_IMG_SIZE 4000 // Size in MB
|
||||
#define SET_EXT2_FORMAT_ERROR(x) if (!IS_ERROR(FormatStatus)) FormatStatus = ext2_last_winerror(x)
|
||||
#define SET_EXT2_FORMAT_ERROR(x) if (!IS_ERROR(ErrorStatus)) ErrorStatus = ext2_last_winerror(x)
|
||||
|
||||
BOOL FormatExtFs(DWORD DriveIndex, uint64_t PartitionOffset, DWORD BlockSize, LPCSTR FSName, LPCSTR Label, DWORD Flags)
|
||||
{
|
||||
|
@ -273,7 +273,7 @@ BOOL FormatExtFs(DWORD DriveIndex, uint64_t PartitionOffset, DWORD BlockSize, LP
|
|||
volume_name = GetExtPartitionName(DriveIndex, PartitionOffset);
|
||||
#endif
|
||||
if ((volume_name == NULL) | (strlen(FSName) != 4) || (strncmp(FSName, "ext", 3) != 0)) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_INVALID_PARAMETER;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_INVALID_PARAMETER);
|
||||
goto out;
|
||||
}
|
||||
if (strchr(volume_name, ' ') != NULL)
|
||||
|
@ -491,7 +491,10 @@ BOOL FormatExtFs(DWORD DriveIndex, uint64_t PartitionOffset, DWORD BlockSize, LP
|
|||
|
||||
// Finally we can call close() to get the file system gets created
|
||||
r = ext2fs_close(ext2fs);
|
||||
if (r != 0) {
|
||||
if (r == 0) {
|
||||
// Make sure ext2fs isn't freed twice
|
||||
ext2fs = NULL;
|
||||
} else {
|
||||
SET_EXT2_FORMAT_ERROR(ERROR_WRITE_FAULT);
|
||||
uprintf("Could not create %s volume: %s", FSName, error_message(r));
|
||||
goto out;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Large FAT32 formatting
|
||||
* Copyright © 2007-2009 Tom Thornhill/Ridgecrop
|
||||
* Copyright © 2011-2022 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2011-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -38,9 +38,7 @@
|
|||
#include "msapi_utf8.h"
|
||||
#include "localization.h"
|
||||
|
||||
#define die(msg, err) do { uprintf(msg); \
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|err; \
|
||||
goto out; } while(0)
|
||||
#define die(msg, err) do { uprintf(msg); ErrorStatus = RUFUS_ERROR(err); goto out; } while(0)
|
||||
|
||||
extern BOOL write_as_esp;
|
||||
|
||||
|
@ -191,7 +189,7 @@ BOOL FormatLargeFAT32(DWORD DriveIndex, uint64_t PartitionOffset, DWORD ClusterS
|
|||
ULONGLONG FatNeeded, ClusterCount;
|
||||
|
||||
if (safe_strncmp(FSName, "FAT", 3) != 0) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_INVALID_PARAMETER;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_INVALID_PARAMETER);
|
||||
goto out;
|
||||
}
|
||||
PrintInfoDebug(0, MSG_222, "Large FAT32");
|
||||
|
@ -202,7 +200,7 @@ BOOL FormatLargeFAT32(DWORD DriveIndex, uint64_t PartitionOffset, DWORD ClusterS
|
|||
hLogicalVolume = write_as_esp ?
|
||||
AltGetLogicalHandle(DriveIndex, PartitionOffset, TRUE, TRUE, FALSE) :
|
||||
GetLogicalHandle(DriveIndex, PartitionOffset, TRUE, TRUE, FALSE);
|
||||
if (IS_ERROR(FormatStatus))
|
||||
if (IS_ERROR(ErrorStatus))
|
||||
goto out;
|
||||
if ((hLogicalVolume == INVALID_HANDLE_VALUE) || (hLogicalVolume == NULL))
|
||||
die("Invalid logical volume handle", ERROR_INVALID_HANDLE);
|
||||
|
@ -222,7 +220,7 @@ BOOL FormatLargeFAT32(DWORD DriveIndex, uint64_t PartitionOffset, DWORD ClusterS
|
|||
}
|
||||
if (dgDrive.BytesPerSector < 512)
|
||||
dgDrive.BytesPerSector = 512;
|
||||
if (IS_ERROR(FormatStatus)) goto out;
|
||||
if (IS_ERROR(ErrorStatus)) goto out;
|
||||
if (!DeviceIoControl (hLogicalVolume, IOCTL_DISK_GET_PARTITION_INFO, NULL, 0, &piDrive,
|
||||
sizeof(piDrive), &cbRet, NULL)) {
|
||||
if (!DeviceIoControl (hLogicalVolume, IOCTL_DISK_GET_PARTITION_INFO_EX, NULL, 0, &xpiDrive,
|
||||
|
@ -236,7 +234,7 @@ BOOL FormatLargeFAT32(DWORD DriveIndex, uint64_t PartitionOffset, DWORD ClusterS
|
|||
piDrive.PartitionLength.QuadPart = xpiDrive.PartitionLength.QuadPart;
|
||||
piDrive.HiddenSectors = (DWORD)(xpiDrive.StartingOffset.QuadPart / dgDrive.BytesPerSector);
|
||||
}
|
||||
if (IS_ERROR(FormatStatus)) goto out;
|
||||
if (IS_ERROR(ErrorStatus)) goto out;
|
||||
|
||||
BytesPerSect = dgDrive.BytesPerSector;
|
||||
|
||||
|
|
184
src/hash.c
184
src/hash.c
|
@ -5,7 +5,7 @@
|
|||
* Copyright © 2004-2019 Tom St Denis
|
||||
* Copyright © 2004 g10 Code GmbH
|
||||
* Copyright © 2002-2015 Wei Dai & Igor Pavlov
|
||||
* Copyright © 2015-2023 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2015-2024 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2022 Jeffrey Walton <noloader@gmail.com>
|
||||
* Copyright © 2016 Alexander Graf
|
||||
*
|
||||
|
@ -60,6 +60,7 @@
|
|||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <inttypes.h>
|
||||
|
@ -97,34 +98,24 @@
|
|||
#define BUFFER_SIZE (64*KB)
|
||||
#define WAIT_TIME 5000
|
||||
|
||||
/* Blocksize for each algorithm - Must be a power of 2 */
|
||||
#define MD5_BLOCKSIZE 64
|
||||
#define SHA1_BLOCKSIZE 64
|
||||
#define SHA256_BLOCKSIZE 64
|
||||
#define SHA512_BLOCKSIZE 128
|
||||
#define MAX_BLOCKSIZE SHA512_BLOCKSIZE
|
||||
|
||||
/* Hashsize for each algorithm */
|
||||
#define MD5_HASHSIZE 16
|
||||
#define SHA1_HASHSIZE 20
|
||||
#define SHA256_HASHSIZE 32
|
||||
#define SHA512_HASHSIZE 64
|
||||
#define MAX_HASHSIZE SHA512_HASHSIZE
|
||||
|
||||
/* Number of buffers we work with */
|
||||
#define NUM_BUFFERS 3 // 2 + 1 as a mere double buffered async I/O
|
||||
// would modify the buffer being processed.
|
||||
|
||||
/* Globals */
|
||||
char hash_str[HASH_MAX][150];
|
||||
uint32_t proc_bufnum, hash_count[HASH_MAX] = { MD5_HASHSIZE, SHA1_HASHSIZE, SHA256_HASHSIZE, SHA512_HASHSIZE };
|
||||
HANDLE data_ready[HASH_MAX] = { 0 }, thread_ready[HASH_MAX] = { 0 };
|
||||
DWORD read_size[NUM_BUFFERS];
|
||||
BOOL enable_extra_hashes = FALSE;
|
||||
BOOL enable_extra_hashes = FALSE, validate_md5sum = FALSE;
|
||||
uint8_t ALIGNED(64) buffer[NUM_BUFFERS][BUFFER_SIZE];
|
||||
extern int default_thread_priority;
|
||||
uint32_t pe256ssp_size = 0;
|
||||
uint8_t* pe256ssp = NULL;
|
||||
uint32_t proc_bufnum, hash_count[HASH_MAX] = { MD5_HASHSIZE, SHA1_HASHSIZE, SHA256_HASHSIZE, SHA512_HASHSIZE };
|
||||
uint32_t pe256ssp_size = 0;
|
||||
uint64_t md5sum_totalbytes;
|
||||
StrArray modified_files = { 0 };
|
||||
|
||||
extern int default_thread_priority;
|
||||
extern const char* efi_bootname[ARCH_MAX];
|
||||
|
||||
/*
|
||||
* Rotate 32 or 64 bit integers by n bytes.
|
||||
|
@ -178,16 +169,6 @@ static const uint64_t K512[80] = {
|
|||
0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
|
||||
};
|
||||
|
||||
/*
|
||||
* For convenience, we use a common context for all the hash algorithms,
|
||||
* which means some elements may be unused...
|
||||
*/
|
||||
typedef struct ALIGNED(64) {
|
||||
uint8_t buf[MAX_BLOCKSIZE];
|
||||
uint64_t state[8];
|
||||
uint64_t bytecount;
|
||||
} HASH_CONTEXT;
|
||||
|
||||
static void md5_init(HASH_CONTEXT *ctx)
|
||||
{
|
||||
memset(ctx, 0, sizeof(*ctx));
|
||||
|
@ -1467,9 +1448,6 @@ static void null_write(HASH_CONTEXT *ctx, const uint8_t *buf, size_t len) { }
|
|||
static void null_final(HASH_CONTEXT *ctx) { }
|
||||
#endif
|
||||
|
||||
typedef void hash_init_t(HASH_CONTEXT *ctx);
|
||||
typedef void hash_write_t(HASH_CONTEXT *ctx, const uint8_t *buf, size_t len);
|
||||
typedef void hash_final_t(HASH_CONTEXT *ctx);
|
||||
hash_init_t *hash_init[HASH_MAX] = { md5_init, sha1_init , sha256_init, sha512_init };
|
||||
hash_write_t *hash_write[HASH_MAX] = { md5_write, sha1_write , sha256_write, sha512_write };
|
||||
hash_final_t *hash_final[HASH_MAX] = { md5_final, sha1_final , sha256_final, sha512_final };
|
||||
|
@ -1490,7 +1468,7 @@ BOOL HashFile(const unsigned type, const char* path, uint8_t* hash)
|
|||
h = CreateFileU(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
|
||||
if (h == INVALID_HANDLE_VALUE) {
|
||||
uprintf("Could not open file: %s", WindowsErrorString());
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_OPEN_FAILED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_OPEN_FAILED);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -1498,7 +1476,7 @@ BOOL HashFile(const unsigned type, const char* path, uint8_t* hash)
|
|||
for (rb = 0; ; rb += rs) {
|
||||
CHECK_FOR_USER_CANCEL;
|
||||
if (!ReadFile(h, buf, sizeof(buf), &rs, NULL)) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_READ_FAULT;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_READ_FAULT);
|
||||
uprintf(" Read error: %s", WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
|
@ -2005,7 +1983,7 @@ DWORD WINAPI HashThread(void* param)
|
|||
fd = CreateFileAsync(image_path, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN);
|
||||
if (fd == NULL) {
|
||||
uprintf("Could not open file: %s", WindowsErrorString());
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_OPEN_FAILED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_OPEN_FAILED);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -2026,7 +2004,7 @@ DWORD WINAPI HashThread(void* param)
|
|||
if ((!WaitFileAsync(fd, DRIVE_ACCESS_TIMEOUT)) ||
|
||||
(!GetSizeAsync(fd, &read_size[read_bufnum]))) {
|
||||
uprintf("Read error: %s", WindowsErrorString());
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_READ_FAULT;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_READ_FAULT);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -2149,6 +2127,140 @@ void PrintRevokedBootloaderInfo(void)
|
|||
uprintf("WARNING: Could not parse this system's SkuSiPolicy.p7b for additional revoked UEFI bootloaders");
|
||||
}
|
||||
|
||||
/*
|
||||
* Updates the MD5SUMS/md5sum.txt file that some distros (Ubuntu, Mint...)
|
||||
* use to validate the media. Because we may alter some of the validated files
|
||||
* to add persistence and whatnot, we need to alter the MD5 list as a result.
|
||||
* The format of the file is expected to always be "<MD5SUM> <FILE_PATH>" on
|
||||
* individual lines.
|
||||
* This function is also used to finalize the md5sum.txt we create for use with
|
||||
* our uefi-md5sum bootloaders.
|
||||
*/
|
||||
void UpdateMD5Sum(const char* dest_dir, const char* md5sum_name)
|
||||
{
|
||||
BOOL display_header = TRUE;
|
||||
BYTE* res_data;
|
||||
DWORD res_size;
|
||||
HANDLE hFile;
|
||||
intptr_t pos;
|
||||
uint32_t i, j, size, md5_size, new_size;
|
||||
uint8_t sum[MD5_HASHSIZE];
|
||||
char md5_path[64], path1[64], path2[64], *md5_data = NULL, *new_data = NULL, *str_pos;
|
||||
char *d, *s, *p;
|
||||
|
||||
if (!img_report.has_md5sum && !validate_md5sum)
|
||||
goto out;
|
||||
|
||||
static_sprintf(md5_path, "%s\\%s", dest_dir, md5sum_name);
|
||||
md5_size = read_file(md5_path, (uint8_t**)&md5_data);
|
||||
if (md5_size == 0)
|
||||
goto out;
|
||||
|
||||
for (i = 0; i < modified_files.Index; i++) {
|
||||
for (j = 0; j < (uint32_t)strlen(modified_files.String[i]); j++)
|
||||
if (modified_files.String[i][j] == '\\')
|
||||
modified_files.String[i][j] = '/';
|
||||
str_pos = strstr(md5_data, &modified_files.String[i][2]);
|
||||
if (str_pos == NULL)
|
||||
// File is not listed in md5 sums
|
||||
continue;
|
||||
if (display_header) {
|
||||
uprintf("Updating %s:", md5_path);
|
||||
display_header = FALSE;
|
||||
}
|
||||
uprintf("● %s", &modified_files.String[i][2]);
|
||||
pos = str_pos - md5_data;
|
||||
HashFile(HASH_MD5, modified_files.String[i], sum);
|
||||
while ((pos > 0) && (md5_data[pos - 1] != '\n'))
|
||||
pos--;
|
||||
assert(IS_HEXASCII(md5_data[pos]));
|
||||
for (j = 0; j < 16; j++) {
|
||||
md5_data[pos + 2 * j] = ((sum[j] >> 4) < 10) ? ('0' + (sum[j] >> 4)) : ('a' - 0xa + (sum[j] >> 4));
|
||||
md5_data[pos + 2 * j + 1] = ((sum[j] & 15) < 10) ? ('0' + (sum[j] & 15)) : ('a' - 0xa + (sum[j] & 15));
|
||||
}
|
||||
}
|
||||
|
||||
// If we validate md5sum we need to update the original bootloader names and add md5sum_totalbytes
|
||||
if (validate_md5sum) {
|
||||
new_size = md5_size;
|
||||
new_data = malloc(md5_size + 1024);
|
||||
assert(new_data != NULL);
|
||||
if (new_data == NULL)
|
||||
goto out;
|
||||
// Will be nonzero if we created the file, otherwise zero
|
||||
if (md5sum_totalbytes != 0) {
|
||||
snprintf(new_data, md5_size + 1024, "# md5sum_totalbytes = 0x%llx\n", md5sum_totalbytes);
|
||||
new_size += (uint32_t)strlen(new_data);
|
||||
d = &new_data[strlen(new_data)];
|
||||
} else {
|
||||
d = new_data;
|
||||
}
|
||||
s = md5_data;
|
||||
// Extract the MD5Sum bootloader(s)
|
||||
for (i = 1; i < ARRAYSIZE(efi_bootname); i++) {
|
||||
static_sprintf(path1, "%s\\efi\\boot\\%s", dest_dir, efi_bootname[i]);
|
||||
if (!PathFileExistsA(path1))
|
||||
continue;
|
||||
res_data = (BYTE*)GetResource(hMainInstance, MAKEINTRESOURCEA(IDR_MD5_BOOT + i),
|
||||
_RT_RCDATA, efi_bootname[i], &res_size, FALSE);
|
||||
static_strcpy(path2, path1);
|
||||
path2[strlen(path2) - 4] = 0;
|
||||
static_strcat(path2, "_original.efi");
|
||||
if (res_data == NULL || !MoveFileU(path1, path2)) {
|
||||
uprintf("Could not rename: %s → %s", path1, path2);
|
||||
continue;
|
||||
}
|
||||
uprintf("Renamed: %s → %s", path1, path2);
|
||||
hFile = CreateFileA(path1, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL,
|
||||
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
if ((hFile == NULL) || (hFile == INVALID_HANDLE_VALUE)) {
|
||||
uprintf("Could not create '%s': %s.", path1, WindowsErrorString());
|
||||
MoveFileU(path2, path1);
|
||||
continue;
|
||||
}
|
||||
if (!WriteFileWithRetry(hFile, res_data, res_size, NULL, WRITE_RETRIES)) {
|
||||
uprintf("Could not write '%s': %s.", path1, WindowsErrorString());
|
||||
safe_closehandle(hFile);
|
||||
MoveFileU(path2, path1);
|
||||
continue;
|
||||
}
|
||||
safe_closehandle(hFile);
|
||||
uprintf("Created: %s (%s)", path1, SizeToHumanReadable(res_size, FALSE, FALSE));
|
||||
}
|
||||
// Rename the original bootloaders if present in md5sum.txt
|
||||
for (p = md5_data; (p = StrStrIA(p, " ./efi/boot/boot")) != NULL; ) {
|
||||
for (i = 1; i < ARRAYSIZE(efi_bootname); i++) {
|
||||
if (p[12 + strlen(efi_bootname[i])] != 0x0a)
|
||||
continue;
|
||||
p[12 + strlen(efi_bootname[i])] = 0;
|
||||
if (lstrcmpiA(&p[12], efi_bootname[i]) == 0) {
|
||||
size = (uint32_t)(p - s) + 12 + (uint32_t)strlen(efi_bootname[i]) - 4;
|
||||
memcpy(d, s, size);
|
||||
d = &d[size];
|
||||
strcpy(d, "_original.efi\n");
|
||||
new_size += 9;
|
||||
d = &d[14];
|
||||
s = &p[12 + strlen(efi_bootname[i]) + 1];
|
||||
}
|
||||
p[12 + strlen(efi_bootname[i])] = 0x0a;
|
||||
}
|
||||
p = &p[12];
|
||||
}
|
||||
p = &md5_data[md5_size];
|
||||
memcpy(d, s, p - s);
|
||||
free(md5_data);
|
||||
md5_data = new_data;
|
||||
md5_size = new_size;
|
||||
}
|
||||
|
||||
write_file(md5_path, md5_data, md5_size);
|
||||
free(md5_data);
|
||||
|
||||
out:
|
||||
// We no longer need the string array at this stage
|
||||
StrArrayDestroy(&modified_files);
|
||||
}
|
||||
|
||||
#if defined(_DEBUG) || defined(TEST) || defined(ALPHA)
|
||||
/* Convert a lowercase hex string to binary. Returned value must be freed */
|
||||
uint8_t* to_bin(const char* str)
|
||||
|
|
21
src/icon.c
21
src/icon.c
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Extract icon from executable and set autorun.inf
|
||||
* Copyright © 2012-2021 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2012-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -95,12 +95,15 @@ BOOL ExtractAppIcon(const char* path, BOOL bSilent)
|
|||
HRSRC res;
|
||||
WORD i;
|
||||
BYTE* res_data;
|
||||
DWORD res_size, Size, offset;
|
||||
DWORD res_size, offset;
|
||||
HANDLE hFile = INVALID_HANDLE_VALUE;
|
||||
BOOL r = FALSE;
|
||||
GRPICONDIR* icondir;
|
||||
|
||||
icondir = (GRPICONDIR*)GetResource(hMainInstance, MAKEINTRESOURCEA(IDI_ICON), _RT_GROUP_ICON, "icon", &res_size, FALSE);
|
||||
assert(icondir != NULL && icondir->idCount <= 64);
|
||||
if (icondir == NULL || icondir->idCount > 64)
|
||||
goto out;
|
||||
|
||||
hFile = CreateFileU(path, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ,
|
||||
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
|
@ -110,34 +113,34 @@ BOOL ExtractAppIcon(const char* path, BOOL bSilent)
|
|||
}
|
||||
|
||||
// Write .ico header
|
||||
if (!WriteFileWithRetry(hFile, icondir, 3*sizeof(WORD), &Size, WRITE_RETRIES)) {
|
||||
if (!WriteFileWithRetry(hFile, icondir, 3 * sizeof(WORD), NULL, WRITE_RETRIES)) {
|
||||
uprintf("Could not write icon header: %s.", WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
|
||||
// Write icon data
|
||||
offset = 3*sizeof(WORD) + icondir->idCount*sizeof(ICONDIRENTRY);
|
||||
for (i=0; i<icondir->idCount; i++) {
|
||||
offset = 3 * sizeof(WORD) + icondir->idCount * sizeof(ICONDIRENTRY);
|
||||
for (i = 0; i < icondir->idCount; i++) {
|
||||
// Write the common part of ICONDIRENTRY
|
||||
if (!WriteFileWithRetry(hFile, &icondir->idEntries[i], sizeof(GRPICONDIRENTRY)-sizeof(WORD), &Size, WRITE_RETRIES)) {
|
||||
if (!WriteFileWithRetry(hFile, &icondir->idEntries[i], sizeof(GRPICONDIRENTRY)-sizeof(WORD), NULL, WRITE_RETRIES)) {
|
||||
uprintf("Could not write ICONDIRENTRY[%d]: %s.", i, WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
res = FindResourceA(hMainInstance, MAKEINTRESOURCEA(icondir->idEntries[i].nID), _RT_ICON);
|
||||
// Write the DWORD offset
|
||||
if (!WriteFileWithRetry(hFile, &offset, sizeof(offset), &Size, WRITE_RETRIES)) {
|
||||
if (!WriteFileWithRetry(hFile, &offset, sizeof(offset), NULL, WRITE_RETRIES)) {
|
||||
uprintf("Could not write ICONDIRENTRY[%d] offset: %s.", i, WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
offset += SizeofResource(NULL, res);
|
||||
}
|
||||
for (i=0; i<icondir->idCount; i++) {
|
||||
for (i = 0; i < icondir->idCount; i++) {
|
||||
// Write icon data
|
||||
res = FindResourceA(hMainInstance, MAKEINTRESOURCEA(icondir->idEntries[i].nID), _RT_ICON);
|
||||
res_handle = LoadResource(NULL, res);
|
||||
res_data = (BYTE*)LockResource(res_handle);
|
||||
res_size = SizeofResource(NULL, res);
|
||||
if (!WriteFileWithRetry(hFile, res_data, res_size, &Size, WRITE_RETRIES)) {
|
||||
if (!WriteFileWithRetry(hFile, res_data, res_size, NULL, WRITE_RETRIES)) {
|
||||
uprintf("Could not write icon data #%d: %s.", i, WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
|
|
481
src/iso.c
481
src/iso.c
|
@ -52,9 +52,10 @@
|
|||
#include "localization.h"
|
||||
#include "bled/bled.h"
|
||||
|
||||
// How often should we update the progress bar (in 2K blocks) as updating
|
||||
// the progress bar for every block will bring extraction to a crawl
|
||||
#define PROGRESS_THRESHOLD 128
|
||||
// How often should we update the progress bar, as updating the
|
||||
// progress bar too frequently will bring extraction to a crawl
|
||||
_Static_assert(256 * KB >= ISO_BLOCKSIZE, "Can't set PROGRESS_THRESHOLD");
|
||||
#define PROGRESS_THRESHOLD ((256 * KB) / ISO_BLOCKSIZE)
|
||||
|
||||
// Needed for UDF symbolic link testing
|
||||
#define S_IFLNK 0xA000
|
||||
|
@ -81,9 +82,10 @@ typedef struct {
|
|||
|
||||
RUFUS_IMG_REPORT img_report;
|
||||
int64_t iso_blocking_status = -1;
|
||||
extern BOOL preserve_timestamps, enable_ntfs_compression;
|
||||
extern char* archive_path;
|
||||
extern uint64_t md5sum_totalbytes;
|
||||
extern BOOL preserve_timestamps, enable_ntfs_compression, validate_md5sum;
|
||||
extern HANDLE format_thread;
|
||||
extern StrArray modified_files;
|
||||
BOOL enable_iso = TRUE, enable_joliet = TRUE, enable_rockridge = TRUE, has_ldlinux_c32;
|
||||
#define ISO_BLOCKING(x) do {x; iso_blocking_status++; } while(0)
|
||||
static const char* psz_extract_dir;
|
||||
|
@ -92,7 +94,7 @@ const char* bootmgr_efi_name = "bootmgr.efi";
|
|||
static const char* grldr_name = "grldr";
|
||||
static const char* ldlinux_name = "ldlinux.sys";
|
||||
static const char* ldlinux_c32 = "ldlinux.c32";
|
||||
static const char* md5sum_name[] = { "MD5SUMS", "md5sum.txt" };
|
||||
const char* md5sum_name[2] = { "md5sum.txt", "MD5SUMS" };
|
||||
static const char* casper_dirname = "/casper";
|
||||
static const char* proxmox_dirname = "/proxmox";
|
||||
const char* efi_dirname = "/efi/boot";
|
||||
|
@ -122,10 +124,12 @@ static const char* stupid_antivirus = " NOTE: This is usually caused by a poorl
|
|||
const char* old_c32_name[NB_OLD_C32] = OLD_C32_NAMES;
|
||||
static const int64_t old_c32_threshold[NB_OLD_C32] = OLD_C32_THRESHOLD;
|
||||
static uint8_t joliet_level = 0;
|
||||
static uint64_t total_blocks, extra_blocks, nb_blocks;
|
||||
static uint32_t md5sum_size = 0;
|
||||
static uint64_t total_blocks, extra_blocks, nb_blocks, last_nb_blocks;
|
||||
static BOOL scan_only = FALSE;
|
||||
static StrArray config_path, isolinux_path, modified_path;
|
||||
static char symlinked_syslinux[MAX_PATH];
|
||||
static FILE* fd_md5sum = NULL;
|
||||
static StrArray config_path, isolinux_path;
|
||||
static char symlinked_syslinux[MAX_PATH], *md5sum_data = NULL, *md5sum_pos = NULL;
|
||||
|
||||
// Ensure filenames do not contain invalid FAT32 or NTFS characters
|
||||
static __inline char* sanitize_filename(char* filename, BOOL* is_identical)
|
||||
|
@ -320,6 +324,11 @@ static BOOL check_iso_props(const char* psz_dirname, int64_t file_length, const
|
|||
}
|
||||
}
|
||||
|
||||
// Check for "\sources\\$OEM$\\$$\\Panther\\unattend.xml"
|
||||
if ((safe_stricmp(psz_dirname, "/sources/$OEM$/$$/Panther") == 0) &&
|
||||
(safe_stricmp(psz_basename, "unattend.xml") == 0))
|
||||
img_report.has_panther_unattend = TRUE;
|
||||
|
||||
// Check for PE (XP) specific files in "/i386", "/amd64" or "/minint"
|
||||
for (i = 0; i < ARRAYSIZE(pe_dirname); i++)
|
||||
if (safe_stricmp(psz_dirname, pe_dirname[i]) == 0)
|
||||
|
@ -375,9 +384,14 @@ static void fix_config(const char* psz_fullpath, const char* psz_path, const cha
|
|||
if ((props->is_grub_cfg) && replace_in_token_data(src, "linux",
|
||||
"maybe-ubiquity", "", TRUE))
|
||||
uprintf(" Removed 'maybe-ubiquity' kernel option");
|
||||
} else if (replace_in_token_data(src, "linux", "layerfs-path=minimal.standard.live.squashfs",
|
||||
"persistent layerfs-path=minimal.standard.live.squashfs", TRUE) != NULL) {
|
||||
// Ubuntu 23.04 uses GRUB only with the above and does not use "maybe-ubiquity"
|
||||
} else if (replace_in_token_data(src, "linux", "/casper/vmlinuz",
|
||||
"/casper/vmlinuz persistent", TRUE) != NULL) {
|
||||
// Ubuntu 23.04 and 24.04 use GRUB only with the above and don't use "maybe-ubiquity"
|
||||
uprintf(" Added 'persistent' kernel option");
|
||||
modified = TRUE;
|
||||
} else if (replace_in_token_data(src, props->is_grub_cfg ? "linux" : "append",
|
||||
"boot=casper", "boot=casper persistent", TRUE) != NULL) {
|
||||
// Linux Mint uses boot=casper.
|
||||
uprintf(" Added 'persistent' kernel option");
|
||||
modified = TRUE;
|
||||
} else if (replace_in_token_data(src, props->is_grub_cfg ? "linux" : "append",
|
||||
|
@ -419,7 +433,7 @@ static void fix_config(const char* psz_fullpath, const char* psz_path, const cha
|
|||
}
|
||||
}
|
||||
if (patched)
|
||||
uprintf(" Patched %s: '%s' ➔ '%s'\n", src, iso_label, usb_label);
|
||||
uprintf(" Patched %s: '%s' ➔ '%s'", src, iso_label, usb_label);
|
||||
// Since version 8.2, and https://github.com/rhinstaller/anaconda/commit/a7661019546ec1d8b0935f9cb0f151015f2e1d95,
|
||||
// Red Hat derivatives have changed their CD-ROM detection policy which leads to the installation source
|
||||
// not being found. So we need to use 'inst.repo' instead of 'inst.stage2' in the kernel options.
|
||||
|
@ -436,7 +450,7 @@ static void fix_config(const char* psz_fullpath, const char* psz_path, const cha
|
|||
}
|
||||
}
|
||||
if (patched)
|
||||
uprintf(" Patched %s: '%s' ➔ '%s'\n", src, "inst.stage2", "inst.repo");
|
||||
uprintf(" Patched %s: '%s' ➔ '%s'", src, "inst.stage2", "inst.repo");
|
||||
}
|
||||
}
|
||||
safe_free(iso_label);
|
||||
|
@ -449,7 +463,7 @@ static void fix_config(const char* psz_fullpath, const char* psz_path, const cha
|
|||
(!img_report.has_efi_syslinux) && (dst = safe_strdup(src)) ) {
|
||||
dst[nul_pos-12] = 's'; dst[nul_pos-11] = 'y'; dst[nul_pos-10] = 's';
|
||||
CopyFileA(src, dst, TRUE);
|
||||
uprintf("Duplicated %s to %s\n", src, dst);
|
||||
uprintf("Duplicated %s to %s", src, dst);
|
||||
free(dst);
|
||||
}
|
||||
|
||||
|
@ -461,7 +475,7 @@ static void fix_config(const char* psz_fullpath, const char* psz_path, const cha
|
|||
safe_sprintf(iso_label, MAX_PATH, "cd9660:/dev/iso9660/%s", img_report.label);
|
||||
safe_sprintf(usb_label, MAX_PATH, "msdosfs:/dev/msdosfs/%s", img_report.usb_label);
|
||||
if (replace_in_token_data(src, "set", iso_label, usb_label, TRUE) != NULL) {
|
||||
uprintf(" Patched %s: '%s' ➔ '%s'\n", src, iso_label, usb_label);
|
||||
uprintf(" Patched %s: '%s' ➔ '%s'", src, iso_label, usb_label);
|
||||
modified = TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -470,65 +484,62 @@ static void fix_config(const char* psz_fullpath, const char* psz_path, const cha
|
|||
}
|
||||
|
||||
if (modified)
|
||||
StrArrayAdd(&modified_path, psz_fullpath, TRUE);
|
||||
StrArrayAdd(&modified_files, psz_fullpath, TRUE);
|
||||
|
||||
free(src);
|
||||
}
|
||||
|
||||
// This updates the MD5SUMS/md5sum.txt file that some distros (Ubuntu, Mint...)
|
||||
// use to validate the media. Because we may alter some of the validated files
|
||||
// to add persistence and whatnot, we need to alter the MD5 list as a result.
|
||||
// The format of the file is expected to always be "<MD5SUM> <FILE_PATH>" on
|
||||
// individual lines.
|
||||
static void update_md5sum(void)
|
||||
// Returns TRUE if a path appears in md5sum.txt
|
||||
static BOOL is_in_md5sum(char* path)
|
||||
{
|
||||
BOOL display_header = TRUE;
|
||||
intptr_t pos;
|
||||
uint32_t i, j, size, md5_size;
|
||||
uint8_t* buf = NULL, sum[16];
|
||||
char md5_path[64], * md5_data = NULL, * str_pos;
|
||||
BOOL found = FALSE;
|
||||
char c[3], *p, *pos = md5sum_pos, *nul_pos;
|
||||
|
||||
if (!img_report.has_md5sum)
|
||||
goto out;
|
||||
// If we are creating the md5sum file from scratch, every file is in it.
|
||||
if (fd_md5sum != NULL)
|
||||
return TRUE;
|
||||
|
||||
assert(img_report.has_md5sum <= ARRAYSIZE(md5sum_name));
|
||||
if (img_report.has_md5sum > ARRAYSIZE(md5sum_name))
|
||||
goto out;
|
||||
// If we don't have an existing file at this stage, then no file is in it.
|
||||
if (md5sum_size == 0 || md5sum_data == NULL)
|
||||
return FALSE;
|
||||
|
||||
static_sprintf(md5_path, "%s\\%s", psz_extract_dir, md5sum_name[img_report.has_md5sum - 1]);
|
||||
md5_size = read_file(md5_path, (uint8_t**)&md5_data);
|
||||
if (md5_size == 0)
|
||||
goto out;
|
||||
// We should have a "X:/xyz" path
|
||||
assert(path[1] == ':' && path[2] == '/');
|
||||
|
||||
for (i = 0; i < modified_path.Index; i++) {
|
||||
str_pos = strstr(md5_data, &modified_path.String[i][2]);
|
||||
if (str_pos == NULL)
|
||||
// File is not listed in md5 sums
|
||||
continue;
|
||||
if (display_header) {
|
||||
uprintf("Updating %s:", md5_path);
|
||||
display_header = FALSE;
|
||||
}
|
||||
uprintf("● %s", &modified_path.String[i][2]);
|
||||
pos = str_pos - md5_data;
|
||||
size = read_file(modified_path.String[i], &buf);
|
||||
if (size == 0)
|
||||
continue;
|
||||
HashBuffer(HASH_MD5, buf, size, sum);
|
||||
free(buf);
|
||||
while ((pos > 0) && (md5_data[pos - 1] != '\n'))
|
||||
pos--;
|
||||
for (j = 0; j < 16; j++) {
|
||||
md5_data[pos + 2 * j] = ((sum[j] >> 4) < 10) ? ('0' + (sum[j] >> 4)) : ('a' - 0xa + (sum[j] >> 4));
|
||||
md5_data[pos + 2 * j + 1] = ((sum[j] & 15) < 10) ? ('0' + (sum[j] & 15)) : ('a' - 0xa + (sum[j] & 15));
|
||||
// Modify the path to have " ./xyz"
|
||||
c[0] = path[0];
|
||||
c[1] = path[1];
|
||||
path[0] = ' ';
|
||||
path[1] = '.';
|
||||
|
||||
// Search for the string in the remainder of the md5sum.txt
|
||||
// NB: md5sum_data is always NUL terminated.
|
||||
p = strstr(pos, path);
|
||||
// Cater for the case where we matched a partial string and look for the full one
|
||||
while (p != NULL && p[strlen(path)] != '\n' && p[strlen(path)] != '\r' && p[strlen(path)] != '\0') {
|
||||
pos = p + strlen(path);
|
||||
p = strstr(pos, path);
|
||||
}
|
||||
found = (p != NULL);
|
||||
// If not found in remainder and we have a remainder, loop to search from beginning
|
||||
if (!found && pos != md5sum_data) {
|
||||
nul_pos = pos;
|
||||
c[2] = *nul_pos;
|
||||
*nul_pos = 0;
|
||||
p = strstr(md5sum_data, path);
|
||||
while (p != NULL && p[strlen(path)] != '\n' && p[strlen(path)] != '\r' && p[strlen(path)] != '\0') {
|
||||
pos = p + strlen(path);
|
||||
p = strstr(pos, path);
|
||||
}
|
||||
*nul_pos = c[2];
|
||||
found = (p != NULL);
|
||||
}
|
||||
|
||||
write_file(md5_path, md5_data, md5_size);
|
||||
free(md5_data);
|
||||
|
||||
out:
|
||||
StrArrayDestroy(&modified_path);
|
||||
path[0] = c[0];
|
||||
path[1] = c[1];
|
||||
if (found)
|
||||
md5sum_pos = p + strlen(path);
|
||||
return found;
|
||||
}
|
||||
|
||||
static void print_extracted_file(char* psz_fullpath, uint64_t file_length)
|
||||
|
@ -541,19 +552,16 @@ static void print_extracted_file(char* psz_fullpath, uint64_t file_length)
|
|||
to_windows_path(psz_fullpath);
|
||||
nul_pos = strlen(psz_fullpath);
|
||||
safe_sprintf(&psz_fullpath[nul_pos], 24, " (%s)", SizeToHumanReadable(file_length, TRUE, FALSE));
|
||||
uprintf("Extracting: %s\n", psz_fullpath);
|
||||
uprintf("Extracting: %s", psz_fullpath);
|
||||
safe_sprintf(&psz_fullpath[nul_pos], 24, " (%s)", SizeToHumanReadable(file_length, FALSE, FALSE));
|
||||
PrintStatus(0, MSG_000, psz_fullpath); // MSG_000 is "%s"
|
||||
// Remove the appended size for extraction
|
||||
psz_fullpath[nul_pos] = 0;
|
||||
// ISO9660 cannot handle backslashes
|
||||
to_unix_path(psz_fullpath);
|
||||
}
|
||||
|
||||
static void alt_print_extracted_file(const char* psz_fullpath, uint64_t file_length)
|
||||
{
|
||||
uprintf("Extracting: %s (%s)", psz_fullpath, SizeToHumanReadable(file_length, FALSE, FALSE));
|
||||
PrintStatus(0, MSG_000, psz_fullpath);
|
||||
// Update md5sum_totalbytes as needed
|
||||
if (is_in_md5sum(psz_fullpath))
|
||||
md5sum_totalbytes += file_length;
|
||||
}
|
||||
|
||||
// Convert from time_t to FILETIME
|
||||
|
@ -587,22 +595,27 @@ static int udf_extract_files(udf_t *p_udf, udf_dirent_t *p_udf_dirent, const cha
|
|||
HANDLE file_handle = NULL;
|
||||
DWORD buf_size, wr_size, err;
|
||||
EXTRACT_PROPS props;
|
||||
HASH_CONTEXT ctx;
|
||||
BOOL r, is_identical;
|
||||
int length;
|
||||
size_t i;
|
||||
size_t i, j, nb;
|
||||
char tmp[128], *psz_fullpath = NULL, *psz_sanpath = NULL;
|
||||
const char* psz_basename;
|
||||
udf_dirent_t *p_udf_dirent2;
|
||||
uint8_t buf[UDF_BLOCKSIZE];
|
||||
_Static_assert(ISO_BUFFER_SIZE % UDF_BLOCKSIZE == 0,
|
||||
"ISO_BUFFER_SIZE is not a multiple of UDF_BLOCKSIZE");
|
||||
uint8_t* buf = malloc(ISO_BUFFER_SIZE);
|
||||
int64_t read, file_length;
|
||||
|
||||
if ((p_udf_dirent == NULL) || (psz_path == NULL))
|
||||
if ((p_udf_dirent == NULL) || (psz_path == NULL) || (buf == NULL)) {
|
||||
safe_free(buf);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (psz_path[0] == 0)
|
||||
UpdateProgressWithInfoInit(NULL, TRUE);
|
||||
while ((p_udf_dirent = udf_readdir(p_udf_dirent)) != NULL) {
|
||||
if (FormatStatus) goto out;
|
||||
if (ErrorStatus) goto out;
|
||||
psz_basename = udf_get_filename(p_udf_dirent);
|
||||
if (strlen(psz_basename) == 0)
|
||||
continue;
|
||||
|
@ -612,10 +625,9 @@ static int udf_extract_files(udf_t *p_udf, udf_dirent_t *p_udf_dirent, const cha
|
|||
uprintf("Error allocating file name");
|
||||
goto out;
|
||||
}
|
||||
length = _snprintf(psz_fullpath, length, "%s%s/%s", psz_extract_dir, psz_path, psz_basename);
|
||||
if (length < 0) {
|
||||
length = _snprintf_s(psz_fullpath, length, _TRUNCATE, "%s%s/%s", psz_extract_dir, psz_path, psz_basename);
|
||||
if (length < 0)
|
||||
goto out;
|
||||
}
|
||||
if (S_ISLNK(udf_get_posix_filemode(p_udf_dirent)))
|
||||
img_report.has_symlinks = SYMLINKS_UDF;
|
||||
if (udf_is_dir(p_udf_dirent)) {
|
||||
|
@ -666,23 +678,37 @@ static int udf_extract_files(udf_t *p_udf, udf_dirent_t *p_udf_dirent, const cha
|
|||
else
|
||||
goto out;
|
||||
} else {
|
||||
if (fd_md5sum != NULL)
|
||||
hash_init[HASH_MD5](&ctx);
|
||||
while (file_length > 0) {
|
||||
if (FormatStatus) goto out;
|
||||
memset(buf, 0, UDF_BLOCKSIZE);
|
||||
read = udf_read_block(p_udf_dirent, buf, 1);
|
||||
if (ErrorStatus)
|
||||
goto out;
|
||||
nb = (size_t)MIN(ISO_BUFFER_SIZE / UDF_BLOCKSIZE, (file_length + UDF_BLOCKSIZE - 1) / UDF_BLOCKSIZE);
|
||||
read = udf_read_block(p_udf_dirent, buf, nb);
|
||||
if (read < 0) {
|
||||
uprintf(" Error reading UDF file %s", &psz_fullpath[strlen(psz_extract_dir)]);
|
||||
goto out;
|
||||
}
|
||||
buf_size = (DWORD)MIN(file_length, read);
|
||||
if (fd_md5sum != NULL)
|
||||
hash_write[HASH_MD5](&ctx, buf, buf_size);
|
||||
ISO_BLOCKING(r = WriteFileWithRetry(file_handle, buf, buf_size, &wr_size, WRITE_RETRIES));
|
||||
if (!r) {
|
||||
uprintf(" Error writing file: %s", WindowsErrorString());
|
||||
if (!r || (wr_size != buf_size)) {
|
||||
uprintf(" Error writing file: %s", r ? "Short write detected" : WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
file_length -= read;
|
||||
if (nb_blocks++ % PROGRESS_THRESHOLD == 0)
|
||||
file_length -= wr_size;
|
||||
nb_blocks += nb;
|
||||
if (nb_blocks - last_nb_blocks >= PROGRESS_THRESHOLD) {
|
||||
UpdateProgressWithInfo(OP_FILE_COPY, MSG_231, nb_blocks, total_blocks);
|
||||
last_nb_blocks = nb_blocks;
|
||||
}
|
||||
}
|
||||
if (fd_md5sum != NULL) {
|
||||
hash_final[HASH_MD5](&ctx);
|
||||
for (j = 0; j < MD5_HASHSIZE; j++)
|
||||
fprintf(fd_md5sum, "%02x", ctx.buf[j]);
|
||||
fprintf(fd_md5sum, " ./%s\n", &psz_fullpath[3]);
|
||||
}
|
||||
}
|
||||
if ((preserve_timestamps) && (!SetFileTime(file_handle, to_filetime(udf_get_attribute_time(p_udf_dirent)),
|
||||
|
@ -701,6 +727,7 @@ static int udf_extract_files(udf_t *p_udf, udf_dirent_t *p_udf_dirent, const cha
|
|||
}
|
||||
safe_free(psz_fullpath);
|
||||
}
|
||||
safe_free(buf);
|
||||
return 0;
|
||||
|
||||
out:
|
||||
|
@ -708,6 +735,7 @@ out:
|
|||
ISO_BLOCKING(safe_closehandle(file_handle));
|
||||
safe_free(psz_sanpath);
|
||||
safe_free(psz_fullpath);
|
||||
safe_free(buf);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -717,37 +745,42 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path)
|
|||
HANDLE file_handle = NULL;
|
||||
DWORD buf_size, wr_size, err;
|
||||
EXTRACT_PROPS props;
|
||||
HASH_CONTEXT ctx;
|
||||
BOOL is_symlink, is_identical, create_file, free_p_statbuf = FALSE;
|
||||
int length, r = 1;
|
||||
char psz_fullpath[MAX_PATH], *psz_basename = NULL, *psz_sanpath = NULL;
|
||||
char tmp[128], target_path[256];
|
||||
const char *psz_iso_name = &psz_fullpath[strlen(psz_extract_dir)];
|
||||
unsigned char buf[ISO_BLOCKSIZE];
|
||||
_Static_assert(ISO_BUFFER_SIZE % ISO_BLOCKSIZE == 0,
|
||||
"ISO_BUFFER_SIZE is not a multiple of ISO_BLOCKSIZE");
|
||||
uint8_t* buf = malloc(ISO_BUFFER_SIZE);
|
||||
CdioListNode_t* p_entnode;
|
||||
iso9660_stat_t *p_statbuf;
|
||||
CdioISO9660FileList_t* p_entlist;
|
||||
size_t i;
|
||||
CdioISO9660FileList_t* p_entlist = NULL;
|
||||
size_t i, j, nb;
|
||||
lsn_t lsn;
|
||||
int64_t file_length;
|
||||
|
||||
if ((p_iso == NULL) || (psz_path == NULL))
|
||||
if ((p_iso == NULL) || (psz_path == NULL) || (buf == NULL)) {
|
||||
safe_free(buf);
|
||||
return 1;
|
||||
}
|
||||
|
||||
length = _snprintf(psz_fullpath, sizeof(psz_fullpath), "%s%s/", psz_extract_dir, psz_path);
|
||||
length = _snprintf_s(psz_fullpath, sizeof(psz_fullpath), _TRUNCATE, "%s%s/", psz_extract_dir, psz_path);
|
||||
if (length < 0)
|
||||
return 1;
|
||||
goto out;
|
||||
psz_basename = &psz_fullpath[length];
|
||||
|
||||
p_entlist = iso9660_ifs_readdir(p_iso, psz_path);
|
||||
if (!p_entlist) {
|
||||
uprintf("Could not access directory %s", psz_path);
|
||||
return 1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (psz_path[0] == 0)
|
||||
UpdateProgressWithInfoInit(NULL, TRUE);
|
||||
_CDIO_LIST_FOREACH(p_entnode, p_entlist) {
|
||||
if (FormatStatus) goto out;
|
||||
if (ErrorStatus) goto out;
|
||||
p_statbuf = (iso9660_stat_t*) _cdio_list_node_data(p_entnode);
|
||||
free_p_statbuf = FALSE;
|
||||
if (scan_only && (p_statbuf->rr.b3_rock == yep) && enable_rockridge) {
|
||||
|
@ -908,25 +941,41 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path)
|
|||
uprintf(" Error writing file: %s", WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
} else for (i = 0; file_length > 0; i++) {
|
||||
if (FormatStatus) goto out;
|
||||
memset(buf, 0, ISO_BLOCKSIZE);
|
||||
lsn = p_statbuf->lsn + (lsn_t)i;
|
||||
if (iso9660_iso_seek_read(p_iso, buf, lsn, 1) != ISO_BLOCKSIZE) {
|
||||
uprintf(" Error reading ISO9660 file %s at LSN %lu",
|
||||
psz_iso_name, (long unsigned int)lsn);
|
||||
goto out;
|
||||
} else {
|
||||
if (fd_md5sum != NULL)
|
||||
hash_init[HASH_MD5](&ctx);
|
||||
for (i = 0; file_length > 0; i += nb) {
|
||||
if (ErrorStatus)
|
||||
goto out;
|
||||
lsn = p_statbuf->lsn + (lsn_t)i;
|
||||
nb = (size_t)MIN(ISO_BUFFER_SIZE / ISO_BLOCKSIZE, (file_length + ISO_BLOCKSIZE - 1) / ISO_BLOCKSIZE);
|
||||
if (iso9660_iso_seek_read(p_iso, buf, lsn, (long)nb) != (nb * ISO_BLOCKSIZE)) {
|
||||
uprintf(" Error reading ISO9660 file %s at LSN %lu",
|
||||
psz_iso_name, (long unsigned int)lsn);
|
||||
goto out;
|
||||
}
|
||||
buf_size = (DWORD)MIN(file_length, ISO_BUFFER_SIZE);
|
||||
if (fd_md5sum != NULL)
|
||||
hash_write[HASH_MD5](&ctx, buf, buf_size);
|
||||
ISO_BLOCKING(r = WriteFileWithRetry(file_handle, buf, buf_size, &wr_size, WRITE_RETRIES));
|
||||
if (!r || wr_size != buf_size) {
|
||||
uprintf(" Error writing file: %s", r ? "Short write detected" : WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
file_length -= wr_size;
|
||||
nb_blocks += nb;
|
||||
if (nb_blocks - last_nb_blocks >= PROGRESS_THRESHOLD) {
|
||||
UpdateProgressWithInfo(OP_FILE_COPY, MSG_231, nb_blocks, total_blocks +
|
||||
((fs_type != FS_NTFS) ? extra_blocks : 0));
|
||||
last_nb_blocks = nb_blocks;
|
||||
}
|
||||
}
|
||||
buf_size = (DWORD)MIN(file_length, ISO_BLOCKSIZE);
|
||||
ISO_BLOCKING(r = WriteFileWithRetry(file_handle, buf, buf_size, &wr_size, WRITE_RETRIES));
|
||||
if (!r) {
|
||||
uprintf(" Error writing file: %s", WindowsErrorString());
|
||||
goto out;
|
||||
if (fd_md5sum != NULL) {
|
||||
hash_final[HASH_MD5](&ctx);
|
||||
for (j = 0; j < MD5_HASHSIZE; j++)
|
||||
fprintf(fd_md5sum, "%02x", ctx.buf[j]);
|
||||
fprintf(fd_md5sum, " ./%s\n", &psz_fullpath[3]);
|
||||
}
|
||||
file_length -= ISO_BLOCKSIZE;
|
||||
if (nb_blocks++ % PROGRESS_THRESHOLD == 0)
|
||||
UpdateProgressWithInfo(OP_FILE_COPY, MSG_231, nb_blocks, total_blocks +
|
||||
((fs_type != FS_NTFS) ? extra_blocks : 0));
|
||||
}
|
||||
if (preserve_timestamps) {
|
||||
LPFILETIME ft = to_filetime(mktime(&p_statbuf->tm));
|
||||
|
@ -946,8 +995,10 @@ static int iso_extract_files(iso9660_t* p_iso, const char *psz_path)
|
|||
|
||||
out:
|
||||
ISO_BLOCKING(safe_closehandle(file_handle));
|
||||
iso9660_filelist_free(p_entlist);
|
||||
if (p_entlist != NULL)
|
||||
iso9660_filelist_free(p_entlist);
|
||||
safe_free(psz_sanpath);
|
||||
safe_free(buf);
|
||||
return r;
|
||||
}
|
||||
|
||||
|
@ -1034,20 +1085,19 @@ void GetGrubVersion(char* buf, size_t buf_size)
|
|||
|
||||
BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan)
|
||||
{
|
||||
size_t i, j, size, sl_index = 0;
|
||||
uint16_t sl_version;
|
||||
FILE* fd;
|
||||
const char* basedir[] = { "i386", "amd64", "minint" };
|
||||
const char* tmp_sif = ".\\txtsetup.sif~";
|
||||
int k, r = 1;
|
||||
char *tmp, *buf = NULL, *ext, *spacing = " ";
|
||||
char path[MAX_PATH], path2[16];
|
||||
uint16_t sl_version;
|
||||
size_t i, j, size, sl_index = 0;
|
||||
FILE* fd;
|
||||
iso9660_t* p_iso = NULL;
|
||||
iso9660_pvd_t pvd;
|
||||
udf_t* p_udf = NULL;
|
||||
udf_dirent_t* p_udf_root;
|
||||
char *tmp, *buf, *ext;
|
||||
char path[MAX_PATH], path2[16];
|
||||
const char* basedir[] = { "i386", "amd64", "minint" };
|
||||
const char* tmp_sif = ".\\txtsetup.sif~";
|
||||
iso_extension_mask_t iso_extension_mask = ISO_EXTENSION_ALL;
|
||||
char* spacing = " ";
|
||||
|
||||
if ((!enable_iso) || (src_iso == NULL) || (dest_dir == NULL))
|
||||
return FALSE;
|
||||
|
@ -1069,17 +1119,31 @@ BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan)
|
|||
StrArrayCreate(&isolinux_path, 8);
|
||||
PrintInfo(0, MSG_202);
|
||||
} else {
|
||||
uprintf("Extracting files...\n");
|
||||
uprintf("Extracting files...");
|
||||
IGNORE_RETVAL(_chdirU(app_data_dir));
|
||||
if (total_blocks == 0) {
|
||||
uprintf("Error: ISO has not been properly scanned.\n");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_ISO_SCAN);
|
||||
uprintf("Error: ISO has not been properly scanned.");
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_ISO_SCAN));
|
||||
goto out;
|
||||
}
|
||||
nb_blocks = 0;
|
||||
last_nb_blocks = 0;
|
||||
iso_blocking_status = 0;
|
||||
symlinked_syslinux[0] = 0;
|
||||
StrArrayCreate(&modified_path, 8);
|
||||
StrArrayCreate(&modified_files, 8);
|
||||
if (validate_md5sum) {
|
||||
md5sum_totalbytes = 0;
|
||||
// If there isn't an already existing md5sum.txt create one
|
||||
if (img_report.has_md5sum != 1) {
|
||||
static_sprintf(path, "%s\\%s", dest_dir, md5sum_name[0]);
|
||||
fd_md5sum = fopenU(path, "wb");
|
||||
if (fd_md5sum == NULL)
|
||||
uprintf("WARNING: Could not create '%s'", md5sum_name[0]);
|
||||
} else {
|
||||
md5sum_size = ReadISOFileToBuffer(src_iso, md5sum_name[0], (uint8_t**)&md5sum_data);
|
||||
md5sum_pos = md5sum_data;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// First try to open as UDF - fallback to ISO if it failed
|
||||
|
@ -1183,25 +1247,16 @@ out:
|
|||
char isolinux_tmp[MAX_PATH];
|
||||
static_sprintf(isolinux_tmp, "%sisolinux.tmp", temp_dir);
|
||||
size = (size_t)ExtractISOFile(src_iso, isolinux_path.String[i], isolinux_tmp, FILE_ATTRIBUTE_NORMAL);
|
||||
if (size == 0) {
|
||||
if ((size == 0) || (read_file(isolinux_tmp, (uint8_t**)&buf) != size)) {
|
||||
uprintf(" Could not access %s", isolinux_path.String[i]);
|
||||
} else {
|
||||
buf = (char*)calloc(size, 1);
|
||||
if (buf == NULL) break;
|
||||
fd = fopen(isolinux_tmp, "rb");
|
||||
if (fd == NULL) {
|
||||
free(buf);
|
||||
continue;
|
||||
}
|
||||
fread(buf, 1, size, fd);
|
||||
fclose(fd);
|
||||
sl_version = GetSyslinuxVersion(buf, size, &ext);
|
||||
if (img_report.sl_version == 0) {
|
||||
static_strcpy(img_report.sl_version_ext, ext);
|
||||
img_report.sl_version = sl_version;
|
||||
sl_index = i;
|
||||
} else if ((img_report.sl_version != sl_version) || (safe_strcmp(img_report.sl_version_ext, ext) != 0)) {
|
||||
uprintf(" Found conflicting isolinux versions:\n '%s' (%d.%02d%s) vs '%s' (%d.%02d%s)",
|
||||
uprintf(" Found conflicting isolinux versions:\r\n '%s' (%d.%02d%s) vs '%s' (%d.%02d%s)",
|
||||
isolinux_path.String[sl_index], SL_MAJOR(img_report.sl_version), SL_MINOR(img_report.sl_version),
|
||||
img_report.sl_version_ext, isolinux_path.String[i], SL_MAJOR(sl_version), SL_MINOR(sl_version), ext);
|
||||
// Workaround for Antergos and other ISOs, that have multiple Syslinux versions.
|
||||
|
@ -1248,7 +1303,7 @@ out:
|
|||
if (tmp != NULL) {
|
||||
for (i = 0; i < strlen(tmp); i++)
|
||||
tmp[i] = (char)tolower(tmp[i]);
|
||||
uprintf(" Checking txtsetup.sif:\n OsLoadOptions = %s", tmp);
|
||||
uprintf(" Checking txtsetup.sif:\r\n OsLoadOptions = %s", tmp);
|
||||
img_report.uses_minint = (strstr(tmp, "/minint") != NULL);
|
||||
}
|
||||
DeleteFileU(tmp_sif);
|
||||
|
@ -1265,16 +1320,11 @@ out:
|
|||
// coverity[swapped_arguments]
|
||||
if (GetTempFileNameU(temp_dir, APPLICATION_NAME, 0, path) != 0) {
|
||||
size = (size_t)ExtractISOFile(src_iso, grub_path, path, FILE_ATTRIBUTE_NORMAL);
|
||||
buf = (char*)calloc(size, 1);
|
||||
fd = fopen(path, "rb");
|
||||
if ((size == 0) || (buf == NULL) || (fd == NULL)) {
|
||||
if ((size == 0) || (read_file(path, (uint8_t**)&buf) != size))
|
||||
uprintf(" Could not read Grub version from '%s'", grub_path);
|
||||
} else {
|
||||
fread(buf, 1, size, fd);
|
||||
fclose(fd);
|
||||
else
|
||||
GetGrubVersion(buf, size);
|
||||
}
|
||||
free(buf);
|
||||
safe_free(buf);
|
||||
DeleteFileU(path);
|
||||
}
|
||||
if (img_report.grub2_version[0] == 0) {
|
||||
|
@ -1378,18 +1428,18 @@ out:
|
|||
uprintf("Could not move %s → %s", path, dst_path, WindowsErrorString());
|
||||
}
|
||||
}
|
||||
update_md5sum();
|
||||
if (archive_path != NULL) {
|
||||
uprintf("● Adding files from %s", archive_path);
|
||||
bled_init(256 * KB, NULL, NULL, NULL, NULL, alt_print_extracted_file, NULL);
|
||||
bled_uncompress_to_dir(archive_path, dest_dir, BLED_COMPRESSION_ZIP);
|
||||
bled_exit();
|
||||
if (fd_md5sum != NULL) {
|
||||
uprintf("Created: %s\\%s (%s)", dest_dir, md5sum_name[0], SizeToHumanReadable(ftell(fd_md5sum), FALSE, FALSE));
|
||||
fclose(fd_md5sum);
|
||||
} else if (md5sum_data != NULL) {
|
||||
safe_free(md5sum_data);
|
||||
md5sum_size = 0;
|
||||
}
|
||||
}
|
||||
iso9660_close(p_iso);
|
||||
udf_close(p_udf);
|
||||
if ((r != 0) && (FormatStatus == 0))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR((scan_only?ERROR_ISO_SCAN:ERROR_ISO_EXTRACT));
|
||||
if ((r != 0) && (ErrorStatus == 0))
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(scan_only ? ERROR_ISO_SCAN : ERROR_ISO_EXTRACT));
|
||||
return (r == 0);
|
||||
}
|
||||
|
||||
|
@ -1442,8 +1492,8 @@ int64_t ExtractISOFile(const char* iso, const char* iso_file, const char* dest_f
|
|||
uprintf(" Error writing file %s: %s", dest_file, WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
file_length -= read_size;
|
||||
r += read_size;
|
||||
file_length -= buf_size;
|
||||
r += buf_size;
|
||||
}
|
||||
goto out;
|
||||
|
||||
|
@ -1475,8 +1525,8 @@ try_iso:
|
|||
uprintf(" Error writing file %s: %s", dest_file, WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
file_length -= ISO_BLOCKSIZE;
|
||||
r += ISO_BLOCKSIZE;
|
||||
file_length -= buf_size;
|
||||
r += buf_size;
|
||||
}
|
||||
|
||||
out:
|
||||
|
@ -1491,6 +1541,97 @@ out:
|
|||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract a file to a buffer. Buffer must be freed by the caller.
|
||||
*/
|
||||
uint32_t ReadISOFileToBuffer(const char* iso, const char* iso_file, uint8_t** buf)
|
||||
{
|
||||
ssize_t read_size;
|
||||
int64_t file_length;
|
||||
uint32_t ret = 0, nblocks;
|
||||
iso9660_t* p_iso = NULL;
|
||||
udf_t* p_udf = NULL;
|
||||
udf_dirent_t *p_udf_root = NULL, *p_udf_file = NULL;
|
||||
iso9660_stat_t* p_statbuf = NULL;
|
||||
|
||||
*buf = NULL;
|
||||
|
||||
// First try to open as UDF - fallback to ISO if it failed
|
||||
p_udf = udf_open(iso);
|
||||
if (p_udf == NULL)
|
||||
goto try_iso;
|
||||
p_udf_root = udf_get_root(p_udf, true, 0);
|
||||
if (p_udf_root == NULL) {
|
||||
uprintf("Could not locate UDF root directory");
|
||||
goto out;
|
||||
}
|
||||
p_udf_file = udf_fopen(p_udf_root, iso_file);
|
||||
if (!p_udf_file) {
|
||||
uprintf("Could not locate file %s in ISO image", iso_file);
|
||||
goto out;
|
||||
}
|
||||
file_length = udf_get_file_length(p_udf_file);
|
||||
if (file_length > UINT32_MAX) {
|
||||
uprintf("Only files smaller than 4 GB are supported");
|
||||
goto out;
|
||||
}
|
||||
nblocks = (uint32_t)((file_length + UDF_BLOCKSIZE - 1) / UDF_BLOCKSIZE);
|
||||
*buf = malloc(nblocks * UDF_BLOCKSIZE + 1);
|
||||
if (*buf == NULL) {
|
||||
uprintf("Could not allocate buffer for file %s", iso_file);
|
||||
goto out;
|
||||
}
|
||||
read_size = udf_read_block(p_udf_file, *buf, nblocks);
|
||||
if (read_size < 0 || read_size != file_length) {
|
||||
uprintf("Error reading UDF file %s", iso_file);
|
||||
goto out;
|
||||
}
|
||||
ret = (uint32_t)file_length;
|
||||
(*buf)[ret] = 0;
|
||||
goto out;
|
||||
|
||||
try_iso:
|
||||
// Make sure to enable extensions, else we may not match the name of the file we are looking
|
||||
// for since Rock Ridge may be needed to translate something like 'I386_PC' into 'i386-pc'...
|
||||
p_iso = iso9660_open_ext(iso, ISO_EXTENSION_MASK);
|
||||
if (p_iso == NULL) {
|
||||
uprintf("Unable to open image '%s'", iso);
|
||||
goto out;
|
||||
}
|
||||
p_statbuf = iso9660_ifs_stat_translate(p_iso, iso_file);
|
||||
if (p_statbuf == NULL) {
|
||||
uprintf("Could not get ISO-9660 file information for file %s", iso_file);
|
||||
goto out;
|
||||
}
|
||||
file_length = p_statbuf->total_size;
|
||||
if (file_length > UINT32_MAX) {
|
||||
uprintf("Only files smaller than 4 GB are supported");
|
||||
goto out;
|
||||
}
|
||||
nblocks = (uint32_t)((file_length + ISO_BLOCKSIZE - 1) / ISO_BLOCKSIZE);
|
||||
*buf = malloc(nblocks * ISO_BLOCKSIZE + 1);
|
||||
if (*buf == NULL) {
|
||||
uprintf("Could not allocate buffer for file %s", iso_file);
|
||||
goto out;
|
||||
}
|
||||
if (iso9660_iso_seek_read(p_iso, *buf, p_statbuf->lsn, nblocks) != nblocks * ISO_BLOCKSIZE) {
|
||||
uprintf("Error reading ISO file %s", iso_file);
|
||||
goto out;
|
||||
}
|
||||
ret = (uint32_t)file_length;
|
||||
(*buf)[ret] = 0;
|
||||
|
||||
out:
|
||||
iso9660_stat_free(p_statbuf);
|
||||
udf_dirent_free(p_udf_root);
|
||||
udf_dirent_free(p_udf_file);
|
||||
iso9660_close(p_iso);
|
||||
udf_close(p_udf);
|
||||
if (ret == 0)
|
||||
safe_free(*buf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint32_t GetInstallWimVersion(const char* iso)
|
||||
{
|
||||
char *wim_path = NULL, buf[UDF_BLOCKSIZE] = { 0 };
|
||||
|
@ -1584,7 +1725,7 @@ int iso9660_readfat(intptr_t pp, void *buf, size_t secsize, libfat_sector_t sec)
|
|||
if (iso9660_iso_seek_read(p_private->p_iso, p_private->buf,
|
||||
p_private->lsn + (lsn_t)((p_private->sec_start * secsize) / ISO_BLOCKSIZE), ISO_NB_BLOCKS)
|
||||
!= ISO_NB_BLOCKS * ISO_BLOCKSIZE) {
|
||||
uprintf("Error reading ISO-9660 file %s at LSN %lu\n", img_report.efi_img_path,
|
||||
uprintf("Error reading ISO-9660 file %s at LSN %lu", img_report.efi_img_path,
|
||||
(long unsigned int)(p_private->lsn + (p_private->sec_start * secsize) / ISO_BLOCKSIZE));
|
||||
return 0;
|
||||
}
|
||||
|
@ -1618,7 +1759,7 @@ BOOL HasEfiImgBootLoaders(void)
|
|||
}
|
||||
p_statbuf = iso9660_ifs_stat_translate(p_iso, img_report.efi_img_path);
|
||||
if (p_statbuf == NULL) {
|
||||
uprintf("Could not get ISO-9660 file information for file %s\n", img_report.efi_img_path);
|
||||
uprintf("Could not get ISO-9660 file information for file %s", img_report.efi_img_path);
|
||||
goto out;
|
||||
}
|
||||
p_private = malloc(sizeof(iso9660_readfat_private));
|
||||
|
@ -1629,7 +1770,7 @@ BOOL HasEfiImgBootLoaders(void)
|
|||
p_private->sec_start = 0;
|
||||
// Populate our initial buffer
|
||||
if (iso9660_iso_seek_read(p_private->p_iso, p_private->buf, p_private->lsn, ISO_NB_BLOCKS) != ISO_NB_BLOCKS * ISO_BLOCKSIZE) {
|
||||
uprintf("Error reading ISO-9660 file %s at LSN %lu\n", img_report.efi_img_path, (long unsigned int)p_private->lsn);
|
||||
uprintf("Error reading ISO-9660 file %s at LSN %lu", img_report.efi_img_path, (long unsigned int)p_private->lsn);
|
||||
goto out;
|
||||
}
|
||||
lf_fs = libfat_open(iso9660_readfat, (intptr_t)p_private);
|
||||
|
@ -1706,7 +1847,7 @@ BOOL DumpFatDir(const char* path, int32_t cluster)
|
|||
}
|
||||
p_statbuf = iso9660_ifs_stat_translate(p_iso, img_report.efi_img_path);
|
||||
if (p_statbuf == NULL) {
|
||||
uprintf("Could not get ISO-9660 file information for file %s\n", img_report.efi_img_path);
|
||||
uprintf("Could not get ISO-9660 file information for file %s", img_report.efi_img_path);
|
||||
goto out;
|
||||
}
|
||||
p_private = malloc(sizeof(iso9660_readfat_private));
|
||||
|
@ -1717,7 +1858,7 @@ BOOL DumpFatDir(const char* path, int32_t cluster)
|
|||
p_private->sec_start = 0;
|
||||
// Populate our initial buffer
|
||||
if (iso9660_iso_seek_read(p_private->p_iso, p_private->buf, p_private->lsn, ISO_NB_BLOCKS) != ISO_NB_BLOCKS * ISO_BLOCKSIZE) {
|
||||
uprintf("Error reading ISO-9660 file %s at LSN %lu\n", img_report.efi_img_path, (long unsigned int)p_private->lsn);
|
||||
uprintf("Error reading ISO-9660 file %s at LSN %lu", img_report.efi_img_path, (long unsigned int)p_private->lsn);
|
||||
goto out;
|
||||
}
|
||||
lf_fs = libfat_open(iso9660_readfat, (intptr_t)p_private);
|
||||
|
@ -1742,7 +1883,7 @@ BOOL DumpFatDir(const char* path, int32_t cluster)
|
|||
if (diritem.attributes & 0x10) {
|
||||
// Directory => Create directory
|
||||
if (!CreateDirectoryU(target, 0) && (GetLastError() != ERROR_ALREADY_EXISTS)) {
|
||||
uprintf("Could not create directory '%s': %s\n", target, WindowsErrorString());
|
||||
uprintf("Could not create directory '%s': %s", target, WindowsErrorString());
|
||||
continue;
|
||||
}
|
||||
if (!DumpFatDir(target, dirpos.cluster))
|
||||
|
@ -1766,8 +1907,8 @@ BOOL DumpFatDir(const char* path, int32_t cluster)
|
|||
while ((s != 0) && (s < 0xFFFFFFFFULL) && (written < diritem.size)) {
|
||||
buf = libfat_get_sector(lf_fs, s);
|
||||
if (buf == NULL)
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_SECTOR_NOT_FOUND;
|
||||
if (IS_ERROR(FormatStatus))
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_SECTOR_NOT_FOUND);
|
||||
if (IS_ERROR(ErrorStatus))
|
||||
goto out;
|
||||
size = MIN(LIBFAT_SECTOR_SIZE, diritem.size - written);
|
||||
if (!WriteFileWithRetry(handle, buf, size, &size, WRITE_RETRIES) ||
|
||||
|
@ -1826,7 +1967,7 @@ static DWORD WINAPI IsoSaveImageThread(void* param)
|
|||
hPhysicalDrive = CreateFileA(img_save->DevicePath, GENERIC_READ, FILE_SHARE_READ,
|
||||
NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
|
||||
if (hPhysicalDrive == INVALID_HANDLE_VALUE) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_OPEN_FAILED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_OPEN_FAILED);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -1838,13 +1979,13 @@ static DWORD WINAPI IsoSaveImageThread(void* param)
|
|||
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
if (hDestImage == INVALID_HANDLE_VALUE) {
|
||||
uprintf("Could not open image '%s': %s", img_save->ImagePath, WindowsErrorString());
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_OPEN_FAILED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_OPEN_FAILED);
|
||||
goto out;
|
||||
}
|
||||
|
||||
buffer = (uint8_t*)_mm_malloc(img_save->BufSize, 16);
|
||||
if (buffer == NULL) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_NOT_ENOUGH_MEMORY;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_NOT_ENOUGH_MEMORY);
|
||||
uprintf("Could not allocate buffer");
|
||||
goto out;
|
||||
}
|
||||
|
@ -1864,7 +2005,7 @@ static DWORD WINAPI IsoSaveImageThread(void* param)
|
|||
s = ReadFile(hPhysicalDrive, buffer,
|
||||
(DWORD)MIN(img_save->BufSize, img_save->DeviceSize - wb), &rSize, NULL);
|
||||
if (!s) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_READ_FAULT;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_READ_FAULT);
|
||||
uprintf("Read error: %s", WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
|
@ -1889,7 +2030,7 @@ static DWORD WINAPI IsoSaveImageThread(void* param)
|
|||
goto out;
|
||||
}
|
||||
} else {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_WRITE_FAULT;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_WRITE_FAULT);
|
||||
goto out;
|
||||
}
|
||||
Sleep(200);
|
||||
|
@ -1900,7 +2041,7 @@ static DWORD WINAPI IsoSaveImageThread(void* param)
|
|||
if (wb != img_save->DeviceSize) {
|
||||
uprintf("Error: wrote %s, expected %s", SizeToHumanReadable(wb, FALSE, FALSE),
|
||||
SizeToHumanReadable(img_save->DeviceSize, FALSE, FALSE));
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_WRITE_FAULT;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_WRITE_FAULT);
|
||||
goto out;
|
||||
}
|
||||
uprintf("Operation complete (Wrote %s).", SizeToHumanReadable(wb, FALSE, FALSE));
|
||||
|
@ -1941,7 +2082,7 @@ void IsoSaveImage(void)
|
|||
|
||||
uprintf("ISO media size %s", SizeToHumanReadable(img_save.DeviceSize, FALSE, FALSE));
|
||||
SendMessage(hMainDialog, UM_PROGRESS_INIT, 0, 0);
|
||||
FormatStatus = 0;
|
||||
ErrorStatus = 0;
|
||||
// Disable all controls except cancel
|
||||
EnableControls(FALSE, FALSE);
|
||||
InitProgress(TRUE);
|
||||
|
@ -1952,7 +2093,7 @@ void IsoSaveImage(void)
|
|||
SendMessage(hMainDialog, UM_TIMER_START, 0, 0);
|
||||
} else {
|
||||
uprintf("Unable to start ISO save thread");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_START_THREAD);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_START_THREAD));
|
||||
safe_free(img_save.ImagePath);
|
||||
PostMessage(hMainDialog, UM_FORMAT_COMPLETED, (WPARAM)FALSE, 0);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 2003-2008, 2012-2013, 2017
|
||||
Copyright (C) 2003-2008, 2012-2013, 2017, 2023-2024
|
||||
Rocky Bernstein <rocky@gnu.org>
|
||||
Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org>
|
||||
|
||||
|
@ -27,7 +27,7 @@
|
|||
* filesystem library; applications include this.
|
||||
*
|
||||
* See also the ISO-9660 specification. The freely available European
|
||||
* equivalant standard is called ECMA-119.
|
||||
* equivalent standard is called ECMA-119.
|
||||
*/
|
||||
|
||||
|
||||
|
@ -78,7 +78,7 @@ typedef char dchar_t; /*! See section 7.4.1 */
|
|||
program; things are done this way so that in a debugger one can to
|
||||
refer to the enumeration value names such as in a debugger
|
||||
expression and get something. With the more common a \#define
|
||||
mechanism, the name/value assocation is lost at run time.
|
||||
mechanism, the name/value association is lost at run time.
|
||||
*/
|
||||
extern enum iso_enum1_s {
|
||||
ISO_PVD_SECTOR = 16, /**< Sector of Primary Volume Descriptor. */
|
||||
|
@ -93,8 +93,9 @@ extern enum iso_enum1_s {
|
|||
preparer id. */
|
||||
MAX_ISOPATHNAME = 255, /**< Maximum number of characters in the
|
||||
entire ISO 9660 filename. */
|
||||
ISO_BLOCKSIZE = 2048 /**< Number of bytes in an ISO 9660 block. */
|
||||
|
||||
ISO_BLOCKSIZE = 2048, /**< Number of bytes in an ISO 9660 block. */
|
||||
VIRTUAL_SECTORSIZE = 512 /**< Number of bytes in an El Torito virtual
|
||||
image sector */
|
||||
} iso_enums1;
|
||||
|
||||
/*! An enumeration for some of the ISO_* \#defines below. This isn't
|
||||
|
@ -396,7 +397,7 @@ typedef struct iso9660_pvd_s iso9660_pvd_t;
|
|||
/*!
|
||||
\brief ISO-9660 Supplementary Volume Descriptor.
|
||||
|
||||
This is used for Joliet Extentions and is almost the same as the
|
||||
This is used for Joliet Extensions and is almost the same as the
|
||||
the primary descriptor but two unused fields, "unused1" and "unused3
|
||||
become "flags and "escape_sequences" respectively.
|
||||
*/
|
||||
|
@ -531,7 +532,7 @@ struct iso9660_br_s {
|
|||
uint16_t load_seg; /**< Load segment for x86 */
|
||||
uint8_t system_type; /**< System type - 0 for x86 */
|
||||
uint8_t unused1;
|
||||
uint16_t num_sectors; /**< Sector count of the image */
|
||||
uint16_t num_sectors; /**< Virtual sectors count of the image */
|
||||
uint32_t image_lsn; /**< Start address of the image */
|
||||
uint8_t unused2[20];
|
||||
} GNUC_PACKED;
|
||||
|
@ -582,7 +583,7 @@ struct iso9660_stat_s { /* big endian!! */
|
|||
/* Multi-extent aware size, in bytes.
|
||||
|
||||
It is guaranteed that the bytes are stored as gapless string in a
|
||||
continguous sequence of blocks. I.e. they can be read sequentially
|
||||
contiguous sequence of blocks. I.e. they can be read sequentially
|
||||
starting at iso9660_stat_s.lsn.
|
||||
Data files which do not fulfil this promise cause a warning message
|
||||
and are not represented by this type of struct.
|
||||
|
@ -671,7 +672,7 @@ typedef struct _iso9660_s iso9660_t;
|
|||
contained in a file format that libiso9660 doesn't know natively
|
||||
(or knows imperfectly.)
|
||||
|
||||
Some tolerence allowed for positioning the ISO 9660 image. We scan
|
||||
Some tolerance allowed for positioning the ISO 9660 image. We scan
|
||||
for STANDARD_ID and use that to set the eventual offset to adjust
|
||||
by (as long as that is <= i_fuzz).
|
||||
|
||||
|
@ -683,7 +684,7 @@ typedef struct _iso9660_s iso9660_t;
|
|||
uint16_t i_fuzz);
|
||||
|
||||
/*!
|
||||
Open an ISO 9660 image for reading with some tolerence for positioning
|
||||
Open an ISO 9660 image for reading with some tolerance for positioning
|
||||
of the ISO9660 image. We scan for ISO_STANDARD_ID and use that to set
|
||||
the eventual offset to adjust by (as long as that is <= i_fuzz).
|
||||
|
||||
|
@ -799,7 +800,7 @@ typedef struct _iso9660_s iso9660_t;
|
|||
tm will reported in GMT.
|
||||
*/
|
||||
bool iso9660_get_dtime (const iso9660_dtime_t *idr_date, bool b_localtime,
|
||||
/*out*/ struct tm *tm);
|
||||
/*out*/ struct tm *p_tm);
|
||||
|
||||
|
||||
/*!
|
||||
|
@ -890,7 +891,7 @@ typedef struct _iso9660_s iso9660_t;
|
|||
|
||||
/*!
|
||||
Take psz_path and a version number and turn that into a ISO-9660
|
||||
pathname. (That's just the pathname followd by ";" and the version
|
||||
pathname. (That's just the pathname followed by ";" and the version
|
||||
number. For example, mydir/file.ext -> MYDIR/FILE.EXT;1 for version
|
||||
1. The resulting ISO-9660 pathname is returned.
|
||||
*/
|
||||
|
@ -1235,7 +1236,7 @@ lsn_t iso9660_get_dir_extent(const iso9660_dir_t *p_idr);
|
|||
|
||||
@param p_iso the ISO-9660 file image to get data from
|
||||
|
||||
@param u_file_limit the maximimum number of (non-rock-ridge) files
|
||||
@param u_file_limit the maximum number of (non-rock-ridge) files
|
||||
to consider before giving up and returning "dunno".
|
||||
|
||||
"dunno" can also be returned if there was some error encountered
|
||||
|
@ -1311,7 +1312,7 @@ lsn_t iso9660_get_dir_extent(const iso9660_dir_t *p_idr);
|
|||
void iso9660_set_evd (void *pd);
|
||||
|
||||
/*!
|
||||
Return true if ISO 9660 image has extended attrributes (XA).
|
||||
Return true if ISO 9660 image has extended attributes (XA).
|
||||
*/
|
||||
bool iso9660_ifs_is_xa (const iso9660_t * p_iso);
|
||||
|
||||
|
|
|
@ -105,6 +105,12 @@ _cdio_memdup (const void *mem, size_t count);
|
|||
char *
|
||||
_cdio_strdup_upper (const char str[]);
|
||||
|
||||
int
|
||||
_cdio_stricmp(const char str1[], const char str2[]);
|
||||
|
||||
int
|
||||
_cdio_strnicmp(const char str1[], const char str2[], size_t count);
|
||||
|
||||
/*! Duplicate path and make it platform compliant. Typically needed for
|
||||
MinGW/MSYS where a "/c/..." path must be translated to "c:/..." for
|
||||
use with fopen(), etc. Returned string must be freed by the caller
|
||||
|
|
|
@ -142,6 +142,35 @@ _cdio_strdup_upper (const char str[])
|
|||
return new_str;
|
||||
}
|
||||
|
||||
int
|
||||
_cdio_stricmp (const char str1[], const char str2[])
|
||||
{
|
||||
if (str1 && str2) {
|
||||
int c1, c2;
|
||||
do {
|
||||
c1 = tolower((unsigned char)*str1++);
|
||||
c2 = tolower((unsigned char)*str2++);
|
||||
} while (c1 == c2 && c1 != '\0');
|
||||
return c1 - c2;
|
||||
} else return (str1 != str2);
|
||||
}
|
||||
|
||||
int
|
||||
_cdio_strnicmp(const char str1[], const char str2[], size_t count)
|
||||
{
|
||||
if (str1 && str2) {
|
||||
int c1 = 0, c2 = 0;
|
||||
size_t i;
|
||||
for (i = 0; i < count; i++) {
|
||||
c1 = tolower((unsigned char)*str1++);
|
||||
c2 = tolower((unsigned char)*str2++);
|
||||
if (c1 != c2 || c1 == '\0')
|
||||
break;
|
||||
}
|
||||
return c1 - c2;
|
||||
} else return (str1 != str2);
|
||||
}
|
||||
|
||||
/* Convert MinGW/MSYS paths that start in "/c/..." to "c:/..."
|
||||
so that they can be used with fopen(), stat(), etc.
|
||||
Returned string must be freed by the caller using cdio_free().*/
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
Copyright (C) 2003-2008, 2011-2015, 2017 Rocky Bernstein <rocky@gnu.org>
|
||||
Copyright (C) 2018, 2020 Pete Batard <pete@akeo.ie>
|
||||
Copyright (C) 2003-2008, 2011-2015, 2017, 2024
|
||||
Rocky Bernstein <rocky@gnu.org>
|
||||
Copyright (C) 2018, 2020, 2024 Pete Batard <pete@akeo.ie>
|
||||
Copyright (C) 2018 Thomas Schmitt <scdbackup@gmx.net>
|
||||
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
||||
|
||||
|
@ -59,6 +60,7 @@
|
|||
#include "_cdio_stdio.h"
|
||||
#include "cdio_private.h"
|
||||
|
||||
/* Maximum number of El-Torito boot images we keep an index for */
|
||||
#define MAX_BOOT_IMAGES 8
|
||||
|
||||
/** Implementation of iso9660_t type */
|
||||
|
@ -87,7 +89,8 @@ struct _iso9660_s {
|
|||
*/
|
||||
struct {
|
||||
uint32_t lsn; /**< Start LSN of an El-Torito bootable image */
|
||||
uint32_t num_sectors; /**< Number of sectors of a bootable image */
|
||||
uint32_t num_sectors; /**< Number of virtual sectors occupied by the
|
||||
bootable image */
|
||||
} boot_img[MAX_BOOT_IMAGES];
|
||||
int i_fuzzy_offset; /**< Adjustment in bytes to make ISO_STANDARD_ID
|
||||
("CD001") come out as ISO_PVD_SECTOR
|
||||
|
@ -527,15 +530,41 @@ iso9660_ifs_read_superblock (iso9660_t *p_iso,
|
|||
/* Check for an El-Torito boot volume descriptor */
|
||||
if (ISO_VD_BOOT_RECORD == from_711(p_svd.type) &&
|
||||
(memcmp(p_brvd->system_id, EL_TORITO_ID, ISO_MAX_SYSTEM_ID) == 0)) {
|
||||
/* Perform very basic parsing of boot entries to fill an image table */
|
||||
/* Perform basic parsing of boot entries to fill an image table */
|
||||
iso9660_br_t br[ISO_BLOCKSIZE / sizeof(iso9660_br_t)];
|
||||
if (iso9660_iso_seek_read(p_iso, &br, p_brvd->boot_catalog_sector, 1) == ISO_BLOCKSIZE) {
|
||||
if (iso9660_iso_seek_read(p_iso, &br, p_brvd->boot_catalog_sector, 1) ==
|
||||
ISO_BLOCKSIZE) {
|
||||
for (j = 0, k = 0;
|
||||
j < (ISO_BLOCKSIZE / sizeof(iso9660_br_t)) && k < MAX_BOOT_IMAGES;
|
||||
j++) {
|
||||
if (br[j].boot_id == 0x88 && br[j].media_type == 0) {
|
||||
p_iso->boot_img[k].lsn = br[j].image_lsn;
|
||||
p_iso->boot_img[k++].num_sectors = br[j].num_sectors;
|
||||
p_iso->boot_img[k].lsn = uint32_from_le(br[j].image_lsn);
|
||||
p_iso->boot_img[k++].num_sectors = uint16_from_le(br[j].num_sectors);
|
||||
}
|
||||
}
|
||||
/* Special case for non specs-compliant images that do follow the UEFI */
|
||||
/* specs and that use size 0 or 1 for images larger than 0xffff virtual */
|
||||
/* sectors, in which case the image runs to the end of the volume (per */
|
||||
/* UEFI specs) or to the next LSN (as seen with some software). */
|
||||
cdio_assert(ISO_BLOCKSIZE / VIRTUAL_SECTORSIZE == 4);
|
||||
for (j = 0; j < MAX_BOOT_IMAGES; j++) {
|
||||
uint32_t next_lsn = from_733(p_iso->pvd.volume_space_size);
|
||||
if (p_iso->boot_img[j].lsn == 0)
|
||||
continue;
|
||||
/* Find the closest LSN after the one from this image */
|
||||
cdio_assert(p_iso->boot_img[j].lsn <= next_lsn);
|
||||
for (k = 0; k < MAX_BOOT_IMAGES; k++) {
|
||||
if (p_iso->boot_img[k].lsn > p_iso->boot_img[j].lsn &&
|
||||
p_iso->boot_img[k].lsn < next_lsn)
|
||||
next_lsn = p_iso->boot_img[k].lsn;
|
||||
}
|
||||
/* If the image has a sector size of 0 or 1 and theres' more than */
|
||||
/* 0xffff sectors to the next LSN, assume it needs expansion. */
|
||||
if (p_iso->boot_img[j].num_sectors <= 1 &&
|
||||
(next_lsn - p_iso->boot_img[j].lsn) >= 0x4000) {
|
||||
p_iso->boot_img[j].num_sectors =
|
||||
(next_lsn - p_iso->boot_img[j].lsn) * 4;
|
||||
cdio_warn("Auto-expanding the size of %d-Boot-NoEmul.img", j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -823,7 +852,7 @@ _iso9660_is_rock_ridge_enabled(void* p_image)
|
|||
/*!
|
||||
Convert a directory record name to a 0-terminated string.
|
||||
One of parameters alloc_result and cpy_result should be non-NULL to take
|
||||
the result.
|
||||
the result.
|
||||
*/
|
||||
static bool
|
||||
_iso9660_recname_to_cstring(const char *src, size_t src_len,
|
||||
|
@ -836,8 +865,11 @@ _iso9660_recname_to_cstring(const char *src, size_t src_len,
|
|||
cdio_utf8_t *p_psz_out = NULL;
|
||||
|
||||
if (cdio_charset_to_utf8(src, i_inlen, &p_psz_out, "UCS-2BE")) {
|
||||
if (cpy_result != NULL)
|
||||
strcpy(cpy_result, p_psz_out);
|
||||
if (cpy_result != NULL) {
|
||||
strncpy(cpy_result, p_psz_out, i_inlen);
|
||||
if (strlen(p_psz_out) > i_inlen)
|
||||
cdio_warn("file name '%s' will be truncated", p_psz_out);
|
||||
}
|
||||
if (alloc_result != NULL)
|
||||
*alloc_result = p_psz_out;
|
||||
else
|
||||
|
@ -1261,7 +1293,7 @@ _fs_iso_stat_traverse (iso9660_t *p_iso, const iso9660_stat_t *_root,
|
|||
{
|
||||
unsigned offset = 0;
|
||||
uint8_t *_dirbuf = NULL;
|
||||
uint32_t blocks;
|
||||
uint32_t blocks;
|
||||
int ret, cmp;
|
||||
iso9660_stat_t *p_stat = NULL;
|
||||
iso9660_dir_t *p_iso9660_dir = NULL;
|
||||
|
@ -1466,26 +1498,32 @@ iso9660_fs_stat_translate (CdIo_t *p_cdio, const char psz_path[])
|
|||
iso9660_stat_t *
|
||||
iso9660_ifs_stat_translate (iso9660_t *p_iso, const char psz_path[])
|
||||
{
|
||||
/* Special case for virtual El-Torito boot images ('[BOOT]/#.img') */
|
||||
if (psz_path && (strncmp(psz_path, "[BOOT]/", 7) == 0)) {
|
||||
int index = psz_path[7] - '0';
|
||||
iso9660_stat_t* p_stat;
|
||||
if (strlen(psz_path) < 8)
|
||||
return NULL;
|
||||
if ((psz_path[7] < '0') || (psz_path[7] > '0' + MAX_BOOT_IMAGES - 1))
|
||||
return NULL;
|
||||
if (p_iso->boot_img[index].lsn == 0 || p_iso->boot_img[index].num_sectors == 0)
|
||||
return NULL;
|
||||
p_stat = calloc(1, sizeof(iso9660_stat_t) + strlen(psz_path));
|
||||
if (!p_stat) {
|
||||
cdio_warn("Couldn't calloc(1, %d)", (int)sizeof(iso9660_stat_t));
|
||||
return NULL;
|
||||
/* Special case for virtual El-Torito boot images ('/[BOOT]/#-Boot-NoEmul.img') */
|
||||
if (psz_path && p_iso && p_iso->boot_img[0].lsn != 0) {
|
||||
/* Work on a path without leading slash */
|
||||
const char* path = (psz_path[0] == '/') ? &psz_path[1] : psz_path;
|
||||
if ((_cdio_strnicmp(path, "[BOOT]/", 7) == 0) &&
|
||||
(_cdio_stricmp(&path[8], "-Boot-NoEmul.img") == 0)) {
|
||||
int index = path[7] - '0';
|
||||
iso9660_stat_t* p_stat;
|
||||
if (strlen(path) < 24)
|
||||
return NULL;
|
||||
cdio_assert(MAX_BOOT_IMAGES <= 10);
|
||||
if ((path[7] < '0') || (path[7] > '0' + MAX_BOOT_IMAGES - 1))
|
||||
return NULL;
|
||||
if (p_iso->boot_img[index].lsn == 0 || p_iso->boot_img[index].num_sectors == 0)
|
||||
return NULL;
|
||||
p_stat = calloc(1, sizeof(iso9660_stat_t) + strlen(path));
|
||||
if (!p_stat) {
|
||||
cdio_warn("Couldn't calloc(1, %d)", (int)sizeof(iso9660_stat_t));
|
||||
return NULL;
|
||||
}
|
||||
p_stat->lsn = p_iso->boot_img[index].lsn;
|
||||
p_stat->total_size = p_iso->boot_img[index].num_sectors * VIRTUAL_SECTORSIZE;
|
||||
p_stat->type = _STAT_FILE;
|
||||
strcpy(p_stat->filename, path);
|
||||
return p_stat;
|
||||
}
|
||||
p_stat->lsn = p_iso->boot_img[index].lsn;
|
||||
p_stat->total_size = p_iso->boot_img[index].num_sectors * ISO_BLOCKSIZE;
|
||||
p_stat->type = _STAT_FILE;
|
||||
strcpy(p_stat->filename, psz_path);
|
||||
return p_stat;
|
||||
}
|
||||
|
||||
return fs_stat_translate(p_iso, (stat_root_t *) _ifs_stat_root,
|
||||
|
@ -1623,6 +1661,7 @@ iso9660_fs_readdir (CdIo_t *p_cdio, const char psz_path[])
|
|||
CdioISO9660FileList_t *
|
||||
iso9660_ifs_readdir (iso9660_t *p_iso, const char psz_path[])
|
||||
{
|
||||
int i;
|
||||
iso9660_dir_t *p_iso9660_dir;
|
||||
iso9660_stat_t *p_iso9660_stat = NULL;
|
||||
iso9660_stat_t *p_stat;
|
||||
|
@ -1630,6 +1669,30 @@ iso9660_ifs_readdir (iso9660_t *p_iso, const char psz_path[])
|
|||
if (!p_iso) return NULL;
|
||||
if (!psz_path) return NULL;
|
||||
|
||||
/* List the virtual El-Torito images */
|
||||
if (p_iso->boot_img[0].lsn != 0) {
|
||||
const char* path = (psz_path[0] == '/') ? &psz_path[1] : psz_path;
|
||||
if (_cdio_strnicmp(path, "[BOOT]", 6) == 0 && (path[6] == '\0' || path[6] == '/')) {
|
||||
CdioList_t* retval = _cdio_list_new();
|
||||
for (i = 0; i < MAX_BOOT_IMAGES && p_iso->boot_img[i].lsn != 0; i++) {
|
||||
p_iso9660_stat = calloc(1, sizeof(iso9660_stat_t) + 18);
|
||||
if (!p_iso9660_stat) {
|
||||
cdio_warn("Couldn't calloc(1, %d)", (int)sizeof(iso9660_stat_t) + 18);
|
||||
break;
|
||||
}
|
||||
strcpy(p_iso9660_stat->filename, "#-Boot-NoEmul.img");
|
||||
p_iso9660_stat->filename[0] = '0' + i;
|
||||
p_iso9660_stat->type = _STAT_FILE;
|
||||
p_iso9660_stat->lsn = p_iso->boot_img[i].lsn;
|
||||
p_iso9660_stat->total_size = p_iso->boot_img[i].num_sectors * VIRTUAL_SECTORSIZE;
|
||||
iso9660_get_ltime(&p_iso->pvd.creation_date, &p_iso9660_stat->tm);
|
||||
_cdio_list_append(retval, p_iso9660_stat);
|
||||
p_iso9660_stat = NULL;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
||||
p_stat = iso9660_ifs_stat (p_iso, psz_path);
|
||||
if (!p_stat) return NULL;
|
||||
|
||||
|
@ -1647,6 +1710,21 @@ iso9660_ifs_readdir (iso9660_t *p_iso, const char psz_path[])
|
|||
const size_t dirbuf_len = blocks * ISO_BLOCKSIZE;
|
||||
bool skip_following_extents = false;
|
||||
|
||||
/* Add the virtual El-Torito "[BOOT]" directory to root */
|
||||
if (p_iso->boot_img[0].lsn != 0) {
|
||||
if (psz_path[0] == '\0' || (psz_path[0] == '/' && psz_path[1] == '\0')) {
|
||||
p_iso9660_stat = calloc(1, sizeof(iso9660_stat_t) + 7);
|
||||
if (p_iso9660_stat) {
|
||||
strcpy(p_iso9660_stat->filename, "[BOOT]");
|
||||
p_iso9660_stat->type = _STAT_DIR;
|
||||
p_iso9660_stat->lsn = ISO_PVD_SECTOR + 1;
|
||||
iso9660_get_ltime(&p_iso->pvd.creation_date, &p_iso9660_stat->tm);
|
||||
_cdio_list_append(retval, p_iso9660_stat);
|
||||
p_iso9660_stat = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!dirbuf_len)
|
||||
{
|
||||
cdio_warn("Invalid directory buffer sector size %u", blocks);
|
||||
|
|
|
@ -73,7 +73,7 @@ const char* additional_copyrights =
|
|||
"https://svn.reactos.org/reactos/trunk\\line\n"
|
||||
"GNU General Public License (GPL) v2 or later\\line\n"
|
||||
"\\line\n"
|
||||
"Bad blocks testing and ext2/ext3 formatting from e2fsprogs by Theodore T'so et al.:\\line\n"
|
||||
"Bad blocks testing and ext2/ext3 formatting from e2fsprogs by Theodore Ts'o et al.:\\line\n"
|
||||
"http://e2fsprogs.sourceforge.net/\\line\n"
|
||||
"GNU General Public License (GPL) v3 compatible\\line\n"
|
||||
"\\line\n"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Localization tables - autogenerated from resource.h
|
||||
* Copyright © 2013-2021 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2013-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -52,11 +52,10 @@ const loc_control_id control_id[] = {
|
|||
LOC_CTRL(IDC_TEST),
|
||||
LOC_CTRL(IDC_SELECT),
|
||||
LOC_CTRL(IDC_EXTENDED_LABEL),
|
||||
LOC_CTRL(IDC_RUFUS_MBR),
|
||||
LOC_CTRL(IDC_UEFI_MEDIA_VALIDATION),
|
||||
LOC_CTRL(IDC_TARGET_SYSTEM),
|
||||
LOC_CTRL(IDC_PERSISTENCE_SIZE),
|
||||
LOC_CTRL(IDC_PERSISTENCE_UNITS),
|
||||
LOC_CTRL(IDC_DISK_ID),
|
||||
LOC_CTRL(IDC_OLD_BIOS_FIXES),
|
||||
LOC_CTRL(IDC_LIST_USB_HDD),
|
||||
LOC_CTRL(IDC_STATUS_TOOLBAR),
|
||||
|
@ -510,6 +509,55 @@ const loc_control_id control_id[] = {
|
|||
LOC_CTRL(MSG_348),
|
||||
LOC_CTRL(MSG_349),
|
||||
LOC_CTRL(MSG_350),
|
||||
LOC_CTRL(MSG_351),
|
||||
LOC_CTRL(MSG_352),
|
||||
LOC_CTRL(MSG_353),
|
||||
LOC_CTRL(MSG_354),
|
||||
LOC_CTRL(MSG_355),
|
||||
LOC_CTRL(MSG_356),
|
||||
LOC_CTRL(MSG_357),
|
||||
LOC_CTRL(MSG_358),
|
||||
LOC_CTRL(MSG_359),
|
||||
LOC_CTRL(MSG_360),
|
||||
LOC_CTRL(MSG_361),
|
||||
LOC_CTRL(MSG_362),
|
||||
LOC_CTRL(MSG_363),
|
||||
LOC_CTRL(MSG_364),
|
||||
LOC_CTRL(MSG_365),
|
||||
LOC_CTRL(MSG_366),
|
||||
LOC_CTRL(MSG_367),
|
||||
LOC_CTRL(MSG_368),
|
||||
LOC_CTRL(MSG_369),
|
||||
LOC_CTRL(MSG_370),
|
||||
LOC_CTRL(MSG_371),
|
||||
LOC_CTRL(MSG_372),
|
||||
LOC_CTRL(MSG_373),
|
||||
LOC_CTRL(MSG_374),
|
||||
LOC_CTRL(MSG_375),
|
||||
LOC_CTRL(MSG_376),
|
||||
LOC_CTRL(MSG_377),
|
||||
LOC_CTRL(MSG_378),
|
||||
LOC_CTRL(MSG_379),
|
||||
LOC_CTRL(MSG_380),
|
||||
LOC_CTRL(MSG_381),
|
||||
LOC_CTRL(MSG_382),
|
||||
LOC_CTRL(MSG_383),
|
||||
LOC_CTRL(MSG_384),
|
||||
LOC_CTRL(MSG_385),
|
||||
LOC_CTRL(MSG_386),
|
||||
LOC_CTRL(MSG_387),
|
||||
LOC_CTRL(MSG_388),
|
||||
LOC_CTRL(MSG_389),
|
||||
LOC_CTRL(MSG_390),
|
||||
LOC_CTRL(MSG_391),
|
||||
LOC_CTRL(MSG_392),
|
||||
LOC_CTRL(MSG_393),
|
||||
LOC_CTRL(MSG_394),
|
||||
LOC_CTRL(MSG_395),
|
||||
LOC_CTRL(MSG_396),
|
||||
LOC_CTRL(MSG_397),
|
||||
LOC_CTRL(MSG_398),
|
||||
LOC_CTRL(MSG_399),
|
||||
LOC_CTRL(MSG_MAX),
|
||||
LOC_CTRL(IDOK),
|
||||
LOC_CTRL(IDCANCEL),
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Constants and defines missing from various toolchains
|
||||
* Copyright © 2016-2022 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2016-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -21,22 +21,19 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
/* Convenient to have around */
|
||||
#define KB 1024LL
|
||||
#define MB 1048576LL
|
||||
#define GB 1073741824LL
|
||||
#define TB 1099511627776LL
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
#if defined(__GNUC__)
|
||||
#define ALIGNED(m) __attribute__ ((__aligned__(m)))
|
||||
#elif defined(_MSC_VER)
|
||||
#define ALIGNED(m) __declspec(align(m))
|
||||
#ifndef MAX
|
||||
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
#define LO_ALIGN_X_TO_Y(x, y) (((x) / (y)) * (y))
|
||||
#define HI_ALIGN_X_TO_Y(x, y) ((((x) + (y) - 1) / (y)) * (y))
|
||||
|
||||
#define IS_HEXASCII(c) (((c) >= '0' && (c) <= '9') || ((c) >= 'A' && (c) <= 'F') || ((c) >= 'a' && (c) <= 'f'))
|
||||
|
||||
/*
|
||||
* Prefetch 64 bytes at address m, for read-only operation
|
||||
* We account for these built-in calls doing nothing if the
|
||||
|
|
|
@ -50,7 +50,7 @@ int64_t write_sectors(HANDLE hDrive, uint64_t SectorSize,
|
|||
LastWriteError = 0;
|
||||
if(!WriteFileWithRetry(hDrive, pBuf, Size, &Size, WRITE_RETRIES))
|
||||
{
|
||||
LastWriteError = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|GetLastError();
|
||||
LastWriteError = RUFUS_ERROR(GetLastError());
|
||||
uprintf("write_sectors: Write error %s\n", WindowsErrorString());
|
||||
uprintf(" StartSector: 0x%08" PRIx64 ", nSectors: 0x%" PRIx64 ", SectorSize: 0x%" PRIx64 "\n", StartSector, nSectors, SectorSize);
|
||||
return -1;
|
||||
|
@ -63,7 +63,7 @@ int64_t write_sectors(HANDLE hDrive, uint64_t SectorSize,
|
|||
return 0;
|
||||
}
|
||||
uprintf("write_sectors: Write error\n");
|
||||
LastWriteError = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT;
|
||||
LastWriteError = RUFUS_ERROR(ERROR_WRITE_FAULT);
|
||||
uprintf(" Wrote: %d, Expected: %" PRIu64 "\n", Size, nSectors*SectorSize);
|
||||
uprintf(" StartSector: 0x%08" PRIx64 ", nSectors: 0x%" PRIx64 ", SectorSize: 0x%" PRIx64 "\n", StartSector, nSectors, SectorSize);
|
||||
return -1;
|
||||
|
|
|
@ -1146,6 +1146,13 @@ static __inline const char* _filenameU(const char* path)
|
|||
return path;
|
||||
}
|
||||
|
||||
static __inline uint64_t _filesizeU(const char* path)
|
||||
{
|
||||
struct __stat64 stat64 = { 0 };
|
||||
_stat64U(path, &stat64);
|
||||
return stat64.st_size;
|
||||
}
|
||||
|
||||
// returned UTF-8 string must be freed
|
||||
static __inline char* getenvU(const char* varname)
|
||||
{
|
||||
|
|
31
src/net.c
31
src/net.c
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Networking functionality (web file download, check for update, etc.)
|
||||
* Copyright © 2012-2023 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2012-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -204,7 +204,7 @@ uint64_t DownloadToFileOrBufferEx(const char* url, const char* file, const char*
|
|||
PF_INIT_OR_OUT(HttpSendRequestA, WinInet);
|
||||
PF_INIT_OR_OUT(HttpQueryInfoA, WinInet);
|
||||
|
||||
FormatStatus = 0;
|
||||
ErrorStatus = 0;
|
||||
DownloadStatus = 404;
|
||||
if (hProgressDialog != NULL)
|
||||
UpdateProgressWithInfoInit(hProgressDialog, FALSE);
|
||||
|
@ -258,7 +258,7 @@ uint64_t DownloadToFileOrBufferEx(const char* url, const char* file, const char*
|
|||
pfHttpQueryInfoA(hRequest, HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, (LPVOID)&DownloadStatus, &dwSize, NULL);
|
||||
if (DownloadStatus != 200) {
|
||||
error_code = ERROR_INTERNET_ITEM_NOT_FOUND;
|
||||
SetLastError(ERROR_SEVERITY_ERROR | FAC(FACILITY_HTTP) | error_code);
|
||||
SetLastError(RUFUS_ERROR(error_code));
|
||||
uprintf("%s: %d", (DownloadStatus == 404) ? "File not found" : "Unable to access file", DownloadStatus);
|
||||
goto out;
|
||||
}
|
||||
|
@ -300,7 +300,7 @@ uint64_t DownloadToFileOrBufferEx(const char* url, const char* file, const char*
|
|||
// Keep checking for data until there is nothing left.
|
||||
while (1) {
|
||||
// User may have cancelled the download
|
||||
if (IS_ERROR(FormatStatus))
|
||||
if (IS_ERROR(ErrorStatus))
|
||||
goto out;
|
||||
if (!pfInternetReadFile(hRequest, buf, sizeof(buf), &dwDownloaded) || (dwDownloaded == 0))
|
||||
break;
|
||||
|
@ -322,7 +322,7 @@ uint64_t DownloadToFileOrBufferEx(const char* url, const char* file, const char*
|
|||
|
||||
if (size != total_size) {
|
||||
uprintf("Could not download complete file - read: %lld bytes, expected: %lld bytes", size, total_size);
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_WRITE_FAULT);
|
||||
goto out;
|
||||
} else {
|
||||
DownloadStatus = 200;
|
||||
|
@ -383,7 +383,7 @@ DWORD DownloadSignedFile(const char* url, const char* file, HWND hProgressDialog
|
|||
if ((sig_len != RSA_SIGNATURE_SIZE) || (!ValidateOpensslSignature(buf, buf_len, sig, sig_len))) {
|
||||
uprintf("FATAL: Download signature is invalid ✗");
|
||||
DownloadStatus = 403; // Forbidden
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_BAD_SIGNATURE);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_BAD_SIGNATURE));
|
||||
SendMessage(GetDlgItem(hProgressDialog, IDC_PROGRESS), PBM_SETSTATE, (WPARAM)PBST_ERROR, 0);
|
||||
SetTaskbarProgressState(TASKBAR_ERROR);
|
||||
goto out;
|
||||
|
@ -413,7 +413,7 @@ out:
|
|||
if ((bPromptOnError) && (DownloadStatus != 200)) {
|
||||
PrintInfo(0, MSG_242);
|
||||
SetLastError(error_code);
|
||||
MessageBoxExU(hMainDialog, IS_ERROR(FormatStatus) ? StrError(FormatStatus, FALSE) : WindowsErrorString(),
|
||||
MessageBoxExU(hMainDialog, IS_ERROR(ErrorStatus) ? StrError(ErrorStatus, FALSE) : WindowsErrorString(),
|
||||
lmprintf(MSG_044), MB_OK | MB_ICONERROR | MB_IS_RTL, selected_langid);
|
||||
}
|
||||
safe_closehandle(hFile);
|
||||
|
@ -768,7 +768,7 @@ static DWORD WINAPI DownloadISOThread(LPVOID param)
|
|||
dwSize = (DWORD)DownloadToFileOrBuffer(sig_url, NULL, &sig, NULL, FALSE);
|
||||
if ((dwSize != RSA_SIGNATURE_SIZE) || (!ValidateOpensslSignature(compressed, dwCompressedSize, sig, dwSize))) {
|
||||
uprintf("FATAL: Download signature is invalid ✗");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_BAD_SIGNATURE);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_BAD_SIGNATURE));
|
||||
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_ERROR, 0);
|
||||
SetTaskbarProgressState(TASKBAR_ERROR);
|
||||
safe_free(compressed);
|
||||
|
@ -778,7 +778,7 @@ static DWORD WINAPI DownloadISOThread(LPVOID param)
|
|||
free(sig);
|
||||
uprintf("Download signature is valid ✓");
|
||||
uncompressed_size = *((uint64_t*)&compressed[5]);
|
||||
if ((uncompressed_size < 1 * MB) && (bled_init(0, uprintf, NULL, NULL, NULL, NULL, &FormatStatus) >= 0)) {
|
||||
if ((uncompressed_size < 1 * MB) && (bled_init(0, uprintf, NULL, NULL, NULL, NULL, &ErrorStatus) >= 0)) {
|
||||
fido_script = malloc((size_t)uncompressed_size);
|
||||
size = bled_uncompress_from_buffer_to_buffer(compressed, dwCompressedSize, fido_script, (size_t)uncompressed_size, BLED_COMPRESSION_LZMA);
|
||||
bled_exit();
|
||||
|
@ -787,7 +787,7 @@ static DWORD WINAPI DownloadISOThread(LPVOID param)
|
|||
if (size != uncompressed_size) {
|
||||
uprintf("FATAL: Could not uncompressed download script");
|
||||
safe_free(fido_script);
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_INVALID_DATA;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_INVALID_DATA);
|
||||
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_ERROR, 0);
|
||||
SetTaskbarProgressState(TASKBAR_ERROR);
|
||||
goto out;
|
||||
|
@ -840,7 +840,7 @@ static DWORD WINAPI DownloadISOThread(LPVOID param)
|
|||
// signed, we also validate the Authenticode signature of the local script.
|
||||
if (ValidateSignature(INVALID_HANDLE_VALUE, script_path) != NO_ERROR) {
|
||||
uprintf("FATAL: Script signature is invalid ✗");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_BAD_SIGNATURE);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_BAD_SIGNATURE));
|
||||
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_ERROR, 0);
|
||||
SetTaskbarProgressState(TASKBAR_ERROR);
|
||||
goto out;
|
||||
|
@ -848,6 +848,7 @@ static DWORD WINAPI DownloadISOThread(LPVOID param)
|
|||
uprintf("Script signature is valid ✓");
|
||||
#endif
|
||||
|
||||
ErrorStatus = 0;
|
||||
dwExitCode = RunCommand(cmdline, app_data_dir, TRUE);
|
||||
uprintf("Exited download script with code: %d", dwExitCode);
|
||||
if ((dwExitCode == 0) && PeekNamedPipe(hPipe, NULL, dwPipeSize, NULL, &dwAvail, NULL) && (dwAvail != 0)) {
|
||||
|
@ -875,11 +876,11 @@ static DWORD WINAPI DownloadISOThread(LPVOID param)
|
|||
}
|
||||
// Download the ISO and report errors if any
|
||||
SendMessage(hMainDialog, UM_PROGRESS_INIT, 0, 0);
|
||||
FormatStatus = 0;
|
||||
ErrorStatus = 0;
|
||||
SendMessage(hMainDialog, UM_TIMER_START, 0, 0);
|
||||
if (DownloadToFileOrBuffer(url, img_save.ImagePath, NULL, hMainDialog, TRUE) == 0) {
|
||||
SendMessage(hMainDialog, UM_PROGRESS_EXIT, 0, 0);
|
||||
if (SCODE_CODE(FormatStatus) == ERROR_CANCELLED) {
|
||||
if (SCODE_CODE(ErrorStatus) == ERROR_CANCELLED) {
|
||||
uprintf("Download cancelled by user");
|
||||
Notification(MSG_INFO, NULL, NULL, lmprintf(MSG_211), lmprintf(MSG_041));
|
||||
PrintInfo(0, MSG_211);
|
||||
|
@ -916,7 +917,7 @@ BOOL DownloadISO()
|
|||
{
|
||||
if (CreateThread(NULL, 0, DownloadISOThread, NULL, 0, NULL) == NULL) {
|
||||
uprintf("Unable to start Windows ISO download thread");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_START_THREAD);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_START_THREAD));
|
||||
SendMessage(hMainDialog, UM_ENABLE_CONTROLS, 0, 0);
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -948,7 +949,7 @@ BOOL IsDownloadable(const char* url)
|
|||
if (url == NULL)
|
||||
return FALSE;
|
||||
|
||||
FormatStatus = 0;
|
||||
ErrorStatus = 0;
|
||||
DownloadStatus = 404;
|
||||
|
||||
if ((!pfInternetCrackUrlA(url, (DWORD)safe_strlen(url), 0, &UrlParts))
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Elementary Unicode compliant find/replace parser
|
||||
* Copyright © 2012-2023 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2012-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -91,7 +91,7 @@ static loc_cmd* get_loc_cmd(char c, char* line) {
|
|||
// locate ending quote
|
||||
while ((line[i] != 0) && ((line[i] != '"') || ((line[i] == '"') && (line[i-1] == '\\')))) {
|
||||
if ((line[i] == '"') && (line[i-1] == '\\')) {
|
||||
strcpy(&line[i-1], &line[i]);
|
||||
memmove(&line[i-1], &line[i], strlen(&line[i]) + 1);
|
||||
} else {
|
||||
i++;
|
||||
}
|
||||
|
@ -1514,7 +1514,7 @@ int sanitize_label(char* label)
|
|||
// Remove all leading '-'
|
||||
for (i = 0; i < len && label[i] == '-'; i++);
|
||||
if (i != 0)
|
||||
memcpy(label, &label[i], len - i);
|
||||
memmove(label, &label[i], len - i);
|
||||
len = strlen(label);
|
||||
if (len <= 1)
|
||||
return -1;
|
||||
|
@ -1529,7 +1529,7 @@ int sanitize_label(char* label)
|
|||
// Remove all duplicate '-' (non-optimized!)
|
||||
for (i = 0; len >= 2 && i < len - 2; i++) {
|
||||
if (label[i] == '-' && label[i + 1] == '-') {
|
||||
memcpy(&label[i + 1], &label[i + 2], len - i - 1);
|
||||
memmove(&label[i + 1], &label[i + 2], len - i - 1);
|
||||
len--;
|
||||
i--;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* PKI functions (code signing, etc.)
|
||||
* Copyright © 2015-2023 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2015-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -652,7 +652,7 @@ LONG ValidateSignature(HWND hDlg, const char* path)
|
|||
trust_file.pcwszFilePath = utf8_to_wchar(path);
|
||||
if (trust_file.pcwszFilePath == NULL) {
|
||||
uprintf("PKI: Unable to convert '%s' to UTF16", path);
|
||||
return ERROR_SEVERITY_ERROR | FAC(FACILITY_CERT) | ERROR_NOT_ENOUGH_MEMORY;
|
||||
return RUFUS_ERROR(ERROR_NOT_ENOUGH_MEMORY);
|
||||
}
|
||||
|
||||
trust_data.cbStruct = sizeof(trust_data);
|
||||
|
|
|
@ -499,8 +499,8 @@ static DWORD WINAPI SearchProcessThread(LPVOID param)
|
|||
goto out;
|
||||
}
|
||||
if (wHandleName != NULL) {
|
||||
for (i = 0; i < nHandles; i++)
|
||||
free(wHandleName[i]);
|
||||
for (j = 0; j < nHandles; j++)
|
||||
free(wHandleName[j]);
|
||||
free(wHandleName);
|
||||
}
|
||||
safe_free(wHandleNameLen);
|
||||
|
@ -515,10 +515,10 @@ static DWORD WINAPI SearchProcessThread(LPVOID param)
|
|||
ReleaseMutex(hLock);
|
||||
goto out;
|
||||
}
|
||||
for (i = 0; i < nHandles; i++) {
|
||||
wHandleName[i] = wcsdup(blocking_process.wHandleName[i]);
|
||||
wHandleNameLen[i] = (USHORT)wcslen(blocking_process.wHandleName[i]);
|
||||
if (wHandleName[i] == NULL) {
|
||||
for (j = 0; j < nHandles; j++) {
|
||||
wHandleName[j] = wcsdup(blocking_process.wHandleName[j]);
|
||||
wHandleNameLen[j] = (USHORT)wcslen(blocking_process.wHandleName[j]);
|
||||
if (wHandleName[j] == NULL) {
|
||||
ReleaseMutex(hLock);
|
||||
goto out;
|
||||
}
|
||||
|
@ -556,7 +556,11 @@ static DWORD WINAPI SearchProcessThread(LPVOID param)
|
|||
);
|
||||
|
||||
if ((dupHandle != NULL) && (processHandle != NtCurrentProcess())) {
|
||||
pfNtClose(dupHandle);
|
||||
TRY_AND_HANDLE(
|
||||
EXCEPTION_ACCESS_VIOLATION,
|
||||
{ pfNtClose(dupHandle); },
|
||||
{ continue; }
|
||||
);
|
||||
dupHandle = NULL;
|
||||
}
|
||||
|
||||
|
@ -741,8 +745,8 @@ out:
|
|||
uprintf("Warning: Could not start process handle enumerator!");
|
||||
|
||||
if (wHandleName != NULL) {
|
||||
for (i = 0; i < nHandles; i++)
|
||||
free(wHandleName[i]);
|
||||
for (j = 0; j < nHandles; j++)
|
||||
free(wHandleName[j]);
|
||||
free(wHandleName);
|
||||
}
|
||||
safe_free(wHandleNameLen);
|
||||
|
|
|
@ -69,6 +69,13 @@
|
|||
#define IDR_LC_RUFUS_LOC 500
|
||||
#define IDR_XT_HOGGER 501
|
||||
#define IDR_UEFI_NTFS 502
|
||||
// The following should match the ArchType array values + 600
|
||||
#define IDR_MD5_BOOT 600
|
||||
#define IDR_MD5_BOOTIA32 601
|
||||
#define IDR_MD5_BOOTX64 602
|
||||
#define IDR_MD5_BOOTARM 603
|
||||
#define IDR_MD5_BOOTAA64 604
|
||||
#define IDR_MD5_BOOTRISCV64 607
|
||||
#define IDM_SELECT 901
|
||||
#define IDM_DOWNLOAD 902
|
||||
#define IDC_DEVICE 1001
|
||||
|
@ -86,12 +93,11 @@
|
|||
#define IDC_TEST 1013
|
||||
#define IDC_SELECT 1014
|
||||
#define IDC_EXTENDED_LABEL 1015
|
||||
#define IDC_RUFUS_MBR 1016
|
||||
#define IDC_TARGET_SYSTEM 1017
|
||||
#define IDC_PERSISTENCE_SIZE 1018
|
||||
#define IDC_PERSISTENCE_UNITS 1019
|
||||
#define IDC_DISK_ID 1020
|
||||
#define IDC_OLD_BIOS_FIXES 1021
|
||||
#define IDC_OLD_BIOS_FIXES 1020
|
||||
#define IDC_UEFI_MEDIA_VALIDATION 1021
|
||||
#define IDC_LIST_USB_HDD 1022
|
||||
#define IDC_STATUS_TOOLBAR 1023
|
||||
#define IDC_SAVE 1024
|
||||
|
@ -545,7 +551,56 @@
|
|||
#define MSG_348 3348
|
||||
#define MSG_349 3349
|
||||
#define MSG_350 3350
|
||||
#define MSG_MAX 3351
|
||||
#define MSG_351 3351
|
||||
#define MSG_352 3352
|
||||
#define MSG_353 3353
|
||||
#define MSG_354 3354
|
||||
#define MSG_355 3355
|
||||
#define MSG_356 3356
|
||||
#define MSG_357 3357
|
||||
#define MSG_358 3358
|
||||
#define MSG_359 3359
|
||||
#define MSG_360 3360
|
||||
#define MSG_361 3361
|
||||
#define MSG_362 3362
|
||||
#define MSG_363 3363
|
||||
#define MSG_364 3364
|
||||
#define MSG_365 3365
|
||||
#define MSG_366 3366
|
||||
#define MSG_367 3367
|
||||
#define MSG_368 3368
|
||||
#define MSG_369 3369
|
||||
#define MSG_370 3370
|
||||
#define MSG_371 3371
|
||||
#define MSG_372 3372
|
||||
#define MSG_373 3373
|
||||
#define MSG_374 3374
|
||||
#define MSG_375 3375
|
||||
#define MSG_376 3376
|
||||
#define MSG_377 3377
|
||||
#define MSG_378 3378
|
||||
#define MSG_379 3379
|
||||
#define MSG_380 3380
|
||||
#define MSG_381 3381
|
||||
#define MSG_382 3382
|
||||
#define MSG_383 3383
|
||||
#define MSG_384 3384
|
||||
#define MSG_385 3385
|
||||
#define MSG_386 3386
|
||||
#define MSG_387 3387
|
||||
#define MSG_388 3388
|
||||
#define MSG_389 3389
|
||||
#define MSG_390 3390
|
||||
#define MSG_391 3391
|
||||
#define MSG_392 3392
|
||||
#define MSG_393 3393
|
||||
#define MSG_394 3394
|
||||
#define MSG_395 3395
|
||||
#define MSG_396 3396
|
||||
#define MSG_397 3397
|
||||
#define MSG_398 3398
|
||||
#define MSG_399 3399
|
||||
#define MSG_MAX 3400
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
|
|
355
src/rufus.c
355
src/rufus.c
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Copyright © 2011-2023 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2011-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -86,7 +86,6 @@ static int64_t last_iso_blocking_status;
|
|||
static int selected_pt = -1, selected_fs = FS_UNKNOWN, preselected_fs = FS_UNKNOWN;
|
||||
static int image_index = 0, select_index = 0;
|
||||
static RECT relaunch_rc = { -65536, -65536, 0, 0};
|
||||
static UINT uMBRChecked = BST_UNCHECKED;
|
||||
static HWND hSelectImage = NULL, hStart = NULL;
|
||||
static char szTimer[12] = "00:00:00";
|
||||
static unsigned int timer;
|
||||
|
@ -94,6 +93,7 @@ static char uppercase_select[2][64], uppercase_start[64], uppercase_close[64], u
|
|||
|
||||
extern HANDLE update_check_thread, wim_thread;
|
||||
extern BOOL enable_iso, enable_joliet, enable_rockridge, enable_extra_hashes, is_bootloader_revoked;
|
||||
extern BOOL validate_md5sum;
|
||||
extern BYTE* fido_script;
|
||||
extern HWND hFidoDlg;
|
||||
extern uint8_t* grub2_buf;
|
||||
|
@ -119,7 +119,7 @@ loc_cmd* selected_locale = NULL;
|
|||
WORD selected_langid = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
|
||||
DWORD MainThreadId;
|
||||
HWND hDeviceList, hPartitionScheme, hTargetSystem, hFileSystem, hClusterSize, hLabel, hBootType, hNBPasses, hLog = NULL;
|
||||
HWND hImageOption, hLogDialog = NULL, hProgress = NULL, hDiskID;
|
||||
HWND hImageOption, hLogDialog = NULL, hProgress = NULL;
|
||||
HANDLE dialog_handle = NULL, format_thread = NULL;
|
||||
BOOL is_x86_64, use_own_c32[NB_OLD_C32] = { FALSE, FALSE }, mbr_selected_by_user = FALSE, lock_drive = TRUE;
|
||||
BOOL op_in_progress = TRUE, right_to_left_mode = FALSE, has_uefi_csm = FALSE, its_a_me_mario = FALSE;
|
||||
|
@ -129,7 +129,7 @@ BOOL usb_debug, use_fake_units, preserve_timestamps = FALSE, fast_zeroing = FALS
|
|||
BOOL zero_drive = FALSE, list_non_usb_removable_drives = FALSE, enable_file_indexing, large_drive = FALSE;
|
||||
BOOL write_as_image = FALSE, write_as_esp = FALSE, use_vds = FALSE, ignore_boot_marker = FALSE;
|
||||
BOOL appstore_version = FALSE, is_vds_available = TRUE, persistent_log = FALSE, has_ffu_support = FALSE;
|
||||
BOOL expert_mode = FALSE;
|
||||
BOOL expert_mode = FALSE, use_rufus_mbr = TRUE;
|
||||
float fScale = 1.0f;
|
||||
int dialog_showing = 0, selection_default = BT_IMAGE, persistence_unit_selection = -1, imop_win_sel = 0;
|
||||
int default_fs, fs_type, boot_type, partition_type, target_type;
|
||||
|
@ -213,11 +213,6 @@ static void SetAllowedFileSystems(void)
|
|||
allowed_filesystem[FS_EXFAT] = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
// Reset disk ID to 0x80 if Rufus MBR is used
|
||||
if (selection_default != BT_IMAGE) {
|
||||
IGNORE_RETVAL(ComboBox_SetCurSel(hDiskID, 0));
|
||||
}
|
||||
}
|
||||
|
||||
// Populate the Boot selection dropdown
|
||||
|
@ -245,10 +240,8 @@ static void SetBootOptions(void)
|
|||
"Grub4DOS " GRUB4DOS_VERSION), BT_GRUB4DOS));
|
||||
IGNORE_RETVAL(ComboBox_SetItemData(hBootType, ComboBox_AddStringU(hBootType, "UEFI:NTFS"), BT_UEFI_NTFS));
|
||||
}
|
||||
if ((!advanced_mode_device) && (selection_default >= BT_SYSLINUX_V4)) {
|
||||
if ((!advanced_mode_device) && (selection_default >= BT_SYSLINUX_V4))
|
||||
selection_default = BT_IMAGE;
|
||||
CheckDlgButton(hMainDialog, IDC_DISK_ID, BST_UNCHECKED);
|
||||
}
|
||||
SetComboEntry(hBootType, selection_default);
|
||||
}
|
||||
|
||||
|
@ -385,7 +378,7 @@ static BOOL SetClusterSizes(int FSType)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
for (i = 0, j = 0x100, k = 0; j<0x10000000; i++, j <<= 1) {
|
||||
for (i = 0, j = 0x100, k = 0; j < 0x10000000; i++, j <<= 1) {
|
||||
if (j & SelectedDrive.ClusterSize[FSType].Allowed) {
|
||||
if (j == SelectedDrive.ClusterSize[FSType].Default) {
|
||||
szClustSize = lmprintf(MSG_030, ClusterSizeLabel[i]);
|
||||
|
@ -483,11 +476,11 @@ static BOOL SetFileSystemAndClusterSize(char* fs_name)
|
|||
*/
|
||||
|
||||
// FAT 16
|
||||
if (SelectedDrive.DiskSize < 4*GB) {
|
||||
if (SelectedDrive.DiskSize < 4 * GB) {
|
||||
SelectedDrive.ClusterSize[FS_FAT16].Allowed = 0x00001E00;
|
||||
for (i = 32; i <= 4096; i <<= 1) { // 8 MB -> 4 GB
|
||||
if (SelectedDrive.DiskSize < i*MB) {
|
||||
SelectedDrive.ClusterSize[FS_FAT16].Default = 16*(ULONG)i;
|
||||
if (SelectedDrive.DiskSize < i * MB) {
|
||||
SelectedDrive.ClusterSize[FS_FAT16].Default = 16 * (ULONG)i;
|
||||
break;
|
||||
}
|
||||
SelectedDrive.ClusterSize[FS_FAT16].Allowed <<= 1;
|
||||
|
@ -497,12 +490,12 @@ static BOOL SetFileSystemAndClusterSize(char* fs_name)
|
|||
|
||||
// FAT 32
|
||||
// > 32GB FAT32 is not supported by MS and FormatEx but is achieved using fat32format
|
||||
// See: http://www.ridgecrop.demon.co.uk/index.htm?fat32format.htm
|
||||
// See: http://ridgecrop.co.uk/index.htm?fat32format.htm
|
||||
// < 32 MB FAT32 is not allowed by FormatEx, so we don't bother
|
||||
if ((SelectedDrive.DiskSize >= 32*MB) && (1.0f*SelectedDrive.DiskSize < 1.0f*MAX_FAT32_SIZE*TB)) {
|
||||
if ((SelectedDrive.DiskSize >= 32 * MB) && (SelectedDrive.DiskSize < MAX_FAT32_SIZE)) {
|
||||
SelectedDrive.ClusterSize[FS_FAT32].Allowed = 0x000001F8;
|
||||
for (i=32; i<=(32*1024); i<<=1) { // 32 MB -> 32 GB
|
||||
if (SelectedDrive.DiskSize*1.0f < i*MB*FAT32_CLUSTER_THRESHOLD) { // MS
|
||||
for (i = 32; i <= (32 * 1024); i <<= 1) { // 32 MB -> 32 GB
|
||||
if (SelectedDrive.DiskSize*1.0f < i * MB * FAT32_CLUSTER_THRESHOLD) { // MS
|
||||
SelectedDrive.ClusterSize[FS_FAT32].Default = 8*(ULONG)i;
|
||||
break;
|
||||
}
|
||||
|
@ -511,39 +504,39 @@ static BOOL SetFileSystemAndClusterSize(char* fs_name)
|
|||
SelectedDrive.ClusterSize[FS_FAT32].Allowed &= 0x0001FE00;
|
||||
|
||||
// Default cluster sizes in the 256MB to 32 GB range do not follow the rule above
|
||||
if ((SelectedDrive.DiskSize >= 256*MB) && (SelectedDrive.DiskSize < 32*GB)) {
|
||||
for (i=8; i<=32; i<<=1) { // 256 MB -> 32 GB
|
||||
if (SelectedDrive.DiskSize*1.0f < i*GB*FAT32_CLUSTER_THRESHOLD) {
|
||||
SelectedDrive.ClusterSize[FS_FAT32].Default = ((ULONG)i/2)*KB;
|
||||
if ((SelectedDrive.DiskSize >= 256 * MB) && (SelectedDrive.DiskSize < 32 * GB)) {
|
||||
for (i = 8; i <= 32; i <<= 1) { // 256 MB -> 32 GB
|
||||
if (SelectedDrive.DiskSize * 1.0f < i * GB * FAT32_CLUSTER_THRESHOLD) {
|
||||
SelectedDrive.ClusterSize[FS_FAT32].Default = ((ULONG)i / 2) * KB;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
// More adjustments for large drives
|
||||
if (SelectedDrive.DiskSize >= 32*GB) {
|
||||
if (SelectedDrive.DiskSize >= 32 * GB) {
|
||||
SelectedDrive.ClusterSize[FS_FAT32].Allowed &= 0x0001C000;
|
||||
SelectedDrive.ClusterSize[FS_FAT32].Default = 0x00008000;
|
||||
}
|
||||
}
|
||||
|
||||
if (SelectedDrive.DiskSize < 256*TB) {
|
||||
if (SelectedDrive.DiskSize < 256 * TB) {
|
||||
// NTFS
|
||||
SelectedDrive.ClusterSize[FS_NTFS].Allowed = 0x0001FE00;
|
||||
for (i=16; i<=256; i<<=1) { // 7 MB -> 256 TB
|
||||
if (SelectedDrive.DiskSize < i*TB) {
|
||||
SelectedDrive.ClusterSize[FS_NTFS].Default = ((ULONG)i/4)*KB;
|
||||
for (i = 16; i <= 256; i <<= 1) { // 7 MB -> 256 TB
|
||||
if (SelectedDrive.DiskSize < i * TB) {
|
||||
SelectedDrive.ClusterSize[FS_NTFS].Default = ((ULONG)i / 4) * KB;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// exFAT
|
||||
SelectedDrive.ClusterSize[FS_EXFAT].Allowed = 0x03FFFE00;
|
||||
if (SelectedDrive.DiskSize < 256*MB) // < 256 MB
|
||||
SelectedDrive.ClusterSize[FS_EXFAT].Default = 4*KB;
|
||||
else if (SelectedDrive.DiskSize < 32*GB) // < 32 GB
|
||||
SelectedDrive.ClusterSize[FS_EXFAT].Default = 32*KB;
|
||||
if (SelectedDrive.DiskSize < 256 * MB) // < 256 MB
|
||||
SelectedDrive.ClusterSize[FS_EXFAT].Default = 4 * KB;
|
||||
else if (SelectedDrive.DiskSize < 32 * GB) // < 32 GB
|
||||
SelectedDrive.ClusterSize[FS_EXFAT].Default = 32 * KB;
|
||||
else
|
||||
SelectedDrive.ClusterSize[FS_EXFAT].Default = 128*KB;
|
||||
SelectedDrive.ClusterSize[FS_EXFAT].Default = 128 * KB;
|
||||
|
||||
// UDF
|
||||
SelectedDrive.ClusterSize[FS_UDF].Allowed = SINGLE_CLUSTERSIZE_DEFAULT;
|
||||
|
@ -680,24 +673,6 @@ static void SetFSFromISO(void)
|
|||
ComboBox_GetCurSel(hFileSystem));
|
||||
}
|
||||
|
||||
static void SetMBRProps(void)
|
||||
{
|
||||
BOOL needs_masquerading = HAS_WINPE(img_report) && (!img_report.uses_minint);
|
||||
fs_type = (int)ComboBox_GetCurItemData(hFileSystem);
|
||||
|
||||
if ((!mbr_selected_by_user) && ((image_path == NULL) || (boot_type != BT_IMAGE) || (fs_type != FS_NTFS) || HAS_GRUB(img_report) ||
|
||||
((image_options & IMOP_WINTOGO) && (ComboBox_GetCurItemData(hImageOption) == IMOP_WIN_TO_GO)) )) {
|
||||
CheckDlgButton(hMainDialog, IDC_RUFUS_MBR, BST_UNCHECKED);
|
||||
IGNORE_RETVAL(ComboBox_SetCurSel(hDiskID, 0));
|
||||
return;
|
||||
}
|
||||
|
||||
uMBRChecked = (needs_masquerading || HAS_BOOTMGR(img_report) || mbr_selected_by_user)?BST_CHECKED:BST_UNCHECKED;
|
||||
if (IsWindowEnabled(GetDlgItem(hMainDialog, IDC_RUFUS_MBR)))
|
||||
CheckDlgButton(hMainDialog, IDC_RUFUS_MBR, uMBRChecked);
|
||||
IGNORE_RETVAL(ComboBox_SetCurSel(hDiskID, needs_masquerading?1:0));
|
||||
}
|
||||
|
||||
static void SetProposedLabel(int ComboIndex)
|
||||
{
|
||||
const char no_label[] = STR_NO_LABEL, empty[] = "";
|
||||
|
@ -729,45 +704,49 @@ static void SetProposedLabel(int ComboIndex)
|
|||
}
|
||||
}
|
||||
|
||||
// This handles the enabling/disabling of the "Add fixes for old BIOSes" and "Use Rufus MBR" controls
|
||||
static void EnableMBRBootOptions(BOOL enable, BOOL remove_checkboxes)
|
||||
static void EnableOldBiosFixes(BOOL enable, BOOL remove_checkboxes)
|
||||
{
|
||||
BOOL actual_enable_mbr = (boot_type > BT_IMAGE) ? FALSE: enable;
|
||||
BOOL actual_enable_fix = enable;
|
||||
static UINT uXPartChecked = BST_UNCHECKED;
|
||||
static UINT checked, state = 0;
|
||||
HWND hCtrl = GetDlgItem(hMainDialog, IDC_OLD_BIOS_FIXES);
|
||||
|
||||
// The fix for old BIOSes option cannot apply if we aren't targetting BIOS, or are using an image that isn't BIOS bootable
|
||||
if ((partition_type != PARTITION_STYLE_MBR) || (target_type != TT_BIOS) || (boot_type == BT_NON_BOOTABLE) ||
|
||||
((boot_type == BT_IMAGE) && (!IS_BIOS_BOOTABLE(img_report) || IS_DD_ONLY(img_report)))) {
|
||||
// These options cannot apply if we aren't using MBR+BIOS, or are using an image that isn't BIOS bootable
|
||||
actual_enable_mbr = FALSE;
|
||||
actual_enable_fix = FALSE;
|
||||
} else {
|
||||
// If we are using an image, the Rufus MBR only applies if it's for Windows
|
||||
if ((boot_type == BT_IMAGE) && !HAS_WINPE(img_report) && !HAS_BOOTMGR(img_report)) {
|
||||
actual_enable_mbr = FALSE;
|
||||
mbr_selected_by_user = FALSE;
|
||||
}
|
||||
enable = FALSE;
|
||||
}
|
||||
|
||||
if (remove_checkboxes) {
|
||||
// Store/Restore the checkbox states
|
||||
if (IsWindowEnabled(GetDlgItem(hMainDialog, IDC_RUFUS_MBR)) && !actual_enable_mbr) {
|
||||
uMBRChecked = IsChecked(IDC_RUFUS_MBR);
|
||||
CheckDlgButton(hMainDialog, IDC_RUFUS_MBR, BST_UNCHECKED);
|
||||
} else if (!IsWindowEnabled(GetDlgItem(hMainDialog, IDC_RUFUS_MBR)) && actual_enable_mbr) {
|
||||
CheckDlgButton(hMainDialog, IDC_RUFUS_MBR, uMBRChecked);
|
||||
}
|
||||
if (IsWindowEnabled(GetDlgItem(hMainDialog, IDC_OLD_BIOS_FIXES)) && !actual_enable_fix) {
|
||||
uXPartChecked = IsChecked(IDC_OLD_BIOS_FIXES);
|
||||
if (!enable && (state != 1)) {
|
||||
checked = IsChecked(IDC_OLD_BIOS_FIXES);
|
||||
CheckDlgButton(hMainDialog, IDC_OLD_BIOS_FIXES, BST_UNCHECKED);
|
||||
} else if (!IsWindowEnabled(GetDlgItem(hMainDialog, IDC_OLD_BIOS_FIXES)) && actual_enable_fix) {
|
||||
CheckDlgButton(hMainDialog, IDC_OLD_BIOS_FIXES, uXPartChecked);
|
||||
state = 1;
|
||||
} else if (enable && !IsWindowEnabled(hCtrl) && (state != 2)) {
|
||||
if (state != 0)
|
||||
CheckDlgButton(hMainDialog, IDC_OLD_BIOS_FIXES, checked);
|
||||
state = 2;
|
||||
}
|
||||
}
|
||||
EnableWindow(hCtrl, enable);
|
||||
}
|
||||
|
||||
EnableWindow(GetDlgItem(hMainDialog, IDC_OLD_BIOS_FIXES), actual_enable_fix);
|
||||
EnableWindow(GetDlgItem(hMainDialog, IDC_RUFUS_MBR), actual_enable_mbr);
|
||||
EnableWindow(hDiskID, actual_enable_mbr);
|
||||
static void EnableUefiValidation(BOOL enable, BOOL remove_checkboxes)
|
||||
{
|
||||
UINT checked = validate_md5sum ? BST_CHECKED : BST_UNCHECKED;
|
||||
HWND hCtrl = GetDlgItem(hMainDialog, IDC_UEFI_MEDIA_VALIDATION);
|
||||
|
||||
// The UEFI validation bootloader cannot apply if we don't write an ISO, or if the ISO is not UEFI bootable
|
||||
// or if it's a Windows To Go installation or if DD or BIOS/CSM only are enforced.
|
||||
if ((boot_type != BT_IMAGE) || (!IS_EFI_BOOTABLE(img_report)) || IS_DD_ONLY(img_report) ||
|
||||
((image_options & IMOP_WINTOGO) && (ComboBox_GetCurItemData(hImageOption) == IMOP_WIN_TO_GO)) ||
|
||||
((target_type == TT_BIOS) && HAS_WINDOWS(img_report) && (!allow_dual_uefi_bios))) {
|
||||
enable = FALSE;
|
||||
}
|
||||
|
||||
if (!enable && remove_checkboxes)
|
||||
CheckDlgButton(hMainDialog, IDC_UEFI_MEDIA_VALIDATION, BST_UNCHECKED);
|
||||
else
|
||||
CheckDlgButton(hMainDialog, IDC_UEFI_MEDIA_VALIDATION, checked);
|
||||
EnableWindow(hCtrl, enable);
|
||||
}
|
||||
|
||||
static void EnableExtendedLabel(BOOL enable, BOOL remove_checkboxes)
|
||||
|
@ -846,7 +825,8 @@ static void EnableBootOptions(BOOL enable, BOOL remove_checkboxes)
|
|||
SetPersistenceSize();
|
||||
EnableWindow(GetDlgItem(hMainDialog, IDC_PERSISTENCE_SIZE), (persistence_size != 0) && actual_enable);
|
||||
EnableWindow(GetDlgItem(hMainDialog, IDC_PERSISTENCE_UNITS), (persistence_size != 0) && actual_enable);
|
||||
EnableMBRBootOptions(actual_enable, remove_checkboxes);
|
||||
EnableOldBiosFixes(actual_enable, remove_checkboxes);
|
||||
EnableUefiValidation(actual_enable, remove_checkboxes);
|
||||
|
||||
EnableWindow(GetDlgItem(hMainDialog, IDC_LABEL), actual_enable);
|
||||
if (boot_type == BT_IMAGE) {
|
||||
|
@ -1261,7 +1241,8 @@ DWORD WINAPI ImageScanThread(LPVOID param)
|
|||
const char* redhat8_derivative[] = {
|
||||
"^AlmaLinux-[8-9].*", // AlmaLinux 8.x and 9.x
|
||||
"^Fedora.*-3[3-9].*", // Fedora 33-39
|
||||
"^CentOS.*-[8-9].*", // CentOS and CentOS Stream 8.and 9.x
|
||||
"^CentOS.*-[8-9].*", // CentOS and CentOS Stream 8.x and 9.x
|
||||
"^Circle.*-[8-9].*", // Circle Linux 8.x.and 9.x
|
||||
"^OL-[8-9].*", // Oracle Linux 8.x and 9.x
|
||||
"^RHEL-[8-9].*", // Red Hat 8.x and 9.x
|
||||
"^Rocky-[8-9].*", // Rocky Linux 8.x and 9.x
|
||||
|
@ -1288,8 +1269,7 @@ DWORD WINAPI ImageScanThread(LPVOID param)
|
|||
ComboBox_ResetContent(hImageOption);
|
||||
imop_win_sel = 0;
|
||||
|
||||
if ((FormatStatus == (ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_CANCELLED)) ||
|
||||
(img_report.image_size == 0) ||
|
||||
if ((ErrorStatus == RUFUS_ERROR(ERROR_CANCELLED)) || (img_report.image_size == 0) ||
|
||||
(!img_report.is_iso && (img_report.is_bootable_img <= 0) && !img_report.is_windows_img)) {
|
||||
// Failed to scan image
|
||||
if (img_report.is_bootable_img < 0)
|
||||
|
@ -1301,7 +1281,6 @@ DWORD WINAPI ImageScanThread(LPVOID param)
|
|||
safe_free(image_path);
|
||||
SendMessage(hMainDialog, UM_PROGRESS_EXIT, 0, 0);
|
||||
UpdateImage(FALSE);
|
||||
SetMBRProps();
|
||||
PopulateProperties();
|
||||
PrintInfoDebug(0, MSG_203);
|
||||
PrintStatus(0, MSG_203);
|
||||
|
@ -1375,7 +1354,6 @@ DWORD WINAPI ImageScanThread(LPVOID param)
|
|||
MessageBoxExU(hMainDialog, lmprintf(MSG_082), lmprintf(MSG_081), MB_OK | MB_ICONINFORMATION | MB_IS_RTL, selected_langid);
|
||||
PrintStatus(0, MSG_086);
|
||||
EnableControls(TRUE, FALSE);
|
||||
SetMBRProps();
|
||||
} else {
|
||||
if (!dont_display_image_name) {
|
||||
for (i = (int)safe_strlen(image_path); (i > 0) && (image_path[i] != '\\'); i--);
|
||||
|
@ -1394,7 +1372,6 @@ DWORD WINAPI ImageScanThread(LPVOID param)
|
|||
SetPartitionSchemeAndTargetSystem(FALSE);
|
||||
SetFileSystemAndClusterSize(NULL);
|
||||
SetFSFromISO();
|
||||
SetMBRProps();
|
||||
user_changed_label = FALSE;
|
||||
SetProposedLabel(ComboBox_GetCurSel(hDeviceList));
|
||||
} else {
|
||||
|
@ -1470,7 +1447,7 @@ static DWORD WINAPI BootCheckThread(LPVOID param)
|
|||
char* iso_image = lmprintf(MSG_036);
|
||||
char* dd_image = lmprintf(MSG_095);
|
||||
// If the ISO is small enough to be written as an ESP and we are using GPT add the ISO → ESP option
|
||||
if ((img_report.projected_size < MAX_ISO_TO_ESP_SIZE * MB) && HAS_REGULAR_EFI(img_report) &&
|
||||
if ((img_report.projected_size < MAX_ISO_TO_ESP_SIZE) && HAS_REGULAR_EFI(img_report) &&
|
||||
(partition_type == PARTITION_STYLE_GPT) && IS_FAT(fs_type)) {
|
||||
char* choices[3] = { lmprintf(MSG_276, iso_image), lmprintf(MSG_277, "ISO → ESP"), lmprintf(MSG_277, dd_image) };
|
||||
i = SelectionDialog(lmprintf(MSG_274, "ISOHybrid"), lmprintf(MSG_275, iso_image, dd_image, iso_image, dd_image), choices, 3);
|
||||
|
@ -1585,58 +1562,51 @@ static DWORD WINAPI BootCheckThread(LPVOID param)
|
|||
goto out;
|
||||
}
|
||||
if ((WindowsVersion.Version >= WINDOWS_8) && IS_WINDOWS_1X(img_report) && (!is_windows_to_go)) {
|
||||
StrArray options;
|
||||
int arch = _log2(img_report.has_efi >> 1);
|
||||
uint16_t map[16] = { 0 }, b = 1;
|
||||
StrArrayCreate(&options, 10);
|
||||
if (IS_WINDOWS_11(img_report)) {
|
||||
StrArrayAdd(&options, lmprintf(MSG_329), TRUE);
|
||||
MAP_BIT(UNATTEND_SECUREBOOT_TPM_MINRAM);
|
||||
if (img_report.has_panther_unattend) {
|
||||
uprintf("NOTICE: A '/sources/$OEM$/$$/Panther/unattend.xml' was detected on the ISO.");
|
||||
uprintf("As a result, the 'Windows User Experience dialog' will not be displayed.");
|
||||
} else {
|
||||
StrArray options;
|
||||
int arch = _log2(img_report.has_efi >> 1);
|
||||
uint16_t map[16] = { 0 }, b = 1;
|
||||
StrArrayCreate(&options, 10);
|
||||
if (IS_WINDOWS_11(img_report)) {
|
||||
StrArrayAdd(&options, lmprintf(MSG_329), TRUE);
|
||||
MAP_BIT(UNATTEND_SECUREBOOT_TPM_MINRAM);
|
||||
}
|
||||
if (img_report.win_version.build >= 22500) {
|
||||
StrArrayAdd(&options, lmprintf(MSG_330), TRUE);
|
||||
MAP_BIT(UNATTEND_NO_ONLINE_ACCOUNT);
|
||||
}
|
||||
StrArrayAdd(&options, lmprintf(MSG_333), TRUE);
|
||||
username_index = _log2(b);
|
||||
MAP_BIT(UNATTEND_SET_USER);
|
||||
StrArrayAdd(&options, lmprintf(MSG_334), TRUE);
|
||||
MAP_BIT(UNATTEND_DUPLICATE_LOCALE);
|
||||
StrArrayAdd(&options, lmprintf(MSG_331), TRUE);
|
||||
MAP_BIT(UNATTEND_NO_DATA_COLLECTION);
|
||||
StrArrayAdd(&options, lmprintf(MSG_335), TRUE);
|
||||
MAP_BIT(UNATTEND_DISABLE_BITLOCKER);
|
||||
if (expert_mode) {
|
||||
StrArrayAdd(&options, lmprintf(MSG_346), TRUE);
|
||||
MAP_BIT(UNATTEND_FORCE_S_MODE);
|
||||
}
|
||||
i = CustomSelectionDialog(BS_AUTOCHECKBOX, lmprintf(MSG_327), lmprintf(MSG_328),
|
||||
options.String, options.Index, remap16(unattend_xml_mask, map, FALSE), username_index);
|
||||
StrArrayDestroy(&options);
|
||||
if (i < 0)
|
||||
goto out;
|
||||
i = remap16(i, map, TRUE);
|
||||
unattend_xml_path = CreateUnattendXml(arch, i);
|
||||
// Remember the user preferences for the current session.
|
||||
unattend_xml_mask &= ~(remap16(0x1ff, map, TRUE));
|
||||
unattend_xml_mask |= i;
|
||||
WriteSetting32(SETTING_WUE_OPTIONS, (UNATTEND_DEFAULT_MASK << 16) | unattend_xml_mask);
|
||||
}
|
||||
if (img_report.win_version.build >= 22500) {
|
||||
StrArrayAdd(&options, lmprintf(MSG_330), TRUE);
|
||||
MAP_BIT(UNATTEND_NO_ONLINE_ACCOUNT);
|
||||
}
|
||||
StrArrayAdd(&options, lmprintf(MSG_333), TRUE);
|
||||
username_index = _log2(b);
|
||||
MAP_BIT(UNATTEND_SET_USER);
|
||||
StrArrayAdd(&options, lmprintf(MSG_334), TRUE);
|
||||
MAP_BIT(UNATTEND_DUPLICATE_LOCALE);
|
||||
StrArrayAdd(&options, lmprintf(MSG_331), TRUE);
|
||||
MAP_BIT(UNATTEND_NO_DATA_COLLECTION);
|
||||
StrArrayAdd(&options, lmprintf(MSG_335), TRUE);
|
||||
MAP_BIT(UNATTEND_DISABLE_BITLOCKER);
|
||||
if (expert_mode) {
|
||||
StrArrayAdd(&options, lmprintf(MSG_346), TRUE);
|
||||
MAP_BIT(UNATTEND_FORCE_S_MODE);
|
||||
}
|
||||
i = CustomSelectionDialog(BS_AUTOCHECKBOX, lmprintf(MSG_327), lmprintf(MSG_328),
|
||||
options.String, options.Index, remap16(unattend_xml_mask, map, FALSE), username_index);
|
||||
StrArrayDestroy(&options);
|
||||
if (i < 0)
|
||||
goto out;
|
||||
i = remap16(i, map, TRUE);
|
||||
unattend_xml_path = CreateUnattendXml(arch, i);
|
||||
// Remember the user preferences for the current session.
|
||||
unattend_xml_mask &= ~(remap16(0x1ff, map, TRUE));
|
||||
unattend_xml_mask |= i;
|
||||
WriteSetting32(SETTING_WUE_OPTIONS, (UNATTEND_DEFAULT_MASK << 16) | unattend_xml_mask);
|
||||
}
|
||||
|
||||
if ((img_report.projected_size < MAX_ISO_TO_ESP_SIZE * MB) && HAS_REGULAR_EFI(img_report) &&
|
||||
(partition_type == PARTITION_STYLE_GPT) && IS_FAT(fs_type) && !esp_already_asked) {
|
||||
// The ISO is small enough to be written as an ESP and we are using GPT
|
||||
// so ask the users if they want to write it as an ESP.
|
||||
char* iso_image = lmprintf(MSG_036);
|
||||
char* choices[2] = { lmprintf(MSG_276, iso_image), lmprintf(MSG_277, "ISO → ESP") };
|
||||
i = SelectionDialog(lmprintf(MSG_274, "ESP"), lmprintf(MSG_310), choices, 2);
|
||||
if (i < 0) // Cancel
|
||||
goto out;
|
||||
write_as_esp = (i & 2);
|
||||
}
|
||||
|
||||
// Check UEFI bootloaders for revocation
|
||||
if (target_type == TT_UEFI) {
|
||||
if (IS_EFI_BOOTABLE(img_report)) {
|
||||
// coverity[swapped_arguments]
|
||||
if (GetTempFileNameU(temp_dir, APPLICATION_NAME, 0, tmp) != 0) {
|
||||
// ExtractISOFile() is case sensitive, so we must use
|
||||
|
@ -1660,6 +1630,18 @@ static DWORD WINAPI BootCheckThread(LPVOID param)
|
|||
}
|
||||
}
|
||||
|
||||
if ((img_report.projected_size < MAX_ISO_TO_ESP_SIZE) && HAS_REGULAR_EFI(img_report) &&
|
||||
(partition_type == PARTITION_STYLE_GPT) && IS_FAT(fs_type) && !esp_already_asked) {
|
||||
// The ISO is small enough to be written as an ESP and we are using GPT
|
||||
// so ask the users if they want to write it as an ESP.
|
||||
char* iso_image = lmprintf(MSG_036);
|
||||
char* choices[2] = { lmprintf(MSG_276, iso_image), lmprintf(MSG_277, "ISO → ESP") };
|
||||
i = SelectionDialog(lmprintf(MSG_274, "ESP"), lmprintf(MSG_310), choices, 2);
|
||||
if (i < 0) // Cancel
|
||||
goto out;
|
||||
write_as_esp = (i & 2);
|
||||
}
|
||||
|
||||
// If the selected target doesn't include BIOS, skip file downloads for GRUB/Syslinux
|
||||
if (target_type != TT_BIOS)
|
||||
goto uefi_target;
|
||||
|
@ -1731,7 +1713,7 @@ static DWORD WINAPI BootCheckThread(LPVOID param)
|
|||
if ((partition_type == PARTITION_STYLE_MBR) && HAS_SYSLINUX(img_report)) {
|
||||
if (SL_MAJOR(img_report.sl_version) < 5) {
|
||||
IGNORE_RETVAL(_chdirU(app_data_dir));
|
||||
for (i=0; i<NB_OLD_C32; i++) {
|
||||
for (i = 0; i<NB_OLD_C32; i++) {
|
||||
if (img_report.has_old_c32[i]) {
|
||||
if (!in_files_dir) {
|
||||
IGNORE_RETVAL(_mkdir(FILES_DIR));
|
||||
|
@ -1975,7 +1957,6 @@ static void InitDialog(HWND hDlg)
|
|||
hImageOption = GetDlgItem(hDlg, IDC_IMAGE_OPTION);
|
||||
hSelectImage = GetDlgItem(hDlg, IDC_SELECT);
|
||||
hNBPasses = GetDlgItem(hDlg, IDC_NB_PASSES);
|
||||
hDiskID = GetDlgItem(hDlg, IDC_DISK_ID);
|
||||
hStart = GetDlgItem(hDlg, IDC_START);
|
||||
|
||||
// Convert the main button labels to uppercase
|
||||
|
@ -2004,7 +1985,6 @@ static void InitDialog(HWND hDlg)
|
|||
|
||||
// Set some missing labels
|
||||
SetAccessibleName(hNBPasses, lmprintf(MSG_316));
|
||||
SetAccessibleName(hDiskID, lmprintf(MSG_317));
|
||||
|
||||
// Create the font and brush for the progress messages
|
||||
hInfoFont = CreateFontA(lfHeight, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET,
|
||||
|
@ -2057,7 +2037,7 @@ static void InitDialog(HWND hDlg)
|
|||
len = 0;
|
||||
buf = (char*)GetResource(hMainInstance, resource[i], _RT_RCDATA, "ldlinux_sys", &len, TRUE);
|
||||
if (buf == NULL) {
|
||||
uprintf("Warning: could not read embedded Syslinux v%d version", i+4);
|
||||
uprintf("Warning: could not read embedded Syslinux v%d version", i + 4);
|
||||
} else {
|
||||
embedded_sl_version[i] = GetSyslinuxVersion(buf, len, &ext);
|
||||
static_sprintf(embedded_sl_version_str[i], "%d.%02d", SL_MAJOR(embedded_sl_version[i]), SL_MINOR(embedded_sl_version[i]));
|
||||
|
@ -2102,13 +2082,6 @@ static void InitDialog(HWND hDlg)
|
|||
// Fill up the boot options dropdown
|
||||
SetBootOptions();
|
||||
|
||||
// Fill up the MBR masqueraded disk IDs ("8 disks should be enough for anybody")
|
||||
IGNORE_RETVAL(ComboBox_SetItemData(hDiskID, ComboBox_AddStringU(hDiskID, lmprintf(MSG_030, LEFT_TO_RIGHT_EMBEDDING "0x80" POP_DIRECTIONAL_FORMATTING)), 0x80));
|
||||
for (i=1; i<=7; i++) {
|
||||
IGNORE_RETVAL(ComboBox_SetItemData(hDiskID, ComboBox_AddStringU(hDiskID, lmprintf(MSG_109, 0x80+i, i+1)), 0x80+i));
|
||||
}
|
||||
IGNORE_RETVAL(ComboBox_SetCurSel(hDiskID, 0));
|
||||
|
||||
// Create the string arrays
|
||||
StrArrayCreate(&BlockingProcessList, 16);
|
||||
StrArrayCreate(&ImageList, 16);
|
||||
|
@ -2138,8 +2111,7 @@ static void InitDialog(HWND hDlg)
|
|||
CreateTooltip(hBootType, lmprintf(MSG_164), -1);
|
||||
CreateTooltip(hSelectImage, lmprintf(MSG_165), -1);
|
||||
CreateTooltip(GetDlgItem(hDlg, IDC_EXTENDED_LABEL), lmprintf(MSG_166), 10000);
|
||||
CreateTooltip(GetDlgItem(hDlg, IDC_RUFUS_MBR), lmprintf(MSG_167), 10000);
|
||||
CreateTooltip(hDiskID, lmprintf(MSG_168), 10000);
|
||||
CreateTooltip(GetDlgItem(hDlg, IDC_UEFI_MEDIA_VALIDATION), lmprintf(MSG_167), 10000);
|
||||
CreateTooltip(GetDlgItem(hDlg, IDC_OLD_BIOS_FIXES), lmprintf(MSG_169), -1);
|
||||
CreateTooltip(GetDlgItem(hDlg, IDC_LIST_USB_HDD), lmprintf(MSG_170), -1);
|
||||
CreateTooltip(hStart, lmprintf(MSG_171), -1);
|
||||
|
@ -2240,7 +2212,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
MB_YESNO|MB_ICONWARNING|MB_IS_RTL, selected_langid) == IDYES)) {
|
||||
// Operation may have completed in the meantime
|
||||
if (format_thread != NULL) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_CANCELLED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_CANCELLED);
|
||||
PrintInfo(0, MSG_201);
|
||||
uprintf("Cancelling");
|
||||
// Start a timer to detect blocking operations during ISO file extraction
|
||||
|
@ -2256,7 +2228,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
return (INT_PTR)TRUE;
|
||||
} else if (op_in_progress) {
|
||||
// User might be trying to cancel during preliminary checks
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_CANCELLED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_CANCELLED);
|
||||
PrintInfo(0, MSG_201);
|
||||
EnableWindow(GetDlgItem(hDlg, IDCANCEL), TRUE);
|
||||
return (INT_PTR)TRUE;
|
||||
|
@ -2393,6 +2365,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
break;
|
||||
SetFileSystemAndClusterSize(NULL);
|
||||
imop_win_sel = ComboBox_GetCurSel(hImageOption);
|
||||
EnableUefiValidation((imop_win_sel == 0), TRUE);
|
||||
break;
|
||||
case IDC_PERSISTENCE_SIZE:
|
||||
if (HIWORD(wParam) == EN_CHANGE) {
|
||||
|
@ -2462,6 +2435,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
target_type = (int)ComboBox_GetCurItemData(hTargetSystem);
|
||||
SendMessage(hMainDialog, UM_UPDATE_CSM_TOOLTIP, 0, 0);
|
||||
SetFileSystemAndClusterSize(NULL);
|
||||
EnableUefiValidation(TRUE, TRUE);
|
||||
break;
|
||||
case IDC_PARTITION_TYPE:
|
||||
if (HIWORD(wParam) != CBN_SELCHANGE)
|
||||
|
@ -2469,8 +2443,8 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
partition_type = (int)ComboBox_GetCurItemData(hPartitionScheme);
|
||||
SetPartitionSchemeAndTargetSystem(TRUE);
|
||||
SetFileSystemAndClusterSize(NULL);
|
||||
SetMBRProps();
|
||||
EnableMBRBootOptions(TRUE, TRUE);
|
||||
EnableOldBiosFixes(TRUE, TRUE);
|
||||
EnableUefiValidation(TRUE, TRUE);
|
||||
selected_pt = partition_type;
|
||||
break;
|
||||
case IDC_FILE_SYSTEM:
|
||||
|
@ -2483,8 +2457,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
selected_fs = fs_type;
|
||||
// Some FS's (such as ReFS or Large FAT32) only have QuickFormat so make sure we reflect that
|
||||
EnableQuickFormat(TRUE, TRUE);
|
||||
EnableMBRBootOptions(TRUE, TRUE);
|
||||
SetMBRProps();
|
||||
EnableOldBiosFixes(TRUE, TRUE);
|
||||
EnableExtendedLabel(TRUE, TRUE);
|
||||
break;
|
||||
case IDC_BOOT_SELECTION:
|
||||
|
@ -2511,17 +2484,10 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
// For now only zip archives are supported.
|
||||
if (GetKeyState(VK_CONTROL) & 0x8000) {
|
||||
EXT_DECL(arch_ext, NULL, __VA_GROUP__("*.zip"), __VA_GROUP__(lmprintf(MSG_309)));
|
||||
if (image_path == NULL)
|
||||
break;
|
||||
archive_path = FileDialog(FALSE, NULL, &arch_ext, NULL);
|
||||
if (archive_path != NULL) {
|
||||
struct __stat64 stat64 = { 0 };
|
||||
_stat64U(archive_path, &stat64);
|
||||
img_report.projected_size -= img_report.archive_size;
|
||||
img_report.archive_size = stat64.st_size;
|
||||
img_report.projected_size += img_report.archive_size;
|
||||
uprintf("Using archive: %s (%s)", _filenameU(archive_path),
|
||||
SizeToHumanReadable(img_report.archive_size, FALSE, FALSE));
|
||||
SizeToHumanReadable(_filesizeU(archive_path), FALSE, FALSE));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -2555,16 +2521,18 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
free(old_image_path);
|
||||
}
|
||||
}
|
||||
FormatStatus = 0;
|
||||
ErrorStatus = 0;
|
||||
if (CreateThread(NULL, 0, ImageScanThread, NULL, 0, NULL) == NULL) {
|
||||
uprintf("Unable to start ISO scanning thread");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_START_THREAD);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_START_THREAD));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case IDC_RUFUS_MBR:
|
||||
if ((HIWORD(wParam)) == BN_CLICKED)
|
||||
mbr_selected_by_user = IsChecked(IDC_RUFUS_MBR);
|
||||
case IDC_UEFI_MEDIA_VALIDATION:
|
||||
if ((HIWORD(wParam)) == BN_CLICKED) {
|
||||
validate_md5sum = IsChecked(IDC_UEFI_MEDIA_VALIDATION);
|
||||
WriteSettingBool(SETTING_ENABLE_RUNTIME_VALIDATION, validate_md5sum);
|
||||
}
|
||||
break;
|
||||
case IDC_LIST_USB_HDD:
|
||||
if ((HIWORD(wParam)) == BN_CLICKED) {
|
||||
|
@ -2586,7 +2554,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
unattend_xml_flags = 0;
|
||||
// Disable all controls except Cancel
|
||||
EnableControls(FALSE, FALSE);
|
||||
FormatStatus = 0;
|
||||
ErrorStatus = 0;
|
||||
LastWriteError = 0;
|
||||
StrArrayClear(&BlockingProcessList);
|
||||
no_confirmation_on_cancel = FALSE;
|
||||
|
@ -2596,7 +2564,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
// On exit, this thread sends message UM_FORMAT_START back to this dialog.
|
||||
if (CreateThread(NULL, 0, BootCheckThread, NULL, 0, NULL) == NULL) {
|
||||
uprintf("Unable to start boot check thread");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_START_THREAD);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_START_THREAD));
|
||||
PostMessage(hMainDialog, UM_FORMAT_COMPLETED, (WPARAM)FALSE, 0);
|
||||
}
|
||||
break;
|
||||
|
@ -2613,7 +2581,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
case IDC_HASH:
|
||||
// TODO: Move this as a fn call in hash.c?
|
||||
if ((format_thread == NULL) && (image_path != NULL)) {
|
||||
FormatStatus = 0;
|
||||
ErrorStatus = 0;
|
||||
no_confirmation_on_cancel = TRUE;
|
||||
SendMessage(hMainDialog, UM_PROGRESS_INIT, 0, 0);
|
||||
// Disable all controls except cancel
|
||||
|
@ -2627,7 +2595,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
SendMessage(hMainDialog, UM_TIMER_START, 0, 0);
|
||||
} else {
|
||||
uprintf("Unable to start hash thread");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_START_THREAD);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_START_THREAD));
|
||||
PostMessage(hMainDialog, UM_FORMAT_COMPLETED, (WPARAM)FALSE, 0);
|
||||
}
|
||||
}
|
||||
|
@ -2651,9 +2619,9 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
break;
|
||||
case UM_ENABLE_CONTROLS:
|
||||
KillTimer(hMainDialog, TID_APP_TIMER);
|
||||
if (!IS_ERROR(FormatStatus))
|
||||
if (!IS_ERROR(ErrorStatus))
|
||||
PrintInfo(0, MSG_210);
|
||||
else switch (SCODE_CODE(FormatStatus)) {
|
||||
else switch (SCODE_CODE(ErrorStatus)) {
|
||||
case ERROR_CANCELLED:
|
||||
PrintInfo(0, MSG_211);
|
||||
break;
|
||||
|
@ -2936,9 +2904,9 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
if (isMarquee) {
|
||||
SendMessage(hProgress, PBM_SETMARQUEE, FALSE, 0);
|
||||
SetTaskbarProgressValue(0, MAX_PROGRESS);
|
||||
} else if (!IS_ERROR(FormatStatus)) {
|
||||
} else if (!IS_ERROR(ErrorStatus)) {
|
||||
SetTaskbarProgressValue(MAX_PROGRESS, MAX_PROGRESS);
|
||||
} else if (SCODE_CODE(FormatStatus) == ERROR_CANCELLED) {
|
||||
} else if (SCODE_CODE(ErrorStatus) == ERROR_CANCELLED) {
|
||||
tb_state = PBST_PAUSED;
|
||||
tb_flags = TASKBAR_PAUSED;
|
||||
} else {
|
||||
|
@ -2986,6 +2954,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
// Detect processes that have write (0x2) or exec (0x4) permissions against our drive.
|
||||
// Ideally, exec should be no big deal, but Windows complains on USB ejection if a
|
||||
// process such as cmd.exe holds exec rights, so we follow suit.
|
||||
PrintStatus(0, MSG_278);
|
||||
if (GetProcessSearch(SEARCH_PROCESS_TIMEOUT, 0x06, TRUE)) {
|
||||
char title[128];
|
||||
ComboBox_GetTextU(hDeviceList, title, sizeof(title));
|
||||
|
@ -3011,7 +2980,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
format_thread = CreateThread(NULL, 0, FormatThread, (LPVOID)(uintptr_t)DeviceNum, 0, NULL);
|
||||
if (format_thread == NULL) {
|
||||
uprintf("Unable to start formatting thread");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_START_THREAD);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_START_THREAD));
|
||||
PostMessage(hMainDialog, UM_FORMAT_COMPLETED, (WPARAM)FALSE, 0);
|
||||
} else {
|
||||
SetThreadPriority(format_thread, default_thread_priority);
|
||||
|
@ -3034,8 +3003,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
EnableControls(TRUE, FALSE);
|
||||
break;
|
||||
}
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) |
|
||||
((wParam == BOOTCHECK_DOWNLOAD_ERROR) ? APPERR(ERROR_CANT_DOWNLOAD) : ERROR_GEN_FAILURE);
|
||||
ErrorStatus = RUFUS_ERROR((wParam == BOOTCHECK_DOWNLOAD_ERROR) ? APPERR(ERROR_CANT_DOWNLOAD) : ERROR_GEN_FAILURE);
|
||||
// Fall through
|
||||
|
||||
case UM_FORMAT_COMPLETED:
|
||||
|
@ -3056,13 +3024,13 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
uprintf("\r\n");
|
||||
GetDevices(DeviceNum);
|
||||
}
|
||||
if (!IS_ERROR(FormatStatus)) {
|
||||
if (!IS_ERROR(ErrorStatus)) {
|
||||
SendMessage(hProgress, PBM_SETPOS, MAX_PROGRESS, 0);
|
||||
SetTaskbarProgressState(TASKBAR_NOPROGRESS);
|
||||
PrintInfo(0, MSG_210);
|
||||
MessageBeep(MB_OK);
|
||||
FlashTaskbar(dialog_handle);
|
||||
} else if (SCODE_CODE(FormatStatus) == ERROR_CANCELLED) {
|
||||
} else if (SCODE_CODE(ErrorStatus) == ERROR_CANCELLED) {
|
||||
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_PAUSED, 0);
|
||||
SetTaskbarProgressState(TASKBAR_PAUSED);
|
||||
PrintInfo(0, MSG_211);
|
||||
|
@ -3086,7 +3054,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
"If (Get-Command -Commandtype Function Get-MpPreference -ErrorAction SilentlyContinue) { Exit 1 } Else { Exit 0 }",
|
||||
// Return 1 if Controlled Folder Access is enabled
|
||||
"Exit (Get-MpPreference).EnableControlledFolderAccess" };
|
||||
switch (SCODE_CODE(FormatStatus)) {
|
||||
switch (SCODE_CODE(ErrorStatus)) {
|
||||
case ERROR_PARTITION_FAILURE:
|
||||
case ERROR_WRITE_FAULT:
|
||||
// Find if PowerShell is available at its expected location
|
||||
|
@ -3106,7 +3074,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
break;
|
||||
}
|
||||
}
|
||||
if (SCODE_CODE(FormatStatus) == ERROR_NOT_READY) {
|
||||
if (SCODE_CODE(ErrorStatus) == ERROR_NOT_READY) {
|
||||
// A port cycle usually helps with a device not ready
|
||||
int index = ComboBox_GetCurSel(hDeviceList);
|
||||
if (index >= 0) {
|
||||
|
@ -3114,10 +3082,10 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
|||
CyclePort(index);
|
||||
}
|
||||
}
|
||||
Notification(MSG_ERROR, NULL, NULL, lmprintf(MSG_042), lmprintf(MSG_043, StrError(FormatStatus, FALSE)));
|
||||
Notification(MSG_ERROR, NULL, NULL, lmprintf(MSG_042), lmprintf(MSG_043, StrError(ErrorStatus, FALSE)));
|
||||
}
|
||||
}
|
||||
FormatStatus = 0;
|
||||
ErrorStatus = 0;
|
||||
LastWriteError = 0;
|
||||
return (INT_PTR)TRUE;
|
||||
|
||||
|
@ -3291,7 +3259,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
|||
static_strcpy(cur_dir, ".\\");
|
||||
} else {
|
||||
// Need to remove the '\\?\' prefix and reappend the trailing '\'
|
||||
strcpy(cur_dir, &cur_dir[4]);
|
||||
static_strcpy(cur_dir, &cur_dir[4]);
|
||||
static_strcat(cur_dir, "\\");
|
||||
}
|
||||
safe_closehandle(hFile);
|
||||
|
@ -3316,7 +3284,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
|||
static_strcpy(temp_dir, cur_dir);
|
||||
} else {
|
||||
// Need to remove the '\\?\' prefix or else we'll get issues with the Fido icon
|
||||
strcpy(temp_dir, &temp_dir[4]);
|
||||
static_strcpy(temp_dir, &temp_dir[4]);
|
||||
// And me must re-append the '\' that gets removed by GetFinalPathNameByHandle()
|
||||
static_strcat(temp_dir, "\\");
|
||||
}
|
||||
|
@ -3525,6 +3493,8 @@ skip_args_processing:
|
|||
use_vds = ReadSettingBool(SETTING_USE_VDS) && is_vds_available;
|
||||
usb_debug = ReadSettingBool(SETTING_ENABLE_USB_DEBUG);
|
||||
cdio_loglevel_default = usb_debug ? CDIO_LOG_DEBUG : CDIO_LOG_WARN;
|
||||
use_rufus_mbr = !ReadSettingBool(SETTING_DISABLE_RUFUS_MBR);
|
||||
validate_md5sum = ReadSettingBool(SETTING_ENABLE_RUNTIME_VALIDATION);
|
||||
detect_fakes = !ReadSettingBool(SETTING_DISABLE_FAKE_DRIVES_CHECK);
|
||||
allow_dual_uefi_bios = ReadSettingBool(SETTING_ENABLE_WIN_DUAL_EFI_BIOS);
|
||||
force_large_fat32 = ReadSettingBool(SETTING_FORCE_LARGE_FAT32_FORMAT);
|
||||
|
@ -3733,7 +3703,7 @@ relaunch:
|
|||
while(GetMessage(&msg, NULL, 0, 0)) {
|
||||
static BOOL ctrl_without_focus = FALSE;
|
||||
BOOL no_focus = (msg.message == WM_SYSKEYDOWN) && !(msg.lParam & 0x20000000);
|
||||
// ** ***************************
|
||||
// ******************************
|
||||
// .,ABCDEFGHIJKLMNOPQRSTUVWXYZ+-
|
||||
|
||||
// Sigh... The things one need to do to detect standalone use of the 'Alt' key.
|
||||
|
@ -3825,6 +3795,13 @@ extern int TestHashes(void);
|
|||
PrintStatusTimeout(lmprintf(MSG_282), lock_drive);
|
||||
continue;
|
||||
}
|
||||
// Alt-A => Toggle use of Rufus MBR for Windows boot
|
||||
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'A')) {
|
||||
use_rufus_mbr = !use_rufus_mbr;
|
||||
WriteSettingBool(SETTING_DISABLE_RUFUS_MBR, !use_rufus_mbr);
|
||||
PrintStatusTimeout(lmprintf(MSG_349), use_rufus_mbr);
|
||||
continue;
|
||||
}
|
||||
// Alt-B => Toggle fake drive detection during bad blocks check
|
||||
// By default, Rufus will check for fake USB flash drives that mistakenly present
|
||||
// more capacity than they already have by looping over the flash. This check which
|
||||
|
@ -3847,7 +3824,7 @@ extern int TestHashes(void);
|
|||
if ((msg.message == WM_SYSKEYDOWN) && (msg.wParam == 'D')) {
|
||||
static_sprintf(tmp_path, "%s\\%s", app_data_dir, FILES_DIR);
|
||||
PrintStatusDebug(STATUS_MSG_TIMEOUT, MSG_264, tmp_path);
|
||||
SHDeleteDirectoryExU(NULL, tmp_path, FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION);
|
||||
SHDeleteDirectoryExU(NULL, tmp_path, FOF_NO_UI);
|
||||
user_deleted_rufus_dir = TRUE;
|
||||
continue;
|
||||
}
|
||||
|
|
193
src/rufus.h
193
src/rufus.h
|
@ -25,10 +25,18 @@
|
|||
#pragma warning(disable: 6258) // I know what I'm using TerminateThread for
|
||||
#pragma warning(disable: 26451) // Stop bugging me with casts already!
|
||||
#pragma warning(disable: 28159) // I'll keep using GetVersionEx(), thank you very much...
|
||||
// Enable C11's _Static_assert (requires VS2015 or later)
|
||||
#define _Static_assert static_assert
|
||||
#endif
|
||||
|
||||
#pragma once
|
||||
|
||||
/* Convenient to have around */
|
||||
#define KB 1024LL
|
||||
#define MB 1048576LL
|
||||
#define GB 1073741824LL
|
||||
#define TB 1099511627776LL
|
||||
|
||||
/*
|
||||
* Features not ready for prime time and that may *DESTROY* your data - USE AT YOUR OWN RISKS!
|
||||
*/
|
||||
|
@ -60,9 +68,9 @@
|
|||
#define DRIVE_ACCESS_RETRIES 150 // How many times we should retry
|
||||
#define DRIVE_INDEX_MIN 0x00000080
|
||||
#define DRIVE_INDEX_MAX 0x000000C0
|
||||
#define MIN_DRIVE_SIZE 8 // Minimum size a drive must have, to be formattable (in MB)
|
||||
#define MIN_EXTRA_PART_SIZE (1024*1024) // Minimum size of the extra partition, in bytes
|
||||
#define MIN_EXT_SIZE (256*1024*1024) // Minimum size we allow for ext formatting
|
||||
#define MIN_DRIVE_SIZE (8 * MB) // Minimum size a drive must have, to be formattable
|
||||
#define MIN_EXTRA_PART_SIZE (1 * MB) // Minimum size of the extra partition, in bytes
|
||||
#define MIN_EXT_SIZE (256 * MB) // Minimum size we allow for ext formatting
|
||||
#define MAX_DRIVES (DRIVE_INDEX_MAX - DRIVE_INDEX_MIN)
|
||||
#define MAX_TOOLTIPS 128
|
||||
#define MAX_SIZE_SUFFIXES 6 // bytes, KB, MB, GB, TB, PB
|
||||
|
@ -76,8 +84,8 @@
|
|||
#define MAX_PARTITIONS 16 // Maximum number of partitions we handle
|
||||
#define MAX_ESP_TOGGLE 8 // Maximum number of entries we record to toggle GPT ESP back and forth
|
||||
#define MAX_IGNORE_USB 8 // Maximum number of USB drives we want to ignore
|
||||
#define MAX_ISO_TO_ESP_SIZE 1024 // Maximum size we allow for the ISO → ESP option (in MB)
|
||||
#define MAX_DEFAULT_LIST_CARD_SIZE 200 // Size above which we don't list a card without enable HDD or Alt-F (in GB)
|
||||
#define MAX_ISO_TO_ESP_SIZE (1 * GB) // Maximum size we allow for the ISO → ESP option
|
||||
#define MAX_DEFAULT_LIST_CARD_SIZE (500 * GB) // Size above which we don't list a card without enable HDD or Alt-F
|
||||
#define MAX_SECTORS_TO_CLEAR 128 // nb sectors to zap when clearing the MBR/GPT (must be >34)
|
||||
#define MAX_USERNAME_LENGTH 128 // Maximum size we'll accept for a WUE specified username
|
||||
#define MAX_WININST 4 // Max number of install[.wim|.esd] we can handle on an image
|
||||
|
@ -98,14 +106,15 @@
|
|||
#define BADBLOCK_PATTERN_SLC {0x00, 0xff, 0x55, 0xaa}
|
||||
#define BADCLOCK_PATTERN_MLC {0x00, 0xff, 0x33, 0xcc}
|
||||
#define BADBLOCK_PATTERN_TLC {0x00, 0xff, 0x1c71c7, 0xe38e38}
|
||||
#define BADBLOCK_BLOCK_SIZE (512 * 1024)
|
||||
#define LARGE_FAT32_SIZE (32 * 1073741824LL) // Size at which we need to use fat32format
|
||||
#define BADBLOCK_BLOCK_SIZE (512 * KB)
|
||||
#define LARGE_FAT32_SIZE (32 * GB) // Size at which we need to use fat32format
|
||||
#define UDF_FORMAT_SPEED 3.1f // Speed estimate at which we expect UDF drives to be formatted (GB/s)
|
||||
#define UDF_FORMAT_WARN 20 // Duration (in seconds) above which we warn about long UDF formatting times
|
||||
#define MAX_FAT32_SIZE 2.0f // Threshold above which we disable FAT32 formatting (in TB)
|
||||
#define MAX_FAT32_SIZE (2 * TB) // Threshold above which we disable FAT32 formatting
|
||||
#define FAT32_CLUSTER_THRESHOLD 1.011f // For FAT32, cluster size changes don't occur at power of 2 boundaries but slightly above
|
||||
#define DD_BUFFER_SIZE (32 * 1024 * 1024) // Minimum size of buffer to use for DD operations
|
||||
#define DD_BUFFER_SIZE (32 * MB) // Minimum size of buffer to use for DD operations
|
||||
#define UBUFFER_SIZE 4096
|
||||
#define ISO_BUFFER_SIZE (64 * KB) // Buffer size used for ISO data extraction
|
||||
#define RSA_SIGNATURE_SIZE 256
|
||||
#define CBN_SELCHANGE_INTERNAL (CBN_SELCHANGE + 256)
|
||||
#if defined(RUFUS_TEST)
|
||||
|
@ -137,35 +146,36 @@
|
|||
#define PERCENTAGE(percent, value) ((1ULL * (percent) * (value)) / 100ULL)
|
||||
#define IsChecked(CheckBox_ID) (IsDlgButtonChecked(hMainDialog, CheckBox_ID) == BST_CHECKED)
|
||||
#define MB_IS_RTL (right_to_left_mode?MB_RTLREADING|MB_RIGHT:0)
|
||||
#define CHECK_FOR_USER_CANCEL if (IS_ERROR(FormatStatus) && (SCODE_CODE(FormatStatus) == ERROR_CANCELLED)) goto out
|
||||
#define CHECK_FOR_USER_CANCEL if (IS_ERROR(ErrorStatus) && (SCODE_CODE(ErrorStatus) == ERROR_CANCELLED)) goto out
|
||||
// Bit masks used for the display of additional image options in the UI
|
||||
#define IMOP_WINTOGO 0x01
|
||||
#define IMOP_PERSISTENCE 0x02
|
||||
|
||||
#define ComboBox_GetCurItemData(hCtrl) ComboBox_GetItemData(hCtrl, ComboBox_GetCurSel(hCtrl))
|
||||
|
||||
#define safe_free(p) do {free((void*)p); p = NULL;} while(0)
|
||||
#define safe_mm_free(p) do {_mm_free((void*)p); p = NULL;} while(0)
|
||||
#define safe_min(a, b) min((size_t)(a), (size_t)(b))
|
||||
#define safe_strcp(dst, dst_max, src, count) do {memcpy(dst, src, safe_min(count, dst_max)); \
|
||||
((char*)(dst))[safe_min(count, dst_max)-1] = 0;} while(0)
|
||||
#define safe_strcpy(dst, dst_max, src) safe_strcp(dst, dst_max, src, safe_strlen(src)+1)
|
||||
#define safe_free(p) do { free((void*)p); p = NULL; } while(0)
|
||||
#define safe_mm_free(p) do { _mm_free((void*)p); p = NULL; } while(0)
|
||||
static __inline void safe_strcp(char* dst, const size_t dst_max, const char* src, const size_t count) {
|
||||
memmove(dst, src, min(count, dst_max));
|
||||
dst[min(count, dst_max) - 1] = 0;
|
||||
}
|
||||
#define safe_strcpy(dst, dst_max, src) safe_strcp(dst, dst_max, src, safe_strlen(src) + 1)
|
||||
#define static_strcpy(dst, src) safe_strcpy(dst, sizeof(dst), src)
|
||||
#define safe_strncat(dst, dst_max, src, count) strncat(dst, src, safe_min(count, (dst_max) - safe_strlen(dst) - 1))
|
||||
#define safe_strcat(dst, dst_max, src) safe_strncat(dst, dst_max, src, safe_strlen(src)+1)
|
||||
#define safe_strcat(dst, dst_max, src) strncat_s(dst, dst_max, src, _TRUNCATE)
|
||||
#define static_strcat(dst, src) safe_strcat(dst, sizeof(dst), src)
|
||||
#define safe_strcmp(str1, str2) strcmp(((str1==NULL)?"<NULL>":str1), ((str2==NULL)?"<NULL>":str2))
|
||||
#define safe_strstr(str1, str2) strstr(((str1==NULL)?"<NULL>":str1), ((str2==NULL)?"<NULL>":str2))
|
||||
#define safe_stricmp(str1, str2) _stricmp(((str1==NULL)?"<NULL>":str1), ((str2==NULL)?"<NULL>":str2))
|
||||
#define safe_strncmp(str1, str2, count) strncmp(((str1==NULL)?"<NULL>":str1), ((str2==NULL)?"<NULL>":str2), count)
|
||||
#define safe_strnicmp(str1, str2, count) _strnicmp(((str1==NULL)?"<NULL>":str1), ((str2==NULL)?"<NULL>":str2), count)
|
||||
#define safe_closehandle(h) do {if ((h != INVALID_HANDLE_VALUE) && (h != NULL)) {CloseHandle(h); h = INVALID_HANDLE_VALUE;}} while(0)
|
||||
#define safe_release_dc(hDlg, hDC) do {if ((hDC != INVALID_HANDLE_VALUE) && (hDC != NULL)) {ReleaseDC(hDlg, hDC); hDC = NULL;}} while(0)
|
||||
#define safe_sprintf(dst, count, ...) do {_snprintf(dst, count, __VA_ARGS__); (dst)[(count)-1] = 0; } while(0)
|
||||
#define safe_strcmp(str1, str2) strcmp(((str1 == NULL) ? "<NULL>" : str1), ((str2 == NULL) ? "<NULL>" : str2))
|
||||
#define safe_strstr(str1, str2) strstr(((str1 == NULL) ? "<NULL>" : str1), ((str2 == NULL) ? "<NULL>" : str2))
|
||||
#define safe_stricmp(str1, str2) _stricmp(((str1 == NULL) ? "<NULL>" : str1), ((str2 == NULL) ? "<NULL>" : str2))
|
||||
#define safe_strncmp(str1, str2, count) strncmp(((str1 == NULL) ? "<NULL>" : str1), ((str2 == NULL) ? "<NULL>" : str2), count)
|
||||
#define safe_strnicmp(str1, str2, count) _strnicmp(((str1 == NULL) ? "<NULL>" : str1), ((str2 == NULL) ? "<NULL>" : str2), count)
|
||||
#define safe_closehandle(h) do { if ((h != INVALID_HANDLE_VALUE) && (h != NULL)) { CloseHandle(h); h = INVALID_HANDLE_VALUE; } } while(0)
|
||||
#define safe_release_dc(hDlg, hDC) do { if ((hDC != INVALID_HANDLE_VALUE) && (hDC != NULL)) { ReleaseDC(hDlg, hDC); hDC = NULL; } } while(0)
|
||||
#define safe_sprintf(dst, count, ...) do { size_t _count = count; char* _dst = dst; _snprintf_s(_dst, _count, _TRUNCATE, __VA_ARGS__); \
|
||||
_dst[(_count) - 1] = 0; } while(0)
|
||||
#define static_sprintf(dst, ...) safe_sprintf(dst, sizeof(dst), __VA_ARGS__)
|
||||
#define safe_atoi(str) ((((char*)(str))==NULL)?0:atoi(str))
|
||||
#define safe_strlen(str) ((((char*)(str))==NULL)?0:strlen(str))
|
||||
#define safe_strdup(str) ((((char*)(str))==NULL)?NULL:_strdup(str))
|
||||
#define safe_atoi(str) ((((char*)(str))==NULL) ? 0 : atoi(str))
|
||||
#define safe_strlen(str) ((((char*)(str))==NULL) ? 0 : strlen(str))
|
||||
#define safe_strdup(str) ((((char*)(str))==NULL) ? NULL : _strdup(str))
|
||||
#if defined(_MSC_VER)
|
||||
#define safe_vsnprintf(buf, size, format, arg) _vsnprintf_s(buf, size, _TRUNCATE, format, arg)
|
||||
#else
|
||||
|
@ -260,6 +270,7 @@ enum action_type {
|
|||
OP_FILE_COPY,
|
||||
OP_PATCH,
|
||||
OP_FINALIZE,
|
||||
OP_EXTRACT_ZIP,
|
||||
OP_MAX
|
||||
};
|
||||
|
||||
|
@ -307,14 +318,6 @@ enum image_option_type {
|
|||
IMOP_MAX
|
||||
};
|
||||
|
||||
enum hash_type {
|
||||
HASH_MD5 = 0,
|
||||
HASH_SHA1,
|
||||
HASH_SHA256,
|
||||
HASH_SHA512,
|
||||
HASH_MAX
|
||||
};
|
||||
|
||||
enum file_io_type {
|
||||
FILE_IO_READ = 0,
|
||||
FILE_IO_WRITE,
|
||||
|
@ -388,7 +391,6 @@ typedef struct {
|
|||
char efi_boot_path[ARCH_MAX][30]; // paths of detected UEFI bootloaders
|
||||
char efi_img_path[128]; // path to an efi.img file
|
||||
uint64_t image_size;
|
||||
uint64_t archive_size;
|
||||
uint64_t projected_size;
|
||||
int64_t mismatch_size;
|
||||
uint32_t wininst_version;
|
||||
|
@ -415,6 +417,7 @@ typedef struct {
|
|||
BOOLEAN has_grub4dos;
|
||||
uint8_t has_grub2;
|
||||
BOOLEAN has_compatresources_dll;
|
||||
BOOLEAN has_panther_unattend;
|
||||
BOOLEAN has_kolibrios;
|
||||
BOOLEAN needs_syslinux_overwrite;
|
||||
BOOLEAN needs_ntfs;
|
||||
|
@ -481,6 +484,51 @@ typedef struct {
|
|||
uint32_t* address; // 32-bit will do, as we're not dealing with >4GB DLLs...
|
||||
} dll_resolver_t;
|
||||
|
||||
/* Alignment macro */
|
||||
#if defined(__GNUC__)
|
||||
#define ALIGNED(m) __attribute__ ((__aligned__(m)))
|
||||
#elif defined(_MSC_VER)
|
||||
#define ALIGNED(m) __declspec(align(m))
|
||||
#endif
|
||||
|
||||
/* Hash definitions */
|
||||
enum hash_type {
|
||||
HASH_MD5 = 0,
|
||||
HASH_SHA1,
|
||||
HASH_SHA256,
|
||||
HASH_SHA512,
|
||||
HASH_MAX
|
||||
};
|
||||
|
||||
/* Blocksize for each hash algorithm - Must be a power of 2 */
|
||||
#define MD5_BLOCKSIZE 64
|
||||
#define SHA1_BLOCKSIZE 64
|
||||
#define SHA256_BLOCKSIZE 64
|
||||
#define SHA512_BLOCKSIZE 128
|
||||
#define MAX_BLOCKSIZE SHA512_BLOCKSIZE
|
||||
|
||||
/* Hashsize for each hash algorithm */
|
||||
#define MD5_HASHSIZE 16
|
||||
#define SHA1_HASHSIZE 20
|
||||
#define SHA256_HASHSIZE 32
|
||||
#define SHA512_HASHSIZE 64
|
||||
#define MAX_HASHSIZE SHA512_HASHSIZE
|
||||
|
||||
/* Context for the hash algorithms */
|
||||
typedef struct ALIGNED(64) {
|
||||
uint8_t buf[MAX_BLOCKSIZE];
|
||||
uint64_t state[8];
|
||||
uint64_t bytecount;
|
||||
} HASH_CONTEXT;
|
||||
|
||||
/* Hash functions */
|
||||
typedef void hash_init_t(HASH_CONTEXT* ctx);
|
||||
typedef void hash_write_t(HASH_CONTEXT* ctx, const uint8_t* buf, size_t len);
|
||||
typedef void hash_final_t(HASH_CONTEXT* ctx);
|
||||
extern hash_init_t* hash_init[HASH_MAX];
|
||||
extern hash_write_t* hash_write[HASH_MAX];
|
||||
extern hash_final_t* hash_final[HASH_MAX];
|
||||
|
||||
#ifndef __VA_GROUP__
|
||||
#define __VA_GROUP__(...) __VA_ARGS__
|
||||
#endif
|
||||
|
@ -585,6 +633,35 @@ typedef struct {
|
|||
#define UNATTEND_OFFLINE_SERVICING_MASK (UNATTEND_OFFLINE_INTERNAL_DRIVES | UNATTEND_FORCE_S_MODE)
|
||||
#define UNATTEND_DEFAULT_SELECTION_MASK (UNATTEND_SECUREBOOT_TPM_MINRAM | UNATTEND_NO_ONLINE_ACCOUNT | UNATTEND_OFFLINE_INTERNAL_DRIVES)
|
||||
|
||||
/* Hash tables */
|
||||
typedef struct htab_entry {
|
||||
uint32_t used;
|
||||
char* str;
|
||||
void* data;
|
||||
} htab_entry;
|
||||
typedef struct htab_table {
|
||||
htab_entry* table;
|
||||
uint32_t size;
|
||||
uint32_t filled;
|
||||
} htab_table;
|
||||
#define HTAB_EMPTY {NULL, 0, 0}
|
||||
extern BOOL htab_create(uint32_t nel, htab_table* htab);
|
||||
extern void htab_destroy(htab_table* htab);
|
||||
extern uint32_t htab_hash(char* str, htab_table* htab);
|
||||
|
||||
/* Basic String Array */
|
||||
typedef struct {
|
||||
char** String;
|
||||
uint32_t Index; // Current array size
|
||||
uint32_t Max; // Maximum array size
|
||||
} StrArray;
|
||||
extern void StrArrayCreate(StrArray* arr, uint32_t initial_size);
|
||||
extern int32_t StrArrayAdd(StrArray* arr, const char* str, BOOL);
|
||||
extern int32_t StrArrayFind(StrArray* arr, const char* str);
|
||||
extern void StrArrayClear(StrArray* arr);
|
||||
extern void StrArrayDestroy(StrArray* arr);
|
||||
#define IsStrArrayEmpty(arr) (arr.Index == 0)
|
||||
|
||||
/*
|
||||
* Globals
|
||||
*/
|
||||
|
@ -593,9 +670,9 @@ extern RUFUS_IMG_REPORT img_report;
|
|||
extern HINSTANCE hMainInstance;
|
||||
extern HWND hMainDialog, hLogDialog, hStatus, hDeviceList, hCapacity, hImageOption;
|
||||
extern HWND hPartitionScheme, hTargetSystem, hFileSystem, hClusterSize, hLabel, hBootType;
|
||||
extern HWND hNBPasses, hLog, hInfo, hProgress, hDiskID;
|
||||
extern HWND hNBPasses, hLog, hInfo, hProgress;
|
||||
extern WORD selected_langid;
|
||||
extern DWORD FormatStatus, DownloadStatus, MainThreadId, LastWriteError;
|
||||
extern DWORD ErrorStatus, DownloadStatus, MainThreadId, LastWriteError;
|
||||
extern BOOL use_own_c32[NB_OLD_C32], detect_fakes, op_in_progress, right_to_left_mode;
|
||||
extern BOOL allow_dual_uefi_bios, large_drive, usb_debug;
|
||||
extern uint8_t image_options, *pe256ssp;
|
||||
|
@ -658,7 +735,9 @@ extern SIZE GetTextSize(HWND hCtrl, char* txt);
|
|||
extern BOOL ExtractAppIcon(const char* filename, BOOL bSilent);
|
||||
extern BOOL ExtractDOS(const char* path);
|
||||
extern BOOL ExtractISO(const char* src_iso, const char* dest_dir, BOOL scan);
|
||||
extern BOOL ExtractZip(const char* src_zip, const char* dest_dir);
|
||||
extern int64_t ExtractISOFile(const char* iso, const char* iso_file, const char* dest_file, DWORD attributes);
|
||||
extern uint32_t ReadISOFileToBuffer(const char* iso, const char* iso_file, uint8_t** buf);
|
||||
extern BOOL CopySKUSiPolicy(const char* drive_name);
|
||||
extern BOOL HasEfiImgBootLoaders(void);
|
||||
extern BOOL DumpFatDir(const char* path, int32_t cluster);
|
||||
|
@ -667,7 +746,7 @@ extern uint16_t GetSyslinuxVersion(char* buf, size_t buf_size, char** ext);
|
|||
extern BOOL SetAutorun(const char* path);
|
||||
extern char* FileDialog(BOOL save, char* path, const ext_t* ext, UINT* selected_ext);
|
||||
extern BOOL FileIO(enum file_io_type io_type, char* path, char** buffer, DWORD* size);
|
||||
extern unsigned char* GetResource(HMODULE module, char* name, char* type, const char* desc, DWORD* len, BOOL duplicate);
|
||||
extern uint8_t* GetResource(HMODULE module, char* name, char* type, const char* desc, DWORD* len, BOOL duplicate);
|
||||
extern DWORD GetResourceSize(HMODULE module, char* name, char* type, const char* desc);
|
||||
extern DWORD RunCommandWithProgress(const char* cmdline, const char* dir, BOOL log, int msg);
|
||||
#define RunCommand(cmd, dir, log) RunCommandWithProgress(cmd, dir, log, 0)
|
||||
|
@ -717,6 +796,7 @@ extern HANDLE CreateFileWithTimeout(LPCSTR lpFileName, DWORD dwDesiredAccess, DW
|
|||
extern BOOL SetThreadAffinity(DWORD_PTR* thread_affinity, size_t num_threads);
|
||||
extern BOOL HashFile(const unsigned type, const char* path, uint8_t* sum);
|
||||
extern BOOL PE256File(const char* path, uint8_t* hash);
|
||||
extern void UpdateMD5Sum(const char* dest_dir, const char* md5sum_name);
|
||||
extern BOOL HashBuffer(const unsigned type, const uint8_t* buf, const size_t len, uint8_t* sum);
|
||||
extern BOOL IsFileInDB(const char* path);
|
||||
extern int IsBootloaderRevoked(const char* path);
|
||||
|
@ -746,35 +826,6 @@ extern uint32_t ResolveDllAddress(dll_resolver_t* resolver);
|
|||
|
||||
DWORD WINAPI HashThread(void* param);
|
||||
|
||||
/* Hash tables */
|
||||
typedef struct htab_entry {
|
||||
uint32_t used;
|
||||
char* str;
|
||||
void* data;
|
||||
} htab_entry;
|
||||
typedef struct htab_table {
|
||||
htab_entry *table;
|
||||
uint32_t size;
|
||||
uint32_t filled;
|
||||
} htab_table;
|
||||
#define HTAB_EMPTY {NULL, 0, 0}
|
||||
extern BOOL htab_create(uint32_t nel, htab_table* htab);
|
||||
extern void htab_destroy(htab_table* htab);
|
||||
extern uint32_t htab_hash(char* str, htab_table* htab);
|
||||
|
||||
/* Basic String Array */
|
||||
typedef struct {
|
||||
char** String;
|
||||
uint32_t Index; // Current array size
|
||||
uint32_t Max; // Maximum array size
|
||||
} StrArray;
|
||||
extern void StrArrayCreate(StrArray* arr, uint32_t initial_size);
|
||||
extern int32_t StrArrayAdd(StrArray* arr, const char* str, BOOL );
|
||||
extern int32_t StrArrayFind(StrArray* arr, const char* str);
|
||||
extern void StrArrayClear(StrArray* arr);
|
||||
extern void StrArrayDestroy(StrArray* arr);
|
||||
#define IsStrArrayEmpty(arr) (arr.Index == 0)
|
||||
|
||||
/*
|
||||
* typedefs for the function prototypes. Use the something like:
|
||||
* PF_DECL(FormatEx);
|
||||
|
@ -854,3 +905,5 @@ out:
|
|||
#define ERROR_CANT_MOUNT_VOLUME 0x120C
|
||||
#define ERROR_BAD_SIGNATURE 0x120D
|
||||
#define ERROR_CANT_DOWNLOAD 0x120E
|
||||
|
||||
#define RUFUS_ERROR(err) (ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | (err))
|
||||
|
|
28
src/rufus.rc
28
src/rufus.rc
|
@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
|||
IDD_DIALOG DIALOGEX 12, 12, 232, 326
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
EXSTYLE WS_EX_ACCEPTFILES
|
||||
CAPTION "Rufus 4.4.2103"
|
||||
CAPTION "Rufus 4.5.2175"
|
||||
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
||||
BEGIN
|
||||
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
|
||||
|
@ -59,8 +59,8 @@ BEGIN
|
|||
CONTROL "List USB Hard Drives",IDC_LIST_USB_HDD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,119,216,10
|
||||
CONTROL "Add fixes for old BIOSes (extra partition, align, etc.)",IDC_OLD_BIOS_FIXES,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,129,216,10
|
||||
CONTROL "Use Rufus MBR with BIOS ID",IDC_RUFUS_MBR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,139,110,10
|
||||
COMBOBOX IDC_DISK_ID,128,139,96,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
|
||||
CONTROL "Enable runtime UEFI media validation",IDC_UEFI_MEDIA_VALIDATION,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,139,216,10
|
||||
LTEXT "Format Options",IDS_FORMAT_OPTIONS_TXT,8,152,57,12,NOT WS_GROUP
|
||||
LTEXT "Volume label",IDS_LABEL_TXT,8,167,216,8
|
||||
EDITTEXT IDC_LABEL,8,176,216,12,ES_AUTOHSCROLL
|
||||
|
@ -305,6 +305,11 @@ BEGIN
|
|||
"IDR_FD_EGA18_CPX RCDATA ""../res/freedos/EGA18.CPX""\r\n"
|
||||
"IDR_XT_HOGGER RCDATA ""../res/hogger/hogger.exe""\r\n"
|
||||
"IDR_UEFI_NTFS RCDATA ""../res/uefi/uefi-ntfs.img""\r\n"
|
||||
"IDR_MD5_BOOTIA32 RCDATA ""../res/md5/bootia32.efi""\r\n"
|
||||
"IDR_MD5_BOOTX64 RCDATA ""../res/md5/bootx64.efi""\r\n"
|
||||
"IDR_MD5_BOOTARM RCDATA ""../res/md5/bootarm.efi""\r\n"
|
||||
"IDR_MD5_BOOTAA64 RCDATA ""../res/md5/bootaa64.efi""\r\n"
|
||||
"IDR_MD5_BOOTRISCV64 RCDATA ""../res/md5/bootriscv64.efi""\r\n"
|
||||
"IDI_LANG_16 RCDATA ""../res/icons/lang-16.png""\r\n"
|
||||
"IDI_INFO_16 RCDATA ""../res/icons/info-16.png""\r\n"
|
||||
"IDI_SETTINGS_16 RCDATA ""../res/icons/settings-16.png""\r\n"
|
||||
|
@ -392,8 +397,8 @@ END
|
|||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 4,4,2103,0
|
||||
PRODUCTVERSION 4,4,2103,0
|
||||
FILEVERSION 4,5,2175,0
|
||||
PRODUCTVERSION 4,5,2175,0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
|
@ -411,13 +416,13 @@ BEGIN
|
|||
VALUE "Comments", "https://rufus.ie"
|
||||
VALUE "CompanyName", "Akeo Consulting"
|
||||
VALUE "FileDescription", "Rufus"
|
||||
VALUE "FileVersion", "4.4.2103"
|
||||
VALUE "FileVersion", "4.5.2175"
|
||||
VALUE "InternalName", "Rufus"
|
||||
VALUE "LegalCopyright", "© 2011-2024 Pete Batard (GPL v3)"
|
||||
VALUE "LegalCopyright", "<EFBFBD> 2011-2024 Pete Batard (GPL v3)"
|
||||
VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html"
|
||||
VALUE "OriginalFilename", "rufus-4.4.exe"
|
||||
VALUE "OriginalFilename", "rufus-4.5.exe"
|
||||
VALUE "ProductName", "Rufus"
|
||||
VALUE "ProductVersion", "4.4.2103"
|
||||
VALUE "ProductVersion", "4.5.2175"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
|
@ -485,6 +490,11 @@ IDR_FD_EGA17_CPX RCDATA "../res/freedos/EGA17.CPX"
|
|||
IDR_FD_EGA18_CPX RCDATA "../res/freedos/EGA18.CPX"
|
||||
IDR_XT_HOGGER RCDATA "../res/hogger/hogger.exe"
|
||||
IDR_UEFI_NTFS RCDATA "../res/uefi/uefi-ntfs.img"
|
||||
IDR_MD5_BOOTIA32 RCDATA "../res/md5/bootia32.efi"
|
||||
IDR_MD5_BOOTX64 RCDATA "../res/md5/bootx64.efi"
|
||||
IDR_MD5_BOOTARM RCDATA "../res/md5/bootarm.efi"
|
||||
IDR_MD5_BOOTAA64 RCDATA "../res/md5/bootaa64.efi"
|
||||
IDR_MD5_BOOTRISCV64 RCDATA "../res/md5/bootriscv64.efi"
|
||||
IDI_LANG_16 RCDATA "../res/icons/lang-16.png"
|
||||
IDI_INFO_16 RCDATA "../res/icons/info-16.png"
|
||||
IDI_SETTINGS_16 RCDATA "../res/icons/settings-16.png"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Settings access, through either registry or INI file
|
||||
* Copyright © 2015-2023 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2015-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -35,10 +35,12 @@ extern char* ini_file;
|
|||
#define SETTING_DEFAULT_THREAD_PRIORITY "DefaultThreadPriority"
|
||||
#define SETTING_DISABLE_FAKE_DRIVES_CHECK "DisableFakeDrivesCheck"
|
||||
#define SETTING_DISABLE_LGP "DisableLGP"
|
||||
#define SETTING_DISABLE_RUFUS_MBR "DisableRufusMBR"
|
||||
#define SETTING_DISABLE_SECURE_BOOT_NOTICE "DisableSecureBootNotice"
|
||||
#define SETTING_DISABLE_VHDS "DisableVHDs"
|
||||
#define SETTING_ENABLE_EXTRA_HASHES "EnableExtraHashes"
|
||||
#define SETTING_ENABLE_FILE_INDEXING "EnableFileIndexing"
|
||||
#define SETTING_ENABLE_RUNTIME_VALIDATION "EnableRuntimeValidation"
|
||||
#define SETTING_ENABLE_USB_DEBUG "EnableUsbDebug"
|
||||
#define SETTING_ENABLE_VMDK_DETECTION "EnableVmdkDetection"
|
||||
#define SETTING_ENABLE_WIN_DUAL_EFI_BIOS "EnableWindowsDualUefiBiosMode"
|
||||
|
|
26
src/stdfn.c
26
src/stdfn.c
|
@ -80,8 +80,9 @@ BOOL htab_create(uint32_t nel, htab_table* htab)
|
|||
if (htab == NULL) {
|
||||
return FALSE;
|
||||
}
|
||||
assert(htab->table == NULL);
|
||||
if (htab->table != NULL) {
|
||||
uprintf("warning: htab_create() was called with a non empty table");
|
||||
uprintf("Warning: htab_create() was called with a non empty table");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -96,7 +97,7 @@ BOOL htab_create(uint32_t nel, htab_table* htab)
|
|||
// allocate memory and zero out.
|
||||
htab->table = (htab_entry*)calloc(htab->size + 1, sizeof(htab_entry));
|
||||
if (htab->table == NULL) {
|
||||
uprintf("could not allocate space for hash table\n");
|
||||
uprintf("Could not allocate space for hash table");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -166,7 +167,7 @@ uint32_t htab_hash(char* str, htab_table* htab)
|
|||
// existing hash
|
||||
return idx;
|
||||
}
|
||||
// uprintf("hash collision ('%s' vs '%s')\n", str, htab->table[idx].str);
|
||||
// uprintf("Hash collision ('%s' vs '%s')", str, htab->table[idx].str);
|
||||
|
||||
// Second hash function, as suggested in [Knuth]
|
||||
hval2 = 1 + hval % (htab->size - 2);
|
||||
|
@ -196,19 +197,20 @@ uint32_t htab_hash(char* str, htab_table* htab)
|
|||
// Not found => New entry
|
||||
|
||||
// If the table is full return an error
|
||||
assert(htab->filled < htab->size);
|
||||
if (htab->filled >= htab->size) {
|
||||
uprintf("hash table is full (%d entries)", htab->size);
|
||||
uprintf("Hash table is full (%d entries)", htab->size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
safe_free(htab->table[idx].str);
|
||||
htab->table[idx].used = hval;
|
||||
htab->table[idx].str = (char*) malloc(safe_strlen(str)+1);
|
||||
htab->table[idx].str = (char*) malloc(safe_strlen(str) + 1);
|
||||
if (htab->table[idx].str == NULL) {
|
||||
uprintf("could not duplicate string for hash table\n");
|
||||
uprintf("Could not duplicate string for hash table");
|
||||
return 0;
|
||||
}
|
||||
memcpy(htab->table[idx].str, str, safe_strlen(str)+1);
|
||||
memcpy(htab->table[idx].str, str, safe_strlen(str) + 1);
|
||||
++htab->filled;
|
||||
|
||||
return idx;
|
||||
|
@ -741,12 +743,12 @@ out:
|
|||
* size is allocated for the resource. Else the buffer is allocate for
|
||||
* the resource size.
|
||||
*/
|
||||
unsigned char* GetResource(HMODULE module, char* name, char* type, const char* desc, DWORD* len, BOOL duplicate)
|
||||
uint8_t* GetResource(HMODULE module, char* name, char* type, const char* desc, DWORD* len, BOOL duplicate)
|
||||
{
|
||||
HGLOBAL res_handle;
|
||||
HRSRC res;
|
||||
DWORD res_len;
|
||||
unsigned char* p = NULL;
|
||||
uint8_t* p = NULL;
|
||||
|
||||
res = FindResourceA(module, name, type);
|
||||
if (res == NULL) {
|
||||
|
@ -763,7 +765,7 @@ unsigned char* GetResource(HMODULE module, char* name, char* type, const char* d
|
|||
if (duplicate) {
|
||||
if (*len == 0)
|
||||
*len = res_len;
|
||||
p = (unsigned char*)calloc(*len, 1);
|
||||
p = calloc(*len, 1);
|
||||
if (p == NULL) {
|
||||
uprintf("Could not allocate resource '%s'", desc);
|
||||
goto out;
|
||||
|
@ -772,7 +774,7 @@ unsigned char* GetResource(HMODULE module, char* name, char* type, const char* d
|
|||
if (res_len > *len)
|
||||
uprintf("WARNING: Resource '%s' was truncated by %d bytes!", desc, res_len - *len);
|
||||
} else {
|
||||
p = (unsigned char*)LockResource(res_handle);
|
||||
p = LockResource(res_handle);
|
||||
}
|
||||
*len = res_len;
|
||||
|
||||
|
@ -828,7 +830,7 @@ DWORD RunCommandWithProgress(const char* cmd, const char* dir, BOOL log, int msg
|
|||
UpdateProgressWithInfoInit(NULL, FALSE);
|
||||
while (1) {
|
||||
// Check for user cancel
|
||||
if (IS_ERROR(FormatStatus) && (SCODE_CODE(FormatStatus) == ERROR_CANCELLED)) {
|
||||
if (IS_ERROR(ErrorStatus) && (SCODE_CODE(ErrorStatus) == ERROR_CANCELLED)) {
|
||||
if (!TerminateProcess(pi.hProcess, ERROR_CANCELLED)) {
|
||||
uprintf("Could not terminate command: %s", WindowsErrorString());
|
||||
} else switch (WaitForSingleObject(pi.hProcess, 5000)) {
|
||||
|
|
61
src/stdio.c
61
src/stdio.c
|
@ -40,6 +40,7 @@
|
|||
#include "resource.h"
|
||||
#include "msapi_utf8.h"
|
||||
#include "localization.h"
|
||||
#include "bled/bled.h"
|
||||
|
||||
#define FACILITY_WIM 322
|
||||
#define DEFAULT_BASE_ADDRESS 0x100000000ULL
|
||||
|
@ -52,6 +53,7 @@ const HANDLE hRufus = (HANDLE)0x0000005275667573ULL; // "\0\0\0Rufus"
|
|||
HWND hStatus;
|
||||
size_t ubuffer_pos = 0;
|
||||
char ubuffer[UBUFFER_SIZE]; // Buffer for ubpushf() messages we don't log right away
|
||||
static uint64_t archive_size;
|
||||
|
||||
#pragma pack(push, 1)
|
||||
typedef struct {
|
||||
|
@ -123,7 +125,8 @@ uint32_t read_file(const char* path, uint8_t** buf)
|
|||
uint32_t size = (uint32_t)ftell(fd);
|
||||
fseek(fd, 0L, SEEK_SET);
|
||||
|
||||
*buf = malloc(size);
|
||||
// +1 so we can add an extra NUL
|
||||
*buf = malloc(size + 1);
|
||||
if (*buf == NULL) {
|
||||
uprintf("Error: Can't allocate %d bytes buffer for file '%s'", size, path);
|
||||
size = 0;
|
||||
|
@ -133,6 +136,8 @@ uint32_t read_file(const char* path, uint8_t** buf)
|
|||
uprintf("Error: Can't read '%s'", path);
|
||||
size = 0;
|
||||
}
|
||||
// Always NUL terminate the file
|
||||
(*buf)[size] = 0;
|
||||
|
||||
out:
|
||||
fclose(fd);
|
||||
|
@ -334,28 +339,28 @@ char* SizeToHumanReadable(uint64_t size, BOOL copy_to_log, BOOL fake_units)
|
|||
double hr_size = (double)size;
|
||||
double t;
|
||||
uint16_t i_size;
|
||||
char **_msg_table = copy_to_log?default_msg_table:msg_table;
|
||||
const double divider = fake_units?1000.0:1024.0;
|
||||
char **_msg_table = copy_to_log ? default_msg_table : msg_table;
|
||||
const double divider = fake_units ? 1000.0 : 1024.0;
|
||||
|
||||
for (suffix=0; suffix<MAX_SIZE_SUFFIXES-1; suffix++) {
|
||||
for (suffix = 0; suffix < MAX_SIZE_SUFFIXES - 1; suffix++) {
|
||||
if (hr_size < divider)
|
||||
break;
|
||||
hr_size /= divider;
|
||||
}
|
||||
if (suffix == 0) {
|
||||
static_sprintf(str_size, "%s%d%s %s", dir, (int)hr_size, dir, _msg_table[MSG_020-MSG_000]);
|
||||
static_sprintf(str_size, "%s%d%s %s", dir, (int)hr_size, dir, _msg_table[MSG_020 - MSG_000]);
|
||||
} else if (fake_units) {
|
||||
if (hr_size < 8) {
|
||||
static_sprintf(str_size, (fabs((hr_size*10.0)-(floor(hr_size + 0.5)*10.0)) < 0.5)?"%0.0f%s":"%0.1f%s",
|
||||
hr_size, _msg_table[MSG_020+suffix-MSG_000]);
|
||||
static_sprintf(str_size, (fabs((hr_size * 10.0) - (floor(hr_size + 0.5) * 10.0)) < 0.5) ?
|
||||
"%0.0f%s":"%0.1f%s", hr_size, _msg_table[MSG_020 + suffix - MSG_000]);
|
||||
} else {
|
||||
t = (double)upo2((uint16_t)hr_size);
|
||||
i_size = (uint16_t)((fabs(1.0f-(hr_size / t)) < 0.05f)?t:hr_size);
|
||||
static_sprintf(str_size, "%s%d%s %s", dir, i_size, dir, _msg_table[MSG_020+suffix-MSG_000]);
|
||||
i_size = (uint16_t)((fabs(1.0f - (hr_size / t)) < 0.05f) ? t : hr_size);
|
||||
static_sprintf(str_size, "%s%d%s %s", dir, i_size, dir, _msg_table[MSG_020 + suffix - MSG_000]);
|
||||
}
|
||||
} else {
|
||||
static_sprintf(str_size, (hr_size * 10.0 - (floor(hr_size) * 10.0)) < 0.5?
|
||||
"%s%0.0f%s %s":"%s%0.1f%s %s", dir, hr_size, dir, _msg_table[MSG_020+suffix-MSG_000]);
|
||||
"%s%0.0f%s %s":"%s%0.1f%s %s", dir, hr_size, dir, _msg_table[MSG_020 + suffix - MSG_000]);
|
||||
}
|
||||
return str_size;
|
||||
}
|
||||
|
@ -564,7 +569,7 @@ BOOL WriteFileWithRetry(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWr
|
|||
uprintf("Wrote %d bytes but requested %d", *lpNumberOfBytesWritten, nNumberOfBytesToWrite);
|
||||
} else {
|
||||
uprintf("Write error %s", WindowsErrorString());
|
||||
LastWriteError = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|GetLastError();
|
||||
LastWriteError = RUFUS_ERROR(GetLastError());
|
||||
}
|
||||
// If we can't reposition for the next run, just abort
|
||||
if (!readFilePointer)
|
||||
|
@ -576,7 +581,7 @@ BOOL WriteFileWithRetry(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWr
|
|||
}
|
||||
}
|
||||
if (SCODE_CODE(GetLastError()) == ERROR_SUCCESS)
|
||||
SetLastError(ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_FAULT);
|
||||
SetLastError(RUFUS_ERROR(ERROR_WRITE_FAULT));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -882,3 +887,35 @@ out:
|
|||
pfSymCleanup(hRufus);
|
||||
return r;
|
||||
}
|
||||
|
||||
static void print_extracted_file(const char* file_path, uint64_t file_length)
|
||||
{
|
||||
char str[MAX_PATH];
|
||||
|
||||
if (file_path == NULL)
|
||||
return;
|
||||
static_sprintf(str, "%s (%s)", file_path, SizeToHumanReadable(file_length, TRUE, FALSE));
|
||||
uprintf("Extracting: %s", str);
|
||||
PrintStatus(0, MSG_000, str); // MSG_000 is "%s"
|
||||
}
|
||||
|
||||
static void update_progress(const uint64_t processed_bytes)
|
||||
{
|
||||
UpdateProgressWithInfo(OP_EXTRACT_ZIP, MSG_348, processed_bytes, archive_size);
|
||||
}
|
||||
|
||||
// Extract content from a zip archive onto the designated directory or drive
|
||||
BOOL ExtractZip(const char* src_zip, const char* dest_dir)
|
||||
{
|
||||
int64_t extracted_bytes = 0;
|
||||
|
||||
if (src_zip == NULL)
|
||||
return FALSE;
|
||||
archive_size = _filesizeU(src_zip);
|
||||
if (bled_init(256 * KB, NULL, NULL, NULL, update_progress, print_extracted_file, &ErrorStatus) != 0)
|
||||
return FALSE;
|
||||
uprintf("● Copying files from '%s'", src_zip);
|
||||
extracted_bytes = bled_uncompress_to_dir(src_zip, dest_dir, BLED_COMPRESSION_ZIP);
|
||||
bled_exit();
|
||||
return (extracted_bytes > 0);
|
||||
}
|
||||
|
|
|
@ -121,7 +121,7 @@ char* FileDialog(BOOL save, char* path, const ext_t* ext, UINT* selected_ext)
|
|||
hr = CoCreateInstance(save ? &CLSID_FileSaveDialog : &CLSID_FileOpenDialog, NULL, CLSCTX_INPROC,
|
||||
&IID_IFileDialog, (LPVOID)&pfd);
|
||||
if (SUCCEEDED(hr) && (pfd == NULL)) // Never trust Microsoft APIs to do the right thing
|
||||
hr = ERROR_SEVERITY_ERROR | FAC(FACILITY_WINDOWS) | ERROR_API_UNAVAILABLE;
|
||||
hr = RUFUS_ERROR(ERROR_API_UNAVAILABLE);
|
||||
|
||||
if (FAILED(hr)) {
|
||||
SetLastError(hr);
|
||||
|
@ -1590,7 +1590,7 @@ INT_PTR CALLBACK NewVersionCallback(HWND hDlg, UINT message, WPARAM wParam, LPAR
|
|||
case IDC_DOWNLOAD: // Also doubles as abort and launch function
|
||||
switch(download_status) {
|
||||
case 1: // Abort
|
||||
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_CANCELLED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_CANCELLED);
|
||||
download_status = 0;
|
||||
hThread = NULL;
|
||||
break;
|
||||
|
@ -1653,7 +1653,7 @@ INT_PTR CALLBACK NewVersionCallback(HWND hDlg, UINT message, WPARAM wParam, LPAR
|
|||
case UM_PROGRESS_INIT:
|
||||
EnableWindow(GetDlgItem(hDlg, IDCANCEL), FALSE);
|
||||
SetWindowTextU(GetDlgItem(hDlg, IDC_DOWNLOAD), lmprintf(MSG_038));
|
||||
FormatStatus = 0;
|
||||
ErrorStatus = 0;
|
||||
download_status = 1;
|
||||
return (INT_PTR)TRUE;
|
||||
case UM_PROGRESS_EXIT:
|
||||
|
@ -1665,7 +1665,7 @@ INT_PTR CALLBACK NewVersionCallback(HWND hDlg, UINT message, WPARAM wParam, LPAR
|
|||
SetWindowTextU(GetDlgItem(hDlg, IDC_DOWNLOAD), lmprintf(MSG_040));
|
||||
// Disable the download button if we found an invalid signature
|
||||
EnableWindow(GetDlgItem(hDlg, IDC_DOWNLOAD),
|
||||
FormatStatus != (ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_BAD_SIGNATURE)));
|
||||
ErrorStatus != RUFUS_ERROR(APPERR(ERROR_BAD_SIGNATURE)));
|
||||
download_status = 0;
|
||||
}
|
||||
return (INT_PTR)TRUE;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
*
|
||||
* Copyright 2003 Lars Munch Christensen - All Rights Reserved
|
||||
* Copyright 1998-2008 H. Peter Anvin - All Rights Reserved
|
||||
* Copyright 2012-2023 Pete Batard
|
||||
* Copyright 2012-2024 Pete Batard
|
||||
*
|
||||
* Based on the Linux installer program for SYSLINUX by H. Peter Anvin
|
||||
*
|
||||
|
@ -88,7 +88,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int file_system)
|
|||
const LARGE_INTEGER liZero = { {0, 0} };
|
||||
HANDLE f_handle = INVALID_HANDLE_VALUE;
|
||||
HANDLE d_handle = INVALID_HANDLE_VALUE;
|
||||
DWORD bytes_read, bytes_written, err;
|
||||
DWORD bytes_read, err;
|
||||
S_NTFSSECT_VOLINFO vol_info = { 0 };
|
||||
LARGE_INTEGER vcn, lba, len;
|
||||
S_NTFSSECT_EXTENT extent;
|
||||
|
@ -208,12 +208,11 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int file_system)
|
|||
|
||||
/* Write ldlinux.sys file */
|
||||
if (!WriteFileWithRetry(f_handle, (const char _force *)syslinux_ldlinux[0],
|
||||
syslinux_ldlinux_len[0], &bytes_written, WRITE_RETRIES)) {
|
||||
syslinux_ldlinux_len[0], NULL, WRITE_RETRIES)) {
|
||||
uprintf("Could not write '%s': %s", &path[3], WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
if (!WriteFileWithRetry(f_handle, syslinux_adv, 2 * ADV_SIZE,
|
||||
&bytes_written, WRITE_RETRIES)) {
|
||||
if (!WriteFileWithRetry(f_handle, syslinux_adv, 2 * ADV_SIZE, NULL, WRITE_RETRIES)) {
|
||||
uprintf("Could not write ADV to '%s': %s", &path[3], WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
|
@ -302,8 +301,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int file_system)
|
|||
|
||||
/* Rewrite the file */
|
||||
if (!SetFilePointerEx(f_handle, liZero, NULL, FILE_BEGIN) ||
|
||||
!WriteFileWithRetry(f_handle, syslinux_ldlinux[0], syslinux_ldlinux_len[0],
|
||||
&bytes_written, WRITE_RETRIES)) {
|
||||
!WriteFileWithRetry(f_handle, syslinux_ldlinux[0], syslinux_ldlinux_len[0], NULL, WRITE_RETRIES)) {
|
||||
uprintf("Could not rewrite '%s': %s\n", &path[3], WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
|
@ -328,8 +326,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int file_system)
|
|||
|
||||
/* Write boot sector back */
|
||||
if (!SetFilePointerEx(d_handle, liZero, NULL, FILE_BEGIN) ||
|
||||
!WriteFileWithRetry(d_handle, sectbuf, SECTOR_SIZE,
|
||||
&bytes_written, WRITE_RETRIES)) {
|
||||
!WriteFileWithRetry(d_handle, sectbuf, SECTOR_SIZE, NULL, WRITE_RETRIES)) {
|
||||
uprintf("Could not write Syslinux boot record: %s", WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
|
@ -368,8 +365,7 @@ BOOL InstallSyslinux(DWORD drive_index, char drive_letter, int file_system)
|
|||
uprintf("Unable to create '%s'\n", path);
|
||||
goto out;
|
||||
}
|
||||
if (!WriteFileWithRetry(f_handle, syslinux_mboot, syslinux_mboot_len,
|
||||
&bytes_written, WRITE_RETRIES)) {
|
||||
if (!WriteFileWithRetry(f_handle, syslinux_mboot, syslinux_mboot_len, NULL, WRITE_RETRIES)) {
|
||||
uprintf("Could not write '%s'", path);
|
||||
goto out;
|
||||
}
|
||||
|
@ -415,28 +411,30 @@ uint16_t GetSyslinuxVersion(char* buf, size_t buf_size, char** ext)
|
|||
return 0;
|
||||
|
||||
// Start at 64 to avoid the short incomplete version at the beginning of ldlinux.sys
|
||||
for (i=64; i<buf_size-64; i++) {
|
||||
for (i = 64; i < buf_size - 64; i++) {
|
||||
if (memcmp(&buf[i], LINUX, sizeof(LINUX)) == 0) {
|
||||
// Check for ISO or SYS prefix
|
||||
if (!( ((buf[i-3] == 'I') && (buf[i-2] == 'S') && (buf[i-1] == 'O'))
|
||||
|| ((buf[i-3] == 'S') && (buf[i-2] == 'Y') && (buf[i-1] == 'S')) ))
|
||||
if (!( ((buf[i - 3] == 'I') && (buf[i - 2] == 'S') && (buf[i - 1] == 'O'))
|
||||
|| ((buf[i - 3] == 'S') && (buf[i - 2] == 'Y') && (buf[i - 1] == 'S')) ))
|
||||
continue;
|
||||
i += sizeof(LINUX);
|
||||
version = (((uint8_t)strtoul(&buf[i], &p, 10))<<8) + (uint8_t)strtoul(&p[1], &p, 10);
|
||||
version = (((uint8_t)strtoul(&buf[i], &p, 10)) << 8) + (uint8_t)strtoul(&p[1], &p, 10);
|
||||
// Our buffer is either from our internal legit syslinux (i.e. with a NUL terminated
|
||||
// version string) or from a buffer that has been NUL-terminated through read_file(),
|
||||
// so the string we work with in p is always NUL terminated at this stage.
|
||||
if (version == 0)
|
||||
continue;
|
||||
p[safe_strlen(p)] = 0;
|
||||
// Ensure that our extra version string starts with a slash
|
||||
*p = '/';
|
||||
// Remove the x.yz- duplicate if present
|
||||
for (j=0; (buf[i+j] == p[1+j]) && (buf[i+j] != ' '); j++);
|
||||
if (p[j+1] == '-')
|
||||
for (j = 0; (buf[i + j] == p[1 + j]) && (buf[i + j] != ' '); j++);
|
||||
if (p[j + 1] == '-')
|
||||
j++;
|
||||
if (j >= 4) {
|
||||
p[j] = '/';
|
||||
p = &p[j];
|
||||
}
|
||||
for (j=safe_strlen(p)-1; j>0; j--) {
|
||||
for (j = safe_strlen(p) - 1; j > 0; j--) {
|
||||
// Arch Linux affixes a star for their version - who knows what else is out there...
|
||||
if ((p[j] == ' ') || (p[j] == '*'))
|
||||
p[j] = 0;
|
||||
|
@ -444,15 +442,15 @@ uint16_t GetSyslinuxVersion(char* buf, size_t buf_size, char** ext)
|
|||
break;
|
||||
}
|
||||
// Sanitize the string
|
||||
for (j=1; j<safe_strlen(p); j++) {
|
||||
for (j = 1; j < safe_strlen(p); j++) {
|
||||
// Some people are bound to have invalid chars in their date strings
|
||||
for (k=0; k<sizeof(unauthorized); k++) {
|
||||
for (k = 0; k < sizeof(unauthorized); k++) {
|
||||
if (p[j] == unauthorized[k])
|
||||
p[j] = '_';
|
||||
}
|
||||
}
|
||||
// If all we have is a slash, return the empty string for the extra version
|
||||
*ext = (p[1] == 0)?nullstr:p;
|
||||
*ext = (p[1] == 0) ? nullstr : p;
|
||||
return version;
|
||||
}
|
||||
}
|
||||
|
|
16
src/ui.c
16
src/ui.c
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* UI-related function calls
|
||||
* Copyright © 2018-2023 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2018-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -46,7 +46,7 @@ UINT_PTR UM_LANGUAGE_MENU_MAX = UM_LANGUAGE_MENU;
|
|||
HIMAGELIST hUpImageList, hDownImageList;
|
||||
extern BOOL use_vds, appstore_version;
|
||||
extern int imop_win_sel;
|
||||
extern char* unattend_xml_path;
|
||||
extern char *unattend_xml_path, *archive_path;
|
||||
int update_progress_type = UPT_PERCENT;
|
||||
int advanced_device_section_height, advanced_format_section_height;
|
||||
// (empty) check box width, (empty) drop down width, button height (for and without dropdown match)
|
||||
|
@ -223,9 +223,8 @@ void GetHalfDropwdownWidth(HWND hDlg)
|
|||
hw = max(hw, GetTextSize(GetDlgItem(hDlg, IDC_TARGET_SYSTEM), msg).cx);
|
||||
}
|
||||
|
||||
// Finally, we must ensure that we'll have enough space for the 2 checkbox controls
|
||||
// Finally, we must ensure that we'll have enough space for the checkbox controls
|
||||
// that end up with a half dropdown
|
||||
hw = max(hw, GetTextWidth(hDlg, IDC_RUFUS_MBR) - sw);
|
||||
hw = max(hw, GetTextWidth(hDlg, IDC_BAD_BLOCKS) - sw);
|
||||
|
||||
// Add the width of a blank dropdown
|
||||
|
@ -351,7 +350,7 @@ void PositionMainControls(HWND hDlg)
|
|||
GetWindowRect(hCtrl, &rc);
|
||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||
advanced_device_section_height = rc.top;
|
||||
hCtrl = GetDlgItem(hDlg, IDC_RUFUS_MBR);
|
||||
hCtrl = GetDlgItem(hDlg, IDC_UEFI_MEDIA_VALIDATION);
|
||||
GetWindowRect(hCtrl, &rc);
|
||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||
advanced_device_section_height = rc.bottom - advanced_device_section_height;
|
||||
|
@ -474,10 +473,10 @@ void PositionMainControls(HWND hDlg)
|
|||
hCtrl = GetDlgItem(hDlg, half_width_ids[i]);
|
||||
GetWindowRect(hCtrl, &rc);
|
||||
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||
// First 5 controls are on the left handside
|
||||
// First 4 controls are on the left handside
|
||||
// First 2 controls may overflow into separator
|
||||
hPrevCtrl = GetNextWindow(hCtrl, GW_HWNDPREV);
|
||||
SetWindowPos(hCtrl, hPrevCtrl, (i < 5) ? rc.left : mw + hw + sw, rc.top,
|
||||
SetWindowPos(hCtrl, hPrevCtrl, (i < 4) ? rc.left : mw + hw + sw, rc.top,
|
||||
(i <2) ? hw + sw : hw, rc.bottom - rc.top, 0);
|
||||
}
|
||||
|
||||
|
@ -1205,6 +1204,9 @@ void InitProgress(BOOL bOnlyFormat)
|
|||
nb_slots[OP_FINALIZE] = ((selection_default == BT_IMAGE) && (fs_type == FS_NTFS)) ? 3 : 2;
|
||||
}
|
||||
}
|
||||
if (archive_path != NULL) {
|
||||
nb_slots[OP_EXTRACT_ZIP] = -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < OP_MAX; i++) {
|
||||
if (nb_slots[i] > 0) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* UI element lists
|
||||
* Copyright © 2018-2020 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2018-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -49,8 +49,7 @@ static int image_option_move_ids[] = {
|
|||
IDC_ADVANCED_DEVICE_TOOLBAR,
|
||||
IDC_LIST_USB_HDD,
|
||||
IDC_OLD_BIOS_FIXES,
|
||||
IDC_RUFUS_MBR,
|
||||
IDC_DISK_ID,
|
||||
IDC_UEFI_MEDIA_VALIDATION,
|
||||
IDS_FORMAT_OPTIONS_TXT,
|
||||
IDS_LABEL_TXT,
|
||||
IDC_LABEL,
|
||||
|
@ -86,7 +85,7 @@ static int image_option_toggle_ids[][2] = {
|
|||
static int advanced_device_move_ids[] = {
|
||||
IDC_LIST_USB_HDD,
|
||||
IDC_OLD_BIOS_FIXES,
|
||||
IDC_RUFUS_MBR,
|
||||
IDC_UEFI_MEDIA_VALIDATION,
|
||||
IDS_FORMAT_OPTIONS_TXT,
|
||||
IDS_LABEL_TXT,
|
||||
IDC_LABEL,
|
||||
|
@ -115,8 +114,7 @@ static int advanced_device_toggle_ids[] = {
|
|||
IDC_SAVE_TOOLBAR,
|
||||
IDC_LIST_USB_HDD,
|
||||
IDC_OLD_BIOS_FIXES,
|
||||
IDC_RUFUS_MBR,
|
||||
IDC_DISK_ID,
|
||||
IDC_UEFI_MEDIA_VALIDATION,
|
||||
};
|
||||
|
||||
static int advanced_format_move_ids[] = {
|
||||
|
@ -155,6 +153,7 @@ static int full_width_controls[] = {
|
|||
IDC_ADVANCED_DRIVE_PROPERTIES,
|
||||
IDC_LIST_USB_HDD,
|
||||
IDC_OLD_BIOS_FIXES,
|
||||
IDC_UEFI_MEDIA_VALIDATION,
|
||||
IDC_ADVANCED_FORMAT_OPTIONS,
|
||||
IDC_QUICK_FORMAT,
|
||||
IDC_EXTENDED_LABEL,
|
||||
|
@ -164,19 +163,18 @@ static int full_width_controls[] = {
|
|||
static int full_width_checkboxes[] = {
|
||||
IDC_LIST_USB_HDD,
|
||||
IDC_OLD_BIOS_FIXES,
|
||||
IDC_UEFI_MEDIA_VALIDATION,
|
||||
IDC_QUICK_FORMAT,
|
||||
IDC_EXTENDED_LABEL,
|
||||
};
|
||||
|
||||
static int half_width_ids[] = {
|
||||
IDC_BAD_BLOCKS,
|
||||
IDC_RUFUS_MBR,
|
||||
IDS_PARTITION_TYPE_TXT,
|
||||
IDC_PARTITION_TYPE,
|
||||
IDC_FILE_SYSTEM,
|
||||
IDS_TARGET_SYSTEM_TXT,
|
||||
IDC_TARGET_SYSTEM,
|
||||
IDC_DISK_ID,
|
||||
IDS_CLUSTER_SIZE_TXT,
|
||||
IDC_CLUSTER_SIZE,
|
||||
IDC_NB_PASSES,
|
||||
|
@ -190,7 +188,7 @@ static int adjust_dpi_ids[][5] = {
|
|||
{ IDC_ADVANCED_DEVICE_TOOLBAR, 0, 0, 0, 0 },
|
||||
{ IDC_LIST_USB_HDD, 0, 0, 0, 0 },
|
||||
{ IDC_OLD_BIOS_FIXES, 0, 0, 0, 0 },
|
||||
{ IDC_RUFUS_MBR, IDC_DISK_ID, 0, 0, 0 },
|
||||
{ IDC_UEFI_MEDIA_VALIDATION, 0, 0, 0, 0 },
|
||||
{ IDS_FORMAT_OPTIONS_TXT, 0, 0, 0, 0 },
|
||||
{ IDS_LABEL_TXT, IDC_LABEL, 0, 0, 0 },
|
||||
{ IDS_FILE_SYSTEM_TXT, IDC_FILE_SYSTEM, IDS_CLUSTER_SIZE_TXT, IDC_CLUSTER_SIZE, 0 },
|
||||
|
|
75
src/vhd.c
75
src/vhd.c
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Virtual Disk Handling functions
|
||||
* Copyright © 2013-2023 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2013-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -120,9 +120,9 @@ static int8_t IsCompressedBootableImage(const char* path)
|
|||
buf = malloc(MBR_SIZE);
|
||||
if (buf == NULL)
|
||||
return 0;
|
||||
FormatStatus = 0;
|
||||
ErrorStatus = 0;
|
||||
if (img_report.compression_type < BLED_COMPRESSION_MAX) {
|
||||
bled_init(0, uprintf, NULL, NULL, NULL, NULL, &FormatStatus);
|
||||
bled_init(0, uprintf, NULL, NULL, NULL, NULL, &ErrorStatus);
|
||||
dc = bled_uncompress_to_buffer(path, (char*)buf, MBR_SIZE, file_assoc[i].type);
|
||||
bled_exit();
|
||||
} else if (img_report.compression_type == BLED_COMPRESSION_MAX) {
|
||||
|
@ -258,7 +258,7 @@ DWORD WINAPI WimProgressCallback(DWORD dwMsgId, WPARAM wParam, LPARAM lParam, PV
|
|||
UpdateProgressWithInfo(progress_op, progress_msg, wim_proc_files, wim_nb_files);
|
||||
}
|
||||
// Halt on error
|
||||
if (IS_ERROR(FormatStatus)) {
|
||||
if (IS_ERROR(ErrorStatus)) {
|
||||
pbCancel = (PBOOL)lParam;
|
||||
*pbCancel = TRUE;
|
||||
break;
|
||||
|
@ -291,7 +291,7 @@ DWORD WINAPI WimProgressCallback(DWORD dwMsgId, WPARAM wParam, LPARAM lParam, PV
|
|||
break;
|
||||
}
|
||||
|
||||
return IS_ERROR(FormatStatus) ? WIM_MSG_ABORT_IMAGE : WIM_MSG_SUCCESS;
|
||||
return IS_ERROR(ErrorStatus) ? WIM_MSG_ABORT_IMAGE : WIM_MSG_SUCCESS;
|
||||
}
|
||||
|
||||
// Find out if we have any way to extract/apply WIM files on this platform
|
||||
|
@ -908,18 +908,19 @@ PF_TYPE_DECL(WINAPI, DWORD, AttachVirtualDisk, (HANDLE, PSECURITY_DESCRIPTOR,
|
|||
ATTACH_VIRTUAL_DISK_FLAG, ULONG, PATTACH_VIRTUAL_DISK_PARAMETERS, LPOVERLAPPED));
|
||||
PF_TYPE_DECL(WINAPI, DWORD, DetachVirtualDisk, (HANDLE, DETACH_VIRTUAL_DISK_FLAG, ULONG));
|
||||
PF_TYPE_DECL(WINAPI, DWORD, GetVirtualDiskPhysicalPath, (HANDLE, PULONG, PWSTR));
|
||||
PF_TYPE_DECL(WINAPI, DWORD, GetVirtualDiskOperationProgress, (HANDLE, LPOVERLAPPED,
|
||||
PVIRTUAL_DISK_PROGRESS));
|
||||
PF_TYPE_DECL(WINAPI, DWORD, GetVirtualDiskOperationProgress, (HANDLE, LPOVERLAPPED, PVIRTUAL_DISK_PROGRESS));
|
||||
PF_TYPE_DECL(WINAPI, DWORD, GetVirtualDiskInformation, (HANDLE, PULONG, PGET_VIRTUAL_DISK_INFO, PULONG));
|
||||
|
||||
static char physical_path[128] = "";
|
||||
static HANDLE mounted_handle = INVALID_HANDLE_VALUE;
|
||||
|
||||
// Mount an ISO or a VHD/VHDX image
|
||||
// Mount an ISO or a VHD/VHDX image and provide its size
|
||||
// Returns the physical path of the mounted image or NULL on error.
|
||||
char* VhdMountImage(const char* path)
|
||||
char* VhdMountImageAndGetSize(const char* path, uint64_t* disk_size)
|
||||
{
|
||||
VIRTUAL_STORAGE_TYPE vtype = { VIRTUAL_STORAGE_TYPE_DEVICE_ISO, VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT };
|
||||
ATTACH_VIRTUAL_DISK_PARAMETERS vparams = { 0 };
|
||||
GET_VIRTUAL_DISK_INFO disk_info = { 0 };
|
||||
DWORD r;
|
||||
wchar_t wtmp[128];
|
||||
ULONG size = ARRAYSIZE(wtmp);
|
||||
|
@ -929,6 +930,8 @@ char* VhdMountImage(const char* path)
|
|||
PF_INIT_OR_OUT(OpenVirtualDisk, VirtDisk);
|
||||
PF_INIT_OR_OUT(AttachVirtualDisk, VirtDisk);
|
||||
PF_INIT_OR_OUT(GetVirtualDiskPhysicalPath, VirtDisk);
|
||||
if (disk_size != NULL)
|
||||
PF_INIT_OR_OUT(GetVirtualDiskInformation, VirtDisk);
|
||||
|
||||
if (wpath == NULL)
|
||||
return NULL;
|
||||
|
@ -967,6 +970,20 @@ char* VhdMountImage(const char* path)
|
|||
goto out;
|
||||
}
|
||||
wchar_to_utf8_no_alloc(wtmp, physical_path, sizeof(physical_path));
|
||||
|
||||
if (disk_size != NULL) {
|
||||
*disk_size = 0;
|
||||
disk_info.Version = GET_VIRTUAL_DISK_INFO_SIZE;
|
||||
size = sizeof(disk_info);
|
||||
r = pfGetVirtualDiskInformation(mounted_handle, &size, &disk_info, NULL);
|
||||
if (r != ERROR_SUCCESS) {
|
||||
SetLastError(r);
|
||||
uprintf("Could not obtain virtual size of mounted image '%s': %s", path, WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
*disk_size = disk_info.Size.VirtualSize;
|
||||
}
|
||||
|
||||
ret = physical_path;
|
||||
|
||||
out:
|
||||
|
@ -1045,7 +1062,7 @@ static DWORD WINAPI VhdSaveImageThread(void* param)
|
|||
|
||||
if (r == ERROR_IO_PENDING) {
|
||||
while ((r = WaitForSingleObject(overlapped.hEvent, 100)) == WAIT_TIMEOUT) {
|
||||
if (IS_ERROR(FormatStatus) && (SCODE_CODE(FormatStatus) == ERROR_CANCELLED)) {
|
||||
if (IS_ERROR(ErrorStatus) && (SCODE_CODE(ErrorStatus) == ERROR_CANCELLED)) {
|
||||
CancelIoEx(handle, &overlapped);
|
||||
goto out;
|
||||
}
|
||||
|
@ -1093,10 +1110,10 @@ static DWORD WINAPI FfuSaveImageThread(void* param)
|
|||
img_save->DevicePath, img_save->ImagePath, label, APPLICATION_NAME, RUFUS_URL);
|
||||
uprintf("Running command: '%s", cmd);
|
||||
r = RunCommandWithProgress(cmd, sysnative_dir, TRUE, MSG_261);
|
||||
if (r != 0 && !IS_ERROR(FormatStatus)) {
|
||||
if (r != 0 && !IS_ERROR(ErrorStatus)) {
|
||||
SetLastError(r);
|
||||
uprintf("Failed to capture FFU image: %s", WindowsErrorString());
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_WINDOWS) | SCODE_CODE(r);
|
||||
ErrorStatus = RUFUS_ERROR(SCODE_CODE(r));
|
||||
}
|
||||
safe_free(img_save->DevicePath);
|
||||
safe_free(img_save->ImagePath);
|
||||
|
@ -1111,6 +1128,7 @@ void VhdSaveImage(void)
|
|||
char filename[128];
|
||||
char path[MAX_PATH];
|
||||
int DriveIndex = ComboBox_GetCurSel(hDeviceList);
|
||||
enum { image_type_vhd = 1, image_type_vhdx = 2, image_type_ffu = 3 };
|
||||
static EXT_DECL(img_ext, filename, __VA_GROUP__("*.vhd", "*.vhdx", "*.ffu"),
|
||||
__VA_GROUP__(lmprintf(MSG_343), lmprintf(MSG_342), lmprintf(MSG_344)));
|
||||
ULARGE_INTEGER free_space;
|
||||
|
@ -1123,20 +1141,27 @@ void VhdSaveImage(void)
|
|||
img_save.DeviceNum = (DWORD)ComboBox_GetItemData(hDeviceList, DriveIndex);
|
||||
img_save.DevicePath = GetPhysicalName(img_save.DeviceNum);
|
||||
// FFU support requires GPT
|
||||
if (!has_ffu_support || SelectedDrive.PartitionStyle != PARTITION_STYLE_GPT)
|
||||
img_ext.count = 2;
|
||||
for (i = 1; i <= (UINT)img_ext.count && (safe_strcmp(&_img_ext_x[i - 1][2], save_image_type) != 0); i++);
|
||||
img_ext.count = (!has_ffu_support || SelectedDrive.PartitionStyle != PARTITION_STYLE_GPT) ? 2 : 3;
|
||||
for (i = 1; i <= (UINT)img_ext.count && (safe_strcmp(save_image_type , &_img_ext_x[i - 1][2]) != 0); i++);
|
||||
if (i > (UINT)img_ext.count)
|
||||
i = 2;
|
||||
i = image_type_vhdx;
|
||||
img_save.ImagePath = FileDialog(TRUE, NULL, &img_ext, &i);
|
||||
assert(i > 0 && i <= (UINT)img_ext.count);
|
||||
save_image_type = (char*) &_img_ext_x[i - 1][2];
|
||||
WriteSettingStr(SETTING_PREFERRED_SAVE_IMAGE_TYPE, save_image_type);
|
||||
if (img_save.ImagePath == NULL)
|
||||
goto out;
|
||||
// Start from the end of our extension array, since '.vhd' would match for '.vhdx' otherwise
|
||||
for (i = (UINT)img_ext.count; (i > 0) && (strstr(img_save.ImagePath, &_img_ext_x[i - 1][1]) == NULL); i--);
|
||||
if (i == 0) {
|
||||
uprintf("Warning: Can not determine image type from extension - Saving to uncompressed VHD.");
|
||||
i = image_type_vhd;
|
||||
} else {
|
||||
save_image_type = (char*)&_img_ext_x[i - 1][2];
|
||||
WriteSettingStr(SETTING_PREFERRED_SAVE_IMAGE_TYPE, save_image_type);
|
||||
}
|
||||
switch (i) {
|
||||
case 1:
|
||||
case image_type_vhd:
|
||||
img_save.Type = VIRTUAL_STORAGE_TYPE_DEVICE_VHD;
|
||||
break;
|
||||
case 3:
|
||||
case image_type_ffu:
|
||||
img_save.Type = VIRTUAL_STORAGE_TYPE_DEVICE_FFU;
|
||||
break;
|
||||
default:
|
||||
|
@ -1148,21 +1173,21 @@ void VhdSaveImage(void)
|
|||
if (img_save.DevicePath != NULL && img_save.ImagePath != NULL) {
|
||||
// Reset all progress bars
|
||||
SendMessage(hMainDialog, UM_PROGRESS_INIT, 0, 0);
|
||||
FormatStatus = 0;
|
||||
ErrorStatus = 0;
|
||||
if (img_save.Type == VIRTUAL_STORAGE_TYPE_DEVICE_VHD) {
|
||||
free_space.QuadPart = 0;
|
||||
if ((GetVolumePathNameA(img_save.ImagePath, path, sizeof(path)))
|
||||
&& (GetDiskFreeSpaceExA(path, &free_space, NULL, NULL))
|
||||
&& ((LONGLONG)free_space.QuadPart < (SelectedDrive.DiskSize + 512))) {
|
||||
uprintf("The VHD size is too large for the target drive");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_FILE_TOO_LARGE;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_FILE_TOO_LARGE);
|
||||
PostMessage(hMainDialog, UM_FORMAT_COMPLETED, (WPARAM)FALSE, 0);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
// Disable all controls except Cancel
|
||||
EnableControls(FALSE, FALSE);
|
||||
FormatStatus = 0;
|
||||
ErrorStatus = 0;
|
||||
InitProgress(TRUE);
|
||||
format_thread = CreateThread(NULL, 0, img_save.Type == VIRTUAL_STORAGE_TYPE_DEVICE_FFU ?
|
||||
FfuSaveImageThread : VhdSaveImageThread, &img_save, 0, NULL);
|
||||
|
@ -1172,7 +1197,7 @@ void VhdSaveImage(void)
|
|||
SendMessage(hMainDialog, UM_TIMER_START, 0, 0);
|
||||
} else {
|
||||
uprintf("Unable to start VHD save thread");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_START_THREAD);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_START_THREAD));
|
||||
PostMessage(hMainDialog, UM_FORMAT_COMPLETED, (WPARAM)FALSE, 0);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Virtual Disk Handling definitions and prototypes
|
||||
* Copyright © 2022 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2022-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -135,7 +135,8 @@ extern BOOL WimUnmountImage(const char* image, int index, BOOL commit);
|
|||
extern char* WimGetExistingMountPoint(const char* image, int index);
|
||||
extern BOOL WimIsValidIndex(const char* image, int index);
|
||||
extern int8_t IsBootableImage(const char* path);
|
||||
extern char* VhdMountImage(const char* path);
|
||||
extern char* VhdMountImageAndGetSize(const char* path, uint64_t* disksize);
|
||||
#define VhdMountImage(path) VhdMountImageAndGetSize(path, NULL)
|
||||
extern void VhdUnmountImage(void);
|
||||
extern void VhdSaveImage(void);
|
||||
extern void IsoSaveImage(void);
|
||||
|
|
10
src/winio.h
10
src/winio.h
|
@ -2,7 +2,7 @@
|
|||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Windows I/O redefinitions, that would be totally unnecessary had
|
||||
* Microsoft done a proper job with their asynchronous APIs.
|
||||
* Copyright © 2021 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2021-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -165,10 +165,10 @@ static __inline BOOL GetSizeAsync(HANDLE h, LPDWORD lpNumberOfBytes)
|
|||
SetLastError(ERROR_NO_MORE_ITEMS);
|
||||
return FALSE;
|
||||
}
|
||||
// TODO: Use a timeout and call GetOverlappedResultEx() on Windows 8 and later
|
||||
if (!GetOverlappedResult(fd->hFile, (OVERLAPPED*)&fd->Overlapped,
|
||||
lpNumberOfBytes, (fd->iStatus < 0)))
|
||||
return (GetLastError() == ERROR_HANDLE_EOF);
|
||||
if (!GetOverlappedResultEx(fd->hFile, (OVERLAPPED*)&fd->Overlapped,
|
||||
lpNumberOfBytes, WRITE_TIMEOUT, (fd->iStatus < 0)))
|
||||
// When reading from VHD/VHDX we get SECTOR_NOT_FOUND rather than EOF for the end of the drive
|
||||
return (GetLastError() == ERROR_HANDLE_EOF || GetLastError() == ERROR_SECTOR_NOT_FOUND);
|
||||
fd->Overlapped.Offset += *lpNumberOfBytes;
|
||||
fd->Overlapped.bOffsetUpdated = TRUE;
|
||||
return TRUE;
|
||||
|
|
44
src/wue.c
44
src/wue.c
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Rufus: The Reliable USB Formatting Utility
|
||||
* Windows User Experience
|
||||
* Copyright © 2022-2023 Pete Batard <pete@akeo.ie>
|
||||
* Copyright © 2022-2024 Pete Batard <pete@akeo.ie>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -47,6 +47,9 @@ char *unattend_xml_path = NULL, unattend_username[MAX_USERNAME_LENGTH];
|
|||
BOOL is_bootloader_revoked = FALSE;
|
||||
|
||||
extern uint32_t wim_nb_files, wim_proc_files, wim_extra_files;
|
||||
extern BOOL validate_md5sum;
|
||||
extern uint64_t md5sum_totalbytes;
|
||||
extern StrArray modified_files;
|
||||
|
||||
/// <summary>
|
||||
/// Create an installation answer file containing the sections specified by the flags.
|
||||
|
@ -255,12 +258,12 @@ BOOL SetupWinPE(char drive_letter)
|
|||
const char* patch_str_org[2] = { "\\minint\\txtsetup.sif", "\\minint\\system32\\" };
|
||||
const char* patch_str_rep[2][2] = { { "\\i386\\txtsetup.sif", "\\i386\\system32\\" } ,
|
||||
{ "\\amd64\\txtsetup.sif", "\\amd64\\system32\\" } };
|
||||
const char* setupsrcdev = "SetupSourceDevice = \"\\device\\harddisk1\\partition1\"";
|
||||
const char* win_nt_bt_org = "$win_nt$.~bt";
|
||||
const char* rdisk_zero = "rdisk(0)";
|
||||
const LARGE_INTEGER liZero = { {0, 0} };
|
||||
char setupsrcdev[64];
|
||||
HANDLE handle = INVALID_HANDLE_VALUE;
|
||||
DWORD i, j, size, rw_size, index = 0;
|
||||
DWORD i, j, size, read_size, index = 0;
|
||||
BOOL r = FALSE;
|
||||
char* buffer = NULL;
|
||||
|
||||
|
@ -268,9 +271,6 @@ BOOL SetupWinPE(char drive_letter)
|
|||
index = 1;
|
||||
else if ((img_report.winpe & WINPE_MININT) == WINPE_MININT)
|
||||
index = 2;
|
||||
// Allow other values than harddisk 1, as per user choice for disk ID
|
||||
static_sprintf(setupsrcdev, "SetupSourceDevice = \"\\device\\harddisk%d\\partition1\"",
|
||||
ComboBox_GetCurSel(hDiskID));
|
||||
// Copy of ntdetect.com in root
|
||||
static_sprintf(src, "%c:\\%s\\ntdetect.com", toupper(drive_letter), basedir[2 * (index / 2)]);
|
||||
static_sprintf(dst, "%c:\\ntdetect.com", toupper(drive_letter));
|
||||
|
@ -322,7 +322,7 @@ BOOL SetupWinPE(char drive_letter)
|
|||
buffer = (char*)malloc(size);
|
||||
if (buffer == NULL)
|
||||
goto out;
|
||||
if ((!ReadFile(handle, buffer, size, &rw_size, NULL)) || (size != rw_size)) {
|
||||
if ((!ReadFile(handle, buffer, size, &read_size, NULL)) || (size != read_size)) {
|
||||
uprintf("Could not read file %s: %s\n", dst, WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
|
@ -356,7 +356,7 @@ BOOL SetupWinPE(char drive_letter)
|
|||
// rdisk(0) -> rdisk(#) disk masquerading
|
||||
// NB: only the first one seems to be needed
|
||||
if (safe_strnicmp(&buffer[i], rdisk_zero, strlen(rdisk_zero) - 1) == 0) {
|
||||
buffer[i + 6] = 0x30 + ComboBox_GetCurSel(hDiskID);
|
||||
buffer[i + 6] = 0x31;
|
||||
uprintf(" 0x%08X: '%s' -> 'rdisk(%c)'\n", i, rdisk_zero, buffer[i + 6]);
|
||||
}
|
||||
// $WIN_NT$_~BT -> i386/amd64
|
||||
|
@ -370,7 +370,7 @@ BOOL SetupWinPE(char drive_letter)
|
|||
}
|
||||
}
|
||||
|
||||
if (!WriteFileWithRetry(handle, buffer, size, &rw_size, WRITE_RETRIES)) {
|
||||
if (!WriteFileWithRetry(handle, buffer, size, NULL, WRITE_RETRIES)) {
|
||||
uprintf("Could not write patched file: %s\n", WindowsErrorString());
|
||||
goto out;
|
||||
}
|
||||
|
@ -647,7 +647,7 @@ BOOL SetupWinToGo(DWORD DriveIndex, const char* drive_name, BOOL use_esp)
|
|||
uprintf("Windows To Go mode selected");
|
||||
// Additional sanity checks
|
||||
if ((use_esp) && (SelectedDrive.MediaType != FixedMedia) && (WindowsVersion.BuildNumber < 15000)) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | ERROR_NOT_SUPPORTED;
|
||||
ErrorStatus = RUFUS_ERROR(ERROR_NOT_SUPPORTED);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -655,7 +655,7 @@ BOOL SetupWinToGo(DWORD DriveIndex, const char* drive_name, BOOL use_esp)
|
|||
mounted_iso = VhdMountImage(image_path);
|
||||
if (mounted_iso == NULL) {
|
||||
uprintf("Could not mount ISO for Windows To Go installation");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_ISO_EXTRACT);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_ISO_EXTRACT));
|
||||
return FALSE;
|
||||
}
|
||||
static_sprintf(mounted_image_path, "%s%s", mounted_iso, &img_report.wininst_path[wininst_index][2]);
|
||||
|
@ -665,8 +665,8 @@ BOOL SetupWinToGo(DWORD DriveIndex, const char* drive_name, BOOL use_esp)
|
|||
// Now we use the WIM API to apply that image
|
||||
if (!WimApplyImage(img_report.is_windows_img ? image_path : mounted_image_path, wintogo_index, drive_name)) {
|
||||
uprintf("Failed to apply Windows To Go image");
|
||||
if (!IS_ERROR(FormatStatus))
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_ISO_EXTRACT);
|
||||
if (!IS_ERROR(ErrorStatus))
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_ISO_EXTRACT));
|
||||
if (!img_report.is_windows_img)
|
||||
VhdUnmountImage();
|
||||
return FALSE;
|
||||
|
@ -690,16 +690,16 @@ BOOL SetupWinToGo(DWORD DriveIndex, const char* drive_name, BOOL use_esp)
|
|||
// VDS cannot list ESP volumes (talk about allegedly improving on the old disk and volume APIs, only to
|
||||
// completely neuter it) and IVdsDiskPartitionMF::FormatPartitionEx(), which is what you are supposed to
|
||||
// use for ESPs, explicitly states: "This method cannot be used to format removable media."
|
||||
if (!FormatPartition(DriveIndex, partition_offset[PI_ESP], cluster_size, FS_FAT32, "",
|
||||
if (!FormatPartition(DriveIndex, SelectedDrive.Partition[partition_index[PI_ESP]].Offset, cluster_size, FS_FAT32, "",
|
||||
FP_QUICK | FP_FORCE | FP_LARGE_FAT32 | FP_NO_BOOT)) {
|
||||
uprintf("Could not format EFI System Partition");
|
||||
return FALSE;
|
||||
}
|
||||
Sleep(200);
|
||||
// Need to have the ESP mounted to invoke bcdboot
|
||||
ms_efi = AltMountVolume(DriveIndex, partition_offset[PI_ESP], FALSE);
|
||||
ms_efi = AltMountVolume(DriveIndex, SelectedDrive.Partition[partition_index[PI_ESP]].Offset, FALSE);
|
||||
if (ms_efi == NULL) {
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_CANT_ASSIGN_LETTER);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_CANT_ASSIGN_LETTER));
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -719,7 +719,7 @@ BOOL SetupWinToGo(DWORD DriveIndex, const char* drive_name, BOOL use_esp)
|
|||
if (RunCommand(cmd, sysnative_dir, usb_debug) != 0) {
|
||||
// Try to continue... but report a failure
|
||||
uprintf("Failed to enable boot");
|
||||
FormatStatus = ERROR_SEVERITY_ERROR | FAC(FACILITY_STORAGE) | APPERR(ERROR_ISO_EXTRACT);
|
||||
ErrorStatus = RUFUS_ERROR(APPERR(ERROR_ISO_EXTRACT));
|
||||
}
|
||||
|
||||
CopySKUSiPolicy((use_esp) ? ms_efi : drive_name);
|
||||
|
@ -808,6 +808,10 @@ BOOL ApplyWindowsCustomization(char drive_letter, int flags)
|
|||
CloseHandle(CreateFileU(appraiserres_dll_src, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ,
|
||||
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL));
|
||||
uprintf("Created '%s' placeholder", appraiserres_dll_src);
|
||||
if (validate_md5sum) {
|
||||
md5sum_totalbytes -= _filesizeU(appraiserres_dll_dst);
|
||||
StrArrayAdd(&modified_files, appraiserres_dll_src, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -815,6 +819,8 @@ BOOL ApplyWindowsCustomization(char drive_letter, int flags)
|
|||
// We only need to mount boot.wim if we have windowsPE data to deal with. If
|
||||
// not, we can just copy our unattend.xml in \sources\$OEM$\$$\Panther\.
|
||||
if (flags & UNATTEND_WINPE_SETUP_MASK) {
|
||||
if (validate_md5sum)
|
||||
md5sum_totalbytes -= _filesizeU(boot_wim_path);
|
||||
uprintf("Mounting '%s[%d]'...", boot_wim_path, wim_index);
|
||||
// Some "unofficial" ISOs have a modified boot.wim that doesn't have Windows Setup at index 2...
|
||||
if (!WimIsValidIndex(boot_wim_path, wim_index)) {
|
||||
|
@ -929,6 +935,10 @@ out:
|
|||
if (mount_path) {
|
||||
uprintf("Unmounting '%s[%d]'...", boot_wim_path, wim_index);
|
||||
WimUnmountImage(boot_wim_path, wim_index, TRUE);
|
||||
if (validate_md5sum) {
|
||||
md5sum_totalbytes += _filesizeU(boot_wim_path);
|
||||
StrArrayAdd(&modified_files, boot_wim_path, TRUE);
|
||||
}
|
||||
UpdateProgressWithInfo(OP_PATCH, MSG_325, PATCH_PROGRESS_TOTAL, PATCH_PROGRESS_TOTAL);
|
||||
}
|
||||
free(mount_path);
|
||||
|
|
Loading…
Reference in New Issue