Название: Watch User Log In Отправлено: QuAzI от Декабрь 22, 2010, 14:37 Нужно держать сервис, морда которого была бы доступна через системный трей. Как отловить момент входа (логина) пользователя и проверить, кто сейчас активный юзверь?
Название: Re: Watch User Log In Отправлено: crackedmind от Декабрь 23, 2010, 12:59 Чтобы много не писать, дам ссылочку.
http://www.rsdn.ru/article/baseserv/winlogon.xml Название: Re: Watch User Log In Отправлено: QuAzI от Декабрь 23, 2010, 15:49 Огромное спасибо. А чего-нить аналогичного покурить под юних не ткнёте?
Название: Re: Watch User Log In Отправлено: crackedmind от Декабрь 23, 2010, 20:39 Про юних я не в курсе :)
Название: Re: Watch User Log In Отправлено: QuAzI от Декабрь 28, 2010, 03:37 Нифига энтот WinLogon не хочет срабатывать. Набросал либу с одной экспортируемой функцией. Указываю её в реестре хоть в Logon, хоть в StartShell. Ни приложение не стартует, которое должно ей вызываться, ни в лог не пишет. Если запустить так
rundll32 tray_service_launcher.dll,StartShell То в лог успевает написать перед тем как брякнуться из-за ошибочного токена юзверя. Если меняю CreateProcessAsUser на CreateProcess из Kernel32, то всё работает, но так не будет запускать приложение из под залогинившегося юзверя. Подозреваю, что косяк может быть в структуре Код: typedef struct _WLX_NOTIFICATION_INFO Название: Re: Watch User Log In Отправлено: Fat-Zer от Декабрь 28, 2010, 04:03 А если банально морду в авторан на логин юзера поставить? (KISS man!)
Или я не правильно понял задачу? Название: Re: Watch User Log In Отправлено: QuAzI от Декабрь 28, 2010, 08:40 Да я бы хотел, но сказали оформить "как сервис доступный из трея". Само собой пока юзверь не залогинится бесполезно ломиться в трей, к тому же там конфиг, который в параметрах пользователя хранится. Т.е. оптимально было бы к этому событию привязаться. А уже в подробности реализации "сервиса" я думаю мало кто будет вникать.
Название: Re: Watch User Log In Отправлено: crackedmind от Декабрь 28, 2010, 08:50 Цитировать Нифига энтот WinLogon не хочет срабатывать. Набросал либу с одной экспортируемой функцией. Указываю её в реестре хоть в Logon, хоть в StartShell. Ни приложение не стартует, которое должно ей вызываться, ни в лог не пишет. Если делать как в статье, то все работает. Лично проверял =)Цитировать pStatusCallback должен быть определён как PFNMSGECALLBACK, но я не нашёл описания этого типа и в MSDN написано что он зарезервирован для внутренних нужд. Объявил как сообразил. вообще не трогай этот тип, раз зарезервирован.Читай внимательнее в каком разделе реестра какие ключи надо создать, чтобы он сработал. Название: Re: Watch User Log In Отправлено: QuAzI от Декабрь 28, 2010, 10:01 Мне казалось в реестре должно быть что-то типа этого
Код: Windows Registry Editor Version 5.00 Название: Re: Watch User Log In Отправлено: crackedmind от Декабрь 28, 2010, 11:09 Цитировать Где StartShell - функция из dll одноимённая событию. ну функцию ты как хочешь можешь обозвать, но имя ключа должно быть предопределенное Logon, Logoff и прочие.Также проверь, отключил ли ты манглинг имен. Название: Re: Watch User Log In Отправлено: QuAzI от Декабрь 28, 2010, 11:19 Опа... для самых серых и несведущих... что такое манглин?
Название: Re: Watch User Log In Отправлено: crackedmind от Декабрь 28, 2010, 11:28 упс, манглинг :) http://en.wikipedia.org/wiki/Name_mangling
Название: Re: Watch User Log In Отправлено: QuAzI от Декабрь 28, 2010, 11:59 Вроде понял о чём речь.
Из слинкованной dll, если смотреть сторонним софтом, экспортируется _CRT_MT и StartShell. Откуда _CRT_MT взялся не знаю, но StartShell экспортируется без абракадабры, да и rundll32 его бы не запускала вообще, писала бы что функции нет, если бы в имени вопрос был. Название: Re: Watch User Log In Отправлено: crackedmind от Декабрь 28, 2010, 14:10 Так вот экспортируешь функции под любыми именами, только чтобы соответствовало виндовому прототипу и привязываешь к нужным событиям. Их не так много.
у меня было так. Цитировать [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\myLogonNotify] "DllName"="С:\\myLogonNotify.dll" "Logon"="myEventLogon" "Impersonate"=dword:00000000 "Asynchronous"=dword:00000000 И на событие event в лог писалось Цитировать Event: user logon, User: myLogin, Domain: MyDomain,Window station: WinSta0, User token 0x00000618,Desktop 0x000000B8 Название: Re: Watch User Log In Отправлено: QuAzI от Декабрь 29, 2010, 01:29 Фигня пролечилась после того как положил нужные dll не в директорию с запускаемой библой, а в windows\system32
Конкретнее QtCore4.dll mingwm10.dll libgcc_s_dw2-1.dll Как-то это не красиво смотрится. Придётся "гадить" туда, куда обычно приличные проги не пишут. Название: Re: Watch User Log In Отправлено: QuAzI от Июнь 10, 2011, 17:21 Опять проблемы с аналогичной библиотечкой (исходники в аттаче). WinLogon её подхватывает при загрузке (удалить её нельзя), но ни в файл-лог, ни к SQL-серверу ничего не приходит, а должно бы по идее.
Библиотеки все нужные лежат в SYSTEM32 Есть какие мысли у кого, как это пролечить? |