1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2025-11-11 11:08:02 -06:00

Windows: compatibility with multi-OS boot configuration by only setting VeraCrypt as first bootloader of the system if the current first bootloader is Windows one.

This commit is contained in:
Mounir IDRASSI
2019-11-27 00:13:25 +01:00
parent 79eea6e5b1
commit 14a477026d
3 changed files with 38 additions and 9 deletions

View File

@@ -2824,11 +2824,30 @@ namespace VeraCrypt
if (setBootEntry)
{
// check if first entry in BootOrder is Windows one
bool bFirstEntryIsWindows = false;
if (startOrderNumPos != 0)
{
wchar_t varName[256];
StringCchPrintfW(varName, ARRAYSIZE (varName), L"%s%04X", type == NULL ? L"Boot" : type, startOrder[0]);
byte* existingVar = new byte[512];
DWORD existingVarLen = GetFirmwareEnvironmentVariableW (varName, EfiVarGuid, existingVar, 512);
if (existingVarLen > 0)
{
if (BufferContainsWideString (existingVar, existingVarLen, L"EFI\\Microsoft\\Boot\\bootmgfw.efi"))
bFirstEntryIsWindows = true;
}
delete [] existingVar;
}
// Create new entry if absent
if (startOrderNumPos == UINT_MAX) {
if (bDeviceInfoValid)
{
if (forceFirstBootEntry)
if (forceFirstBootEntry && bFirstEntryIsWindows)
{
for (uint32 i = startOrderLen / 2; i > 0; --i) {
startOrder[i] = startOrder[i - 1];
@@ -2842,7 +2861,7 @@ namespace VeraCrypt
startOrderLen += 2;
startOrderUpdate = true;
}
} else if ((startOrderNumPos > 0) && forceFirstBootEntry) {
} else if ((startOrderNumPos > 0) && forceFirstBootEntry && bFirstEntryIsWindows) {
for (uint32 i = startOrderNumPos; i > 0; --i) {
startOrder[i] = startOrder[i - 1];
}