Re[3]: Gina & LogOff
От: Lexey Россия  
Дата: 18.02.02 15:05
Оценка:
Здравствуйте Баранюк Тарас Николаевич, Вы писали:

БТН>Здравствуйте 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);
БТН> }
БТН>}


БТН>BOOL WINAPI WlxNegotiate(

БТН> DWORD dwWinlogonVersion,
БТН> DWORD *pdwDllVersion
БТН> )
БТН>{
БТН>// SCGinaInitialize();
БТН> if (dwWinlogonVersion < WLX_CURRENT_VERSION)
БТН> {
БТН> return(FALSE);
БТН> }
БТН> *pdwDllVersion = WLX_CURRENT_VERSION;
БТН> return(TRUE);

БТН>}



БТН>BOOL WINAPI WlxInitialize(

БТН> LPWSTR lpWinsta,
БТН> HANDLE hWlx,
БТН> PVOID pvReserved,
БТН> PVOID pWinlogonFunctions,
БТН> PVOID *pWlxContext
БТН> )
БТН>{
БТН> pWlxFuncs = (PWLX_DISPATCH_VERSION_1_1) pWinlogonFunctions;
БТН> hGlobalWlx = hWlx;
БТН> pGlobals = (PGlobals)LocalAlloc(LMEM_FIXED | LMEM_ZEROINIT, sizeof(Globals));
БТН> *pWlxContext = (PVOID) pGlobals;
БТН> pWlxFuncs->WlxUseCtrlAltDel(hWlx);
БТН> InitCommonControls();

Зачем это?

БТН> return(TRUE);

БТН>}


БТН>VOID WINAPI WlxDisplaySASNotice(PVOID pContext)

БТН>{
БТН> MessageBox(0,TEXT("WlxDisplaySASNotice"),TEXT("WlxDisplaySASNotice"),MB_OK);

В Gina нельзя использовать стандартные виндовые контролы. У Winlogon'а есть свои специальные варианты диалоговых функций.

Skip...

В общем, тут черт ногу сломит. Интересен именно участок, который не работает. Но все равно, я бы для начала хорошо подумал, а стоит ли так извращаться?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.