diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2015-07-13 21:13:28 +0200 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2015-07-13 23:35:23 +0200 |
commit | 7d6cd0c92d30ebb2dd0ec24744d18524538457b9 (patch) | |
tree | b57976794415f2bf9f5e0cad3b81cdf6bec10b61 /src/Common | |
parent | 103018b367108b2ffce9a4b7f91f3c07cd41c492 (diff) | |
download | VeraCrypt-7d6cd0c92d30ebb2dd0ec24744d18524538457b9.tar.gz VeraCrypt-7d6cd0c92d30ebb2dd0ec24744d18524538457b9.zip |
Windows: on 64-bit Windows, more System favorite service from SysWoW64 to System32 since now all binaries are native 64-bit on 64-bit machines.
Diffstat (limited to 'src/Common')
-rw-r--r-- | src/Common/BootEncryption.cpp | 73 | ||||
-rw-r--r-- | src/Common/BootEncryption.h | 1 | ||||
-rw-r--r-- | src/Common/Dlgcode.c | 4 | ||||
-rw-r--r-- | src/Common/Dlgcode.h | 2 |
4 files changed, 49 insertions, 31 deletions
diff --git a/src/Common/BootEncryption.cpp b/src/Common/BootEncryption.cpp index 2964e04d..a83db22d 100644 --- a/src/Common/BootEncryption.cpp +++ b/src/Common/BootEncryption.cpp @@ -1960,33 +1960,29 @@ namespace VeraCrypt }
}
-#ifndef SETUP
-
- void BootEncryption::RegisterSystemFavoritesService (BOOL registerService)
+ void BootEncryption::RegisterSystemFavoritesService (BOOL registerService, BOOL noFileHandling)
{
- if (!IsAdmin() && IsUacSupported())
- {
- Elevator::RegisterSystemFavoritesService (registerService);
- return;
- }
-
SC_HANDLE scm = OpenSCManager (NULL, NULL, SC_MANAGER_ALL_ACCESS);
throw_sys_if (!scm);
- string servicePath = GetServiceConfigPath (TC_APP_NAME ".exe");
+ string servicePath = GetServiceConfigPath (TC_APP_NAME ".exe", false);
+ string serviceLegacyPath = GetServiceConfigPath (TC_APP_NAME ".exe", true);
if (registerService)
{
try
{
- RegisterSystemFavoritesService (FALSE);
+ RegisterSystemFavoritesService (FALSE, noFileHandling);
}
catch (...) { }
- char appPath[TC_MAX_PATH];
- throw_sys_if (!GetModuleFileName (NULL, appPath, sizeof (appPath)));
+ if (!noFileHandling)
+ {
+ char appPath[TC_MAX_PATH];
+ throw_sys_if (!GetModuleFileName (NULL, appPath, sizeof (appPath)));
- throw_sys_if (!CopyFile (appPath, servicePath.c_str(), FALSE));
+ throw_sys_if (!CopyFile (appPath, servicePath.c_str(), FALSE));
+ }
SC_HANDLE service = CreateService (scm,
TC_SYSTEM_FAVORITES_SERVICE_NAME,
@@ -2021,7 +2017,7 @@ namespace VeraCrypt {
try
{
- RegisterSystemFavoritesService (false);
+ RegisterSystemFavoritesService (FALSE, noFileHandling);
}
catch (...) { }
@@ -2041,10 +2037,43 @@ namespace VeraCrypt throw_sys_if (!DeleteService (service));
CloseServiceHandle (service);
- DeleteFile (servicePath.c_str());
+ if (!noFileHandling)
+ {
+ DeleteFile (servicePath.c_str());
+ if (serviceLegacyPath != servicePath)
+ DeleteFile (serviceLegacyPath.c_str());
+ }
}
}
+ void BootEncryption::SetDriverConfigurationFlag (uint32 flag, bool state)
+ {
+ DWORD configMap = ReadDriverConfigurationFlags();
+
+ if (state)
+ configMap |= flag;
+ else
+ configMap &= ~flag;
+#ifdef SETUP
+ WriteLocalMachineRegistryDword ("SYSTEM\\CurrentControlSet\\Services\\veracrypt", TC_DRIVER_CONFIG_REG_VALUE_NAME, configMap);
+#else
+ WriteLocalMachineRegistryDwordValue ("SYSTEM\\CurrentControlSet\\Services\\veracrypt", TC_DRIVER_CONFIG_REG_VALUE_NAME, configMap);
+#endif
+ }
+
+#ifndef SETUP
+
+ void BootEncryption::RegisterSystemFavoritesService (BOOL registerService)
+ {
+ if (!IsAdmin() && IsUacSupported())
+ {
+ Elevator::RegisterSystemFavoritesService (registerService);
+ return;
+ }
+
+ RegisterSystemFavoritesService (registerService, FALSE);
+ }
+
void BootEncryption::CheckRequirements ()
{
if (nCurrentOS == WIN_2000)
@@ -2531,18 +2560,6 @@ namespace VeraCrypt throw_sys_if (!WriteLocalMachineRegistryDword (keyPath, valueName, value));
}
- void BootEncryption::SetDriverConfigurationFlag (uint32 flag, bool state)
- {
- DWORD configMap = ReadDriverConfigurationFlags();
-
- if (state)
- configMap |= flag;
- else
- configMap &= ~flag;
-
- WriteLocalMachineRegistryDwordValue ("SYSTEM\\CurrentControlSet\\Services\\veracrypt", TC_DRIVER_CONFIG_REG_VALUE_NAME, configMap);
- }
-
void BootEncryption::StartDecryption (BOOL discardUnreadableEncryptedSectors)
{
BootEncryptionStatus encStatus = GetStatus();
diff --git a/src/Common/BootEncryption.h b/src/Common/BootEncryption.h index 745c343b..6ac42cd3 100644 --- a/src/Common/BootEncryption.h +++ b/src/Common/BootEncryption.h @@ -177,6 +177,7 @@ namespace VeraCrypt void RegisterBootDriver (bool hiddenSystem);
void RegisterFilterDriver (bool registerDriver, FilterType filterType);
void RegisterSystemFavoritesService (BOOL registerService);
+ void RegisterSystemFavoritesService (BOOL registerService, BOOL noFileHandling);
void RenameDeprecatedSystemLoaderBackup ();
bool RestartComputer (void);
void InitialSecurityChecksForHiddenOS ();
diff --git a/src/Common/Dlgcode.c b/src/Common/Dlgcode.c index 2742317f..9625973b 100644 --- a/src/Common/Dlgcode.c +++ b/src/Common/Dlgcode.c @@ -8264,11 +8264,11 @@ char *GetProgramConfigPath (char *fileName) }
-std::string GetServiceConfigPath (const char *fileName)
+std::string GetServiceConfigPath (const char *fileName, bool useLegacy)
{
char sysPath[TC_MAX_PATH];
- if (Is64BitOs())
+ if (Is64BitOs() && useLegacy)
{
typedef UINT (WINAPI *GetSystemWow64Directory_t) (LPTSTR lpBuffer, UINT uSize);
diff --git a/src/Common/Dlgcode.h b/src/Common/Dlgcode.h index 18e581f5..5954ccf9 100644 --- a/src/Common/Dlgcode.h +++ b/src/Common/Dlgcode.h @@ -546,7 +546,7 @@ std::string ToUpperCase (const std::string &str); std::wstring GetWrongPasswordErrorMessage (HWND hwndDlg);
std::string GetWindowsEdition ();
std::string FitPathInGfxWidth (HWND hwnd, HFONT hFont, LONG width, const std::string &path);
-std::string GetServiceConfigPath (const char *fileName);
+std::string GetServiceConfigPath (const char *fileName, bool useLegacy);
std::string VolumeGuidPathToDevicePath (std::string volumeGuidPath);
std::string HarddiskVolumePathToPartitionPath (const std::string &harddiskVolumePath);
std::string FindLatestFileOrDirectory (const std::string &directory, const char *namePattern, bool findDirectory, bool findFile);
|