xref: /reactos/win32ss/user/winsrv/consrv/shutdown.c (revision 845faec4)
1 /*
2  * COPYRIGHT:       See COPYING in the top level directory
3  * PROJECT:         ReactOS Console Server DLL
4  * FILE:            win32ss/user/winsrv/consrv/shutdown.c
5  * PURPOSE:         Processes Shutdown
6  * PROGRAMMERS:     Alex Ionescu
7  */
8 
9 /* INCLUDES *******************************************************************/
10 
11 #include "consrv.h"
12 
13 #define NDEBUG
14 #include <debug.h>
15 
16 /* FUNCTIONS ******************************************************************/
17 
18 // NOTE: See http://blogs.msdn.com/b/ntdebugging/archive/2007/06/09/how-windows-shuts-down.aspx
19 ULONG
20 NTAPI
21 ConsoleClientShutdown(IN PCSR_PROCESS CsrProcess,
22                       IN ULONG Flags,
23                       IN BOOLEAN FirstPhase)
24 {
25     PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrProcess);
26 
27     //FIXME: UNIMPLEMENTED!
28 
29     if ( ProcessData->ConsoleHandle != NULL ||
30          ProcessData->HandleTable   != NULL )
31     {
32         DPRINT("ConsoleClientShutdown(0x%p, 0x%x, %s) - Console process [0x%x, 0x%x]\n",
33                 CsrProcess, Flags, FirstPhase ? "FirstPhase" : "LastPhase",
34                 CsrProcess->ClientId.UniqueProcess, CsrProcess->ClientId.UniqueThread);
35 
36         /* We are done with the process itself */
37         CsrDereferenceProcess(CsrProcess);
38         return CsrShutdownCsrProcess;
39     }
40     else
41     {
42         DPRINT("ConsoleClientShutdown(0x%p, 0x%x, %s) - Non-console process [0x%x, 0x%x]\n",
43                 CsrProcess, Flags, FirstPhase ? "FirstPhase" : "LastPhase",
44                 CsrProcess->ClientId.UniqueProcess, CsrProcess->ClientId.UniqueThread);
45 
46         /* On first pass, ignore the process since the GUI server should take it... */
47         if (FirstPhase) return CsrShutdownNonCsrProcess;
48 
49         /* ... otherwise, call the generic handler */
50         // FIXME: Should call a generic shutdown handler!!
51         CsrDereferenceProcess(CsrProcess);
52         return CsrShutdownCsrProcess;
53     }
54 
55     return CsrShutdownNonCsrProcess;
56 }
57 
58 /* EOF */
59