1
1
Fork 0
mirror of https://github.com/pbatard/rufus.git synced 2024-08-14 23:57:05 +00:00

Merge remote-tracking branch 'upstream/master'

Conflicts:
	src/rufus.c
This commit is contained in:
Scott 2014-03-30 00:43:40 +11:00
commit 0e18200080
11 changed files with 189 additions and 145 deletions

20
configure vendored
View file

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.68 for rufus 1.4.6.
# Generated by GNU Autoconf 2.68 for rufus 1.4.7.
#
# Report bugs to <https://github.com/pbatard/rufus/issues>.
#
@ -560,8 +560,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='rufus'
PACKAGE_TARNAME='rufus'
PACKAGE_VERSION='1.4.6'
PACKAGE_STRING='rufus 1.4.6'
PACKAGE_VERSION='1.4.7'
PACKAGE_STRING='rufus 1.4.7'
PACKAGE_BUGREPORT='https://github.com/pbatard/rufus/issues'
PACKAGE_URL='http://rufus.akeo.ie'
@ -1203,7 +1203,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 1.4.6 to adapt to many kinds of systems.
\`configure' configures rufus 1.4.7 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1269,7 +1269,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of rufus 1.4.6:";;
short | recursive ) echo "Configuration of rufus 1.4.7:";;
esac
cat <<\_ACEOF
@ -1357,7 +1357,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
rufus configure 1.4.6
rufus configure 1.4.7
generated by GNU Autoconf 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
@ -1412,7 +1412,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 1.4.6, which was
It was created by rufus $as_me 1.4.7, which was
generated by GNU Autoconf 2.68. Invocation command line was
$ $0 $@
@ -2227,7 +2227,7 @@ fi
# Define the identity of the package.
PACKAGE='rufus'
VERSION='1.4.6'
VERSION='1.4.7'
cat >>confdefs.h <<_ACEOF
@ -4140,7 +4140,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 1.4.6, which was
This file was extended by rufus $as_me 1.4.7, which was
generated by GNU Autoconf 2.68. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -4194,7 +4194,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
rufus config.status 1.4.6
rufus config.status 1.4.7
configured by $0, generated by GNU Autoconf 2.68,
with options \\"\$ac_cs_config\\"

View file

@ -1,4 +1,4 @@
AC_INIT([rufus], [1.4.6], [https://github.com/pbatard/rufus/issues], [rufus], [http://rufus.akeo.ie])
AC_INIT([rufus], [1.4.7], [https://github.com/pbatard/rufus/issues], [rufus], [http://rufus.akeo.ie])
AM_INIT_AUTOMAKE([-Wno-portability foreign no-dist no-dependencies])
AC_CONFIG_SRCDIR([src/rufus.c])
AC_CONFIG_MACRO_DIR([m4])

View file

@ -3,6 +3,9 @@ rufus.loc since its original version. Translators are expected to keep their
translations up to date by monitoring this file on regular basis and applying
the same changes.
When editing an existing translation, make sure you always follow:
https://github.com/pbatard/rufus/wiki/Localization#Editing_a_translation
Remember to also update the version number for your translation ('v x.y.z')
once you have matched all the changes that occurred for the en-US translation.
@ -12,6 +15,10 @@ content. PLEASE, do not just look at this Changelog when updating your
translation, but always use the English section of rufus.loc as your base.
For instance, MSG_114, that was introduced in v1.0.8 is MORE than one line!
o Version 1.0.11 (2014.03.29)
- Changed MSG_011 "%u bad block(s) found" -> "%d bad block(s) found"
Note: since this doesn't require translator involvement, I have applied the change to existing translations.
o Version 1.0.10 (2014.02.09)
- *NEW* MSG_095 "DD Image"
- *NEW* MSG_261 "Writing image: %0.1f%% completed"

View file

@ -53,7 +53,7 @@
# http://download.microsoft.com/download/9/5/E/95EF66AF-9026-4BB0-A41D-A4F81802D92C/%5BMS-LCID%5D.pdf
# for the LCID (0x####) codes you should use
l "en-US" "English (English)" 0x0409, 0x0809, 0x0c09, 0x1009, 0x1409, 0x1809, 0x1c09, 0x2009, 0x2409, 0x2809, 0x2c09, 0x3009, 0x3409, 0x3809, 0x3c09, 0x4009, 0x4409, 0x4809
v 1.0.10
v 1.0.11
# Main dialog
g IDD_DIALOG
@ -145,7 +145,7 @@ t MSG_007 "Cancel"
t MSG_008 "Yes"
t MSG_009 "No"
t MSG_010 "Bad blocks found"
t MSG_011 "Check completed: %u bad block(s) found\n"
t MSG_011 "Check completed: %d bad block(s) found\n"
" %d read error(s)\n %d write error(s)\n %d corruption error(s)\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nA more detailed report can be found in:\n%s"
@ -498,7 +498,7 @@ t MSG_212 "فشل"
######################################################################
l "bg-BG" "Bulgarian (Български)" 0x0402
v 1.0.10
v 1.0.11
b "en-US"
# Main dialog
@ -635,7 +635,7 @@ t MSG_007 "Прекрати"
t MSG_008 "Да"
t MSG_009 "Не"
t MSG_010 "Намерени са лоши блокове"
t MSG_011 "Проверката завършена: намерени са %u лоши блокове\n"
t MSG_011 "Проверката завършена: намерени са %d лоши блокове\n"
" %d грешки при четене\n %d грешки при запис\n %d повредени\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nA По подробен доклад може да намерите в:\n%s"
@ -926,7 +926,7 @@ t MSG_261 "Писане на образ: %0.1f%% завършено"
################################################################################
l "zh-CN" "Chinese Simplified (简体中文)" 0x0804, 0x1004
v 1.0.10
v 1.0.11
b "en-US"
# Main dialog
@ -1014,7 +1014,7 @@ t MSG_007 "取消"
t MSG_008 "是"
t MSG_009 "否"
t MSG_010 "检测到坏快"
t MSG_011 "扫描结果:检测到 %u 个坏快\n"
t MSG_011 "扫描结果:检测到 %d 个坏快\n"
" %d 读取错误\n %d 写入错误\n %d 损坏错误\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\n详细报告位于\n%s"
@ -1282,7 +1282,7 @@ t MSG_261 "写入镜像:已完成 %0.1f%%"
################################################################################
l "zh-TW" "Chinese Traditional (正體中文)" 0x0404, 0x0c04, 0x1404, 0x7c04
v 1.0.10
v 1.0.11
b "en-US"
# Main dialog
@ -1386,7 +1386,7 @@ t MSG_007 "取消"
t MSG_008 "是"
t MSG_009 "否"
t MSG_010 "偵測到損毀磁區"
t MSG_011 "掃描結果: %u 個異常\n"
t MSG_011 "掃描結果: %d 個異常\n"
" %d 讀取錯誤\n %d 寫入錯誤\n %d 損毀錯誤\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\n詳細報告位於:\n%s"
@ -1771,7 +1771,7 @@ t MSG_007 "Annuleren"
t MSG_008 "Ja"
t MSG_009 "Nee"
t MSG_010 "Slechte blokken gevonden"
t MSG_011 "Controle voltooid: %u slechte blok(ken) gevonden\n"
t MSG_011 "Controle voltooid: %d slechte blok(ken) gevonden\n"
" %d leesfout(en)\n %d schrijffout(en)\n %d corruptiefout(en)\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nEen meer gedetailleerder rapport kan worden gevonden in:\n%s"
@ -2031,7 +2031,7 @@ t MSG_259 "Forceer update"
################################################################################
l "fi-FI" "Finnish (Suomi)" 0x040B
v 1.0.10
v 1.0.11
b "en-US"
# Main dialog
@ -2139,7 +2139,7 @@ t MSG_007 "Peruuta"
t MSG_008 "Kyllä"
t MSG_009 "Ei"
t MSG_010 "Viallisia lohkoja löydetty"
t MSG_011 "Tarkistus valmis: %u viallista lohkoa löydetty\n"
t MSG_011 "Tarkistus valmis: %d viallista lohkoa löydetty\n"
" %d lukuvirhe(ttä)\n %d kirjoitusvirhe(ttä)\n %d korruptiovirhe(ttä)\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nA voit tarkastella tarkempaa raporttia kohteessa:\n%s"
@ -2429,7 +2429,7 @@ t MSG_261 "Kirjoitetaan levykuvaa: %0.1f%% valmiina"
################################################################################
l "fr-FR" "French (Français)" 0x040c, 0x080c, 0x0c0c, 0x100c, 0x140c, 0x180c, 0x1c0c, 0x200c, 0x240c, 0x280c, 0x2c0c, 0x300c, 0x340c, 0x380c, 0xe40c
v 1.0.10
v 1.0.11
b "en-US"
g IDD_DIALOG
@ -2525,7 +2525,7 @@ t MSG_007 "Annuler"
t MSG_008 "Oui"
t MSG_009 "Non"
t MSG_010 "Blocs défectueux détectés"
t MSG_011 "Vérification complète : %u bloc(s) défectueux détecté(s)\n"
t MSG_011 "Vérification complète : %d bloc(s) défectueux détecté(s)\n"
" %d erreur(s) de lecture\n %d erreur(s) d'écriture\n %d erreur(s) de corruption\n"
t MSG_012 "%s\nUn rapport plus détaillé peut être obtenu à :\n%s"
t MSG_013 "Jamais"
@ -2788,7 +2788,7 @@ t MSG_261 "Ecriture d'image : %0.1f%% complété"
################################################################################
l "de-DE" "German (Deutsch)" 0x0407, 0x0807, 0x0c07, 0x1007, 0x1407
v 1.0.10
v 1.0.11
b "en-US"
g IDD_DIALOG
@ -2901,7 +2901,7 @@ t MSG_007 "Abbruch"
t MSG_008 "Ja"
t MSG_009 "Nein"
t MSG_010 "Fehlerhafte Blöcke gefunden"
t MSG_011 "Prüfung abgeschlossen: %u fehlerhafte Blöcke gefunden\n"
t MSG_011 "Prüfung abgeschlossen: %d fehlerhafte Blöcke gefunden\n"
" %d Lesefehler\n %d Schreibfehler\n %d Defekt(e)\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nEin detaillierter Bericht ist hier zu finden:\n%s"
@ -3175,7 +3175,7 @@ t MSG_261 "Schreibe Abbild-Datei: %0.1f%% fertiggestellt"
################################################################################
l "el-GR" "Greek (Ελληνικά)" 0x0408
v 1.0.10
v 1.0.11
b "en-US"
# Main dialog
@ -3319,7 +3319,7 @@ t MSG_007 "Άκυρο"
t MSG_008 "Ναι"
t MSG_009 "Όχι"
t MSG_010 "Βρέθηκαν κατεστραμμένοι τομείς"
t MSG_011 "Ο έλεγχος ολοκληρώθηκε: βρέθηκαν %u κατεστραμμένοι τομείς \n"
t MSG_011 "Ο έλεγχος ολοκληρώθηκε: βρέθηκαν %d κατεστραμμένοι τομείς \n"
" %d σφάλματα ανάγνωσης\n %d σφάλματα εγγραφής\n %d σφάλματα διαστρέβλωσης\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nΜια πιο λεπτομερής αναφορά μπορεί να βρεθεί στο:\n%s"
@ -3687,7 +3687,7 @@ t MSG_007 "Mégse"
t MSG_008 "Igen"
t MSG_009 "Nem"
t MSG_010 "Hibás blokkokat találtam"
t MSG_011 "Ellenörzés befejezve: %u hibás blokk találva\n"
t MSG_011 "Ellenörzés befejezve: %d hibás blokk találva\n"
" %d olvasási hiba,\n %d írási hiba\n %d összeomlásra hajlamos hiba\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nEgy részletesebb jelentés itt található:\n%s"
@ -4083,7 +4083,7 @@ t MSG_007 "Batal"
t MSG_008 "Ya"
t MSG_009 "Tidak"
t MSG_010 "Blok buruk ditemukan"
t MSG_011 "Pemeriksaan selesai: %u blok buruk ditemukan\n"
t MSG_011 "Pemeriksaan selesai: %d blok buruk ditemukan\n"
" %d read error(s)\n %d write error(s)\n %d corruption error(s)\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nLaporan yang lebih rinci dapat ditemukan di:\n%s"
@ -4355,7 +4355,7 @@ t MSG_259 "Pembaruan Paksa"
################################################################################
l "it-IT" "Italian (Italiano)" 0x0410, 0x0810
v 1.0.10
v 1.0.11
b "en-US"
g IDD_DIALOG
@ -4465,7 +4465,7 @@ t MSG_007 "Annulla"
t MSG_008 "Sì"
t MSG_009 "No"
t MSG_010 "Rilevato blocco difettoso"
t MSG_011 "Controllo completato: trovati %u blocchi difettosi\n"
t MSG_011 "Controllo completato: trovati %d blocchi difettosi\n"
" %d errori lettura\n %d errori scrittura\n %d errori corruzione\n"
t MSG_012 "%s\nUn report più dettagliato è disponibile in:\n%s"
t MSG_013 "Disabilitato"
@ -4731,7 +4731,7 @@ t MSG_261 "Scrittura immagine: %0.1f%% completata"
################################################################################
l "ko-KR" "Korean (한국어)" 0x0412
v 1.0.10
v 1.0.11
b "en-US"
# Main dialog
@ -4835,7 +4835,7 @@ t MSG_007 "취소"
t MSG_008 "예"
t MSG_009 "아니오"
t MSG_010 "배드 섹터 발견 됨."
t MSG_011 "검사 완료: %u 개의 배트섹터가 발견되었습니다.\n"
t MSG_011 "검사 완료: %d 개의 배트섹터가 발견되었습니다.\n"
" %d 읽기 오류\n %d 쓰기 오류\n %d 손상 섹터\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\n보고에 대한 상세 정보:\n%s"
@ -5123,7 +5123,7 @@ t MSG_261 "이미지 만들기: %0.1f%% 완료"
################################################################################
l "lt-LT" "Lithuanian (Lietuvių)" 0x0427
v 1.0.10
v 1.0.11
b "en-US"
# Main dialog
@ -5249,7 +5249,7 @@ t MSG_007 "Atšaukti"
t MSG_008 "Taip"
t MSG_009 "Ne"
t MSG_010 "Rasta blogų blokų"
t MSG_011 "Tikrinimas baigtas: rasta %u blogų blokų\n"
t MSG_011 "Tikrinimas baigtas: rasta %d blogų blokų\n"
" %d skaitymo klaidų\n %d rašymo klaidų\n %d iškraipymo klaidų\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nIšsamesnę ataskaitą rasite:\n%s"
@ -5539,7 +5539,7 @@ t MSG_261 "Rašomas atvaizdas: %0.1f%% baigta"
################################################################################
l "ms-MY" "Malay (Bahasa Malaysia)" 0x043e, 0x083e
v 1.0.7
v 1.0.11
b "en-US"
# Main dialog
@ -5668,7 +5668,7 @@ t MSG_007 "batal"
t MSG_008 "Ya"
t MSG_009 "Tidak"
t MSG_010 "Blok rosak dijumpai"
t MSG_011 "Semak selsesai: %u blok rosak dijumpai\n"
t MSG_011 "Semak selsesai: %d blok rosak dijumpai\n"
" %d error membaca\n %d error menulis\n %d error korupsi\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nA more detailed report can be found in:\n%s"
@ -5711,7 +5711,7 @@ t MSG_043 "Error: %s"
t MSG_044 "Muat turun fail"
t MSG_045 "Peranti storan USB (Generik)"
t MSG_046 "%s (Disk %d) [%s]"
# t MSG_047 "Multiple Partitions"
t MSG_047 "Beberapa Partition"
t MSG_048 "Rufus - Mengeflush buffer"
t MSG_049 "Rufus - Dibatalkan"
@ -5766,17 +5766,22 @@ t MSG_084 "Imej ISO ini menggunakan versi '%s' yang telah usang.\n"
"Perhatian: Fail yang dimuat turun akan disimpan di dalam direktori bersamaan dengan Rufus dan apabila terdapat "
"'%s' , ia akan digunakan secara automatik."
t MSG_085 "Muat turun %s"
t MSG_086 "Imej ISO tidak dapat dikesan"
t MSG_086 "Tiada imej yang dipilih"
# The content between the quotes below (\"Create a bootable disk\") should match
# the beginning of the IDC_BOOT text
t MSG_087 "Sila kilik pada butang disk untuk memilih ISO boleh boot, "
"atau nyahtandakan kotak semak \"Cipta disk boleh boot...\"."
t MSG_088 "ISO terlalu besar"
t MSG_089 "Imej ISO ini terlalu besar untuk sasaran yang dipilih."
t MSG_087 "Sila kilik pada butang disk untuk memilih imej yang boleh boot, "
"atau nyahtandakan kotak semak \"Cipta disk boleh boot menggunakan\"."
t MSG_088 "Imej terlalu besar"
t MSG_089 "Imej ini terlalu besar untuk sasaran yang dipilih."
t MSG_090 "ISO tidak disokong"
t MSG_091 "Apabila menggunakan jenis sasaran UEFI , hanya imej boleh boot jenis EFI sahaja disokong. "
"Tolong pilih ISO boleh boot jenis EFI atau tukarkan jenis sasaran kepada BIOS."
t MSG_092 "Sistem fail tidak disokong"
t MSG_093 "PENTING: PERANTI INI MEMPUNYAI BEBERAPA PARTITION!!\n\n"
"Ini mungkin termasuk partition/jilid yang tidak disenaraikan atau tidak boleh dilihat dari Windows. "
"Jika anda mahu meneruskannya, anda bertanggungjawab ke atas kehilangan data dalam partition tersebut."
t MSG_094 "Beberapa partition dikesan"
t MSG_095 "DD Imej"
t MSG_096 "Hanya FAT/FAT32 diskong untuk ISO ini. Tolong pilih FAT/FAT32 sebagai fail sistem."
t MSG_097 "Hanya imej ISO yang berdasarkan 'bootmgr' atau 'WinPE' boleh digunakan dengan NTFS."
t MSG_098 "FAT/FAT32 hanya boleh digunakan untuk imej ISO yang berdasarkan isolinux atau apabila jenis sasaran adalah UEFI."
@ -5797,7 +5802,7 @@ t MSG_104 "Syslinux v5.0 atau kemudian memerlukan fail '%s' di komputer anda.\n"
"'%s' ada di sana, ia akan digunakan semula secara automatik.\n"
t MSG_105 "Pembatalan boleh menyebabkan peranti ini TIDAK BOLEH DIGUNAKAN SEMULA.\n"
"Jika anda pasti anda mahu membatalkannya, klik Ya. Sebaliknya, klik Tidak."
t MSG_106 "Silih pilih folder"
t MSG_106 "Sila pilih folder"
t MSG_107 "Semua fail"
t MSG_108 "Log Rufus"
t MSG_109 "0x%02X (Disk %d)"
@ -5810,7 +5815,16 @@ t MSG_111 "Incompatible Cluster size"
t MSG_112 "Pemformattan jilid UDF yang besar mengambil masa yang amat lama. Pada kelajuan USB 2.0 anggaran masa pemformatan "
"adalah %d:%02d, di mana bar kemajuan akan lihat seperti ia tidak bergerak. Tolong bersabar"
t MSG_113 "Jilid UDF besar"
t MSG_114 "Imej ini menggunakan Syslinux %s tetapi aplikasi ini hanya mempunyai fail pemasangan untuk"
"Syslinux %s.\n\nOleh kerana versi-versi baharu Syslinux tidak serasi dengan satu sama lain, maka tidak"
"wajarlah Rufus menyediakan semuanya, dua fail tambahan perlu dimuat turun dari"
"Internet ('ldlinux.sys' dan 'ldlinux.bss'):\n"
"- Pilih 'Ya' untuk menyambung ke Internet dan memuat turun fail tersebut\n"
"- Pilih 'Tidak' untuk membatalkan operasi\n\n"
"NOTA:Fail akan dimuat turun ke dalam direktori aplikasi ini dan akan digunakan semula"
"secara automatik sekiranya sedia ada.\n"
t MSG_115 "Muat turun diperlukan"
# Tootips
# Partition Scheme and Target Type
t MSG_150 "Selalunya pilihan ini paling selamat. Namun, jika anda ada komputer UEFI dan mahu "
@ -5860,11 +5874,13 @@ t MSG_184 "Untuk tujuan menjana statistik penggunaan peribadi , kami mungkin men
t MSG_185 "Proses mengemas kini:"
t MSG_186 "Rufus tidak memasang atau menjalankan servis di latar belakang. Oleh itu, semakan kemas kini hanya dijalankan apabila aplikasi utama berjalan.\\line\n"
"Akses internet diperlukan untuk menymeak untuk versi baru."
t MSG_187 "Imej tidak sah untuk pilihan boot yang dipilih"
t MSG_188 "Imej tidak serasi dengan pilihan boot yang dipilih. Tolong gunakan imej lain atau pilih pilihan boot lain."
# Status messages - these messages will appear on the status bar
t MSG_201 "Sedang membatalkan - Sila tunggu..."
t MSG_202 "Mengimbas imej ISO..."
t MSG_203 "Imbasan imej ISO gagal"
t MSG_202 "Mengimbas imej..."
t MSG_203 "Imbasan imej gagal"
# Parameter: the name of an obsolete Syslinux .c32 module. eg: "Obsolete vesamenu.c32 detected"
t MSG_204 "%s usang dikesan"
# Display the name of the ISO selected. eg: "Using ISO: en_win7_x64_sp1.iso"
@ -5938,10 +5954,12 @@ t MSG_256 "Pengesanan cakera palsu"
t MSG_257 "Sokongan Joliet"
t MSG_258 "Sokongan Rock Ridge"
t MSG_259 "Paksa kemas kini"
t MSG_260 "Mampatan NTFS"
t MSG_261 "Menulis imej: %0.1f%% selesai"
################################################################################
l "pl-PL" "Polish (Polski)" 0x0415
v 1.0.10
v 1.0.11
b "en-US"
# my info: 15.02.2014,16:14
@ -6069,7 +6087,7 @@ t MSG_007 "Anuluj"
t MSG_008 "Tak"
t MSG_009 "Nie"
t MSG_010 "Znaleziono uskodzone sektory"
t MSG_011 "Sprawdzanie zakończone: znaleziono %u uskodzone sektory(ów)\n"
t MSG_011 "Sprawdzanie zakończone: znaleziono %d uskodzone sektory(ów)\n"
" %d błędów odczytu\n %d błędów zapisu\n %d błędy(ów) uszkodzeń\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nRaport szczegółowy jest dostępny w:\n%s"
@ -6266,7 +6284,7 @@ t MSG_178 "Dodatkowe Prawa Autorskie:"
t MSG_179 "Polityka Aktualizacji:"
t MSG_180 "Jeśli pozwolisz temu programowi szukać aktualizacji aplikacji, "
"Zgadzasz się na to, że następujące informacje mogą być zbierane na naszy, serwerze (serwerach):"
t MSG_181 "Architektura i wersja twojego systemy operacyjnego"
t MSG_181 "Architektura i wersja twojego systemu operacyjnego"
t MSG_182 "Wersja aplikacji z której korzystasz"
t MSG_183 "Twój adres IP"
t MSG_184 "W celu generowania poufnych statystyk używania , możemy trzymać zebrane informacje, "
@ -6490,7 +6508,7 @@ t MSG_007 "Cancelar"
t MSG_008 "Sim"
t MSG_009 "Não"
t MSG_010 "Foram encontrados erros no disco"
t MSG_011 "Verificação completa: %u erros encontrados\n"
t MSG_011 "Verificação completa: %d erros encontrados\n"
" %d erros de leitura\n %d erros de escrita\n %d erros de corrupção\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nMais informações disponíveis em:\n%s"
@ -6880,7 +6898,7 @@ t MSG_007 "Anulează"
t MSG_008 "Da"
t MSG_009 "Nu"
t MSG_010 "Bloc defect Detectat"
t MSG_011 "Verificare completă: s-au găsit %u blocuri defecte\n"
t MSG_011 "Verificare completă: s-au găsit %d blocuri defecte\n"
" %d erori de citire\n %d erori de scriere\n %d erori de corupţie\n"
t MSG_012 "%s\n Un raport mai detaliat este disponibil în:\n%s"
t MSG_013 "Invalid"
@ -7134,7 +7152,7 @@ t MSG_260 "Compresie NTFS"
################################################################################
l "ru-RU" "Russian (Русский)" 0x0419, 0x0819
v 1.0.10
v 1.0.11
b "en-US"
# Main dialog
@ -7271,7 +7289,7 @@ t MSG_007 "Отмена"
t MSG_008 "Да"
t MSG_009 "Нет"
t MSG_010 "Найдены плохие блоки"
t MSG_011 "Проверка закончена: %u плохих блоков найдено\n"
t MSG_011 "Проверка закончена: %d плохих блоков найдено\n"
" %d ошибок чтения\n %d ошибок записи\n %d поврежденных блоков\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nБолее подробный отчет можно найти в:\n%s"
@ -7540,7 +7558,7 @@ t MSG_261 "Запись образа: %0.1f%% выполнено"
################################################################################
l "sl-SI" "Slovene (Slovenščina)" 0x0424
v 1.0.10
v 1.0.11
b "en-US"
# Main dialog
@ -7655,7 +7673,7 @@ t MSG_007 "Prekliči"
t MSG_008 "Da"
t MSG_009 "Ne"
t MSG_010 "Slabi bloki najdeni"
t MSG_011 "Preizkus končan: %u slabih blokov najdenih\n"
t MSG_011 "Preizkus končan: %d slabih blokov najdenih\n"
" Napak pri branju: %d\n Napak pri pisanju: %d\n %d corruption error(s)\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nPodrobnejše poročilo lahko najdete v datoteki\n%s"
@ -8068,7 +8086,7 @@ t MSG_007 "Cancelar"
t MSG_008 "Sí"
t MSG_009 "No"
t MSG_010 "Se encontraron bloques defectuosos"
t MSG_011 "Verificación completa: se encontraron %u bloques dañados\n"
t MSG_011 "Verificación completa: se encontraron %d bloques dañados\n"
" %d errores de lectura\n %d errores de escritura\n %d errores de corrupción\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nEl informe detallado se puede encontrar en:\n%s"
@ -8469,7 +8487,7 @@ t MSG_007 "Vazgeç"
t MSG_008 "Evet"
t MSG_009 "Hayır"
t MSG_010 "Hatalı bloklar bulundu"
t MSG_011 "Denetim Tamamlandı: %u hatalı blok bulundu\n"
t MSG_011 "Denetim Tamamlandı: %d hatalı blok bulundu\n"
" %d okuma hatası\n %d yazma hatası\n %d hata oluşumu\n"
# The following will contain the formatted message above as well as the name of the bad blocks logfile
t MSG_012 "%s\nDaha ayrıntılı rapor burada:\n%s"

View file

@ -473,9 +473,8 @@ uint64_t GetDriveSize(DWORD DriveIndex)
BOOL r;
HANDLE hPhysical;
DWORD size;
BYTE geometry[128];
void* disk_geometry = (void*)geometry;
PDISK_GEOMETRY_EX DiskGeometry = (PDISK_GEOMETRY_EX)disk_geometry;
BYTE geometry[256];
PDISK_GEOMETRY_EX DiskGeometry = (PDISK_GEOMETRY_EX)(void*)geometry;
hPhysical = GetPhysicalHandle(DriveIndex, FALSE, FALSE);
if (hPhysical == INVALID_HANDLE_VALUE)
@ -588,11 +587,9 @@ int GetDrivePartitionData(DWORD DriveIndex, char* FileSystemName, DWORD FileSyst
BOOL r, hasRufusExtra = FALSE;
HANDLE hPhysical;
DWORD size;
BYTE geometry[128], layout[4096], part_type;
void* disk_geometry = (void*)geometry;
void* drive_layout = (void*)layout;
PDISK_GEOMETRY_EX DiskGeometry = (PDISK_GEOMETRY_EX)disk_geometry;
PDRIVE_LAYOUT_INFORMATION_EX DriveLayout = (PDRIVE_LAYOUT_INFORMATION_EX)drive_layout;
BYTE geometry[256], layout[4096], part_type;
PDISK_GEOMETRY_EX DiskGeometry = (PDISK_GEOMETRY_EX)(void*)geometry;
PDRIVE_LAYOUT_INFORMATION_EX DriveLayout = (PDRIVE_LAYOUT_INFORMATION_EX)(void*)layout;
char* volume_name;
char tmp[256];
DWORD i, nb_partitions = 0;
@ -618,7 +615,8 @@ int GetDrivePartitionData(DWORD DriveIndex, char* FileSystemName, DWORD FileSyst
}
SelectedDrive.DiskSize = DiskGeometry->DiskSize.QuadPart;
memcpy(&SelectedDrive.Geometry, &DiskGeometry->Geometry, sizeof(DISK_GEOMETRY));
uprintf("Sector Size: %d bytes\n", DiskGeometry->Geometry.BytesPerSector);
uprintf("Disk type: %s, Sector Size: %d bytes\n", (DiskGeometry->Geometry.MediaType == FixedMedia)?"Fixed":"Removable",
DiskGeometry->Geometry.BytesPerSector);
uprintf("Cylinders: %lld, TracksPerCylinder: %d, SectorsPerTrack: %d\n",
DiskGeometry->Geometry.Cylinders, DiskGeometry->Geometry.TracksPerCylinder, DiskGeometry->Geometry.SectorsPerTrack);
@ -903,7 +901,8 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
case FS_NTFS:
case FS_EXFAT:
case FS_UDF:
DriveLayoutEx.PartitionEntry[0].Mbr.PartitionType = 0x07; // NTFS
case FS_REFS:
DriveLayoutEx.PartitionEntry[0].Mbr.PartitionType = 0x07;
break;
case FS_FAT32:
DriveLayoutEx.PartitionEntry[0].Mbr.PartitionType = 0x0c; // FAT32 LBA

View file

@ -116,7 +116,7 @@ static BOOLEAN __stdcall FormatExCallback(FILE_SYSTEM_CALLBACK_COMMAND Command,
PrintStatus(0, TRUE, MSG_218, nb_steps[fs_index], nb_steps[fs_index]);
UpdateProgress(OP_CREATE_FS, 100.0f);
if(*(BOOLEAN*)pData == FALSE) {
uprintf("Error while formatting.\n");
uprintf("Error while formatting");
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_GEN_FAILURE;
}
break;
@ -128,27 +128,29 @@ static BOOLEAN __stdcall FormatExCallback(FILE_SYSTEM_CALLBACK_COMMAND Command,
// uprintf("Volume size: %s MB\n", (char*)(LONG_PTR)(*(ULONG32*)pData));
break;
case FCC_INCOMPATIBLE_FILE_SYSTEM:
uprintf("Incompatible File System\n");
uprintf("Incompatible File System");
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_INCOMPATIBLE_FS);
break;
case FCC_ACCESS_DENIED:
uprintf("Access denied\n");
uprintf("Access denied");
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_ACCESS_DENIED;
break;
case FCC_MEDIA_WRITE_PROTECTED:
uprintf("Media is write protected\n");
uprintf("Media is write protected");
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_WRITE_PROTECT;
break;
case FCC_VOLUME_IN_USE:
uprintf("Volume is in use\n");
uprintf("Volume is in use");
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_DEVICE_IN_USE;
break;
case FCC_DEVICE_NOT_READY:
uprintf("The device is not ready");
case FCC_CANT_QUICK_FORMAT:
uprintf("Cannot quick format this volume\n");
uprintf("Cannot quick format this volume");
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_CANT_QUICK_FORMAT);
break;
case FCC_BAD_LABEL:
uprintf("Bad label\n");
uprintf("Bad label");
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_LABEL_TOO_LONG;
break;
case FCC_OUTPUT:
@ -156,19 +158,19 @@ static BOOLEAN __stdcall FormatExCallback(FILE_SYSTEM_CALLBACK_COMMAND Command,
break;
case FCC_CLUSTER_SIZE_TOO_BIG:
case FCC_CLUSTER_SIZE_TOO_SMALL:
uprintf("Unsupported cluster size\n");
uprintf("Unsupported cluster size");
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_INVALID_CLUSTER_SIZE);
break;
case FCC_VOLUME_TOO_BIG:
case FCC_VOLUME_TOO_SMALL:
uprintf("Volume is too %s\n", FCC_VOLUME_TOO_BIG?"big":"small");
uprintf("Volume is too %s", FCC_VOLUME_TOO_BIG?"big":"small");
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|APPERR(ERROR_INVALID_VOLUME_SIZE);
case FCC_NO_MEDIA_IN_DRIVE:
uprintf("No media in drive\n");
uprintf("No media in drive");
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_NO_MEDIA_IN_DRIVE;
break;
default:
uprintf("FormatExCallback: received unhandled command %X\n", Command);
uprintf("FormatExCallback: Received unhandled command 0x02%X - aborting", Command);
FormatStatus = ERROR_SEVERITY_ERROR|FAC(FACILITY_STORAGE)|ERROR_NOT_SUPPORTED;
break;
}
@ -371,6 +373,8 @@ static BOOL FormatFAT32(DWORD DriveIndex)
HANDLE hLogicalVolume;
DWORD cbRet;
DISK_GEOMETRY dgDrive;
BYTE geometry_ex[256]; // DISK_GEOMETRY_EX is variable size
PDISK_GEOMETRY_EX xdgDrive = (PDISK_GEOMETRY_EX)(void*)geometry_ex;
PARTITION_INFORMATION piDrive;
PARTITION_INFORMATION_EX xpiDrive;
// Recommended values
@ -417,21 +421,28 @@ static BOOL FormatFAT32(DWORD DriveIndex)
// Work out drive params
if (!DeviceIoControl (hLogicalVolume, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &dgDrive,
sizeof(dgDrive), &cbRet, NULL)) {
die("Failed to get device geometry\n", ERROR_NOT_SUPPORTED);
if (!DeviceIoControl (hLogicalVolume, IOCTL_DISK_GET_DRIVE_GEOMETRY_EX, NULL, 0, xdgDrive,
sizeof(geometry_ex), &cbRet, NULL)) {
uprintf("IOCTL_DISK_GET_DRIVE_GEOMETRY error: %s\n", WindowsErrorString());
die("Failed to get device geometry (both regular and _ex)\n", ERROR_NOT_SUPPORTED);
}
memcpy(&dgDrive, &xdgDrive->Geometry, sizeof(dgDrive));
}
if (IS_ERROR(FormatStatus)) 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,
sizeof(xpiDrive), &cbRet, NULL)) {
die("Failed to get partition info (both regular and _ex)", ERROR_NOT_SUPPORTED);
uprintf("IOCTL_DISK_GET_PARTITION_INFO error: %s\n", WindowsErrorString());
die("Failed to get partition info (both regular and _ex)\n", ERROR_NOT_SUPPORTED);
}
memset (&piDrive, 0, sizeof(piDrive));
memset(&piDrive, 0, sizeof(piDrive));
piDrive.StartingOffset.QuadPart = xpiDrive.StartingOffset.QuadPart;
piDrive.PartitionLength.QuadPart = xpiDrive.PartitionLength.QuadPart;
piDrive.HiddenSectors = (DWORD) (xpiDrive.StartingOffset.QuadPart / dgDrive.BytesPerSector);
}
if (IS_ERROR(FormatStatus)) goto out;
BytesPerSect = dgDrive.BytesPerSector;
@ -450,7 +461,7 @@ static BOOL FormatFAT32(DWORD DriveIndex)
// There would need to be an extra field in the FSInfo sector, and the old sector count could
// be set to 0xffffffff. This is non standard though, the Windows FAT driver FASTFAT.SYS won't
// understand this. Perhaps a future version of FAT32 and FASTFAT will handle this.
die ("This drive is too big for FAT32 - max 2TB supported\n", APPERR(ERROR_INVALID_VOLUME_SIZE));
die("This drive is too big for FAT32 - max 2TB supported\n", APPERR(ERROR_INVALID_VOLUME_SIZE));
}
pFAT32BootSect = (FAT_BOOTSECTOR32*) calloc(BytesPerSect, 1);
@ -1304,12 +1315,12 @@ DWORD WINAPI FormatThread(void* param)
_unlink(logfile);
goto out;
}
uprintf("Bad Blocks: Check completed, %u bad block%s found. (%d/%d/%d errors)\n",
uprintf("Bad Blocks: Check completed, %d bad block%s found. (%d/%d/%d errors)\n",
report.bb_count, (report.bb_count==1)?"":"s",
report.num_read_errors, report.num_write_errors, report.num_corruption_errors);
r = IDOK;
if (report.bb_count) {
bb_msg = lmprintf(MSG_011, report.num_read_errors, report.num_write_errors,
bb_msg = lmprintf(MSG_011, report.bb_count, report.num_read_errors, report.num_write_errors,
report.num_corruption_errors);
fprintf(log_fd, bb_msg);
GetLocalTime(&lt);

View file

@ -49,7 +49,7 @@ typedef enum {
FCC_UNKNOWN15,
FCC_UNKNOWN16,
FCC_UNKNOWN17,
FCC_UNKNOWN18,
FCC_DEVICE_NOT_READY,
FCC_CHECKDISK_PROGRESS,
FCC_UNKNOWN1A,
FCC_UNKNOWN1B,

View file

@ -107,7 +107,7 @@ typedef ULONG (WINAPI *SHChangeNotifyRegister_t)(
const MY_SHChangeNotifyEntry *pshcne
);
const char* FileSystemLabel[FS_MAX] = { "FAT", "FAT32", "NTFS", "UDF", "exFAT" };
const char* FileSystemLabel[FS_MAX] = { "FAT", "FAT32", "NTFS", "UDF", "exFAT", "ReFS" };
// Number of steps for each FS for FCC_STRUCTURE_PROGRESS
const int nb_steps[FS_MAX] = { 5, 5, 12, 1, 10 };
static const char* PartitionTypeLabel[2] = { "MBR", "GPT" };
@ -310,6 +310,12 @@ static BOOL DefineClusterSizes(void)
SelectedDrive.ClusterSize[FS_UDF].Allowed = 0x00000100;
SelectedDrive.ClusterSize[FS_UDF].Default = 1;
}
// ReFS (only supported for Windows 8.1 and later and for fixed disks)
if ((nWindowsVersion >= WINDOWS_8_1_OR_LATER) && (SelectedDrive.Geometry.MediaType == FixedMedia)) {
SelectedDrive.ClusterSize[FS_REFS].Allowed = 0x00000100;
SelectedDrive.ClusterSize[FS_REFS].Default = 1;
}
}
out:
@ -391,8 +397,6 @@ static BOOL SetDriveInfo(int ComboIndex)
SelectedDrive.DeviceNumber = (DWORD)ComboBox_GetItemData(hDeviceList, ComboIndex);
SelectedDrive.nPartitions = GetDrivePartitionData(SelectedDrive.DeviceNumber, fs_type, sizeof(fs_type));
if (SelectedDrive.nPartitions == 0)
return FALSE;
if (!DefineClusterSizes()) {
uprintf("No file system is selectable for this drive\n");
@ -627,20 +631,18 @@ static BOOL GetUSBDevices(DWORD devnum)
{
// The first two are standard Microsoft drivers (including the Windows 8 UASP one).
// The rest are the vendor UASP drivers I know of so far - list may be incomplete!
// The last is Microsofts VHD Mount driver to mount a VHD to a drive letter.
const char* usbstor_name[] = { "USBSTOR", "UASPSTOR", "VUSBSTOR", "EtronSTOR", "vhdmp" };
const char* storage_name[] = { "USBSTOR", "UASPSTOR", "VUSBSTOR", "ETRONSTOR" };
const char* scsi_name = "SCSI";
// Microsoft VHD Loopback Controller name
const char* msvhd_name = "MsVhdHba";
const char* vhd_name[] = { "Microsoft Virtual Disk", "Msft Virtual Disk SCSI Disk Device" };
char letter_name[] = " (?:)";
BOOL found = FALSE, is_SCSI, is_UASP, is_MSVHD;
BOOL found = FALSE, is_SCSI, is_UASP, is_VHD;
HDEVINFO dev_info = NULL;
SP_DEVINFO_DATA dev_info_data;
SP_DEVICE_INTERFACE_DATA devint_data;
PSP_DEVICE_INTERFACE_DETAIL_DATA_A devint_detail_data;
DEVINST parent_inst, device_inst;
DWORD size, i, j, k, datatype, drive_index;
ULONG list_size[ARRAYSIZE(usbstor_name)], full_list_size;
ULONG list_size[ARRAYSIZE(storage_name)], full_list_size;
HANDLE hDrive;
LONG maxwidth = 0;
RECT rect;
@ -663,10 +665,10 @@ static BOOL GetUSBDevices(DWORD devnum)
}
full_list_size = 0;
for (s=0; s<ARRAYSIZE(usbstor_name); s++) {
for (s=0; s<ARRAYSIZE(storage_name); s++) {
// Get a list of hardware IDs for all USB storage devices
// This will be used to retrieve the VID:PID of our devices
CM_Get_Device_ID_List_SizeA(&list_size[s], usbstor_name[s], CM_GETIDLIST_FILTER_SERVICE);
CM_Get_Device_ID_List_SizeA(&list_size[s], storage_name[s], CM_GETIDLIST_FILTER_SERVICE);
if (list_size[s] != 0)
full_list_size += list_size[s]-1; // remove extra NUL terminator
}
@ -680,9 +682,9 @@ static BOOL GetUSBDevices(DWORD devnum)
}
// Build a single list from all the storage enumerators we know of
for (s=0, i=0; s<ARRAYSIZE(usbstor_name); s++) {
for (s=0, i=0; s<ARRAYSIZE(storage_name); s++) {
if (list_size[s] > 1) {
CM_Get_Device_ID_ListA(usbstor_name[s], &devid_list[i], list_size[s], CM_GETIDLIST_FILTER_SERVICE);
CM_Get_Device_ID_ListA(storage_name[s], &devid_list[i], list_size[s], CM_GETIDLIST_FILTER_SERVICE);
// list_size is sometimes larger than required thus we need to find the real end
for (i += list_size[s]; i > 2; i--) {
if ((devid_list[i-2] != '\0') && (devid_list[i-1] == '\0') && (devid_list[i] == '\0'))
@ -701,58 +703,63 @@ static BOOL GetUSBDevices(DWORD devnum)
}
// UASP drives are listed under SCSI (along with regular SYSTEM drives => "DANGER, WILL ROBINSON!!!")
is_SCSI = (safe_stricmp(buffer, scsi_name) == 0);
if ((safe_stricmp(buffer, usbstor_name[0]) != 0) && (!is_SCSI))
if ((safe_stricmp(buffer, storage_name[0]) != 0) && (!is_SCSI))
continue;
memset(buffer, 0, sizeof(buffer));
vid = 0; pid = 0;
is_UASP = FALSE;
is_MSVHD = FALSE;
is_UASP = FALSE, is_VHD = FALSE;
if (!SetupDiGetDeviceRegistryPropertyA(dev_info, &dev_info_data, SPDRP_FRIENDLYNAME,
&datatype, (LPBYTE)buffer, sizeof(buffer), &size)) {
uprintf("SetupDiGetDeviceRegistryProperty (Friendly Name) failed: %s\n", WindowsErrorString());
// We can afford a failure on this call - just replace the name with "USB Storage Device (Generic)"
safe_strcpy(buffer, sizeof(buffer), lmprintf(MSG_045));
} else {
// Get the VID:PID of the device. We could avoid doing this lookup every time by keeping
// a lookup table, but there shouldn't be that many USB storage devices connected...
for (devid = devid_list; *devid; devid += strlen(devid) + 1) {
if ( (CM_Locate_DevNodeA(&parent_inst, devid, 0) == 0)
&& (CM_Get_Child(&device_inst, parent_inst, 0) == 0)
&& (device_inst == dev_info_data.DevInst) ) {
BOOL post_backslash = FALSE;
// If we're not dealing with the USBSTOR part of our list, then this is an UASP device
is_UASP = ((((uintptr_t)devid)+2) >= ((uintptr_t)devid_list)+list_size[0]);
for (j=0, k=0; (j<strlen(devid))&&(k<2); j++) {
// The ID is in the form USB_VENDOR_BUSID\VID_xxxx&PID_xxxx\...
if (devid[j] == '\\')
post_backslash = TRUE;
// Check if this is a VHD
is_MSVHD = (safe_strstr(devid, msvhd_name) != NULL);
if (is_MSVHD)
break;
if (!post_backslash)
continue;
if (devid[j] == '_') {
pid = (uint16_t)strtoul(&devid[j+1], NULL, 16);
// We could have used a vid_pid[] table, but keeping vid/pid separate is clearer
if (k++==0) vid = pid;
for (j = 0; j < ARRAYSIZE(vhd_name); j++) {
if (safe_stricmp(buffer, vhd_name[j]) == 0) {
is_VHD = TRUE;
}
}
if (is_VHD == FALSE) {
// Get the VID:PID of the device. We could avoid doing this lookup every time by keeping
// a lookup table, but there shouldn't be that many USB storage devices connected...
for (devid = devid_list; *devid; devid += strlen(devid) + 1) {
if ( (CM_Locate_DevNodeA(&parent_inst, devid, 0) == 0)
&& (CM_Get_Child(&device_inst, parent_inst, 0) == 0)
&& (device_inst == dev_info_data.DevInst) ) {
BOOL post_backslash = FALSE;
// If we're not dealing with the USBSTOR part of our list, then this is an UASP device
is_UASP = ((((uintptr_t)devid)+2) >= ((uintptr_t)devid_list)+list_size[0]);
for (j=0, k=0; (j<strlen(devid))&&(k<2); j++) {
// The ID is in the form USB_VENDOR_BUSID\VID_xxxx&PID_xxxx\...
if (devid[j] == '\\')
post_backslash = TRUE;
if (!post_backslash)
continue;
if (devid[j] == '_') {
pid = (uint16_t)strtoul(&devid[j+1], NULL, 16);
// We could have used a vid_pid[] table, but keeping vid/pid separate is clearer
if (k++==0) vid = pid;
}
}
}
}
}
}
if ((vid == 0) && (pid == 0) && !is_MSVHD) {
if (is_SCSI) {
// If we have an SCSI drive and couldn't get a VID:PID, we are most likely
// dealing with a system drive => eliminate it!
continue;
}
safe_strcpy(str, sizeof(str), "????:????"); // Couldn't figure VID:PID
if (is_VHD) {
uprintf("Found VHD device '%s'\n", buffer);
} else {
safe_sprintf(str, sizeof(str), "%04X:%04X", vid, pid);
if ((vid == 0) && (pid == 0)) {
if (is_SCSI) {
// If we have an SCSI drive and couldn't get a VID:PID, we are most likely
// dealing with a system drive => eliminate it!
continue;
}
safe_strcpy(str, sizeof(str), "????:????"); // Couldn't figure VID:PID
} else {
safe_sprintf(str, sizeof(str), "%04X:%04X", vid, pid);
}
uprintf("Found %s device '%s' (%s)\n", is_UASP?"UAS":"USB", buffer, str);
}
uprintf("Found %s device '%s' (%s)\n", is_UASP?"UAS":"USB", buffer, str);
devint_data.cbSize = sizeof(devint_data);
hDrive = INVALID_HANDLE_VALUE;
devint_detail_data = NULL;
@ -2024,8 +2031,8 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
break;
}
SetClusterSizes(fs);
// Disable/restore the quick format control depending on large FAT32
if ((fs == FS_FAT32) && ((SelectedDrive.DiskSize > LARGE_FAT32_SIZE) || (force_large_fat32))) {
// Disable/restore the quick format control depending on large FAT32 or ReFS
if ( ((fs == FS_FAT32) && ((SelectedDrive.DiskSize > LARGE_FAT32_SIZE) || (force_large_fat32))) || (fs == FS_REFS) ) {
if (IsWindowEnabled(GetDlgItem(hMainDialog, IDC_QUICKFORMAT))) {
uQFChecked = IsChecked(IDC_QUICKFORMAT);
CheckDlgButton(hMainDialog, IDC_QUICKFORMAT, BST_CHECKED);
@ -2048,7 +2055,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
}
break;
}
if ((fs == FS_EXFAT) || (fs == FS_UDF)) {
if ((fs == FS_EXFAT) || (fs == FS_UDF) || (fs == FS_REFS)) {
if (IsWindowEnabled(hBoot)) {
// unlikely to be supported by BIOSes => don't bother
IGNORE_RETVAL(ComboBox_SetCurSel(hBootType, 0));

View file

@ -172,6 +172,7 @@ enum {
FS_NTFS,
FS_UDF,
FS_EXFAT,
FS_REFS,
FS_MAX
};

View file

@ -32,7 +32,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_DIALOG DIALOGEX 12, 12, 206, 329
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Rufus 1.4.6.441"
CAPTION "Rufus 1.4.7.446"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Start",IDC_START,94,291,50,14
@ -165,7 +165,7 @@ END
RTL_IDD_DIALOG DIALOGEX 12, 12, 206, 329
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_RTLREADING | WS_EX_APPWINDOW | WS_EX_LAYOUTRTL
CAPTION "Rufus 1.4.6.441"
CAPTION "Rufus 1.4.7.446"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Start",IDC_START,94,291,50,14
@ -427,8 +427,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,4,6,441
PRODUCTVERSION 1,4,6,441
FILEVERSION 1,4,7,446
PRODUCTVERSION 1,4,7,446
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -445,13 +445,13 @@ BEGIN
BEGIN
VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)"
VALUE "FileDescription", "Rufus"
VALUE "FileVersion", "1.4.6.441"
VALUE "FileVersion", "1.4.7.446"
VALUE "InternalName", "Rufus"
VALUE "LegalCopyright", "© 2011-2014 Pete Batard (GPL v3)"
VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html"
VALUE "OriginalFilename", "rufus.exe"
VALUE "ProductName", "Rufus"
VALUE "ProductVersion", "1.4.6.441"
VALUE "ProductVersion", "1.4.7.446"
END
END
BLOCK "VarFileInfo"

View file

@ -196,6 +196,7 @@ char* SizeToHumanReadable(uint64_t size, BOOL log, BOOL fake_units)
const char* _StrError(DWORD error_code)
{
if ( (!IS_ERROR(error_code)) || (SCODE_CODE(error_code) == ERROR_SUCCESS)) {
// TODO: this message is wrong!
return lmprintf(MSG_044);
}
if (SCODE_FACILITY(error_code) != FACILITY_STORAGE) {