пара вопросов по gina...
От: DelpH  
Дата: 23.04.02 12:32
Оценка:
1) вопрос по реализации функции WlxLoggedOutSAS (как MSDN)
Там проверяется так: if (!LogonUser( L"guest", L"earth", L"secret", LOGON32_LOGON_UNLOCK,
LOGON32_PROVIDER_DEFAULT, phToken)). Вопрос как и откуда получать реальные имя пользователя, домэин и пароль. А то в конце ф-ии это все запихивается в pMprNotifyInfo, а когда я испольщовал реализацию по умолчанию, я их как раз брал из pMprNotifyInfo?
2) В статье "MSGINA — это просто" свои функции задаются таблицей и адреса получаются так:
PDWlxActivateUserShell *pWlxFunc=(PDWlxActivateUserShell *)&Wlxtbl;
for(int i=0;i<ImportsNumber;i++)
{ pWlxFunc[i]=(PDWlxActivateUserShell)::GetProcAddress(hGina,ImportFunctions[i]); }

Как правильно получать адреса, если я объявляю функции не таблицей, а по отдельности. Типа пробовал так:
HMODULE hGina = NULL;
hGina=LoadLibrary("msgina.dll");
DWlxNegotiate = (PDWlxNegotiate) GetProcAddress(hGina, "WlxNegotiate");
if(!DWlxNegotiate)
{ return FALSE; }

Не работает?
Буду очень благодарен!
Re: пара вопросов по gina...
От: Аноним  
Дата: 23.04.02 15:28
Оценка:
Здравствуйте DelpH, Вы писали:

DH>1) вопрос по реализации функции WlxLoggedOutSAS (как MSDN)

DH>Там проверяется так: if (!LogonUser( L"guest", L"earth", L"secret", LOGON32_LOGON_UNLOCK,
DH>LOGON32_PROVIDER_DEFAULT, phToken)). Вопрос как и откуда получать реальные имя пользователя, домэин и пароль. А то в конце ф-ии это все запихивается в pMprNotifyInfo, а когда я испольщовал реализацию по умолчанию, я их как раз брал из pMprNotifyInfo?

При реализации своей GINA DLL возможны два подхода:

1) Проверку пользователей осуществляет MSGINA. В таком случае MSGINA рисует весь UI, MSGINA вызывает [Lsa]LogonUser и возвращает тебе токен пользователя и информацию о пользователе. Ты обязан вызывать одноименные функции MSGINA из своих функций (а если ты этого не делаешь, ты должен четко понимать, почему). Это просто, это продемонстрировано в статье "MSGINA — это просто".

2) Проверку пользователей осуществляешь ты. В таком случае, ты должен рисовать весь UI самостоятельно, ты не можешь вызывать ни одной функции из MSGINA. Так что ответ на твой вопрос — имя пользователя, пароль и домен ты получишь из своего диалога.

DH>2) В статье "MSGINA — это просто" свои функции задаются таблицей и адреса получаются так:

DH>PDWlxActivateUserShell *pWlxFunc=(PDWlxActivateUserShell *)&Wlxtbl;
DH>for(int i=0;i<ImportsNumber;i++)
DH>{ pWlxFunc[i]=(PDWlxActivateUserShell)::GetProcAddress(hGina,ImportFunctions[i]); }

DH>Как правильно получать адреса, если я объявляю функции не таблицей, а по отдельности. Типа пробовал так:

DH>HMODULE hGina = NULL;
DH>hGina=LoadLibrary("msgina.dll");
DH>DWlxNegotiate = (PDWlxNegotiate) GetProcAddress(hGina, "WlxNegotiate");
DH>if(!DWlxNegotiate)
DH>{ return FALSE; }

Должно работать, только имей в виду, что MSGINA.DLL должна быть загружена один раз в самом начале и выгружена в самом конце.

P.S. Примеры к GINA на MSDN не выдерживают никакой критики. Мало того, что они не демонстрируют на самом деле ничего, так в них еще есть и ошибки, в частности, пример для WlxLoggedOutSAS полностью игнорирует параметр pLogonSid. Последствия этого — DLL initialization failed для user32 при запуске userinit.exe.
Re[2]: пара вопросов по gina...
От: Lexey Россия  
Дата: 24.04.02 07:04
Оценка:
Здравствуйте Аноним, Вы писали:

АА>При реализации своей GINA DLL возможны два подхода:


А>1) Проверку пользователей осуществляет MSGINA. В таком случае MSGINA рисует весь UI, MSGINA вызывает [Lsa]LogonUser и возвращает тебе токен пользователя и информацию о пользователе. Ты обязан вызывать одноименные функции MSGINA из своих функций (а если ты этого не делаешь, ты должен четко понимать, почему). Это просто, это продемонстрировано в статье "MSGINA — это просто".


А>2) Проверку пользователей осуществляешь ты. В таком случае, ты должен рисовать весь UI самостоятельно, ты не можешь вызывать ни одной функции из MSGINA. Так что ответ на твой вопрос — имя пользователя, пароль и домен ты получишь из своего диалога.


В общем-то, теоретически, есть еще 3-ий хакерский вариант — подменить диалоговые функции Winlogon на свои. Тогда все диалоговые вызовы будут проходить через свой код.
Re[3]: пара вопросов по gina...
От: Аноним  
Дата: 27.04.02 03:41
Оценка:
2 Аноним:
Спасибо, теперь понятно. Правда пока не могу заставить работать
WlxLoggedOutSAS (при загрузке при попытке вызвать диалог логона
возникает ошибка, хотя простой WlxMesBox появляется?), но теоретически все понятно. И еще не совсем понятно, что делать со
всеми параметра WlxLoggedOutSAS. В примере функции из MSDN некоторые аргументы обнуляются и т.д...

Здравствуйте Lexey, Вы писали: ...
L>В общем-то, теоретически, есть еще 3-ий хакерский вариант — подменить диалоговые функции Winlogon на свои. Тогда все диалоговые вызовы будут проходить через свой код.

Этот способ пока не прокатывает. Вроде заменяю ту функцию своей, но вызывается все равно стандартная.
Re[2]: пара вопросов по gina...
От: EugeneC Украина  
Дата: 03.10.02 06:40
Оценка:
Здравствуйте Аноним, Вы писали:

Примеры к GINA на MSDN не выдерживают никакой критики. Мало того, что они не демонстрируют на самом деле ничего, так в них еще есть и ошибки, в частности, пример для WlxLoggedOutSAS полностью игнорирует параметр pLogonSid. Последствия этого — DLL initialization failed для user32 при запуске userinit.exe.


Именно с этой проблемой я и столкнулся при реализации собственной WlxLoggedOutSAS, которая
отображает мой собственный UI-диалог.
Как мне корректно поступить с этим параметром pLogonSid и может есть ещё какието нюансы, неуказанные в примере MSDN, чтобы в последствии нориально запустилась userinit.exe?
С уважением, Евгений.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.