Skip to content

2. Windows Boot Manager (bootmgfw.efi) ​

Диспетчер загрузки Windows (Boot Manager - bootmgfw.efi) это независимое 64-битное приложение UEFI, отвечающее за разбор базы конфигурации BCD, аппаратную безопасность (BitLocker, TPM, Secure Boot), выбор операционной системы и запуск загрузчика ядра winload.efi.


2.1 Архитектура Boot Manager ​

Boot Manager собран на базе библиотеки Boot Environment Library (bootlib.lib) и выполняет строго последовательные шаги:

[ EfiMain / BmMain ]
         │
         ▼
[ BlInitializeLibrary ] -> Инициализация консоли, памяти (BlMm), графики (BlDisplay, BlXmi)
         │
         ▼
[ BmSecureBootInitializeMachinePolicy ] -> Проверка политик Secure Boot и SI (System Integrity)
         │
         ▼
[ BmOpenDataStore ] -> Открытие куста BCD (\EFI\Microsoft\Boot\BCD) через BcdOpenStoreFromFile
         │
         ▼
[ BmResumeFromHibernate ] -> Проверка снимка гибернации (winresume.efi / hiberfil.sys)
         │
         ▼
[ BmGetBootSequence / BmpGetSelectedBootEntry ] -> Построение списка загрузки и выбор GUID ОС
         │
         ▼
[ BmpLaunchBootEntry / BmTransferExecution ] -> Загрузка winload.efi через BlImgLoadBootApplication
         │
         ▼
[ BlImgStartBootApplication ] -> Переход в точку входа OslMain (winload.efi)

2.2 Декомпилированный C-код ключевых функций Boot Manager ​

Целевая сборка: Windows 10 22H2 x64 (Build 10.0.19045.2965). Имена внутренних функций и абсолютные RVA-адреса зависят от версии сборки.
Конвенция вызовов (x64 ABI): Аннотации конвенций вызовов (__fastcall, __stdcall) воспроизводят декораторы типов декомпилятора Hex-Rays / IDA Pro. В архитектуре Windows x64 действует единый системный Microsoft x64 ABI (передача параметров через RCX, RDX, R8, R9, выделение Shadow Space).


1. Точка входа: BmMain ​

BmMainbootmgfw.efi
IRQL: UEFI ContextInternal
NTSTATUS __fastcall BmMain(PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters)
Главная точка входа Boot Manager. Инициализирует среду BootLib, монтирует куст BCD, проверяет политики Secure Boot, проверяет наличие сессии выхода из гибернации (winresume.efi), формирует меню выбора операционных систем и запускает целевой загрузчик `winload.efi`.

2. Открытие хранилища BCD: BmOpenDataStore ​

BmOpenDataStorebootmgfw.efi
IRQL: UEFI ContextInternal
NTSTATUS __fastcall BmOpenDataStore(PHANDLE DataStoreHandle)
Определяет путь к базе конфигурации BCD на системном разделе ESP (через `BmGetDataStorePath`), формирует дескриптор полного файлового пути и монтирует файл `\EFI\Microsoft\Boot\BCD` как куст реестра с помощью функции `BcdOpenStoreFromFile`.

3. Формирование списка загрузки: BmGetBootSequence и BmpPopulateBootEntryList ​

BmGetBootSequencebootmgfw.efi
IRQL: UEFI ContextInternal
NTSTATUS __fastcall BmGetBootSequence(HANDLE BcdStoreHandle, PGUID SequenceGuidList, ULONG SequenceCount, ULONG Flags, PBOOT_APPLICATION_ENTRY **BootEntryList, PULONG ReturnedCount)
Выделяет массив указателей в куче BootLib и считывает параметры каждой загрузочной записи из базы BCD по ее GUID-идентификатору через внутреннюю функцию `BmpPopulateBootEntryList`.
BmpPopulateBootEntryListbootmgfw.efi
IRQL: UEFI ContextInternal
NTSTATUS __fastcall BmpPopulateBootEntryList(HANDLE BcdStoreHandle, PGUID GuidList, ULONG EntryFlags, PBOOT_APPLICATION_ENTRY *EntryArray, PULONG EntryCount)
Выполняет разбор BCD-элементов каждого объекта (устройство, тип приложения, флаги winload, winresume, memtest), формирует структуры `BOOT_APPLICATION_ENTRY` и проставляет пути автозапуска исполняемых образов по умолчанию.

4. Передача управления загрузчику: BmTransferExecution ​

BmTransferExecutionbootmgfw.efi
IRQL: UEFI ContextInternal
NTSTATUS __fastcall BmTransferExecution(PBOOT_APPLICATION_ENTRY BootEntry, PULONG ReturnAction, PBOOLEAN ExecutionCompleted)
Загружает PE-образ `winload.efi` через `BlImgLoadBootApplication`, выполняет проверку цифровой подписи Authenticode и политик Secure Boot, замеряет хэш в PCR-регистры TPM и передает управление в точку входа `OslMain` через `BlImgStartBootApplication`.

Interactive documentation of Windows NT (Build 10.0.19045.2965 x64) • Source Code