Skip to content

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.exe

5.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)
Кем вызывается:Phase1Initialization
Главная функция фазы 1 ядра. Находится в секции .INIT (которая после завершения загрузки полностью выгружается и освобождается из оперативной памяти для экономии ресурсов). Запускает многоядерность, графику, диспетчер ввода-вывода и вызывает StartFirstUserProcess.

2. Запуск первого процесса пользователя: StartFirstUserProcess ​

StartFirstUserProcessntoskrnl.exe
IRQL: PASSIVE_LEVEL (0)Transition to User-ModeInternal
VOID StartFirstUserProcess(VOID)
Кем вызывается:Phase1InitializationDiscard
Создает процесс `\SystemRoot\System32\smss.exe` (строка `NtInitialUserProcess`), настраивает структуры PEB, аргументы командной строки и переменные окружения, отключает логотип загрузки через `FinalizeBootLogo()`, возобновляет основной поток процесса через `ZwResumeThread` и переводит ядро в режим ожидания.

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