Skip to content

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)
Кем вызывается:wmain
Главная функция инициализации Master SMSS. Создает глобальный ALPC-порт \SmApiPort, читает системный реестр, конфигурирует переменные окружения, Known DLLs и запускает дочерние экземпляры SMSS для создания сессий.

2. Создание файлов подкачки: SmpCreatePagingFiles ​

SmpCreatePagingFilessmss.exe
IRQL: Ring 3 (Native)Virtual Memory ConfigurationInternal
char SmpCreatePagingFiles(VOID)
Кем вызывается:SmpInit
Считывает ветку реестра `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management`, настраивает список дескрипторов файлов подкачки (`pagefile.sys`, `swapfile.sys`) и вызывает ядро для выделения виртуальной памяти.

3. Запуск сервера подсистемы Win32: SmpStartCsr ​

SmpStartCsrsmss.exe
IRQL: Ring 3 (Native)Subsystem SpawningInternal
__int64 __fastcall SmpStartCsr(__int64 a1)
Кем вызывается:SmpCreateInitialSession
Выполняет непосредственное создание и запуск процесса сервера клиент-серверной подсистемы `csrss.exe`. Выделяет управляющий блок `SmpAllocateControlBlock`, форматирует командную строку (`ObjectDirectory=\Windows SharedSection=...`), создает процесс в приостановленном состоянии через `SmpExecuteCommand`, возобновляет поток (`NtResumeThread`) и ожидает сигнальное событие готовности подсистемы.

4. Точка входа дочернего SMSS: SmscMain ​

SmscMainsmss.exe
IRQL: Ring 3 (Native)Child Session ProcessingInternal
__int64 __fastcall SmscMain(int argc, wchar_t **argv)
Кем вызывается:wmain
Точка входа дочернего экземпляра `smss.exe -s <SessionId>`. Парсит аргументы командной строки через `SmscpParseArgs`, инициализирует разделяемую память сессии, загружает графическую подсистему ядра `win32k.sys` через `SmscpLoadSubSystemsForMuSession` и запускает клиентские подсистемы сессии.

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