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:
@@ -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();
|
||||||
|
|||||||
@@ -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 ();
|
||||||
|
|||||||
@@ -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()))
|
|
||||||
{
|
|
||||||
string favoritesFile = GetServiceConfigPath (TC_APPD_FILENAME_SYSTEM_FAVORITE_VOLUMES, false);
|
|
||||||
string favoritesLegacyFile = GetServiceConfigPath (TC_APPD_FILENAME_SYSTEM_FAVORITE_VOLUMES, true);
|
|
||||||
|
|
||||||
// delete files from legacy path
|
if (bResult && Is64BitOs ()
|
||||||
RemoveMessage (hwndDlg, (char *) serviceLegacyPath.c_str());
|
&& FileExists (favoritesLegacyFile.c_str())
|
||||||
DeleteFile (serviceLegacyPath.c_str());
|
&& !FileExists (favoritesFile.c_str()))
|
||||||
|
|
||||||
CopyMessage (hwndDlg, (char *) servicePath.c_str());
|
|
||||||
bResult = CopyFile (szTmp, servicePath.c_str(), FALSE);
|
|
||||||
|
|
||||||
if (bResult && FileExists (favoritesLegacyFile.c_str()))
|
|
||||||
{
|
{
|
||||||
// copy the favorites XML file to the native system directory
|
// copy the favorites XML file to the native system directory
|
||||||
bResult = CopyFile (favoritesLegacyFile.c_str(), favoritesFile.c_str(), FALSE);
|
bResult = CopyFile (favoritesLegacyFile.c_str(), favoritesFile.c_str(), FALSE);
|
||||||
if (bResult)
|
}
|
||||||
DeleteFile (favoritesLegacyFile.c_str());
|
|
||||||
|
|
||||||
|
if (bResult && Is64BitOs () && FileExists (favoritesFile.c_str()) && FileExists (servicePath.c_str()))
|
||||||
|
{
|
||||||
|
// Update the path of the service
|
||||||
BootEncryption BootEncObj (hwndDlg);
|
BootEncryption BootEncObj (hwndDlg);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (BootEncObj.GetStatus().DriveMounted)
|
if (BootEncObj.GetStatus().DriveMounted)
|
||||||
{
|
{
|
||||||
BootEncObj.RegisterSystemFavoritesService (TRUE, TRUE);
|
BootEncObj.UpdateSystemFavoritesService ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user