Протокол взаимодействия процесса Winlogon и библиотеки GINA
Сразу после загрузки Winlogon инициализирует GINA, вызывая последовательно ее функции WlxNegotiate и Wlxlnitialize. Рабочая станция переходит в состояние "Пользователь не вошел в систему".
Когда пользователь собирается войти в систему с помощью комбинации клавиш CTRL + ALT + Del, Winlogon вызывает функцию WlxLoggedOutSas библиотеки GINA. WlxLoggedOutSas осуществляет попытку входа в систему, вызывая системную функцию LogonUser. В зависимости от информации, введенной пользователем, GINA возвращает процессу Winlogon одно из следующих значений:
- WLX_SAS_ACTION_LOGON – пользователь вошел в систему. Получив это значение, Winlogon вызывает функцию WlxActivateUserShell библиотеки GINA, которая загружает индивидуальную оболочку пользователя;
- WLX_SAS_ACTION_NONE – пользователь не смог войти в систему. Состояние системы не изменяется;
- WLX_SAS_ACTION_SHUTDOWN – пользователь потребовал завершить работу системы. Эта возможность может быть отключена (см. выше). Получив данное возвращаемое значение, Winlogon последовательно вызывает функции библиотеки GINA WlxLogojfn WlxShutdown.
Если пользователь нажал комбинацию CTRL + ALT + Del, уже войдя в систему, Winlogon вызывает функцию WlxLoggedOnSas. GINA выводит на экран диалоговое окно и, в зависимости от решения пользователя, выполняет следующие действия:
- если пользователь решил не предпринимать никаких действий, GINA возвращает в Winlogon значение WLX_SAS_ACTION_NONE. Winlogon возвращает систему в то же состояние, в котором она была до нажатия комбинацииCTRL + ALT + Del;
- если пользователь желает просмотреть список активных процессов, GINA возвращает значение WLX_SAS_ACTION_TASKLIST. Winlogon возвращает систему в состояние) в котором она была до нажатия комбинации CTRL + ALT + Del и активизирует процесс Task Manager;
- если пользователь желает заблокировать рабочую станцию, GINA возвращает значение WLX_SAS_ACTION_LOCK_WKSTA. Winlogon блокирует систему;
- если пользователь желает выйти из системы, GINA возвращает значение WLX_SAS_ACTION_LOGOFF. Winlogon в ответ вызывает функцию G INA WlxLogoff;
- если пользователь желает завершить работу с компьютером, GINA возвращает значение WLX_SAS_ACTION_SHUTDOWN, Winlogon последовательно вызывает функции GINA WlxLogoff к WlxShutdown.;
- если пользователь желает перезагрузить компьютер, GINA возвращает значение WLX_SAS_ACTION_SHUTDOWN_REBOOT. Winlogon последовательно вызывает функции GINA WlxLogoff и WlxShutdown. По окончании выгрузки системы компьютер автоматически перезагружается;
- если пользователь желает, закончить работу с компьютером и выключить его, GINA возвращает значение WLX_SAS_ACTION_SHUTDOWN_ REBOOT_ POWER_OFF. Winlogon последовательно вызывает функции GINA WlxLogoff n WlxShutdown. По окончании выгрузки системы компьютер автоматически выключается. Если аппаратная часть компьютера не допускает программного отключения питания, данное возвращаемое значение имеет тот же эффект, что и WLX_SAS_ACTION_ SHUTDOWN;
- если пользователь желает изменить свой пароль, GINA выводит на экран соответствующее диалоговое окно, по окончании ввода пользователем нового пароля вызывает функцию WlxChangePasswordNotify и затем возвращает в Winlogon значение WLX_SAS_ACTION_PWD_ CHANGED.
Когда рабочая станция заблокирована, а пользователь нажал комбинацию CTRL + ALT + Del, Winlogon вызывает функцию GINA WlxWkstaLockedSas. GINA запрашивает у пользователя параметры идентификации и проверяет их. В зависимости от результата проверки GINA возвращает одно из следующих значений:
- WLX_UNLOCK_WKSTA – разблокировать рабочую станцию;
- WLX_FORCE_LOGOFF – принудительный выход из системы с последующим входом в систему администратора;
- WLX_NO_ACTION – рабочая станция остается заблокированной.
Если пользователь вошел в систему и один из процессов вызывает системную функцию ExitWindowsEx, Winlogon в зависимости от параметров ExitWindowsEx вызывает либо WlxLogoff, либо последовательно WlxLogoff и WlxShutdown. При этом, соответственно, либо пользователь выходит из системы, либо система завершает работу.
Если GINA получает от пользователя нестандартную SAS, она вызывает функцию Winlogon WlxSasNotify, после чего Winlogon вызывает одну из вышеперечисленных функций GINA, в зависимости от контекста, в котором была получена SAS.