VeraCrypt
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMounir IDRASSI <mounir.idrassi@idrix.fr>2018-04-22 16:14:53 +0200
committerMounir IDRASSI <mounir.idrassi@idrix.fr>2018-04-23 16:59:36 +0200
commit3659ddd70ce8f1616a44e5bcce793eda076b835d (patch)
treef34e796866cf21e0a2f4140ccf697095949d5df0
parentf4edd72662106798dc216c5cabbf39605391523e (diff)
downloadVeraCrypt-3659ddd70ce8f1616a44e5bcce793eda076b835d.tar.gz
VeraCrypt-3659ddd70ce8f1616a44e5bcce793eda076b835d.zip
Windows: enhance ReflectDrivers mechanism by persisting it across major Windows upgrades.
-rw-r--r--src/Common/BootEncryption.cpp35
-rw-r--r--src/Common/BootEncryption.h4
-rw-r--r--src/Mount/Mount.c7
3 files changed, 42 insertions, 4 deletions
diff --git a/src/Common/BootEncryption.cpp b/src/Common/BootEncryption.cpp
index c62df958..9c69ef04 100644
--- a/src/Common/BootEncryption.cpp
+++ b/src/Common/BootEncryption.cpp
@@ -2722,8 +2722,37 @@ namespace VeraCrypt
StringCchCatW (szSetupconfigLocation, ARRAYSIZE (szSetupconfigLocation), L"SetupConfig.ini");
- if (bForInstall || FileExists (szSetupconfigLocation))
- WritePrivateProfileStringW (L"SetupConfig", L"ReflectDrivers", bForInstall? szInstallPath : NULL, szSetupconfigLocation);
+ if (bForInstall)
+ {
+ wstring szPathParam = L"\"";
+ szPathParam += szInstallPath;
+ szPathParam += L"\"";
+ WritePrivateProfileStringW (L"SetupConfig", L"ReflectDrivers", szPathParam.c_str(), szSetupconfigLocation);
+
+ szPathParam = GetProgramConfigPath (L"SetupComplete.cmd");
+ FILE* scriptFile = _wfopen (szPathParam.c_str(), L"w");
+ if (scriptFile)
+ {
+ fwprintf (scriptFile, L"\"%s\\VeraCrypt.exe\" /PostOOBE\n", szInstallPath);
+ fclose (scriptFile);
+
+ WritePrivateProfileStringW (L"SetupConfig", L"PostOOBE", szPathParam.c_str(), szSetupconfigLocation);
+ }
+ }
+ else
+ {
+ if (FileExists (szSetupconfigLocation))
+ {
+ WritePrivateProfileStringW (L"SetupConfig", L"ReflectDrivers", NULL, szSetupconfigLocation);
+ WritePrivateProfileStringW (L"SetupConfig", L"PostOOBE", NULL, szSetupconfigLocation);
+ }
+
+ wstring scriptFilePath = GetProgramConfigPath (L"SetupComplete.cmd");
+ if (FileExists (scriptFilePath.c_str()))
+ {
+ ::DeleteFileW (scriptFilePath.c_str());
+ }
+ }
}
}
}
@@ -3717,7 +3746,7 @@ namespace VeraCrypt
finally_do ({ EfiBootInst.DismountBootPartition(); });
- EfiBootInst.MountBootPartition(0);
+ EfiBootInst.MountBootPartition(0);
EfiBootInst.GetFileSize(Is64BitOs()? L"\\EFI\\Boot\\bootx64.efi" : L"\\EFI\\Boot\\bootia32.efi", loaderSize);
diff --git a/src/Common/BootEncryption.h b/src/Common/BootEncryption.h
index 6eb42b50..63ebe353 100644
--- a/src/Common/BootEncryption.h
+++ b/src/Common/BootEncryption.h
@@ -310,7 +310,7 @@ namespace VeraCrypt
void GetEfiBootDeviceNumber (PSTORAGE_DEVICE_NUMBER pSdn);
void BackupSystemLoader ();
void RestoreSystemLoader ();
- void UpdateSetupConfigFile (bool bForInstall);
+ static void UpdateSetupConfigFile (bool bForInstall);
protected:
static const uint32 RescueIsoImageSize = 1835008; // Size of ISO9660 image with bootable emulated 1.44MB floppy disk image
@@ -354,4 +354,6 @@ namespace VeraCrypt
#define TC_SYSTEM_FAVORITES_SERVICE_LOAD_ORDER_GROUP L"Event Log"
#define TC_SYSTEM_FAVORITES_SERVICE_CMDLINE_OPTION L"/systemFavoritesService"
+#define VC_WINDOWS_UPGRADE_POSTOOBE_CMDLINE_OPTION L"/PostOOBE"
+
#endif // TC_HEADER_Common_BootEncryption
diff --git a/src/Mount/Mount.c b/src/Mount/Mount.c
index bbf956f0..8965984f 100644
--- a/src/Mount/Mount.c
+++ b/src/Mount/Mount.c
@@ -9383,6 +9383,13 @@ int WINAPI wWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, wchar_t *lpsz
if (argv && argc == 2 && wstring (TC_SYSTEM_FAVORITES_SERVICE_CMDLINE_OPTION) == argv[1])
return StartSystemFavoritesService() ? 0 : 1;
+ if (argv && argc == 2 && wstring (VC_WINDOWS_UPGRADE_POSTOOBE_CMDLINE_OPTION) == argv[1])
+ {
+ InitOSVersionInfo();
+ BootEncryption::UpdateSetupConfigFile (true);
+ return 0;
+ }
+
int status;
atexit (localcleanup);
SetProcessShutdownParameters (0x100, 0);