VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Mount
diff options
context:
space:
mode:
authorMounir IDRASSI <mounir.idrassi@idrix.fr>2016-12-30 12:17:09 +0100
committerMounir IDRASSI <mounir.idrassi@idrix.fr>2016-12-30 23:56:28 +0100
commitcdbe54e60542231f832d59389381bf9b56b710be (patch)
treecc71665cba8e86003f65c9385a166e787b8966aa /src/Mount
parentd116eba1607ca82d90874018037a19088a4bb26d (diff)
downloadVeraCrypt-cdbe54e60542231f832d59389381bf9b56b710be.tar.gz
VeraCrypt-cdbe54e60542231f832d59389381bf9b56b710be.zip
Windows: Implement Secure Desktop for password entry. Add option and command line switch to activate it.
Diffstat (limited to 'src/Mount')
-rw-r--r--src/Mount/Mount.c32
-rw-r--r--src/Mount/Mount.rc26
-rw-r--r--src/Mount/Resource.h3
3 files changed, 47 insertions, 14 deletions
diff --git a/src/Mount/Mount.c b/src/Mount/Mount.c
index 12ee7985..28a43acf 100644
--- a/src/Mount/Mount.c
+++ b/src/Mount/Mount.c
@@ -721,6 +721,8 @@ void LoadSettingsAndCheckModified (HWND hwndDlg, BOOL bOnlyCheckModified, BOOL*
721 721
722 ConfigReadCompareInt ("HideWaitingDialog", FALSE, &bHideWaitingDialog, bOnlyCheckModified, pbSettingsModified); 722 ConfigReadCompareInt ("HideWaitingDialog", FALSE, &bHideWaitingDialog, bOnlyCheckModified, pbSettingsModified);
723 723
724 ConfigReadCompareInt ("UseSecureDesktop", FALSE, &bUseSecureDesktop, bOnlyCheckModified, pbSettingsModified);
725
724 ConfigReadCompareInt ("MountVolumesRemovable", FALSE, &defaultMountOptions.Removable, bOnlyCheckModified, pbSettingsModified); 726 ConfigReadCompareInt ("MountVolumesRemovable", FALSE, &defaultMountOptions.Removable, bOnlyCheckModified, pbSettingsModified);
725 ConfigReadCompareInt ("MountVolumesReadOnly", FALSE, &defaultMountOptions.ReadOnly, bOnlyCheckModified, pbSettingsModified); 727 ConfigReadCompareInt ("MountVolumesReadOnly", FALSE, &defaultMountOptions.ReadOnly, bOnlyCheckModified, pbSettingsModified);
726 728
@@ -878,6 +880,7 @@ void SaveSettings (HWND hwndDlg)
878 ConfigWriteInt ("PreserveTimestamps", defaultMountOptions.PreserveTimestamp); 880 ConfigWriteInt ("PreserveTimestamps", defaultMountOptions.PreserveTimestamp);
879 ConfigWriteInt ("ShowDisconnectedNetworkDrives",bShowDisconnectedNetworkDrives); 881 ConfigWriteInt ("ShowDisconnectedNetworkDrives",bShowDisconnectedNetworkDrives);
880 ConfigWriteInt ("HideWaitingDialog", bHideWaitingDialog); 882 ConfigWriteInt ("HideWaitingDialog", bHideWaitingDialog);
883 ConfigWriteInt ("UseSecureDesktop", bUseSecureDesktop);
881 884
882 ConfigWriteInt ("EnableBackgroundTask", bEnableBkgTask); 885 ConfigWriteInt ("EnableBackgroundTask", bEnableBkgTask);
883 ConfigWriteInt ("CloseBackgroundTaskOnNoVolumes", bCloseBkgTaskWhenNoVolumes); 886 ConfigWriteInt ("CloseBackgroundTaskOnNoVolumes", bCloseBkgTaskWhenNoVolumes);
@@ -3132,6 +3135,9 @@ BOOL CALLBACK PreferencesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
3132 SendMessage (GetDlgItem (hwndDlg, IDC_HIDE_WAITING_DIALOG), BM_SETCHECK, 3135 SendMessage (GetDlgItem (hwndDlg, IDC_HIDE_WAITING_DIALOG), BM_SETCHECK,
3133 bHideWaitingDialog ? BST_CHECKED:BST_UNCHECKED, 0); 3136 bHideWaitingDialog ? BST_CHECKED:BST_UNCHECKED, 0);
3134 3137
3138 SendMessage (GetDlgItem (hwndDlg, IDC_SECURE_DESKTOP_PASSWORD_ENTRY), BM_SETCHECK,
3139 bUseSecureDesktop ? BST_CHECKED:BST_UNCHECKED, 0);
3140
3135 SendMessage (GetDlgItem (hwndDlg, IDC_PREF_TEMP_CACHE_ON_MULTIPLE_MOUNT), BM_SETCHECK, 3141 SendMessage (GetDlgItem (hwndDlg, IDC_PREF_TEMP_CACHE_ON_MULTIPLE_MOUNT), BM_SETCHECK,
3136 bCacheDuringMultipleMount ? BST_CHECKED:BST_UNCHECKED, 0); 3142 bCacheDuringMultipleMount ? BST_CHECKED:BST_UNCHECKED, 0);
3137 3143
@@ -3247,6 +3253,7 @@ BOOL CALLBACK PreferencesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
3247 bPreserveTimestamp = defaultMountOptions.PreserveTimestamp = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PRESERVE_TIMESTAMPS)); 3253 bPreserveTimestamp = defaultMountOptions.PreserveTimestamp = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PRESERVE_TIMESTAMPS));
3248 bShowDisconnectedNetworkDrives = IsButtonChecked (GetDlgItem (hwndDlg, IDC_SHOW_DISCONNECTED_NETWORK_DRIVES)); 3254 bShowDisconnectedNetworkDrives = IsButtonChecked (GetDlgItem (hwndDlg, IDC_SHOW_DISCONNECTED_NETWORK_DRIVES));
3249 bHideWaitingDialog = IsButtonChecked (GetDlgItem (hwndDlg, IDC_HIDE_WAITING_DIALOG)); 3255 bHideWaitingDialog = IsButtonChecked (GetDlgItem (hwndDlg, IDC_HIDE_WAITING_DIALOG));
3256 bUseSecureDesktop = IsButtonChecked (GetDlgItem (hwndDlg, IDC_SECURE_DESKTOP_PASSWORD_ENTRY));
3250 bCacheDuringMultipleMount = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_TEMP_CACHE_ON_MULTIPLE_MOUNT)); 3257 bCacheDuringMultipleMount = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_TEMP_CACHE_ON_MULTIPLE_MOUNT));
3251 bWipeCacheOnExit = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_WIPE_CACHE_ON_EXIT)); 3258 bWipeCacheOnExit = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_WIPE_CACHE_ON_EXIT));
3252 bWipeCacheOnAutoDismount = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_WIPE_CACHE_ON_AUTODISMOUNT)); 3259 bWipeCacheOnAutoDismount = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_WIPE_CACHE_ON_AUTODISMOUNT));
@@ -4537,7 +4544,7 @@ static int AskVolumePassword (HWND hwndDlg, Password *password, int *pkcs5, int
4537 dlgParam.pim = pim; 4544 dlgParam.pim = pim;
4538 dlgParam.truecryptMode = truecryptMode; 4545 dlgParam.truecryptMode = truecryptMode;
4539 4546
4540 result = DialogBoxParamW (hInst, 4547 result = SecureDesktopDialogBoxParam (hInst,
4541 MAKEINTRESOURCEW (IDD_PASSWORD_DLG), hwndDlg, 4548 MAKEINTRESOURCEW (IDD_PASSWORD_DLG), hwndDlg,
4542 (DLGPROC) PasswordDlgProc, (LPARAM) &dlgParam); 4549 (DLGPROC) PasswordDlgProc, (LPARAM) &dlgParam);
4543 4550
@@ -6440,6 +6447,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
6440 bPreserveTimestamp = defaultMountOptions.PreserveTimestamp = TRUE; 6447 bPreserveTimestamp = defaultMountOptions.PreserveTimestamp = TRUE;
6441 bShowDisconnectedNetworkDrives = FALSE; 6448 bShowDisconnectedNetworkDrives = FALSE;
6442 bHideWaitingDialog = FALSE; 6449 bHideWaitingDialog = FALSE;
6450 bUseSecureDesktop = FALSE;
6443 6451
6444 ResetWrongPwdRetryCount (); 6452 ResetWrongPwdRetryCount ();
6445 6453
@@ -8449,6 +8457,7 @@ void ExtractCommandLine (HWND hwndDlg, wchar_t *lpszCommandLine)
8449 OptionPim, 8457 OptionPim,
8450 OptionTryEmptyPassword, 8458 OptionTryEmptyPassword,
8451 OptionNoWaitDlg, 8459 OptionNoWaitDlg,
8460 OptionSecureDesktop,
8452 }; 8461 };
8453 8462
8454 argument args[]= 8463 argument args[]=
@@ -8476,6 +8485,7 @@ void ExtractCommandLine (HWND hwndDlg, wchar_t *lpszCommandLine)
8476 { CommandWipeCache, L"/wipecache", L"/w", FALSE }, 8485 { CommandWipeCache, L"/wipecache", L"/w", FALSE },
8477 { OptionTryEmptyPassword, L"/tryemptypass", NULL, FALSE }, 8486 { OptionTryEmptyPassword, L"/tryemptypass", NULL, FALSE },
8478 { OptionNoWaitDlg, L"/nowaitdlg", NULL, FALSE }, 8487 { OptionNoWaitDlg, L"/nowaitdlg", NULL, FALSE },
8488 { OptionSecureDesktop, L"/secureDesktop", NULL, FALSE },
8479 }; 8489 };
8480 8490
8481 argumentspec as; 8491 argumentspec as;
@@ -8547,6 +8557,25 @@ void ExtractCommandLine (HWND hwndDlg, wchar_t *lpszCommandLine)
8547 } 8557 }
8548 break; 8558 break;
8549 8559
8560 case OptionSecureDesktop:
8561 {
8562 wchar_t szTmp[16] = {0};
8563 bCmdUseSecureDesktop = TRUE;
8564 bCmdUseSecureDesktopValid = TRUE;
8565
8566 if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, &i, nNoCommandLineArgs,
8567 szTmp, ARRAYSIZE (szTmp)))
8568 {
8569 if (!_wcsicmp(szTmp,L"n") || !_wcsicmp(szTmp,L"no"))
8570 bCmdUseSecureDesktop = FALSE;
8571 else if (!_wcsicmp(szTmp,L"y") || !_wcsicmp(szTmp,L"yes"))
8572 bCmdUseSecureDesktop = TRUE;
8573 else
8574 AbortProcess ("COMMAND_LINE_ERROR");
8575 }
8576 }
8577 break;
8578
8550 case OptionCache: 8579 case OptionCache:
8551 { 8580 {
8552 wchar_t szTmp[16] = {0}; 8581 wchar_t szTmp[16] = {0};
@@ -8972,6 +9001,7 @@ static BOOL StartSystemFavoritesService ()
8972 DeviceChangeBroadcastDisabled = TRUE; 9001 DeviceChangeBroadcastDisabled = TRUE;
8973 bShowDisconnectedNetworkDrives = TRUE; 9002 bShowDisconnectedNetworkDrives = TRUE;
8974 bHideWaitingDialog = TRUE; 9003 bHideWaitingDialog = TRUE;
9004 bUseSecureDesktop = FALSE;
8975 9005
8976 InitOSVersionInfo(); 9006 InitOSVersionInfo();
8977 9007
diff --git a/src/Mount/Mount.rc b/src/Mount/Mount.rc
index 03496871..2f96bff7 100644
--- a/src/Mount/Mount.rc
+++ b/src/Mount/Mount.rc
@@ -41,7 +41,7 @@ IDR_MOUNT_TLB TYPELIB "Mount.tlb"
41// Dialog 41// Dialog
42// 42//
43 43
44IDD_PREFERENCES_DLG DIALOGEX 0, 0, 336, 333 44IDD_PREFERENCES_DLG DIALOGEX 0, 0, 336, 340
45STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU 45STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
46CAPTION "VeraCrypt - Preferences" 46CAPTION "VeraCrypt - Preferences"
47FONT 8, "MS Shell Dlg", 400, 0, 0x1 47FONT 8, "MS Shell Dlg", 400, 0, 0x1
@@ -78,28 +78,30 @@ BEGIN
78 CONTROL "Make disconnected network drives available for mounting",IDC_SHOW_DISCONNECTED_NETWORK_DRIVES, 78 CONTROL "Make disconnected network drives available for mounting",IDC_SHOW_DISCONNECTED_NETWORK_DRIVES,
79 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,208,316,10 79 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,208,316,10
80 CONTROL "Cache passwords in driver memory",IDC_PREF_CACHE_PASSWORDS, 80 CONTROL "Cache passwords in driver memory",IDC_PREF_CACHE_PASSWORDS,
81 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,254,146,11 81 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,263,146,11
82 CONTROL "Wipe cached passwords on exit",IDC_PREF_WIPE_CACHE_ON_EXIT, 82 CONTROL "Wipe cached passwords on exit",IDC_PREF_WIPE_CACHE_ON_EXIT,
83 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,254,165,11 83 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,162,263,165,11
84 CONTROL "Temporarily cache password during ""Mount Favorite Volumes"" operations",IDC_PREF_TEMP_CACHE_ON_MULTIPLE_MOUNT, 84 CONTROL "Temporarily cache password during ""Mount Favorite Volumes"" operations",IDC_PREF_TEMP_CACHE_ON_MULTIPLE_MOUNT,
85 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,268,294,11 85 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,277,294,11
86 CONTROL "Wipe cached passwords on auto-dismount",IDC_PREF_WIPE_CACHE_ON_AUTODISMOUNT, 86 CONTROL "Wipe cached passwords on auto-dismount",IDC_PREF_WIPE_CACHE_ON_AUTODISMOUNT,
87 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,282,296,11 87 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,291,296,11
88 CONTROL "Include PIM when caching a password",IDC_PREF_CACHE_PIM, 88 CONTROL "Include PIM when caching a password",IDC_PREF_CACHE_PIM,
89 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,296,296,10 89 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,305,296,10
90 PUSHBUTTON "More Settings...",IDC_MORE_SETTINGS,5,317,85,14 90 PUSHBUTTON "More Settings...",IDC_MORE_SETTINGS,5,324,85,14
91 DEFPUSHBUTTON "OK",IDOK,225,317,50,14 91 DEFPUSHBUTTON "OK",IDOK,225,324,50,14
92 PUSHBUTTON "Cancel",IDCANCEL,281,317,50,14 92 PUSHBUTTON "Cancel",IDCANCEL,281,324,50,14
93 GROUPBOX "Windows",IDT_WINDOWS_RELATED_SETTING,4,160,328,76 93 GROUPBOX "Windows",IDT_WINDOWS_RELATED_SETTING,4,160,328,87
94 GROUPBOX "Default Mount Options",IDT_DEFAULT_MOUNT_OPTIONS,4,3,328,26 94 GROUPBOX "Default Mount Options",IDT_DEFAULT_MOUNT_OPTIONS,4,3,328,26
95 GROUPBOX "VeraCrypt Background Task",IDT_TASKBAR_ICON,4,33,328,26 95 GROUPBOX "VeraCrypt Background Task",IDT_TASKBAR_ICON,4,33,328,26
96 GROUPBOX "Auto-Dismount",IDT_AUTO_DISMOUNT,4,94,328,62 96 GROUPBOX "Auto-Dismount",IDT_AUTO_DISMOUNT,4,94,328,62
97 LTEXT "minutes",IDT_MINUTES,289,129,39,10 97 LTEXT "minutes",IDT_MINUTES,289,129,39,10
98 LTEXT "Dismount all when:",IDT_AUTO_DISMOUNT_ON,9,104,71,20 98 LTEXT "Dismount all when:",IDT_AUTO_DISMOUNT_ON,9,104,71,20
99 GROUPBOX "Password Cache",IDT_PW_CACHE_OPTIONS,4,243,328,68 99 GROUPBOX "Password Cache",IDT_PW_CACHE_OPTIONS,4,252,328,68
100 GROUPBOX "Actions to perform upon logon to Windows",IDT_LOGON,4,63,328,28 100 GROUPBOX "Actions to perform upon logon to Windows",IDT_LOGON,4,63,328,28
101 CONTROL "Don't show wait message dialog when performing operations",IDC_HIDE_WAITING_DIALOG, 101 CONTROL "Don't show wait message dialog when performing operations",IDC_HIDE_WAITING_DIALOG,
102 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,220,316,10 102 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,220,316,10
103 CONTROL "Use Secure Desktop for password entry",IDC_SECURE_DESKTOP_PASSWORD_ENTRY,
104 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,232,316,10
103END 105END
104 106
105IDD_VOLUME_PROPERTIES DIALOGEX 60, 30, 284, 224 107IDD_VOLUME_PROPERTIES DIALOGEX 60, 30, 284, 224
@@ -421,7 +423,7 @@ BEGIN
421 LEFTMARGIN, 7 423 LEFTMARGIN, 7
422 RIGHTMARGIN, 329 424 RIGHTMARGIN, 329
423 TOPMARGIN, 7 425 TOPMARGIN, 7
424 BOTTOMMARGIN, 331 426 BOTTOMMARGIN, 338
425 END 427 END
426 428
427 IDD_VOLUME_PROPERTIES, DIALOG 429 IDD_VOLUME_PROPERTIES, DIALOG
diff --git a/src/Mount/Resource.h b/src/Mount/Resource.h
index 12860915..0c863386 100644
--- a/src/Mount/Resource.h
+++ b/src/Mount/Resource.h
@@ -183,6 +183,7 @@
183#define IDC_DISABLE_BOOT_LOADER_PIM_PROMPT 1160 183#define IDC_DISABLE_BOOT_LOADER_PIM_PROMPT 1160
184#define IDC_HIDE_WAITING_DIALOG 1161 184#define IDC_HIDE_WAITING_DIALOG 1161
185#define IDC_DISABLE_BOOT_LOADER_HASH_PROMPT 1162 185#define IDC_DISABLE_BOOT_LOADER_HASH_PROMPT 1162
186#define IDC_SECURE_DESKTOP_PASSWORD_ENTRY 1163
186#define IDM_HELP 40001 187#define IDM_HELP 40001
187#define IDM_ABOUT 40002 188#define IDM_ABOUT 40002
188#define IDM_UNMOUNT_VOLUME 40003 189#define IDM_UNMOUNT_VOLUME 40003
@@ -259,7 +260,7 @@
259#define _APS_NO_MFC 1 260#define _APS_NO_MFC 1
260#define _APS_NEXT_RESOURCE_VALUE 120 261#define _APS_NEXT_RESOURCE_VALUE 120
261#define _APS_NEXT_COMMAND_VALUE 40069 262#define _APS_NEXT_COMMAND_VALUE 40069
262#define _APS_NEXT_CONTROL_VALUE 1163 263#define _APS_NEXT_CONTROL_VALUE 1164
263#define _APS_NEXT_SYMED_VALUE 101 264#define _APS_NEXT_SYMED_VALUE 101
264#endif 265#endif
265#endif 266#endif