1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2025-11-11 11:08:02 -06:00

Windows Installer: better handling for updating system favorite service from 1.0f-2 (solve Windows 10 issue) . Remove extra VeraCrypt files that may remain after uninstalling it.

This commit is contained in:
Mounir IDRASSI
2015-09-06 11:39:47 +02:00
parent adc3274395
commit 42a7a17cb9
3 changed files with 126 additions and 24 deletions

View File

@@ -2017,6 +2017,7 @@ namespace VeraCrypt
{ {
SC_HANDLE scm = OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS); SC_HANDLE scm = OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS);
throw_sys_if (!scm); throw_sys_if (!scm);
finally_do_arg (SC_HANDLE, scm, { CloseServiceHandle (finally_arg); });
string servicePath = GetServiceConfigPath (TC_APP_NAME ".exe", false); string servicePath = GetServiceConfigPath (TC_APP_NAME ".exe", false);
string serviceLegacyPath = GetServiceConfigPath (TC_APP_NAME ".exe", true); string serviceLegacyPath = GetServiceConfigPath (TC_APP_NAME ".exe", true);
@@ -2099,6 +2100,39 @@ namespace VeraCrypt
} }
} }
void BootEncryption::UpdateSystemFavoritesService ()
{
SC_HANDLE scm = OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS);
throw_sys_if (!scm);
finally_do_arg (SC_HANDLE, scm, { CloseServiceHandle (finally_arg); });
string servicePath = GetServiceConfigPath (TC_APP_NAME ".exe", false);
// check if service exists
SC_HANDLE service = OpenService (scm, TC_SYSTEM_FAVORITES_SERVICE_NAME, SERVICE_ALL_ACCESS);
if (service)
{
// ensure that its parameters are correct
throw_sys_if (!ChangeServiceConfig (service,
SERVICE_WIN32_OWN_PROCESS,
SERVICE_AUTO_START,
SERVICE_ERROR_NORMAL,
(string ("\"") + servicePath + "\" " TC_SYSTEM_FAVORITES_SERVICE_CMDLINE_OPTION).c_str(),
TC_SYSTEM_FAVORITES_SERVICE_LOAD_ORDER_GROUP,
NULL,
NULL,
NULL,
NULL,
TC_APP_NAME " System Favorites"));
}
else
{
RegisterSystemFavoritesService (TRUE, TRUE);
}
}
void BootEncryption::SetDriverConfigurationFlag (uint32 flag, bool state) void BootEncryption::SetDriverConfigurationFlag (uint32 flag, bool state)
{ {
DWORD configMap = ReadDriverConfigurationFlags(); DWORD configMap = ReadDriverConfigurationFlags();

View File

@@ -186,6 +186,7 @@ namespace VeraCrypt
void RegisterFilterDriver (bool registerDriver, FilterType filterType); void RegisterFilterDriver (bool registerDriver, FilterType filterType);
void RegisterSystemFavoritesService (BOOL registerService); void RegisterSystemFavoritesService (BOOL registerService);
void RegisterSystemFavoritesService (BOOL registerService, BOOL noFileHandling); void RegisterSystemFavoritesService (BOOL registerService, BOOL noFileHandling);
void UpdateSystemFavoritesService ();
void RenameDeprecatedSystemLoaderBackup (); void RenameDeprecatedSystemLoaderBackup ();
bool RestartComputer (void); bool RestartComputer (void);
void InitialSecurityChecksForHiddenOS (); void InitialSecurityChecksForHiddenOS ();

View File

@@ -776,52 +776,103 @@ BOOL DoFilesInstall (HWND hwndDlg, char *szDestDir)
string servicePath = GetServiceConfigPath (TC_APP_NAME ".exe", false); string servicePath = GetServiceConfigPath (TC_APP_NAME ".exe", false);
string serviceLegacyPath = GetServiceConfigPath (TC_APP_NAME ".exe", true); string serviceLegacyPath = GetServiceConfigPath (TC_APP_NAME ".exe", true);
string favoritesFile = GetServiceConfigPath (TC_APPD_FILENAME_SYSTEM_FAVORITE_VOLUMES, false);
string favoritesLegacyFile = GetServiceConfigPath (TC_APPD_FILENAME_SYSTEM_FAVORITE_VOLUMES, true);
if (FileExists (servicePath.c_str())) if ( FileExists (servicePath.c_str())
|| (Is64BitOs () && FileExists (serviceLegacyPath.c_str()))
)
{ {
CopyMessage (hwndDlg, (char *) servicePath.c_str()); CopyMessage (hwndDlg, (char *) servicePath.c_str());
bResult = CopyFile (szTmp, servicePath.c_str(), FALSE); bResult = CopyFile (szTmp, servicePath.c_str(), FALSE);
} }
else if (Is64BitOs () && FileExists (serviceLegacyPath.c_str()))
if (bResult && Is64BitOs ()
&& FileExists (favoritesLegacyFile.c_str())
&& !FileExists (favoritesFile.c_str()))
{ {
string favoritesFile = GetServiceConfigPath (TC_APPD_FILENAME_SYSTEM_FAVORITE_VOLUMES, false); // copy the favorites XML file to the native system directory
string favoritesLegacyFile = GetServiceConfigPath (TC_APPD_FILENAME_SYSTEM_FAVORITE_VOLUMES, true); bResult = CopyFile (favoritesLegacyFile.c_str(), favoritesFile.c_str(), FALSE);
}
// delete files from legacy path if (bResult && Is64BitOs () && FileExists (favoritesFile.c_str()) && FileExists (servicePath.c_str()))
RemoveMessage (hwndDlg, (char *) serviceLegacyPath.c_str()); {
DeleteFile (serviceLegacyPath.c_str()); // Update the path of the service
BootEncryption BootEncObj (hwndDlg);
CopyMessage (hwndDlg, (char *) servicePath.c_str()); try
bResult = CopyFile (szTmp, servicePath.c_str(), FALSE);
if (bResult && FileExists (favoritesLegacyFile.c_str()))
{ {
// copy the favorites XML file to the native system directory if (BootEncObj.GetStatus().DriveMounted)
bResult = CopyFile (favoritesLegacyFile.c_str(), favoritesFile.c_str(), FALSE);
if (bResult)
DeleteFile (favoritesLegacyFile.c_str());
BootEncryption BootEncObj (hwndDlg);
try
{ {
if (BootEncObj.GetStatus().DriveMounted) BootEncObj.UpdateSystemFavoritesService ();
{
BootEncObj.RegisterSystemFavoritesService (TRUE, TRUE);
}
} }
catch (...) {}
} }
catch (...) {}
} }
if (Is64BitOs ()) if (Is64BitOs ())
{
// delete files from legacy path
if (FileExists (favoritesLegacyFile.c_str()))
{
RemoveMessage (hwndDlg, (char *) favoritesLegacyFile.c_str());
DeleteFile (favoritesLegacyFile.c_str());
}
if (FileExists (serviceLegacyPath.c_str()))
{
RemoveMessage (hwndDlg, (char *) serviceLegacyPath.c_str());
DeleteFile (serviceLegacyPath.c_str());
}
EnableWow64FsRedirection (TRUE); EnableWow64FsRedirection (TRUE);
}
} }
} }
} }
else else
{ {
bResult = StatDeleteFile (szTmp, TRUE); bResult = StatDeleteFile (szTmp, TRUE);
if (bResult && strcmp (szFiles[i], "AVeraCrypt.exe") == 0)
{
if (Is64BitOs ())
EnableWow64FsRedirection (FALSE);
string servicePath = GetServiceConfigPath (TC_APP_NAME ".exe", false);
string serviceLegacyPath = GetServiceConfigPath (TC_APP_NAME ".exe", true);
string favoritesFile = GetServiceConfigPath (TC_APPD_FILENAME_SYSTEM_FAVORITE_VOLUMES, false);
string favoritesLegacyFile = GetServiceConfigPath (TC_APPD_FILENAME_SYSTEM_FAVORITE_VOLUMES, true);
// delete all files related to system favorites service
if (FileExists (favoritesFile.c_str()))
{
RemoveMessage (hwndDlg, (char *) favoritesFile.c_str());
DeleteFile (favoritesFile.c_str());
}
if (FileExists (servicePath.c_str()))
{
RemoveMessage (hwndDlg, (char *) servicePath.c_str());
DeleteFile (servicePath.c_str());
}
if (Is64BitOs ())
{
if (FileExists (favoritesLegacyFile.c_str()))
{
RemoveMessage (hwndDlg, (char *) favoritesLegacyFile.c_str());
DeleteFile (favoritesLegacyFile.c_str());
}
if (FileExists (serviceLegacyPath.c_str()))
{
RemoveMessage (hwndDlg, (char *) serviceLegacyPath.c_str());
DeleteFile (serviceLegacyPath.c_str());
}
EnableWow64FsRedirection (TRUE);
}
}
} }
err: err:
@@ -1105,6 +1156,22 @@ BOOL DoApplicationDataUninstall (HWND hwndDlg)
bOK = FALSE; bOK = FALSE;
} }
// remove VeraCrypt under common appdata
if (SUCCEEDED (SHGetFolderPath (NULL, CSIDL_COMMON_APPDATA | CSIDL_FLAG_CREATE, NULL, 0, path)))
{
StringCbCatA (path, sizeof(path), "\\VeraCrypt");
// Delete original bootloader
StringCbPrintfA (path2, sizeof(path2), "%s\\%s", path, TC_SYS_BOOT_LOADER_BACKUP_NAME);
RemoveMessage (hwndDlg, path2);
StatDeleteFile (path2, FALSE);
// remove VeraCrypt folder
RemoveMessage (hwndDlg, path);
StatRemoveDirectory (path);
}
return bOK; return bOK;
} }