6. Session Manager Subsystem (smss.exe)
Диспетчер сессий (smss.exe) это первый процесс пользовательского режима (Ring 3), запускаемый ядром. Он работает в качестве Native-приложения NT (только ntdll.dll без подсистемы Win32), настраивает виртуальную память и создаёт изолированные сессии.
6.1 Архитектура Master & Child SMSS
[ ntoskrnl: StartFirstUserProcess ]
│
▼
[ smss.exe: NtProcessStartupW -> wmain ]
│
├── [ Master SMSS Mode ]
│ ├── SmpInit()
│ │ ├── SmpCreateSecurityDescriptors()
│ │ ├── SmpInitializeKnownSubSystems()
│ │ ├── SmpInitializePendingRename()
│ │ ├── SmpLoadDataFromRegistry()
│ │ │ ├── SmpInvokeAutoChk() -> "autocheck autochk *"
│ │ │ ├── SmpInitializeDosDevices()
│ │ │ ├── SmpInitializeKnownDlls()
│ │ │ ├── SmpCreateDynamicEnvironmentVariables()
│ │ │ └── SmpProcessFileRenames() -> PendingFileRenameOperations
│ │ └── InitializeWow64OnBoot()
│ │
│ ├── SmpAsyncMemoryConfiguration()
│ │ └── SmpCreatePagingFiles() -> pagefile.sys & swapfile.sys
│ │
│ ├── SmpStartCsr() / SmpCreateInitialSession()
│ │ ├── Запуск csrss.exe (ServerDll=basesrv, winsrv)
│ │ ├── Запуск wininit.exe (Session 0)
│ │ └── Запуск winlogon.exe (Session 1)
│ └── SmpReadyBootSync()
│
└── [ Child SMSS Mode: smss.exe -s <SessionId> ]
└── SmscMain()
├── SmscpParseArgs()
└── SmscpLoadSubSystemsForMuSession()
├── Загрузка win32k.sys в пространство сессии
└── SmpExecuteImage() для подсистем6.2 Декомпилированный C-код функций smss.exe
Целевая сборка: 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. Точка входа: SmpInit
SmpInitsmss.exe
IRQL: Ring 3 (Native)Session Manager InitInternal
NTSTATUS SmpInit(VOID) Главная функция инициализации Master SMSS. Создает глобальный ALPC-порт \SmApiPort, читает системный реестр, конфигурирует переменные окружения, Known DLLs и запускает дочерние экземпляры SMSS для создания сессий.
▶SmpInitsmss.exe__fastcallINTERNAL
Развернуть псевдокод
Главная функция Master SMSS: создание порта ALPC, файлов подкачки и запуск Session 0 / Session 1
2. Создание файлов подкачки: SmpCreatePagingFiles
SmpCreatePagingFilessmss.exe
IRQL: Ring 3 (Native)Virtual Memory ConfigurationInternal
char SmpCreatePagingFiles(VOID) Считывает ветку реестра `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management`, настраивает список дескрипторов файлов подкачки (`pagefile.sys`, `swapfile.sys`) и вызывает ядро для выделения виртуальной памяти.
▶SmpCreatePagingFilessmss.exe__fastcallINTERNAL
Развернуть псевдокод
Инициализация pagefile.sys, проверка краш-дампов, защита очередей через __fastfail и настройка swapfile
3. Запуск сервера подсистемы Win32: SmpStartCsr
SmpStartCsrsmss.exe
IRQL: Ring 3 (Native)Subsystem SpawningInternal
__int64 __fastcall SmpStartCsr(__int64 a1) Выполняет непосредственное создание и запуск процесса сервера клиент-серверной подсистемы `csrss.exe`. Выделяет управляющий блок `SmpAllocateControlBlock`, форматирует командную строку (`ObjectDirectory=\Windows SharedSection=...`), создает процесс в приостановленном состоянии через `SmpExecuteCommand`, возобновляет поток (`NtResumeThread`) и ожидает сигнальное событие готовности подсистемы.
▶SmpStartCsrsmss.exe__fastcallINTERNAL
Развернуть псевдокод
Аллокация Control Block, запуск csrss.exe, сохранение ProcessSessionInformation и ожидание хэндшейка готовности
4. Точка входа дочернего SMSS: SmscMain
SmscMainsmss.exe
IRQL: Ring 3 (Native)Child Session ProcessingInternal
__int64 __fastcall SmscMain(int argc, wchar_t **argv) Точка входа дочернего экземпляра `smss.exe -s <SessionId>`. Парсит аргументы командной строки через `SmscpParseArgs`, инициализирует разделяемую память сессии, загружает графическую подсистему ядра `win32k.sys` через `SmscpLoadSubSystemsForMuSession` и запускает клиентские подсистемы сессии.
▶SmscMainsmss.exe__fastcallINTERNAL
Развернуть псевдокод
Обработка аргументов сессии, настройка контекста и загрузка подсистем MultiUser Session