From 3659ddd70ce8f1616a44e5bcce793eda076b835d Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Sun, 22 Apr 2018 16:14:53 +0200 Subject: Windows: enhance ReflectDrivers mechanism by persisting it across major Windows upgrades. --- src/Common/BootEncryption.cpp | 35 ++++++++++++++++++++++++++++++++--- src/Common/BootEncryption.h | 4 +++- 2 files changed, 35 insertions(+), 4 deletions(-) (limited to 'src/Common') 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 -- cgit v1.2.3