5. Kernel Phase 1 & Subsystems (ntoskrnl.exe)
Фаза 1 инициализации ядра выполняется в контексте первого системного потока на уровне IRQL PASSIVE_LEVEL. Разрешены прерывания, включена многоядерность, доступны файловые системы и диспетчер PnP.
5.1 Архитектурный pipeline Phase 1
[ PsInitSystem(0) создает поток Phase1Initialization ]
│
▼
[ Phase1Initialization (0x140786170) -> Phase1InitializationDiscard (0x140A37B24) ]
├── HalInitSystem(1, LoaderBlock) -> Запуск ядер CPU (AP), IOMMU, ACPI
├── InbvEnableBootDriver() -> Инициализация графического видеодрайвера INBV
├── CcInitializeCacheManager() -> Поднятие диспетчера кэша (Cc)
├── MmInitSystem(1) -> Рабочие наборы (Working Sets), кэш системного пространства
├── CmInitSystem1() -> Монтирование веток реестра HKLM\SAM, HKLM\SECURITY, HKLM\SOFTWARE
├── PoInitSystem(1) -> Подсистема управления электропитанием (ACPI Power Schemes)
├── IopInitializeBootDrivers() -> PnP-диспетчер вызывает DriverEntry для загрузочных драйверов
└── StartFirstUserProcess (0x140A44218)
│
├── Подготовка блока RTL_USER_PROCESS_INFORMATION
├── Создание процесса \SystemRoot\System32\smss.exe (NtInitialUserProcess)
├── FinalizeBootLogo() -> Отключение анимации загрузки
└── ZwResumeThread() -> Передача управления в smss.exe5.2 Декомпилированный C-код функций ядра (Phase 1)
Целевая сборка: 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. Главный исполнитель Phase 1: Phase1InitializationDiscard
Phase1InitializationDiscardntoskrnl.exe
IRQL: PASSIVE_LEVEL (0)Phase 1 Core EngineInternal
BOOLEAN __fastcall Phase1InitializationDiscard(PLOADER_PARAMETER_BLOCK LoaderBlock) Главная функция фазы 1 ядра. Находится в секции
.INIT (которая после завершения загрузки полностью выгружается и освобождается из оперативной памяти для экономии ресурсов). Запускает многоядерность, графику, диспетчер ввода-вывода и вызывает StartFirstUserProcess. ▶Phase1InitializationDiscardntoskrnl.exe__fastcallINTERNAL
Развернуть псевдокод
Инициализация многоядерности HAL(1), кэш-менеджера Cc, реестра Cm(1), диспетчера ввода-вывода и запуск smss.exe
2. Запуск первого процесса пользователя: StartFirstUserProcess
StartFirstUserProcessntoskrnl.exe
IRQL: PASSIVE_LEVEL (0)Transition to User-ModeInternal
VOID StartFirstUserProcess(VOID) Создает процесс `\SystemRoot\System32\smss.exe` (строка `NtInitialUserProcess`), настраивает структуры PEB, аргументы командной строки и переменные окружения, отключает логотип загрузки через `FinalizeBootLogo()`, возобновляет основной поток процесса через `ZwResumeThread` и переводит ядро в режим ожидания.
▶StartFirstUserProcessntoskrnl.exe__fastcallINTERNAL
Развернуть псевдокод
Создание процесса smss.exe через RtlCreateUserProcessEx, финализация логотипа и запуск потока