Author: hbelusca
Date: Thu Dec  4 22:47:13 2014
New Revision: 65561
URL: 
http://svn.reactos.org/svn/reactos?rev=65561&view=rev
Log:
[CONSRV]
- Give the process handle which creates the screenbuffer, to ConDrvCreateScreenBuffer.
- Few code refactoring.
Modified:
    trunk/reactos/win32ss/user/winsrv/consrv/condrv/conoutput.c
    trunk/reactos/win32ss/user/winsrv/consrv/condrv/console.c
    trunk/reactos/win32ss/user/winsrv/consrv/condrv/graphics.c
    trunk/reactos/win32ss/user/winsrv/consrv/condrv/text.c
    trunk/reactos/win32ss/user/winsrv/consrv/conoutput.c
    trunk/reactos/win32ss/user/winsrv/consrv/conoutput.h
Modified: trunk/reactos/win32ss/user/winsrv/consrv/condrv/conoutput.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv…
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/condrv/conoutput.c [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/condrv/conoutput.c [iso-8859-1] Thu Dec  4
22:47:13 2014
@@ -18,11 +18,13 @@
 NTSTATUS
 TEXTMODE_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
-                           IN OUT PCONSOLE Console,
+                           IN PCONSOLE Console,
+                           IN HANDLE ProcessHandle,
                            IN PTEXTMODE_BUFFER_INFO TextModeInfo);
 NTSTATUS
 GRAPHICS_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
-                           IN OUT PCONSOLE Console,
+                           IN PCONSOLE Console,
+                           IN HANDLE ProcessHandle,
                            IN PGRAPHICS_BUFFER_INFO GraphicsInfo);
 VOID
@@ -33,7 +35,7 @@
 NTSTATUS
 CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
-                                 IN OUT PCONSOLE Console,
+                                 IN PCONSOLE Console,
                                  IN PCONSOLE_SCREEN_BUFFER_VTBL Vtbl,
                                  IN SIZE_T Size)
 {
@@ -77,7 +79,8 @@
 // ConDrvCreateConsoleScreenBuffer
 NTSTATUS
 ConDrvCreateScreenBuffer(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
-                         IN OUT PCONSOLE Console,
+                         IN PCONSOLE Console,
+                         IN HANDLE ProcessHandle OPTIONAL,
                          IN ULONG BufferType,
                          IN PVOID ScreenBufferInfo)
 {
@@ -89,14 +92,18 @@
         return STATUS_INVALID_PARAMETER;
     }
+    /* Use the current process if ProcessHandle is NULL */
+    if (ProcessHandle == NULL)
+        ProcessHandle = NtCurrentProcess();
+
     if (BufferType == CONSOLE_TEXTMODE_BUFFER)
     {
-        Status = TEXTMODE_BUFFER_Initialize(Buffer, Console,
+        Status = TEXTMODE_BUFFER_Initialize(Buffer, Console, ProcessHandle,
                                             (PTEXTMODE_BUFFER_INFO)ScreenBufferInfo);
     }
     else if (BufferType == CONSOLE_GRAPHICS_BUFFER)
     {
-        Status = GRAPHICS_BUFFER_Initialize(Buffer, Console,
+        Status = GRAPHICS_BUFFER_Initialize(Buffer, Console, ProcessHandle,
                                             (PGRAPHICS_BUFFER_INFO)ScreenBufferInfo);
     }
     else
Modified: trunk/reactos/win32ss/user/winsrv/consrv/condrv/console.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv…
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/condrv/console.c   [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/condrv/console.c   [iso-8859-1] Thu Dec  4
22:47:13 2014
@@ -79,22 +79,24 @@
 VOID NTAPI
 ConDrvPause(PCONSOLE Console)
 {
-    if (!Console->UnpauseEvent)
-    {
-        NtCreateEvent(&Console->UnpauseEvent, EVENT_ALL_ACCESS,
-                      NULL, NotificationEvent, FALSE);
-    }
+    /* In case we already have a pause event, just exit... */
+    if (Console->UnpauseEvent) return;
+
+    /* ... otherwise create it */
+    NtCreateEvent(&Console->UnpauseEvent, EVENT_ALL_ACCESS,
+                  NULL, NotificationEvent, FALSE);
 }
 VOID NTAPI
 ConDrvUnpause(PCONSOLE Console)
 {
-    if (Console->UnpauseEvent)
-    {
-        NtSetEvent(Console->UnpauseEvent, NULL);
-        NtClose(Console->UnpauseEvent);
-        Console->UnpauseEvent = NULL;
-    }
+    /* In case we already freed the event, just exit... */
+    if (!Console->UnpauseEvent) return;
+
+    /* ... otherwise set and free it */
+    NtSetEvent(Console->UnpauseEvent, NULL);
+    NtClose(Console->UnpauseEvent);
+    Console->UnpauseEvent = NULL;
 }
@@ -152,8 +154,6 @@
     /* Initialize the console list and its lock */
     InitializeListHead(&ConsoleList);
     RtlInitializeResource(&ListLock);
-
-    /* Should call LoadKeyboardLayout */
 }
 /* For resetting the terminal - defined in dummyterm.c */
@@ -229,6 +229,7 @@
     InitializeListHead(&Console->BufferList);
     Status = ConDrvCreateScreenBuffer(&NewBuffer,
                                       Console,
+                                      NULL,
                                       CONSOLE_TEXTMODE_BUFFER,
                                       &ScreenBufferInfo);
     if (!NT_SUCCESS(Status))
@@ -291,14 +292,12 @@
         /* We failed, detach the terminal from the console */
         Terminal->Console = NULL; // For the caller
         ResetTerminal(Console);
-
         return Status;
     }
     /* Copy buffer contents to screen */
     // Terminal.Draw();
     // ConioDrawConsole(Console);
-    DPRINT("Console drawn\n");
     DPRINT("Terminal initialization done\n");
     return STATUS_SUCCESS;
@@ -364,8 +363,6 @@
      */
     LeaveCriticalSection(&Console->Lock);
     ConDrvUnlockConsoleList();
-
-    /* FIXME: Send a terminate message to all the processes owning this console */
     /* Deregister the terminal */
     DPRINT("Deregister terminal\n");
Modified: trunk/reactos/win32ss/user/winsrv/consrv/condrv/graphics.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv…
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/condrv/graphics.c  [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/condrv/graphics.c  [iso-8859-1] Thu Dec  4
22:47:13 2014
@@ -33,7 +33,7 @@
 NTSTATUS
 CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
-                                 IN OUT PCONSOLE Console,
+                                 IN PCONSOLE Console,
                                  IN PCONSOLE_SCREEN_BUFFER_VTBL Vtbl,
                                  IN SIZE_T Size);
 VOID
@@ -42,7 +42,8 @@
 NTSTATUS
 GRAPHICS_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
-                           IN OUT PCONSOLE Console,
+                           IN PCONSOLE Console,
+                           IN HANDLE ProcessHandle,
                            IN PGRAPHICS_BUFFER_INFO GraphicsInfo)
 {
     NTSTATUS Status = STATUS_SUCCESS;
@@ -50,7 +51,6 @@
     LARGE_INTEGER SectionSize;
     ULONG ViewSize = 0;
-    HANDLE ProcessHandle;
     if (Buffer == NULL || Console == NULL || GraphicsInfo == NULL)
         return STATUS_INVALID_PARAMETER;
@@ -69,7 +69,6 @@
      * correctly the allocated resources when the client releases the
      * screen buffer.
      */
-    ProcessHandle = CsrGetClientThread()->Process->ProcessHandle;
     NewBuffer->ClientProcess = ProcessHandle;
     /* Get infos from the graphics buffer information structure */
Modified: trunk/reactos/win32ss/user/winsrv/consrv/condrv/text.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv…
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/condrv/text.c      [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/condrv/text.c      [iso-8859-1] Thu Dec  4
22:47:13 2014
@@ -51,7 +51,7 @@
 NTSTATUS
 CONSOLE_SCREEN_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
-                                 IN OUT PCONSOLE Console,
+                                 IN PCONSOLE Console,
                                  IN PCONSOLE_SCREEN_BUFFER_VTBL Vtbl,
                                  IN SIZE_T Size);
 VOID
@@ -60,11 +60,14 @@
 NTSTATUS
 TEXTMODE_BUFFER_Initialize(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
-                           IN OUT PCONSOLE Console,
+                           IN PCONSOLE Console,
+                           IN HANDLE ProcessHandle,
                            IN PTEXTMODE_BUFFER_INFO TextModeInfo)
 {
     NTSTATUS Status = STATUS_SUCCESS;
     PTEXTMODE_SCREEN_BUFFER NewBuffer = NULL;
+
+    UNREFERENCED_PARAMETER(ProcessHandle);
     if (Console == NULL || Buffer == NULL || TextModeInfo == NULL)
         return STATUS_INVALID_PARAMETER;
Modified: trunk/reactos/win32ss/user/winsrv/consrv/conoutput.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv…
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/conoutput.c        [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/conoutput.c        [iso-8859-1] Thu Dec  4
22:47:13 2014
@@ -169,7 +169,8 @@
 {
     NTSTATUS Status = STATUS_INVALID_PARAMETER;
     PCONSOLE_CREATESCREENBUFFER CreateScreenBufferRequest =
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.CreateScreenBufferRequest;
-    PCONSOLE_PROCESS_DATA ProcessData =
ConsoleGetPerProcessData(CsrGetClientThread()->Process);
+    PCSR_PROCESS Process = CsrGetClientThread()->Process;
+    PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(Process);
     PCONSRV_CONSOLE Console;
     PCONSOLE_SCREEN_BUFFER Buff;
@@ -253,6 +254,7 @@
     Status = ConDrvCreateScreenBuffer(&Buff,
                                       (PCONSOLE)Console,
+                                      Process->ProcessHandle,
                                       CreateScreenBufferRequest->ScreenBufferType,
                                       ScreenBufferInfo);
     if (!NT_SUCCESS(Status)) goto Quit;
Modified: trunk/reactos/win32ss/user/winsrv/consrv/conoutput.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/winsrv/consrv…
==============================================================================
--- trunk/reactos/win32ss/user/winsrv/consrv/conoutput.h        [iso-8859-1] (original)
+++ trunk/reactos/win32ss/user/winsrv/consrv/conoutput.h        [iso-8859-1] Thu Dec  4
22:47:13 2014
@@ -34,9 +34,10 @@
     ConSrvReleaseObject(&(Buff)->Header, (IsConsoleLocked))
 NTSTATUS ConDrvCreateScreenBuffer(OUT PCONSOLE_SCREEN_BUFFER* Buffer,
-                                           IN OUT PCONSOLE Console,
-                                           IN ULONG BufferType,
-                                           IN PVOID ScreenBufferInfo);
+                                  IN PCONSOLE Console,
+                                  IN HANDLE ProcessHandle OPTIONAL,
+                                  IN ULONG BufferType,
+                                  IN PVOID ScreenBufferInfo);
 VOID NTAPI ConDrvDeleteScreenBuffer(PCONSOLE_SCREEN_BUFFER Buffer);
 // VOID ConioSetActiveScreenBuffer(PCONSOLE_SCREEN_BUFFER Buffer);