В этой структуре:
Size – определяет размер структуры в байтах;
Flags – поле зарезервировано и должно устанавливаться
в 0;
UserName – строка, определяющая имя текущего
пользователя. Если событие случилось до входа пользователя в систему, то это
поле равно NULL;
Domain – строка, которая определяет название домена, в
который вошел текущий пользователь. Если событие случилось до входа
пользователя в систему, то это поле равно NULL;
WindowStation – определяет имя оконной станции, в
которой текущий пользователь работает. Если событие случилось до входа
пользователя в систему, то это поле равно NULL;
hToken – дескриптор token-а пользователя. Если событие
случилось до входа пользователя в систему, то это поле равно NULL;
hDesktop – дескриптор Desktop’а для текущего события;
pStatusCallback – зарезервировано для внутреннего
использования.
После создания динамической библиотеки нужно указать
Winlogon, где ее можно найти, и какие события она будет обрабатывать. Вся
информация размещается в системном реестре в ключе
HKEY_LOCAL_MACHINESoftwareMicrosoftWindows
NTCurrentVersionWinlogonNotify
Полный доступ к нему имеют только пользователи с
правами локального администратора. Обыкновенные пользователи не смогут
создавать или изменять подключи и/или значения.
СОВЕТ
Стоит отметить, что этого ключа не
существует в ОС Win9x, но существует недокументированный аналог –
HKEY_LOCAL_MACHINESystemCurrentControlSetcontrolMPRServices. С помощью
этого ключа можно указать процессу mpr.exe (этот процес является некоторым
аналогом Winlogon для Win9x, поскольку также отвечает за вход пользователей в
систему) загружать в свое адресное пространство необходимую динамическую
библиотеку. Таким образом, теоретически можно получить доступ к событиям
входа и выхода пользователя из системы. Для указания библиотеки достаточно
создать подключ с произвольным именем, и уже там указать следующие значения.
‘DLLName’ (REG_SZ)– имя динамической библиотеки или путь к ней, ‘EntryPoint’
(REG_SZ)– точка входа в библиотеку. Ею может быть название любой
экспортируемой функции. ‘StackSize’ (REG_DWORD) – размер стека обычно
устанавливается в 0. После перезагрузки системы указанная библиотека будет
подгружена в адресное пространство mpr.exe. Поскольку в Win9x доступ к
системному реестру имеют все, этот ключ довольно часто используется троянами.
Ведь для них это своего рода автозагрузка. Возможно, именно поэтому Microsoft
не документировала этот механизм.
|
Для того чтобы подписать динамическую библиотеку на
события Winlogon, необходимо создать подключ с произвольным именем, после чего
указать значения в нем:
DllName (REG_EXPAND_SZ) – имя библиотеки, содержащей
notification package, например Notify.dll;
Impersonate (REG_DWORD) – указывает, должен ли быть
имперсонирован контекст безопасности вошедшего пользователя, когда Winlogon
вызывает функцию-обработчик. (1 – должен быть имперсонирован, 0 – не должен).
Asynchronous (REG_DWORD) – указывает, должен ли
процесс Winlogon создавать отдельный поток для вызова функции-обработчика (1 –
создавать отдельный поток, 0 – не создавать). Фактически, это значение
указывает, как будет работать Winlogon с обработчиком – асинхронно или
синхронно.
Следующие значения являются необязательными. Они
определяют названия функций, которые будут обрабатывать одноименные события. То
есть существует возможность подписаться не на все события, а только на
некоторые. Все значения имеют тип REG_SZ. В таблице 1 приведены их названия и
возможные значения.