Windows: Warn about Fast Startup if it is enabled during system encryption or volume creation and propose to disable it

This commit is contained in:
Mounir IDRASSI 2020-07-22 17:04:32 +02:00
parent 1c3e4fd0ee
commit 587e6db4f1
No known key found for this signature in database
GPG Key ID: 02C30AE90FAE4A6F
4 changed files with 68 additions and 0 deletions

View File

@ -5673,6 +5673,16 @@ namespace VeraCrypt
if (!rescueIsoImagePath.empty())
CreateRescueIsoImage (true, rescueIsoImagePath);
// check if Fast Startup is enabled and if yes then offer to disable it
BOOL bHibernateEnabled = FALSE, bHiberbootEnabled = FALSE;
if (GetHibernateStatus (bHibernateEnabled, bHiberbootEnabled) && bHiberbootEnabled)
{
if (AskWarnYesNo ("CONFIRM_DISABLE_FAST_STARTUP", ParentWindow) == IDYES)
{
WriteLocalMachineRegistryDwordValue (L"SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Power", L"HiberbootEnabled", 0);
}
}
}
bool BootEncryption::IsPagingFileActive (BOOL checkNonWindowsPartitionsOnly)

View File

@ -291,3 +291,42 @@ extern "C" int UacAnalyzeHiddenVolumeHost (HWND hwndDlg, int *driveNo, __int64 h
return r;
}
extern "C" BOOL UacWriteLocalMachineRegistryDword (HWND hwndDlg, wchar_t *keyPath, wchar_t *valueName, DWORD value)
{
CComPtr<ITrueCryptFormatCom> tc;
int r = 0;
CoInitialize (NULL);
if (ComGetInstance (hwndDlg, &tc))
{
CComBSTR keyPathBstr, valueNameBstr;
BSTR bstr = W2BSTR(keyPath);
if (bstr)
{
keyPathBstr.Attach (bstr);
bstr = W2BSTR(valueName);
if (bstr)
{
valueNameBstr.Attach (bstr);
r = tc->WriteLocalMachineRegistryDwordValue (keyPathBstr, valueNameBstr, value);
}
else
r = ERROR_OUTOFMEMORY;
}
else
r = ERROR_OUTOFMEMORY;
}
CoUninitialize ();
if (r == ERROR_SUCCESS)
return TRUE;
else
{
SetLastError (r);
return FALSE;
}
}

View File

@ -29,6 +29,7 @@ int UacFormatFs (HWND hWnd, int driveNo, int clusterSize, int fsType);
int UacAnalyzeHiddenVolumeHost (HWND hwndDlg, int *driveNo, __int64 hiddenVolHostSize, int *realClusterSize, __int64 *nbrFreeClusters);
int UacFormatVolume (char *cvolumePath , BOOL bDevice , unsigned __int64 size , unsigned __int64 hiddenVolHostSize , Password *password , int cipher , int pkcs5 , BOOL quickFormat, BOOL sparseFileSwitch, int fileSystem , int clusterSize, HWND hwndDlg , BOOL hiddenVol , int *realClusterSize);
BOOL UacUpdateProgressBar (__int64 nSecNo, BOOL *bVolTransformThreadCancel);
BOOL UacWriteLocalMachineRegistryDword (HWND hwndDlg, wchar_t *keyPath, wchar_t *valueName, DWORD value);
#ifdef __cplusplus
}

View File

@ -8453,6 +8453,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
else if (nCurPageNo == FORMAT_PAGE)
{
/* Format start (the 'Next' button has been clicked on the Format page) */
static BOOL g_bFastStartupCheckDone = FALSE;
if (bVolTransformThreadRunning || bVolTransformThreadToRun)
return 1;
@ -8461,6 +8462,23 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
bVolTransformThreadToRun = TRUE;
// check if Fast Startup is enabled and if yes then offer to disable it
if (!g_bFastStartupCheckDone)
{
BOOL bHibernateEnabled = FALSE, bHiberbootEnabled = FALSE;
if (GetHibernateStatus (bHibernateEnabled, bHiberbootEnabled) && bHiberbootEnabled)
{
if (AskWarnYesNo ("CONFIRM_DISABLE_FAST_STARTUP", hwndDlg) == IDYES)
{
if (!IsAdmin () && IsUacSupported ())
UacWriteLocalMachineRegistryDword (hwndDlg, L"SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Power", L"HiberbootEnabled", 0);
else
WriteLocalMachineRegistryDword (L"SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Power", L"HiberbootEnabled", 0);
}
}
g_bFastStartupCheckDone = true;
}
fileSystem = (int) SendMessage (GetDlgItem (hCurPage, IDC_FILESYS), CB_GETITEMDATA,
SendMessage (GetDlgItem (hCurPage, IDC_FILESYS), CB_GETCURSEL, 0, 0) , 0);