Winlogon, LogonUI и Userinit
Процесс входа в Windows (Winlogon, %SystemRoot%\System32\Winlogon.exe) обрабатывает интерактивные пользовательские входы в систему и выходы из нее.
Winlogon получает уведомление о запросе пользователя на вход в систему, когда с помощью определенной комбинации клавиш вводится безопасная последовательность привлечения внимания — secure attention sequence (SAS). В качестве SAS в Windows используется комбинация Ctrl+Alt+Delete. Причиной применения SAS является защита пользователей от программ перехвата паролей, имитирующих процесс входа в систему (эта клавиатурная последовательность не может быть перехвачена приложением, работающем в пользовательском режиме).
Аспекты идентификации и аутентификации процесса входа в систему реализованы через DLL-библиотеки, называемые поставщиками учетных данных (credential providers). Стандартные поставщики учетных данных Windows реализуют интерфейсы аутентификации, используемые в Windows по умолчанию: паролей и смарт-карт.
Но разработчики могут предоставить своих собственных поставщиков учетных данных для реализации вместо стандартного для Windows метода имя пользователя-пароль других механизмов идентификации и аутентификации (например, на основе распознавания голоса или биометрического устройства вроде сканера отпечатков пальцев).
Поскольку Winlogon является критическим системным процессом, от которого зависит работа системы, поставщики учетных данных и пользовательский интерфейс для вывода диалогового окна входа в систему запускаются внутри дочернего процесса Winlogon под названием LogonUI. Когда Winlogon обнаруживает SAS, он запускает этот процесс, который инициализирует поставщиков учетных данных. Как только пользователь вводит свои учетные данные или отказывается от интерфейса входа в систему, процесс LogonUI завершается.
Кроме того, Winlogon может загрузить дополнительные DLL-библиотеки сетевых поставщиков (network providers), необходимые для дополнительной аутентификации.
Эта возможность позволяет нескольким сетевым поставщикам за один раз во время обычного входа в систему собрать информацию, касающуюся идентификации и аутентификации.
Как только будут зарегистрированы имя пользователя и пароль, они будут отправлены для аутентификации процессу сервера проверки подлинности локальной системы безопасности (%SystemRoot%\System32\Lsass.exe). LSASS вызывает соответствующий пакет аутентификации (реализованный в виде DLL-библиотеки) для выполнения фактической проверки — например, для проверки соответствия пароля тому, что сохранено в Active Directory или в SAM (части реестра, в которой содержатся определения локальных пользователей и групп).
После успешной аутентификации LSASS вызывает функцию в мониторе безопасности (например, NtCreateToken) для генерации объекта маркера доступа, содержащего профиль безопасности пользователя. Если используется управление учетными записями пользователей (User Account Control, UAC) и входящий в систему пользователь относится к группе администраторов или имеет права администратора, LSASS создаст вторую, ограниченную версию маркера.
Затем этот маркер доступа используется Winlogon для создания исходного процесса (процессов) в пользовательском сеансе. Исходный процесс (процессы) хранится в параметре реестра Userinit, который находится в разделе HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon. (По умолчанию это Userinit.exe, но в списке может быть более одного образа.)
Userinit выполняет действия по инициализации пользовательской среды окружения (например, запускает сценарий входа в систему и применяет групповую политику), а затем смотрит в реестр на значение параметра Shell (в разделе Winlogon) и создает процесс для запуска определяемой системой оболочки (по умолчанию Explorer.exe). Затем Userinit завершается.
Именно поэтому для процесса Explorer.exe родительский процесс не показывается — его родительский процесс завершился, и средство tlist выравнивает имена процессов, чьи родительские процессы не работают по левому краю.
(По другому это выглядит так, что процесс Explorer является внуком процесса Winlogon.)
Winlogon является активным не только во время входа пользователя в систему и выхода из нее, но также и при перехвате SAS с клавиатуры. Например, если войдя в систему нажать комбинацию клавиш Ctrl+Alt+Delete, появится экран безопасности Windows, предоставляющий возможности для выхода из системы, запуска диспетчера задач, блокировки компьютера и т. д. Этим взаимодействием занимаются процессы Winlogon и LogonUI.
Подробности вызываемых функций, устанавливающих связь с LSASS (функций, чьи имена начинаются с префикса Lsa), даны в документации по Windows SDK.
Вопрос. Редактируем текст например, в блокноте. Не сохраняя его, пытаемся перезагрузить ПК или выйти из системы. Система выдает диалоговое окно предупреждения в затемненном окне, что необходимо сохранить документ — запускается LogonUI.exe. Делаем отмену перезагрузки/выход из системы. Но почему-то logonUI.exe остается висеть в запущенных процессах. Можно-ли настроить систему так, чтобы он в этом случае выгружался?
А смысл? Здесь подразумевается, что вы сделаете сохранение и все таки выйдите из системы.
Смысл в том, что по LogonUI.exe и Consent.exe я пытаюсь определить, какой desktop на экране, либо ввод пароля, подтверждение запуска программ и т.д. все что от winlogon.exe, либо default. Это путает все карты. Может есть другие способы определения этого, но я их не знаю.