8. User Session & Shell (winlogon.exe, userinit.exe, explorer.exe)
Финальный этап загрузки Windows это создание интерактивной сессии пользователя (Сессия 1+), аутентификация через LSASS, загрузка профиля и запуск графической оболочки explorer.exe.
8.1 Архитектурный pipeline входа в систему
[ smss.exe (Session 1) ]
│
▼
[ winlogon.exe ]
├── Инициализация десктопов Winlogon (экран входа) и Default (рабочий стол)
├── Запуск LogonUI.exe -> Credential Providers (Пароль, PIN, Windows Hello)
│ │
│ ▼ (Аутентификация через LSASS / LsaLogonUser)
│
├── Загрузка профиля пользователя (NTUSER.DAT -> HKEY_CURRENT_USER)
│
└── Запуск процесса Userinit (из реестра: Userinit = "userinit.exe,")
│
▼
[ userinit.exe ]
├── Выполнение логон-скриптов и групповых политик (GPO)
├── Восстановление сетевых дисков
│
└── Запуск оболочки Shell (реестр: Shell = "explorer.exe")
│
▼
[ explorer.exe ]
├── Создание класса окна "Shell_TrayWnd" (Панель задач)
├── Создание окна "Progman" (Рабочий стол)
├── Регистрация системного трея и меню Пуск
└── Запуск приложений автозагрузки (Run / Startup)8.2 Декомпилированный C-код функций Winlogon, Userinit и Explorer
Целевая сборка: Windows 10 22H2 x64 (Build
10.0.19045.2965). Имена внутренних функций и RVA-адреса зависят от версии сборки.
Конвенция вызовов (x64 ABI): Аннотации конвенций вызовов (__fastcall,__stdcall,__cdecl) воспроизводят декораторы типов декомпилятора Hex-Rays / IDA Pro. В архитектуре Windows x64 действует единый системный Microsoft x64 ABI (передача параметров через RCX, RDX, R8, R9, выделение Shadow Space).
1. Диспетчер входа: WinMain (winlogon.exe)
WinMainwinlogon.exe
IRQL: Ring 3 (Win32)Logon Session OrchestratorInternal
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) Главная функция `winlogon.exe`. Создает оконные станции, защищенный десктоп входа, перехватывает комбинацию SAS (Ctrl+Alt+Del), стартует `LogonUI.exe` и после успешного входа передает управление `userinit.exe`.
▶WinMainwinlogon.exe__stdcallEXPORTED
Развернуть псевдокод
Инициализация оконной среды Сессии 1, запуск LogonUI.exe и старт userinit.exe после аутентификации
2. Инициализатор пользователя: WinMain / ExecProcesses (userinit.exe)
WinMainuserinit.exe
IRQL: Ring 3 (Win32)User Environment SetupExported
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) Главная функция `userinit.exe`. Выполняет логон-скрипты через `RunLogonScript`, настраивает переменные окружения, считывает значение `Shell` из `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon` и через `ExecProcesses` / `ExecApplication` запускает графическую оболочку `explorer.exe`, после чего процесс `userinit.exe` завершается.
▶WinMainuserinit.exe__stdcallEXPORTED
Развернуть псевдокод
Выполнение логон-скриптов (RunLogonScript), чтение реестра Shell и запуск explorer.exe (ExecProcesses)
3. Оболочка Windows: WinMain (explorer.exe)
WinMainexplorer.exe
IRQL: Ring 3 (Win32)Desktop & Shell InitializationExported
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) Главная точка входа графической оболочки Windows. Регистрирует системные оконные классы `Shell_TrayWnd` (Панель задач) и `Progman` (Рабочий стол), поднимает трей, системные меню и запускает программы автозагрузки.
▶WinMainexplorer.exe__stdcallEXPORTED
Развернуть псевдокод
Создание окон Панели задач (Shell_TrayWnd), Рабочего стола (Progman) и запуск автозагрузки
8.3 Итог: Система полностью загружена
С момента подачи питания до появления рабочего стола управление было последовательно передано по цепочке:
Вы можете изучить: