diff --git a/src/Common/Dlgcode.c b/src/Common/Dlgcode.c index 64c1147b..63081dd5 100644 --- a/src/Common/Dlgcode.c +++ b/src/Common/Dlgcode.c @@ -221,6 +221,9 @@ static std::vector rawHostDeviceList; /* Critical section used to ensure that only one thread at a time can create a secure desktop */ CRITICAL_SECTION csSecureDesktop; +/* Boolean that indicates if our Secure Desktop is active and being user of not */ +BOOL bSecureDesktopOngoing = FALSE; + HINSTANCE hInst = NULL; HCURSOR hCursor = NULL; @@ -13584,7 +13587,8 @@ INT_PTR SecureDesktopDialogBoxParam( HDESK hInputDesk = NULL; EnterCriticalSection (&csSecureDesktop); - finally_do ({ LeaveCriticalSection (&csSecureDesktop); }); + bSecureDesktopOngoing = TRUE; + finally_do ({ bSecureDesktopOngoing = FALSE; LeaveCriticalSection (&csSecureDesktop); }); // wait for the input desktop to be available before switching to // secure desktop. Under Windows 10, the user session can be started diff --git a/src/Common/Dlgcode.h b/src/Common/Dlgcode.h index 54475cb7..5ff97af1 100644 --- a/src/Common/Dlgcode.h +++ b/src/Common/Dlgcode.h @@ -124,6 +124,7 @@ extern BOOL bHideWaitingDialog; extern BOOL bCmdHideWaitingDialog; extern BOOL bCmdHideWaitingDialogValid; extern BOOL bUseSecureDesktop; +extern BOOL bSecureDesktopOngoing; extern BOOL bUseLegacyMaxPasswordLength; extern BOOL bCmdUseSecureDesktop; extern BOOL bCmdUseSecureDesktopValid; diff --git a/src/Mount/Mount.c b/src/Mount/Mount.c index 7b73629e..dd437090 100644 --- a/src/Mount/Mount.c +++ b/src/Mount/Mount.c @@ -2968,7 +2968,12 @@ BOOL CALLBACK PasswordDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPa SetWindowPos (hwndDlg, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } SetFocus (GetDlgItem (hwndDlg, IDC_PASSWORD)); - SetTimer (hwndDlg, TIMER_ID_CHECK_FOREGROUND, TIMER_INTERVAL_CHECK_FOREGROUND, NULL); + + /* Start the timer to check if we are foreground only if Secure Desktop is not used */ + if (!bSecureDesktopOngoing) + { + SetTimer (hwndDlg, TIMER_ID_CHECK_FOREGROUND, TIMER_INTERVAL_CHECK_FOREGROUND, NULL); + } } return 0;