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