mirror of
https://github.com/pbatard/rufus.git
synced 2025-05-22 10:55:19 -04:00
[ui] display a notice about Secure Boot when UEFI:NTFS is applied
This commit is contained in:
parent
2ba62fa891
commit
15806de646
9 changed files with 98 additions and 37 deletions
|
@ -6,6 +6,11 @@ https://github.com/pbatard/rufus/wiki/Localization#Editing_a_translation
|
||||||
Or simply download the latest pollock.exe from https://rufus.ie/locale/ and follow
|
Or simply download the latest pollock.exe from https://rufus.ie/locale/ and follow
|
||||||
its directions.
|
its directions.
|
||||||
|
|
||||||
|
o v3.x
|
||||||
|
- *NEW* MSG_127 "Do not show this message again"
|
||||||
|
- *NEW* MSG_128 "Important notice about Secure Boot"
|
||||||
|
- *NEW* MSG_129 "You have just created a media that includes the UEFI:NTFS bootloader (...)"
|
||||||
|
|
||||||
o v3.2 (2018.07.20)
|
o v3.2 (2018.07.20)
|
||||||
The following appears in Advanced format options → Check device for bad blocks → dropdown menu with
|
The following appears in Advanced format options → Check device for bad blocks → dropdown menu with
|
||||||
%s being replaced with SLC, MLC or TLC, which is a type of NAND (or flash memory. In other words,
|
%s being replaced with SLC, MLC or TLC, which is a type of NAND (or flash memory. In other words,
|
||||||
|
|
|
@ -327,6 +327,9 @@ t MSG_124 "No persistence"
|
||||||
# Tooltips used for the peristence size slider and edit control
|
# Tooltips used for the peristence size slider and edit control
|
||||||
t MSG_125 "Set the size of the persistent partition for live USB media. Setting the size to 0 disables the persistent partition."
|
t MSG_125 "Set the size of the persistent partition for live USB media. Setting the size to 0 disables the persistent partition."
|
||||||
t MSG_126 "Set the partition size units."
|
t MSG_126 "Set the partition size units."
|
||||||
|
t MSG_127 "Do not show this message again"
|
||||||
|
t MSG_128 "Important notice about Secure Boot"
|
||||||
|
t MSG_129 "You have just created a media that includes the UEFI:NTFS bootloader. Please remember that, to be able to boot this media, YOU WILL NEED TO DISABLE SECURE BOOT.\nFor more details on the reasons behind this, you may click the button below."
|
||||||
t MSG_150 "Type of computer you plan to use this bootable drive with. It is your responsibility to determine whether "
|
t MSG_150 "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."
|
"your target is of BIOS or UEFI type before you start creating the drive, as it may fail to boot otherwise."
|
||||||
# You shouldn't translate 'Legacy Mode' as this is an option that usually appears in English in the UEFI settings.
|
# You shouldn't translate 'Legacy Mode' as this is an option that usually appears in English in the UEFI settings.
|
||||||
|
@ -4253,6 +4256,9 @@ t MSG_123 "Taille de partition persistente"
|
||||||
t MSG_124 "Désactivée"
|
t MSG_124 "Désactivée"
|
||||||
t MSG_125 "Etablit la taille de la partition persistente pour media USB de type \"live\". Une taille de 0 désactive l’utilisation d’une partition persistente."
|
t MSG_125 "Etablit la taille de la partition persistente pour media USB de type \"live\". Une taille de 0 désactive l’utilisation d’une partition persistente."
|
||||||
t MSG_126 "Unité de taille utilisée pour la partition persistente."
|
t MSG_126 "Unité de taille utilisée pour la partition persistente."
|
||||||
|
t MSG_127 "Ne plus montrer ce message"
|
||||||
|
t MSG_128 "Note importante a propos de Secure Boot"
|
||||||
|
t MSG_129 "Vous venez juste de créer un média qui utilise UEFI:NTFS. Veuillez prendre note que, pour pouvoir démarrer ce média, VOUS DEVREZ DESACTIVER SECURE BOOT.\nPour plus de détails (en Anglais) sur les raisons nécessitant ce changement, vous pouvez cliquer sur le bouton ci dessous."
|
||||||
t MSG_150 "Type d'ordinateur avec lequel vous comptez utiliser ce disque démarrable. Il est de votre responsabilité de déterminer s'il s'agit d'un type BIOS ou UEFI avant de commencer a créer votre périphérique, car il risque de ne pas démarrer sinon."
|
t MSG_150 "Type d'ordinateur avec lequel vous comptez utiliser ce disque démarrable. Il est de votre responsabilité de déterminer s'il s'agit d'un type BIOS ou UEFI avant de commencer a créer votre périphérique, car il risque de ne pas démarrer sinon."
|
||||||
t MSG_151 "'UEFI-CSM' signifie que le périphérique démarrera seulement en mode émulation BIOS (i.e. 'Legacy Mode') sous UEFI, et non pas en mode UEFI natif."
|
t MSG_151 "'UEFI-CSM' signifie que le périphérique démarrera seulement en mode émulation BIOS (i.e. 'Legacy Mode') sous UEFI, et non pas en mode UEFI natif."
|
||||||
t MSG_152 "'non CSM' signifie que le périphérique démarrera seulement en mode UEFI natif, et non pas en mode émulation BIOS (i.e. 'Legacy Mode')."
|
t MSG_152 "'non CSM' signifie que le périphérique démarrera seulement en mode UEFI natif, et non pas en mode émulation BIOS (i.e. 'Legacy Mode')."
|
||||||
|
|
|
@ -61,6 +61,7 @@ PF_TYPE_DECL(NTAPI, NTSTATUS, NtQueryVolumeInformationFile, (HANDLE, PIO_STATUS_
|
||||||
* Globals
|
* Globals
|
||||||
*/
|
*/
|
||||||
RUFUS_DRIVE_INFO SelectedDrive;
|
RUFUS_DRIVE_INFO SelectedDrive;
|
||||||
|
BOOL installed_uefi_ntfs;
|
||||||
const char* sfd_name = "Super Floppy Disk";
|
const char* sfd_name = "Super Floppy Disk";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1250,6 +1251,7 @@ BOOL CreatePartition(HANDLE hDrive, int partition_style, int file_system, BOOL m
|
||||||
uprintf("Write error: %s", WindowsErrorString());
|
uprintf("Write error: %s", WindowsErrorString());
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
installed_uefi_ntfs = TRUE;
|
||||||
}
|
}
|
||||||
pn++;
|
pn++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,7 +108,7 @@
|
||||||
#define IDC_EXTENDED_LABEL 1015
|
#define IDC_EXTENDED_LABEL 1015
|
||||||
#define IDC_RUFUS_MBR 1016
|
#define IDC_RUFUS_MBR 1016
|
||||||
#define IDC_TARGET_SYSTEM 1017
|
#define IDC_TARGET_SYSTEM 1017
|
||||||
#define IDC_PERSISTENCE_SIZE 1118
|
#define IDC_PERSISTENCE_SIZE 1018
|
||||||
#define IDC_PERSISTENCE_UNITS 1019
|
#define IDC_PERSISTENCE_UNITS 1019
|
||||||
#define IDC_DISK_ID 1020
|
#define IDC_DISK_ID 1020
|
||||||
#define IDC_OLD_BIOS_FIXES 1021
|
#define IDC_OLD_BIOS_FIXES 1021
|
||||||
|
@ -140,6 +140,7 @@
|
||||||
#define IDC_LOG_EDIT 1055
|
#define IDC_LOG_EDIT 1055
|
||||||
#define IDC_LOG_SAVE 1056
|
#define IDC_LOG_SAVE 1056
|
||||||
#define IDC_LOG_CLEAR 1057
|
#define IDC_LOG_CLEAR 1057
|
||||||
|
#define IDC_DONT_DISPLAY_AGAIN 1059
|
||||||
#define IDC_MORE_INFO 1060
|
#define IDC_MORE_INFO 1060
|
||||||
#define IDC_POLICY 1061
|
#define IDC_POLICY 1061
|
||||||
#define IDC_UPDATE_FREQUENCY 1062
|
#define IDC_UPDATE_FREQUENCY 1062
|
||||||
|
|
23
src/rufus.c
23
src/rufus.c
|
@ -104,7 +104,8 @@ BOOL iso_op_in_progress = FALSE, format_op_in_progress = FALSE, right_to_left_mo
|
||||||
BOOL enable_HDDs = FALSE, force_update = FALSE, enable_ntfs_compression = FALSE, no_confirmation_on_cancel = FALSE, lock_drive = TRUE;
|
BOOL enable_HDDs = FALSE, force_update = FALSE, enable_ntfs_compression = FALSE, no_confirmation_on_cancel = FALSE, lock_drive = TRUE;
|
||||||
BOOL advanced_mode_device, advanced_mode_format, allow_dual_uefi_bios, detect_fakes, enable_vmdk, force_large_fat32, usb_debug;
|
BOOL advanced_mode_device, advanced_mode_format, allow_dual_uefi_bios, detect_fakes, enable_vmdk, force_large_fat32, usb_debug;
|
||||||
BOOL use_fake_units, preserve_timestamps = FALSE, fast_zeroing = FALSE, app_changed_size = FALSE;
|
BOOL use_fake_units, preserve_timestamps = FALSE, fast_zeroing = FALSE, app_changed_size = FALSE;
|
||||||
BOOL zero_drive = FALSE, list_non_usb_removable_drives = FALSE, enable_file_indexing, large_drive = FALSE, write_as_image = FALSE;
|
BOOL zero_drive = FALSE, list_non_usb_removable_drives = FALSE, enable_file_indexing, large_drive = FALSE;
|
||||||
|
BOOL write_as_image = FALSE, installed_uefi_ntfs;
|
||||||
uint64_t persistence_size = 0;
|
uint64_t persistence_size = 0;
|
||||||
float fScale = 1.0f;
|
float fScale = 1.0f;
|
||||||
int dialog_showing = 0, selection_default = BT_IMAGE, windows_to_go_selection = 0, persistence_unit_selection = -1;
|
int dialog_showing = 0, selection_default = BT_IMAGE, windows_to_go_selection = 0, persistence_unit_selection = -1;
|
||||||
|
@ -1839,7 +1840,7 @@ static BOOL CheckDriveAccess(DWORD dwTimeOut)
|
||||||
message = GetMuiString("shell32.dll", 28701); // "This drive is in use (...) Do you want to format it anyway?"
|
message = GetMuiString("shell32.dll", 28701); // "This drive is in use (...) Do you want to format it anyway?"
|
||||||
if (message != NULL) {
|
if (message != NULL) {
|
||||||
ComboBox_GetTextU(hDeviceList, title, sizeof(title));
|
ComboBox_GetTextU(hDeviceList, title, sizeof(title));
|
||||||
proceed = Notification(MSG_WARNING_QUESTION, NULL, title, message);
|
proceed = Notification(MSG_WARNING_QUESTION, NULL, NULL, title, message);
|
||||||
free(message);
|
free(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1884,7 +1885,10 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
#ifdef RUFUS_TEST
|
#ifdef RUFUS_TEST
|
||||||
if (LOWORD(wParam) == IDC_TEST) {
|
if (LOWORD(wParam) == IDC_TEST) {
|
||||||
uprintf("CPU ARCH: %d", GetCpuArch());
|
notification_info more_info;
|
||||||
|
more_info.id = MORE_INFO_URL;
|
||||||
|
more_info.url = SECURE_BOOT_MORE_INFO_URL;
|
||||||
|
Notification(MSG_INFO, SETTING_DISABLE_SECURE_BOOT_NOTICE, &more_info, lmprintf(MSG_128), lmprintf(MSG_129));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -2206,6 +2210,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
tt = (int)ComboBox_GetItemData(hTargetSystem, ComboBox_GetCurSel(hTargetSystem));
|
tt = (int)ComboBox_GetItemData(hTargetSystem, ComboBox_GetCurSel(hTargetSystem));
|
||||||
fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
fs = (int)ComboBox_GetItemData(hFileSystem, ComboBox_GetCurSel(hFileSystem));
|
||||||
write_as_image = FALSE;
|
write_as_image = FALSE;
|
||||||
|
installed_uefi_ntfs = FALSE;
|
||||||
// Disable all controls except Cancel
|
// Disable all controls except Cancel
|
||||||
EnableControls(FALSE);
|
EnableControls(FALSE);
|
||||||
FormatStatus = 0;
|
FormatStatus = 0;
|
||||||
|
@ -2512,7 +2517,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case UM_NO_UPDATE:
|
case UM_NO_UPDATE:
|
||||||
Notification(MSG_INFO, NULL, lmprintf(MSG_243), lmprintf(MSG_247));
|
Notification(MSG_INFO, NULL, NULL, lmprintf(MSG_243), lmprintf(MSG_247));
|
||||||
// Need to manually set focus back to "Check Now" for tabbing to work
|
// Need to manually set focus back to "Check Now" for tabbing to work
|
||||||
SendMessage(hUpdatesDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hUpdatesDlg, IDC_CHECK_NOW), TRUE);
|
SendMessage(hUpdatesDlg, WM_NEXTDLGCTL, (WPARAM)GetDlgItem(hUpdatesDlg, IDC_CHECK_NOW), TRUE);
|
||||||
break;
|
break;
|
||||||
|
@ -2617,11 +2622,17 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
PrintInfo(0, MSG_210);
|
PrintInfo(0, MSG_210);
|
||||||
MessageBeep(MB_OK);
|
MessageBeep(MB_OK);
|
||||||
FlashTaskbar(dialog_handle);
|
FlashTaskbar(dialog_handle);
|
||||||
|
if (installed_uefi_ntfs && (!ReadSettingBool(SETTING_DISABLE_SECURE_BOOT_NOTICE))) {
|
||||||
|
notification_info more_info;
|
||||||
|
more_info.id = MORE_INFO_URL;
|
||||||
|
more_info.url = SECURE_BOOT_MORE_INFO_URL;
|
||||||
|
Notification(MSG_INFO, SETTING_DISABLE_SECURE_BOOT_NOTICE, &more_info, lmprintf(MSG_128), lmprintf(MSG_129));
|
||||||
|
}
|
||||||
} else if (SCODE_CODE(FormatStatus) == ERROR_CANCELLED) {
|
} else if (SCODE_CODE(FormatStatus) == ERROR_CANCELLED) {
|
||||||
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_PAUSED, 0);
|
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_PAUSED, 0);
|
||||||
SetTaskbarProgressState(TASKBAR_PAUSED);
|
SetTaskbarProgressState(TASKBAR_PAUSED);
|
||||||
PrintInfo(0, MSG_211);
|
PrintInfo(0, MSG_211);
|
||||||
Notification(MSG_INFO, NULL, lmprintf(MSG_211), lmprintf(MSG_041));
|
Notification(MSG_INFO, NULL, NULL, lmprintf(MSG_211), lmprintf(MSG_041));
|
||||||
} else {
|
} else {
|
||||||
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_ERROR, 0);
|
SendMessage(hProgress, PBM_SETSTATE, (WPARAM)PBST_ERROR, 0);
|
||||||
SetTaskbarProgressState(TASKBAR_ERROR);
|
SetTaskbarProgressState(TASKBAR_ERROR);
|
||||||
|
@ -2660,7 +2671,7 @@ static INT_PTR CALLBACK MainCallback(HWND hDlg, UINT message, WPARAM wParam, LPA
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Notification(MSG_ERROR, NULL, lmprintf(MSG_042), lmprintf(MSG_043, StrError(FormatStatus, FALSE)));
|
Notification(MSG_ERROR, NULL, NULL, lmprintf(MSG_042), lmprintf(MSG_043, StrError(FormatStatus, FALSE)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FormatStatus = 0;
|
FormatStatus = 0;
|
||||||
|
|
|
@ -72,6 +72,7 @@
|
||||||
#define MAX_GPT_PARTITIONS 128
|
#define MAX_GPT_PARTITIONS 128
|
||||||
#define MAX_SECTORS_TO_CLEAR 128 // nb sectors to zap when clearing the MBR/GPT (must be >34)
|
#define MAX_SECTORS_TO_CLEAR 128 // nb sectors to zap when clearing the MBR/GPT (must be >34)
|
||||||
#define MBR_UEFI_MARKER 0x49464555 // 'U', 'E', 'F', 'I', as a 32 bit little endian longword
|
#define MBR_UEFI_MARKER 0x49464555 // 'U', 'E', 'F', 'I', as a 32 bit little endian longword
|
||||||
|
#define MORE_INFO_URL 0xFFFF
|
||||||
#define STATUS_MSG_TIMEOUT 3500 // How long should cheat mode messages appear for on the status bar
|
#define STATUS_MSG_TIMEOUT 3500 // How long should cheat mode messages appear for on the status bar
|
||||||
#define WRITE_RETRIES 4
|
#define WRITE_RETRIES 4
|
||||||
#define WRITE_TIMEOUT 5000 // How long we should wait between write retries
|
#define WRITE_TIMEOUT 5000 // How long we should wait between write retries
|
||||||
|
@ -100,6 +101,7 @@
|
||||||
#endif
|
#endif
|
||||||
#define DOWNLOAD_URL RUFUS_URL "/downloads"
|
#define DOWNLOAD_URL RUFUS_URL "/downloads"
|
||||||
#define FILES_URL RUFUS_URL "/files"
|
#define FILES_URL RUFUS_URL "/files"
|
||||||
|
#define SECURE_BOOT_MORE_INFO_URL "https://github.com/pbatard/rufus/wiki/FAQ#Why_do_I_need_to_disable_Secure_Boot_to_use_UEFINTFS"
|
||||||
#define SEVENZIP_URL "https://www.7-zip.org"
|
#define SEVENZIP_URL "https://www.7-zip.org"
|
||||||
#define FILES_DIR "rufus_files"
|
#define FILES_DIR "rufus_files"
|
||||||
#define IGNORE_RETVAL(expr) do { (void)(expr); } while(0)
|
#define IGNORE_RETVAL(expr) do { (void)(expr); } while(0)
|
||||||
|
@ -197,7 +199,10 @@ enum notification_type {
|
||||||
typedef INT_PTR (CALLBACK *Callback_t)(HWND, UINT, WPARAM, LPARAM);
|
typedef INT_PTR (CALLBACK *Callback_t)(HWND, UINT, WPARAM, LPARAM);
|
||||||
typedef struct {
|
typedef struct {
|
||||||
WORD id;
|
WORD id;
|
||||||
Callback_t callback;
|
union {
|
||||||
|
Callback_t callback;
|
||||||
|
char* url;
|
||||||
|
};
|
||||||
} notification_info; // To provide a "More info..." on notifications
|
} notification_info; // To provide a "More info..." on notifications
|
||||||
|
|
||||||
/* Status Bar sections */
|
/* Status Bar sections */
|
||||||
|
@ -481,7 +486,7 @@ extern INT_PTR CreateAboutBox(void);
|
||||||
extern BOOL CreateTooltip(HWND hControl, const char* message, int duration);
|
extern BOOL CreateTooltip(HWND hControl, const char* message, int duration);
|
||||||
extern void DestroyTooltip(HWND hWnd);
|
extern void DestroyTooltip(HWND hWnd);
|
||||||
extern void DestroyAllTooltips(void);
|
extern void DestroyAllTooltips(void);
|
||||||
extern BOOL Notification(int type, const notification_info* more_info, char* title, char* format, ...);
|
extern BOOL Notification(int type, const char* dont_display_setting, const notification_info* more_info, char* title, char* format, ...);
|
||||||
extern int SelectionDialog(char* title, char* message, char** choices, int size);
|
extern int SelectionDialog(char* title, char* message, char** choices, int size);
|
||||||
extern void ListDialog(char* title, char* message, char** items, int size);
|
extern void ListDialog(char* title, char* message, char** items, int size);
|
||||||
extern SIZE GetTextSize(HWND hCtrl, char* txt);
|
extern SIZE GetTextSize(HWND hCtrl, char* txt);
|
||||||
|
|
20
src/rufus.rc
20
src/rufus.rc
|
@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
IDD_DIALOG DIALOGEX 12, 12, 232, 326
|
IDD_DIALOG DIALOGEX 12, 12, 232, 326
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
EXSTYLE WS_EX_ACCEPTFILES
|
EXSTYLE WS_EX_ACCEPTFILES
|
||||||
CAPTION "Rufus 3.4.1423"
|
CAPTION "Rufus 3.4.1424"
|
||||||
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
|
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
|
||||||
|
@ -129,7 +129,7 @@ BEGIN
|
||||||
DEFPUSHBUTTON "Close",IDCANCEL,306,305,50,12
|
DEFPUSHBUTTON "Close",IDCANCEL,306,305,50,12
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_NOTIFICATION DIALOGEX 0, 0, 263, 59
|
IDD_NOTIFICATION DIALOGEX 0, 0, 263, 73
|
||||||
STYLE DS_SETFONT | DS_NOFAILCREATE | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME
|
STYLE DS_SETFONT | DS_NOFAILCREATE | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_THICKFRAME
|
||||||
CAPTION "Rufus"
|
CAPTION "Rufus"
|
||||||
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
|
||||||
|
@ -138,9 +138,11 @@ BEGIN
|
||||||
LTEXT "",IDC_STATIC,0,0,263,34
|
LTEXT "",IDC_STATIC,0,0,263,34
|
||||||
ICON OCR_UP,IDC_NOTIFICATION_ICON,6,6,20,20
|
ICON OCR_UP,IDC_NOTIFICATION_ICON,6,6,20,20
|
||||||
LTEXT "Message",IDC_NOTIFICATION_TEXT,35,6,219,20
|
LTEXT "Message",IDC_NOTIFICATION_TEXT,35,6,219,20
|
||||||
DEFPUSHBUTTON "No",IDNO,206,40,50,14
|
DEFPUSHBUTTON "No",IDNO,205,53,50,14
|
||||||
PUSHBUTTON "More information",IDC_MORE_INFO,8,40,76,14,NOT WS_VISIBLE
|
PUSHBUTTON "More information",IDC_MORE_INFO,8,53,76,14,NOT WS_VISIBLE
|
||||||
PUSHBUTTON "Yes",IDYES,149,40,50,14,NOT WS_VISIBLE
|
PUSHBUTTON "Yes",IDYES,148,53,50,14,NOT WS_VISIBLE
|
||||||
|
CONTROL "Do not show this message again",IDC_DONT_DISPLAY_AGAIN,
|
||||||
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,39,248,10,WS_EX_TRANSPARENT
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_SELECTION DIALOGEX 0, 0, 312, 71
|
IDD_SELECTION DIALOGEX 0, 0, 312, 71
|
||||||
|
@ -392,8 +394,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 3,4,1423,0
|
FILEVERSION 3,4,1424,0
|
||||||
PRODUCTVERSION 3,4,1423,0
|
PRODUCTVERSION 3,4,1424,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -411,13 +413,13 @@ BEGIN
|
||||||
VALUE "Comments", "https://akeo.ie"
|
VALUE "Comments", "https://akeo.ie"
|
||||||
VALUE "CompanyName", "Akeo Consulting"
|
VALUE "CompanyName", "Akeo Consulting"
|
||||||
VALUE "FileDescription", "Rufus"
|
VALUE "FileDescription", "Rufus"
|
||||||
VALUE "FileVersion", "3.4.1423"
|
VALUE "FileVersion", "3.4.1424"
|
||||||
VALUE "InternalName", "Rufus"
|
VALUE "InternalName", "Rufus"
|
||||||
VALUE "LegalCopyright", "© 2011-2018 Pete Batard (GPL v3)"
|
VALUE "LegalCopyright", "© 2011-2018 Pete Batard (GPL v3)"
|
||||||
VALUE "LegalTrademarks", "https://www.gnu.org/copyleft/gpl.html"
|
VALUE "LegalTrademarks", "https://www.gnu.org/copyleft/gpl.html"
|
||||||
VALUE "OriginalFilename", "rufus-3.4.exe"
|
VALUE "OriginalFilename", "rufus-3.4.exe"
|
||||||
VALUE "ProductName", "Rufus"
|
VALUE "ProductName", "Rufus"
|
||||||
VALUE "ProductVersion", "3.4.1423"
|
VALUE "ProductVersion", "3.4.1424"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
|
@ -34,6 +34,7 @@ extern char* ini_file;
|
||||||
#define SETTING_COMM_CHECK "CommCheck64"
|
#define SETTING_COMM_CHECK "CommCheck64"
|
||||||
#define SETTING_LOCALE "Locale"
|
#define SETTING_LOCALE "Locale"
|
||||||
#define SETTING_DISABLE_LGP "DisableLGP"
|
#define SETTING_DISABLE_LGP "DisableLGP"
|
||||||
|
#define SETTING_DISABLE_SECURE_BOOT_NOTICE "DisableSecureBootNotice"
|
||||||
|
|
||||||
#define SETTING_ADVANCED_MODE "AdvancedMode"
|
#define SETTING_ADVANCED_MODE "AdvancedMode"
|
||||||
#define SETTING_ADVANCED_MODE_DEVICE "ShowAdvancedDriveProperties"
|
#define SETTING_ADVANCED_MODE_DEVICE "ShowAdvancedDriveProperties"
|
||||||
|
|
66
src/stdlg.c
66
src/stdlg.c
|
@ -31,6 +31,8 @@
|
||||||
#include <shlobj.h>
|
#include <shlobj.h>
|
||||||
#include <commdlg.h>
|
#include <commdlg.h>
|
||||||
#include <richedit.h>
|
#include <richedit.h>
|
||||||
|
#undef NDEBUG
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "rufus.h"
|
#include "rufus.h"
|
||||||
#include "missing.h"
|
#include "missing.h"
|
||||||
|
@ -55,6 +57,7 @@ static WNDPROC pOrgBrowseWndproc;
|
||||||
static const SETTEXTEX friggin_microsoft_unicode_amateurs = {ST_DEFAULT, CP_UTF8};
|
static const SETTEXTEX friggin_microsoft_unicode_amateurs = {ST_DEFAULT, CP_UTF8};
|
||||||
static BOOL notification_is_question;
|
static BOOL notification_is_question;
|
||||||
static const notification_info* notification_more_info;
|
static const notification_info* notification_more_info;
|
||||||
|
static const char* notification_dont_display_setting;
|
||||||
static WNDPROC update_original_proc = NULL;
|
static WNDPROC update_original_proc = NULL;
|
||||||
static HWINEVENTHOOK fp_weh = NULL;
|
static HWINEVENTHOOK fp_weh = NULL;
|
||||||
static char *fp_title_str = "Microsoft Windows", *fp_button_str = "Format disk";
|
static char *fp_title_str = "Microsoft Windows", *fp_button_str = "Format disk";
|
||||||
|
@ -659,11 +662,11 @@ INT_PTR CreateAboutBox(void)
|
||||||
INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
LRESULT loc;
|
LRESULT loc;
|
||||||
int i, dh;
|
int i, dh, cbh = 0;
|
||||||
// Prevent resizing
|
// Prevent resizing
|
||||||
static LRESULT disabled[9] = { HTLEFT, HTRIGHT, HTTOP, HTBOTTOM, HTSIZE,
|
static LRESULT disabled[9] = { HTLEFT, HTRIGHT, HTTOP, HTBOTTOM, HTSIZE,
|
||||||
HTTOPLEFT, HTTOPRIGHT, HTBOTTOMLEFT, HTBOTTOMRIGHT };
|
HTTOPLEFT, HTTOPRIGHT, HTBOTTOMLEFT, HTBOTTOMRIGHT };
|
||||||
static HBRUSH background_brush, separator_brush;
|
static HBRUSH background_brush, separator_brush, buttonface_brush;
|
||||||
// To use the system message font
|
// To use the system message font
|
||||||
NONCLIENTMETRICS ncm;
|
NONCLIENTMETRICS ncm;
|
||||||
HFONT hDlgFont;
|
HFONT hDlgFont;
|
||||||
|
@ -677,9 +680,9 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP
|
||||||
ncm.cbSize = sizeof(ncm);
|
ncm.cbSize = sizeof(ncm);
|
||||||
// If we're compiling with the Vista SDK or later, the NONCLIENTMETRICS struct
|
// If we're compiling with the Vista SDK or later, the NONCLIENTMETRICS struct
|
||||||
// will be the wrong size for previous versions, so we need to adjust it.
|
// will be the wrong size for previous versions, so we need to adjust it.
|
||||||
#if defined(_MSC_VER) && (_MSC_VER >= 1500) && (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
|
#if defined(_MSC_VER) && (_MSC_VER >= 1500) && (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
|
||||||
ncm.cbSize -= sizeof(ncm.iPaddedBorderWidth);
|
ncm.cbSize -= sizeof(ncm.iPaddedBorderWidth);
|
||||||
#endif
|
#endif
|
||||||
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0);
|
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0);
|
||||||
hDlgFont = CreateFontIndirect(&(ncm.lfMessageFont));
|
hDlgFont = CreateFontIndirect(&(ncm.lfMessageFont));
|
||||||
// Set the dialog to use the system message box font
|
// Set the dialog to use the system message box font
|
||||||
|
@ -697,6 +700,7 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP
|
||||||
apply_localization(IDD_NOTIFICATION, hDlg);
|
apply_localization(IDD_NOTIFICATION, hDlg);
|
||||||
background_brush = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
|
background_brush = CreateSolidBrush(GetSysColor(COLOR_WINDOW));
|
||||||
separator_brush = CreateSolidBrush(GetSysColor(COLOR_3DLIGHT));
|
separator_brush = CreateSolidBrush(GetSysColor(COLOR_3DLIGHT));
|
||||||
|
buttonface_brush = CreateSolidBrush(GetSysColor(COLOR_BTNFACE));
|
||||||
SetTitleBarIcon(hDlg);
|
SetTitleBarIcon(hDlg);
|
||||||
CenterDialog(hDlg);
|
CenterDialog(hDlg);
|
||||||
// Change the default icon
|
// Change the default icon
|
||||||
|
@ -713,6 +717,16 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP
|
||||||
} else {
|
} else {
|
||||||
ShowWindow(GetDlgItem(hDlg, IDYES), SW_SHOW);
|
ShowWindow(GetDlgItem(hDlg, IDYES), SW_SHOW);
|
||||||
}
|
}
|
||||||
|
hCtrl = GetDlgItem(hDlg, IDC_DONT_DISPLAY_AGAIN);
|
||||||
|
if (notification_dont_display_setting != NULL) {
|
||||||
|
SetWindowTextU(hCtrl, lmprintf(MSG_127));
|
||||||
|
} else {
|
||||||
|
// Remove the "Don't display again" checkbox
|
||||||
|
ShowWindow(hCtrl, SW_HIDE);
|
||||||
|
GetWindowRect(hCtrl, &rc);
|
||||||
|
MapWindowPoints(NULL, hDlg, (POINT*)&rc, 2);
|
||||||
|
cbh = rc.bottom - rc.top;
|
||||||
|
}
|
||||||
if ((notification_more_info != NULL) && (notification_more_info->callback != NULL)) {
|
if ((notification_more_info != NULL) && (notification_more_info->callback != NULL)) {
|
||||||
hCtrl = GetDlgItem(hDlg, IDC_MORE_INFO);
|
hCtrl = GetDlgItem(hDlg, IDC_MORE_INFO);
|
||||||
// Resize the 'More information' button
|
// Resize the 'More information' button
|
||||||
|
@ -731,17 +745,16 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP
|
||||||
GetWindowRect(hCtrl, &rc);
|
GetWindowRect(hCtrl, &rc);
|
||||||
dh = rc.bottom - rc.top;
|
dh = rc.bottom - rc.top;
|
||||||
DrawTextU(hDC, szMessageText, -1, &rc, DT_CALCRECT | DT_WORDBREAK);
|
DrawTextU(hDC, szMessageText, -1, &rc, DT_CALCRECT | DT_WORDBREAK);
|
||||||
dh = rc.bottom - rc.top - dh + (int)(8.0f * fScale);
|
dh = max(rc.bottom - rc.top - dh + (int)(8.0f * fScale), 0);
|
||||||
safe_release_dc(hCtrl, hDC);
|
safe_release_dc(hCtrl, hDC);
|
||||||
if (dh > 0) {
|
ResizeMoveCtrl(hDlg, hCtrl, 0, 0, 0, dh, 1.0f);
|
||||||
ResizeMoveCtrl(hDlg, hCtrl, 0, 0, 0, dh, 1.0f);
|
ResizeMoveCtrl(hDlg, hDlg, 0, 0, 0, dh - cbh, 1.0f);
|
||||||
ResizeMoveCtrl(hDlg, hDlg, 0, 0, 0, dh, 1.0f);
|
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, -1), 0, 0, 0, dh, 1.0f); // IDC_STATIC = -1
|
||||||
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, -1), 0, 0, 0, dh, 1.0f); // IDC_STATIC = -1
|
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SELECTION_LINE), 0, dh, 0, 0, 1.0f);
|
||||||
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_SELECTION_LINE), 0, dh, 0, 0, 1.0f);
|
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_DONT_DISPLAY_AGAIN), 0, dh, 0, 0, 1.0f);
|
||||||
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_MORE_INFO), 0, dh, 0, 0, 1.0f);
|
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDC_MORE_INFO), 0, dh - cbh, 0, 0, 1.0f);
|
||||||
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDYES), 0, dh, 0, 0, 1.0f);
|
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDYES), 0, dh -cbh, 0, 0, 1.0f);
|
||||||
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDNO), 0, dh, 0, 0, 1.0f);
|
ResizeMoveCtrl(hDlg, GetDlgItem(hDlg, IDNO), 0, dh -cbh, 0, 0, 1.0f);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return (INT_PTR)TRUE;
|
return (INT_PTR)TRUE;
|
||||||
case WM_CTLCOLORSTATIC:
|
case WM_CTLCOLORSTATIC:
|
||||||
|
@ -750,6 +763,9 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP
|
||||||
if ((HWND)lParam == GetDlgItem(hDlg, IDC_NOTIFICATION_LINE)) {
|
if ((HWND)lParam == GetDlgItem(hDlg, IDC_NOTIFICATION_LINE)) {
|
||||||
return (INT_PTR)separator_brush;
|
return (INT_PTR)separator_brush;
|
||||||
}
|
}
|
||||||
|
if ((HWND)lParam == GetDlgItem(hDlg, IDC_DONT_DISPLAY_AGAIN)) {
|
||||||
|
return (INT_PTR)buttonface_brush;
|
||||||
|
}
|
||||||
return (INT_PTR)background_brush;
|
return (INT_PTR)background_brush;
|
||||||
case WM_NCHITTEST:
|
case WM_NCHITTEST:
|
||||||
// Check coordinates to prevent resize actions
|
// Check coordinates to prevent resize actions
|
||||||
|
@ -766,11 +782,20 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP
|
||||||
case IDCANCEL:
|
case IDCANCEL:
|
||||||
case IDYES:
|
case IDYES:
|
||||||
case IDNO:
|
case IDNO:
|
||||||
|
if (IsDlgButtonChecked(hDlg, IDC_DONT_DISPLAY_AGAIN) == BST_CHECKED) {
|
||||||
|
WriteSettingBool(SETTING_DISABLE_SECURE_BOOT_NOTICE, TRUE);
|
||||||
|
}
|
||||||
EndDialog(hDlg, LOWORD(wParam));
|
EndDialog(hDlg, LOWORD(wParam));
|
||||||
return (INT_PTR)TRUE;
|
return (INT_PTR)TRUE;
|
||||||
case IDC_MORE_INFO:
|
case IDC_MORE_INFO:
|
||||||
if (notification_more_info != NULL)
|
assert(notification_more_info->callback != NULL);
|
||||||
MyDialogBox(hMainInstance, notification_more_info->id, hDlg, notification_more_info->callback);
|
if (notification_more_info != NULL) {
|
||||||
|
if (notification_more_info->id == MORE_INFO_URL) {
|
||||||
|
ShellExecuteA(hDlg, "open", notification_more_info->url, NULL, NULL, SW_SHOWNORMAL);
|
||||||
|
} else {
|
||||||
|
MyDialogBox(hMainInstance, notification_more_info->id, hDlg, notification_more_info->callback);
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -781,7 +806,7 @@ INT_PTR CALLBACK NotificationCallback(HWND hDlg, UINT message, WPARAM wParam, LP
|
||||||
/*
|
/*
|
||||||
* Display a custom notification
|
* Display a custom notification
|
||||||
*/
|
*/
|
||||||
BOOL Notification(int type, const notification_info* more_info, char* title, char* format, ...)
|
BOOL Notification(int type, const char* dont_display_setting, const notification_info* more_info, char* title, char* format, ...)
|
||||||
{
|
{
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
va_list args;
|
va_list args;
|
||||||
|
@ -800,6 +825,7 @@ BOOL Notification(int type, const notification_info* more_info, char* title, cha
|
||||||
szMessageText[max_msg_size -1] = 0;
|
szMessageText[max_msg_size -1] = 0;
|
||||||
notification_more_info = more_info;
|
notification_more_info = more_info;
|
||||||
notification_is_question = FALSE;
|
notification_is_question = FALSE;
|
||||||
|
notification_dont_display_setting = dont_display_setting;
|
||||||
|
|
||||||
switch(type) {
|
switch(type) {
|
||||||
case MSG_WARNING_QUESTION:
|
case MSG_WARNING_QUESTION:
|
||||||
|
@ -1478,7 +1504,6 @@ BOOL SetUpdateCheck(void)
|
||||||
{
|
{
|
||||||
BOOL enable_updates;
|
BOOL enable_updates;
|
||||||
uint64_t commcheck = GetTickCount64();
|
uint64_t commcheck = GetTickCount64();
|
||||||
notification_info more_info = { IDD_UPDATE_POLICY, UpdateCallback };
|
|
||||||
char filename[MAX_PATH] = "", exename[] = APPLICATION_NAME ".exe";
|
char filename[MAX_PATH] = "", exename[] = APPLICATION_NAME ".exe";
|
||||||
size_t fn_len, exe_len;
|
size_t fn_len, exe_len;
|
||||||
|
|
||||||
|
@ -1489,6 +1514,7 @@ BOOL SetUpdateCheck(void)
|
||||||
|
|
||||||
// If the update interval is not set, this is the first time we run so prompt the user
|
// If the update interval is not set, this is the first time we run so prompt the user
|
||||||
if (ReadSetting32(SETTING_UPDATE_INTERVAL) == 0) {
|
if (ReadSetting32(SETTING_UPDATE_INTERVAL) == 0) {
|
||||||
|
notification_info more_info;
|
||||||
|
|
||||||
// Add a hack for people who'd prefer the app not to prompt about update settings on first run.
|
// Add a hack for people who'd prefer the app not to prompt about update settings on first run.
|
||||||
// If the executable is called "rufus.exe", without version, we disable the prompt
|
// If the executable is called "rufus.exe", without version, we disable the prompt
|
||||||
|
@ -1501,7 +1527,9 @@ BOOL SetUpdateCheck(void)
|
||||||
enable_updates = TRUE;
|
enable_updates = TRUE;
|
||||||
} else {
|
} else {
|
||||||
#endif
|
#endif
|
||||||
enable_updates = Notification(MSG_QUESTION, &more_info, lmprintf(MSG_004), lmprintf(MSG_005));
|
more_info.id = IDD_UPDATE_POLICY;
|
||||||
|
more_info.callback = UpdateCallback;
|
||||||
|
enable_updates = Notification(MSG_QUESTION, NULL, &more_info, lmprintf(MSG_004), lmprintf(MSG_005));
|
||||||
#if !defined(_DEBUG)
|
#if !defined(_DEBUG)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue