From 909255d55f7c7e4884a33c932fb4665b5cf944e9 Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Sun, 29 Sep 2019 14:44:22 +0200 Subject: Windows: Use periodic update of connected devices only if there is a Favorite that uses VolumeID. Add command option to disable the period update of devices. --- src/Mount/Favorites.cpp | 125 ++++++++++++++++++++++++++++++------------------ 1 file changed, 79 insertions(+), 46 deletions(-) (limited to 'src/Mount/Favorites.cpp') diff --git a/src/Mount/Favorites.cpp b/src/Mount/Favorites.cpp index 284c0b5c..eafc4734 100644 --- a/src/Mount/Favorites.cpp +++ b/src/Mount/Favorites.cpp @@ -243,76 +243,84 @@ namespace VeraCrypt switch (lw) { case IDOK: - - /* Global System Favorites settings */ - - if (SystemFavoritesMode) { - BootEncryption BootEncObj (NULL); + BOOL bInitialOptionValue = NeedPeriodicDeviceListUpdate; - if (BootEncObj.GetStatus().DriveMounted) + /* Global System Favorites settings */ + + if (SystemFavoritesMode) { - try - { - uint32 reqConfig = IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_OPEN_EXPLORER_WIN_ON_MOUNT) ? TC_DRIVER_CONFIG_CACHE_BOOT_PASSWORD_FOR_SYS_FAVORITES : 0; - if (reqConfig != (ReadDriverConfigurationFlags() & TC_DRIVER_CONFIG_CACHE_BOOT_PASSWORD_FOR_SYS_FAVORITES)) - BootEncObj.SetDriverConfigurationFlag (TC_DRIVER_CONFIG_CACHE_BOOT_PASSWORD_FOR_SYS_FAVORITES, reqConfig ? true : false); + BootEncryption BootEncObj (NULL); - SetDriverConfigurationFlag (TC_DRIVER_CONFIG_DISABLE_NONADMIN_SYS_FAVORITES_ACCESS, IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_DISABLE_HOTKEY)); - } - catch (Exception &e) + if (BootEncObj.GetStatus().DriveMounted) { - e.Show (hwndDlg); + try + { + uint32 reqConfig = IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_OPEN_EXPLORER_WIN_ON_MOUNT) ? TC_DRIVER_CONFIG_CACHE_BOOT_PASSWORD_FOR_SYS_FAVORITES : 0; + if (reqConfig != (ReadDriverConfigurationFlags() & TC_DRIVER_CONFIG_CACHE_BOOT_PASSWORD_FOR_SYS_FAVORITES)) + BootEncObj.SetDriverConfigurationFlag (TC_DRIVER_CONFIG_CACHE_BOOT_PASSWORD_FOR_SYS_FAVORITES, reqConfig ? true : false); + + SetDriverConfigurationFlag (TC_DRIVER_CONFIG_DISABLE_NONADMIN_SYS_FAVORITES_ACCESS, IsDlgButtonChecked (hwndDlg, IDC_FAVORITE_DISABLE_HOTKEY)); + } + catch (Exception &e) + { + e.Show (hwndDlg); + } } } - } - /* (System) Favorites list */ + /* (System) Favorites list */ - if (SelectedItem != -1 && !Favorites.empty()) - SetFavoriteVolume (hwndDlg, Favorites[SelectedItem], SystemFavoritesMode); + if (SelectedItem != -1 && !Favorites.empty()) + SetFavoriteVolume (hwndDlg, Favorites[SelectedItem], SystemFavoritesMode); - if (SaveFavoriteVolumes (hwndDlg, Favorites, SystemFavoritesMode)) - { - if (!SystemFavoritesMode) + if (SaveFavoriteVolumes (hwndDlg, Favorites, SystemFavoritesMode)) { - bMountFavoritesOnLogon = FALSE; - - foreach (const FavoriteVolume &favorite, Favorites) + if (!SystemFavoritesMode) { - if (favorite.MountOnLogOn) + bMountFavoritesOnLogon = FALSE; + + foreach (const FavoriteVolume &favorite, Favorites) { - bMountFavoritesOnLogon = TRUE; - break; + if (favorite.MountOnLogOn) + { + bMountFavoritesOnLogon = TRUE; + break; + } } - } - if (!bEnableBkgTask || bCloseBkgTaskWhenNoVolumes || IsNonInstallMode()) - { - foreach (const FavoriteVolume favorite, Favorites) + if (!bEnableBkgTask || bCloseBkgTaskWhenNoVolumes || IsNonInstallMode()) { - if (favorite.MountOnArrival) + foreach (const FavoriteVolume favorite, Favorites) { - Warning ("FAVORITE_ARRIVAL_MOUNT_BACKGROUND_TASK_ERR", hwndDlg); - break; + if (favorite.MountOnArrival) + { + Warning ("FAVORITE_ARRIVAL_MOUNT_BACKGROUND_TASK_ERR", hwndDlg); + break; + } } } - } - FavoriteVolumes = Favorites; + if (!bInitialOptionValue && NeedPeriodicDeviceListUpdate) + { + // a favorite was set to use VolumeID. We update the list of devices available for mounting as early as possible + UpdateMountableHostDeviceList (); + } - ManageStartupSeq(); - SaveSettings (hwndDlg); - } - else - SystemFavoriteVolumes = Favorites; + FavoriteVolumes = Favorites; - OnFavoriteVolumesUpdated(); - LoadDriveLetters (hwndDlg, GetDlgItem (MainDlg, IDC_DRIVELIST), 0); + ManageStartupSeq(); + SaveSettings (hwndDlg); + } + else + SystemFavoriteVolumes = Favorites; - EndDialog (hwndDlg, IDOK); - } + OnFavoriteVolumesUpdated(); + LoadDriveLetters (hwndDlg, GetDlgItem (MainDlg, IDC_DRIVELIST), 0); + EndDialog (hwndDlg, IDOK); + } + } return 1; case IDCANCEL: @@ -554,6 +562,7 @@ namespace VeraCrypt void LoadFavoriteVolumes (vector &favorites, bool systemFavorites, bool noUacElevation) { + bool bVolumeIdInUse = false; favorites.clear(); wstring favoritesFilePath = systemFavorites ? GetServiceConfigPath (TC_APPD_FILENAME_SYSTEM_FAVORITE_VOLUMES, false) : GetConfigPath (TC_APPD_FILENAME_FAVORITE_VOLUMES); @@ -701,10 +710,21 @@ namespace VeraCrypt favorite.Pkcs5 = -1; } + if (!systemFavorites && favorite.UseVolumeID) + bVolumeIdInUse = true; + favorites.push_back (favorite); xml++; } + if (!systemFavorites) + { + if (bVolumeIdInUse && !DisablePeriodicDeviceListUpdate) + NeedPeriodicDeviceListUpdate = TRUE; + else + NeedPeriodicDeviceListUpdate = FALSE; + } + free (favoritesXml); } @@ -763,6 +783,7 @@ namespace VeraCrypt { FILE *f; int cnt = 0; + bool bVolumeIdInUse = false; f = _wfopen (GetConfigPath (systemFavorites ? TC_APPD_FILENAME_SYSTEM_FAVORITE_VOLUMES : TC_APPD_FILENAME_FAVORITE_VOLUMES), L"w,ccs=UTF-8"); if (f == NULL) @@ -827,7 +848,11 @@ namespace VeraCrypt s += L" useLabelInExplorer=\"1\""; if (favorite.UseVolumeID && !IsRepeatedByteArray (0, favorite.VolumeID, sizeof (favorite.VolumeID))) + { s += L" useVolumeID=\"1\""; + if (!systemFavorites) + bVolumeIdInUse = true; + } s += L">" + wstring (tq) + L""; @@ -838,6 +863,14 @@ namespace VeraCrypt fputws (L"\n\t", f); XmlWriteFooter (f); + if (!systemFavorites) + { + if (bVolumeIdInUse && !DisablePeriodicDeviceListUpdate) + NeedPeriodicDeviceListUpdate = TRUE; + else + NeedPeriodicDeviceListUpdate = FALSE; + } + if (!CheckFileStreamWriteErrors (hwndDlg, f, systemFavorites ? TC_APPD_FILENAME_SYSTEM_FAVORITE_VOLUMES : TC_APPD_FILENAME_FAVORITE_VOLUMES)) { fclose (f); -- cgit v1.2.3