Author: hbelusca
Date: Fri Nov 28 21:48:44 2014
New Revision: 65517
URL: 
http://svn.reactos.org/svn/reactos?rev=65517&view=rev
Log:
[WIN32K]: Move IntClientShutdown function to a dedicated file (that will contain other
shutdown helper functions in the future). Part 3/X
CORE-8322
Added:
    trunk/reactos/win32ss/user/ntuser/shutdown.c   (with props)
    trunk/reactos/win32ss/user/ntuser/shutdown.h   (with props)
Modified:
    trunk/reactos/win32ss/CMakeLists.txt
    trunk/reactos/win32ss/gdi/ntgdi/gdidbg.c
    trunk/reactos/win32ss/user/ntuser/defwnd.c
    trunk/reactos/win32ss/user/ntuser/win32kdebug.h
    trunk/reactos/win32ss/win32kp.h
Modified: trunk/reactos/win32ss/CMakeLists.txt
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/CMakeLists.txt?rev…
==============================================================================
--- trunk/reactos/win32ss/CMakeLists.txt        [iso-8859-1] (original)
+++ trunk/reactos/win32ss/CMakeLists.txt        [iso-8859-1] Fri Nov 28 21:48:44 2014
@@ -130,6 +130,7 @@
     user/ntuser/prop.c
     user/ntuser/scrollbar.c
     user/ntuser/session.c
+    user/ntuser/shutdown.c
     user/ntuser/simplecall.c
     user/ntuser/sysparams.c
     user/ntuser/timer.c
Modified: trunk/reactos/win32ss/gdi/ntgdi/gdidbg.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/ntgdi/gdidbg.c…
==============================================================================
--- trunk/reactos/win32ss/gdi/ntgdi/gdidbg.c    [iso-8859-1] (original)
+++ trunk/reactos/win32ss/gdi/ntgdi/gdidbg.c    [iso-8859-1] Fri Nov 28 21:48:44 2014
@@ -85,6 +85,7 @@
     {L"UserProcess", DbgChUserProcess},
     {L"UserProp", DbgChUserProp},
     {L"UserScrollbar", DbgChUserScrollbar},
+    {L"UserShutdown", DbgChUserShutdown},
     {L"UserSysparams", DbgChUserSysparams},
     {L"UserTimer", DbgChUserTimer},
     {L"UserThread", DbgChUserThread},
Modified: trunk/reactos/win32ss/user/ntuser/defwnd.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/defwnd…
==============================================================================
--- trunk/reactos/win32ss/user/ntuser/defwnd.c  [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/ntuser/defwnd.c  [iso-8859-1] Fri Nov 28 21:48:44 2014
@@ -7,7 +7,6 @@
  */
 #include <win32k.h>
-
 #include <windowsx.h>
 DBG_DEFAULT_CHANNEL(UserDefwnd);
@@ -31,91 +30,6 @@
  (((hit) == HTTOP) || ((hit) == HTTOPLEFT) || ((hit) == HTTOPRIGHT))
 #define ON_BOTTOM_BORDER(hit) \
  (((hit) == HTBOTTOM) || ((hit) == HTBOTTOMLEFT) || ((hit) == HTBOTTOMRIGHT))
-
-// Client Shutdown messages
-#define MCS_SHUTDOWNTIMERS  1
-#define MCS_QUERYENDSESSION 2
-// Client Shutdown returns
-#define MCSR_GOODFORSHUTDOWN  1
-#define MCSR_SHUTDOWNFINISHED 2
-#define MCSR_DONOTSHUTDOWN    3
-
-/*
- * Based on CSRSS and described in pages 1115 - 1118 "Windows Internals, Fifth
Edition".
- * Apparently CSRSS sends out messages to do this w/o going into win32k internals.
- */
-static
-LRESULT FASTCALL
-IntClientShutdown(
-   PWND pWindow,
-   WPARAM wParam,
-   LPARAM lParam
-)
-{
-   LPARAM lParams;
-   BOOL KillTimers;
-   INT i;
-   LRESULT lResult = MCSR_GOODFORSHUTDOWN;
-   HWND *List;
-
-   lParams = wParam & (ENDSESSION_LOGOFF|ENDSESSION_CRITICAL|ENDSESSION_CLOSEAPP);
-   KillTimers = wParam & MCS_SHUTDOWNTIMERS ? TRUE : FALSE;
-/*
-   First, send end sessions to children.
- */
-   List = IntWinListChildren(pWindow);
-
-   if (List)
-   {
-      for (i = 0; List[i]; i++)
-      {
-          PWND WndChild;
-
-          if (!(WndChild = UserGetWindowObject(List[i])))
-             continue;
-
-          if (wParam & MCS_QUERYENDSESSION)
-          {
-             if (!co_IntSendMessage(WndChild->head.h, WM_QUERYENDSESSION, 0, lParams))
-             {
-                lResult = MCSR_DONOTSHUTDOWN;
-                break;
-             }
-          }
-          else
-          {
-             co_IntSendMessage(WndChild->head.h, WM_ENDSESSION, KillTimers, lParams);
-             if (KillTimers)
-             {
-                DestroyTimersForWindow(WndChild->head.pti, WndChild);
-             }
-             lResult = MCSR_SHUTDOWNFINISHED;
-          }
-      }
-      ExFreePoolWithTag(List, USERTAG_WINDOWLIST);
-   }
-   if (List && (lResult == MCSR_DONOTSHUTDOWN)) return lResult;
-/*
-   Send to the caller.
- */
-   if (wParam & MCS_QUERYENDSESSION)
-   {
-      if (!co_IntSendMessage(pWindow->head.h, WM_QUERYENDSESSION, 0, lParams))
-      {
-         lResult = MCSR_DONOTSHUTDOWN;
-      }
-   }
-   else
-   {
-      co_IntSendMessage(pWindow->head.h, WM_ENDSESSION, KillTimers, lParams);
-      if (KillTimers)
-      {
-         DestroyTimersForWindow(pWindow->head.pti, pWindow);
-      }
-      lResult = MCSR_SHUTDOWNFINISHED;
-   }
-   return lResult;
-}
 HBRUSH FASTCALL
 DefWndControlColor(HDC hDC, UINT ctlType)
@@ -916,6 +830,7 @@
          }
       }
       break;
+
       case WM_CLIENTSHUTDOWN:
          return IntClientShutdown(Wnd, wParam, lParam);
Added: trunk/reactos/win32ss/user/ntuser/shutdown.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/shutdo…
==============================================================================
--- trunk/reactos/win32ss/user/ntuser/shutdown.c        (added)
+++ trunk/reactos/win32ss/user/ntuser/shutdown.c        [iso-8859-1] Fri Nov 28 21:48:44
2014
@@ -0,0 +1,96 @@
+/*
+ * COPYRIGHT:        See COPYING in the top level directory
+ * PROJECT:          ReactOS Win32k subsystem
+ * PURPOSE:          Shutdown routines
+ * FILE:             subsystems/win32/win32k/ntuser/shutdown.c
+ * PROGRAMER:        Hermes Belusca
+ */
+
+#include <win32k.h>
+// DBG_DEFAULT_CHANNEL(UserShutdown);
+
+// Client Shutdown messages
+#define MCS_SHUTDOWNTIMERS  1
+#define MCS_QUERYENDSESSION 2
+// Client Shutdown returns
+#define MCSR_GOODFORSHUTDOWN  1
+#define MCSR_SHUTDOWNFINISHED 2
+#define MCSR_DONOTSHUTDOWN    3
+
+/*
+ * Based on CSRSS and described in pages 1115 - 1118 "Windows Internals, Fifth
Edition".
+ * CSRSS sends WM_CLIENTSHUTDOWN messages to top-level windows, and it is our job
+ * to send WM_QUERYENDSESSION / WM_ENDSESSION messages in response.
+ */
+LRESULT
+IntClientShutdown(IN PWND pWindow,
+                  IN WPARAM wParam,
+                  IN LPARAM lParam)
+{
+    LPARAM lParams;
+    BOOL KillTimers;
+    INT i;
+    LRESULT lResult = MCSR_GOODFORSHUTDOWN;
+    HWND *List;
+
+    lParams = wParam & (ENDSESSION_LOGOFF|ENDSESSION_CRITICAL|ENDSESSION_CLOSEAPP);
+    KillTimers = wParam & MCS_SHUTDOWNTIMERS ? TRUE : FALSE;
+
+    /* First, send end sessions to children */
+    List = IntWinListChildren(pWindow);
+
+    if (List)
+    {
+        for (i = 0; List[i]; i++)
+        {
+            PWND WndChild;
+
+            if (!(WndChild = UserGetWindowObject(List[i])))
+                continue;
+
+            if (wParam & MCS_QUERYENDSESSION)
+            {
+                if (!co_IntSendMessage(WndChild->head.h, WM_QUERYENDSESSION, 0,
lParams))
+                {
+                    lResult = MCSR_DONOTSHUTDOWN;
+                    break;
+                }
+            }
+            else
+            {
+                co_IntSendMessage(WndChild->head.h, WM_ENDSESSION, KillTimers,
lParams);
+                if (KillTimers)
+                {
+                    DestroyTimersForWindow(WndChild->head.pti, WndChild);
+                }
+                lResult = MCSR_SHUTDOWNFINISHED;
+            }
+        }
+        ExFreePoolWithTag(List, USERTAG_WINDOWLIST);
+    }
+
+    if (List && (lResult == MCSR_DONOTSHUTDOWN))
+        return lResult;
+
+    /* Send to the caller */
+    if (wParam & MCS_QUERYENDSESSION)
+    {
+        if (!co_IntSendMessage(pWindow->head.h, WM_QUERYENDSESSION, 0, lParams))
+        {
+            lResult = MCSR_DONOTSHUTDOWN;
+        }
+    }
+    else
+    {
+        co_IntSendMessage(pWindow->head.h, WM_ENDSESSION, KillTimers, lParams);
+        if (KillTimers)
+        {
+            DestroyTimersForWindow(pWindow->head.pti, pWindow);
+        }
+        lResult = MCSR_SHUTDOWNFINISHED;
+    }
+
+    return lResult;
+}
+
+/* EOF */
Propchange: trunk/reactos/win32ss/user/ntuser/shutdown.c
------------------------------------------------------------------------------
    svn:eol-style = native
Added: trunk/reactos/win32ss/user/ntuser/shutdown.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/shutdo…
==============================================================================
--- trunk/reactos/win32ss/user/ntuser/shutdown.h        (added)
+++ trunk/reactos/win32ss/user/ntuser/shutdown.h        [iso-8859-1] Fri Nov 28 21:48:44
2014
@@ -0,0 +1,6 @@
+#pragma once
+
+LRESULT
+IntClientShutdown(IN PWND pWindow,
+                  IN WPARAM wParam,
+                  IN LPARAM lParam);
Propchange: trunk/reactos/win32ss/user/ntuser/shutdown.h
------------------------------------------------------------------------------
    svn:eol-style = native
Modified: trunk/reactos/win32ss/user/ntuser/win32kdebug.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/win32k…
==============================================================================
--- trunk/reactos/win32ss/user/ntuser/win32kdebug.h     [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/ntuser/win32kdebug.h     [iso-8859-1] Fri Nov 28 21:48:44
2014
@@ -109,6 +109,7 @@
         DbgChUserProcess,
         DbgChUserProp,
         DbgChUserScrollbar,
+        DbgChUserShutdown,
         DbgChUserSysparams,
         DbgChUserThread,
         DbgChUserTimer,
Modified: trunk/reactos/win32ss/win32kp.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/win32kp.h?rev=6551…
==============================================================================
--- trunk/reactos/win32ss/win32kp.h     [iso-8859-1] (original)
+++ trunk/reactos/win32ss/win32kp.h     [iso-8859-1] Fri Nov 28 21:48:44 2014
@@ -75,6 +75,7 @@
 #include "user/ntuser/win32.h"
 #include "user/ntuser/object.h"
 #include "user/ntuser/ntuser.h"
+#include "user/ntuser/shutdown.h"
 #include "user/ntuser/cursoricon.h"
 #include "user/ntuser/accelerator.h"
 #include "user/ntuser/hook.h"