Часть полного текста документа:Winlogon notification package. Теория и практика Роман Бурда Что это такое В операционных системах линии Windows NT диалоговая поддержка входа в систему реализована с помощью Winlogon. Он предоставляет целый ряд полезных интерфейсов. Наиболее известным является GINA (Graphical Identification and Authentication dll), который обычно используется, когда нужно изменить стандартный способ аутентификации. Например, реализовать возможность входа в систему по отпечаткам пальцев, сетчатке глаза или по электронной карточке. Менее известным, но не менее полезным является Winlogon notification package. Этот интерфейс реализует возможность обрабатывать события на вход и выход пользователей, включение и выключение операционной системы и некоторые другие. К сожалению, последний интерфейс реализован только в операционных системах Win2000 и выше. Теория Winlogon notification package - это dll-библиотеки, которые получают и обрабатывают события, сгенерированные Winlogon. Logon - генерируется при входе пользователя в систему посредством Winlogon + GINA (через консоль, терминал и т. д.). Сообщения не будут приходить, если пользователь зашел посредством LogonUser. Logoff - генерируется при выходе пользователя из системы (если он вошел в систему посредством Winlogon + GINA). Startup - генерируется при запуске системы, а также при присоединении терминального клиента. Shutdown - генерируется перед выключением системы, а также при отсоединении терминального клиента. StartScreenSaver - генерируется при запуске screen saver-а. В обработчике этого события запрещено показывать интерфейс пользователя. StopScreenSaver - генерируется при остановке screen saver-а. В обработчике этого события запрещено показывать интерфейс пользователя. Lock - генерируется, когда пользователь блокирует рабочую станцию. Unlock - генерируется, когда пользователь разблокировал рабочую станцию, или когда системный администратор снял блокировку, заставив пользователя выйти из системы. StartShell - генерируется после того, как пользователь зашел в систему и сетевые соединения были установлены. Для реализации Winlogon notification package необходимо следующее. Сначала нужно создать динамическую библиотеку, которая будет импортировать набор функций-обработчиков событий. Прототип этих функций должен строиться по шаблону: VOID FunctionName (PWLX_NOTIFICATION_INFO pInfo); Как видите, вся информация о данных события хранится в структуре WLX_NOTIFICATION_INFO. typedef struct _WLX_NOTIFICATION_INFO { ULONG Size ; ULONG Flags ; PWSTR UserName ; PWSTR Domain ; PWSTR WindowStation ; HANDLE hToken ; HDESK hDesktop ; PFNMSGECALLBACK pStatusCallback; } WLX_NOTIFICATION_INFO, * PWLX_NOTIFICATION_INFO ; В этой структуре: Size - определяет размер структуры в байтах; Flags - поле зарезервировано и должно устанавливаться в 0; UserName - строка, определяющая имя текущего пользователя. Если событие случилось до входа пользователя в систему, то это поле равно NULL; Domain - строка, которая определяет название домена, в который вошел текущий пользователь. Если событие случилось до входа пользователя в систему, то это поле равно NULL; WindowStation - определяет имя оконной станции, в которой текущий пользователь работает. Если событие случилось до входа пользователя в систему, то это поле равно NULL; hToken - дескриптор token-а пользователя. ............ |