diff --git a/src/Efi.cs b/src/Efi.cs index 4b4921d..4f6d7fd 100644 --- a/src/Efi.cs +++ b/src/Efi.cs @@ -472,7 +472,12 @@ public class Efi { var bootOrderInts = new List(BytesToUInt16s(bootOrder.Data)); // Windows can't enumerate EFI variables, and trying them all is too slow. // BootOrder + BootCurrent + the first 0xff entries should be enough. - foreach (var num in BytesToUInt16s(bootCurrent.Data).Concat(bootOrderInts).Concat(Enumerable.Range(0, 0xff).Select(i => (UInt16) i))) { + var seen = new HashSet(); + foreach (var num in bootOrderInts.Concat(BytesToUInt16s(bootCurrent.Data)).Concat(Enumerable.Range(0, 0xff).Select(i => (UInt16) i))) { + if (seen.Contains(num)) { + continue; + } + seen.Add(num); var entry = GetVariable(String.Format("Boot{0:X04}", num)); if (entry.Data != null) { Setup.Log($"LogBootOrder: {entry}"); diff --git a/src/Setup.cs b/src/Setup.cs index 86d5e48..9d23902 100644 --- a/src/Setup.cs +++ b/src/Setup.cs @@ -400,6 +400,9 @@ public class Setup { } var fwbootmgr = "{fwbootmgr}"; Execute("bcdedit", $"/set {fwbootmgr} displayorder {guid} /addfirst", true); + // Verify that the entry was created. + Execute("bcdedit", "/enum firmware", true); + Execute("bcdedit", $"/enum {guid}", true); } catch (Exception e) { Log($"EnableBCDEdit failed: {e.ToString()}"); throw new SetupException("Failed to enable HackBGRT with BCDEdit!"); @@ -441,6 +444,8 @@ public class Setup { protected void EnableEntry() { Efi.MakeAndEnableBootEntry("HackBGRT", "\\EFI\\HackBGRT\\loader.efi", DryRun); WriteLine("Enabled NVRAM entry for HackBGRT."); + // Verify that the entry was created. + Efi.LogBootEntries(); } /**