From b952201412be414a23a204477edfa4388f8b2343 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Sat, 20 Sep 2025 22:31:13 +0900 Subject: [PATCH] Windows: Add setting/CLI switch to enable IME during Secure Desktop. Fix Preferences tabs handling. Now it is possible to enable IME during Secure Desktop using a setting in Preferences or using /enableIME switch. This helps solve issues with some IME that causes VeraCrypt to freeze when selecting keyfile while VeraCrypt secure desktop is active. See: https://sourceforge.net/p/veracrypt/discussion/general/thread/1e8b9aeacd --- Translations/Language.ar.xml | 2 + Translations/Language.be.xml | 2 + Translations/Language.bg.xml | 2 + Translations/Language.ca.xml | 2 + Translations/Language.co.xml | 2 + Translations/Language.cs.xml | 2 + Translations/Language.da.xml | 2 + Translations/Language.de.xml | 2 + Translations/Language.el.xml | 2 + Translations/Language.es.xml | 2 + Translations/Language.et.xml | 2 + Translations/Language.eu.xml | 2 + Translations/Language.fa.xml | 2 + Translations/Language.fi.xml | 2 + Translations/Language.fr.xml | 2 + Translations/Language.he.xml | 2 + Translations/Language.hu.xml | 2 + Translations/Language.id.xml | 2 + Translations/Language.it.xml | 2 + Translations/Language.ja.xml | 2 + Translations/Language.ka.xml | 2 + Translations/Language.ko.xml | 2 + Translations/Language.lv.xml | 2 + Translations/Language.my.xml | 2 + Translations/Language.nb.xml | 2 + Translations/Language.nl.xml | 2 + Translations/Language.nn.xml | 2 + Translations/Language.pl.xml | 2 + Translations/Language.pt-br.xml | 2 + Translations/Language.ro.xml | 2 + Translations/Language.ru.xml | 2 + Translations/Language.sk.xml | 2 + Translations/Language.sl.xml | 2 + Translations/Language.sv.xml | 2 + Translations/Language.th.xml | 2 + Translations/Language.tr.xml | 2 + Translations/Language.uk.xml | 2 + Translations/Language.uz.xml | 2 + Translations/Language.vi.xml | 2 + Translations/Language.zh-cn.xml | 2 + Translations/Language.zh-hk.xml | 2 + Translations/Language.zh-tw.xml | 2 + src/Common/Dlgcode.c | 27 ++- src/Common/Dlgcode.h | 3 + src/Common/Language.xml | 2 + src/ExpandVolume/WinMain.cpp | 2 + src/Format/Tcformat.c | 20 ++ src/Mount/Mount.c | 332 ++++++++++++++++++++------------ src/Mount/Mount.rc | 4 +- src/Mount/Resource.h | 5 +- 50 files changed, 342 insertions(+), 137 deletions(-) diff --git a/Translations/Language.ar.xml b/Translations/Language.ar.xml index 8a80176e..254d19ce 100644 --- a/Translations/Language.ar.xml +++ b/Translations/Language.ar.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.be.xml b/Translations/Language.be.xml index 082bd96d..cf7d7ea6 100644 --- a/Translations/Language.be.xml +++ b/Translations/Language.be.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.bg.xml b/Translations/Language.bg.xml index 1aae608a..695a8eef 100644 --- a/Translations/Language.bg.xml +++ b/Translations/Language.bg.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.ca.xml b/Translations/Language.ca.xml index 54a6f952..b7166f71 100644 --- a/Translations/Language.ca.xml +++ b/Translations/Language.ca.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.co.xml b/Translations/Language.co.xml index fa4659c4..42a0b9a7 100644 --- a/Translations/Language.co.xml +++ b/Translations/Language.co.xml @@ -1671,6 +1671,8 @@ Information about Corsican localization: Generale Azzioni Parolla d’intesa + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.cs.xml b/Translations/Language.cs.xml index 935990d9..d7434e98 100644 --- a/Translations/Language.cs.xml +++ b/Translations/Language.cs.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.da.xml b/Translations/Language.da.xml index d353c853..8008bfdc 100644 --- a/Translations/Language.da.xml +++ b/Translations/Language.da.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.de.xml b/Translations/Language.de.xml index bb313ad7..8d135801 100644 --- a/Translations/Language.de.xml +++ b/Translations/Language.de.xml @@ -1654,6 +1654,8 @@ Allgemein Actionen Passwort + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.el.xml b/Translations/Language.el.xml index 0959c5e0..c37dca51 100644 --- a/Translations/Language.el.xml +++ b/Translations/Language.el.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.es.xml b/Translations/Language.es.xml index 57acfca1..6c754d0e 100644 --- a/Translations/Language.es.xml +++ b/Translations/Language.es.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.et.xml b/Translations/Language.et.xml index 3e532edc..098d66bc 100644 --- a/Translations/Language.et.xml +++ b/Translations/Language.et.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.eu.xml b/Translations/Language.eu.xml index 9a7f391f..691954fe 100644 --- a/Translations/Language.eu.xml +++ b/Translations/Language.eu.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.fa.xml b/Translations/Language.fa.xml index 14c3ea2f..fcdb76e0 100644 --- a/Translations/Language.fa.xml +++ b/Translations/Language.fa.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.fi.xml b/Translations/Language.fi.xml index bd978f93..2b90a4c1 100644 --- a/Translations/Language.fi.xml +++ b/Translations/Language.fi.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.fr.xml b/Translations/Language.fr.xml index ce57ca00..e8912556 100644 --- a/Translations/Language.fr.xml +++ b/Translations/Language.fr.xml @@ -1651,6 +1651,8 @@ Général Actions Mot de passe + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.he.xml b/Translations/Language.he.xml index 4c6de6a7..08f61798 100644 --- a/Translations/Language.he.xml +++ b/Translations/Language.he.xml @@ -1652,6 +1652,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.hu.xml b/Translations/Language.hu.xml index c7957ab5..a89f166b 100644 --- a/Translations/Language.hu.xml +++ b/Translations/Language.hu.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.id.xml b/Translations/Language.id.xml index 8f11ba75..47e1365c 100644 --- a/Translations/Language.id.xml +++ b/Translations/Language.id.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.it.xml b/Translations/Language.it.xml index 1989a3d4..c01bde24 100644 --- a/Translations/Language.it.xml +++ b/Translations/Language.it.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.ja.xml b/Translations/Language.ja.xml index 371c33a9..3b5a35ff 100644 --- a/Translations/Language.ja.xml +++ b/Translations/Language.ja.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.ka.xml b/Translations/Language.ka.xml index ed6f4bc4..fc9314e4 100644 --- a/Translations/Language.ka.xml +++ b/Translations/Language.ka.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.ko.xml b/Translations/Language.ko.xml index 835fea53..43e69ff9 100644 --- a/Translations/Language.ko.xml +++ b/Translations/Language.ko.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.lv.xml b/Translations/Language.lv.xml index e98c1e5c..55ec33f2 100644 --- a/Translations/Language.lv.xml +++ b/Translations/Language.lv.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.my.xml b/Translations/Language.my.xml index 2abc6908..2fd5b643 100644 --- a/Translations/Language.my.xml +++ b/Translations/Language.my.xml @@ -1653,6 +1653,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.nb.xml b/Translations/Language.nb.xml index efca7faa..29b499c1 100644 --- a/Translations/Language.nb.xml +++ b/Translations/Language.nb.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.nl.xml b/Translations/Language.nl.xml index fce62d21..3da656ab 100644 --- a/Translations/Language.nl.xml +++ b/Translations/Language.nl.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.nn.xml b/Translations/Language.nn.xml index 9e718dd0..a2a81e99 100644 --- a/Translations/Language.nn.xml +++ b/Translations/Language.nn.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.pl.xml b/Translations/Language.pl.xml index da060b3b..39c1851f 100644 --- a/Translations/Language.pl.xml +++ b/Translations/Language.pl.xml @@ -1651,6 +1651,8 @@ Ogólne Działania Hasło + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.pt-br.xml b/Translations/Language.pt-br.xml index 6695e48a..93d29fba 100644 --- a/Translations/Language.pt-br.xml +++ b/Translations/Language.pt-br.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.ro.xml b/Translations/Language.ro.xml index 376f5ad5..6c017a3c 100644 --- a/Translations/Language.ro.xml +++ b/Translations/Language.ro.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.ru.xml b/Translations/Language.ru.xml index c7a53f09..3af661ef 100644 --- a/Translations/Language.ru.xml +++ b/Translations/Language.ru.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.sk.xml b/Translations/Language.sk.xml index c9d2fac7..d14335f9 100644 --- a/Translations/Language.sk.xml +++ b/Translations/Language.sk.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.sl.xml b/Translations/Language.sl.xml index 63c00b56..b0c9946b 100644 --- a/Translations/Language.sl.xml +++ b/Translations/Language.sl.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.sv.xml b/Translations/Language.sv.xml index 87c7cb1c..903290f7 100644 --- a/Translations/Language.sv.xml +++ b/Translations/Language.sv.xml @@ -1651,6 +1651,8 @@ Allmänt Åtgärder Lösenord + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.th.xml b/Translations/Language.th.xml index 97f69f37..9e856fa7 100644 --- a/Translations/Language.th.xml +++ b/Translations/Language.th.xml @@ -1652,6 +1652,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.tr.xml b/Translations/Language.tr.xml index f18a185c..f44c7fdb 100644 --- a/Translations/Language.tr.xml +++ b/Translations/Language.tr.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.uk.xml b/Translations/Language.uk.xml index c4409a05..d8dc2e20 100644 --- a/Translations/Language.uk.xml +++ b/Translations/Language.uk.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.uz.xml b/Translations/Language.uz.xml index 0cab6c2e..16a79b02 100644 --- a/Translations/Language.uz.xml +++ b/Translations/Language.uz.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.vi.xml b/Translations/Language.vi.xml index 5de01ab7..b2f6f6bb 100644 --- a/Translations/Language.vi.xml +++ b/Translations/Language.vi.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.zh-cn.xml b/Translations/Language.zh-cn.xml index bb0af54c..f4c2c118 100644 --- a/Translations/Language.zh-cn.xml +++ b/Translations/Language.zh-cn.xml @@ -1652,6 +1652,8 @@ 常规 动作 密码 + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.zh-hk.xml b/Translations/Language.zh-hk.xml index 4e9da139..765281f4 100644 --- a/Translations/Language.zh-hk.xml +++ b/Translations/Language.zh-hk.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/Translations/Language.zh-tw.xml b/Translations/Language.zh-tw.xml index 52aed10b..42b874f5 100644 --- a/Translations/Language.zh-tw.xml +++ b/Translations/Language.zh-tw.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/src/Common/Dlgcode.c b/src/Common/Dlgcode.c index 7ce2554d..d2c935d4 100644 --- a/src/Common/Dlgcode.c +++ b/src/Common/Dlgcode.c @@ -168,9 +168,12 @@ BOOL bHideWaitingDialog = FALSE; BOOL bCmdHideWaitingDialog = FALSE; BOOL bCmdHideWaitingDialogValid = FALSE; BOOL bUseSecureDesktop = FALSE; +BOOL bEnableIMEInSecureDesktop = FALSE; BOOL bUseLegacyMaxPasswordLength = FALSE; BOOL bCmdUseSecureDesktop = FALSE; BOOL bCmdUseSecureDesktopValid = FALSE; +BOOL bCmdEnableIMEInSecureDesktop = FALSE; +BOOL bCmdEnableIMEInSecureDesktopValid = FALSE; BOOL bStartOnLogon = FALSE; BOOL bMountDevicesOnLogon = FALSE; BOOL bMountFavoritesOnLogon = FALSE; @@ -14123,6 +14126,7 @@ typedef struct LPARAM dwInitParam; INT_PTR retValue; BOOL bDlgDisplayed; // set to TRUE if the dialog was displayed on secure desktop + BOOL bEnableIMEInSecureDesktop; } SecureDesktopThreadParam; typedef struct @@ -14206,17 +14210,20 @@ static unsigned int __stdcall SecureDesktopThread( LPVOID lpThreadParameter ) if (bNewDesktopSet) { ScreenCaptureBlocker blocker; - - // call ImmDisableIME from imm32.dll to disable IME since it can create issue with secure desktop - // cf: https://keepass.info/help/kb/sec_desk.html#ime - HMODULE hImmDll = LoadLibraryEx (L"imm32.dll", NULL, LOAD_LIBRARY_SEARCH_SYSTEM32); - if (hImmDll) + HMODULE hImmDll = NULL; + if (!pParam->bEnableIMEInSecureDesktop) { - typedef BOOL (WINAPI *ImmDisableIME_t)(DWORD); - ImmDisableIME_t ImmDisableIME = (ImmDisableIME_t) GetProcAddress (hImmDll, "ImmDisableIME"); - if (ImmDisableIME) + // call ImmDisableIME from imm32.dll to disable IME since it can create issue with secure desktop + // cf: https://keepass.info/help/kb/sec_desk.html#ime + hImmDll = LoadLibraryEx (L"imm32.dll", NULL, LOAD_LIBRARY_SEARCH_SYSTEM32); + if (hImmDll) { - ImmDisableIME (0); + typedef BOOL (WINAPI *ImmDisableIME_t)(DWORD); + ImmDisableIME_t ImmDisableIME = (ImmDisableIME_t) GetProcAddress (hImmDll, "ImmDisableIME"); + if (ImmDisableIME) + { + ImmDisableIME (0); + } } } @@ -14316,6 +14323,7 @@ INT_PTR SecureDesktopDialogBoxParam( BOOL bSuccess = FALSE; INT_PTR retValue = 0; BOOL bEffectiveUseSecureDesktop = bCmdUseSecureDesktopValid? bCmdUseSecureDesktop : bUseSecureDesktop; + BOOL bEffectiveEnableIMEInSecureDesktop = bCmdEnableIMEInSecureDesktopValid? bCmdEnableIMEInSecureDesktop : bEnableIMEInSecureDesktop; if (bEffectiveUseSecureDesktop && !IsThreadInSecureDesktop(GetCurrentThreadId())) { @@ -14372,6 +14380,7 @@ INT_PTR SecureDesktopDialogBoxParam( param.dwInitParam = dwInitParam; param.retValue = 0; param.bDlgDisplayed = FALSE; + param.bEnableIMEInSecureDesktop = bEffectiveEnableIMEInSecureDesktop; // use _beginthreadex instead of CreateThread because lpDialogFunc may be using the C runtime library HANDLE hThread = (HANDLE) _beginthreadex (NULL, 0, SecureDesktopThread, (LPVOID) ¶m, 0, NULL); diff --git a/src/Common/Dlgcode.h b/src/Common/Dlgcode.h index aee290f7..6fded2f3 100644 --- a/src/Common/Dlgcode.h +++ b/src/Common/Dlgcode.h @@ -128,11 +128,14 @@ extern BOOL bHideWaitingDialog; extern BOOL bCmdHideWaitingDialog; extern BOOL bCmdHideWaitingDialogValid; extern BOOL bUseSecureDesktop; +extern BOOL bEnableIMEInSecureDesktop; extern volatile BOOL bSecureDesktopOngoing; extern TCHAR SecureDesktopName[65]; extern BOOL bUseLegacyMaxPasswordLength; extern BOOL bCmdUseSecureDesktop; extern BOOL bCmdUseSecureDesktopValid; +extern BOOL bCmdEnableIMEInSecureDesktop; +extern BOOL bCmdEnableIMEInSecureDesktopValid; extern BOOL bStartOnLogon; extern BOOL bMountDevicesOnLogon; extern BOOL bMountFavoritesOnLogon; diff --git a/src/Common/Language.xml b/src/Common/Language.xml index c4315d8b..614714ac 100644 --- a/src/Common/Language.xml +++ b/src/Common/Language.xml @@ -1651,6 +1651,8 @@ General Actions Password + Enable Input Method Editor (IME) in Secure Desktop + WARNING: Enable this option only if you are encountering issues when selecting Keyfiles/Tokens under Secure Desktop. diff --git a/src/ExpandVolume/WinMain.cpp b/src/ExpandVolume/WinMain.cpp index 13a484e7..fe16ff14 100644 --- a/src/ExpandVolume/WinMain.cpp +++ b/src/ExpandVolume/WinMain.cpp @@ -310,6 +310,7 @@ void LoadSettings (HWND hwndDlg) bShowDisconnectedNetworkDrives = ConfigReadInt ("ShowDisconnectedNetworkDrives", FALSE); bHideWaitingDialog = ConfigReadInt ("HideWaitingDialog", FALSE); bUseSecureDesktop = ConfigReadInt ("UseSecureDesktop", FALSE); + bEnableIMEInSecureDesktop = ConfigReadInt ("EnableIMEInSecureDesktop", FALSE); bUseLegacyMaxPasswordLength = ConfigReadInt ("UseLegacyMaxPasswordLength", FALSE); defaultMountOptions.Removable = ConfigReadInt ("MountVolumesRemovable", FALSE); defaultMountOptions.ReadOnly = ConfigReadInt ("MountVolumesReadOnly", FALSE); @@ -981,6 +982,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa bShowDisconnectedNetworkDrives = FALSE; bHideWaitingDialog = FALSE; bUseSecureDesktop = FALSE; + bEnableIMEInSecureDesktop = FALSE; bUseLegacyMaxPasswordLength = FALSE; VeraCryptExpander::ExtractCommandLine (hwndDlg, (wchar_t *) lParam); diff --git a/src/Format/Tcformat.c b/src/Format/Tcformat.c index 21031ca5..0972430f 100644 --- a/src/Format/Tcformat.c +++ b/src/Format/Tcformat.c @@ -9174,6 +9174,7 @@ void ExtractCommandLine (HWND hwndDlg, wchar_t *lpszCommandLine) OptionEnableScreenProtection, OptionKeyfile, OptionSecureDesktop, + OptionEnableIME, }; argument args[]= @@ -9201,6 +9202,7 @@ void ExtractCommandLine (HWND hwndDlg, wchar_t *lpszCommandLine) { OptionEnableScreenProtection, L"/protectScreen", NULL, FALSE }, { OptionKeyfile, L"/keyfile", L"/k", FALSE }, { OptionSecureDesktop, L"/secureDesktop", NULL, FALSE }, + { OptionEnableIME, L"/enableIME", NULL, FALSE }, // Internal { CommandResumeSysEncLogOn, L"/acsysenc", L"/a", TRUE }, @@ -9691,6 +9693,24 @@ void ExtractCommandLine (HWND hwndDlg, wchar_t *lpszCommandLine) } break; + case OptionEnableIME: + { + wchar_t szTmp[16] = {0}; + bCmdEnableIMEInSecureDesktop = TRUE; + bCmdEnableIMEInSecureDesktopValid = TRUE; + + if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, &i, nNoCommandLineArgs, + szTmp, ARRAYSIZE (szTmp))) + { + if (!_wcsicmp(szTmp,L"n") || !_wcsicmp(szTmp,L"no")) + bCmdEnableIMEInSecureDesktop = FALSE; + else if (!_wcsicmp(szTmp,L"y") || !_wcsicmp(szTmp,L"yes")) + bCmdEnableIMEInSecureDesktop = TRUE; + else + AbortProcess ("COMMAND_LINE_ERROR"); + } + } + default: DialogBoxParamW (hInst, MAKEINTRESOURCEW (IDD_COMMANDHELP_DLG), hwndDlg, (DLGPROC) CommandHelpDlgProc, (LPARAM) &as); diff --git a/src/Mount/Mount.c b/src/Mount/Mount.c index 2cb48942..ca5959a1 100644 --- a/src/Mount/Mount.c +++ b/src/Mount/Mount.c @@ -1034,6 +1034,8 @@ void LoadSettingsAndCheckModified (HWND hwndDlg, BOOL bOnlyCheckModified, BOOL* ConfigReadCompareInt ("UseSecureDesktop", FALSE, &bUseSecureDesktop, bOnlyCheckModified, pbSettingsModified); + ConfigReadCompareInt ("EnableIMEInSecureDesktop", FALSE, &bEnableIMEInSecureDesktop, bOnlyCheckModified, pbSettingsModified); + ConfigReadCompareInt ("UseLegacyMaxPasswordLength", FALSE, &bUseLegacyMaxPasswordLength, bOnlyCheckModified, pbSettingsModified); ConfigReadCompareInt ("MountVolumesRemovable", FALSE, &defaultMountOptions.Removable, bOnlyCheckModified, pbSettingsModified); @@ -1193,6 +1195,7 @@ void SaveSettings (HWND hwndDlg) ConfigWriteInt ("ShowDisconnectedNetworkDrives",bShowDisconnectedNetworkDrives); ConfigWriteInt ("HideWaitingDialog", bHideWaitingDialog); ConfigWriteInt ("UseSecureDesktop", bUseSecureDesktop); + ConfigWriteInt ("EnableIMEInSecureDesktop", bEnableIMEInSecureDesktop); ConfigWriteInt ("UseLegacyMaxPasswordLength", bUseLegacyMaxPasswordLength); ConfigWriteInt ("EnableBackgroundTask", bEnableBkgTask); @@ -3429,42 +3432,196 @@ BOOL CALLBACK PasswordDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa } // Use the Actions tab (index 1) as the owner of all these controls. -static void PreferencesDlgEnableButtons (HWND *pTabDialogs) +static void PreferencesDlgEnableButtons (HWND hActionsTab) { - if (!pTabDialogs) + if (!hActionsTab) return; - HWND hActions = pTabDialogs[1]; - if (!hActions) - return; - - BOOL back = IsButtonChecked (GetDlgItem (hActions, IDC_PREF_BKG_TASK_ENABLE)); - BOOL idle = IsButtonChecked (GetDlgItem (hActions, IDC_PREF_UNMOUNT_INACTIVE)); + BOOL back = IsButtonChecked (GetDlgItem (hActionsTab, IDC_PREF_BKG_TASK_ENABLE)); + BOOL idle = IsButtonChecked (GetDlgItem (hActionsTab, IDC_PREF_UNMOUNT_INACTIVE)); BOOL installed = !IsNonInstallMode(); BOOL wtsEnabled = (hWtsLib != NULL) ? TRUE : FALSE; - EnableWindow (GetDlgItem (hActions, IDC_CLOSE_BKG_TASK_WHEN_NOVOL), back && installed); - EnableWindow (GetDlgItem (hActions, IDT_LOGON), installed); - EnableWindow (GetDlgItem (hActions, IDC_PREF_LOGON_START), back && installed); - EnableWindow (GetDlgItem (hActions, IDC_PREF_LOGON_MOUNT_DEVICES), installed); - EnableWindow (GetDlgItem (hActions, IDT_AUTO_UNMOUNT), back); - EnableWindow (GetDlgItem (hActions, IDT_AUTO_UNMOUNT_ON), back); - EnableWindow (GetDlgItem (hActions, IDT_MINUTES), back); - EnableWindow (GetDlgItem (hActions, IDC_PREF_UNMOUNT_LOGOFF), back); - EnableWindow (GetDlgItem (hActions, IDC_PREF_UNMOUNT_SESSION_LOCKED), back && wtsEnabled); - EnableWindow (GetDlgItem (hActions, IDC_PREF_UNMOUNT_POWERSAVING), back); - EnableWindow (GetDlgItem (hActions, IDC_PREF_UNMOUNT_SCREENSAVER), back); - EnableWindow (GetDlgItem (hActions, IDC_PREF_UNMOUNT_INACTIVE), back); - EnableWindow (GetDlgItem (hActions, IDC_PREF_UNMOUNT_INACTIVE_TIME), back && idle); - EnableWindow (GetDlgItem (hActions, IDC_PREF_FORCE_AUTO_UNMOUNT), back); + EnableWindow (GetDlgItem (hActionsTab, IDC_CLOSE_BKG_TASK_WHEN_NOVOL), back && installed); + EnableWindow (GetDlgItem (hActionsTab, IDT_LOGON), installed); + EnableWindow (GetDlgItem (hActionsTab, IDC_PREF_LOGON_START), back && installed); + EnableWindow (GetDlgItem (hActionsTab, IDC_PREF_LOGON_MOUNT_DEVICES), installed); + EnableWindow (GetDlgItem (hActionsTab, IDT_AUTO_UNMOUNT), back); + EnableWindow (GetDlgItem (hActionsTab, IDT_AUTO_UNMOUNT_ON), back); + EnableWindow (GetDlgItem (hActionsTab, IDT_MINUTES), back); + EnableWindow (GetDlgItem (hActionsTab, IDC_PREF_UNMOUNT_LOGOFF), back); + EnableWindow (GetDlgItem (hActionsTab, IDC_PREF_UNMOUNT_SESSION_LOCKED), back && wtsEnabled); + EnableWindow (GetDlgItem (hActionsTab, IDC_PREF_UNMOUNT_POWERSAVING), back); + EnableWindow (GetDlgItem (hActionsTab, IDC_PREF_UNMOUNT_SCREENSAVER), back); + EnableWindow (GetDlgItem (hActionsTab, IDC_PREF_UNMOUNT_INACTIVE), back); + EnableWindow (GetDlgItem (hActionsTab, IDC_PREF_UNMOUNT_INACTIVE_TIME), back && idle); + EnableWindow (GetDlgItem (hActionsTab, IDC_PREF_FORCE_AUTO_UNMOUNT), back); } -static INT_PTR CALLBACK PrefsTabProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK PrefsGeneralTabProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + static HWND hEnableIMEInSecureDesktopTooltipWnd = NULL; + WORD lw = LOWORD(wParam); + switch (msg) + { + case WM_INITDIALOG: + LocalizeDialog (hDlg, NULL); + // General Tab + SendMessage (GetDlgItem (hDlg, IDC_PREF_MOUNT_READONLY), BM_SETCHECK, + defaultMountOptions.ReadOnly ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_MOUNT_REMOVABLE), BM_SETCHECK, + defaultMountOptions.Removable ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_OPEN_EXPLORER), BM_SETCHECK, + bExplore ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_USE_DIFF_TRAY_ICON_IF_VOL_MOUNTED), BM_SETCHECK, + bUseDifferentTrayIconIfVolMounted ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PRESERVE_TIMESTAMPS), BM_SETCHECK, + bPreserveTimestamp ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_SHOW_DISCONNECTED_NETWORK_DRIVES), BM_SETCHECK, + bShowDisconnectedNetworkDrives ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_HIDE_WAITING_DIALOG), BM_SETCHECK, + bHideWaitingDialog ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_SECURE_DESKTOP_PASSWORD_ENTRY), BM_SETCHECK, + bUseSecureDesktop ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_SECURE_DESKTOP_ENABLE_IME), BM_SETCHECK, + bEnableIMEInSecureDesktop ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_USE_LEGACY_MAX_PASSWORD_LENGTH), BM_SETCHECK, + bUseLegacyMaxPasswordLength ? BST_CHECKED : BST_UNCHECKED, 0); + if (!bUseSecureDesktop) + { + EnableWindow (GetDlgItem (hDlg, IDC_SECURE_DESKTOP_ENABLE_IME), FALSE); + } + + hEnableIMEInSecureDesktopTooltipWnd = CreateToolTip ( + IDC_SECURE_DESKTOP_ENABLE_IME, + hDlg, + "ENABLE_IME_IN_SECURE_DESKTOP_WARNING" + ); + // make IDC_SECURE_DESKTOP_ENABLE_IME control fit the text so that the tooltip is shown only when mouse is over the text + AccommodateCheckBoxTextWidth(hDlg, IDC_SECURE_DESKTOP_ENABLE_IME); + return TRUE; + + case WM_COMMAND: + + // dynamicaly enable/disable IME setting depending on secure desktop setting + if (lw == IDC_SECURE_DESKTOP_PASSWORD_ENTRY) + { + if (IsButtonChecked (GetDlgItem (hDlg, IDC_SECURE_DESKTOP_PASSWORD_ENTRY))) + EnableWindow (GetDlgItem (hDlg, IDC_SECURE_DESKTOP_ENABLE_IME), TRUE); + else + EnableWindow (GetDlgItem (hDlg, IDC_SECURE_DESKTOP_ENABLE_IME), FALSE); + } + break; + + case WM_DESTROY: + if (hEnableIMEInSecureDesktopTooltipWnd) + { + DestroyWindow (hEnableIMEInSecureDesktopTooltipWnd); + hEnableIMEInSecureDesktopTooltipWnd = NULL; + } + break; + } + return FALSE; +} + +static INT_PTR CALLBACK PrefsActionsTabProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + WORD lw = LOWORD(wParam); + switch (msg) + { + case WM_INITDIALOG: + LocalizeDialog (hDlg, NULL); + SendMessage (GetDlgItem (hDlg, IDC_PREF_BKG_TASK_ENABLE), BM_SETCHECK, + bEnableBkgTask ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_CLOSE_BKG_TASK_WHEN_NOVOL), BM_SETCHECK, + (bCloseBkgTaskWhenNoVolumes || IsNonInstallMode()) ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_LOGON_START), BM_SETCHECK, + bStartOnLogon ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_LOGON_MOUNT_DEVICES), BM_SETCHECK, + bMountDevicesOnLogon ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_UNMOUNT_LOGOFF), BM_SETCHECK, + bDismountOnLogOff ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_UNMOUNT_SESSION_LOCKED), BM_SETCHECK, + bDismountOnSessionLocked ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_UNMOUNT_POWERSAVING), BM_SETCHECK, + bDismountOnPowerSaving ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_UNMOUNT_SCREENSAVER), BM_SETCHECK, + bDismountOnScreenSaver ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_FORCE_AUTO_UNMOUNT), BM_SETCHECK, + bForceAutoDismount ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_UNMOUNT_INACTIVE), BM_SETCHECK, + MaxVolumeIdleTime > 0 ? BST_CHECKED : BST_UNCHECKED, 0); + SetDlgItemInt (hDlg, IDC_PREF_UNMOUNT_INACTIVE_TIME, abs (MaxVolumeIdleTime), FALSE); + PreferencesDlgEnableButtons (hDlg); + return TRUE; + + case WM_COMMAND: + + if (lw == IDC_PREF_BKG_TASK_ENABLE && !IsButtonChecked (GetDlgItem (hDlg, IDC_PREF_BKG_TASK_ENABLE))) + { + if (AskWarnNoYes ("CONFIRM_BACKGROUND_TASK_DISABLED", hDlg) == IDNO) + CheckDlgButton(hDlg, IDC_PREF_BKG_TASK_ENABLE, BST_CHECKED); + } + + // Forced dismount disabled warning + if (lw == IDC_PREF_UNMOUNT_INACTIVE + || lw == IDC_PREF_UNMOUNT_LOGOFF + || lw == IDC_PREF_UNMOUNT_SESSION_LOCKED + || lw == IDC_PREF_UNMOUNT_POWERSAVING + || lw == IDC_PREF_UNMOUNT_SCREENSAVER + || lw == IDC_PREF_FORCE_AUTO_UNMOUNT) + { + BOOL i = IsButtonChecked (GetDlgItem (hDlg, IDC_PREF_UNMOUNT_INACTIVE)); + BOOL l = IsButtonChecked (GetDlgItem (hDlg, IDC_PREF_UNMOUNT_LOGOFF)); + BOOL sl = IsButtonChecked (GetDlgItem (hDlg, IDC_PREF_UNMOUNT_SESSION_LOCKED)); + BOOL p = IsButtonChecked (GetDlgItem (hDlg, IDC_PREF_UNMOUNT_POWERSAVING)); + BOOL s = IsButtonChecked (GetDlgItem (hDlg, IDC_PREF_UNMOUNT_SCREENSAVER)); + BOOL q = IsButtonChecked (GetDlgItem (hDlg, IDC_PREF_FORCE_AUTO_UNMOUNT)); + + if (!q) + { + if (lw == IDC_PREF_FORCE_AUTO_UNMOUNT && (i || l || sl || p || s)) + { + if (AskWarnNoYes ("CONFIRM_NO_FORCED_AUTOUNMOUNT", hDlg) == IDNO) + SetCheckBox (hDlg, IDC_PREF_FORCE_AUTO_UNMOUNT, TRUE); + } + else if ((lw == IDC_PREF_UNMOUNT_INACTIVE && i + || lw == IDC_PREF_UNMOUNT_LOGOFF && l + || lw == IDC_PREF_UNMOUNT_SESSION_LOCKED && sl + || lw == IDC_PREF_UNMOUNT_POWERSAVING && p + || lw == IDC_PREF_UNMOUNT_SCREENSAVER && s)) + Warning ("WARN_PREF_AUTO_UNMOUNT", hDlg); + } + + if (p && lw == IDC_PREF_UNMOUNT_POWERSAVING) + Warning ("WARN_PREF_AUTO_UNMOUNT_ON_POWER", hDlg); + } + if (HIWORD (wParam) == BN_CLICKED) + { + PreferencesDlgEnableButtons (hDlg); + return 1; + } + break; + } + return FALSE; +} + +static INT_PTR CALLBACK PrefsPasswordTabProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_INITDIALOG: LocalizeDialog (hDlg, NULL); + SendMessage (GetDlgItem (hDlg, IDC_PREF_CACHE_PASSWORDS), BM_SETCHECK, + bCacheInDriverDefault ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_TEMP_CACHE_ON_MULTIPLE_MOUNT), BM_SETCHECK, + bCacheDuringMultipleMount ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_WIPE_CACHE_ON_EXIT), BM_SETCHECK, + bWipeCacheOnExit ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_WIPE_CACHE_ON_AUTOUNMOUNT), BM_SETCHECK, + bWipeCacheOnAutoDismount ? BST_CHECKED : BST_UNCHECKED, 0); + SendMessage (GetDlgItem (hDlg, IDC_PREF_CACHE_PIM), BM_SETCHECK, + bIncludePimInCache ? BST_CHECKED : BST_UNCHECKED, 0); return TRUE; } return FALSE; @@ -3516,9 +3673,9 @@ BOOL CALLBACK PreferencesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM TabCtrl_InsertItem(hTab, 2, &ti); // Create tab dialogs as children of the main dialog - TabDialogs[0] = CreateDialog(hInst, MAKEINTRESOURCE(IDD_PREFERENCES_TAB_GENERAL), hwndDlg, PrefsTabProc); - TabDialogs[1] = CreateDialog(hInst, MAKEINTRESOURCE(IDD_PREFERENCES_TAB_ACTIONS), hwndDlg, PrefsTabProc); - TabDialogs[2] = CreateDialog(hInst, MAKEINTRESOURCE(IDD_PREFERENCES_TAB_PASSWORD), hwndDlg, PrefsTabProc); + TabDialogs[0] = CreateDialog(hInst, MAKEINTRESOURCE(IDD_PREFERENCES_TAB_GENERAL), hwndDlg, PrefsGeneralTabProc); + TabDialogs[1] = CreateDialog(hInst, MAKEINTRESOURCE(IDD_PREFERENCES_TAB_ACTIONS), hwndDlg, PrefsActionsTabProc); + TabDialogs[2] = CreateDialog(hInst, MAKEINTRESOURCE(IDD_PREFERENCES_TAB_PASSWORD), hwndDlg, PrefsPasswordTabProc); // Position tab dialogs within the tab's display area GetClientRect(hTab, &tabRect); @@ -3542,64 +3699,6 @@ BOOL CALLBACK PreferencesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM // Show first page (unchanged) ShowWindow(TabDialogs[0], SW_SHOW); CurTab = 0; - - // Populate controls on all tabs - // General Tab - SendMessage (GetDlgItem (TabDialogs[0], IDC_PREF_MOUNT_READONLY), BM_SETCHECK, - defaultMountOptions.ReadOnly ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[0], IDC_PREF_MOUNT_REMOVABLE), BM_SETCHECK, - defaultMountOptions.Removable ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[0], IDC_PREF_OPEN_EXPLORER), BM_SETCHECK, - bExplore ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[0], IDC_PREF_USE_DIFF_TRAY_ICON_IF_VOL_MOUNTED), BM_SETCHECK, - bUseDifferentTrayIconIfVolMounted ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[0], IDC_PRESERVE_TIMESTAMPS), BM_SETCHECK, - bPreserveTimestamp ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[0], IDC_SHOW_DISCONNECTED_NETWORK_DRIVES), BM_SETCHECK, - bShowDisconnectedNetworkDrives ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[0], IDC_HIDE_WAITING_DIALOG), BM_SETCHECK, - bHideWaitingDialog ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[0], IDC_SECURE_DESKTOP_PASSWORD_ENTRY), BM_SETCHECK, - bUseSecureDesktop ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[0], IDC_USE_LEGACY_MAX_PASSWORD_LENGTH), BM_SETCHECK, - bUseLegacyMaxPasswordLength ? BST_CHECKED : BST_UNCHECKED, 0); - - // Actions Tab - SendMessage (GetDlgItem (TabDialogs[1], IDC_PREF_BKG_TASK_ENABLE), BM_SETCHECK, - bEnableBkgTask ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[1], IDC_CLOSE_BKG_TASK_WHEN_NOVOL), BM_SETCHECK, - (bCloseBkgTaskWhenNoVolumes || IsNonInstallMode()) ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[1], IDC_PREF_LOGON_START), BM_SETCHECK, - bStartOnLogon ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[1], IDC_PREF_LOGON_MOUNT_DEVICES), BM_SETCHECK, - bMountDevicesOnLogon ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[1], IDC_PREF_UNMOUNT_LOGOFF), BM_SETCHECK, - bDismountOnLogOff ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[1], IDC_PREF_UNMOUNT_SESSION_LOCKED), BM_SETCHECK, - bDismountOnSessionLocked ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[1], IDC_PREF_UNMOUNT_POWERSAVING), BM_SETCHECK, - bDismountOnPowerSaving ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[1], IDC_PREF_UNMOUNT_SCREENSAVER), BM_SETCHECK, - bDismountOnScreenSaver ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[1], IDC_PREF_FORCE_AUTO_UNMOUNT), BM_SETCHECK, - bForceAutoDismount ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[1], IDC_PREF_UNMOUNT_INACTIVE), BM_SETCHECK, - MaxVolumeIdleTime > 0 ? BST_CHECKED : BST_UNCHECKED, 0); - SetDlgItemInt (TabDialogs[1], IDC_PREF_UNMOUNT_INACTIVE_TIME, abs (MaxVolumeIdleTime), FALSE); - - // Password Tab - SendMessage (GetDlgItem (TabDialogs[2], IDC_PREF_CACHE_PASSWORDS), BM_SETCHECK, - bCacheInDriverDefault ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[2], IDC_PREF_TEMP_CACHE_ON_MULTIPLE_MOUNT), BM_SETCHECK, - bCacheDuringMultipleMount ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[2], IDC_PREF_WIPE_CACHE_ON_EXIT), BM_SETCHECK, - bWipeCacheOnExit ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[2], IDC_PREF_WIPE_CACHE_ON_AUTOUNMOUNT), BM_SETCHECK, - bWipeCacheOnAutoDismount ? BST_CHECKED : BST_UNCHECKED, 0); - SendMessage (GetDlgItem (TabDialogs[2], IDC_PREF_CACHE_PIM), BM_SETCHECK, - bIncludePimInCache ? BST_CHECKED : BST_UNCHECKED, 0); - - PreferencesDlgEnableButtons (TabDialogs); } return 1; @@ -3630,46 +3729,6 @@ BOOL CALLBACK PreferencesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM case WM_COMMAND: - if (lw == IDC_PREF_BKG_TASK_ENABLE && !IsButtonChecked (GetDlgItem (TabDialogs[1], IDC_PREF_BKG_TASK_ENABLE))) - { - if (AskWarnNoYes ("CONFIRM_BACKGROUND_TASK_DISABLED", hwndDlg) == IDNO) - CheckDlgButton(TabDialogs[1], IDC_PREF_BKG_TASK_ENABLE, BST_CHECKED); - } - - // Forced dismount disabled warning - if (lw == IDC_PREF_UNMOUNT_INACTIVE - || lw == IDC_PREF_UNMOUNT_LOGOFF - || lw == IDC_PREF_UNMOUNT_SESSION_LOCKED - || lw == IDC_PREF_UNMOUNT_POWERSAVING - || lw == IDC_PREF_UNMOUNT_SCREENSAVER - || lw == IDC_PREF_FORCE_AUTO_UNMOUNT) - { - BOOL i = IsButtonChecked (GetDlgItem (TabDialogs[1], IDC_PREF_UNMOUNT_INACTIVE)); - BOOL l = IsButtonChecked (GetDlgItem (TabDialogs[1], IDC_PREF_UNMOUNT_LOGOFF)); - BOOL sl = IsButtonChecked (GetDlgItem (TabDialogs[1], IDC_PREF_UNMOUNT_SESSION_LOCKED)); - BOOL p = IsButtonChecked (GetDlgItem (TabDialogs[1], IDC_PREF_UNMOUNT_POWERSAVING)); - BOOL s = IsButtonChecked (GetDlgItem (TabDialogs[1], IDC_PREF_UNMOUNT_SCREENSAVER)); - BOOL q = IsButtonChecked (GetDlgItem (TabDialogs[1], IDC_PREF_FORCE_AUTO_UNMOUNT)); - - if (!q) - { - if (lw == IDC_PREF_FORCE_AUTO_UNMOUNT && (i || l || sl || p || s)) - { - if (AskWarnNoYes ("CONFIRM_NO_FORCED_AUTOUNMOUNT", hwndDlg) == IDNO) - SetCheckBox (TabDialogs[1], IDC_PREF_FORCE_AUTO_UNMOUNT, TRUE); - } - else if ((lw == IDC_PREF_UNMOUNT_INACTIVE && i - || lw == IDC_PREF_UNMOUNT_LOGOFF && l - || lw == IDC_PREF_UNMOUNT_SESSION_LOCKED && sl - || lw == IDC_PREF_UNMOUNT_POWERSAVING && p - || lw == IDC_PREF_UNMOUNT_SCREENSAVER && s)) - Warning ("WARN_PREF_AUTO_UNMOUNT", hwndDlg); - } - - if (p && lw == IDC_PREF_UNMOUNT_POWERSAVING) - Warning ("WARN_PREF_AUTO_UNMOUNT_ON_POWER", hwndDlg); - } - if (lw == IDCANCEL) { PreferencesDialogActive = FALSE; @@ -3690,6 +3749,7 @@ BOOL CALLBACK PreferencesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM bShowDisconnectedNetworkDrives = IsButtonChecked (GetDlgItem (TabDialogs[0], IDC_SHOW_DISCONNECTED_NETWORK_DRIVES)); bHideWaitingDialog = IsButtonChecked (GetDlgItem (TabDialogs[0], IDC_HIDE_WAITING_DIALOG)); bUseSecureDesktop = IsButtonChecked (GetDlgItem (TabDialogs[0], IDC_SECURE_DESKTOP_PASSWORD_ENTRY)); + bEnableIMEInSecureDesktop = IsButtonChecked (GetDlgItem (TabDialogs[0], IDC_SECURE_DESKTOP_ENABLE_IME)); bUseLegacyMaxPasswordLength = IsButtonChecked (GetDlgItem (TabDialogs[0], IDC_USE_LEGACY_MAX_PASSWORD_LENGTH)); // Actions Tab @@ -3752,7 +3812,7 @@ BOOL CALLBACK PreferencesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM if (HIWORD (wParam) == BN_CLICKED) { - PreferencesDlgEnableButtons (TabDialogs); + PreferencesDlgEnableButtons (TabDialogs[1]); // actions tab return 1; } @@ -7202,6 +7262,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa bShowDisconnectedNetworkDrives = FALSE; bHideWaitingDialog = FALSE; bUseSecureDesktop = FALSE; + bEnableIMEInSecureDesktop = FALSE; bUseLegacyMaxPasswordLength = FALSE; // lock the init mutex @@ -9307,6 +9368,7 @@ void ExtractCommandLine (HWND hwndDlg, wchar_t *lpszCommandLine) OptionTryEmptyPassword, OptionNoWaitDlg, OptionSecureDesktop, + OptionEnableIME, OptionDisableDeviceUpdate, OptionEnableMemoryProtection, OptionEnableScreenProtection, @@ -9339,6 +9401,7 @@ void ExtractCommandLine (HWND hwndDlg, wchar_t *lpszCommandLine) { OptionTryEmptyPassword, L"/tryemptypass", NULL, FALSE }, { OptionNoWaitDlg, L"/nowaitdlg", NULL, FALSE }, { OptionSecureDesktop, L"/secureDesktop", NULL, FALSE }, + { OptionEnableIME, L"/enableIME", NULL, FALSE }, { OptionDisableDeviceUpdate, L"/disableDeviceUpdate", NULL, FALSE }, { OptionEnableMemoryProtection, L"/protectMemory", NULL, FALSE }, { OptionEnableScreenProtection, L"/protectScreen", NULL, FALSE }, @@ -9434,6 +9497,24 @@ void ExtractCommandLine (HWND hwndDlg, wchar_t *lpszCommandLine) } break; + case OptionEnableIME: + { + wchar_t szTmp[16] = {0}; + bCmdEnableIMEInSecureDesktop = TRUE; + bCmdEnableIMEInSecureDesktopValid = TRUE; + + if (HAS_ARGUMENT == GetArgumentValue (lpszCommandLineArgs, &i, nNoCommandLineArgs, + szTmp, ARRAYSIZE (szTmp))) + { + if (!_wcsicmp(szTmp,L"n") || !_wcsicmp(szTmp,L"no")) + bCmdEnableIMEInSecureDesktop = FALSE; + else if (!_wcsicmp(szTmp,L"y") || !_wcsicmp(szTmp,L"yes")) + bCmdEnableIMEInSecureDesktop = TRUE; + else + AbortProcess ("COMMAND_LINE_ERROR"); + } + } + case OptionDisableDeviceUpdate: { DisablePeriodicDeviceListUpdate = TRUE; @@ -10234,6 +10315,7 @@ static BOOL StartSystemFavoritesService () bShowDisconnectedNetworkDrives = TRUE; bHideWaitingDialog = TRUE; bUseSecureDesktop = FALSE; + bEnableIMEInSecureDesktop = FALSE; bUseLegacyMaxPasswordLength = FALSE; InitOSVersionInfo(); diff --git a/src/Mount/Mount.rc b/src/Mount/Mount.rc index 7ba8de27..1cb8f9f4 100644 --- a/src/Mount/Mount.rc +++ b/src/Mount/Mount.rc @@ -75,8 +75,10 @@ BEGIN "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,122,290,10 CONTROL "Use Secure Desktop for password entry",IDC_SECURE_DESKTOP_PASSWORD_ENTRY, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,136,290,10 + CONTROL "Enable Input Method Editor (IME) in Secure Desktop",IDC_SECURE_DESKTOP_ENABLE_IME, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,149,290,10 CONTROL "Use legacy maximum password length (64 characters)",IDC_USE_LEGACY_MAX_PASSWORD_LENGTH, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,150,290,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,162,290,10 END IDD_PREFERENCES_TAB_ACTIONS DIALOGEX 0, 0, 320, 210 diff --git a/src/Mount/Resource.h b/src/Mount/Resource.h index 156365ff..0f2ce5b3 100644 --- a/src/Mount/Resource.h +++ b/src/Mount/Resource.h @@ -161,7 +161,7 @@ #define IDC_FAVORITES_HELP_LINK 1135 #define IDC_FAV_VOL_OPTIONS_GLOBAL_SETTINGS_BOX 1136 #define IDC_PREF_UNMOUNT_SESSION_LOCKED 1137 -#define IDT_NEW_KDF 1138 +#define IDT_NEW_KDF 1138 #define IDC_PKCS5_OLD_PRF_ID 1139 #define IDC_PREF_TEMP_CACHE_ON_MULTIPLE_MOUNT 1141 #define IDT_OLD_PIM 1142 @@ -205,6 +205,7 @@ #define IDT_EMV_OPTIONS 1180 #define IDC_DISABLE_SCREEN_PROTECTION 1181 #define IDC_PREF_TAB 1182 +#define IDC_SECURE_DESKTOP_ENABLE_IME 1183 #define IDM_HELP 40001 #define IDM_ABOUT 40002 #define IDM_UNMOUNT_VOLUME 40003 @@ -282,7 +283,7 @@ #define _APS_NO_MFC 1 #define _APS_NEXT_RESOURCE_VALUE 123 #define _APS_NEXT_COMMAND_VALUE 40070 -#define _APS_NEXT_CONTROL_VALUE 1183 +#define _APS_NEXT_CONTROL_VALUE 1184 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif