- Что такое Windows Boot Manager – как работает и как его отключить
- Взаимодействие Windows boot manager и BIOS
- Функции менеджера загрузки
- Типы загрузчиков
- Расположение загрузчика
- Структура bootmgr
- Отключение менеджера загрузки
- Распространённые ошибки
- Bootmgr is missing
- Bootmgr is compressed
- Windows boot manager boot failed
- Как отключить Windows Boot Manager
- Что такое Windows Boot Manager и зачем его отключать
- Как отключить Менеджер Загрузки Windows
- Способ №1. Отключение Windows Boot Manager с помощью командной строки
- Способ №2. Отключение Windows Boot Manager с помощью BIOS
- Изучаем Bootmgr. Часть 1 — инструментарий и основные принципы отладки начальных этапов загрузки ОС Windows
- 1. Достаем код Bootmgr из системы
- 2. Дизассеблируем bootmgr.exe
- 3. Отладка Bootmgr на связке QEMU + IDA Pro
- 3. Отладка на связке WinDbg + VirtualBox
- 4. Отлаживаем загрузку с VHD
- Заключение
Что такое Windows Boot Manager – как работает и как его отключить
Запуск операционной системы на компьютере начинается с запуска Windows boot manager, менеджера загрузки операционных систем. Данная подпрограмма запускает все необходимые для нормального функционирования системы процессы.
Windows boot manager – комплекс программ и команд, ответственных за загрузку системы и инициализацию компонентов компьютера. Его работа позволяет загружать операционную систему (ОС) на компьютере. Поскольку это комплекс компонентов, повлиять на него напрямую невозможно. Есть специальная утилита, расположенная в разделе «Загрузка» при открытии «msconfig».
Через данное окно подключаются или отключаются модули в конфигураторе запуска, что меняет настройки bootmgr (сокращённое название менеджера загрузки).
Взаимодействие Windows boot manager и BIOS
В целом можно утверждать, что функции комплексов BIOS и bootmgr взаимосвязаны и чем-то похожи. Первый запускает все компоненты компьютера, вводит их в работу и настраивает возможность обмена командами между пользователем и компьютером. Второй после этого принимает управление на себя и запускает другие системные программы, которым и будет отдано управление после. Следующая схема наиболее наглядно иллюстрирует порядок передачи управления компьютером операционной системе.
Порядок старта подразумевает, что при инициализации BIOS включается системный диск (не раздел диска, а именно жёсткий диск с ОС), где расположен bootmgr, который выгружается в оперативную память. Далее под управление Windows boot manager происходит запуск компонентов ОС и управление переходит уже к ним.
Функции менеджера загрузки
При запуске ОС выполняются следующие действия:
- инициализация компонентов компьютера для работы в составе системы;
- запись ядра ОС в оперативную память;
- первичная настройка загруженного ядра;
- передача управления ядру.
В следующий раз менеджер будет вызван только при старте системы. Он будет находиться в режиме ожидания пока компьютер включён.
Типы загрузчиков
Следует отметить, что для операционной системы Windows существует всего 2 типа загрузчиков: NTLDR и Bootmgr. Для других ОС используются свои. Независимо от того, какой менеджер используется, заставить работать его с другим можно только через BIOS.
Расположение загрузчика
Физически Windows Boot Manager располагается на жёстком диске. Но перейти к нему через проводник не удастся (кроме случаев, когда настройка выполняется специально для этого). Физическое расположение менеджера привязано к скрытому системному разделу на диске – «Зарезервировано системой».
Структура bootmgr
Структура полностью является собственностью компании Microsoft, поэтому файл разобран энтузиастами и изучен не до конца. Основная информация касается порядка использования компонентов: MBR — PBR (VBR) — BOOTMGR — winload.exe — NTOSKRNL.EXE — HAL.DLL. Попробуем разобрать назначение этих компонентов:
- MBR – основная запись загрузчика (примерный перевод). Это первые 512 байт носителя, который хранит в себе основную информацию об инициализации устройства и его содержимом. Эта информацию сообщает о том, что и откуда загружать.
- PBR(VBR) – частичная запись загрузчика (или запись загрузчика раздела). Управление к ней переходит, когда MBR даёт информацию обо всех наличествующих на диске PBR. В свою очередь в данной записи хранится информация о том, какой код необходимо запустить первым.
- BOOTMGR – менеджер загрузки. На него ссылается PBR во время запуска компьютера. С момента, когда вступает в работу эта утилита начинается полноценная загрузка Windows 7, 8 или 10. Здесь выполняется подготовка к запуску системы. В пределах этой утилиты происходит сброс контроллера диска (передача полномочий от предыдущих элементов следующим) и инициализации шины, которая отвечает за работу устройств.
- Winload.exe – запускает драйвера в пределах ОС. Это в свою очередь позволяет Windows получить контроль над компьютером.
- NTOSKRNL.EXE – ядро операционной системы. Этот элемент отвечает за полноценный запуск Windows.
- HAL.DLL – библиотека абстрагирования, которая позволяет остальным компонентам свободно взаимодействовать с реальными элементами компьютера.
А вот сам Bootmgr изучен ещё не окончательно. Условно он делится на следующие блоки:
- 16-ти битный сегмент. Есть только теории, потому как интерпретация кода затруднена. Данный фрагмент кода отвечает за предварительную подготовку процессора к старту загрузки.
- PE-образ. Энтузиасты теряются в догадках о его назначении. Наиболее правдоподобно выглядит теория о том, что это пустышка, которая будет заполнена позднее необходимыми данными.
- Запакованный загрузчик. Исходя из теории о предыдущем разделе следует, что после записи образа будет использоваться файл bootmgr.exe задача которого обработать предыдущую «болванку», заполняя её необходимой информацией.
Сложность процедуры дизассемблирования кода и его дальнейшего чтения замедляет изучение менеджера загрузки. И ни капли не упрощает для пользователя исправление его ошибок.
Отключение менеджера загрузки
Отключить Windows Boot Manager можно в БИОСе. Непосредственно вместо инициализации выбранной системы будет происходить инициализация другой из указанного места. В «Boot Priority» BIOS выставляется другая очередь запуска.
Распространённые ошибки
Менеджеру загрузки характерны следующие ошибки.
Bootmgr is missing
Данная ошибка указывает на отсутствие манифеста на диске. Возникать она может в разных ситуациях:
- файл повреждён;
- неверно настроен порядок использования файлов;
- жёсткий диск отключён.
Решение данных проблем возможно через установку правильного порядка загрузки в BIOS. Если же файл повреждён, то в следующем пункте будет указано решение.
Bootmgr is compressed
При старте компонента возникла ошибка. Это событие может быть результатом повреждения жёсткого диска или самого bootmgr. Исправление сложное, но всё-таки доступно даже рядовому пользователю.
Потребуется найти установочный диск Windows, запустить установку ОС и дойти до пункта выбора места установки. Вместо того, чтобы разбивать жёсткий диск возвращаетесь на шаг назад и запускаете командную строку. В неё вводится следующая команда: bootrec.exe /fixmbr. Таким образом будет записан стандартный вид менеджера загрузки и Виндовс может запуститься в нормальном режиме. Данная мера является крайней!
Способ также устраняет проблему — Bootmgr is missing.
Windows boot manager boot failed
Это ошибка запуска самого bootmgr. В целом помогает исправить данную проблему перезагрузка. Но если она повторяется и после перезагрузки, описанный выше способ окажется полезнее.
Это не полный список ошибок, но перезапись компонента решает их почти гарантировано. В противном случае крайне вероятна поломка жёсткого диска и он подлежит замене.
Как отключить Windows Boot Manager
В этой статье мы рассмотрим два способа, которые позволят любому пользователю с базовыми знаниями ПК отключить Windows Boot Manager в считанные минуты.
Что такое Windows Boot Manager и зачем его отключать
Windows Boot Manager (BOOTMGR, Диспетчер Загрузки Windows) — это часть программного обеспечения Windows, которая отвечает за загрузку ОС Windows в оперативную память. Когда происходит включение компьютера, BIOS производит начальные тесты систем, а затем передает управление MBR, где, собственно, и находится диспетчер загрузки Windows.
Особенно хорошо эта служба знакома пользователям, которые используют на своем ПК сразу две операционные системы. Как только прошел внутренний этап подготовки компьютера, Windows Boot Manager предлагает пользователю выбрать интересующую его ОС: Windows или, допустим, Linux. В обычной ситуации просто выбирается нужная система и происходит запуск устройства — в других же случаях, например, нежелание тратить время на лишнее ожидание — мы хотим изменить положение.
Как отключить Менеджер Загрузки Windows
Способ №1. Отключение Windows Boot Manager с помощью командной строки
1. Откройте утилиту Выполнить с помощью комбинации клавиш Windows + R .
2. Введите команду cmd и нажмите клавишу Enter .
3. В открывшемся окне командной строки введите команду msconfig и нажмите клавишу Enter .
4. Теперь откройте раздел Загрузка .
5. Измените значение параметра Таймаут на 0 или другое минимальное доступное число.
6. Примените внесенные изменение и закройте утилиту.
Теперь Windows Boot Manager на вашем устройстве либо отключен либо не заставит больше ждать долгие стандартные 30 секунд. Чтобы проверить результат работы, перезапустите, пожалуйста, компьютер.
Способ №2. Отключение Windows Boot Manager с помощью BIOS
Этот метод решает вопрос путем выбора одного конкретного диска, с которого, впоследствии, будет загружаться операционная система. Давайте рассмотрим процесс на практике.
- Завершите работу компьютера.
- Запустите устройство в режиме BIOS .
- Найдите параметр First Boot Device и укажите нужный системный диск.
- Закройте BIOS и перезапустите компьютер.
По завершению этих действий Менеджер Загрузки Windows больше не должен вас беспокоить.
Изучаем Bootmgr. Часть 1 — инструментарий и основные принципы отладки начальных этапов загрузки ОС Windows
Возможно некоторые читатели помнят мою самую первую статью на ресурсе, посвященную загрузке 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. то есть обыкновенный двоичный образ. Монтируем этот образ
На смонтированном разделе мы увидим следующее содержимое
Для нас представляет интерес файл bootmgr. Однако, прежде нам нужен не совсем он, а 32-разрядный образ загрузчика bootmgr.exe, который находится в bootmgr в упакованном виде. Для его распаковки необходимо использовать утилиту bmzip, которая написана в общем-то для Windows (с наскока собрать её под Linux не вышло), поэтому распаковку выполним на виртуальной машине. Бинарную сборку этой утилиты, которая бы работала нормально оказалось довольно трудно найти, несмотря что тут дана ссылка на неё. В итоге, пакет был найден на каком-то из сайтов, посвященных кастомизации bootmgr. Для работы bmzip оказалась необходима библиотека MSCompression.dll. Готовый к работе пакет теперь можно скачать тут.
Создадим на диске ВМ папку utils и скопируем туда bmzip.exe вместе с MSCompression.dll. Отмонтируем образ и запустим ВМ. Запустим командную строку от имени администратора. Чтобы случайно не попортить загрузчик сделаем его копию
Файл загрузчика является скрытым и системным, поэтому снимем с него эти атрибуты
В итоге получаем распакованный образ bootmgr.exe
Выключаем ВМ и снова монтируем её диск в линуксе. Создадим какую-нибудь папку, где будем потрошить загрузчик дизассемблером и скопируем туда распакованный образ
2. Дизассеблируем bootmgr.exe
Теперь скормим полученный «экзешник» дизассемблеру. Например IDA Pro. Запустим «иду» и откроем в ней добытый файл.
IDA верно идентифицирует файл как 32-разрядный исполняемый файл формата PE. Жмем ОК. Теперь, если в IDA Pro установлен плагин для работы с pdb-файлами, по ходу дизасеммблирования нам предложат загрузить отладочные символы, и не откуда нибудь, а сайта Microsoft.
Соглашаемся и получаем такую картину
Ага, слева мы видим прототипы функций, содержащихся в исследуемом файле, благодаря тому что согласились загрузить отладочные символы. Это очень сильно облегчит нам последующую работу. А пока определим точку входа в код загрузчика, и нетрудно догадаться что это будет функция BmMain(). Однако, не принимая это на веру жмем Ctrl + E
убеждаясь что наша догадка верна — BmMain() является точкой входа, расположенной по адресу 0x401000. Жмем ОК и перемещаемся на начало кода
Видим мы заголовок функции BmMain() с внушительным списком локальных переменных, и чуть ниже и сам код функции
Разобраться в мешанине ассемблерного кода довольно трудно, да и не зачем этого делать. Прежде всего определимся с тем, какие функции загрузчика мы хотим изучить. Я что-то там говорил о VHD? Ну так поищем среди кода что-нибудь, касающееся виртуальных дисков. Щелкаем правой кнопкой по списку функций слева и в вывалившемся контекстном меню выбираем «Quick filter» (или перейдя в окно с прототипами жмем Ctrl + F). В строке поиска набираем «vhd» и…
да, таковые функции имеются в количестве 33 штук. Среди них VhdOpen() очевидно будет отвечать за открытие виртуального диска, а вот например VhdiVerifyVhdFooter() как пить дать отвечает за проверку футера VHD-диска на корректность. То есть мы примерно представляем себе, куда будем ставить точки останова в отладчике. Кстати, поговорить об отладке самое время
3. Отладка Bootmgr на связке QEMU + IDA Pro
Запускаем виртуальную машину с ключами -s -S — это включает режим отладки
ВМ запускается и сразу же становится на паузу, ожидая подключения отладчика
Важно! Ни в коем разе не используйте ключ -enable-kvm применяющий аппаратную виртуализацию. При её использовании отладка в QEMU не работает.
Теперь на панели инструментов в IDA выбираем отладчик «Remote GDB debugger»
Ответив «Да» на несколько заданных нам вопросов получим окошко
где вобьем параметры соединения с ВМ: localhost на порту 1234. Жмем ОК. Нам сообщат, что некоторый процесс уже запущен и ожидает подключения отладчика — не хотим ли мы присоединится к нему? Конечно же ходим!
Поэтому отвечаем «Да» и.
мы встаем на паузу где-то в начала bios виртуальной машины. Великолепно, но теперь мы должны добраться до того места, где начинает выполнятся bootmgr. Ставим точку останова на функции BmMain(). Нажимаем на панели инструментов список точек останова, жмем Insert на клавиатуре и указываем на каком адресе мы хотим прервать выполнение кода и перейти в отладку
Вбиваем адрес 0x401000. Если же мы хотим поставить бряк на нужную нам функцию, то идем в главное меню и открываем в сеансе отладки список функций: View -> Open subviews -> Functions. В появившемся списке правой кнопкой мыши вызываем контекстное меню и выбираем Add breakpoint. Теперь жмем F9 и после недолгого ожидания попадаем в самое начало кода загрузчика
Теперь мы можем проходить код по шагам, смотреть значения регистров и стека, отслеживать стек вызовов и так далее. В какой-то степени отладчик, встроенный в IDA удобен и интуитивно понятен.
Возможно меня спросят — а можно ли использовать GDB? Можно, запускаем ВМ в режиме отладки, запускаем gdb в консоли
Подключаемся к удаленной сессии ВМ
Включаем отображение дизассемблированных инструкций
Если вас не устраивает синтаксис AT&T переключаемся на интел
Ставим точку останова на BmMain() и запускаем исполнение
Пожалуйста, мы видим почти тоже самое, что видели в IDA, располагая при этом всей мощью GDB. Почти, потому что тут мы не сумеем использовать отладочные символы от Microsoft, ибо GDB их не понимает. Но возможности GDB не в пример более широки, чем возможности IDA именно в плане процесса отладки и его автоматизации.
Однако, существует ещё одна возможность отладки, мимо которой пройти нельзя
3. Отладка на связке WinDbg + VirtualBox
Те, кто занимается разработкой драйверов для ОС Windows безусловно знакомы с этим замечательным отладчиком. Замечателен он тем, что имеет возможности сравнимые с возможностями линуксового GDB. Единственным его недостатком является жуткий способ настройки его интерфейса. Но мы опустим эти моменты, а обратимся к возможностям данного отладчика для решаемой нами задачи.
Итак, пускай на у нас имеется ВМ на основе VirtualBox. Создадим для этой ВМ COM-порт со следующими параметрами
Это виртуальный COM-порт, пробрасываемый в именованый канал. Для отладки через последовательный порт виртуальную машину следует настроить соответствующим образом. Загружаем её и запускаем консоль с административными правами. С ней вводим команды настройки загрузчика для отладки
Эта команда включит возможность отладки загрузчика. Далее настроим порт для отладки
Указываем, что мы используем COM1 со скоростью 115200 бод. Отлично, выключаем ВМ и запускаем отладчик.
Отладчик WinDbg можно скачать официально с сайта Microsoft вместе с комплектом для разработки драйверов. Однако у этой сборки отладчика есть проблема — глюк с отображением значений регистров. Поэтому я использую сборку, которая качается с того же сайта редмодовцев, на которую ведет ссылка из твитера некоего Доминика Вонга. В этой сборке данный баг отсутствует. Запускаем WinDbg следующей командой
Откроем настройки интерфейса (File -> Open Workspace in File) в который среди прочих параметров сохранен путь http://msdl.microsoft.com/download/symbols для загрузки отладочных символов с серверов Microsoft. У меня этот путь заранее вбит в настройки (File -> Symbol File Path) и сохранен в теме для WinDbg. Такая настройка позволит нам автоматически получить отладочную информацию для загрузчика.
Теперь запустим ВМ. Практически сразу она встанет на паузу, а в окне отладчика мы увидим следующую картину
Ага, отладчик подключился к ВМ и встал на точке, любезно предоставленной нам майкрософтом. Ну что же, теперь нам доступны все возможности отладки с использованием windbg.
Однако мы останавливаемся не в самом начале кода загрузчика, а чуть дальше. Как показывает пошаговая отладка мы находимся как раз за функцией BlInitializeLibrary() которая обеспечивает начальную инициализацию оборудования
и, при отладке при помощи IDA мы сюда просто не попадаем. Таким образом, при отладке с WinDbg от нас ускользает часть действий bootmgr сразу после его запуска. В этом заключается недостаток использования стандартных средств отладки, предоставленных Microsoft. Однако, недоступный код мы всегда сможем исследовать отдельно с помощью IDA.
Теперь, в качестве примера, посмотрим на то, как bootmgr работает с образами VHD фиксированного размера.
4. Отлаживаем загрузку с VHD
Всё ниже следующее рассматривается на отладчике WinDbg, подключенном к ВМ на VirtualBox, но в равной степени справедливо и для других методов отладки, с учетом их особенностей. ВМ, используемая в данном примере содержит две системы: одна установлена на HDD, другая на VHD образ. Поставим точку останова на функции VhdOpen()
и нажмем F5. Отладчик встанет на указанной функции
Причем, внимание — мы ещё вообще не заходили в меню загрузки и не выбирали загрузку из VHD. А это означает, что проверка VHD происходит задолго до появления меню. Такое же поведение мы и наблюдаем, например если подсунем bootmgr пустой VHD. Меню загрузки нам вообще не покажут, а покажут ошибку с кодом 0xc000000F.
Проходим чуть дальше, нажимая F10 или вводя в комадной строке p и дойдем до вызова VhdiAllocateVhdData() — очевидно это создание в памяти некоторых структур для работы с образом
Чуть ниже расположен вызов VhdiVerifyAndInitializeVhd() — очевидно проверка корректности образа. Это показалось мне интересным и я пошел внутрь (F11)
Ниже, после некоторых подготовительных операций загрузчик читает последние 512 байт образа, в которых содержится так называемый «футер» образа, вызывая функцию VhdiReadVhdInformation(). Не надо ходить к гадалке, чтобы понять — функция возвратит указатель на структуру, содержащую данные футера. Как мне удалось выяснить, этот указатель, после вызова VhdiReadVhdInformation() оказывается в регистре ecx. Его значение равно 0x110098. Посмотрим на память по тому адресу
Команда читает память по указанному адресу, выводя её в окно отладчика в виде последовательности байт
Ага, мы видим знакомое слово — conectix. Это поле предваряет футер VHD образа, носит название cookie и хранит память о том, что Microsoft купила технологию VHD у фирмы Conectix, которая разработала данный формат виртуальных дисков для старых компьютеров Macintosh, Это несомненно футер VHD, мы можем видеть тут сигнатуру операционной системы в которой он был создан (Wi2k) а так же последовательность win указывает на то, что VHD создан средствами Windows. Да, все так и было. Пройдя чуть дальше мы натыкаемся на вызов VhdiVerifyVhdFooter() проверяющий формат футера. В качестве параметра он получает указатель на вышеописанную структуру, почему-то через регистр esi (. )
Этот участок кода интересовал меня больше всего, поэтому где-то с помощью IDA Pro, где-то руками, я преобразовал его в псевдокод на C
Футер VHD можно представить в виде следующей структуры (в комментариях указаны смещения от её начала).
Пользуясь этими данными можно сделать вывод о том, какие поля футера проверяет bootmgr и какие ошибки он выбрасывает. При корректном VHD образе данная функция возвращает ноль, в иных случаях расклад таков
Полученная мной информация решила спор возникший с коллегой по форуму, на котором обсуждалась методика загрузки Windows с VHD. Я его проиграл, считая что образы, созданные VirtualBox не будут грузится с помощью bootmgr. VirtualBox, создавая такие образы пишет все поля в соответствии со спецификацией Microsoft, кроме поля creator_application, куда записано win в оригинальном образе и vbox в случае с виртуалбоксом. Но это поле не проверяется bootmgr-ом, так что диски работают, а у меня они не работали по совсем другой причине, которая является предметом совсем другой истории.
Заключение
Возможно, статья несколько сумбурна. Но, она говорит о том, что горшки обжигают не боги, а отладка низкоуровневого кода Windows лишь дело техники. Интересующую вас информацию всегда можно получить, приложив к этому голову и руки. В этом тексте я попытался обобщить разрозненную информацию, собранную мной в сети по вопросам отладки bootmgr. Надеюсь что у меня это получилось, благодарю всех читателей за внимание и.