Ситуация в следующем: Переписываю msgina.dll, все прекрасно работает кроме одной маленькой вещи — при попытке сделать Log off система слегка задумывается, а затем выдает сообщение а-ля "теперь питание вашего компьютера можно выключить" в NT4 и w2k, а в XP просто тихо подвисает в непонятном состоянии с темным экраном... Если понатыкивать MessageBox-ов при вызове Wlx-функций, чтобы дать системе подумать пока я их закрываю =) , то WlxloggedOutSAS проходит, но не проходит авторизация, т.е. пассворд и логин не принимаются...PLZ Help, я просто уже не знаю в каком направлении рыть.
Здравствуйте Баранюк Тарас Николаевич, Вы писали:
БТН>Hi!
БТН>Ситуация в следующем: Переписываю msgina.dll, все прекрасно работает кроме одной маленькой вещи — при попытке сделать Log off система слегка задумывается, а затем выдает сообщение а-ля "теперь питание вашего компьютера можно выключить" в NT4 и w2k, а в XP просто тихо подвисает в непонятном состоянии с темным экраном... Если понатыкивать MessageBox-ов при вызове Wlx-функций, чтобы дать системе подумать пока я их закрываю =) , то WlxloggedOutSAS проходит, но не проходит авторизация, т.е. пассворд и логин не принимаются...PLZ Help, я просто уже не знаю в каком направлении рыть.
Здравствуйте Lexey, Вы писали:
L>Здравствуйте Баранюк Тарас Николаевич, Вы писали:
БТН>>Hi!
БТН>>Ситуация в следующем: Переписываю msgina.dll, все прекрасно работает кроме одной маленькой вещи — при попытке сделать Log off система слегка задумывается, а затем выдает сообщение а-ля "теперь питание вашего компьютера можно выключить" в NT4 и w2k, а в XP просто тихо подвисает в непонятном состоянии с темным экраном... Если понатыкивать MessageBox-ов при вызове Wlx-функций, чтобы дать системе подумать пока я их закрываю =) , то WlxloggedOutSAS проходит, но не проходит авторизация, т.е. пассворд и логин не принимаются...PLZ Help, я просто уже не знаю в каком направлении рыть.
L>Код в студию!
А что именно?
Ну для примера вот:
HINSTANCE hDllInstance; // My instance, for resource loading
HANDLE hGlobalWlx; // Handle to tell winlogon who's calling
PWLX_DISPATCH_VERSION_1_1 pWlxFuncs;
#define WINLOGON_APP TEXT("Winlogon")
#define USERINIT TEXT("Userinit")
#define USERINIT_DEFAULT TEXT("Userinit.exe")
if (!pGroups)
{
CloseHandle(hUser);
return(WLX_SAS_ACTION_NONE);
}
//
// The tricky part. We need to get the Logon SID from the token,
// since that is what Winlogon will use to protect the windowstation
// and desktop.
//
Здравствуйте Баранюк Тарас Николаевич, Вы писали:
БТН>Здравствуйте Lexey, Вы писали:
L>>Здравствуйте Баранюк Тарас Николаевич, Вы писали:
БТН>>>Hi!
БТН>>>Ситуация в следующем: Переписываю msgina.dll, все прекрасно работает кроме одной маленькой вещи — при попытке сделать Log off система слегка задумывается, а затем выдает сообщение а-ля "теперь питание вашего компьютера можно выключить" в NT4 и w2k, а в XP просто тихо подвисает в непонятном состоянии с темным экраном... Если понатыкивать MessageBox-ов при вызове Wlx-функций, чтобы дать системе подумать пока я их закрываю =) , то WlxloggedOutSAS проходит, но не проходит авторизация, т.е. пассворд и логин не принимаются...PLZ Help, я просто уже не знаю в каком направлении рыть.
L>>Код в студию! БТН>А что именно?
То, что не работает.
БТН>Ну для примера вот:
У.... как все запущено. Неужели вам реально нужно переписывать ВСЮ функциональность msgina?
БТН>HINSTANCE hDllInstance; // My instance, for resource loading БТН>HANDLE hGlobalWlx; // Handle to tell winlogon who's calling БТН>PWLX_DISPATCH_VERSION_1_1 pWlxFuncs; БТН>#define WINLOGON_APP TEXT("Winlogon") БТН>#define USERINIT TEXT("Userinit") БТН>#define USERINIT_DEFAULT TEXT("Userinit.exe")
БТН>SYSTEMTIME stLocalLogonTime; // logon time БТН>PWSTR szLocalUserName; БТН>PWSTR szLocalDomainName; БТН>PGlobals pGlobals; БТН>PRegData regData; БТН>//////////////////////////////////////////////////////
БТН>BOOL WINAPI DllMain( БТН> HINSTANCE hInstance, БТН> DWORD dwReason, БТН> LPVOID lpReserved) БТН>{ БТН> switch (dwReason) БТН> { БТН> case DLL_PROCESS_ATTACH: БТН> DisableThreadLibraryCalls ( hInstance ); БТН> hDllInstance = hInstance; БТН> case DLL_PROCESS_DETACH: БТН> default: БТН> return(TRUE); БТН> } БТН>}
В Gina нельзя использовать стандартные виндовые контролы. У Winlogon'а есть свои специальные варианты диалоговых функций.
Skip...
В общем, тут черт ногу сломит. Интересен именно участок, который не работает. Но все равно, я бы для начала хорошо подумал, а стоит ли так извращаться?
Re[4]: Gina & LogOff
От:
Аноним
Дата:
20.02.02 08:29
Оценка:
Здравствуйте Lexey, Вы писали:
БТН>>>>Ситуация в следующем: Переписываю msgina.dll, все прекрасно работает кроме одной маленькой вещи — при попытке сделать Log off система слегка задумывается, а затем выдает сообщение а-ля "теперь питание вашего компьютера можно выключить" в NT4 и w2k, а в XP просто тихо подвисает в непонятном состоянии с темным экраном... Если понатыкивать MessageBox-ов при вызове Wlx-функций, чтобы дать системе подумать пока я их закрываю =) , то WlxloggedOutSAS проходит, но не проходит авторизация, т.е. пассворд и логин не принимаются...PLZ Help, я просто уже не знаю в каком направлении рыть.
L>>>Код в студию! БТН>>А что именно? L>То, что не работает.
Знал бы где грабли, исправил бы...
L>У.... как все запущено. Неужели вам реально нужно переписывать ВСЮ функциональность msgina?
да, без вариантов... БТН>> MessageBox(0,TEXT("WlxDisplaySASNotice"),TEXT("WlxDisplaySASNotice"),MB_OK);
L>В Gina нельзя использовать стандартные виндовые контролы. У Winlogon'а есть свои специальные варианты диалоговых функций.
это я знаю =) я их использую для того, "чтобы дать системе подумать пока я их закрываю" (c)
L>В общем, тут черт ногу сломит. Интересен именно участок, который не работает. Но все равно, я бы для >начала хорошо подумал, а стоит ли так извращаться?
дык я еще раз говорю, что я не знаю вообще откуда ноги растут =( Если ты реально сталкивался с переписыванием джины, то могу выслать проект...В любом случае, спасибо , что откликнулся... ты был единственным =(
Здравствуйте Аноним, Вы писали:
А>Здравствуйте Lexey, Вы писали:
L>>>>Код в студию! БТН>>>А что именно? L>>То, что не работает. А>Знал бы где грабли, исправил бы...
А логи Winlogon'а ничего не дают?
L>>У.... как все запущено. Неужели вам реально нужно переписывать ВСЮ функциональность msgina? А>да, без вариантов... БТН>>> MessageBox(0,TEXT("WlxDisplaySASNotice"),TEXT("WlxDisplaySASNotice"),MB_OK);
L>>В Gina нельзя использовать стандартные виндовые контролы. У Winlogon'а есть свои специальные варианты диалоговых функций. А>это я знаю =) я их использую для того, "чтобы дать системе подумать пока я их закрываю" (c)
L>>В общем, тут черт ногу сломит. Интересен именно участок, который не работает. Но все равно, я бы для >начала хорошо подумал, а стоит ли так извращаться?
А>дык я еще раз говорю, что я не знаю вообще откуда ноги растут =( Если ты реально сталкивался с переписыванием джины,
Увы, целиком я ее не переписывал — только довески приделывал.
>то могу выслать проект...В любом случае, спасибо , что откликнулся... ты был единственным =(
Да не за что. А в чем все-таки исходная задача состоит?
Re[6]: Gina & LogOff
От:
Аноним
Дата:
20.02.02 10:43
Оценка:
Здравствуйте Lexey, Вы писали:
L>:( А логи Winlogon'а ничего не дают?
где взять отладочную версию winlogon-a? У меня в NTDDK нет...
Здравствуйте Аноним, Вы писали:
А>Здравствуйте Lexey, Вы писали:
L>> А логи Winlogon'а ничего не дают? А> где взять отладочную версию winlogon-a? У меня в NTDDK нет...
Здравствуйте Аноним, Вы писали:
А>Здравствуйте Lexey, Вы писали:
БТН>>>>>Ситуация в следующем: Переписываю msgina.dll, все прекрасно работает кроме одной маленькой вещи — при попытке сделать Log off система слегка задумывается, а затем выдает сообщение а-ля "теперь питание вашего компьютера можно выключить" в NT4 и w2k, а в XP просто тихо подвисает в непонятном состоянии с темным экраном... Если понатыкивать MessageBox-ов при вызове Wlx-функций, чтобы дать системе подумать пока я их закрываю =) , то WlxloggedOutSAS проходит, но не проходит авторизация, т.е. пассворд и логин не принимаются...PLZ Help, я просто уже не знаю в каком направлении рыть.
Можно мне встрять в вашу занимательную беседу? Спасибо :-)
Надеюсь, дефайн WLX_CURRENT_VERSION реально означает WLX_VERSION_1_1 (сие никак не видно из исходника)?
Больше вроде ничего подозрительного не увидел, хотя использование MessageBox вместо WlxMessageBox явно против правил, и мне не совсем понятно назначение цикла while() в WlxActivateUserShell. Ну и, соответственно, игры с сидами групп. Хотелось бы увидеть весь проект и прогнать самому. Интересно также узнать происхождение комментариев на английском. И кода вцелом.
Я совсем недавно из интересу писал собственную реализацию гины (никаких изысков, обычный вход-выход), так что по свежим воспоминаниям возможно чем-то смогу помочь.
Кстати, я бы для начала выбросил все эксперименты и проверил работу классического варианта, и только после этого добавлял бы перцу понемногу... :-)
Здравствуйте Баранюк Тарас Николаевич, Вы писали:
БТН>Ситуация в следующем: Переписываю msgina.dll, все прекрасно работает кроме одной маленькой вещи — при попытке сделать Log off система слегка задумывается, а затем выдает сообщение а-ля "теперь питание вашего компьютера можно выключить" в NT4 и w2k, а в XP просто тихо подвисает в непонятном состоянии с темным экраном...
Наконец-то я пофиксил твою проблему. Как выяснилось, дело было в том, что пользоваться глобальными данными в качестве контекста гины запрещено.
Ровно после того, как я упаковал все по-правильному (в PGlobals, сохранив ее в pWlxContext) — тут же все и заработало. Похоже (буду еще детально разбираться) Winlogon грузит гину при каждом входе, а не единожды. Если необходимо, проект в текущем состоянии могу прислать обратно.
Здравствуйте Alex Fedotov, Вы писали:
ИВ>>Похоже (буду еще детально разбираться) Winlogon грузит гину при каждом входе, а не единожды.
AF>Ты имеешь в виду XP? Потому что в NT4/Win2K это определенно не так.
Alex, я же говорю — буду разбираться. Но вот что меня сегодня сбило с толку: вхожу на машину (NT4r) с гиной предыдущей компиляции (с теми самыми глюками), пересобираю гину, переименовываю текущую, копирую в system32 новую сборку, делаю logoff (а глючило именно на нем, точнее сразу после него)... и получаю нормально работающий диалог логина. Делаю вывод — гину последней сборки только что загрузили
---
С уважением,
Игорь
Re[6]: Gina & LogOff
От:
Аноним
Дата:
19.07.04 17:49
Оценка:
Здравствуйте, Игорь Вартанов, Вы писали:
ИВ>Здравствуйте Аноним, Вы писали:
А>>Здравствуйте Lexey, Вы писали:
БТН>>>>>>Ситуация в следующем: Переписываю msgina.dll, все прекрасно работает кроме одной маленькой вещи — при попытке сделать Log off система слегка задумывается, а затем выдает сообщение а-ля "теперь питание вашего компьютера можно выключить" в NT4 и w2k, а в XP просто тихо подвисает в непонятном состоянии с темным экраном... Если понатыкивать MessageBox-ов при вызове Wlx-функций, чтобы дать системе подумать пока я их закрываю =) , то WlxloggedOutSAS проходит, но не проходит авторизация, т.е. пассворд и логин не принимаются...PLZ Help, я просто уже не знаю в каком направлении рыть.
ИВ>Можно мне встрять в вашу занимательную беседу? Спасибо
Разрешите и мне тогда уж подключиться к вашей беседе!
ИВ>Надеюсь, дефайн WLX_CURRENT_VERSION реально означает WLX_VERSION_1_1 (сие никак не видно из исходника)?
ИВ>Больше вроде ничего подозрительного не увидел, хотя использование MessageBox вместо WlxMessageBox явно против правил, и мне не совсем понятно назначение цикла while() в WlxActivateUserShell. Ну и, соответственно, игры с сидами групп. Хотелось бы увидеть весь проект и прогнать самому. Интересно также узнать происхождение комментариев на английском. И кода вцелом.
Согласен, возможны проблемы именно из-за неопределенностей в использовании различных версий (1_1, 1_3 и т.д.)
ИВ>Я совсем недавно из интересу писал собственную реализацию гины (никаких изысков, обычный вход-выход), так что по свежим воспоминаниям возможно чем-то смогу помочь.
А вот теперь прошу помощи в решении моей маааааленькой проблемки
функция WlxLoggedOnSas вызывается только один раз, причем выход после ее первого выполнения ничем не завершается (типа ACTION_NONE). Подозрения падают именно на WlxActivateUserShell! Что-то там не так не делается!
extern "C" int __export WINAPI WlxLoggedOnSAS(PVOID pWlxContext,DWORD dwSasType,PVOID pReserved)
{
PGLOBALS pGlobals;
int result;
if ( dwSasType != WLX_SAS_TYPE_CTRL_ALT_DEL ) return WLX_SAS_ACTION_NONE;
pGlobals = (PGLOBALS) pWlxContext;
TFormLoggedOnSas *FormLoggedOnSas = new TFormLoggedOnSas(NULL);
result = FormLoggedOnSas->ShowModal();
delete FormLoggedOnSas;
FormLoggedOnSas = NULL;
switch (result)
{
case 1: return WLX_SAS_ACTION_LOCK_WKSTA; //lock
case 2: return WLX_SAS_ACTION_NONE; //change pass (nedodelano)
case 3: return WLX_SAS_ACTION_FORCE_LOGOFF; //logoff
case 4: return WLX_SAS_ACTION_TASKLIST; //tasks
case 6: return WLX_SAS_ACTION_NONE; //none
case 10:return WLX_SAS_ACTION_SHUTDOWN_POWER_OFF; //shutdown
case 11:return WLX_SAS_ACTION_SHUTDOWN_REBOOT; //reboot
default:return WLX_SAS_ACTION_NONE;
}
}
Заранее благодарен за любую помощь!
ИВ>Кстати, я бы для начала выбросил все эксперименты и проверил работу классического варианта, и только после этого добавлял бы перцу понемногу...
ИВ>Наконец-то я пофиксил твою проблему. Как выяснилось, дело было в том, что пользоваться глобальными данными в качестве контекста гины запрещено. ИВ>Ровно после того, как я упаковал все по-правильному (в PGlobals, сохранив ее в pWlxContext) — тут же все и заработало. Похоже (буду еще детально разбираться) Winlogon грузит гину при каждом входе, а не единожды. Если необходимо, проект в текущем состоянии могу прислать обратно.
Привет всем!
Я тоже пишу свою GINA и наблюдаю такое же поведение. При logoff вызывается моя функция WlxIsLogoffOk, которая возвращает TRUE, а дальше ничего не происходит. Черный экран и курсор мыши. Если нажать Ctrl-Shift-Esc, то появляется диспетчер задач. В нем можно запустить снова explorer. Однако, если в нем сделать снова logoff, то просто ничего не произойдет.
Запустил GINA на отладочной версии XP SP1, там ничего не видно.
Может ли кто-нибудь помочь?
Заранее спасибо.
Здравствуйте, Lonely Dog, Вы писали:
LD>Привет всем! LD>Я тоже пишу свою GINA и наблюдаю такое же поведение. При logoff вызывается моя функция WlxIsLogoffOk, которая возвращает TRUE, а дальше ничего не происходит. Черный экран и курсор мыши.
Оказывается, это не просто черный экран, а мои обои. То есть, даже профиль не выгружается.
Здравствуйте, Lonely Dog, Вы писали:
LD>Здравствуйте, Lonely Dog, Вы писали:
LD>>Привет всем! LD>>Я тоже пишу свою GINA и наблюдаю такое же поведение. При logoff вызывается моя функция WlxIsLogoffOk, которая возвращает TRUE, а дальше ничего не происходит. Черный экран и курсор мыши. LD>Оказывается, это не просто черный экран, а мои обои. То есть, даже профиль не выгружается.
Запуск GINA в отладочной версии винды показывает, что не срабатывает какой-то RPC вызов. Перед этим есть сообщения о том, что не сработал LPC для explorer-а. Блин, может это все-таки бага винды. Знаю, что нечто подобное было на nt4 terminal server edition.
Здравствуйте, Lonely Dog, Вы писали:
LD>Здравствуйте, Lonely Dog, Вы писали:
LD>Проблема была в неправильном заполнении pAuthenticationId в функции WlxLoggedOutSas.
У меня та же проблема, вроде pAuthenticationId заполняю верно: