Нужно отловить события:
-пользователь логинится
-пользователь блокирует станцию (кроме как ловить CTRL+ALT+DEL станция блокируется программно ф-ей LockWorkStation)
-пользователь разблокирует станцию (кроме как ловить CTRL+ALT+DEL)
Какие сообщения при этом посылает система?
Или каким способом это еще можно сделать?
Re: отловить логин, блокировку и разблокировку станции
Здравствуйте Снежок, Вы писали:
С>Нужно отловить события: С>-пользователь логинится С>-пользователь блокирует станцию (кроме как ловить CTRL+ALT+DEL станция блокируется программно ф-ей LockWorkStation) С>-пользователь разблокирует станцию (кроме как ловить CTRL+ALT+DEL)
С>Какие сообщения при этом посылает система? С>Или каким способом это еще можно сделать?
Нужно написать свою GINA.DLL, которая бы и ловила все WLX_xxx — нотификациооные сообщения. Т.е. она должна будет работать как "прослойка" между пользователем и MSGINA.DLL
Signed, [TSS] /SDL/
Re: отловить логин, блокировку и разблокировку станции
Здравствуйте Снежок, Вы писали:
С>Какие сообщения при этом посылает система? С>Или каким способом это еще можно сделать?
Не надо писать GINA.dll надо написать Winlogon notification package.
См. MSDN.
Успехов.
Д.Н.С.
Re[2]: отловить логин, блокировку и разблокировку станции
От:
Аноним
Дата:
28.11.01 14:52
Оценка:
Здравствуйте DNS, Вы писали:
DNS>Здравствуйте Снежок, Вы писали:
С>>Какие сообщения при этом посылает система? С>>Или каким способом это еще можно сделать?
DNS>Не надо писать GINA.dll надо написать Winlogon notification package. DNS>См. MSDN.
Подробнее расскажите как зарегистрировать Winlogon notification package у меня не получилось.
Может в длл что то напутал. Можно ли Winlogon notification package на Делфи написать?
Re[3]: отловить логин, блокировку и разблокировку станции
Здравствуйте Аноним, Вы писали:
А>Подробнее расскажите как зарегистрировать Winlogon notification package у меня не получилось. А>Может в длл что то напутал. Можно ли Winlogon notification package на Делфи написать?
Да я не писал WNP на Delphi. А какие возникли проблемы при регистрации?
У меня тоже что-то было, но не помню, решилось быстро.
вот код с саморегистрацией
// notpack.cpp : Implementation of DLL Exports.#include"stdafx.h"#include"resource.h"#include"notpack.h"#include"winwlx.h"#include"atlapp.h"#include"atlmisc.h"#include"RegProfile.h"
CComModule _Module;
BEGIN_OBJECT_MAP(ObjectMap)
END_OBJECT_MAP()
/////////////////////////////////////////////////////////////////////////////
// DLL Entry Pointextern"C"
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
_Module.Init(ObjectMap, hInstance, &LIBID_NOTPACKLib);
DisableThreadLibraryCalls(hInstance);
}
else if (dwReason == DLL_PROCESS_DETACH)
_Module.Term();
return TRUE; // ok
}
STDAPI DllRegisterServer(void)
{
// registers object, typelib and all interfaces in typelib
CRegProfile prof;
prof.SetAppName(_T("Notify"));
prof.SetRegistryKey(_T("Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\"));
prof.WriteProfileInt(_T("notpack"),_T("Impersonate"),0);
prof.WriteProfileInt(_T("notpack"),_T("Asynchronous"),0);
prof.WriteProfileString(_T("notpack"),_T("DllName"),_T("notpack.dll"),REG_EXPAND_SZ);
prof.WriteProfileString(_T("notpack"),_T("Lock"),_T("WLEventLock"),REG_SZ);
return S_OK;
}
void WLEventLock(PWLX_NOTIFICATION_INFO pInfo)
{
MessageBox(NULL,_T("WSLocked"),_T("Title"),MB_OK|MB_ICONERROR);
ATLTRACE(_T("Trace to here \r"));
}
CRegProfile не буду пихать, там и так всё ясно.
Успехов!
Д.Н.С.
Re[3]: отловить логин, блокировку и разблокировку станции
Здравствуйте Аноним, Вы писали:
А>Подробнее расскажите как зарегистрировать Winlogon notification package у меня не получилось. А>Может в длл что то напутал. Можно ли Winlogon notification package на Делфи написать?
На чем писать -- без разницы, факт тот, что тебе нужно написать .DLL, экспортирующую следующие функции:
Каждая функция, которую тебе нужно реализовать, будет по сути проксёй между MSGINA.DLL (или другой, см. ниже) и вызывающимим приложениями (например WinLogon)
Далее, в обработчики WlxLoggedOnSAS, WlxWkstaLockedSAS нужно встроить требуемый код для отлавливания событий.
Вот, в принципе и все.
А, забыл. Имя оригинальной GINA (той самой, которую тебе нужно вызывать из прокси-функций) -- MSGINA.DLL
Signed, [TSS] /SDL/
Re[4]: отловить логин, блокировку и разблокировку станции
Здравствуйте TSS, Вы писали:
TSS>Здравствуйте Аноним, Вы писали:
А>>Подробнее расскажите как зарегистрировать Winlogon notification package у меня не получилось. А>>Может в длл что то напутал. Можно ли Winlogon notification package на Делфи написать?
TSS>На чем писать -- без разницы, факт тот, что тебе нужно написать .DLL, экспортирующую следующие функции: TSS>
TSS>Описания и прототипы функций см. на MSDN.
TSS>Каждая функция, которую тебе нужно реализовать, будет по сути проксёй между MSGINA.DLL (или другой, см. ниже) и вызывающимим приложениями (например WinLogon)
TSS>Далее, в обработчики WlxLoggedOnSAS, WlxWkstaLockedSAS нужно встроить требуемый код для отлавливания событий. TSS>Вот, в принципе и все.
TSS>А, забыл. Имя оригинальной GINA (той самой, которую тебе нужно вызывать из прокси-функций) -- MSGINA.DLL
Совершенно без разницы как будут называться функции — что в реестре напишешь, то winlogon и будет вызывать. И не надо вызывать никаких msgina.dll из функций. Этож нотификация, а не обработка.
Д.Н.С.
Re[5]: отловить логин, блокировку и разблокировку станции
[skipped]
TSS>>А, забыл. Имя оригинальной GINA (той самой, которую тебе нужно вызывать из прокси-функций) -- MSGINA.DLL
DNS>Совершенно без разницы как будут называться функции — что в реестре напишешь, то winlogon и будет вызывать. И не надо вызывать никаких msgina.dll из функций. Этож нотификация, а не обработка.
Тот путь, который я "указал" будет работать на всех NTюхах, а не только под винтукеем.
--- cut из Platfrom SDK: Security: Winlogon Notification Packages ---
Winlogon notification packages require Microsoft® Windows® 2000.
--- cut ---
Signed, [TSS] /SDL/
Re[6]: отловить логин, блокировку и разблокировку станции
Здравствуйте TSS, Вы писали:
TSS>Здравствуйте DNS, Вы писали:
TSS>[skipped]
TSS>>>А, забыл. Имя оригинальной GINA (той самой, которую тебе нужно вызывать из прокси-функций) -- MSGINA.DLL
DNS>>Совершенно без разницы как будут называться функции — что в реестре напишешь, то winlogon и будет вызывать. И не надо вызывать никаких msgina.dll из функций. Этож нотификация, а не обработка.
TSS>Тот путь, который я "указал" будет работать на всех NTюхах, а не только под винтукеем. TSS>--- cut из Platfrom SDK: Security: Winlogon Notification Packages --- TSS> Winlogon notification packages require Microsoft® Windows® 2000. TSS>--- cut ---
Согласен, но мы-то обсуждали реализацию WNP, а не его платформенную зависимость, не так ли?
Д.Н.С.
Re[7]: отловить логин, блокировку и разблокировку станции
Здравствуйте TSS, Вы писали:
TSS>Здравствуйте DNS, Вы писали:
DNS>>Согласен, но мы-то обсуждали реализацию WNP, а не его платформенную зависимость, не так ли?
TSS>См. оригинальное сообщение в котором не было ни слова об Winlogon Notification Packages, но в котором была поставлена четкая задача: отловить...
Попросили рассказать поподробнее про WNP — я и рассказал.
А продвигать gina надо было в своей нитке
Д.Н.С.
Re[9]: отловить логин, блокировку и разблокировку станции