![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
User Session Change... [D7, WinXP]
Makhanev A.S. © (2004-03-03 20:03:00)Может, у кого-либо есть опыт ловли смены сессии пользователя (Win2K, WinXP) из сервиса?
Gamlet (2004-04-17 08:12:00) [1]Мона просто обрабатывать WM_WTSESSION_CHANGE.
см.
http://www.delphiworld.narod.ru/base/get_xp_sessions_notify.html
BiN (2004-03-06 19:04:00) [2]Cobalt © (06.03.04 17:57) [14]
наверно, для этого и существуют SECURITY_ATTRIBUTES
Makhanev A.S. (2004-03-06 18:09:00) [3]BiN © (06.03.04 15:37) [13]
оконные сообщения я заююзал, чтобы убедиться, что они недолетят:)
а в общем случае WM - вполне удобен для моих нужд.
Насчет MMF уже копаем.
Но пока пробуем ControlService.
Cobalt (2004-03-06 17:57:00) [4]Помнится мне, что в разных сессиях ядрёные объекты - изолированы.
BiN (2004-03-06 15:37:00) [5]Makhanev A.S. © (06.03.04 15:31) [11]
А разве сервис, работающий с правами системы не имеет доступа к десктопу winlogon-a? И не лучше ли использовать MMF, а не оконные сообщения, которыми, как я понимаю, ты пользуешься
BiN (2004-03-06 15:33:00) [6]прошу прощения за WlxDisplaySASNotice. Конечно же эта функция вызывается не во время открытия сессии, а наоборот - в начале процесса аутентификации. Здесь лучше подойдет WlxLoggedOnSAS или WlxActivateUserShell.
Makhanev A.S. (2004-03-06 15:31:00) [7]Пробуем WinLogon.
Всё в принципе устраивает, но есть одно НО:
я так понимаю, что указанная dll работает на рабочем столе WinLogon.
А сервис, который должен от нее получать нотификации - на раб. столе админа.
Короче, messages от dll не принимаются.
Где лыжи мазать или править руки?
Необходимо реализовать систему оповещения в реальном времени м/ду dll и сервисом.
BiN (2004-03-06 15:18:00) [8]Makhanev A.S. © (05.03.04 18:39) [8]
Насчет GINA было бы корректнее упомянуть WlxDisplaySASNotice, вызываемую winlogon-ом из GINA в момент открытия сессии.
Как универсальный вариант, можно перехватывать все тот же LogonUserA(W)во всех открытых winlogon-ом модулях. Это можно осуществить внедрением в Winlogon, что позволит не перегружать машину, как в случае с Winlogon Notification Packages.
Внедрение же в winlogon возможно при включении Debug-привилегий.
Cobalt (2004-03-06 11:51:00) [9]А также обеспечение его LogOn.
Makhanev A.S. (2004-03-05 18:39:00) [10]BiN © (04.03.04 21:46) [7]
Первый вариант мы разрабатывали, отрадно, что его здесь тоже упомянули.
А а вот вариант-2 показался несколько непонятным...
По крайней мере в МСДНе я не усек его преимуществ перед Вариантом1.
Если не сложно, можете вкратце поясниь суть варианта 2?
Я так понял, что назначение GINA - обеспечение идентификации и аутентификации юзера...
BiN (2004-03-04 21:46:00) [11]1. самое простое - Winlogon Notification Packages (см МСДН)
2. сложнее - внедрение в winlogon и перехват LogonUser из GINA или подобное
Defunct (2004-03-04 18:54:00) [12]WebErr © (04.03.04 18:11) [5]
Ну так мы ведь знаем, что ищем. Ищем то, чего нет в модуле Messages. IMHO отфильтровать все известные сообщения не составит труда, имея полный список сообщений на момент смены сессии.
WebErr (2004-03-04 18:11:00) [13]
> Defunct © (04.03.04 18:04) [4]
> Makhanev A.S. © (04.03.04 16:28) [2]
>
> Просто мысли вслух...
>
> Мммм.. поставьте ловушку всех сообщений винды. Рагистрируйте
> в какой-то файл, может отловите сообщение которое соответствует
> смене сессии.
Этих сообщений болле 2000, посылаться они могут с потрясающей частотой, угадать, какое из сообщений (записанных, причём, численно - а то как ещё?) и есть смена сессии не возможно физически. Нету таких гениев-супермэнов, есть либо гении, либо супермэны! :))))
Defunct (2004-03-04 18:04:00) [14]Makhanev A.S. © (04.03.04 16:28) [2]
Просто мысли вслух...
Мммм.. поставьте ловушку всех сообщений винды. Рагистрируйте в какой-то файл, может отловите сообщение которое соответствует смене сессии.
BlackTiger (2004-03-04 16:53:00) [15]Насколько я слышал, человеческого способа не существует. Один товарищ просто сделал некий "LogonSensor". Суть его была в том, что по таймеру анализировался текущий пользователь или его отсутствие, если логона не было (не было сделано входа, или использовался Fast User Switching).
Makhanev A.S. (2004-03-04 16:28:00) [16]
> Soft © (03.03.04 23:52) [1]
я про "ловлю" события смены сесии, а не про ее смену самому.
Soft (2004-03-03 23:52:00) [17]The LogonUser function attempts to perform a user logon operation. You specify the user with a user name and domain, and authenticate the user with a clear-text password. If the function succeeds, you receive a handle to a token that represents the logged-on user. You can then use this token handle to impersonate the specified user, or in most cases, to create a process running in the context of the specified user.
BOOL LogonUser(
LPTSTR lpszUsername, // string that specifies the user name
LPTSTR lpszDomain, // string that specifies the domain or server
LPTSTR lpszPassword, // string that specifies the password
DWORD dwLogonType, // specifies the type of logon operation
DWORD dwLogonProvider, // specifies the logon provider
PHANDLE phToken // pointer to variable to receive token handle
);