mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-11 19:08:26 -06:00
Windows: implement auto-dismount option when session is locked
This commit is contained in:
@@ -145,6 +145,7 @@
|
|||||||
<control lang="en" key="IDC_PREF_CACHE_PASSWORDS">Cache passwords in driver memory</control>
|
<control lang="en" key="IDC_PREF_CACHE_PASSWORDS">Cache passwords in driver memory</control>
|
||||||
<control lang="en" key="IDC_PREF_DISMOUNT_INACTIVE">Auto-dismount volume after no data has been read/written to it for</control>
|
<control lang="en" key="IDC_PREF_DISMOUNT_INACTIVE">Auto-dismount volume after no data has been read/written to it for</control>
|
||||||
<control lang="en" key="IDC_PREF_DISMOUNT_LOGOFF">User logs off</control>
|
<control lang="en" key="IDC_PREF_DISMOUNT_LOGOFF">User logs off</control>
|
||||||
|
<control lang="en" key="IDC_PREF_DISMOUNT_SESSION_LOCKED">User session locked</control>
|
||||||
<control lang="en" key="IDC_PREF_DISMOUNT_POWERSAVING">Entering power saving mode</control>
|
<control lang="en" key="IDC_PREF_DISMOUNT_POWERSAVING">Entering power saving mode</control>
|
||||||
<control lang="en" key="IDC_PREF_DISMOUNT_SCREENSAVER">Screen saver is launched</control>
|
<control lang="en" key="IDC_PREF_DISMOUNT_SCREENSAVER">Screen saver is launched</control>
|
||||||
<control lang="en" key="IDC_PREF_FORCE_AUTO_DISMOUNT">Force auto-dismount even if volume contains open files or directories</control>
|
<control lang="en" key="IDC_PREF_FORCE_AUTO_DISMOUNT">Force auto-dismount even if volume contains open files or directories</control>
|
||||||
|
|||||||
@@ -48,6 +48,11 @@
|
|||||||
|
|
||||||
#include <Strsafe.h>
|
#include <Strsafe.h>
|
||||||
|
|
||||||
|
#include <wtsapi32.h>
|
||||||
|
|
||||||
|
typedef BOOL (WINAPI *WTSREGISTERSESSIONNOTIFICATION)(HWND, DWORD);
|
||||||
|
typedef BOOL (WINAPI *WTSUNREGISTERSESSIONNOTIFICATION)(HWND);
|
||||||
|
|
||||||
using namespace VeraCrypt;
|
using namespace VeraCrypt;
|
||||||
|
|
||||||
enum timer_ids
|
enum timer_ids
|
||||||
@@ -85,6 +90,7 @@ BOOL bWipeCacheOnAutoDismount = TRUE;
|
|||||||
BOOL bEnableBkgTask = FALSE;
|
BOOL bEnableBkgTask = FALSE;
|
||||||
BOOL bCloseBkgTaskWhenNoVolumes = FALSE;
|
BOOL bCloseBkgTaskWhenNoVolumes = FALSE;
|
||||||
BOOL bDismountOnLogOff = TRUE;
|
BOOL bDismountOnLogOff = TRUE;
|
||||||
|
BOOL bDismountOnSessionLocked = TRUE;
|
||||||
BOOL bDismountOnScreenSaver = TRUE;
|
BOOL bDismountOnScreenSaver = TRUE;
|
||||||
BOOL bDismountOnPowerSaving = FALSE;
|
BOOL bDismountOnPowerSaving = FALSE;
|
||||||
BOOL bForceAutoDismount = TRUE;
|
BOOL bForceAutoDismount = TRUE;
|
||||||
@@ -142,6 +148,51 @@ static int bPrebootPasswordDlgMode = FALSE;
|
|||||||
static int NoCmdLineArgs;
|
static int NoCmdLineArgs;
|
||||||
static BOOL CmdLineVolumeSpecified;
|
static BOOL CmdLineVolumeSpecified;
|
||||||
static int LastDriveListVolumeColumnWidth;
|
static int LastDriveListVolumeColumnWidth;
|
||||||
|
// WTS handling
|
||||||
|
static HMODULE hWtsLib = NULL;
|
||||||
|
static WTSREGISTERSESSIONNOTIFICATION fnWtsRegisterSessionNotification = NULL;
|
||||||
|
static WTSUNREGISTERSESSIONNOTIFICATION fnWtsUnRegisterSessionNotification = NULL;
|
||||||
|
|
||||||
|
static void RegisterWtsNotification(HWND hWnd)
|
||||||
|
{
|
||||||
|
if (!hWtsLib)
|
||||||
|
{
|
||||||
|
char dllPath[MAX_PATH];
|
||||||
|
if (GetSystemDirectory(dllPath, MAX_PATH))
|
||||||
|
StringCbCatA(dllPath, sizeof(dllPath), "\\wtsapi32.dll");
|
||||||
|
else
|
||||||
|
StringCbCopyA(dllPath, sizeof(dllPath), "c:\\Windows\\System32\\wtsapi32.dll");
|
||||||
|
|
||||||
|
hWtsLib = LoadLibrary(dllPath);
|
||||||
|
if (hWtsLib)
|
||||||
|
{
|
||||||
|
fnWtsRegisterSessionNotification = (WTSREGISTERSESSIONNOTIFICATION) GetProcAddress(hWtsLib, "WTSRegisterSessionNotification" );
|
||||||
|
fnWtsUnRegisterSessionNotification = (WTSUNREGISTERSESSIONNOTIFICATION) GetProcAddress(hWtsLib, "WTSUnRegisterSessionNotification" );
|
||||||
|
if ( !fnWtsRegisterSessionNotification
|
||||||
|
|| !fnWtsUnRegisterSessionNotification
|
||||||
|
|| !fnWtsRegisterSessionNotification( hWnd, NOTIFY_FOR_THIS_SESSION )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
fnWtsRegisterSessionNotification = NULL;
|
||||||
|
fnWtsUnRegisterSessionNotification = NULL;
|
||||||
|
FreeLibrary(hWtsLib);
|
||||||
|
hWtsLib = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void UnregisterWtsNotification(HWND hWnd)
|
||||||
|
{
|
||||||
|
if (hWtsLib && fnWtsUnRegisterSessionNotification)
|
||||||
|
{
|
||||||
|
fnWtsUnRegisterSessionNotification(hWnd);
|
||||||
|
FreeLibrary(hWtsLib);
|
||||||
|
hWtsLib = NULL;
|
||||||
|
fnWtsRegisterSessionNotification = NULL;
|
||||||
|
fnWtsUnRegisterSessionNotification = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void localcleanup (void)
|
static void localcleanup (void)
|
||||||
{
|
{
|
||||||
@@ -215,6 +266,7 @@ void EndMainDlg (HWND hwndDlg)
|
|||||||
{
|
{
|
||||||
KillTimer (hwndDlg, TIMER_ID_MAIN);
|
KillTimer (hwndDlg, TIMER_ID_MAIN);
|
||||||
TaskBarIconRemove (hwndDlg);
|
TaskBarIconRemove (hwndDlg);
|
||||||
|
UnregisterWtsNotification(hwndDlg);
|
||||||
EndDialog (hwndDlg, 0);
|
EndDialog (hwndDlg, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -427,6 +479,7 @@ void LoadSettings (HWND hwndDlg)
|
|||||||
bCloseBkgTaskWhenNoVolumes = ConfigReadInt ("CloseBackgroundTaskOnNoVolumes", FALSE);
|
bCloseBkgTaskWhenNoVolumes = ConfigReadInt ("CloseBackgroundTaskOnNoVolumes", FALSE);
|
||||||
|
|
||||||
bDismountOnLogOff = ConfigReadInt ("DismountOnLogOff", !(IsServerOS() && IsAdmin()));
|
bDismountOnLogOff = ConfigReadInt ("DismountOnLogOff", !(IsServerOS() && IsAdmin()));
|
||||||
|
bDismountOnSessionLocked = ConfigReadInt ("DismountOnSessionLocked", FALSE);
|
||||||
bDismountOnPowerSaving = ConfigReadInt ("DismountOnPowerSaving", FALSE);
|
bDismountOnPowerSaving = ConfigReadInt ("DismountOnPowerSaving", FALSE);
|
||||||
bDismountOnScreenSaver = ConfigReadInt ("DismountOnScreenSaver", FALSE);
|
bDismountOnScreenSaver = ConfigReadInt ("DismountOnScreenSaver", FALSE);
|
||||||
bForceAutoDismount = ConfigReadInt ("ForceAutoDismount", TRUE);
|
bForceAutoDismount = ConfigReadInt ("ForceAutoDismount", TRUE);
|
||||||
@@ -521,6 +574,7 @@ void SaveSettings (HWND hwndDlg)
|
|||||||
ConfigWriteInt ("CloseBackgroundTaskOnNoVolumes", bCloseBkgTaskWhenNoVolumes);
|
ConfigWriteInt ("CloseBackgroundTaskOnNoVolumes", bCloseBkgTaskWhenNoVolumes);
|
||||||
|
|
||||||
ConfigWriteInt ("DismountOnLogOff", bDismountOnLogOff);
|
ConfigWriteInt ("DismountOnLogOff", bDismountOnLogOff);
|
||||||
|
ConfigWriteInt ("DismountOnSessionLocked", bDismountOnSessionLocked);
|
||||||
ConfigWriteInt ("DismountOnPowerSaving", bDismountOnPowerSaving);
|
ConfigWriteInt ("DismountOnPowerSaving", bDismountOnPowerSaving);
|
||||||
ConfigWriteInt ("DismountOnScreenSaver", bDismountOnScreenSaver);
|
ConfigWriteInt ("DismountOnScreenSaver", bDismountOnScreenSaver);
|
||||||
ConfigWriteInt ("ForceAutoDismount", bForceAutoDismount);
|
ConfigWriteInt ("ForceAutoDismount", bForceAutoDismount);
|
||||||
@@ -2187,6 +2241,7 @@ static void PreferencesDlgEnableButtons (HWND hwndDlg)
|
|||||||
BOOL back = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_BKG_TASK_ENABLE));
|
BOOL back = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_BKG_TASK_ENABLE));
|
||||||
BOOL idle = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_INACTIVE));
|
BOOL idle = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_INACTIVE));
|
||||||
BOOL installed = !IsNonInstallMode();
|
BOOL installed = !IsNonInstallMode();
|
||||||
|
BOOL wtsEnabled = (hWtsLib != NULL) ? TRUE : FALSE;
|
||||||
|
|
||||||
EnableWindow (GetDlgItem (hwndDlg, IDC_CLOSE_BKG_TASK_WHEN_NOVOL), back && installed);
|
EnableWindow (GetDlgItem (hwndDlg, IDC_CLOSE_BKG_TASK_WHEN_NOVOL), back && installed);
|
||||||
EnableWindow (GetDlgItem (hwndDlg, IDT_LOGON), installed);
|
EnableWindow (GetDlgItem (hwndDlg, IDT_LOGON), installed);
|
||||||
@@ -2196,6 +2251,7 @@ static void PreferencesDlgEnableButtons (HWND hwndDlg)
|
|||||||
EnableWindow (GetDlgItem (hwndDlg, IDT_AUTO_DISMOUNT_ON), back);
|
EnableWindow (GetDlgItem (hwndDlg, IDT_AUTO_DISMOUNT_ON), back);
|
||||||
EnableWindow (GetDlgItem (hwndDlg, IDT_MINUTES), back);
|
EnableWindow (GetDlgItem (hwndDlg, IDT_MINUTES), back);
|
||||||
EnableWindow (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_LOGOFF), back);
|
EnableWindow (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_LOGOFF), back);
|
||||||
|
EnableWindow (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_SESSION_LOCKED), back && wtsEnabled);
|
||||||
EnableWindow (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_POWERSAVING), back);
|
EnableWindow (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_POWERSAVING), back);
|
||||||
EnableWindow (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_SCREENSAVER), back);
|
EnableWindow (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_SCREENSAVER), back);
|
||||||
EnableWindow (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_INACTIVE), back);
|
EnableWindow (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_INACTIVE), back);
|
||||||
@@ -2266,6 +2322,9 @@ BOOL CALLBACK PreferencesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
|
|||||||
SendMessage (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_LOGOFF), BM_SETCHECK,
|
SendMessage (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_LOGOFF), BM_SETCHECK,
|
||||||
bDismountOnLogOff ? BST_CHECKED:BST_UNCHECKED, 0);
|
bDismountOnLogOff ? BST_CHECKED:BST_UNCHECKED, 0);
|
||||||
|
|
||||||
|
SendMessage (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_SESSION_LOCKED), BM_SETCHECK,
|
||||||
|
bDismountOnSessionLocked ? BST_CHECKED:BST_UNCHECKED, 0);
|
||||||
|
|
||||||
SendMessage (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_POWERSAVING), BM_SETCHECK,
|
SendMessage (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_POWERSAVING), BM_SETCHECK,
|
||||||
bDismountOnPowerSaving ? BST_CHECKED:BST_UNCHECKED, 0);
|
bDismountOnPowerSaving ? BST_CHECKED:BST_UNCHECKED, 0);
|
||||||
|
|
||||||
@@ -2295,25 +2354,28 @@ BOOL CALLBACK PreferencesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
|
|||||||
// Forced dismount disabled warning
|
// Forced dismount disabled warning
|
||||||
if (lw == IDC_PREF_DISMOUNT_INACTIVE
|
if (lw == IDC_PREF_DISMOUNT_INACTIVE
|
||||||
|| lw == IDC_PREF_DISMOUNT_LOGOFF
|
|| lw == IDC_PREF_DISMOUNT_LOGOFF
|
||||||
|
|| lw == IDC_PREF_DISMOUNT_SESSION_LOCKED
|
||||||
|| lw == IDC_PREF_DISMOUNT_POWERSAVING
|
|| lw == IDC_PREF_DISMOUNT_POWERSAVING
|
||||||
|| lw == IDC_PREF_DISMOUNT_SCREENSAVER
|
|| lw == IDC_PREF_DISMOUNT_SCREENSAVER
|
||||||
|| lw == IDC_PREF_FORCE_AUTO_DISMOUNT)
|
|| lw == IDC_PREF_FORCE_AUTO_DISMOUNT)
|
||||||
{
|
{
|
||||||
BOOL i = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_INACTIVE));
|
BOOL i = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_INACTIVE));
|
||||||
BOOL l = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_LOGOFF));
|
BOOL l = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_LOGOFF));
|
||||||
|
BOOL sl = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_SESSION_LOCKED));
|
||||||
BOOL p = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_POWERSAVING));
|
BOOL p = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_POWERSAVING));
|
||||||
BOOL s = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_SCREENSAVER));
|
BOOL s = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_SCREENSAVER));
|
||||||
BOOL q = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_FORCE_AUTO_DISMOUNT));
|
BOOL q = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_FORCE_AUTO_DISMOUNT));
|
||||||
|
|
||||||
if (!q)
|
if (!q)
|
||||||
{
|
{
|
||||||
if (lw == IDC_PREF_FORCE_AUTO_DISMOUNT && (i || l || p || s))
|
if (lw == IDC_PREF_FORCE_AUTO_DISMOUNT && (i || l || sl || p || s))
|
||||||
{
|
{
|
||||||
if (AskWarnNoYes ("CONFIRM_NO_FORCED_AUTODISMOUNT") == IDNO)
|
if (AskWarnNoYes ("CONFIRM_NO_FORCED_AUTODISMOUNT") == IDNO)
|
||||||
SetCheckBox (hwndDlg, IDC_PREF_FORCE_AUTO_DISMOUNT, TRUE);
|
SetCheckBox (hwndDlg, IDC_PREF_FORCE_AUTO_DISMOUNT, TRUE);
|
||||||
}
|
}
|
||||||
else if ((lw == IDC_PREF_DISMOUNT_INACTIVE && i
|
else if ((lw == IDC_PREF_DISMOUNT_INACTIVE && i
|
||||||
|| lw == IDC_PREF_DISMOUNT_LOGOFF && l
|
|| lw == IDC_PREF_DISMOUNT_LOGOFF && l
|
||||||
|
|| lw == IDC_PREF_DISMOUNT_SESSION_LOCKED && sl
|
||||||
|| lw == IDC_PREF_DISMOUNT_POWERSAVING && p
|
|| lw == IDC_PREF_DISMOUNT_POWERSAVING && p
|
||||||
|| lw == IDC_PREF_DISMOUNT_SCREENSAVER && s))
|
|| lw == IDC_PREF_DISMOUNT_SCREENSAVER && s))
|
||||||
Warning ("WARN_PREF_AUTO_DISMOUNT");
|
Warning ("WARN_PREF_AUTO_DISMOUNT");
|
||||||
@@ -2345,6 +2407,7 @@ BOOL CALLBACK PreferencesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM
|
|||||||
bEnableBkgTask = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_BKG_TASK_ENABLE));
|
bEnableBkgTask = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_BKG_TASK_ENABLE));
|
||||||
bCloseBkgTaskWhenNoVolumes = IsNonInstallMode() ? bCloseBkgTaskWhenNoVolumes : IsButtonChecked (GetDlgItem (hwndDlg, IDC_CLOSE_BKG_TASK_WHEN_NOVOL));
|
bCloseBkgTaskWhenNoVolumes = IsNonInstallMode() ? bCloseBkgTaskWhenNoVolumes : IsButtonChecked (GetDlgItem (hwndDlg, IDC_CLOSE_BKG_TASK_WHEN_NOVOL));
|
||||||
bDismountOnLogOff = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_LOGOFF));
|
bDismountOnLogOff = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_LOGOFF));
|
||||||
|
bDismountOnSessionLocked = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_SESSION_LOCKED));
|
||||||
bDismountOnPowerSaving = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_POWERSAVING));
|
bDismountOnPowerSaving = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_POWERSAVING));
|
||||||
bDismountOnScreenSaver = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_SCREENSAVER));
|
bDismountOnScreenSaver = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_DISMOUNT_SCREENSAVER));
|
||||||
bForceAutoDismount = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_FORCE_AUTO_DISMOUNT));
|
bForceAutoDismount = IsButtonChecked (GetDlgItem (hwndDlg, IDC_PREF_FORCE_AUTO_DISMOUNT));
|
||||||
@@ -5000,6 +5063,8 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (TaskBarIconMutex != NULL)
|
||||||
|
RegisterWtsNotification(hwndDlg);
|
||||||
DoPostInstallTasks ();
|
DoPostInstallTasks ();
|
||||||
ResetCurrentDirectory ();
|
ResetCurrentDirectory ();
|
||||||
}
|
}
|
||||||
@@ -5030,6 +5095,25 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
OpenPageHelp (hwndDlg, 0);
|
OpenPageHelp (hwndDlg, 0);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
case WM_WTSSESSION_CHANGE:
|
||||||
|
if (TaskBarIconMutex != NULL)
|
||||||
|
{
|
||||||
|
if (bDismountOnSessionLocked && (WTS_SESSION_LOCK == wParam))
|
||||||
|
{
|
||||||
|
// Auto-dismount when session is locked
|
||||||
|
DWORD dwResult;
|
||||||
|
|
||||||
|
if (bWipeCacheOnAutoDismount)
|
||||||
|
{
|
||||||
|
DeviceIoControl (hDriver, TC_IOCTL_WIPE_PASSWORD_CACHE, NULL, 0, NULL, 0, &dwResult, NULL);
|
||||||
|
SecurityToken::CloseAllSessions();
|
||||||
|
}
|
||||||
|
|
||||||
|
DismountAll (hwndDlg, bForceAutoDismount, TRUE, UNMOUNT_MAX_AUTO_RETRIES, UNMOUNT_AUTO_RETRY_DELAY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
case WM_ENDSESSION:
|
case WM_ENDSESSION:
|
||||||
if (TaskBarIconMutex != NULL)
|
if (TaskBarIconMutex != NULL)
|
||||||
{
|
{
|
||||||
@@ -5045,6 +5129,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
}
|
}
|
||||||
|
|
||||||
TaskBarIconRemove (hwndDlg);
|
TaskBarIconRemove (hwndDlg);
|
||||||
|
UnregisterWtsNotification(hwndDlg);
|
||||||
}
|
}
|
||||||
EndMainDlg (hwndDlg);
|
EndMainDlg (hwndDlg);
|
||||||
localcleanup ();
|
localcleanup ();
|
||||||
@@ -5255,6 +5340,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
&& GetDriverRefCount () < 2)
|
&& GetDriverRefCount () < 2)
|
||||||
{
|
{
|
||||||
TaskBarIconRemove (hwndDlg);
|
TaskBarIconRemove (hwndDlg);
|
||||||
|
UnregisterWtsNotification(hwndDlg);
|
||||||
EndMainDlg (hwndDlg);
|
EndMainDlg (hwndDlg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5374,6 +5460,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
EnumWindows (CloseTCWindowsEnum, 0);
|
EnumWindows (CloseTCWindowsEnum, 0);
|
||||||
|
|
||||||
TaskBarIconRemove (hwndDlg);
|
TaskBarIconRemove (hwndDlg);
|
||||||
|
UnregisterWtsNotification(hwndDlg);
|
||||||
SendMessage (hwndDlg, WM_COMMAND, sel, 0);
|
SendMessage (hwndDlg, WM_COMMAND, sel, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5394,6 +5481,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
case TC_APPMSG_CLOSE_BKG_TASK:
|
case TC_APPMSG_CLOSE_BKG_TASK:
|
||||||
if (TaskBarIconMutex != NULL)
|
if (TaskBarIconMutex != NULL)
|
||||||
TaskBarIconRemove (hwndDlg);
|
TaskBarIconRemove (hwndDlg);
|
||||||
|
UnregisterWtsNotification(hwndDlg);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
@@ -6129,10 +6217,12 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
|||||||
if (bEnableBkgTask)
|
if (bEnableBkgTask)
|
||||||
{
|
{
|
||||||
TaskBarIconAdd (hwndDlg);
|
TaskBarIconAdd (hwndDlg);
|
||||||
|
RegisterWtsNotification(hwndDlg);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
TaskBarIconRemove (hwndDlg);
|
TaskBarIconRemove (hwndDlg);
|
||||||
|
UnregisterWtsNotification(hwndDlg);
|
||||||
if (MainWindowHidden)
|
if (MainWindowHidden)
|
||||||
EndMainDlg (hwndDlg);
|
EndMainDlg (hwndDlg);
|
||||||
}
|
}
|
||||||
@@ -7376,6 +7466,7 @@ static void HandleHotKey (HWND hwndDlg, WPARAM wParam)
|
|||||||
MessageBeep (0xFFFFFFFF);
|
MessageBeep (0xFFFFFFFF);
|
||||||
}
|
}
|
||||||
TaskBarIconRemove (hwndDlg);
|
TaskBarIconRemove (hwndDlg);
|
||||||
|
UnregisterWtsNotification(hwndDlg);
|
||||||
EndMainDlg (hwndDlg);
|
EndMainDlg (hwndDlg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -59,9 +59,9 @@ BEGIN
|
|||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,75,188,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,75,188,10
|
||||||
CONTROL "User logs off",IDC_PREF_DISMOUNT_LOGOFF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,81,104,114,11
|
CONTROL "User logs off",IDC_PREF_DISMOUNT_LOGOFF,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,81,104,114,11
|
||||||
CONTROL "Entering power saving mode",IDC_PREF_DISMOUNT_POWERSAVING,
|
CONTROL "Entering power saving mode",IDC_PREF_DISMOUNT_POWERSAVING,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,109,130,11
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,115,130,11
|
||||||
CONTROL "Screen saver is launched",IDC_PREF_DISMOUNT_SCREENSAVER,
|
CONTROL "Screen saver is launched",IDC_PREF_DISMOUNT_SCREENSAVER,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,81,115,114,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,81,116,114,10
|
||||||
CONTROL "Auto-dismount volume after no data has been read/written to it for",IDC_PREF_DISMOUNT_INACTIVE,
|
CONTROL "Auto-dismount volume after no data has been read/written to it for",IDC_PREF_DISMOUNT_INACTIVE,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,128,246,11
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,128,246,11
|
||||||
EDITTEXT IDC_PREF_DISMOUNT_INACTIVE_TIME,258,127,27,12,ES_AUTOHSCROLL | ES_NUMBER,WS_EX_RIGHT
|
EDITTEXT IDC_PREF_DISMOUNT_INACTIVE_TIME,258,127,27,12,ES_AUTOHSCROLL | ES_NUMBER,WS_EX_RIGHT
|
||||||
@@ -90,6 +90,8 @@ BEGIN
|
|||||||
LTEXT "Dismount all when:",IDT_AUTO_DISMOUNT_ON,9,110,71,17
|
LTEXT "Dismount all when:",IDT_AUTO_DISMOUNT_ON,9,110,71,17
|
||||||
GROUPBOX "Password Cache",IDT_PW_CACHE_OPTIONS,4,216,328,39
|
GROUPBOX "Password Cache",IDT_PW_CACHE_OPTIONS,4,216,328,39
|
||||||
GROUPBOX "Actions to perform upon logon to Windows",IDT_LOGON,4,63,328,28
|
GROUPBOX "Actions to perform upon logon to Windows",IDT_LOGON,4,63,328,28
|
||||||
|
CONTROL "User session locked",IDC_PREF_DISMOUNT_SESSION_LOCKED,
|
||||||
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,197,105,130,11
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_VOLUME_PROPERTIES DIALOGEX 60, 30, 284, 186
|
IDD_VOLUME_PROPERTIES DIALOGEX 60, 30, 284, 186
|
||||||
|
|||||||
@@ -159,6 +159,7 @@
|
|||||||
#define IDC_FAV_VOL_OPTIONS_GROUP_BOX 1134
|
#define IDC_FAV_VOL_OPTIONS_GROUP_BOX 1134
|
||||||
#define IDC_FAVORITES_HELP_LINK 1135
|
#define IDC_FAVORITES_HELP_LINK 1135
|
||||||
#define IDC_FAV_VOL_OPTIONS_GLOBAL_SETTINGS_BOX 1136
|
#define IDC_FAV_VOL_OPTIONS_GLOBAL_SETTINGS_BOX 1136
|
||||||
|
#define IDC_PREF_DISMOUNT_SESSION_LOCKED 1137
|
||||||
#define IDM_HELP 40001
|
#define IDM_HELP 40001
|
||||||
#define IDM_ABOUT 40002
|
#define IDM_ABOUT 40002
|
||||||
#define IDM_UNMOUNT_VOLUME 40003
|
#define IDM_UNMOUNT_VOLUME 40003
|
||||||
@@ -230,7 +231,7 @@
|
|||||||
#define _APS_NO_MFC 1
|
#define _APS_NO_MFC 1
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 118
|
#define _APS_NEXT_RESOURCE_VALUE 118
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40064
|
#define _APS_NEXT_COMMAND_VALUE 40064
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1137
|
#define _APS_NEXT_CONTROL_VALUE 1138
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user