Как называется загрузчик windows

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

Что такое загрузчик Windows 10

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

Загрузчик Windows 10 — это программное средство, ответственное за запуск операционной системы Windows 10 при включении компьютера. Загрузчик выполняет несколько ключевых задач, обеспечивая корректную и стабильную загрузку операционной системы. Вот некоторые основные функции загрузчика Windows 10:

  • Загрузка ядра операционной системы. Компонент запускает ядро операционной системы, начиная процесс загрузки. Ядро является основным элементом операционной системы, отвечающим за взаимодействие с аппаратной частью и управление ресурсами компьютера.
  • Загрузка драйверов. Загрузчик может активировать необходимые драйверы, которые обеспечивают взаимодействие с аппаратной частью компьютера, таким как драйверы для видеокарты, звуковой карты и других устройств.
  • Управление загрузочными параметрами. Загрузчик также предоставляет возможность выбора различных параметров загрузки, таких как безопасный режим, последняя известная настройка и другие опции, которые могут помочь в устранении проблем с загрузкой системы.

Обычно загрузчик Windows 10 (и более ранних версий Windows) называется NTLDR (New Technology Loader), а также используется Boot Configuration Data (BCD) для хранения информации о параметрах загрузки и настройках системы.


Интересно, что, несмотря на название, загрузчик операционной системы загружается далеко не первым. При включении компьютера первой активируется система UEFI, которая ищет раздел EFI на диске и запускает загрузчик. Только после этого он активирует работу операционной системы.

Почему загрузчик Windows может сломаться

Существует множество причин, по которым может возникнуть сбой загрузчика Windows. В основном они касаются программного обеспечения, но также проблемы могут возникать из-за аппаратной части или даже из-за действий пользователя. Перечислим некоторые из наиболее распространенных причин появления ошибки загрузчика Windows:

  • Повреждение загрузочного сектора. Если загрузочный сектор на жестком диске поврежден, загрузчик может не суметь правильно прочитать информацию о загрузке операционной системы. Иные сектора с поврежденными данными или физическими повреждениями также могут вызвать сбой загрузчика.
  • Изменения в конфигурации оборудования. Подключение нового оборудования или изменения в существующей конфигурации (например, замена жесткого диска или видеокарты) могут вызвать сбои загрузчика, если операционная система не может адаптироваться к изменениям.
  • Вирусы и вредоносное ПО. Атаки вирусов или вредоносных программ могут повредить системные файлы, включая те, которые отвечают за загрузку операционной системы.
  • Неудачные обновления. Некорректно установленные или несовместимые обновления операционной системы могут привести к сбоям загрузчика.
  • Неправильные настройки BIOS/UEFI. Некорректные параметры в настройках Basic Input/Output System (BIOS) или Unified Extensible Firmware Interface (UEFI) могут затруднить правильную загрузку операционной системы.
  • Неправильные действия пользователя. Сейчас Windows практически не дает изменять системные файлы. Но долгое время ошибка загрузчика ntldr vis missing or invalid возникала из-за того, что пользователь просто удалял неизвестный ему файл в корне диска. Если подобное случалось, приходилось срочно искать, как восстановить загрузчик Windows 7 или систем более ранних версий.
  • Установка еще одной операционной системы на диск. Сейчас большинство ОС просто удаляют «конкурентов» с того диска, куда ставятся. Но при определенном упорстве можно установить на диск несколько операционных систем. Однако, при неверной установке загрузка некоторых ОС будет невозможна из-за того, что у операционных систем возник конфликт и чей-то загрузчик был удален.

Для исправления работы загрузчика Windows, часто требуется использование инструментов восстановления, таких как встроенные средства Windows, загрузка с установочного диска или USB-накопителя с образом системы.


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

Как восстановить работу загрузчика Windows

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

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

Полная переустановка Windows

Самый простой способ восстановить работу загрузчика Windows 10 — это переустановить всю операционную систему. Учитывая, что сегодня это действие можно выполнить буквально кликая кнопку «Далее», такой вариант — один из наиболее предпочтительных. Почему? Во-первых, он исключает неправильное восстановление загрузчика. Во-вторых, он гарантирует, что в системе не останется того ПО, вирусов, некорректных обновлений, которые стали причиной поломки. Дополнительный плюс — не нужно искать командную строку, чтобы восстановить загрузчик, все делается средствами Windows 10.


Важно! Перед переустановкой ОС обязательно скопируйте все нужные файлы. Если ваш компьютер не грузится, можно изъять из него жесткий диск и подключить к другому устройству, чтобы забрать данные с рабочего стола, папки загрузок и других мест, где они могли бы храниться. Кроме того, возьмите себе за правило не хранить на системном диске важных данных — как раз на такой случай.

Дадим алгоритм установки операционной системы, которому вам нужно следовать:

  1. Запустите компьютер с USB-накопителя (загрузочной флешки).
  2. После загрузки с USB-накопителя выберите язык, временную зону и другие настройки.
  3. Выберите «Установить Windows» и следуйте инструкциям мастера установки.
  4. Когда система спросит, укажите раздел на жестком диске, на который вы хотите установить Windows 10. Можно выполнить форматирование диска или выбрать уже существующий раздел. Во втором случае, скорее всего, сработает восстановление.
  5. Подождите, пока процесс установки завершится. Компьютер перезагрузится несколько раз.
  6. После перезагрузки следуйте инструкциям по настройке базовых параметров, таких как учетная запись пользователя, пароль, настройки безопасности и другие.
  7. После завершения установки Windows 10 установите необходимые драйверы для оборудования и программное обеспечение.

Эти шаги должны помочь вам выполнить переустановку Windows 10 с использованием загрузочного USB-накопителя. Убедитесь, что у вас есть резервные копии важных данных перед началом этого процесса, чтобы избежать потери данных.


После переустановки в некоторых случаях приходится активировать Windows заново. Об этом процессе мы писали в статье «Почему появляется надпись «Активация Windows» и как от нее избавиться».

Автоматическое восстановление средствами Windows

Если полная переустановка вам не по душе, то можно попытаться восстановить текущую систему с помощью функции восстановления. Для этого используйте загрузку с другого источника.

Загрузившись с флешки, выберите пункт «Поиск и устранение неисправностей» в меню, а после — укажите, что вам требуется пункт «Дополнительные параметры». Здесь у вас будет пункт «Восстановление при загрузке», который и нужно выбрать.

Меню загрузки Windows при автоматическом восстановлении

Меню загрузки Windows при автоматическом восстановлении

После восстановления система сама перезагрузится и попросит выбрать пользователя. Укажите себя, если пользователей несколько. Далее будет проведена диагностика компьютера — нужно немного подождать. В случае успеха или неудачи система оповестит вас. Если восстановление не сработало, можно нажать кнопку «Дополнительные параметры», чтобы вернуться в меню и попробовать другие способы, например, загрузить командную строку.

Неудачное восстановление системы Windows 10

Неудачное восстановление системы Windows 10

Восстановление системы из командной строки

Управление с помощью командной строки поможет восстановить загрузчик Windows с большей вероятностью, чем автоматический режим. Однако здесь необходимо ввести много команд вручную и точно понимать, что вы делаете. Ну и, конечно, нужно разбираться, что такое командная строка и как в ней работать.

Алгоритм действий при использовании командной строки выглядит следующим образом:

  1. Загрузитесь в Windows через Boot Menu или меню восстановления, вызовите консоль.
  2. Наберите в командной строке diskpart. Это вызов утилиты, с которой мы сейчас будем работать.
  3. Наберите в командной строке list volume. В списке, который появится на экране, необходимо найти букву диска, где располагается Windows. Если на компьютере работает EUFI, скорее всего, это скрытый том с разметкой FAT32. Запомните буквенное обозначение и метку нужного тома.
  4. Введите select volume и номер тома, который запомнили в предыдущем пункте.
  5. Введите format fs=fat32, если изначально том был отформатирован в FAT32 и format fs=ntfs, если изначально том был отформатирован в NTFS.
  6. Введите assign letter=Т, чтобы присвоить диску метку T. Вам нужно выбрать такую метку, которой нет у других дисков в системе.
  7. Введите exit, чтобы завершить работу инструмента.

Команда list volume показывает, какие имена и метки, а также файловые системы, есть у разделов на текущем компьютере.

Команда list volume показывает, какие имена и метки, а также файловые системы, есть у разделов на текущем компьютере.

После настройки диска необходимо использовать команду bcdboot. Вот пример ее написания: bcdboot C:\Windows /s T: /f ALL. В этой записи вы:

  • указываете местоположение Windows с помощью буквы диска;
  • указываете, в какой раздел будут копироваться файлы с помощью команды /s T:;
  • уточняете тип встроенного ПО целевого системного раздела. ALL означает, что это может быть и BIOS, и UEFI.

Команда bcdboot позволяет восстановить загрузчик Windows через командную строку. Изучите справку, если сомневаетесь в том, как именно ее использовать. Справка появляется, если вы введете в консоли bcdboot и нажмете Enter сразу же, не добавляя никаких подробностей.

Справка по команде bcdboot в консоли Windows

Справка по команде bcdboot в консоли Windows

Последний шаг в этом способе восстановления загрузчика — убрать присвоенную диску метку, чтобы Windows снова могла нормально работать. Для этого необходимо:

  1. Вновь открыть утилиту с помощью diskpart.
  2. Выбрать нужный диск с помощью команд list volume, select volume.
  3. Удалить метку диска командой remove letter=.
  4. Закрыть инструмент, написав exit.

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

Подготовка к восстановлению загрузчика — справка

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

Как создать загрузочную флешку

Независимо от того, хотите ли вы восстановить загрузчик Windows 10 через командную строку или в автоматическом режиме, вам потребуется загрузочная флешка. Несколько лет назад можно было бы написать «загрузочный носитель», но сейчас DVD-диски практически не используются. У многих даже нет дисководов. Большинство при восстановлении системы загружаются с флешки, поэтому о ней и будем говорить.

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

Раздел сайта, где можно скачать утилиту для создания загрузочной флешки

Раздел сайта, где можно скачать утилиту для создания загрузочной флешки

Программа установки Windows работает в полуавтоматическом режиме. Пользователю нужно лишь выбирать некоторые важные пункты. Вот основная последовательность действий:

  1. Примите лицензионное соглашение.
  2. Выберите пункт «Создать установочный носитель», когда система спросит, что вы хотите сделать.
  3. Выберите язык, выпуск операционной системы и архитектуру. Как определить разрядность Windows мы писали отдельно. Если вы создаете загрузочную флешку на будущее на том же устройстве, на котором будете ее с нее грузиться, можно предложить программе выбрать параметры, выставив значение «Использовать рекомендуемые параметры для этого компьютера».
  4. Выберите носитель, в нашем случае это USB-устройство. Необходимо вставить его в компьютер или ноутбук, предварительно сохранив все файлы. Обратите внимание, что файлы на загрузочной флешке оставлять нельзя: система удалит их.
  5. Подождите. Система уведомит о том, что работа выполнена.

Момент настройки выпуска, языка и архитектуры для создания загрузочной флешки

Момент настройки выпуска, языка и архитектуры для создания загрузочной флешки

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

Как загрузиться с загрузочной флешки

Если загрузчик Windows не работает, возобновление системы с помощью имеющейся ОС невозможно. Но мало создать загрузочную флешку, нужно суметь с нее загрузиться. Мы составили небольшую инструкцию, которая поможет вам выполнить нужные действия:

  1. Вставьте загрузочную флешку в компьютер.
  2. Перезагрузите компьютер и в процессе загрузки нажмите соответствующую клавишу (чаще всего это F2, F12, Esc или Del), чтобы войти в настройки BIOS/UEFI.
  3. В разделе Boot или Boot Priority выберите флешку как первое устройство загрузки.
  4. Сохраните изменения в BIOS/UEFI и перезагрузите компьютер. Обычно это делается путем выбора опции «Save & Exit» или подобной.

Когда компьютер перезагрузится, он должен автоматически начать загрузку с флешки. Если этого не происходит, возможно, вам нужно повторить шаги и убедиться, что флешка правильно подготовлена.

В этой статье мы подробно описали, как восстановить загрузчик Windows 10 штатными средствами, через командную строку и с помощью полной переустановки системы. Надеемся, что эти знания вам не потребуются и ваш компьютер всегда будет работать как часы. Кроме того, стоит обратить внимание на один момент: если вы видите, что на вашей технике последовательно выходит из строя тот или иной компонент Windows, возможно, проблема системная и кроется не в программной части. Или, наоборот, причина инцидентов — вирус, находящийся в локальной сети. Регулярные поломки требуют анализа и аудита, так как они свидетельствуют о более серьезной проблеме. Если вы не хотите подвергать опасности данные, хранящиеся на компьютерах в вашем офисе, позвоните нам. Наши системные администраторы и IT-специалисты проанализируют ситуацию и помогут решить вопрос раз и навсегда!

Материал из РУВИКИ — свободной энциклопедии

Загрузчик операционной системы — системное программное обеспечение, обеспечивающее загрузку операционной системы непосредственно после включения компьютера (процедуры POST) и начальной загрузки.

Загрузчик операционной системы:

  • обеспечивает необходимые средства для диалога с пользователем компьютера (например, загрузчик позволяет выбрать операционную систему для загрузки);
  • приводит аппаратуру компьютера в состояние, необходимое для старта ядра операционной системы (например, на не-x86 архитектурах перед запуском ядра загрузчик должен правильно настроить виртуальную память);
  • загружает ядро операционной системы (Ntoskrnl.exe в случае MS Windows) в ОЗУ. Загрузка ядра операционной системы не обязательно происходит с жесткого диска. Загрузчик может получать ядро по сети. Ядро может храниться в ПЗУ или загружаться через последовательные интерфейсы (это может пригодиться на ранней стадии отладки создаваемой компьютерной системы);
  • формирует параметры, передаваемые ядру операционной системы (например, ядру Linux передаются параметры, указывающие способ подключения корневой файловой системы);
  • передаёт управление ядру операционной системы.

На компьютерах архитектуры IBM PC запуск загрузчика осуществляется программным обеспечением BIOS, записанной в ПЗУ компьютера, после успешного окончания процедуры POST. Опишем процедуру, с помощью которой происходит загрузка с НЖМД IBM PC: BIOS производит чтение 512 байт первого сектора НЖМД (MBR) в ОЗУ по адресу 0x00007C00 (0x07C0:0x0000 в формате реального режима), затем прочитанному коду передаётся управление. Этот код читает и анализирует таблицу разделов жёсткого диска, а затем, в зависимости от вида загрузчика, либо передаёт управление загрузочному коду активного раздела жёсткого диска (см. Начальная загрузка компьютера), либо самостоятельно загружает ядро с диска (например, сетевого или съёмного) в оперативную память и передаёт ему управление. Первоначально загрузчик работает в режиме реальной адресации при отключенной адресной линии A20, что создает определенные трудности при написании загрузчиков.

Список примеров в этой статье не основывается на авторитетных источниках, посвящённых непосредственно предмету статьи.

Добавьте ссылки на источники, предметом рассмотрения которых является тема настоящей статьи (или раздела) в целом, а не отдельные элементы списка. В противном случае список примеров может быть удалён.

  • NTLDR — загрузчик ядра Windows NT/2000/XP.
  • Windows Boot Manager (bootmgr, winload.exe) — загрузчик ядра Windows Vista, Windows 7, Windows 8 и Windows 10.
  • LILO (LInux LOader) — загрузчик, в основном применяемый для загрузки ядра Linux.
  • GRUB (Grand Unified Bootloader Архивная копия от 26 ноября 2007 на Wayback Machine) — применяется для загрузки ядра Linux и Hurd (StartUp Manager).
  • OS/2 BootManager — загрузчик ядра OS/2.
  • RedBoot — загрузчик для встраиваемых систем. Домашняя страница RedBoot Архивная копия от 6 декабря 2008 на Wayback Machine.
  • SILO (SPARC Improved bootLOader) — загрузчик Linux и Solaris для машин с архитектурой SPARC. Домашняя страница SILO Архивная копия от 20 марта 2008 на Wayback Machine.
  • Loadlin — загружает Linux из-под DOS или Windows. Домашняя страница Loadlin Архивная копия от 27 мая 2009 на Wayback Machine.
  • Syslinux — загружает Linux из-под DOS или Windows.
  • Yaboot — загрузчик Linux на PowerPC.
  • BootX — загрузчик Mac OS X.
  • bootman — загрузчик BeOS.
  • BootManager — загрузчик Haiku.
  • Das U-Boot — универсальный загрузчик, применяется в основном во встраиваемых (embedded) системах.
  • Plop Boot Manager — универсальный загрузчик, запускается с помощью собственных загрузчиков Windows и Linux, а также со съемных носителей. Домашняя страница Plop Boot Manager Архивная копия от 23 апреля 2011 на Wayback Machine.
  • SyMon — универсальный загрузчик, независим от типа операционной системы Домашняя страница SyMon.
  • Acronis OS Selector — коммерческая графическая утилита прилагаемая к Acronis Disk Director, поддерживает Windows и Linux, появляется перед каждой загрузкой системы, умеет копировать системы [1] Архивная копия от 16 марта 2010 на Wayback Machine.
  • uMon — загрузчик для встраиваемых систем.
  • barebox — загрузчик для встраиваемых систем.
  • Paragon Boot Manager — универсальный загрузчик, распространяется с дистрибутивом Paragon Partition Manager.
  • XorBoot — универсальный загрузчик.
  • Загрузчик операционной системы в каталоге ссылок Curlie (dmoz)
  • Russian x86 MultiBoot FAQ Архивная копия от 2 июня 2008 на Wayback Machine
  • Статья «Краткий обзор загрузки Windows, Linux, Mac OS X, QNX»
  • Статья «Установка нескольких операционных систем на один IBM-PC совместимый компьютер»
  • «Установка нескольких операционных систем с помощью мультизагрузчика SyMon»
  • Скотт Мюллер. Средства диагностики и тех.обслуживание: Загрузка // Модернизация и ремонт ПК / пер. с англ. — 17-е изд. — М.: «Вильямс», 2008. — С. 1341–1349. — 1360 (+147 на CD) с. — ISBN 978-5-8459-1126-1.

Windows Boot Manager — загрузчик операционных систем Windows Vista/7/8/10. Естественно поддерживается EFI режим загрузки. И конечно же его можно использовать не только для загрузки Windows.

Для примера скриншот меню одной мультизагрузочной сборки, где в качетсве загрузчика использовался Windows Boot Manger.

Нет поддержки загрузки образов дисков, таких как ISO, IMG и т.д., но данный вопрос решается с помощью загрузчика Grub4Dos, который используется в качестве посредника.

Сам загрузчик состоит из записи MBR (используется только в режиме загрузки BIOS), исполняемого файла загрузчика bootmgr или bootmgfw.efi для EFI, и файла конфигурации BCD (Boot Configuration Data).

Скачать файлы bootmgr и bootmgr.efi, можно из самой операционной системы, по путям 

C:\Windows\Boot\PCAT\bootmgr

 и 

C:\Windows\Boot\EFI\

bootmgfw.efi. Записать MBR на нужный диск можно будет в командной строке Windows, с помощью команды bootsect, или с помощью программы BOOTICE.

Создать и редактировать файл конфигурации BCD, можно либо через командную строку (команда bcdedit), либо более удобно, с помощью программы EasyBCD или BOOTICE.

Введение

Возможно некоторые читатели помнят мою самую первую статью на ресурсе, посвященную загрузке 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. Надеюсь что у меня это получилось, благодарю всех читателей за внимание и…

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

Основные этапы загрузки операционной системы Windows

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

Загрузчик операционной системы:

— обеспечивает необходимые средства для диалога с пользователем компьютера (например, загрузчик позволяет выбрать операционную систему для загрузки);

— приводит аппаратуру компьютера в состояние, необходимое для старта ядра операционной системы (например, на x86архитектурах перед запуском ядра загрузчик должен правильно настроить виртуальную память);

— загружает ядро операционной системы в ОЗУ. Загрузка ядра операционной системы не обязательно происходит с жесткого диска. Загрузчик может получать ядро по сети. Ядро может храниться в ПЗУ или загружаться через последовательные интерфейсы (это может пригодиться на ранней стадии отладки создаваемой компьютерной системы);

— формирует параметры, передаваемые ядру операционной системы (ядру Windows передаются параметры, указывающие способ подключения корневой файловой системы);

— передаёт управление ядру операционной системы.

Загрузка Windows

1. После подачи питания запускается процесс самотестирования, управляет которым программа BIOS. Если на данном этапе выявляется неисправный узел, то загрузка ПК останавливается и на экран выводится соответствующее уведомление, либо раздается серия звуковых сигналов.

Компьютер тестирует себя (стадия POST, Power On Self Test), оперативную память, физические устройства. Если BIOS поддерживает спецификацию PnP, то происходит определение и настройка такого типа устройств. BIOS обнаруживает загрузочное устройство (жесткий диск, привод CD ROM), загружает и запускает на выполнение основную загрузочную запись (MBR). MBR просматривает таблицу разделов (partition table), чтобы найти активный, загружает загрузочный вектор активного раздела в память и запускает его на выполнение. Загружает и инициализирует файл NTLDR, который представляет собой загрузчик ОС.

2. После окончания теста BIOS запускает определение загрузочного сектора на носителях, которые поддерживает материнская плата (дискета, жесткий диск, оптический диск). Приоритет поиска загрузочного сектора настраивается в настройках BIOS.

При загрузке 32-разрядных версий операционной системы Windows  (2000, XP или Server 2003) используются следующие файлы:

C:NTLDR — стадии подготовки к загрузке и загрузка

C:BOOT.INI — стадия загрузки ядра

C:BOOTSECT.DOS — стадия загрузки ядра (опционально)

C:NTDETECT.COM — стадия загрузки ядра

%systemroot%System32NTOSKRNL.EXE — стадия загрузки ядра (или NTKRNLPA.EXE)

%systemroot%System32HAL.DLL — стадия загрузки ядра

Здесь под %systemroot% подразумевается директория, где размещены основные файлы операционной системы, например, D:Windows — для Windows XP, установленной на логический диск D. Для системы Windows 2000, например, установленной на логическом диске С, это будет директория C:WINNT.

3 После того, как загрузочный накопитель определен, с него считывается первый сектор, в котором расположена основная загрузочная запись (MBR, Master Boot Record). MBR также содержит таблицу разделов диска с пометкой — какой из них активный.

В общем виде, структура главной загрузочной записи MBR, может быть представлена следующим образом:

— программный код и данные начального загрузчика. (446 байт.)

— таблица разделов диска (4 поля по 16 байт — 64 байта)

— сигнатура 55AA (2 байта)

Структура MBR включает в себя 2 основных элемента — программный код первичного загрузчика и таблицу разделов. Обязательным признаком наличия записи MBR является специальный код (сигнатура) в двух последних байтах — 55AA.

Наличие сигнатуры проверяется подпрограммой

4. MBR определяет активный раздел и управление передается загрузочной записи, которую хранит первый сектор активного раздела. При помощи данной загрузочной записи активируется менеджер загрузки ОС Windows (называется bootmgr – файл, расположенный в корневой директории активного раздела).

boot.ini позволяют загрузчику найти дальнейшие компоненты загружаемой системы и определяют нужные параметры начальной загрузки.

Диспетчер загрузки bootmgr представляет собой файл небольшого размера, расположенный в корневом каталоге активного раздела. Основное его предназначение — обеспечение дальнейшей процедуры загрузки в соответствии с существующей конфигурацией, хранящейся в специальном хранилище — хранилище данных конфигурации ( BCDBoot Configuratin Data), представляющем собой файл с именем BCD, находящийся в каталоге BOOT активного раздела.

Пример содержимого boot.ini:

[boot loader]
timeout=10
default=multi(0)disk(0)rdisk(0)partition(1)WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(3)WINNT="MS Windows 2000
Server" /fastdetect
multi(0)disk(0)rdisk(0)partition(1)WINNT="MS Windows 2000
Professional RUS" /fastdetect

Параметр timeout задает время ожидания выбора загружаемой ОС в секундах, default — определяет, что загружать по умолчанию. В секции[operating systems] — список загружаемых ОС и параметры их загрузки. Пути задаются в ARC-виде (Advanced RISC Computer), где:

multi(0) — номер контроллера HDD. 0 — Primary, 1 — Secondary.

disk(0) — для IDE всегда равен 0, для SCSI — номер логического устройства (LUN)

rdisk(0) — для SCSI всегда равен 0, для IDE — номер физического диска.

partition(1) — номер раздела с установленной OC. Номера разделов начинаются с «1»

WINNT — имя каталога с установленной OC.

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

В качестве активного раздела используется, автоматически создаваемый при инсталляции в первой части диска, раздел небольшого размера ( около 100Мб). Данному разделу не присваивается буква, и в проводнике он не отображается. Это сделано с целью защиты загрузчика от небезопасных для него действий пользователя — удаления файлов конфигурации или самого диспетчера, сжатия файловой системы и т.п.

Раздел конфигурации BCD содержит подраздел Description с параметрами описания и подраздел Objects с объектами конфигурации загрузки. Данные конфигурации загрузки можно условно разделить на 3 основных составляющих:

— хранилище BCD (Store)

— записи в хранилище (Entries)

— параметры записей (Entry Options)

Иерархически, хранилище конфигурации загрузки представляет собой совокупность объектов (Objects), состоящих из отдельных элементов (Elements):

Каждый из объектов представляет собой упорядоченную структуру элементов, обрабатываемую диспетчером загрузки. Существует 3 типа объектов:

— приложения (application objects)

— наследуемые объекты

— устройства (device objects)

Если вернуться к отображаемой редактором реестра структуре хранилища конфигурации, то заметно, что каждый подраздел раздела Objects имеет имя, представляющее собой глобальный уникальный идентификатор — GUID . Идентификатор GUID формируется программным путем и однозначно является уникальным для той системы, где он создается. Алгоритм формирования GUID построен таким образом, что каждый новый генерируемый идентификатор никогда не совпадает с другим,

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

{d1f837a2-7e0f-11df-bc8b-f6edb78d41b5}

6 Как только система выбрана, активируются модуль загрузки Windows Winload.exe, системные службы, компоненты ядра Hal.dll и Ntoskrnl.exe и ряд других компонентов – данный этап сопровождается анимированным логотипом.

7 Активируется процесс winlogon.exe, необходимый для управления входом пользователей в Windows. Если в системе всего один пользователь без пароля, вход будет произведен в автоматическом режиме. Если это не так – будет выведено окно выбора пользователя с формой для ввода пароля (если он установлен).

Исходя из вышеперечисленного, можно сделать вывод, что для корректного старта Windows должны выполняться следующие требования:

— текущие параметры BIOS должны обеспечить загрузку с накопителя, на котором установлена ОС. Если в настройках указано, что в первую очередь загрузка производится со сменных носителей, необходимо убедиться в их отсутствии;

— первый сектор загрузочного диска должен содержать корректную загрузочную запись и таблицу разделов, при этом один из разделов обязан быть помеченным как активный;

-активный раздел должен иметь загрузочную запись Windows , а его корневой каталог должен содержать файл bootmgr;

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

Загрузка ядра

На этапе загрузки ядра NTLDR выполняет следующие действия:

Загружает код ядра из файла NTOSKRNL.EXE (NTKRNLPA.EXE при наличии опции /РАЕ в файле boot.ini), но не инициализирует его.

Загружает код слоя аппаратных абстракций из файла HAL.DLL.

Загружает раздел HKLMSYSTEM из %systemroot%System32ConfigSystem.

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

Загружает драйверы (обычно это низкоуровневые драйвера, как, например, драйвера дисков) со значением параметра Start равным 0x0. Значение параметра List в

HKLMSYSTEMCurrentContorlSetControlServiceGroupOrder

 определяет порядок загрузки их загрузчиком NTLDR. Драйверы, регулирующие свою загрузку таким способом, должны иметь соответствующие значения параметра Group в своих подразделах раздела Системного Реестра 

HKLMSystemCurrentControlSetServices.

Инициализация ядра

По завершении загрузки, ядро инициализируется и ему передается управление от загрузчика NTLDR. Создается раздел HKLMHardware по результатам распознавания аппаратуры, куда заносится информация о системной плате, устройствах и прерываниях. Создается набор параметров Clone путем копирования управляющих параметров; информация о которых содержится в параметре Current в разделе HKLMSystemSelect. Набор Clone никогда не модифицируется. Загружаются драйверы, указанные в разделе системного реестра

HKLMSystemCurrentControlSetServices

в параметрах которых присутствует значение Start равное 0x01 , порядок загрузки которых так же, как и было указано выше, определяется в параметре Group. Драйверы инициализируются сразу же после их загрузки. Значения параметра ErrorControl в описании драйвера (то есть в его параметре, указанном в Системном Реестре) определяет реакцию системы в том случае, если при загрузке и инициализации данного драйвера произошла ошибка. Запускаются сервисы (например, Служба Журнала Событий) и драйверы.

Вывод на экран информации о процессе загрузки

Указав параметр /sos в соответствующей строке файла boot.ini, например

multi(0)disk(0)rdisk(0)partition(2)Windows ="Комментарий для пользователя"/sos

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

multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32ntoskrnl.exe
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32hal.dll
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32KDCOM.DLL
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32BOOTVID.DLL
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32configsystem
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32c_1251.nls
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32c_866.nls
multi(0)disk(0)rdisk(0)partition(1)WindowsSystem32l_intl.nls
multi(0)disk(0)rdisk(0)partition(1)WindowsFONTSvga866.fon

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

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Wow sirus windows xp
  • Драйвера для xiaomi redmi note 7 для windows 7
  • Windows zip from cmd
  • Windows forms drag and drop
  • Windows get free ports