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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.