[WINLOGON] Close all dialog boxes on SAS
authorEric Kohl <eric.kohl@reactos.org>
Mon, 21 May 2018 09:20:50 +0000 (11:20 +0200)
committerEric Kohl <eric.kohl@reactos.org>
Mon, 21 May 2018 09:21:42 +0000 (11:21 +0200)
CORE-13593

base/system/winlogon/sas.c
base/system/winlogon/winlogon.h
base/system/winlogon/wlx.c

index 3f02df3..077079d 100644 (file)
@@ -1157,9 +1157,7 @@ DispatchSAS(
                 case STATE_LOGGED_OFF:
                     Session->LogonState = STATE_LOGGED_OFF_SAS;
 
                 case STATE_LOGGED_OFF:
                     Session->LogonState = STATE_LOGGED_OFF_SAS;
 
-                    hwnd = GetTopDialogWindow();
-                    if (hwnd != NULL)
-                        SendMessage(hwnd, WLX_WM_SAS, 0, 0);
+                    CloseAllDialogWindows();
 
                     Session->Options = 0;
 
 
                     Session->Options = 0;
 
@@ -1192,9 +1190,7 @@ DispatchSAS(
                 case STATE_LOCKED:
                     Session->LogonState = STATE_LOCKED_SAS;
 
                 case STATE_LOCKED:
                     Session->LogonState = STATE_LOCKED_SAS;
 
-                    hwnd = GetTopDialogWindow();
-                    if (hwnd != NULL)
-                        SendMessage(hwnd, WLX_WM_SAS, 0, 0);
+                    CloseAllDialogWindows();
 
                     wlxAction = (DWORD)Session->Gina.Functions.WlxWkstaLockedSAS(Session->Gina.Context, dwSasType);
                     break;
 
                     wlxAction = (DWORD)Session->Gina.Functions.WlxWkstaLockedSAS(Session->Gina.Context, dwSasType);
                     break;
index a27f1ed..37960e2 100644 (file)
@@ -342,8 +342,8 @@ RemoveStatusMessage(IN PWLSESSION Session);
 VOID
 InitDialogListHead(VOID);
 
 VOID
 InitDialogListHead(VOID);
 
-HWND
-GetTopDialogWindow(VOID);
+VOID
+CloseAllDialogWindows(VOID);
 
 BOOL
 GinaInit(IN OUT PWLSESSION Session);
 
 BOOL
 GinaInit(IN OUT PWLSESSION Session);
index ba24de1..44983e7 100644 (file)
@@ -106,24 +106,22 @@ GetDialogListEntry(HWND hwndDlg)
 
 
 HWND
 
 
 HWND
-GetTopDialogWindow(VOID)
+CloseAllDialogWindows(VOID)
 {
     PDIALOG_LIST_ENTRY Current;
     PLIST_ENTRY ListEntry;
 
     ListEntry = DialogListHead.Flink;
 {
     PDIALOG_LIST_ENTRY Current;
     PLIST_ENTRY ListEntry;
 
     ListEntry = DialogListHead.Flink;
-    if (ListEntry != &DialogListHead)
+    while (ListEntry != &DialogListHead)
     {
         Current = CONTAINING_RECORD(ListEntry,
                                     DIALOG_LIST_ENTRY,
                                     Entry);
 
     {
         Current = CONTAINING_RECORD(ListEntry,
                                     DIALOG_LIST_ENTRY,
                                     Entry);
 
-        TRACE("Found entry: %p window %p\n", Current, Current->hWnd);
-        return Current->hWnd;
-    }
+        PostMessage(Current->hWnd, WLX_WM_SAS, 0, 0);
 
 
-    TRACE("Found no window\n");
-    return NULL;
+        ListEntry = ListEntry->Flink;
+    }
 }
 
 
 }