From: Eric Kohl Date: Sat, 11 Jan 2014 20:47:41 +0000 (+0000) Subject: [MSGINA] X-Git-Tag: ReactOS-0.3.16~281 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=e7e1ec28e508c28fdbb336902e2536ac85ae693f [MSGINA] - WlxDisplaySASNotice: Do not try an auto admin logon here. Check for auto admin logon instead and let WlxLoggedOutSAS do the logon stuff. [WINLOGON] - Avoid posting two SAS notification messages when winlogon is started up. svn path=/trunk/; revision=61587 --- diff --git a/reactos/base/system/winlogon/sas.c b/reactos/base/system/winlogon/sas.c index 3646d447777..0409200bd92 100644 --- a/reactos/base/system/winlogon/sas.c +++ b/reactos/base/system/winlogon/sas.c @@ -845,7 +845,10 @@ DoGenericAction( Session->Gina.Functions.WlxDisplaySASNotice(Session->Gina.Context); break; case WLX_SAS_ACTION_NONE: /* 0x02 */ - Session->Gina.Functions.WlxDisplaySASNotice(Session->Gina.Context); + if (Session->LogonState == STATE_LOGGED_OFF) + { + Session->Gina.Functions.WlxDisplaySASNotice(Session->Gina.Context); + } break; case WLX_SAS_ACTION_LOCK_WKSTA: /* 0x03 */ if (Session->Gina.Functions.WlxIsLockOk(Session->Gina.Context)) @@ -919,7 +922,7 @@ DispatchSAS( case WLX_SAS_TYPE_TIMEOUT: /* 0x00 */ { Session->Gina.Functions.WlxDisplaySASNotice(Session->Gina.Context); - break; + return; } default: { diff --git a/reactos/dll/win32/msgina/msgina.c b/reactos/dll/win32/msgina/msgina.c index c45dbbcd832..fbd9ef5e99f 100644 --- a/reactos/dll/win32/msgina/msgina.c +++ b/reactos/dll/win32/msgina/msgina.c @@ -572,6 +572,47 @@ cleanup: return FALSE; } + +static +BOOL +CheckAutoAdminLogon( + IN PGINA_CONTEXT pgContext) +{ + HKEY WinLogonKey = NULL; + LPWSTR AutoLogon = NULL; + BOOL result = FALSE; + LONG rc; + + if (pgContext->AutoLogonState == AUTOLOGON_DISABLED) + return FALSE; + + rc = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon", + 0, + KEY_QUERY_VALUE, + &WinLogonKey); + if (rc != ERROR_SUCCESS) + goto cleanup; + + rc = ReadRegSzKey(WinLogonKey, + L"AutoAdminLogon", + &AutoLogon); + + if (rc != ERROR_SUCCESS) + goto cleanup; + + if (wcscmp(AutoLogon, L"1") == 0) + result = TRUE; + +cleanup: + if (WinLogonKey != NULL) + RegCloseKey(WinLogonKey); + HeapFree(GetProcessHeap(), 0, AutoLogon); + + return result; +} + + static BOOL DoAutoLogon( IN PGINA_CONTEXT pgContext) @@ -685,7 +726,7 @@ WlxDisplaySASNotice( return; } - if (DoAutoLogon(pgContext)) + if (CheckAutoAdminLogon(pgContext)) { /* Don't display the window, we want to do an automatic logon */ pgContext->AutoLogonState = AUTOLOGON_ONCE;