Операционные Системы
______ называется обращение приложений к ядру с запросами для выполнения тех или иных действий
Операционные Системы
К операционным средам использующим кластерную структуру относятся
Windows 2000 Cluster Server
Операционные Системы
простая диагностическая утилита, которая проверяет возможность соединения с удаленным компьютером
отслеживает маршрут, по которому пакеты перемещаются на пути к пункту назначения
показывает и позволяет изменять конфигурацию локальной таблицу маршрутизации
утилита командной строки — распознаватель, для запросов DSN сервера
Операционные Системы
______ называются модули ОС, загружаемые в оперативную память только на время своего выполнения
Операционные Системы
Сетевые службы в первых сетевых операционных системах
производятся и поставляются в виде отдельного продукта
распределены в клиентских ОС
объединены в виде некотрого набора оболочки
Операционные Системы
В общем случае существуют права доступа к каталогам и файлам
для выполнения всех операций
Операционные Системы
В файловых системах операционной системы UNIX права доступа к файлу определяются для
всех основных пользователей
конкретных заданных пользователей
Операционные Системы
Основная память, процессор, внешняя память являются _______ ресурсами вычислительной системы
Операционные Системы
_______- это набор функций и вызовов процедур, который обеспечивает взаимодействие между клиентом и сервером
Интерфейс прикладного программирования
Операционные Системы
Традиционная архитектура клиент/сервер включает ______ слоя (ответ дать цифрой)
Операционные Системы
_______ называется операционная система, обеспечивающая как можно более высокую степень прозрачности сетевых ресурсов
распределенной операционной системой
системой реального времени
Операционные Системы
При использовании мультипрограммирования для повышения пропускной способности компьютера главной целью является
повышение удобства работы пользователя
увеличение времени реакции системы
минимизация простоев всех устройств компьютера
уменьшение времени реакции системы
Операционные Системы
В большинстве систем клиент/сервер применяется
графический интерфейс пользователя
Операционные Системы
Мультипрограммирование на уровне потоков по сравнению с мультипрограммированием на уровне процессов
более эффективно только для многопроцессорных систем
Операционные Системы
Скорость выполнения функций ядра определяет производительность всей системы в целом, поскольку
ядро работает в пользовательском режиме
количество функций ядра очень высоко
ядро работает в привилегированном режиме
функции ядра являются наиболее часто используемыми
Операционные Системы
Мультимедийные ОС способны
просматривать цифровые видео
воспроизводить музыкальные записи
формировать видеосигнал для передачи по каналу связи
просматривать и упорядочивать цифровые фотографии
Операционные Системы
Криптографические методы являются средством защиты информации
организационно-техническим
организационно-административным
Операционные Системы
В традиционной мультипрограммной операционной системе потоки разных процессов по сравнению с потоками одного процесса
изолированы в той же степени
изолированы в большей степени
изолированы в меньшей степени
Операционные Системы
_______ — это гарантия сохранности данными правильных значений, которая обеспечивается запретом для неавторизованных пользователей каким-либо образом изменять, модифицировать, разрушать или создавать данные
Операционные Системы
При работе в распределенной операционной среде пользователь
не может напрямую обратиться к удаленному ресурсу
не должен знать, где находится интересующий его ресурс, обращение происходит по абстрактному адресу.
должен знать точный физический адрес ресурса
должен знать виртуальный адрес ресурса
Операционные Системы
Создание архивных копий носителей является средством защиты информации
организационно-техническим
организационно-административным
Операционные Системы
Этапами разработки архитектуры безопасности информации являются
разработка системы защиты
реализация системы защиты
сопровождение системы защиты
Операционные Системы
Если в операционной системе существует и процесс, и поток, то с точки зрения ОС процесс является заявкой на потребление любых видов ресурсов, кроме
Операционные Системы
Программный модуль приостанавливает работу до завершения операций ввода-вывода при ____________ режиме
Операционные Системы
_____ стала первой многозадачной операционной системой для персональных компьютеров, в полной мере использующей возможности защищенного режима
Операционные Системы
Выполнение приложение может быть ускорено, если оно
обладает внутренним параллелизмом
написано на языке высокого уровня
написано на языке низкого уровня
Операционные Системы
Процесс Winlogon в операционной системе Windows 2000 активизируется
периодически через определенные промежутки времени
на начальном этапе загрузки ОС
Операционные Системы
В мультипрограммной системе функциями операционной системы по управлению памятью являются
отслеживание свободной и занятой памяти
динамическая загрузка и выгрузка драйверов
настройка адресов программы
выделение памяти процессам
Операционные Системы
(Впишите сокращенное название протокола) Протокол использующий передачу паролей открытым текстом, — это
Операционные Системы
используется для выполнения команд и запуска процессов на удаленном компьютере
используется для копирования файлов между клиентом и сервером, на котором запущена служба RCP
клиентская программа для транспортировки файлов между клиентом и системами, настроенным как FTP сервер, по протоколу TCP
клиентская программа, используемая для входа в систему и удаленного выполнения команд на системе, на которой запущена служба Telnet
Операционные Системы
В операционной системе Windows 2000 механизм идентификации пользователя реализуется
специальным процессом LogonUser
специальным процессом Winlogon
Операционные Системы
________ называется программный модуль ОС, ответственный за чтение отдельных команд или их последовательности из командного файла
Командным интерпретатором
Операционные Системы
Недостатком модели файла-устройства является
отсутствие контроля доступа к устройству
низкая скорость операций ввода-вывода
отсутствие унифицированности для устройств
слабая возможность программирования операций ввода-вывода
Операционные Системы
Первоначально операционная система UNIX предназначалась для поддержания
режима разделения времени в компьютере PDP-11
специализированного оборудования в компьютере PDP-11
мультипрограммирования в компьютере PDP-11
пакетной обработки в компьютере PDP-11
Операционные Системы
Вычисления клиент-сервер — это
распределенные вычисления
централизованные вычисления
Операционные Системы
______ — это технология, позволяющая объединить данные, звук, анимацию и графические изображения
Операционные Системы
В системах реального времени все устройства стремятся загрузить
в соответствии с обстановкой
оставляя некоторый «запас»
Операционные Системы
______ — это протокол, используемый Windows Media Technologies, для обмена между компьютерами
Детали файла
Имя файла: | 1004.Экз.01;ЭЭ.01;1 |
Размер: | 110 Kb |
Дата публикации: | 2015-03-09 03:26:05 |
Описание: | |
Операционные системы — Электронный экзамен
Список вопросов теста (скачайте файл для отображения ответов): (Впишите сокращенное название протокола) |
|
Для скачивания этого файла Вы должны ввести код указаный на картинке справа в поле под этой картинкой —> | |
ВНИМАНИЕ: | |
Нажимая на кнопку «Скачать бесплатно» Вы подтверждаете свое полное и безоговорочное согласие с «Правилами сервиса» | |
|
по |
|
правило |
|
преимущественное |
|
MS DOS, |
|
случайный |
|
область |
|
дисциплина |
|
адаптивное |
|
процесс |
|
абстрактная |
|
ресурс |
|
готовность, |
|
Ожидание |
|
микроядерные |
|
время |
|
в |
|
Сегментное |
|
4К |
|
бита |
|
кластер |
|
синхронном |
|
разделения |
|
4 |
|
Прерывание |
|
EIP |
|
AX |
|
16 |
|
EIP |
|
256 |
|
IDTR |
|
LDT |
|
10 |
|
принцип |
|
В |
|
коррекция |
|
программа |
|
DRT, IT |
|
5 |
|
в |
|
RENAME |
|
CHDIR |
|
хранения |
|
перекодировка |
|
ядро |
|
считывания |
|
поддержка |
|
программы |
|
сегментации |
|
дисковые |
|
базовым |
|
однопользовательскими |
|
.BAK |
|
электронная |
|
используемые |
|
ресурсами |
|
коды |
|
транзитными |
|
системными |
|
прикладных |
|
многопользовательской |
|
MS DOS |
|
организовать |
|
Ядро, |
|
спул-файлы |
|
0000000016 |
|
SISD |
|
SIMD |
|
MISD |
|
Любое |
|
Один |
|
BIOS; |
|
по |
|
хранятся |
|
PROBA.TXT |
|
DOC |
|
WINDOWS |
|
встроенные |
|
BMP |
|
MKDIR |
|
DIR/Р |
|
MIMD |
|
последовательность |
|
одну |
|
отрезок |
|
дескриптором |
|
OS/2 |
|
строки |
|
в |
|
обработки |
|
на |
|
программы, |
|
жесткий |
|
исполняемая |
|
это |
|
Windows |
|
MS DOS |
|
пользователь |
|
программные |
|
генерация |
|
системный |
|
внешние, |
|
20<Т<30 |
|
регистр |
|
сканер |
|
проектор |
|
драйверами |
|
пустой |
|
для |
|
MS |
|
все |
|
DEK???.* |
|
scandisk |
|
dir |
|
cron |
|
будут |
|
на |
1) |
2, |
|
ОЗУ |
|
defrag |
|
sys |
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
01.03.2016188.93 Кб428.doc
- #
01.03.2016250.37 Кб459.doc
- #
- #
- #
- #
- #
- #
- #
- #
- #
From Wikipedia, the free encyclopedia
(Redirected from Winlogon.exe)
This article needs to be updated. Please help update this article to reflect recent events or newly available information. (January 2014) |
In computing, Winlogon (Windows Logon) is the component of Microsoft Windows operating systems that is responsible for handling the secure attention sequence, loading the user profile on logon, and optionally locking the computer when a screensaver is running (requiring another authentication step). The actual obtainment and verification of user credentials is left to other components.
Winlogon is a common target for several threats that could modify its function and memory usage. Increased memory usage for this process might indicate that it has been «hijacked».
In Windows Vista and later operating systems, Winlogon’s roles and responsibilities have changed significantly.
Overview[edit]
Winlogon handles interface functions that are independent of authentication policy. It creates the desktops for the window station, implements time-out operations, and in versions of Windows prior to Windows Vista, provides a set of support functions for the GINA and takes responsibility for configuring machine and user Group Policy.
Winlogon also checks if the copy of Windows is a legitimate license starting in Windows XP and later.
Winlogon has the following responsibilities:
- Window station and desktop protection
- Winlogon sets the protection of the window station and corresponding desktops to ensure that each is properly accessible. In general, this means that the local system will have full access to these objects and that an interactively logged-on user will have read access to the window station object and full access to the application desktop object.
- Standard SAS recognition
- Winlogon has special hooks into the User32 server that allow it to monitor Control-Alt-Delete secure attention sequence (SAS) events. Winlogon makes this SAS event information available to GINAs to use as their SAS, or as part of their SAS. In general, GINAs should monitor SASs on their own; however, any GINA that has the standard Ctrl+Alt+Del SAS as one of the SASs it recognizes should use the Winlogon support provided for this purpose.
- SAS routine dispatching
- When Winlogon encounters a SAS event or when a SAS is delivered to Winlogon by the GINA, Winlogon sets the state accordingly, changes to the Winlogon desktop, and calls one of the SAS processing functions of the GINA.
- User profile loading
- When users log on, their user profiles are loaded into the registry. In this way, the processes of the user can use the special registry key HKEY_CURRENT_USER. Winlogon does this automatically after a successful logon but before activation of the shell for the newly logged-on user.
- Assignment of security to user shell
- When a user logs on, the GINA is responsible for creating one or more initial processes for that user. Winlogon provides a support function for the GINA to apply the security of the newly logged-on user to these processes. However, the preferred way to do this is for the GINA to call the Windows function CreateProcessAsUser, and let the system provide the service.
- Screen saver control
- Winlogon monitors keyboard and mouse activity to determine when to activate screen savers. After the screen saver is activated, Winlogon continues to monitor keyboard and mouse activity to determine when to terminate the screen saver. If the screen saver is marked as secure, Winlogon treats the workstation as locked. When there is mouse or keyboard activity, Winlogon invokes the WlxDisplayLockedNotice function of the GINA and locked workstation behavior resumes. If the screen saver is not secure, any keyboard or mouse activity terminates the screen saver without notification to the GINA.
- Multiple network provider support
- Multiple networks installed on a Windows system can be included in the authentication process and in password-updating operations. This inclusion lets additional networks gather identification and authentication information all at once during normal logon, using the secure desktop of Winlogon. Some of the parameters required in the Winlogon services available to GINAs explicitly support these additional network providers.
See also[edit]
- List of Microsoft Windows components
- Architecture of the Windows NT operating system line
- Vundo, a trojan that attaches itself to winlogon.exe
- getty, a similar process in UNIX
- In the Windows XP Source code leak in September 2020, Winlogon was the only piece missing from the source code, rendering the leaked operating system incomplete.[1]
References[edit]
- ^ Warren, Tom (2020-09-25). «Windows XP source code leaks online». The Verge. Retrieved 2020-09-27.
External links[edit]
- Customizing GINA — Part 1, Developer tutorial for writing a custom GINA
- Customizing GINA — Part 2, Developer tutorial for writing a custom GINA
- MSKB:193361 MSGINA.DLL does not Reset WINLOGON Structure
- Windows Vista and Windows Server 2008: Understanding, Enhancing and Extending Security End-to-end — Microsoft PowerPoint presentation that includes information on changes to Winlogon in Windows Vista and Windows Server 2008
From Wikipedia, the free encyclopedia
(Redirected from Winlogon.exe)
This article needs to be updated. Please help update this article to reflect recent events or newly available information. (January 2014) |
In computing, Winlogon (Windows Logon) is the component of Microsoft Windows operating systems that is responsible for handling the secure attention sequence, loading the user profile on logon, and optionally locking the computer when a screensaver is running (requiring another authentication step). The actual obtainment and verification of user credentials is left to other components.
Winlogon is a common target for several threats that could modify its function and memory usage. Increased memory usage for this process might indicate that it has been «hijacked».
In Windows Vista and later operating systems, Winlogon’s roles and responsibilities have changed significantly.
Overview[edit]
Winlogon handles interface functions that are independent of authentication policy. It creates the desktops for the window station, implements time-out operations, and in versions of Windows prior to Windows Vista, provides a set of support functions for the GINA and takes responsibility for configuring machine and user Group Policy.
Winlogon also checks if the copy of Windows is a legitimate license starting in Windows XP and later.
Winlogon has the following responsibilities:
- Window station and desktop protection
- Winlogon sets the protection of the window station and corresponding desktops to ensure that each is properly accessible. In general, this means that the local system will have full access to these objects and that an interactively logged-on user will have read access to the window station object and full access to the application desktop object.
- Standard SAS recognition
- Winlogon has special hooks into the User32 server that allow it to monitor Control-Alt-Delete secure attention sequence (SAS) events. Winlogon makes this SAS event information available to GINAs to use as their SAS, or as part of their SAS. In general, GINAs should monitor SASs on their own; however, any GINA that has the standard Ctrl+Alt+Del SAS as one of the SASs it recognizes should use the Winlogon support provided for this purpose.
- SAS routine dispatching
- When Winlogon encounters a SAS event or when a SAS is delivered to Winlogon by the GINA, Winlogon sets the state accordingly, changes to the Winlogon desktop, and calls one of the SAS processing functions of the GINA.
- User profile loading
- When users log on, their user profiles are loaded into the registry. In this way, the processes of the user can use the special registry key HKEY_CURRENT_USER. Winlogon does this automatically after a successful logon but before activation of the shell for the newly logged-on user.
- Assignment of security to user shell
- When a user logs on, the GINA is responsible for creating one or more initial processes for that user. Winlogon provides a support function for the GINA to apply the security of the newly logged-on user to these processes. However, the preferred way to do this is for the GINA to call the Windows function CreateProcessAsUser, and let the system provide the service.
- Screen saver control
- Winlogon monitors keyboard and mouse activity to determine when to activate screen savers. After the screen saver is activated, Winlogon continues to monitor keyboard and mouse activity to determine when to terminate the screen saver. If the screen saver is marked as secure, Winlogon treats the workstation as locked. When there is mouse or keyboard activity, Winlogon invokes the WlxDisplayLockedNotice function of the GINA and locked workstation behavior resumes. If the screen saver is not secure, any keyboard or mouse activity terminates the screen saver without notification to the GINA.
- Multiple network provider support
- Multiple networks installed on a Windows system can be included in the authentication process and in password-updating operations. This inclusion lets additional networks gather identification and authentication information all at once during normal logon, using the secure desktop of Winlogon. Some of the parameters required in the Winlogon services available to GINAs explicitly support these additional network providers.
See also[edit]
- List of Microsoft Windows components
- Architecture of the Windows NT operating system line
- Vundo, a trojan that attaches itself to winlogon.exe
- getty, a similar process in UNIX
- In the Windows XP Source code leak in September 2020, Winlogon was the only piece missing from the source code, rendering the leaked operating system incomplete.[1]
References[edit]
- ^ Warren, Tom (2020-09-25). «Windows XP source code leaks online». The Verge. Retrieved 2020-09-27.
External links[edit]
- Customizing GINA — Part 1, Developer tutorial for writing a custom GINA
- Customizing GINA — Part 2, Developer tutorial for writing a custom GINA
- MSKB:193361 MSGINA.DLL does not Reset WINLOGON Structure
- Windows Vista and Windows Server 2008: Understanding, Enhancing and Extending Security End-to-end — Microsoft PowerPoint presentation that includes information on changes to Winlogon in Windows Vista and Windows Server 2008
В ОС UNIX простейшими являются драйверы
(*ответ*) символьные
потоковые
блочные
битовые
В ОС UNIX разделяемыми являются следующие сегменты процесса виртуального адресного пространства: 1) программный код; 2) файлы, отображаемые в виртуальную память; 3) данные; 4) стек — из перечисленного
(*ответ*) 1, 2
2, 4
1, 3
3, 4
В ОС UNIX различают драйверы: 1) битовые; 2) символьные; 3) блочные; 4) универсальные; 5) потоковые — из перечисленного
(*ответ*) 2, 3, 5
1, 2, 4
3, 4, 5
1, 2, 3
В ОС UNIX регистрационная запись средств аудита включает поля: 1) дата и время события; 2) идентификатор пользователя; 3) тип события; 4) результат действия; 5) пароль пользователя; 6) команда, введенная пользователем — из перечисленного
(*ответ*) 1, 2, 3, 4
2, 3, 4, 5
1, 3, 4, 6
1, 2, 5, 6
В ОС Windows NT используется модель файла
(*ответ*) неструктурированная
списковая
сетевая
структурированная
В ОС Windows NT процесс Winlogon активизируется
(*ответ*) на начальном этапе загрузки ОС
периодически через определенные промежутки времени
по запросу пользователя
по запросу ядра
В ОС Windows NT процесс Winlogon может находиться в состоянии: 1) пользователь не вошел в систему; 2) пользователь вошел в систему; 3) рабочая станция заблокирована; 4) пользователь вышел из системы; 5) пользователь выполнил операцию — из перечисленного
(*ответ*) 1, 2, 3
3, 4, 5
2, 3, 5
1, 2, 4
В ОС Windows NT процесс Winlogon является активным
(*ответ*) на протяжении всего периода функционирования ОС
периодически в течение некоторого интервала времени
только в момент входа пользователя в систему
на протяжении сеанса работы конкретного пользователя
В системах реального времени обычно используется метод распределения памяти
(*ответ*) фиксированными разделами
страничное
перемещаемыми разделами
динамическими разделами
В таблице сегментов указывается: 1) базовый физический адрес; 2) размер сегмента; 3) правило доступа к сегменту; 4) время создания; 5) идентификатор процесса; 6) признак модификации — из перечисленного
(*ответ*) 1, 2, 3, 6
2, 3, 4, 5
1, 3, 5, 6
1, 2, 4, 6
Подробнее о возможностях GINA.DLL.
Что делать, если вы изобрели оригинальное устройство или технологию (например, популярные ныне биометрические технологии) для идентификации пользователей? Или хотите в момент авторизации проверять дополнительные параметры? Или просто изменить графический интерфейс, предоставляемый при регистрации в системе? Или пользоваться ресурсами нестандартных информационных провайдеров, например разработанного своими силами файл-сервера, требующих авторизации?
Архитектура Windows предоставляет разработчикам прекрасные возможности для решения подобных задач. И все, что нужно сделать, — это переписать парочку небольших модулей да реализовать несколько экспортируемых функций. Один из модулей называется Graphical Identification and Authentication dynamic-link library (GINA DLL). Вы взаимодействуете с этим модулем, когда вводите имя и пароль, нажимая на Ctrl-Alt-Del, блокируете рабочую станцию или меняете пароль и т. д. Достаточно переписать модуль, и перед вами раскроются новые горизонты.
В этой статье я остановлюсь на реализации основных функций, которые должна экспортировать GINA.DLL, и на использовании ряда функций подсистемы Local Security Authority (LSA), которая, собственно, и осуществляет аутентификацию пользователя в системе. Подробнее об LSA, которая предоставляет очень интересный API, я расскажу в одной из следующих статей. Здесь же я остановлюсь лишь на взаимодействии данной подсистемы и модуля GINA.
Загрузка Windows
Посмотрим, какие стадии проходит Windows 2000 в процессе загрузки (подробнее об этом рассказано в [1]). После включения компьютера выполняется загрузка BIOS, которая проводит процедуру первоначального тестирования оборудования (POST), считывает запись Master Boot Record (MBR) и передает управление коду, содержащемуся в этой записи. Он выполняет проверку, ищет в корневом каталоге модуль ntldr и передает ему управление (MBR не может читать дерево подкаталогов, поэтому Ntldr всегда находится в корневом каталоге). В свою очередь, Ntldr обрабатывает файл boot.ini, выводит на экран меню вариантов загрузки или, если вариант один, не дожидаясь выбора, переходит к следующему этапу. На нем запускается 16-разрядное приложение ntdetect.com, которое получает информацию об оборудовании от BIOS и сохраняет ее во внутренних структурах. Затем ntldr выводит картинку — индикатор загрузки Windows 2000 — и предлагает нажать на F8. Действия операционной системы при выборе специальных вариантов загрузки по нажатию клавиши F8 мы здесь рассматривать не будем.
Ntldr загружает ядро операционной системы и Hardware Abstraction Layer (HAL), которым, по умолчанию, соответствуют файлы Ntoskrnl.exe и HAL.dll. Далее загружаются необходимые (помеченные флажком SERVICE_BOOT_START) драйверы устройств, описанные в файле SYSTEM, содержащем соответствующий раздел реестра. После этого загрузчик производит действия, необходимые для запуска ntoskrnl.exe, и передает управление его главной функции. Здесь происходит много всяких, во-первых, сложных и, во-вторых, не представляющих сейчас для нас интереса событий. Но в числе прочего создается процесс Smss, который формирует среду пользовательского режима. Smss запускает подсистему Win32, программы, перечисленные в HKLMSYSTEMCurrentControlSet ControlSession ManagerBootExecute, инициализирует реестр, переменные окружения и другие «мелочи» и, наконец, запускает процесс Winlogon.
Далее ответственность за дальнейшую инициализацию системы ложится на Winlogon. Он формирует объект WindowStation и три рабочих стола — пользовательский, хранителя экрана и Winlogon; загружает GINA DLL (!), создает процесс диспетчера управления службами (SCM), загружает все службы и драйверы устройств, помеченные для автоматического запуска, и запускает процесс Lsass. После того как пользователь успешно зарегистрировался, а SCM запустил службы и драйверы, загрузка считается успешно завершенной, и LastKnownGood обновляется в соответствии с текущими установками.
Вот таким образом происходит загрузка Windows 2000. Понимая процесс загрузки, мы можем смело переходить к подробному обсуждению работы интересующего нас модуля — GINA. Свое исследование я хочу начать с того момента, когда пользователь еще не зарегистрировался в системе, а GINA DLL только загружена в память. Заметим, что процесс инициализации GINA и загрузка служб и драйверов происходят параллельно. Этим объясняется, почему для некоторых реализаций GINA в тот момент, когда пользователь хочет предпринять какие-то действия, необходимых служб еще нет.
Подсистема регистрации пользователя в Windows NT/2000/XP состоит из трех компонентов: Winlogon.exe, GINA DLL и, возможно, нескольких сетевых библиотек (Network Providers), осуществляющих вторичную авторизацию, например на файл-сервере собственной разработки. Регистрация выполняется через LSA API. GINA DLL, как показано на Рисунке 1, непосредственно взаимодействует с этой подсистемой и возвращает результаты регистрации Winlogon. В Windows 2000 и более поздних версиях поддерживается механизм notification packages — пакетов уведомлений. Это модули, представляющие собой DLL, которые вызываются Winlogon в моменты, соответствующие тем или иным событиям.
Рисунок 1. Схема подсистемы регистрации. |
Среда разработки, выполнения и отладки демонстрационной программы
Код, представленный в листингах, и полный текст демонстрационного модуля GINA DLL, который можно получить на нашем сайте, разработан в Visual C++ 6.0 без пакетов обновления с использованием Platform SDK. Проект представляет собой Win32 Dynamic-Link Library. Необходимо добавить директиву _WIN32_WINNT =0x0500 для препроцессора и дополнительные библиотеки netapi32.lib и Secur32.lib — для компоновщика. Для того чтобы наша реализация GINA DLL загрузилась в память, ее нужно скомпилировать. Программа выполняется на Windows 2000 без пакетов обновления и в более поздних версиях Windows.
С отладкой приложения дело обстоит сложнее. Основная проблема заключается в том, что отладчик запускается на рабочем столе по умолчанию, которым является пользовательский рабочий стол. А GINA выполняется на рабочем столе Winlogon. Можно поступить следующим образом: используя отладочную версию Winlogon, которую можно найти, например, в DDK, получать log-файлы, которые вполне пригодны для анализа. Для этого необходимо в файле Win.ini создать секцию
[WinlogonDebug] LogFile=C:Winlogon.log DebugFlags=Flag1[, Flag2...]
Имя файла должно содержать полный путь. Флаги, определяющие, какую информацию нужно записывать в журнал, указаны в Таблице 1. Для запуска отладочной версии Winlogon необходимо в раздел реестра HKLMSoftwareMicrosoftWindows NTCurrentVersionImage File Execution OptionsWinlogon.exe добавить значение Debugger типа REG_SZ со значением ntsd -d (подробнее об отладке компонентов Windows можно прочитать в [1] и [2]). Если такого раздела не существует, а в обычных конфигурациях Windows это именно так, его требуется создать. В статье Q260901 базы знаний MSDN технология, позволяющая отлаживать GINA DLL на одном компьютере, описана более подробно.
Путь к модулю, который загружает Winlogon, находится в значении параметра GinaDLL. По умолчанию это msGINA.dll. Если в реестре этого параметра нет, то Winlogon также использует msGINA.dll. При загрузке в безопасном режиме (Safe Mode) всегда загружается модуль msGINA.dll. Если в папке System32 его нет, то он подгружается из dllcache, в противном случае загрузка прерывается. Поэтому при отладке своей версии модуля не следует уничтожать модуль по умолчанию.
Взаимодействие Winlogon и GINA
Как отмечалось выше, GINA представляет собой DLL, которая экспортирует ряд как обязательных, так и дополнительных функций. Первые необходимо реализовать в своей версии модуля, а для вторых в модуле Winlogon.exe имеется код по умолчанию, который будет выполнен, если библиотека не предоставит их реализацию.
Winlogon взаимодействует с GINA следующим образом:
- вызывает экспортируемые GINA функции;
- передает сообщения в открытые GINA диалоги. Этот механизм рассматривается ниже, в разделе, посвященном диалогам в GINA;
- предоставляет GINA свой API;
- с помощью функции WlxSasNotify() принимает от GINA сообщения.
В основе всех этих механизмов лежит понятие secure attention sequence (SAS).
В Таблице 2 приведен полный список экспортируемых GINA для Windows 2000 функций с краткими пояснениями к ним. Галочками помечены функции, реализация которых в GINA DLL обязательна. Напомню, что речь идет о версиях Winlogon WLX_VERSION_1_3 и выше.
Рисунок 2. Алгоритм работы Winlogon. |
Вообще говоря, алгоритм работы Winlogon основан на трех возможных состояниях. На Рисунке 2, взятом из MSDN, представлена схема перехода между состояниями. Для каждого состояния возможен определенный набор функций и задан сценарий взаимодействия с GINA и другими компонентами Windows. Рассмотрим несколько примеров сценариев взаимодействия Winlogon и GINA DLL.
Загрузка рабочей станции. Winlogon вызывает WlxNegotiate для согласования версий, а потом WlxInitialize — для создания окружения.
Ожидание регистрации пользователя. GINA ожидает ввода SAS, а потом вызывает WlxSasNotify. Winlogon вызывает WlxLoggedOutSAS, в которой происходит регистрация пользователя. После успешной регистрации Winlogon вызывает WlxActivateUserShell для создания оболочки пользователя и переходит в состояние 2.
Пользователь зарегистрирован. Если в процессе работы возникает SAS, Winlogon вызывает функцию WlxLoggedOnSAS. Внутри этой функции GINA DLL может предложить пользователю различные варианты действий.
Пользователь хочет завершить сеанс и выключить компьютер. Winlogon обращается к WlxLoggedOnSAS, которая возвращает WLX_SAS_ACTION_SHUTDOWN. Далее Winlogon последовательно вызывает функции WlxLogoff и WlxShutdown.
Инициализация GINA
Процесс загрузки GINA происходит в три этапа.
Сначала вызывается функция DllMain. Процесс Winlogon обращается к функции GINA DLL WlxNegotiate. На разных стадиях развития операционной системы — от Windows NT 3.5 до Windows XP и .NET — список функций, поддерживаемых Winlogon, существенно меняется. GINA получает таблицу с указателями на список поддерживаемых функций в структурах WLX_DISPATCH_VERSION_X_X. Версии на настоящий момент могут быть 1_0, 1_1, 1_2, 1_3 (этой версией таблицы мы и будем пользоваться) и 1_4 для Windows XP/.NET. Каждая последующая версия представляет собой расширение предыдущей. Таким образом, более ранние реализации GINA могут работать с более поздними версиями Winlogon.
В функцию WlxNegotiate передаются два параметра (см. Листинг 1). Первый — это версия таблицы, которую поддерживает Winlogon, а во втором GINA сообщает, какая минимальная версия необходима ей для работы. Функция возвращает TRUE, если ее устраивает версия Winlogon, и FALSE — в противном случае. Конечно, можно самому написать GINA таким образом, что будут поддерживаться все возможные наборы функций.
В том случае, если WlxNegotiate возвращает TRUE, Winlogon вызывает функцию WlxInitialize, в которой GINA инициализирует свое окружение (см. Листинг 2). Все функции, экспортируемые GINA, используют некоторую структуру WlxContext. Это определяемая пользователем структура, где хранится необходимая для работы GINA информация. Для используемой в статье программы я выбрал структуру, приведенную в Листинге 3. Что и зачем я сохранил в этой структуре?
hWlx — идентификатор процесса Winlogon, соответствующего текущей window station. Это значение используется в качестве аргумента во время вызовов функций Winlogon.
wszStation — текущая window station. На сегодня все версии Windows поддерживают только одну станцию.
pWlxFuncs — указатель на таблицу функций.
hDllInstance — идентификатор модуля GINA, он потребуется в дальнейшем для доступа к ресурсам — шаблонам диалоговых окон, строковым таблицам и т. д.
hUserToken — маркер доступа (token) пользователя. Это значение необходимо, например, при разблокировке компьютера, да и вообще во всех ситуациях, требующих информации о зарегистрированном пользователе.
Кроме специально оговоренных случаев, все (!) операции c динамической памятью должны осуществляться с помощью функций LocalAlloc, LocalFree и т. д. После заполнения полей определенной мною структуры GINA_CONTEXT я вызываю функцию Winlogon WlxUseCtrlAltDel(). Зачем? В принципе, этого делать не надо. Данная функция в качестве SAS определяет стандартную последовательность Ctrl-Alt-Del. Мне кажется, что это удобно.
Если процесс инициализации прошел успешно, я присваиваю возвращаемому параметру pWlxContext функции WlxInitialize указатель на созданный контекст и возвращаю TRUE, в противном случае — возвращаю FALSE.
В дальнейшем все функции будут получать в качестве входного параметра указатель на созданный контекст. Как реагирует Winlogon на невыполненную процедуру инициализации, можно легко проверить.
Далее Winlogon вызывает функцию GINA WlxDisplaySASNotice. У нее не очень сложная реализация (см. Листинг 4). Алгоритм работы простой. Функция проверяет параметр реестра HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogon DisableCAD. Большая часть настроечных параметров Winlogon находится в разделе HKLMSOFTWARE MicrosoftWindows NTCurrentVersionWinlogon. Далее, если явно не указан другой раздел реестра, подразумевается именно он, и его описание я буду опускать. Так вот, если значение DisableCAD равно 1, вызывается WlxSasNotify, которая эмулирует нажатие клавиш Ctrl-Alt-Del.
В случае, когда это значение равно 0, появляется окно с предложением нажать комбинацию Ctrl-Alt-Del или произвести другие действия, которые должны привести к возможности ввода идентификационной информации. Смысл этого диалога в обеспечении дополнительной защиты системы. Он не позволит написать программу, подменяющую окно ввода пароля.
Вот и пришлось создать первое диалоговое окно. Самое время поговорить о диалогах в GINA, потому что они не совсем обычные.
Диалоговые окна GINA
Диалоги в GINA создаются специальными функциями. Они не сильно отличаются от обычных. А нужны они из-за необходимости пересылать специфические сообщения в эти диалоговые окна. Поэтому Winlogon предоставляет свои функции для регистрации окон, с которыми ему придется работать. Функции, которые Winlogon поддерживает при работе с диалогами, приведены в Таблице 3.
Все эти функции поддерживают только модальные диалоги. Затем созданные с их помощью диалоговые окна получают специфическое для Winlogon сообщение WLX_WM_SAS. wParam для этого сообщения может принимать значения, описанные в Таблице 4.
Как реагировать на сообщения WLX_SAS_TYPE_CTRL_ALT_DEL, WLX_SAS_TYPE_SC_INSERT, WLX_SAS_TYPE_SC_REMOVE — решать разработчику. В принципе, не требует обязательной обработки и сообщение WLX_SAS_TYPE_USER_LOGOFF. Но с тайм-аутами несколько сложнее. Все диалоговые окна, кроме выводимого функцией WlxDisplaySASNotice, которая представляет приветствие Windows и предлагает начать регистрацию с нажатия кнопок Ctrl-Alt-Del, должны завершаться с помощью стандартной функции EndDialog. Возвращаемое же значение должно быть WLX_DLG_INPUT_TIMEOUT для WLX_SAS_TYPE_TIMEOUT и WLX_DLG_SCREEN_SAVER_TIMEOUT — для WLX_SAS_TYPE_SCRNSVR_TIMEOUT (см. Листинг 5). А вот функция диалога из WlxDisplaySASNotice может отработать эти сообщения проще, как показано в Листинге 6.
В остальном же это самые обычные диалоговые окна, к которым применимы обычные функции. Для работы с диалогами GINA я написал класс CGinaDlg, код которого приведен в Листинге 7. Все диалоги в демонстрационной программе наследуют от данного класса и выглядят как белые эллипсы. Я не думаю, что этот код требует дополнительных комментариев.
Регистрация пользователя
Смысл регистрации заключается в получении информации, идентифицирующей пользователя. Заметим, что информацией, идентифицирующей пользователя, может быть не только привычный набор, состоящий из имени пользователя, пароля и имени домена, в котором пользователь будет регистрироваться. Им может быть и цифровой сертификат, и битовые образы отпечатка пальца или рисунка сетчатки глаза. Для того чтобы предоставить GINA DLL возможность ввода и получения маркера доступа — ключевого объекта при регистрации пользователя, о котором мы поговорим ниже, — Winlogon вызывает функцию GINA WlxLoggedOutSAS. Результатом выполнения этой функции должны быть полученные маркер доступа, SID и профиль пользователя. Посмотрим, как все это происходит.
В первую очередь создается диалоговое окно, в котором пользователю предлагается «рассказать о себе».
В результате мы получаем имя пользователя, пароль и домен, в котором хранится учетная запись пользователя. Что дальше? Можно выбрать простой способ и вызвать функцию LogonUser. Но, хотя мы и получим необходимый нам маркер, возможности этой функции крайне невелики. Windows предоставляет специальную службу — Local Security Authority, — предназначенную для аутентификации и авторизации пользователей.
Процесс регистрации пользователя заключается в открытии сессии LSA, что происходит в функции WlxLoggedOutSAS, и дальнейшей активизации оболочки, которая осуществляется в функции WlxActivateUserShell.
Посмотрим, как формируется сессия пользователя, (см. Листинг 8). Функция WlxLoggedOutSAS, прежде всего, должна создать окно, в котором пользователь введет свое имя, пароль и домен, где хранится информация об учетной записи.
Значение ShutdownWithoutLogon может быть равно 1 или 0. В первом случае пользователь может завершить работу компьютера без регистрации. Для этого в окне ввода регистрационной информации добавляется кнопка Shutdown, как сделано в демонстрационном модуле. После нажатия пользователем этой кнопки функция WlxLoggedOutSAS может вернуть в Winlogon значение WLX_SAS_ACTION_SHUTDOWN_POWER_OFF, если PowerdownAfterShutdown равно 1, и WLX_SAS_ACTION_SHUTDOWN, если это значение равно 0, после чего компьютер выключится. Если сделать ShutdownWithoutLogon равным 0, кнопка Shutdown становится недоступной.
Кроме того, в параметрах реестра DefaultUserName и DefaultDomainName находятся строковые данные, которые можно показать в соответствующих полях ввода. Это несколько ускорит процесс регистрации, но и уменьшит степень защищенности рабочей станции.
Хранители экрана
Я немного рассказал о работе с хранителями экрана, когда рассматривал диалоги в GINA DLL. Но на этом разговор не закончен. Когда мы в течение определенного времени отвлекаемся от любимого занятия, а именно — терзания клавиатуры и беспорядочных перемещений манипулятора «мышь», загружается процесс хранителя экрана. Это происходит при заданных настройках Windows. И в случае, если установлен флаг защиты хранителя экрана паролем, GINA получает сообщение о начале его работы. Winlogon вызывает необязательную для реализации функцию
BOOL WlxScreenSaverNotify( PVOID pWlxContext,BOOL *pSecure ).
Я уже упоминал о том, что для необязательных функций выполняется код по умолчанию. Для этой функции код по умолчанию, взятый из MSDN, приведен в Листинге 9. Вообще говоря, проверка параметра *pSecure необязательна, так как эта функция вызывается только в том случае, если хранитель экрана защищен паролем. Но инженеры Microsoft считают, что делать надо так. Этот параметр возвращает TRUE, если после переключения на программу хранителя экрана требуется запрашивать пароль, и FALSE — в противном случае. Функция WlxScreenSaverNotify возвращает TRUE, если хранитель экрана надо загружать, и FALSE — если нет. Если хранитель экрана задействован, то процесс хранителя экрана запускается на отдельном рабочем столе и продолжается до тех пор, пока пользователь не начинает использовать устройства ввода. После чего станция переключается на рабочий стол Winlogon и вызывается функция WlxDisplay LockedNotice. Сценарий ее работы я рассматриваю ниже.
Замечу, что в демонстрационном примере я не стал реализовывать функцию WlxScreenSaverNotify.
Обработчик SAS для незаблокированной рабочей станции
Если в ходе работы пользователь нажимает Ctrl-Alt-Del, Winlogon переключает рабочий стол на стол Winlogon и вызывает функцию WlxLoggedOnSAS, обязательную для реализации в GINA DLL. Внутри этой функции создается диалог, в котором пользователь может выбрать какое-нибудь действие. Для вызова стандартного менеджера задач, завершения сеанса, блокировки или выключения компьютера функция должна вернуть соответствующие значения: WLX_SAS_ACTION_TASKLIST, WLX_SAS_ACTION_LOGOFF, WLX_SAS_ACTION_LOCK_WKSTA и WLX_SAS_ACTION_SHUT DOWN_POWER_OFF. Но некоторые функции можно реализовать внутри GINA DLL, например смену пароля.
Смена пароля
Смена пароля в GINA происходит внутри функции WlxLoggedOnSAS. Для изменения пароля используется функция NetUserChangePassword(). Первые два параметра этой функции — имя пользователя и домен. Для их получения я использую маркер, сохраненный при регистрации пользователя. Как это делается, показано в Листинге 10. Для получения SID пользователя по маркеру я написал дополнительную функцию GetTokenUserInfo, показанную в Листинге 11.
Ещк два параметра — старый и новый пароль — вводятся пользователем в соответствующее диалоговое окно. После успешной смены пароля функция WlxLoggedOnSAS должна вернуть Winlogon значение WLX_SAS_ACTION_PWD_CHANGED, извещающее сетевых провайдеров о смене пароля.
Разблокировка рабочей станции
Для разблокировки рабочей станции Winlogon вызывает необходимую в реализации GINA DLL функцию WlxWkstaLockedSAS. Поставляемая с операционной системой библиотека GINA предоставляет стандартный сценарий разблокирования рабочей станции. Это может сделать либо пользователь, который ее заблокировал, либо член локальной группы администраторов. Во втором случае происходит завершение текущего сеанса. Конечно, в собственной реализации модуля можно избрать какой-нибудь другой сценарий. Например, разрешать разблокировку только зарегистрированному пользователю. Но здесь мы рассмотрим вариант, предлагаемый компанией Microsoft.
Итак, в первую очередь мы должны предоставить пользователю возможность ввести свои идентификационные данные. Это делается тем же способом, который использовался при регистрации пользователя. Только одно отличие: в функции LsaLogonUser для параметра SECURITY_LOGON_TYPE используется значение Unlock. После этого вызова мы получаем маркер.
Еще раз обращаю ваше внимание на необходимость корректного уничтожения введенных пользователем идентификационных данных, в первую очередь паролей. Функции освобождения памяти (например, LocalFree) просто освобождают соответствующий указатель. Информация в физической памяти остается.
Теперь нам нужно только получить для этого маркера и для маркера, сохраненного после регистрации, SID пользователя и сравнить их. Если значения SID совпадут, значит, пользователь тот же, и рабочую станцию можно разблокировать. Для этого достаточно вернуть значение WLX_SAS_ACTION_UNLOCK_WKSTA из функции WlxWkstaLockedSAS (см. Листинг 12).
Если SID не совпадут, нам нужно проверить, не входит ли пользователь, который пытается разблокировать станцию, в группу администраторов. Код функции, осуществляющей эту проверку, приведен в Листинге 13. В случае если проверка завершилась успешно, нам остается вернуть значение WLX_SAS_ACTION_FORCE_LOGOFF, возможно, поинтересовавшись у пользователя, уверен ли он в необходимости завершения сеанса.
Александр Эпштейн — независимый разработчик и консультант по проблемам низкоуровневого программирования; руководил департаментами разработки программного обеспечения в нескольких крупных российских компаниях. С ним можно связаться по адресу: alex_ep@hotmail.com.
Литература
[1] David A. Solomon, Mark E. Russinovich Insude for Microsoft Windows 2000, Third Edition Microsoft Press (Дэвид Соломон, Марк Русинович «Внутреннее устройство Microsoft Windows 2000». — Русская редакция, 2001)
[2] Sven B. Schreiber Undocumented Windows 2000 secrets. A programming cookbook. Addison-Wesley 2001
[3] Keith Brown Handle Logons in Windows NT and Windows 2000 with Your Own Logon Session Broker
Листинг 1. Проверка версии WinLogon.
BOOL WINAPI WlxNegotiate( DWORD dwWinLogonVersion,PDWORD pdwDllVersion ) { if( dwWinLogonVersion < WLX_VERSION_1_3 ) return FALSE; else { *pdwDllVersion = WLX_VERSION_1_3; return TRUE; } }
Листинг 3. Используемая в данной реализации GINA структура контекста.
typedef struct _tagGINA_CONTEXT { HANDLE hWlx; LPWSTR wszStation; PWLX_DISPATCH_VERSION_1_3 pWlxFuncs; HANDLE hDllInstance; HANDLE hUserToken; SID sid; HWND hWndOwner; } GINA_CONTEXT, *LPGINA_CONTEXT, *PGINA_CONTEXT;
Листинг 6. Обработка сообщений о тайм-аутах.
case WLX_SAS_TYPE_TIMEOUT: EndDialog( hWnd,WLX_DLG_INPUT_TIMEOUT ); nRet = TRUE; break; case WLX_SAS_TYPE_SCRNSVR_TIMEOUT: EndDialog( hWnd,WLX_DLG_SCREEN_SAVER_ TIMEOUT ); nRet = TRUE; break; Листинг 5. Возвращаемые значения. case WLX_SAS_TYPE_TIMEOUT: case WLX_SAS_TYPE_SCRNSVR_TIMEOUT: nRet = wParam; break;
Листинг 9. Код по умолчанию, который обрабатывается обработчиком сообщения от хранителя экрана.
BOOL DefaultScreenSaverNotify( PVOID pWlxContext, BOOL *pSecure) { if (*pSecure) { *pSecure = WlxIsLockOk (pWlxContext); } return(TRUE); }