Windows boot manager настройка

Введение

Возможно некоторые читатели помнят мою самую первую статью на ресурсе, посвященную загрузке Windows с VHD-образа. Возможно я бы и не вернулся к этой теме, если бы не нашлись люди, попытавшиеся повторить данную технологию на своих домашних машинах. Естественно, с реализацией этого решения возникли проблемы, касающиеся в основном тех ошибок, которые выплевывает bootmgr в тех случаях, когда ему что либо не нравится. Попытки интерпретации ошибок загрузки вроде 0xc03a0003 путем гугления к особо ценным результатам не приводят, а документация Microsoft на этот счет хранит многозначительное молчание. Возникла идея изучить процесс обработки VHD-образов, получив информацию из первых рук, то есть от самого загрузчика.

Если обратится к уже имеющейся в сети информации, то существует замечательный блог «Записки эникейщика о Windows» на страницах которого (раз, два и три) размещены, на мой взгляд, самые ценные сведения, по вопросам устройства bootmgr. Автор подробно рассмотрел процесс загрузки, включая исследования кода MBR и PBR, остановившись на структуре bootmbr, кратко описав происходящие при его работе процессы.

Мы же пойдем дальше — опишем инструментарий, который можно использовать для изучения устройства загрузчика и попытаемся разобраться с некоторыми, интересующими нас алгоритмами. Если такое предложение показалось кому-то интересным, милости прошу под кат

1. Достаем код Bootmgr из системы

Загрузчик Bootmgr появился в операционных системах семейства Windows начиная с Windows Vista. Причиной его разработки послужило то, что старый добрый ntldr, использовавшийся в линейке NT не мог загружать систему, на компьютерах с материнскими платами оснащенными UEFI, в те времена (2005 год) мало распространенными среди широкого круга рядовых пользователей.

По умолчанию, при штатной установке, этот загрузчик помещается в отдельный раздел, расположенный в начале HDD, с размером, достаточным для размещения самого bootmgr а так же файлов его конфигурации. Данный раздел не монтируется в обычном режиме работы системы и буква диска ему не присваивается. В системах с MBR создания этого раздела можно избежать, устанавливая Windows на предварительно размеченный и отформатированный HDD. В этом случае загрузчик помещается в тот же раздел, что и файлы ОС. Системы с EFI + GPT изначально требуют наличия такого раздела, имеющего тип 0xef и отформатированного в FAT.

Таким образом, первая наша задача — добыть bootmgr. Желательно взять его из системы, которая будет выступать в роли подопытной. Для этого установим ОС Windows на виртуальную машину. Это может быть и VirtualBox, и VMware, и QEMU — всё зависит от того, каким инструментарием виртуализации вы располагаете. Я преимущественно работаю в ОС Linux, буду в основном ориентироваться на инструменты применяемые там, хотя уделю внимание и Windows.

Итак, предположим у нас есть виртуальная машина (ВМ) с установленной на ней Windows 7 (x86). Разметка диска выполнена на основе MBR, система установлена в один раздел. Допустим это QEMU, диск на котором установлена подопытная имеет формат raw. то есть обыкновенный двоичный образ. Монтируем этот образ

$ sudo modprobe -r loop
$ sudo modprobe loop max_part=15
$ sudo losetup -f win7.hdd
$ sudo mount /dev/loop0p1 ~/virt-win
$ ls -l ~/virt-win

На смонтированном разделе мы увидим следующее содержимое

итого 5504541
-rwxrwxrwx 1 root root         24 июн 11  2009 autoexec.bat
drwxrwxrwx 1 root root       4096 май 21 09:08 Boot
-rwxrwxrwx 1 root root     391640 июл 21  2015 bootmgr
-rwxrwxrwx 1 root root       8192 май 21 09:08 BOOTSECT.BAK
-rwxrwxrwx 1 root root         10 июн 11  2009 config.sys
lrwxrwxrwx 2 root root         60 июл 14  2009 'Documents and Settings' -> /home/maisvendoo/virt-win/Users
-rwxrwxrwx 1 root root 2415517696 май 21 09:26 hiberfil.sys
-rwxrwxrwx 1 root root 3220692992 май 21 09:26 pagefile.sys
drwxrwxrwx 1 root root          0 июл 14  2009 PerfLogs
drwxrwxrwx 1 root root       4096 май 21 09:14 ProgramData
drwxrwxrwx 1 root root       4096 апр 12  2011 'Program Files'
drwxrwxrwx 1 root root          0 май 21 09:14 Recovery
drwxrwxrwx 1 root root          0 май 21 09:14 '$Recycle.Bin'
drwxrwxrwx 1 root root       4096 май 21 09:09 'System Volume Information'
drwxrwxrwx 1 root root       4096 май 21 09:14 Users
drwxrwxrwx 1 root root      16384 май 21 09:09 Windows

Для нас представляет интерес файл bootmgr. Однако, прежде нам нужен не совсем он, а 32-разрядный образ загрузчика bootmgr.exe, который находится в bootmgr в упакованном виде. Для его распаковки необходимо использовать утилиту bmzip, которая написана в общем-то для Windows (с наскока собрать её под Linux не вышло), поэтому распаковку выполним на виртуальной машине. Бинарную сборку этой утилиты, которая бы работала нормально оказалось довольно трудно найти, несмотря что тут дана ссылка на неё. В итоге, пакет был найден на каком-то из сайтов, посвященных кастомизации bootmgr. Для работы bmzip оказалась необходима библиотека MSCompression.dll. Готовый к работе пакет теперь можно скачать тут.

Создадим на диске ВМ папку utils и скопируем туда bmzip.exe вместе с MSCompression.dll. Отмонтируем образ и запустим ВМ. Запустим командную строку от имени администратора. Чтобы случайно не попортить загрузчик сделаем его копию

C:\ Windows\System32>cd c:\
C:\ xcopy bootmgr utils\bootmgr /h  

Файл загрузчика является скрытым и системным, поэтому снимем с него эти атрибуты

C:\ cd utils
C:\ attrib -S -H /s

Распаковываем загрузчик

C:\ bmzip bootmgr bootmgr.exe

В итоге получаем распакованный образ bootmgr.exe

image

Выключаем ВМ и снова монтируем её диск в линуксе. Создадим какую-нибудь папку, где будем потрошить загрузчик дизассемблером и скопируем туда распакованный образ

$ mkdir -p ~/work/bootmgr/
$ cp ~/virt-win/utils/bootmgr.exe ~/work/bootmgr/

2. Дизассеблируем bootmgr.exe

Теперь скормим полученный «экзешник» дизассемблеру. Например IDA Pro. Запустим «иду» и откроем в ней добытый файл.

image

IDA верно идентифицирует файл как 32-разрядный исполняемый файл формата PE. Жмем ОК. Теперь, если в IDA Pro установлен плагин для работы с pdb-файлами, по ходу дизасеммблирования нам предложат загрузить отладочные символы, и не откуда нибудь, а сайта Microsoft.

image

Соглашаемся и получаем такую картину

image

Ага, слева мы видим прототипы функций, содержащихся в исследуемом файле, благодаря тому что согласились загрузить отладочные символы. Это очень сильно облегчит нам последующую работу. А пока определим точку входа в код загрузчика, и нетрудно догадаться что это будет функция BmMain(). Однако, не принимая это на веру жмем Ctrl + E

image

убеждаясь что наша догадка верна — BmMain() является точкой входа, расположенной по адресу 0x401000. Жмем ОК и перемещаемся на начало кода

image

Видим мы заголовок функции BmMain() с внушительным списком локальных переменных, и чуть ниже и сам код функции

image

Разобраться в мешанине ассемблерного кода довольно трудно, да и не зачем этого делать. Прежде всего определимся с тем, какие функции загрузчика мы хотим изучить. Я что-то там говорил о VHD? Ну так поищем среди кода что-нибудь, касающееся виртуальных дисков. Щелкаем правой кнопкой по списку функций слева и в вывалившемся контекстном меню выбираем «Quick filter» (или перейдя в окно с прототипами жмем Ctrl + F). В строке поиска набираем «vhd» и…

да, таковые функции имеются в количестве 33 штук. Среди них VhdOpen() очевидно будет отвечать за открытие виртуального диска, а вот например VhdiVerifyVhdFooter() как пить дать отвечает за проверку футера VHD-диска на корректность. То есть мы примерно представляем себе, куда будем ставить точки останова в отладчике. Кстати, поговорить об отладке самое время

3. Отладка Bootmgr на связке QEMU + IDA Pro

Запускаем виртуальную машину с ключами -s -S — это включает режим отладки

$ qemu-system-x86_64 ~/VM/qemu/win7-efi/win-x86.hdd -m 4096 -s -S

ВМ запускается и сразу же становится на паузу, ожидая подключения отладчика

Важно! Ни в коем разе не используйте ключ -enable-kvm применяющий аппаратную виртуализацию. При её использовании отладка в QEMU не работает.

Теперь на панели инструментов в IDA выбираем отладчик «Remote GDB debugger»

Ответив «Да» на несколько заданных нам вопросов получим окошко

image

где вобьем параметры соединения с ВМ: localhost на порту 1234. Жмем ОК. Нам сообщат, что некоторый процесс уже запущен и ожидает подключения отладчика — не хотим ли мы присоединится к нему? Конечно же ходим!

image

Поэтому отвечаем «Да» и…

image

мы встаем на паузу где-то в начала bios виртуальной машины. Великолепно, но теперь мы должны добраться до того места, где начинает выполнятся bootmgr. Ставим точку останова на функции BmMain(). Нажимаем на панели инструментов список точек останова, жмем Insert на клавиатуре и указываем на каком адресе мы хотим прервать выполнение кода и перейти в отладку

image

Вбиваем адрес 0x401000. Если же мы хотим поставить бряк на нужную нам функцию, то идем в главное меню и открываем в сеансе отладки список функций: View -> Open subviews -> Functions. В появившемся списке правой кнопкой мыши вызываем контекстное меню и выбираем Add breakpoint. Теперь жмем F9 и после недолгого ожидания попадаем в самое начало кода загрузчика

image

Теперь мы можем проходить код по шагам, смотреть значения регистров и стека, отслеживать стек вызовов и так далее. В какой-то степени отладчик, встроенный в IDA удобен и интуитивно понятен.

Возможно меня спросят — а можно ли использовать GDB? Можно, запускаем ВМ в режиме отладки, запускаем gdb в консоли

$ gdb -q

Подключаемся к удаленной сессии ВМ

(gdb) target remote localhost:1234

Включаем отображение дизассемблированных инструкций

(gdb) display/4i $pc

Если вас не устраивает синтаксис AT&T переключаемся на интел

(gdb) set disassembly-flavor intel

Ставим точку останова на BmMain() и запускаем исполнение

(gdb) b *0x401000
Breakpoint 1 at 0x401000
(gdb) c
Continuing.

Breakpoint 1, 0x00401000 in ?? ()
1: x/4i $pc
=> 0x401000:    mov    edi,edi
   0x401002:    push   ebp
   0x401003:    mov    ebp,esp
   0x401005:    and    esp,0xfffffff8
(gdb)

Пожалуйста, мы видим почти тоже самое, что видели в IDA, располагая при этом всей мощью GDB. Почти, потому что тут мы не сумеем использовать отладочные символы от Microsoft, ибо GDB их не понимает. Но возможности GDB не в пример более широки, чем возможности IDA именно в плане процесса отладки и его автоматизации.

Однако, существует ещё одна возможность отладки, мимо которой пройти нельзя

3. Отладка на связке WinDbg + VirtualBox

Те, кто занимается разработкой драйверов для ОС Windows безусловно знакомы с этим замечательным отладчиком. Замечателен он тем, что имеет возможности сравнимые с возможностями линуксового GDB. Единственным его недостатком является жуткий способ настройки его интерфейса. Но мы опустим эти моменты, а обратимся к возможностям данного отладчика для решаемой нами задачи.

Итак, пускай на у нас имеется ВМ на основе VirtualBox. Создадим для этой ВМ COM-порт со следующими параметрами

image

Это виртуальный COM-порт, пробрасываемый в именованый канал. Для отладки через последовательный порт виртуальную машину следует настроить соответствующим образом. Загружаем её и запускаем консоль с административными правами. С ней вводим команды настройки загрузчика для отладки

c:\ Windows\system32> bcdedit /bootdebug {bootmgr} on

Эта команда включит возможность отладки загрузчика. Далее настроим порт для отладки

c:\ Windows\system32> bcdedit /dbgsettings serial debugport:1 baudrate:115200

Указываем, что мы используем COM1 со скоростью 115200 бод. Отлично, выключаем ВМ и запускаем отладчик.

Отладчик WinDbg можно скачать официально с сайта Microsoft вместе с комплектом для разработки драйверов. Однако у этой сборки отладчика есть проблема — глюк с отображением значений регистров. Поэтому я использую сборку, которая качается с того же сайта редмодовцев, на которую ведет ссылка из твитера некоего Доминика Вонга. В этой сборке данный баг отсутствует. Запускаем WinDbg следующей командой

c:\Wingdbx86> windbg -b -k com:pipe,port=\\.\pipe\com1,resets=0,reconnect

Откроем настройки интерфейса (File -> Open Workspace in File) в который среди прочих параметров сохранен путь http://msdl.microsoft.com/download/symbols для загрузки отладочных символов с серверов Microsoft. У меня этот путь заранее вбит в настройки (File -> Symbol File Path) и сохранен в теме для WinDbg. Такая настройка позволит нам автоматически получить отладочную информацию для загрузчика.

Теперь запустим ВМ. Практически сразу она встанет на паузу, а в окне отладчика мы увидим следующую картину

image

Ага, отладчик подключился к ВМ и встал на точке, любезно предоставленной нам майкрософтом. Ну что же, теперь нам доступны все возможности отладки с использованием windbg.

Однако мы останавливаемся не в самом начале кода загрузчика, а чуть дальше. Как показывает пошаговая отладка мы находимся как раз за функцией BlInitializeLibrary() которая обеспечивает начальную инициализацию оборудования

image

и, при отладке при помощи IDA мы сюда просто не попадаем. Таким образом, при отладке с WinDbg от нас ускользает часть действий bootmgr сразу после его запуска. В этом заключается недостаток использования стандартных средств отладки, предоставленных Microsoft. Однако, недоступный код мы всегда сможем исследовать отдельно с помощью IDA.

Теперь, в качестве примера, посмотрим на то, как bootmgr работает с образами VHD фиксированного размера.

4. Отлаживаем загрузку с VHD

Всё ниже следующее рассматривается на отладчике WinDbg, подключенном к ВМ на VirtualBox, но в равной степени справедливо и для других методов отладки, с учетом их особенностей. ВМ, используемая в данном примере содержит две системы: одна установлена на HDD, другая на VHD образ. Поставим точку останова на функции VhdOpen()

kd> bp VhdOpen

и нажмем F5. Отладчик встанет на указанной функции

image

Причем, внимание — мы ещё вообще не заходили в меню загрузки и не выбирали загрузку из VHD. А это означает, что проверка VHD происходит задолго до появления меню. Такое же поведение мы и наблюдаем, например если подсунем bootmgr пустой VHD. Меню загрузки нам вообще не покажут, а покажут ошибку с кодом 0xc000000F.

Проходим чуть дальше, нажимая F10 или вводя в комадной строке p и дойдем до вызова VhdiAllocateVhdData() — очевидно это создание в памяти некоторых структур для работы с образом

image

Чуть ниже расположен вызов VhdiVerifyAndInitializeVhd() — очевидно проверка корректности образа. Это показалось мне интересным и я пошел внутрь (F11)

image

Ниже, после некоторых подготовительных операций загрузчик читает последние 512 байт образа, в которых содержится так называемый «футер» образа, вызывая функцию VhdiReadVhdInformation(). Не надо ходить к гадалке, чтобы понять — функция возвратит указатель на структуру, содержащую данные футера. Как мне удалось выяснить, этот указатель, после вызова VhdiReadVhdInformation() оказывается в регистре ecx. Его значение равно 0x110098. Посмотрим на память по тому адресу

kd> db 0x110098

Команда читает память по указанному адресу, выводя её в окно отладчика в виде последовательности байт

00110098  63 6f 6e 65 63 74 69 78-00 00 00 02 00 00 01 00  conectix........
001100a8  ff ff ff ff ff ff ff ff-70 5e d3 1e 77 69 6e 20  ........p^..win 
001100b8  00 06 00 01 57 69 32 6b-00 00 00 40 06 00 00 00  ....Wi2k...@....
001100c8  00 00 00 40 06 00 00 00-cb 2c 10 3f 02 00 00 00  ...@.....,.?....
001100d8  83 e6 ff ff 75 11 0a 5a-eb 03 c6 43 b9 c9 d6 df  ....u..Z...C....
001100e8  24 b6 76 57 00 00 00 00-00 00 00 00 00 00 00 00  $.vW............
001100f8  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
00110108  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

Ага, мы видим знакомое слово — conectix. Это поле предваряет футер VHD образа, носит название cookie и хранит память о том, что Microsoft купила технологию VHD у фирмы Conectix, которая разработала данный формат виртуальных дисков для старых компьютеров Macintosh, Это несомненно футер VHD, мы можем видеть тут сигнатуру операционной системы в которой он был создан (Wi2k) а так же последовательность win указывает на то, что VHD создан средствами Windows. Да, все так и было. Пройдя чуть дальше мы натыкаемся на вызов VhdiVerifyVhdFooter() проверяющий формат футера. В качестве параметра он получает указатель на вышеописанную структуру, почему-то через регистр esi (???)

image

Этот участок кода интересовал меня больше всего, поэтому где-то с помощью IDA Pro, где-то руками, я преобразовал его в псевдокод на C

signed int __usercall VhdiVerifyVhdFooter(int footer)
{
  signed int error_code;    // Error code
  int cur_checksum;         // Actual checksum, writed in VHD
  int calc_checksum;        // Calculated checksum
  int disk_type;            // Disk type
  int creator_host_os;      // Creator host OS

  // Error code
  error_code = -1069940733; // 0xc03a0003

  // Check cookie
  if ( RtlCompareMemory((const void *)footer, "conectix", 8) == 8 )
  {
    // Store actual checksumm
    cur_checksum = *(_DWORD *)(footer + 64);
    // Write zero to checksum in footer structure
    *(_DWORD *)(footer + 64) = 0;
    // Calculate check summ
    calc_checksum = BlUtlCheckSum(0x40001, 0, footer, 0x200);
    // Restore checsum in footer
    *(_DWORD *)(footer + 64) = cur_checksum;

    // Checksum verify
    if ( calc_checksum == cur_checksum )
    {
      // File type verify
      if ( *(_WORD *)(footer + 14) == 1 )
      {
        // Check disk type
        disk_type = *(_DWORD *)(footer + 60);
        if ( disk_type == 2 || disk_type == 3 || disk_type == 4 )
        {
          // Check creator host OS
          creator_host_os = *(_DWORD *)(footer + 36);
          if ( creator_host_os != 1798465879 && creator_host_os )
          {
            error_code = -1073741637; // 0xc00000bb

          } // Check disk size (by integer sectors count)
          else if ( *(_DWORD *)(footer + 48) & 0x1FF || *(_DWORD *)(footer + 40) & 0x1FF )
          {
            error_code = -1069940718; // 0xc03a0012
          }
          else
          {
            error_code = 0;
          }
        }
        else
        {
          error_code = -1069940732; // 0xc03a0004
        }
      }
      else
      {
        error_code = -1069940731; // 0xc03a0005
      }
    }
    else
    {
      error_code = -1069940734; // 0xc03a0002
    }
  }
  return error_code;
}

Футер VHD можно представить в виде следующей структуры (в комментариях указаны смещения от её начала).

//-----------------------------------------------------------------------------
//      VHD foother's data
//-----------------------------------------------------------------------------
struct vhd_footer_t
{
    char                cookie[8];                  // +0
    uint32_t            features;                   // +8
    uint32_t            file_format_version;        // +12
    uint64_t            data_offset;                // +16
    uint32_t            time_stamp;                 // +24
    char                creator_application[4];     // +28
    uint32_t            creator_version;            // +32
    char                creator_host_os[4];         // +36
    uint64_t            original_size;              // +40
    uint64_t            current_size;               // +48
    vhd_disk_geometry_t disk_geometry;              // +56
    uint32_t            disk_type;                  // +60
    uint32_t            checksum;                   // +64
    vhd_uuid_t          unique_id;                  // +68
    uint8_t             saved_state;                // +84
    uint8_t             reserved[427];
};

Пользуясь этими данными можно сделать вывод о том, какие поля футера проверяет bootmgr и какие ошибки он выбрасывает. При корректном VHD образе данная функция возвращает ноль, в иных случаях расклад таков

0xc03a0003 - Неверный cookie
0xc03a0002 - Неверная контрольная сумма футера
0xc03a0005 - Неверная версия формата файла
0xc03a0004 - Неверный тип виртуального диска
0xc00000bb - Виртуальный диск создан не в Windows
0xc0300012 - Размер диска не кратен 512 (размер сектора в VHD)

Полученная мной информация решила спор возникший с коллегой по форуму, на котором обсуждалась методика загрузки Windows с VHD. Я его проиграл, считая что образы, созданные VirtualBox не будут грузится с помощью bootmgr. VirtualBox, создавая такие образы пишет все поля в соответствии со спецификацией Microsoft, кроме поля creator_application, куда записано win в оригинальном образе и vbox в случае с виртуалбоксом. Но это поле не проверяется bootmgr-ом, так что диски работают, а у меня они не работали по совсем другой причине, которая является предметом совсем другой истории…

Заключение

Возможно, статья несколько сумбурна. Но, она говорит о том, что горшки обжигают не боги, а отладка низкоуровневого кода Windows лишь дело техники. Интересующую вас информацию всегда можно получить, приложив к этому голову и руки. В этом тексте я попытался обобщить разрозненную информацию, собранную мной в сети по вопросам отладки bootmgr. Надеюсь что у меня это получилось, благодарю всех читателей за внимание и…

продолжение следует!

When you use the dual operating system on your Windows, every time the Windows Boot Manager screen comes up asking to choose the operating system to start. This is a great way when using dual boot but if you are using only the OS it slows down the boot process.  In this tutorial, we will explain what Windows Boot Manager is and how you can enable or disable the Windows Boot Manager screen in Windows 10.

What is Windows Boot Manager?

Windows Boot Manager commonly known as BOOTMGR is a small piece of software that loads from volume boot code. It is essential for booting Windows. Furthermore, the Windows Boot Manager is hidden and located in the root directory. Winload.exe is executed by BOOTMGR essential for the Windows boot process.
Usually, the disk partition that doesn’t have a drive letter and is often labeled as System Reserved has BOOTMGR. If you don’t have a system reserved partition, BOOTMGR will be located on the C drive.

BootMGR is missing is the most common error faced by Windows users. To resolve it, you can see that our article on BOOTMGR is missing.

Now that we know what Windows Boot Manager is, let’s move further to know why we need to disable it and how to disable the Windows Boot Manager.

The Need to Disable Windows Boot Manager

If you are using dual OS, Windows Boot Manager gives an option to choose the operating system. However, when there’s only one OS this slows down the boot process. Therefore, to reduce the wait time we should disable the Windows Boot Manager.

However, the Windows Boot Manager cannot be completely removed but we can disable it. All this can be done via the System Configuration (msconfig.exe) tool. Here’s how to do this:

How to Enable/Disable Windows Boot Manager on Windows 10?

To reduce wait time and to speed up the boot process on Windows 10 use the given methods to disable Windows 10 boot manager.

Tip: Be careful while using the steps explained below any unnecessary change made might lead to a mess.

Method 1: Use Command Prompt

Step 1: Type cmd in the Cortana search box, right-click Command Prompt and select Run as administrator.

Step 2: Enter the following commands one by one in the command prompt window and press the Enter key after entering each command.

  • bcdedit /set {bootmgr} displaybootmenu yes
  • bcdedit /set {bootmgr} timeout 30

Tip: Here, the timeout followed by the number tells for how long the boot manager will be displayed. The timeout value is in seconds.

bootmgr

Step 3: To disable Windows Boot Manager, enter bcdedit /set {bootmgr} timeout 0 and press Enter.

bootmgr disable

Alternatively, to disable BOOTMGR you can use bcdedit /set {bootmgr} displaybootmenu no command and press Enter.

Remember:  If you use the above command you cannot use below Method 2

Method 2: Change System Properties

Editing system properties will help enable or disable the Windows Boot Manager.

Step 1: Press Windows + R to open the Run dialog box.

Step 2: Here, type sysdm.cpl and click OK.

sysdm_bootmanager

Step 3: This will open the System Properties window. Here select Advanced option > Settings under Startup and Recovery option.

startup recovery

Step 4: Checkmark the option Time to display list of operating systems box and set the time value. Click OK to save the changes.

time to display_bootmanager disable settings

Step 5: To disable BOOTMGR, uncheck Time to display the list of operating systems box or edit the timer to 0 and click OK.

Using these simple steps, you can easily enable or disable Windows Boot Manager on Windows 10. In addition to this, if you are facing a problem with permissions to allow a dual operating system to read further.

Usually, when the secure boot option is enabled you are not allowed to boot Windows when more than 1 OS is installed. Therefore, to allow dual boot you’ll need to disable secure boot.

What is a Secure boot?

Secure boot is a feature of the Unified Extensible Firmware Interface (UEFI), a replacement for BIOS. It is a security gate with a more advanced interface and enough technical options. Secure boot analyses codes before they are executing if a code has genuine digital signatures, Secure Boot will let it pass. However, if the digital signatures are unrecognized it will be blocked by Secure Boot from running and the system will require a restart.

Therefore, to use a dual operating system sometimes you might need to disable Secure Boot. However, keep in mind we do not recommend disabling Secure Boot as it helps keep you safe.

Disabling Secure Boot will allow you to perform the following operations:

  • Booting Windows from external device USB, etc.
  • Booting Windows using password recovery tools

Steps to disable Secure Boot on Windows 10

1. Type Advanced Startup in Cortana search bar. Select Change Advanced Startup options.

2. Now under the Settings window click on Recovery option in the left pane > Restart now under Advanced startup.

Secure boot UEFI boot manager

3. This will restart your Windows 10 in an advanced mode where you will get various advanced options.

Click Troubleshoot.4. Next, click on the Advanced options.5. Here, select UEFI Firmware Settings. This will restart your system click on restart on the next screen.6. Your system will now restart in BIOS. Here click on the security tab under BIOS settings.

7. Choose the Secure Boot option using the up and down arrow key.

8. Next, use the arrow keys to change Secure Boot from Enabled to Disabled.

9. Press enter, save the settings and exit.

Wasn’t it simple? Do share your feedback in the comments box. If you find this article helpful, share it with others and follow us on the social network to stay updated with the latest articles, tutorials, and tech news.

Frequently Asked Questions –

Q1. What is Windows Boot Manager?

Windows Boot Manager is a legitimate software provided by Microsoft. It is a UEFI based small in size but the crucial piece of software to set up the boot environment.

Q2. How do I get to Windows Boot Manager?

To access Windows Boot Manager, you need to head to the Start Menu> Settings > Update & Security> Recovery. Under Advanced Startup, click on the Restart button and it will reboot your PC. That’s where you see the Windows Boot Manager in action to help your device boot up.

Q3. Do I need Windows Boot Manager?

Yes, you need Windows Boot Manager on your Windows PC to help you boot up the device properly. Do not remove it from the computer or else the computer can malfunction or fail to boot.

Q4. What happens if I delete Windows Boot Manager?

If you deleted Windows Boot Manager from your computer, it will not function properly and also the Windows version logo will not appear on the screen. If you have more than one drive on your device and you want to stop seeing the Windows Boot Manager menu, you can remove a partition.

Многие из наc сталкиваются с Windows Boot Manager, но не понимают, что это такое. Иногда данное меню появляется при загрузке ноутбука. Что делать в таких ситуациях? Рассказываем в нашем материале.

Источник: Super User / Boot Manager

Источник: Super User / Boot Manager

Windows Boot Manager (bootmgr) — это системный компонент операционной системы Windows, который отвечает за загрузку операционной системы. Он был введен в Windows Vista и продолжает использоваться в последующих версиях, включая Windows 7, 8, 10 и 11. Boot Manager является частью архитектуры загрузки системы и выполняет несколько ключевых функций:

  • Управление процессом загрузки — Windows Boot Manager определяет, какую операционную систему запускать, и передает управление загрузке ядра (Windows Loader, winload.exe). В случае, если на компьютере установлено несколько операционных систем, Boot Manager предоставляет меню для выбора, какую из них загрузить;

  • Загрузка загрузочного конфигурационного файла (BCD) — Boot Manager загружает и интерпретирует данные из Boot Configuration Data (BCD) — это хранилище, в котором содержатся параметры и опции загрузки для установленных операционных систем;

  • Работа с многозагрузочными конфигурациями — Boot Manager поддерживает загрузку нескольких операционных систем, позволяя пользователю выбирать среди них при старте компьютера.

Сравнение с NTLDR

Источник: Wondershare Recover It / NTLDR

Источник: Wondershare Recover It / NTLDR

NTLDR (NT Loader) — это предшественник Windows Boot Manager, который использовался в более ранних версиях Windows, таких как Windows NT, 2000 и XP. Хотя NTLDR и Boot Manager выполняют схожие функции, они существенно различаются по архитектуре, функциональности и возможностям.

Boot Manager

NTLDR

Архитектура

Имеет модульную архитектуру и разделяет функции между несколькими компонентами, такими как Boot Manager (bootmgr) и Windows Loader (winload.exe). Это позволяет более гибко управлять процессом загрузки и расширяет возможности загрузчика

Был монолитным загрузчиком, который управлял загрузкой операционной системы и сразу загружал ядро Windows, а также мог загружать более старые версии DOS с использованием файла boot.ini.

Поддержка современных технологий

Поддерживает как MBR, так и GPT (GUID Partition Table), а также работает в средах UEFI, что делает его более универсальным и современным инструментом для управления загрузкой операционной системы.

Был ограничен по своим возможностям и не поддерживал современные технологии, такие как UEFI, и новые файловые системы. Он работал только с MBR (Master Boot Record) и не мог эффективно взаимодействовать с новыми аппаратными стандартами.

Конфигурация и управление

Boot Manager использует более сложную и мощную систему конфигурации на базе BCD (Boot Configuration Data), которая предоставляет расширенные возможности для настройки и управления процессом загрузки, включая поддержку различных операционных систем и конфигураций оборудования.

Конфигурация загрузки в NTLDR осуществлялась через простой текстовый файл boot.ini, который ограничивал возможности пользователя в настройке загрузки и усложнял управление многозагрузочными системами.

Графический интерфейс

Предлагает более удобный и понятный графический интерфейс для выбора операционной системы, что упрощает взаимодействие пользователя с системой.

Предоставлял текстовое меню для выбора операционной системы при многозагрузочной конфигурации, что было функционально, но ограничено в возможностях.

Как работает Windows Boot Manager

Работа начинается сразу после включения компьютера и завершает свои действия перед запуском ядра операционной системы.

Этапы загрузки

Процесс загрузки с использованием Windows Boot Manager можно разделить на несколько этапов:

  • Инициализация BIOS/UEFI. Когда компьютер включается, первичный процесс загрузки начинается с BIOS (Basic Input/Output System) или UEFI (Unified Extensible Firmware Interface). Эта программа загружается первой и проверяет основные компоненты системы (процессор, память, устройства ввода-вывода). BIOS или UEFI определяет, с какого устройства нужно загрузить операционную систему (жесткий диск, SSD, USB-накопитель и так далее);

  • Загрузка Windows Boot Manager. После завершения работы BIOS/UEFI управление передается Windows Boot Manager, который находится на системном разделе жесткого диска (обычно этот раздел скрыт от пользователя). Boot Manager загружает и читает файл конфигурации BCD (Boot Configuration Data), который содержит информацию о доступных операционных системах и их параметрах загрузки;

  • Меню выбора операционной системы. Если на компьютере установлено несколько операционных систем, Windows Boot Manager отображает меню выбора, позволяя пользователю выбрать, какую операционную систему загрузить. В случае отсутствия альтернативных ОС Boot Manager автоматически загружает единственную доступную систему;

  • Передача управления Windows Loader. После выбора или автоматической загрузки операционной системы Windows Boot Manager передает управление Windows Loader (winload.exe). Этот компонент отвечает за загрузку ядра операционной системы и всех необходимых драйверов для начала работы системы;

  • Загрузка ядра операционной системы. Windows Loader загружает ядро Windows, инициализирует системные драйверы и запускает системные процессы, такие как управление памятью и взаимодействие с оборудованием. После успешной загрузки ядра система переходит в стадию инициализации пользовательских процессов и служб.

Конфигурационные файлы

Windows Boot Manager использует несколько конфигурационных файлов и данных для управления процессом загрузки:

  1. BCD (Boot Configuration Data) — является центральным хранилищем конфигурационных данных, которые используются Windows Boot Manager. В нем содержатся записи о каждой установленной операционной системе, а также параметры загрузки, такие как путь к загрузчику ОС, режимы загрузки (обычный, безопасный или другой), а также параметры, влияющие на работу оборудования;

  2. winload.exe — исполняемый файл, загружаемый Windows Boot Manager после выбора операционной системы. Он отвечает за загрузку ядра и начальных драйверов, необходимых для запуска ОС;

  3. bootmgr — является основным исполняемым файлом Windows Boot Manager. Он хранится в корне системного раздела и загружается BIOS/UEFI для инициализации процесса загрузки.

Взаимодействие с BIOS/UEFI

Источник: Xataka Windows / BIOS и UEFI

Источник: Xataka Windows / BIOS и UEFI

BIOS и UEFI — это программные интерфейсы, которые находятся на границе между аппаратным обеспечением компьютера и операционной системой. Их основная задача — инициализировать и тестировать оборудование перед запуском операционной системы, а также передать управление загрузчику (в данном случае Windows Boot Manager).

BIOS работает в режиме реального времени и использует MBR (Master Boot Record) для управления загрузкой. В случае с BIOS Windows Boot Manager хранится на системном разделе, и управление передается через указание на загрузочный сектор диска, который запускает bootmgr.

UEFI является более современным интерфейсом и поддерживает работу с GPT (GUID Partition Table), что позволяет управлять загрузкой более эффективно и использовать объемы дисков, превышающие 2 ТБ. В UEFI Windows Boot Manager находится в разделе EFI, и управление передается через специальный загрузочный менеджер UEFI, который запускает bootmgfw.efi (аналог bootmgr в среде UEFI).

BIOS и UEFI могут работать в разных режимах. Для Windows это может быть либо Legacy BIOS, либо UEFI. При использовании UEFI возможна работа в режимах Secure Boot, который предотвращает загрузку неподписанного кода, тем самым защищая систему от вредоносных программ.

Можно ли отключить Windows Boot Manager?

Источник: Make Use Of / Windows Logo

Источник: Make Use Of / Windows Logo

Технически, Windows Boot Manager можно отключить, но это не рекомендуется для стабильной работы системы. Boot Manager является ключевым компонентом процесса загрузки Windows и управляет выбором операционной системы, настройками конфигурации загрузки и взаимодействием с ядром системы.

Отключение Boot Manager может привести к ряду проблем, таких как невозможность загрузить операционную систему, нарушение конфигураций многозагрузочных систем или повреждение данных загрузки.

Почему не рекомендуется отключать Boot Manager

  • Отключение Windows Boot Manager может сделать систему нестабильной или даже нерабочей. Этот компонент управляет процессом загрузки и обеспечивает правильную передачу управления ядру ОС. Без него Windows не сможет корректно загружаться;

  • Если на вашем компьютере установлено несколько операционных систем (например, Windows и Linux), отключение Boot Manager приведет к потере возможности выбирать между ними при загрузке. Это может усложнить процесс управления многозагрузочными конфигурациями;

  • В современных системах с UEFI и Secure Boot отключение Boot Manager может привести к нарушению работы системы безопасности, а также вызвать ошибки при загрузке ОС;

  • Boot Manager опирается на файл конфигурации BCD для управления параметрами загрузки, такими как выбор операционной системы или безопасный режим. Без Boot Manager система не сможет корректно обрабатывать эти параметры.

Временное отключение

Если необходимо временно отключить или скрыть меню Windows Boot Manager, это можно сделать путем изменения настроек. Однако важно понимать, что такое отключение является временной мерой, и система будет по-прежнему использовать Boot Manager для загрузки.

Можно настроить время отображения меню выбора операционной системы. Для этого нужно изменить тайм-аут в файле BCD с помощью утилиты bcdedit. Например:

  • bashCopy codebcdedit /timeout 0

Это отключит отображение меню выбора ОС, и система будет загружаться автоматически без задержки.

Если на компьютере установлено несколько операционных систем, можно выбрать одну из них по умолчанию и автоматически загружать её, не отображая меню выбора. Это можно сделать через настройки системы:

  • Нажмите Win + R, введите msconfig.

Источник: CQ / Windows 11

Источник: CQ / Windows 11

  • В разделе «Загрузка» выберите нужную ОС и установите ее по умолчанию.

Источник: CQ / Windows 11

Источник: CQ / Windows 11

  • Установите таймер загрузки на 0 секунд.

Альтернативные варианты загрузки одной ОС

В системах с UEFI вы можете настроить загрузку ОС напрямую через интерфейс UEFI, выбрав в меню загрузки нужный диск или раздел, содержащий операционную систему. Это позволяет загружаться в обход некоторых функций Boot Manager, но в случае сбоя все равно потребуется восстановить Boot Manager.

Существуют сторонние загрузчики, такие как GRUB (обычно используется в системах Linux), которые могут управлять процессом загрузки на уровне выше, чем Boot Manager. Однако использование таких загрузчиков требует знаний и конфигурации и может привести к дополнительным сложностям в системах с Windows.

Заглавное фото: HP

Multi-booting, and particularly dual-booting Windows and Linux, is becoming more and more mainstream with each passing year. On a PC with multiple operating systems (OS), the Windows Boot Manager is what lets the user pick which OS to boot to.

Of course, in single-OS systems, it’s usually better to disable Windows Boot Manager. Unless you’ve made multiple boot entries from a single OS, all it does is make the boot process longer for no reason.

In any case, we’ve listed all the necessary steps to enable or disable Windows Boot Manager via both GUI and Command-Line in the guide below.

Enable or Disable Boot Manager via GUI

As usual, the GUI method is very convenient but doesn’t allow for much flexibility. It’s very easy to enable or disable the Windows Boot Manager, but there’s not much room for further modification. Regardless, here are the necessary steps:

  1. Press Windows + R, type systempropertiesadvanced, and press Enter.
  2. In the Startup and Recovery section, click on Settings.
    system-properties-startup-and-recovery-settings

  3. To enable BOOTMGR, turn on the checkmark for the Time to display list of operating systems options.
  4. Set the time in seconds. The default value is 30, but you can replace it with however many seconds (3 – 999) you want the Boot Manager screen to display before the timeout expires and loads the default Boot Entry.  
  5. Press OK to apply the changes.
  6. To disable BOOTMGR, uncheck the Time to display the list of operating systems box.
    time-to-display-list-of-operating-systems

  7. Press OK to apply the changes.

Enable or Disable Boot Manager via Command Line

The CLI method is somewhat technical but allows for lots more ways to modify the Windows Boot Manager.

You’ll use the bcdedit command to enable/disable Bootmgr. Keep in mind that you may need to turn off Secure Boot or BitLocker for bcdedit to function properly. With that said, here are the necessary steps:

  1. Press Windows + R to launch Run.
  2. Type cmd and press CTRL + Shift + Enter to launch Elevated Command Prompt.
  3. To enable BOOTMGR, type the following commands and press Enter after each:
    bcdedit /set {bootmgr} displaybootmenu yes
    bcdedit /set {bootmgr} timeout 30

    Note: You can replace 30 with however many seconds (3 – 999) you want the Boot Manager screen to display for before the timeout expires and loads the default Boot Entry.
    bcedit-bootmgr

  4. To disable BOOTMGR, type the following command and press Enter:
    bcdedit /set {bootmgr} displaybootmenu no

How to Modify Boot Manager

Modifying bootmgr not only includes enabling and disabling it, but also adding or removing an entry, editing the display order, changing the default entry, and much more.

Add New Boot Entry to Bootmgr

You can create multiple new boot entries for an operating system and customize each to have a different set of configurations. The easiest way to do so is to copy an existing boot entry and then modify it. Here’s how you can do that:

  1. Type the following command in the elevated command prompt:
    bcdedit /copy {current} /d "TestEntry"
    Copy-Boot-Manager

  2. Current is the last used boot entry. If you want to use another boot entry, replace current with any other identifier value as appropriate.
  3. Change TestEntry to whatever you wish to name the new entry.
  4. Finally, press Enter to execute the command.
  5. You’ll receive a message similar to: 
    The entry was successfully copied to {1f126914-2e93-11e5-a85b-be1ae2100b04}.

Here, the value inside the curly brackets is the new entry’s GUID. You can use this ID to modify this boot entry however you wish.

Remove or Delete Boot Entry

Removing a boot loader entry removes it from the boot menu, but it will still be present in the BCD store. You’ll need to delete it instead to remove it entirely. Here are the steps to do so via GUI:

  1. Press Windows + R, type msconfig, and press Enter.
  2. Switch to the boot tab.
  3. Select the boot entry you wish to delete and press the Delete button.
    delete-boot-entry-gui

With the command line, you can choose to remove it or delete it as you prefer. You can do either using the steps listed below:

  1. Press Windows + R, type cmd and press CTRL + Shift + Enter.
  2. Type bcdedit and press Enter.
  3. Under each Windows Boot Loader section, check the value of the device element. Once you’ve identified the appropriate partition, note the value of identifier above it.
  4. To remove the boot entry, replace identifier with its value from Step 3 and use the following command:
    bcdedit /displayorder {identifier} /remove
    bcdedit-displayorder-remove

  5. To delete the boot entry, replace identifier once again and use the following command:
    bcdedit /delete {identifier}

Edit Display Order on a Multi-Boot Menu

You can set the display order of boot entries on a multi-boot menu using the /displayorder switch.

  1. In an elevated command prompt, execute the bcdedit command and note the value of identifier for each entry.
  2. Replace the IDs with the boot entry’s GUID or a reserved identifier like {current} and use the following command:
    bcdedit /displayorder {ID1} {ID2}
  3. Add as many more {IDs} as appropriate depending on how many entries you have. Don’t forget the curly brackets and space between the identifiers.

E.g. if you use the following command: 
bcdedit /displayorder {current} {9f25ee7a-e7b7-11db-94b5-f7e662935912} {e16cd9d6-379f-11e5-99d4-de034410edac}

display-multiple-boot-menu

This sets the display order as: 

  • current
  • 9f25ee7a-e7b7-11db-94b5-f7e662935912
  • e16cd9d6-379f-11e5-99d4-de034410edac

Alternatively, you can also use the /addfirst and /addlast modifiers to directly add an entry as the first or last items respectively on the Boot Manager menu. E.g.
bcdedit /displayorder {5370b175-2e93-11e5-a85b-be1ae2100b04 } /addfirst

Change Default OS in Windows Boot Manager

You can easily change the default OS in Windows Boot Manager via System Configuration. Here are the steps to do so:

  1. Launch System Configuration using the run command msconfig.
  2. In the boot tab, select the OS you want to set as the default one.
  3. Click on Set as Default and press OK to apply the changes.
    set-as-default-system-config

You can also specify the default boot entry by using the bcdedit /default {ID} command in Elevated Command Prompt. Don’t forget to replace ID with the appropriate value of the boot entry though.

How to Get Windows 7 or Windows 10 Style Dual Boot Screen?

Here are the steps to get the dual boot screen you want using the bootmenupolicy parameter:

  1. Open Elevated Command Prompt and use the commands listed below as appropriate.
  2. For the Windows 10 style Metro Boot Loader:
    bcdedit /set {default} bootmenupolicy standard
    bootmenupolicy

  3. For the Windows 7 style Classic Boot Loader:
    bcdedit /set {default} bootmenupolicy legacy

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Обычная загрузка windows по умолчанию
  • Hkey local machine software microsoft windows nt currentversion profilelist
  • Windows server evaluation license
  • Потянет ли core 2 duo windows 10
  • Как почистить службы windows 7