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
NTSTATUS __fastcall BmMain(PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters)2. Открытие хранилища BCD: BmOpenDataStore
NTSTATUS __fastcall BmOpenDataStore(PHANDLE DataStoreHandle)3. Формирование списка загрузки: BmGetBootSequence и BmpPopulateBootEntryList
NTSTATUS __fastcall BmGetBootSequence(HANDLE BcdStoreHandle, PGUID SequenceGuidList, ULONG SequenceCount, ULONG Flags, PBOOT_APPLICATION_ENTRY **BootEntryList, PULONG ReturnedCount)NTSTATUS __fastcall BmpPopulateBootEntryList(HANDLE BcdStoreHandle, PGUID GuidList, ULONG EntryFlags, PBOOT_APPLICATION_ENTRY *EntryArray, PULONG EntryCount)4. Передача управления загрузчику: BmTransferExecution
NTSTATUS __fastcall BmTransferExecution(PBOOT_APPLICATION_ENTRY BootEntry, PULONG ReturnAction, PBOOLEAN ExecutionCompleted)