- 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
This commit is contained in:
Eric Kohl 2014-01-11 20:47:41 +00:00
parent f0ecb9c0cb
commit e7e1ec28e5
2 changed files with 47 additions and 3 deletions

View file

@ -845,7 +845,10 @@ DoGenericAction(
Session->Gina.Functions.WlxDisplaySASNotice(Session->Gina.Context); Session->Gina.Functions.WlxDisplaySASNotice(Session->Gina.Context);
break; break;
case WLX_SAS_ACTION_NONE: /* 0x02 */ 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; break;
case WLX_SAS_ACTION_LOCK_WKSTA: /* 0x03 */ case WLX_SAS_ACTION_LOCK_WKSTA: /* 0x03 */
if (Session->Gina.Functions.WlxIsLockOk(Session->Gina.Context)) if (Session->Gina.Functions.WlxIsLockOk(Session->Gina.Context))
@ -919,7 +922,7 @@ DispatchSAS(
case WLX_SAS_TYPE_TIMEOUT: /* 0x00 */ case WLX_SAS_TYPE_TIMEOUT: /* 0x00 */
{ {
Session->Gina.Functions.WlxDisplaySASNotice(Session->Gina.Context); Session->Gina.Functions.WlxDisplaySASNotice(Session->Gina.Context);
break; return;
} }
default: default:
{ {

View file

@ -572,6 +572,47 @@ cleanup:
return FALSE; 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 static BOOL
DoAutoLogon( DoAutoLogon(
IN PGINA_CONTEXT pgContext) IN PGINA_CONTEXT pgContext)
@ -685,7 +726,7 @@ WlxDisplaySASNotice(
return; return;
} }
if (DoAutoLogon(pgContext)) if (CheckAutoAdminLogon(pgContext))
{ {
/* Don't display the window, we want to do an automatic logon */ /* Don't display the window, we want to do an automatic logon */
pgContext->AutoLogonState = AUTOLOGON_ONCE; pgContext->AutoLogonState = AUTOLOGON_ONCE;