Pages Menu
Rss
Categories Menu

Posted | 0 comments

Диспетчер сеанса (Smss)

Диспетчер сеанса (%SystemRoot%\System32\Smss.exe) является первым процессом пользовательского режима, созданным в системе. Этот процесс создается системным потоком режима ядра, выполняющим финальную фазу инициализации исполняющей системы и ядра.

При запуске Smss осуществляется проверка наличия его первого экземпляра (ведущего Smss) или своего собственного экземпляра, запущенного ведущим Smss для создания сеанса. (При наличии аргументов командной строки это будет последний экземпляр.) Путем создания нескольких экземпляров себя самого во время загрузки и создания сеанса Служб терминалов Smss может одновременно создать несколько сеансов (максимум четыре текущих сеанса, четыре параллельных сеанса, плюс еще один для каждого дополнительного центрального процессора, кроме первого).

Эта возможность повышает производительность при входе в систему на системах Служб терминалов при одновременном подключении сразу нескольких пользователей. Когда завершится инициализация сеанса, копия Smss завершает свою работу. В результате остается активным только исходный процесс Smss.exe.

Ведущий Smss выполняет следующие единовременные этапы инициализации:

  1. Помечает процесс и исходный поток как критический. (Если процесс или поток, помеченный как критический, по каким-то причинам завершается, происходит аварийное завершение работы Windows.
  2. Повышает базовый приоритет процесса до 11.
  3. Если система поддерживает горячее добавление процессора, включает автоматическое обновление процессорного сходства, чтобы при добавлении нового процессора новые сеансы могли воспользоваться новыми процессорами.
  4. Создает поименованные каналы (pipes) и почтовые слоты (mailslots), используемые для связи между Smss, Csrss и Lsm (рассматриваемом далее).
  5. Создает ALPC-порт для получения команд.
  6. Создает общесистемные переменные среды окружения, определяемые в разделе HKLM\SYSTEM\CurrentControlSet\Control\SessionManager\Environment.
  7. Создает символические ссылки для устройств, определенных в разделе HKLM\SYSTEM\CurrentControlSet\Control\SessionManager\DOSDevicesв каталоге \Global?? в пространстве имен диспетчера объектов.
  8. Создает в пространстве имен диспетчера объектов корневой каталог \Sessions.
  9. Запускает программы, указанные в разделе HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute. (По умолчанию там указывается программа Autochk.exe, осуществляющая проверку диска.)
  10. Проводит отложенный перенос файлов, указанный в разделе HKLM\SYSTEM\CurrentControlSet\Control\SessionМanager\PendingFileRenameOperations.
  11. Инициализирует файл (файлы) подкачки.
  12. Инициализирует всю остальную часть реестра (разделы HKLM Software, SAM и Security).
  13. Запускает программы, указанные в разделе HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\SetupExecute.
  14. Открывает известные DLL-библиотеки (HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs) и отображает их как постоянные разделы (отображаемые файлы).
  15. Создает поток, отвечающий за обработку запросов на создание сеанса.
  16. Создает Smss для инициализации сеанса 0 (неинтерактивного сеанса).
  17. Создает Smss для инициализации сеанса 1 (интерактивного сеанса). Когда эти этапы будут выполнены, Smss переходит в режим постоянного ожидания дескриптора экземпляра Csrss.exe с нулевым сеансом. Поскольку Csrss имеет метку критического процесса, если происходит выход из Csrss, это ожидание из-за аварийного завершения работы системы никогда не заканчивается.

Экземпляр Smss, запускающий сеанс, выполняет следующие действия:

  1. Вызывает функцию NtSetSystemInformation с запросом на создание структуры данных сеанса режима ядра. Та, в свою очередь, вызывает внутреннюю функцию диспетчера памяти MmSessionCreate, настраивающую виртуальное адресное пространство сеанса, которое будет содержать нерезидентный пул сеанса и структуру данных данного сеанса, выделяемые той частью подсистемы Windows, которая работает в режиме ядра (Win32k.sys), и другими драйверами устройств, относящимися к пространству сеанса.
  2. Создает для сеанса процесс (процессы) подсистемы (по умолчанию Csrss.exe подсистемы Windows).
  3. Создает экземпляр Winlogon (интерактивные сеансы) или Wininit (для сеанса 0). Дополнительная информация об этих двух процессах будет дана далее.

Затем происходит выход из этого промежуточного процесса Smss (после чего остаются процессы подсистемы, и в качестве процесса, не имеющего своего родительского процесса, остается процесс Winlogon или Wininit).

Post a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.


↓