https://git.reactos.org/?p=reactos.git;a=commitdiff;h=75d0346c54ecd00c60a8241cb384c5999ef30f1f

commit 75d0346c54ecd00c60a8241cb384c5999ef30f1f
Author:     Hermès Bélusca-Maïto <[email protected]>
AuthorDate: Fri Apr 10 20:37:28 2020 +0200
Commit:     Hermès Bélusca-Maïto <[email protected]>
CommitDate: Sat Apr 11 16:27:09 2020 +0200

    [CONSRV] Finally fix CONSOLE vs. CONSRV_CONSOLE/WINSRV_CONSOLE stuff. 
CORE-9496
    
    What remains to be cleared up are the ugly casts.
---
 win32ss/user/winsrv/consrv.cmake                   |   2 +-
 win32ss/user/winsrv/consrv/condrv/console.c        | 169 +++------------
 win32ss/user/winsrv/consrv/conoutput.c             |   9 +-
 win32ss/user/winsrv/consrv/console.c               | 235 ++++++++++++++-------
 win32ss/user/winsrv/consrv/consrv.h                |   6 -
 win32ss/user/winsrv/consrv/frontendctl.c           |  30 +--
 .../user/winsrv/consrv/frontends/gui/graphics.c    |   2 +-
 win32ss/user/winsrv/consrv/frontends/gui/guiterm.c |   2 +-
 win32ss/user/winsrv/consrv/frontends/gui/text.c    |   6 +-
 win32ss/user/winsrv/consrv/frontends/terminal.c    |  14 +-
 win32ss/user/winsrv/consrv/handle.c                |  26 +--
 win32ss/user/winsrv/consrv/include/conio.h         |  38 +---
 win32ss/user/winsrv/consrv/include/conio_winsrv.h  |  40 +---
 win32ss/user/winsrv/consrv/include/console.h       |   9 +-
 win32ss/user/winsrv/consrv/include/settings.h      |   6 +-
 win32ss/user/winsrv/consrv/init.c                  |   1 -
 win32ss/user/winsrv/consrv/settings.c              |  11 +-
 17 files changed, 263 insertions(+), 343 deletions(-)

diff --git a/win32ss/user/winsrv/consrv.cmake b/win32ss/user/winsrv/consrv.cmake
index ecbca65e82e..9f421ca8f1d 100644
--- a/win32ss/user/winsrv/consrv.cmake
+++ b/win32ss/user/winsrv/consrv.cmake
@@ -40,7 +40,7 @@ list(APPEND CONSRV_SOURCE
     consrv/consrv.h)
 
 #
-# Explicitely enable MS extensions to be able to use unnamed (anonymous) 
nested structs.
+# Explicitly enable MS extensions to be able to use unnamed (anonymous) nested 
structs.
 #
 # FIXME: http://www.cmake.org/Bug/view.php?id=12998
 if(MSVC)
diff --git a/win32ss/user/winsrv/consrv/condrv/console.c 
b/win32ss/user/winsrv/consrv/condrv/console.c
index a3d7a13ea79..1dd90fb7b2f 100644
--- a/win32ss/user/winsrv/consrv/condrv/console.c
+++ b/win32ss/user/winsrv/consrv/condrv/console.c
@@ -18,88 +18,7 @@
 #define NDEBUG
 #include <debug.h>
 
-/* GLOBALS 
********************************************************************/
-
-static ULONG CurrentConsoleID = 0;
-
-/* Linked list of consoles */
-static LIST_ENTRY ConDrvConsoleList;
-static RTL_RESOURCE ListLock;
-
-#define ConDrvLockConsoleListExclusive()    \
-    RtlAcquireResourceExclusive(&ListLock, TRUE)
-
-#define ConDrvLockConsoleListShared()       \
-    RtlAcquireResourceShared(&ListLock, TRUE)
-
-#define ConDrvUnlockConsoleList()           \
-    RtlReleaseResource(&ListLock)
-
-
-static NTSTATUS
-ConDrvInsertConsole(IN PCONSOLE Console)
-{
-    ASSERT(Console);
-
-    /* All went right, so add the console to the list */
-    ConDrvLockConsoleListExclusive();
-
-    DPRINT("Insert in the list\n");
-    InsertTailList(&ConDrvConsoleList, &Console->ListEntry);
-
-    // FIXME: Move this code to the caller function!!
-    /* Get a new console ID */
-    _InterlockedExchange((PLONG)&Console->ConsoleID, CurrentConsoleID);
-    _InterlockedIncrement((PLONG)&CurrentConsoleID);
-
-    /* Unlock the console list and return success */
-    ConDrvUnlockConsoleList();
-    return STATUS_SUCCESS;
-}
-
-static NTSTATUS
-RemoveConsole(IN PCONSOLE Console)
-{
-    // ASSERT(Console);
-    if (!Console) return STATUS_INVALID_PARAMETER;
-
-    /* Remove the console from the list */
-    ConDrvLockConsoleListExclusive();
-
-    RemoveEntryList(&Console->ListEntry);
-
-    /* Unlock the console list and return success */
-    ConDrvUnlockConsoleList();
-    return STATUS_SUCCESS;
-}
-
-
-/* PRIVATE FUNCTIONS 
**********************************************************/
-
-VOID NTAPI
-ConDrvPause(PCONSOLE Console)
-{
-    /* In case we are already paused, just exit... */
-    if (Console->ConsolePaused) return;
-
-    /* ... otherwise set the flag */
-    Console->ConsolePaused = TRUE;
-}
-
-VOID NTAPI
-ConDrvUnpause(PCONSOLE Console)
-{
-    /* In case we are already unpaused, just exit... */
-    if (!Console->ConsolePaused) return;
-
-    /* ... otherwise reset the flag */
-    Console->ConsolePaused = FALSE;
-}
-
-
-/*
- * Console accessibility check helpers
- */
+/* CONSOLE VALIDATION FUNCTIONS 
***********************************************/
 
 BOOLEAN NTAPI
 ConDrvValidateConsoleState(IN PCONSOLE Console,
@@ -143,43 +62,24 @@ ConDrvValidateConsoleUnsafe(IN PCONSOLE Console,
 
 /* CONSOLE INITIALIZATION FUNCTIONS 
*******************************************/
 
-VOID NTAPI
-ConDrvInitConsoleSupport(VOID)
-{
-    DPRINT("CONSRV: ConDrvInitConsoleSupport()\n");
-
-    /* Initialize the console list and its lock */
-    InitializeListHead(&ConDrvConsoleList);
-    RtlInitializeResource(&ListLock);
-}
-
 /* For resetting the terminal - defined in dummyterm.c */
 VOID ResetTerminal(IN PCONSOLE Console);
 
 NTSTATUS NTAPI
-ConDrvInitConsole(OUT PCONSOLE* NewConsole,
-                  IN PCONSOLE_INFO ConsoleInfo)
+ConDrvInitConsole(
+    IN OUT PCONSOLE Console,
+    IN PCONSOLE_INFO ConsoleInfo)
 {
     NTSTATUS Status;
     // CONSOLE_INFO CapturedConsoleInfo;
     TEXTMODE_BUFFER_INFO ScreenBufferInfo;
-    PCONSOLE Console;
     PCONSOLE_SCREEN_BUFFER NewBuffer;
 
-    if (NewConsole == NULL || ConsoleInfo == NULL)
+    if (Console == NULL || ConsoleInfo == NULL)
         return STATUS_INVALID_PARAMETER;
 
-    *NewConsole = NULL;
-
-    /*
-     * Allocate a new console
-     */
-    Console = ConsoleAllocHeap(HEAP_ZERO_MEMORY, sizeof(*Console));
-    if (NULL == Console)
-    {
-        DPRINT1("Not enough memory for console creation.\n");
-        return STATUS_NO_MEMORY;
-    }
+    /* Reset the console structure */
+    RtlZeroMemory(Console, sizeof(*Console));
 
     /*
      * Set and fix the screen buffer size if needed.
@@ -211,7 +111,6 @@ ConDrvInitConsole(OUT PCONSOLE* NewConsole,
     {
         DPRINT1("ConDrvInitInputBuffer: failed, Status = 0x%08lx\n", Status);
         DeleteCriticalSection(&Console->Lock);
-        ConsoleFreeHeap(Console);
         return Status;
     }
 
@@ -240,7 +139,6 @@ ConDrvInitConsole(OUT PCONSOLE* NewConsole,
         DPRINT1("ConDrvCreateScreenBuffer: failed, Status = 0x%08lx\n", 
Status);
         ConDrvDeinitInputBuffer(Console);
         DeleteCriticalSection(&Console->Lock);
-        ConsoleFreeHeap(Console);
         return Status;
     }
     /* Make the new screen buffer active */
@@ -249,21 +147,11 @@ ConDrvInitConsole(OUT PCONSOLE* NewConsole,
 
     DPRINT("Console initialized\n");
 
-    /* All went right, so add the console to the list */
-    Status = ConDrvInsertConsole(Console);
-    if (!NT_SUCCESS(Status))
-    {
-        /* Fail */
-        ConDrvDeleteConsole(Console);
-        return Status;
-    }
-
     /* The initialization is finished */
     DPRINT("Change state\n");
     Console->State = CONSOLE_RUNNING;
 
-    /* Return the newly created console to the caller and a success code too */
-    *NewConsole = Console;
+    /* The caller now has a newly initialized console */
     return STATUS_SUCCESS;
 }
 
@@ -334,7 +222,7 @@ ConDrvDeleteConsole(IN PCONSOLE Console)
      * Forbid validation of any console by other threads
      * during the deletion of this console.
      */
-    ConDrvLockConsoleListExclusive();
+    // ConDrvLockConsoleListExclusive();
 
     /*
      * If the console is already being destroyed, i.e. not running
@@ -343,8 +231,6 @@ ConDrvDeleteConsole(IN PCONSOLE Console)
     if (!ConDrvValidateConsoleUnsafe(Console, CONSOLE_RUNNING, TRUE) &&
         !ConDrvValidateConsoleUnsafe(Console, CONSOLE_INITIALIZING, TRUE))
     {
-        /* Unlock the console list and return */
-        ConDrvUnlockConsoleList();
         return;
     }
 
@@ -358,13 +244,12 @@ ConDrvDeleteConsole(IN PCONSOLE Console)
     /*
      * Allow other threads to finish their job: basically, unlock
      * all other calls to EnterCriticalSection(&Console->Lock); by
-     * ConDrvValidateConsoleUnsafe functions so that they just see
+     * ConDrvValidateConsoleUnsafe() functions so that they just see
      * that we are not in CONSOLE_RUNNING state anymore, or unlock
-     * other concurrent calls to ConDrvDeleteConsole so that they
+     * other concurrent calls to ConDrvDeleteConsole() so that they
      * can see that we are in fact already deleting the console.
      */
     LeaveCriticalSection(&Console->Lock);
-    ConDrvUnlockConsoleList();
 
     /* Deregister the terminal */
     DPRINT("Deregister terminal\n");
@@ -377,11 +262,8 @@ ConDrvDeleteConsole(IN PCONSOLE Console)
      * ...unless to cancel console deletion ?).
      ***/
 
-    ConDrvLockConsoleListExclusive();
-
     if (!ConDrvValidateConsoleUnsafe(Console, CONSOLE_TERMINATING, TRUE))
     {
-        ConDrvUnlockConsoleList();
         return;
     }
 
@@ -391,9 +273,6 @@ ConDrvDeleteConsole(IN PCONSOLE Console)
     /* We really delete the console. Reset the count to be sure. */
     Console->ReferenceCount = 0;
 
-    /* Remove the console from the list */
-    RemoveConsole(Console);
-
     /* Delete the last screen buffer */
     ConDrvDeleteScreenBuffer(Console->ActiveBuffer);
     Console->ActiveBuffer = NULL;
@@ -412,18 +291,34 @@ ConDrvDeleteConsole(IN PCONSOLE Console)
     LeaveCriticalSection(&Console->Lock);
     DPRINT("ConDrvDeleteConsole - Destroying lock\n");
     DeleteCriticalSection(&Console->Lock);
-    DPRINT("ConDrvDeleteConsole - Lock destroyed ; freeing console\n");
+    DPRINT("ConDrvDeleteConsole - Lock destroyed\n");
 
-    ConsoleFreeHeap(Console);
     DPRINT("ConDrvDeleteConsole - Console destroyed\n");
-
-    /* Unlock the console list and return */
-    ConDrvUnlockConsoleList();
 }
 
 
 /* PUBLIC DRIVER APIS 
*********************************************************/
 
+VOID NTAPI
+ConDrvPause(PCONSOLE Console)
+{
+    /* In case we are already paused, just exit... */
+    if (Console->ConsolePaused) return;
+
+    /* ... otherwise set the flag */
+    Console->ConsolePaused = TRUE;
+}
+
+VOID NTAPI
+ConDrvUnpause(PCONSOLE Console)
+{
+    /* In case we are already unpaused, just exit... */
+    if (!Console->ConsolePaused) return;
+
+    /* ... otherwise reset the flag */
+    Console->ConsolePaused = FALSE;
+}
+
 NTSTATUS NTAPI
 ConDrvGetConsoleMode(IN PCONSOLE Console,
                      IN PCONSOLE_IO_OBJECT Object,
diff --git a/win32ss/user/winsrv/consrv/conoutput.c 
b/win32ss/user/winsrv/consrv/conoutput.c
index 173926032ed..a4e556079ae 100644
--- a/win32ss/user/winsrv/consrv/conoutput.c
+++ b/win32ss/user/winsrv/consrv/conoutput.c
@@ -35,6 +35,7 @@ CSR_API(SrvInvalidateBitMapRect)
 {
     NTSTATUS Status;
     PCONSOLE_INVALIDATEDIBITS InvalidateDIBitsRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.InvalidateDIBitsRequest;
+    PCONSRV_CONSOLE Console;
     PCONSOLE_SCREEN_BUFFER Buffer;
 
     DPRINT("SrvInvalidateBitMapRect\n");
@@ -44,15 +45,17 @@ CSR_API(SrvInvalidateBitMapRect)
                                    &Buffer, GENERIC_READ, TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
+    Console = (PCONSRV_CONSOLE)Buffer->Header.Console;
+
     /* In text-mode only, draw the VDM buffer if present */
-    if (GetType(Buffer) == TEXTMODE_BUFFER && 
Buffer->Header.Console->VDMBuffer)
+    if (GetType(Buffer) == TEXTMODE_BUFFER && Console->VDMBuffer)
     {
         PTEXTMODE_SCREEN_BUFFER TextBuffer = (PTEXTMODE_SCREEN_BUFFER)Buffer;
 
         /*Status =*/ ConDrvWriteConsoleOutputVDM(Buffer->Header.Console,
                                                  TextBuffer,
-                                                 
Buffer->Header.Console->VDMBuffer,
-                                                 
Buffer->Header.Console->VDMBufferSize,
+                                                 Console->VDMBuffer,
+                                                 Console->VDMBufferSize,
                                                  
&InvalidateDIBitsRequest->Region);
     }
 
diff --git a/win32ss/user/winsrv/consrv/console.c 
b/win32ss/user/winsrv/consrv/console.c
index f838376204d..1950b9c35ca 100644
--- a/win32ss/user/winsrv/consrv/console.c
+++ b/win32ss/user/winsrv/consrv/console.c
@@ -27,9 +27,12 @@
 
 /* GLOBALS 
********************************************************************/
 
+// static ULONG CurrentConsoleID = 0;
+
 /* The list of the ConSrv consoles */
 static ULONG ConsoleListSize;
 static PCONSRV_CONSOLE* ConsoleList;
+// static LIST_ENTRY ConDrvConsoleList;
 static RTL_RESOURCE ListLock;
 
 #define ConSrvLockConsoleListExclusive()    \
@@ -41,10 +44,34 @@ static RTL_RESOURCE ListLock;
 #define ConSrvUnlockConsoleList()           \
     RtlReleaseResource(&ListLock)
 
+#if 0
+static NTSTATUS
+ConDrvInsertConsole(
+    IN PCONSOLE Console)
+{
+    ASSERT(Console);
+
+    /* All went right, so add the console to the list */
+    ConSrvLockConsoleListExclusive();
+
+    DPRINT("Insert in the list\n");
+    InsertTailList(&ConDrvConsoleList, &Console->ListEntry);
+
+    // FIXME: Move this code to the caller function!!
+    /* Get a new console ID */
+    _InterlockedExchange((PLONG)&Console->ConsoleID, CurrentConsoleID);
+    _InterlockedIncrement((PLONG)&CurrentConsoleID);
+
+    /* Unlock the console list and return success */
+    ConSrvUnlockConsoleList();
+    return STATUS_SUCCESS;
+}
+#endif
 
 static NTSTATUS
-InsertConsole(OUT PHANDLE Handle,
-              IN PCONSRV_CONSOLE Console)
+InsertConsole(
+    OUT PHANDLE Handle,
+    IN PCONSRV_CONSOLE Console)
 {
 #define CONSOLE_HANDLES_INCREMENT   2 * 3
 
@@ -163,49 +190,23 @@ RemoveConsoleByPointer(IN PCONSRV_CONSOLE Console)
     return STATUS_SUCCESS;
 }
 
-BOOLEAN NTAPI
-ConSrvValidateConsole(OUT PCONSRV_CONSOLE* Console,
-                      IN HANDLE ConsoleHandle,
-                      IN CONSOLE_STATE ExpectedState,
-                      IN BOOLEAN LockConsole)
+#if 0
+static NTSTATUS
+RemoveConsole(IN PCONSOLE Console)
 {
-    BOOLEAN RetVal = FALSE;
-    PCONSRV_CONSOLE ValidatedConsole;
-
-    BOOLEAN ValidHandle = ((HandleToULong(ConsoleHandle) & 0x3) == 0x3);
-    ULONG Index = HandleToULong(ConsoleHandle) >> 2;
-
-    if (!ValidHandle) return FALSE;
-
-    if (!Console) return FALSE;
-    *Console = NULL;
-
-    /*
-     * Forbid creation or deletion of consoles when
-     * checking for the existence of a console.
-     */
-    ConSrvLockConsoleListShared();
+    // ASSERT(Console);
+    if (!Console) return STATUS_INVALID_PARAMETER;
 
-    if (Index >= ConsoleListSize ||
-        (ValidatedConsole = ConsoleList[Index]) == NULL)
-    {
-        /* Unlock the console list and return */
-        ConSrvUnlockConsoleList();
-        return FALSE;
-    }
+    /* Remove the console from the list */
+    ConSrvLockConsoleListExclusive();
 
-    ValidatedConsole = ConsoleList[Index];
+    RemoveEntryList(&Console->ListEntry);
 
-    /* Unlock the console list and return */
+    /* Unlock the console list and return success */
     ConSrvUnlockConsoleList();
-
-    RetVal = ConDrvValidateConsoleUnsafe((PCONSOLE)ValidatedConsole,
-                                         ExpectedState,
-                                         LockConsole);
-    if (RetVal) *Console = ValidatedConsole;
-
-    return RetVal;
+    return STATUS_SUCCESS;
 }
+#endif
 
 
 /* PRIVATE FUNCTIONS 
**********************************************************/
@@ -239,32 +240,51 @@ ConsoleFreeUnicodeString(IN PUNICODE_STRING UnicodeString)
     }
 }
 
-VOID
-ConioPause(PCONSRV_CONSOLE Console, UCHAR Flags)
-{
-    Console->PauseFlags |= Flags;
-    ConDrvPause((PCONSOLE)Console);
-}
 
-VOID
-ConioUnpause(PCONSRV_CONSOLE Console, UCHAR Flags)
+/* CONSOLE VALIDATION FUNCTIONS 
***********************************************/
+
+BOOLEAN NTAPI
+ConSrvValidateConsole(OUT PCONSRV_CONSOLE* Console,
+                      IN HANDLE ConsoleHandle,
+                      IN CONSOLE_STATE ExpectedState,
+                      IN BOOLEAN LockConsole)
 {
-    Console->PauseFlags &= ~Flags;
+    BOOLEAN RetVal = FALSE;
+    PCONSRV_CONSOLE ValidatedConsole;
 
-    // if ((Console->PauseFlags & (PAUSED_FROM_KEYBOARD | 
PAUSED_FROM_SCROLLBAR | PAUSED_FROM_SELECTION)) == 0)
-    if (Console->PauseFlags == 0)
-    {
-        ConDrvUnpause((PCONSOLE)Console);
+    BOOLEAN ValidHandle = ((HandleToULong(ConsoleHandle) & 0x3) == 0x3);
+    ULONG Index = HandleToULong(ConsoleHandle) >> 2;
 
-        CsrNotifyWait(&Console->WriteWaitQueue,
-                      TRUE,
-                      NULL,
-                      NULL);
-        if (!IsListEmpty(&Console->WriteWaitQueue))
-        {
-            CsrDereferenceWait(&Console->WriteWaitQueue);
-        }
+    if (!ValidHandle) return FALSE;
+
+    if (!Console) return FALSE;
+    *Console = NULL;
+
+    /*
+     * Forbid creation or deletion of consoles when
+     * checking for the existence of a console.
+     */
+    ConSrvLockConsoleListShared();
+
+    if (Index >= ConsoleListSize ||
+        (ValidatedConsole = ConsoleList[Index]) == NULL)
+    {
+        /* Unlock the console list and return */
+        ConSrvUnlockConsoleList();
+        return FALSE;
     }
+
+    ValidatedConsole = ConsoleList[Index];
+
+    /* Unlock the console list */
+    ConSrvUnlockConsoleList();
+
+    RetVal = ConDrvValidateConsoleUnsafe((PCONSOLE)ValidatedConsole,
+                                         ExpectedState,
+                                         LockConsole);
+    if (RetVal) *Console = ValidatedConsole;
+
+    return RetVal;
 }
 
 NTSTATUS
@@ -331,6 +351,7 @@ ConSrvInitConsoleSupport(VOID)
     /* Initialize the console list and its lock */
     ConsoleListSize = 0;
     ConsoleList = NULL;
+    // InitializeListHead(&ConDrvConsoleList);
     RtlInitializeResource(&ListLock);
 
     /* Should call LoadKeyboardLayout */
@@ -645,15 +666,27 @@ ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
     DrvConsoleInfo.ScreenAttrib = ConsoleInfo->ScreenAttributes;
     DrvConsoleInfo.PopupAttrib = ConsoleInfo->PopupAttributes;
     DrvConsoleInfo.CodePage = ConsoleInfo->CodePage;
-    Status = ConDrvInitConsole(&Console, &DrvConsoleInfo);
+
+    /*
+     * Allocate a new console
+     */
+    Console = ConsoleAllocHeap(HEAP_ZERO_MEMORY, sizeof(*Console));
+    if (Console == NULL)
+    {
+        DPRINT1("Not enough memory for console creation.\n");
+        ConSrvDeinitTerminal(&Terminal);
+        return STATUS_NO_MEMORY;
+    }
+
+    Status = ConDrvInitConsole((PCONSOLE)Console, &DrvConsoleInfo);
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("Creating a new console failed, Status = 0x%08lx\n", Status);
+        ConsoleFreeHeap(Console);
         ConSrvDeinitTerminal(&Terminal);
         return Status;
     }
 
-    ASSERT(Console);
     DPRINT("Console initialized\n");
 
     /*** Register ConSrv features ***/
@@ -684,6 +717,7 @@ ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
 #endif
 
     /* Initialize process support */
+    // InitProcessSupport(Console);
     InitializeListHead(&Console->ProcessList);
     Console->NotifiedLastCloseProcess = NULL;
     Console->NotifyLastClose = FALSE;
@@ -695,6 +729,7 @@ ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
     InitializeListHead(&Console->WriteWaitQueue);
 
     /* Initialize the alias and history buffers */
+    // InitAliasesHistory(Console);
     Console->Aliases = NULL;
     InitializeListHead(&Console->HistoryBuffers);
     Console->NumberOfHistoryBuffers = 0;
@@ -703,6 +738,7 @@ ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
     Console->HistoryNoDup      = ConsoleInfo->HistoryNoDup;
 
     /* Initialize the Input Line Discipline */
+    // InitLineInput(Console);
     Console->LineBuffer = NULL;
     Console->LinePos = Console->LineMaxSize = Console->LineSize = 0;
     Console->LineComplete = Console->LineUpPressed = FALSE;
@@ -724,7 +760,7 @@ ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("NtCreateEvent(InitEvents[INIT_SUCCESS]) failed: %lu\n", 
Status);
-        ConDrvDeleteConsole(Console);
+        ConDrvDeleteConsole((PCONSOLE)Console);
         ConSrvDeinitTerminal(&Terminal);
         return Status;
     }
@@ -734,7 +770,7 @@ ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
     {
         DPRINT1("NtCreateEvent(InitEvents[INIT_FAILURE]) failed: %lu\n", 
Status);
         NtClose(Console->InitEvents[INIT_SUCCESS]);
-        ConDrvDeleteConsole(Console);
+        ConDrvDeleteConsole((PCONSOLE)Console);
         ConSrvDeinitTerminal(&Terminal);
         return Status;
     }
@@ -743,19 +779,28 @@ ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
      * Attach the ConSrv terminal to the console.
      * This call makes a copy of our local Terminal variable.
      */
-    Status = ConDrvAttachTerminal(Console, &Terminal);
+    Status = ConDrvAttachTerminal((PCONSOLE)Console, &Terminal);
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("Failed to register terminal to the given console, Status = 
0x%08lx\n", Status);
         NtClose(Console->InitEvents[INIT_FAILURE]);
         NtClose(Console->InitEvents[INIT_SUCCESS]);
-        ConDrvDeleteConsole(Console);
+        ConDrvDeleteConsole((PCONSOLE)Console);
         ConSrvDeinitTerminal(&Terminal);
         return Status;
     }
     DPRINT("Terminal attached\n");
 
     /* All went right, so add the console to the list */
+#if 0
+    Status = ConDrvInsertConsole((PCONSOLE)Console);
+    if (!NT_SUCCESS(Status))
+    {
+        /* Fail */
+        ConDrvDeleteConsole((PCONSOLE)Console);
+        return Status;
+    }
+#endif
     Status = InsertConsole(&ConsoleHandle, Console);
 
     // FIXME! We do not support at all asynchronous console creation!
@@ -773,7 +818,10 @@ ConSrvDeleteConsole(PCONSRV_CONSOLE Console)
 {
     DPRINT("ConSrvDeleteConsole\n");
 
-    // FIXME: Send a terminate message to all the processes owning this console
+    // FIXME: Send a terminate message to all the processes owning this 
console.
+    // NOTE: In principle there should be none, because such processes would
+    // have a reference to the console and thus this function would not have
+    // been called in the first place.
 
     /* Remove the console from the list */
     RemoveConsoleByPointer(Console);
@@ -802,9 +850,36 @@ ConSrvDeleteConsole(PCONSRV_CONSOLE Console)
 }
 
 
+VOID
+ConioPause(PCONSRV_CONSOLE Console, UCHAR Flags)
+{
+    Console->PauseFlags |= Flags;
+    ConDrvPause((PCONSOLE)Console);
+}
+
+VOID
+ConioUnpause(PCONSRV_CONSOLE Console, UCHAR Flags)
+{
+    Console->PauseFlags &= ~Flags;
+
+    // if ((Console->PauseFlags & (PAUSED_FROM_KEYBOARD | 
PAUSED_FROM_SCROLLBAR | PAUSED_FROM_SELECTION)) == 0)
+    if (Console->PauseFlags == 0)
+    {
+        ConDrvUnpause((PCONSOLE)Console);
 
+        CsrNotifyWait(&Console->WriteWaitQueue,
+                      TRUE,
+                      NULL,
+                      NULL);
+        if (!IsListEmpty(&Console->WriteWaitQueue))
+        {
+            CsrDereferenceWait(&Console->WriteWaitQueue);
+        }
+    }
+}
 
 
+/* CONSOLE PROCESS MANAGEMENT FUNCTIONS 
***************************************/
 
 NTSTATUS
 ConSrvConsoleCtrlEventTimeout(IN ULONG CtrlEvent,
@@ -1157,6 +1232,7 @@ CSR_API(SrvGetConsoleMode)
 {
     NTSTATUS Status;
     PCONSOLE_GETSETCONSOLEMODE ConsoleModeRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ConsoleModeRequest;
+    PCONSRV_CONSOLE Console;
     PCONSOLE_IO_OBJECT Object;
 
     PULONG ConsoleMode = &ConsoleModeRequest->Mode;
@@ -1166,9 +1242,10 @@ CSR_API(SrvGetConsoleMode)
                              &Object, NULL, GENERIC_READ, TRUE, 0);
     if (!NT_SUCCESS(Status)) return Status;
 
+    Console = (PCONSRV_CONSOLE)Object->Console;
+
     /* Get the standard console modes */
-    Status = ConDrvGetConsoleMode(Object->Console, Object,
-                                  ConsoleMode);
+    Status = ConDrvGetConsoleMode(Object->Console, Object, ConsoleMode);
     if (NT_SUCCESS(Status))
     {
         /*
@@ -1177,13 +1254,13 @@ CSR_API(SrvGetConsoleMode)
          */
         if (INPUT_BUFFER == Object->Type)
         {
-            if (Object->Console->InsertMode || Object->Console->QuickEdit)
+            if (Console->InsertMode || Console->QuickEdit)
             {
                 /* Windows also adds ENABLE_EXTENDED_FLAGS, even if it's not 
documented on MSDN */
                 *ConsoleMode |= ENABLE_EXTENDED_FLAGS;
 
-                if (Object->Console->InsertMode) *ConsoleMode |= 
ENABLE_INSERT_MODE;
-                if (Object->Console->QuickEdit ) *ConsoleMode |= 
ENABLE_QUICK_EDIT_MODE;
+                if (Console->InsertMode) *ConsoleMode |= ENABLE_INSERT_MODE;
+                if (Console->QuickEdit ) *ConsoleMode |= 
ENABLE_QUICK_EDIT_MODE;
             }
         }
     }
@@ -1205,6 +1282,7 @@ CSR_API(SrvSetConsoleMode)
 
     NTSTATUS Status;
     PCONSOLE_GETSETCONSOLEMODE ConsoleModeRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ConsoleModeRequest;
+    PCONSRV_CONSOLE Console;
     PCONSOLE_IO_OBJECT Object;
 
     ULONG ConsoleMode = ConsoleModeRequest->Mode;
@@ -1214,10 +1292,11 @@ CSR_API(SrvSetConsoleMode)
                              &Object, NULL, GENERIC_WRITE, TRUE, 0);
     if (!NT_SUCCESS(Status)) return Status;
 
+    Console = (PCONSRV_CONSOLE)Object->Console;
+
     /* Set the standard console modes (without the CONSRV-specific input 
modes) */
     ConsoleMode &= ~CONSOLE_VALID_CONTROL_MODES; // Remove CONSRV-specific 
input modes.
-    Status = ConDrvSetConsoleMode(Object->Console, Object,
-                                  ConsoleMode);
+    Status = ConDrvSetConsoleMode(Object->Console, Object, ConsoleMode);
     if (NT_SUCCESS(Status))
     {
         /*
@@ -1240,8 +1319,8 @@ CSR_API(SrvSetConsoleMode)
                 }
                 else
                 {
-                    Object->Console->InsertMode = !!(ConsoleMode & 
ENABLE_INSERT_MODE);
-                    Object->Console->QuickEdit  = !!(ConsoleMode & 
ENABLE_QUICK_EDIT_MODE);
+                    Console->InsertMode = !!(ConsoleMode & ENABLE_INSERT_MODE);
+                    Console->QuickEdit  = !!(ConsoleMode & 
ENABLE_QUICK_EDIT_MODE);
                 }
             }
         }
@@ -1407,7 +1486,7 @@ CSR_API(SrvGetConsoleCP)
     Status = 
ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), 
&Console, TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
-    Status = ConDrvGetConsoleCP(Console,
+    Status = ConDrvGetConsoleCP((PCONSOLE)Console,
                                 &GetConsoleCPRequest->CodePage,
                                 GetConsoleCPRequest->OutputCP);
 
@@ -1432,7 +1511,7 @@ CSR_API(SrvSetConsoleCP)
     Status = 
ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), 
&Console, TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
-    Status = ConDrvSetConsoleCP(Console,
+    Status = ConDrvSetConsoleCP((PCONSOLE)Console,
                                 SetConsoleCPRequest->CodePage,
                                 SetConsoleCPRequest->OutputCP);
 
diff --git a/win32ss/user/winsrv/consrv/consrv.h 
b/win32ss/user/winsrv/consrv/consrv.h
index 4ea7d2ee177..56742da7779 100644
--- a/win32ss/user/winsrv/consrv/consrv.h
+++ b/win32ss/user/winsrv/consrv/consrv.h
@@ -60,14 +60,8 @@ typedef struct ConsoleInput_t
     INPUT_RECORD InputEvent;
 } ConsoleInput;
 
-// Helper for code refactoring
-// #define USE_NEW_CONSOLE_WAY
-
-#ifndef USE_NEW_CONSOLE_WAY
 #include "include/conio.h"
-#else
 #include "include/conio_winsrv.h"
-#endif
 
 #include "include/console.h"
 #include "include/settings.h"
diff --git a/win32ss/user/winsrv/consrv/frontendctl.c 
b/win32ss/user/winsrv/consrv/frontendctl.c
index b0a47961857..bbfe8c735cd 100644
--- a/win32ss/user/winsrv/consrv/frontendctl.c
+++ b/win32ss/user/winsrv/consrv/frontendctl.c
@@ -72,7 +72,7 @@ CSR_API(SrvGetConsoleHardwareState)
         return Status;
     }
 
-    Console = Buff->Header.Console;
+    Console = (PCONSRV_CONSOLE)Buff->Header.Console;
     HardwareStateRequest->State = Console->HardwareState;
 
     ConSrvReleaseScreenBuffer(Buff, TRUE);
@@ -104,7 +104,7 @@ CSR_API(SrvSetConsoleHardwareState)
     }
 
     DPRINT("Setting console hardware state.\n");
-    Console = Buff->Header.Console;
+    Console = (PCONSRV_CONSOLE)Buff->Header.Console;
     Status = SetConsoleHardwareState(Console, HardwareStateRequest->State);
 
     ConSrvReleaseScreenBuffer(Buff, TRUE);
@@ -168,7 +168,7 @@ CSR_API(SrvGetLargestConsoleWindowSize)
 {
     NTSTATUS Status;
     PCONSOLE_GETLARGESTWINDOWSIZE GetLargestWindowSizeRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetLargestWindowSizeRequest;
-    PCONSOLE /*PCONSRV_CONSOLE*/ Console;
+    PCONSRV_CONSOLE Console;
     PCONSOLE_SCREEN_BUFFER Buff;
 
     Status = 
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
@@ -178,7 +178,7 @@ CSR_API(SrvGetLargestConsoleWindowSize)
                                      TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
-    Console = Buff->Header.Console;
+    Console = (PCONSRV_CONSOLE)Buff->Header.Console;
 
     /*
      * Retrieve the largest possible console window size, without
@@ -196,7 +196,7 @@ CSR_API(SrvShowConsoleCursor)
 {
     NTSTATUS Status;
     PCONSOLE_SHOWCURSOR ShowCursorRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ShowCursorRequest;
-    PCONSOLE /*PCONSRV_CONSOLE*/ Console;
+    PCONSRV_CONSOLE Console;
     PCONSOLE_SCREEN_BUFFER Buff;
 
     Status = 
ConSrvGetScreenBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
@@ -206,7 +206,7 @@ CSR_API(SrvShowConsoleCursor)
                                    TRUE);
     if (!NT_SUCCESS(Status)) return Status;
 
-    Console = Buff->Header.Console;
+    Console = (PCONSRV_CONSOLE)Buff->Header.Console;
 
     ShowCursorRequest->RefCount = TermShowMouseCursor(Console, 
ShowCursorRequest->Show);
 
@@ -380,7 +380,7 @@ CSR_API(SrvGetConsoleNumberOfFonts)
 {
     NTSTATUS Status;
     PCONSOLE_GETNUMFONTS GetNumFontsRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetNumFontsRequest;
-    PCONSOLE /*PCONSRV_CONSOLE*/ Console;
+    PCONSRV_CONSOLE Console;
 
     Status = 
ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
                               &Console, TRUE);
@@ -400,7 +400,7 @@ CSR_API(SrvGetConsoleFontInfo)
 {
     NTSTATUS Status;
     PCONSOLE_GETFONTINFO GetFontInfoRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetFontInfoRequest;
-    // PCONSOLE /*PCONSRV_CONSOLE*/ Console;
+    // PCONSRV_CONSOLE Console;
     PCONSOLE_SCREEN_BUFFER Buff;
 
     Status = 
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
@@ -411,7 +411,7 @@ CSR_API(SrvGetConsoleFontInfo)
     if (!NT_SUCCESS(Status)) return Status;
 
     // FIXME!
-    // Console = Buff->Header.Console;
+    // Console = (PCONSRV_CONSOLE)Buff->Header.Console;
     // TermGetFontInfo(Console, ...);
     DPRINT1("%s not yet implemented\n", __FUNCTION__);
     GetFontInfoRequest->NumFonts = 0;
@@ -425,7 +425,7 @@ CSR_API(SrvGetConsoleFontSize)
 {
     NTSTATUS Status;
     PCONSOLE_GETFONTSIZE GetFontSizeRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetFontSizeRequest;
-    // PCONSOLE /*PCONSRV_CONSOLE*/ Console;
+    // PCONSRV_CONSOLE Console;
     PCONSOLE_SCREEN_BUFFER Buff;
 
     Status = 
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
@@ -436,7 +436,7 @@ CSR_API(SrvGetConsoleFontSize)
     if (!NT_SUCCESS(Status)) return Status;
 
     // FIXME!
-    // Console = Buff->Header.Console;
+    // Console = (PCONSRV_CONSOLE)Buff->Header.Console;
     // TermGetFontSize(Console, ...);
     DPRINT1("%s not yet implemented\n", __FUNCTION__);
 
@@ -449,7 +449,7 @@ CSR_API(SrvGetConsoleCurrentFont)
 {
     NTSTATUS Status;
     PCONSOLE_GETCURRENTFONT GetCurrentFontRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetCurrentFontRequest;
-    // PCONSOLE /*PCONSRV_CONSOLE*/ Console;
+    // PCONSRV_CONSOLE Console;
     PCONSOLE_SCREEN_BUFFER Buff;
 
     Status = 
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
@@ -460,7 +460,7 @@ CSR_API(SrvGetConsoleCurrentFont)
     if (!NT_SUCCESS(Status)) return Status;
 
     // FIXME!
-    // Console = Buff->Header.Console;
+    // Console = (PCONSRV_CONSOLE)Buff->Header.Console;
     // TermGetCurrentFont(Console, ...);
     DPRINT1("%s not yet implemented\n", __FUNCTION__);
     GetCurrentFontRequest->FontIndex = 0;
@@ -474,7 +474,7 @@ CSR_API(SrvSetConsoleFont)
 {
     NTSTATUS Status;
     PCONSOLE_SETFONT SetFontRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetFontRequest;
-    // PCONSOLE /*PCONSRV_CONSOLE*/ Console;
+    // PCONSRV_CONSOLE Console;
     PCONSOLE_SCREEN_BUFFER Buff;
 
     Status = 
ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
@@ -485,7 +485,7 @@ CSR_API(SrvSetConsoleFont)
     if (!NT_SUCCESS(Status)) return Status;
 
     // FIXME!
-    // Console = Buff->Header.Console;
+    // Console = (PCONSRV_CONSOLE)Buff->Header.Console;
     // TermSetFont(Console, ...);
     DPRINT1("%s not yet implemented\n", __FUNCTION__);
 
diff --git a/win32ss/user/winsrv/consrv/frontends/gui/graphics.c 
b/win32ss/user/winsrv/consrv/frontends/gui/graphics.c
index 63fd616059d..a21266ea0b5 100644
--- a/win32ss/user/winsrv/consrv/frontends/gui/graphics.c
+++ b/win32ss/user/winsrv/consrv/frontends/gui/graphics.c
@@ -126,7 +126,7 @@ GuiPaintGraphicsBuffer(PGRAPHICS_SCREEN_BUFFER Buffer,
                        PRECT rcView,
                        PRECT rcFramebuffer)
 {
-    PCONSRV_CONSOLE Console = Buffer->Header.Console;
+    PCONSRV_CONSOLE Console = (PCONSRV_CONSOLE)Buffer->Header.Console;
     // ASSERT(Console == GuiData->Console);
 
     ConioInitLongRect(rcFramebuffer, 0, 0, 0, 0);
diff --git a/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c 
b/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c
index d5a88a490e7..96dc93b52b5 100644
--- a/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c
+++ b/win32ss/user/winsrv/consrv/frontends/gui/guiterm.c
@@ -768,7 +768,7 @@ GuiSetActiveScreenBuffer(IN OUT PFRONTEND This)
     GuiData->WindowSizeLock = TRUE;
 
     InterlockedExchangePointer((PVOID*)&GuiData->ActiveBuffer,
-                               ConDrvGetActiveScreenBuffer(GuiData->Console));
+                               
ConDrvGetActiveScreenBuffer((PCONSOLE)GuiData->Console));
 
     GuiData->WindowSizeLock = FALSE;
     LeaveCriticalSection(&GuiData->Lock);
diff --git a/win32ss/user/winsrv/consrv/frontends/gui/text.c 
b/win32ss/user/winsrv/consrv/frontends/gui/text.c
index fcbcbaf94e5..f547cd43698 100644
--- a/win32ss/user/winsrv/consrv/frontends/gui/text.c
+++ b/win32ss/user/winsrv/consrv/frontends/gui/text.c
@@ -343,7 +343,7 @@ GuiPasteToTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer,
      * This function supposes that the system clipboard was opened.
      */
 
-    PCONSRV_CONSOLE Console = Buffer->Header.Console;
+    PCONSRV_CONSOLE Console = (PCONSRV_CONSOLE)Buffer->Header.Console;
 
     HANDLE hData;
     LPWSTR pszText;
@@ -369,7 +369,7 @@ GuiPaintCaret(
     ULONG LeftColumn,
     ULONG RightColumn)
 {
-    PCONSRV_CONSOLE Console = Buffer->Header.Console;
+    PCONSRV_CONSOLE Console = (PCONSRV_CONSOLE)Buffer->Header.Console;
 
     ULONG CursorX, CursorY, CursorHeight;
     HBRUSH CursorBrush, OldBrush;
@@ -435,7 +435,7 @@ GuiPaintTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer,
                        PRECT rcView,
                        PRECT rcFramebuffer)
 {
-    PCONSRV_CONSOLE Console = Buffer->Header.Console;
+    PCONSRV_CONSOLE Console = (PCONSRV_CONSOLE)Buffer->Header.Console;
     ULONG TopLine, BottomLine, LeftColumn, RightColumn;
     ULONG Line, Char, Start;
     PCHAR_INFO From;
diff --git a/win32ss/user/winsrv/consrv/frontends/terminal.c 
b/win32ss/user/winsrv/consrv/frontends/terminal.c
index 7cb89e6b221..24e43ccc0b5 100644
--- a/win32ss/user/winsrv/consrv/frontends/terminal.c
+++ b/win32ss/user/winsrv/consrv/frontends/terminal.c
@@ -262,21 +262,22 @@ ConSrvTermInitTerminal(IN OUT PTERMINAL This,
 {
     NTSTATUS Status;
     PFRONTEND FrontEnd = This->Context;
+    PCONSRV_CONSOLE ConSrvConsole = (PCONSRV_CONSOLE)Console;
 
     /* Initialize the console pointer for our frontend */
-    FrontEnd->Console = Console;
+    FrontEnd->Console = ConSrvConsole;
 
     /** HACK HACK!! Copy FrontEnd into the console!! **/
     DPRINT("Using FrontEndIFace HACK(1), should be removed after proper 
implementation!\n");
-    Console->FrontEndIFace = *FrontEnd;
+    ConSrvConsole->FrontEndIFace = *FrontEnd;
 
-    Status = FrontEnd->Vtbl->InitFrontEnd(FrontEnd, FrontEnd->Console);
+    Status = FrontEnd->Vtbl->InitFrontEnd(FrontEnd, ConSrvConsole);
     if (!NT_SUCCESS(Status))
         DPRINT1("InitFrontEnd failed, Status = 0x%08lx\n", Status);
 
     /** HACK HACK!! Be sure FrontEndIFace is correctly updated in the 
console!! **/
     DPRINT("Using FrontEndIFace HACK(2), should be removed after proper 
implementation!\n");
-    Console->FrontEndIFace = *FrontEnd;
+    ConSrvConsole->FrontEndIFace = *FrontEnd;
 
     return Status;
 }
@@ -969,11 +970,12 @@ static TERMINAL_VTBL ConSrvTermVtbl =
 VOID
 ResetFrontEnd(IN PCONSOLE Console)
 {
+    PCONSRV_CONSOLE ConSrvConsole = (PCONSRV_CONSOLE)Console;
     if (!Console) return;
 
     /* Reinitialize the frontend interface */
-    RtlZeroMemory(&Console->FrontEndIFace, sizeof(Console->FrontEndIFace));
-    Console->FrontEndIFace.Vtbl = &ConSrvTermVtbl;
+    RtlZeroMemory(&ConSrvConsole->FrontEndIFace, 
sizeof(ConSrvConsole->FrontEndIFace));
+    ConSrvConsole->FrontEndIFace.Vtbl = &ConSrvTermVtbl;
 }
 #endif
 
diff --git a/win32ss/user/winsrv/consrv/handle.c 
b/win32ss/user/winsrv/consrv/handle.c
index a9552af7f13..4c16139169a 100644
--- a/win32ss/user/winsrv/consrv/handle.c
+++ b/win32ss/user/winsrv/consrv/handle.c
@@ -65,7 +65,7 @@ ConSrvCloseHandle(IN PCONSOLE_IO_HANDLE Handle)
         if (Object->Type == INPUT_BUFFER)
         {
             // PCONSOLE_INPUT_BUFFER InputBuffer = 
(PCONSOLE_INPUT_BUFFER)Object;
-            PCONSOLE Console = Object->Console;
+            PCONSRV_CONSOLE Console = (PCONSRV_CONSOLE)Object->Console;
 
             /*
              * Wake up all the writing waiters related to this handle for this
@@ -125,7 +125,7 @@ static VOID ConSrvFreeHandlesTable(PCONSOLE_PROCESS_DATA 
ProcessData);
 
 static NTSTATUS
 ConSrvInitHandlesTable(IN OUT PCONSOLE_PROCESS_DATA ProcessData,
-                       IN PCONSOLE Console,
+                       IN PCONSRV_CONSOLE Console,
                        OUT PHANDLE pInputHandle,
                        OUT PHANDLE pOutputHandle,
                        OUT PHANDLE pErrorHandle)
@@ -410,7 +410,7 @@ ConSrvGetObject(IN PCONSOLE_PROCESS_DATA ProcessData,
     ULONG Index = HandleToULong(Handle) >> 2;
     PCONSOLE_IO_HANDLE HandleEntry = NULL;
     PCONSOLE_IO_OBJECT ObjectEntry = NULL;
-    // PCONSOLE ObjectConsole;
+    // PCONSRV_CONSOLE ObjectConsole;
 
     ASSERT(Object);
     if (Entry) *Entry = NULL;
@@ -465,7 +465,8 @@ VOID
 ConSrvReleaseObject(IN PCONSOLE_IO_OBJECT Object,
                     IN BOOLEAN IsConsoleLocked)
 {
-    ConSrvReleaseConsole(Object->Console, IsConsoleLocked);
+    PCONSRV_CONSOLE ObjectConsole = (PCONSRV_CONSOLE)Object->Console;
+    ConSrvReleaseConsole(ObjectConsole, IsConsoleLocked);
 }
 
 
@@ -611,7 +612,7 @@ ConSrvInheritConsole(PCONSOLE_PROCESS_DATA ProcessData,
                      PCONSOLE_START_INFO ConsoleStartInfo)
 {
     NTSTATUS Status = STATUS_SUCCESS;
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
 
     /* Validate and lock the console */
     if (!ConSrvValidateConsole(&Console,
@@ -734,7 +735,7 @@ Quit:
 NTSTATUS
 ConSrvRemoveConsole(PCONSOLE_PROCESS_DATA ProcessData)
 {
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
     PCONSOLE_PROCESS_DATA ConsoleLeaderProcess;
 
     DPRINT("ConSrvRemoveConsole\n");
@@ -808,6 +809,7 @@ ConSrvRemoveConsole(PCONSOLE_PROCESS_DATA ProcessData)
 
 /* PUBLIC SERVER APIS 
*********************************************************/
 
+/* API_NUMBER: ConsolepOpenConsole */
 CSR_API(SrvOpenConsole)
 {
     /*
@@ -818,7 +820,7 @@ CSR_API(SrvOpenConsole)
     NTSTATUS Status;
     PCONSOLE_OPENCONSOLE OpenConsoleRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.OpenConsoleRequest;
     PCONSOLE_PROCESS_DATA ProcessData = 
ConsoleGetPerProcessData(CsrGetClientThread()->Process);
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
 
     DWORD DesiredAccess = OpenConsoleRequest->DesiredAccess;
     DWORD ShareMode = OpenConsoleRequest->ShareMode;
@@ -877,7 +879,7 @@ CSR_API(SrvDuplicateHandle)
     NTSTATUS Status;
     PCONSOLE_DUPLICATEHANDLE DuplicateHandleRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.DuplicateHandleRequest;
     PCONSOLE_PROCESS_DATA ProcessData = 
ConsoleGetPerProcessData(CsrGetClientThread()->Process);
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
 
     HANDLE SourceHandle = DuplicateHandleRequest->SourceHandle;
     ULONG Index = HandleToULong(SourceHandle) >> 2;
@@ -951,7 +953,7 @@ CSR_API(SrvGetHandleInformation)
     NTSTATUS Status;
     PCONSOLE_GETHANDLEINFO GetHandleInfoRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetHandleInfoRequest;
     PCONSOLE_PROCESS_DATA ProcessData = 
ConsoleGetPerProcessData(CsrGetClientThread()->Process);
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
 
     HANDLE Handle = GetHandleInfoRequest->Handle;
     ULONG Index = HandleToULong(Handle) >> 2;
@@ -1000,7 +1002,7 @@ CSR_API(SrvSetHandleInformation)
     NTSTATUS Status;
     PCONSOLE_SETHANDLEINFO SetHandleInfoRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetHandleInfoRequest;
     PCONSOLE_PROCESS_DATA ProcessData = 
ConsoleGetPerProcessData(CsrGetClientThread()->Process);
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
 
     HANDLE Handle = SetHandleInfoRequest->Handle;
     ULONG Index = HandleToULong(Handle) >> 2;
@@ -1051,7 +1053,7 @@ CSR_API(SrvCloseHandle)
     NTSTATUS Status;
     PCONSOLE_CLOSEHANDLE CloseHandleRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.CloseHandleRequest;
     PCONSOLE_PROCESS_DATA ProcessData = 
ConsoleGetPerProcessData(CsrGetClientThread()->Process);
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
 
     Status = ConSrvGetConsole(ProcessData, &Console, TRUE);
     if (!NT_SUCCESS(Status))
@@ -1072,7 +1074,7 @@ CSR_API(SrvVerifyConsoleIoHandle)
     NTSTATUS Status;
     PCONSOLE_VERIFYHANDLE VerifyHandleRequest = 
&((PCONSOLE_API_MESSAGE)ApiMessage)->Data.VerifyHandleRequest;
     PCONSOLE_PROCESS_DATA ProcessData = 
ConsoleGetPerProcessData(CsrGetClientThread()->Process);
-    PCONSOLE Console;
+    PCONSRV_CONSOLE Console;
 
     HANDLE IoHandle = VerifyHandleRequest->Handle;
     ULONG Index = HandleToULong(IoHandle) >> 2;
diff --git a/win32ss/user/winsrv/consrv/include/conio.h 
b/win32ss/user/winsrv/consrv/include/conio.h
index dc68afc4898..ca5bf202c56 100644
--- a/win32ss/user/winsrv/consrv/include/conio.h
+++ b/win32ss/user/winsrv/consrv/include/conio.h
@@ -12,22 +12,6 @@
 
 #include "rect.h"
 
-// This is ALMOST a HACK!!!!!!!
-// Helpers for code refactoring
-#ifdef USE_NEW_CONSOLE_WAY
-
-#define _CONSRV_CONSOLE  _WINSRV_CONSOLE
-#define  CONSRV_CONSOLE   WINSRV_CONSOLE
-#define PCONSRV_CONSOLE  PWINSRV_CONSOLE
-
-#else
-
-#define _CONSRV_CONSOLE  _CONSOLE
-#define  CONSRV_CONSOLE   CONSOLE
-#define PCONSRV_CONSOLE  PCONSOLE
-
-#endif
-
 /* Default attributes */
 #define DEFAULT_SCREEN_ATTRIB   (FOREGROUND_BLUE | FOREGROUND_GREEN | 
FOREGROUND_RED)
 #define DEFAULT_POPUP_ATTRIB    (FOREGROUND_BLUE | FOREGROUND_RED   | \
@@ -308,27 +292,12 @@ typedef enum _CONSOLE_STATE
     CONSOLE_IN_DESTRUCTION  /* Console in destruction */
 } CONSOLE_STATE, *PCONSOLE_STATE;
 
-// HACK!!
-struct _CONSOLE;
-/* HACK: */ typedef struct _CONSOLE *PCONSOLE;
-#ifndef USE_NEW_CONSOLE_WAY
-#include "conio_winsrv.h"
-#endif
-
 typedef struct _CONSOLE
 {
 /******************************* Console Set-up 
*******************************/
-
-#ifndef USE_NEW_CONSOLE_WAY
-    WINSRV_CONSOLE; // HACK HACK!!
-#endif
-
     LONG ReferenceCount;                    /* Is incremented each time a 
handle to something in the console (a screen-buffer or the input buffer of this 
console) gets referenced */
     CRITICAL_SECTION Lock;
 
-    ULONG ConsoleID;                        /* The ID of the console */
-    LIST_ENTRY ListEntry;                   /* Entry in the list of consoles */
-
     CONSOLE_STATE State;                    /* State of the console */
     TERMINAL TermIFace;                     /* Terminal-specific interface */
 
@@ -347,7 +316,7 @@ typedef struct _CONSOLE
     COORD   ConsoleSize;                    /* The current size of the 
console, for text-mode only */
     BOOLEAN FixedSize;                      /* TRUE if the console is of fixed 
size */
     BOOLEAN IsCJK;                          /* TRUE if Chinese, Japanese or 
Korean (CJK) */
-} CONSOLE; // , *PCONSOLE;
+} CONSOLE, *PCONSOLE;
 
 /* console.c */
 VOID NTAPI
@@ -355,11 +324,6 @@ ConDrvPause(PCONSOLE Console);
 VOID NTAPI
 ConDrvUnpause(PCONSOLE Console);
 
-NTSTATUS
-ConSrvConsoleCtrlEvent(IN ULONG CtrlEvent,
-                       IN PCONSOLE_PROCESS_DATA ProcessData);
-
-
 #define GetConsoleInputBufferMode(Console)  \
     (Console)->InputBuffer.Mode
 
diff --git a/win32ss/user/winsrv/consrv/include/conio_winsrv.h 
b/win32ss/user/winsrv/consrv/include/conio_winsrv.h
index a77bfcb0d39..2f682bd8b2f 100644
--- a/win32ss/user/winsrv/consrv/include/conio_winsrv.h
+++ b/win32ss/user/winsrv/consrv/include/conio_winsrv.h
@@ -11,23 +11,7 @@
 
 #pragma once
 
-#include "rect.h"
-
-// This is ALMOST a HACK!!!!!!!
-// Helpers for code refactoring
-#ifdef USE_NEW_CONSOLE_WAY
-
-#define _CONSRV_CONSOLE  _WINSRV_CONSOLE
-#define  CONSRV_CONSOLE   WINSRV_CONSOLE
-#define PCONSRV_CONSOLE  PWINSRV_CONSOLE
-
-#else
-
-#define _CONSRV_CONSOLE  _CONSOLE
-#define  CONSRV_CONSOLE   CONSOLE
-#define PCONSRV_CONSOLE  PCONSOLE
-
-#endif
+// #include "rect.h"
 
 #define CSR_DEFAULT_CURSOR_SIZE 25
 
@@ -39,15 +23,12 @@ typedef struct _CHAR_CELL
 } CHAR_CELL, *PCHAR_CELL;
 C_ASSERT(sizeof(CHAR_CELL) == 2);
 
-// HACK!!
-struct _WINSRV_CONSOLE;
-/* HACK: */ typedef struct _WINSRV_CONSOLE *PWINSRV_CONSOLE;
-#ifdef USE_NEW_CONSOLE_WAY
-#include "conio.h"
-#endif
+// #include "conio.h"
 
 typedef struct _FRONTEND FRONTEND, *PFRONTEND;
 
+struct _CONSRV_CONSOLE;
+
 typedef struct _FRONTEND_VTBL
 {
     // NTSTATUS (NTAPI *UnloadFrontEnd)(IN OUT PFRONTEND This);
@@ -127,20 +108,21 @@ struct _FRONTEND
 #define PAUSED_FROM_SCROLLBAR 0x2
 #define PAUSED_FROM_SELECTION 0x4
 
-typedef struct _WINSRV_CONSOLE
+typedef struct _CONSRV_CONSOLE
 {
 /******************************* Console Set-up 
*******************************/
     /* This **MUST** be FIRST!! */
-#ifdef USE_NEW_CONSOLE_WAY
     CONSOLE;
     // CONSOLE Console;
     // // PCONSOLE Console;
-#endif
 
     // LONG ReferenceCount;                    /* Is incremented each time a 
handle to something in the console (a screen-buffer or the input buffer of this 
console) gets referenced */
     // CRITICAL_SECTION Lock;
     // CONSOLE_STATE State;                    /* State of the console */
 
+    // ULONG ConsoleID;                        /* The ID of the console */
+    // LIST_ENTRY ListEntry;                   /* Entry in the list of 
consoles */
+
     HANDLE InitEvents[MAX_INIT_EVENTS];         /* Initialization events */
 
     FRONTEND FrontEndIFace;                     /* Frontend-specific interface 
*/
@@ -194,7 +176,7 @@ typedef struct _WINSRV_CONSOLE
     UNICODE_STRING Title;                   /* Title of console. Always 
NULL-terminated */
     COLORREF   Colors[16];                  /* Colour palette */
 
-} WINSRV_CONSOLE; // , *PWINSRV_CONSOLE;
+} CONSRV_CONSOLE, *PCONSRV_CONSOLE;
 
 /* console.c */
 VOID ConioPause(PCONSRV_CONSOLE Console, UCHAR Flags);
@@ -205,6 +187,7 @@ ConSrvGetConsoleLeaderProcess(IN PCONSRV_CONSOLE Console);
 NTSTATUS
 ConSrvConsoleCtrlEvent(IN ULONG CtrlEvent,
                        IN PCONSOLE_PROCESS_DATA ProcessData);
+
 NTSTATUS NTAPI
 ConSrvConsoleProcessCtrlEvent(IN PCONSRV_CONSOLE Console,
                               IN ULONG ProcessGroupId,
@@ -227,9 +210,6 @@ ConioProcessInputEvent(PCONSRV_CONSOLE Console,
 
 /* conoutput.c */
 PCHAR_INFO ConioCoordToPointer(PTEXTMODE_SCREEN_BUFFER Buff, ULONG X, ULONG Y);
-NTSTATUS ConioResizeBuffer(PCONSOLE Console,
-                           PTEXTMODE_SCREEN_BUFFER ScreenBuffer,
-                           COORD Size);
 
 /* terminal.c */
 VOID ConioDrawConsole(PCONSRV_CONSOLE Console);
diff --git a/win32ss/user/winsrv/consrv/include/console.h 
b/win32ss/user/winsrv/consrv/include/console.h
index 57adf959a46..1c691e44eab 100644
--- a/win32ss/user/winsrv/consrv/include/console.h
+++ b/win32ss/user/winsrv/consrv/include/console.h
@@ -8,12 +8,11 @@
 
 #pragma once
 
-VOID NTAPI
-ConDrvInitConsoleSupport(VOID);
-
 NTSTATUS NTAPI
-ConDrvInitConsole(OUT PCONSOLE* NewConsole,
-                  IN PCONSOLE_INFO ConsoleInfo);
+ConDrvInitConsole(
+    IN OUT PCONSOLE Console,
+    IN PCONSOLE_INFO ConsoleInfo);
+
 NTSTATUS NTAPI
 ConDrvAttachTerminal(IN PCONSOLE Console,
                      IN PTERMINAL Terminal);
diff --git a/win32ss/user/winsrv/consrv/include/settings.h 
b/win32ss/user/winsrv/consrv/include/settings.h
index 6b07a0e95c2..d3269c42b05 100644
--- a/win32ss/user/winsrv/consrv/include/settings.h
+++ b/win32ss/user/winsrv/consrv/include/settings.h
@@ -26,7 +26,9 @@
 
 /* FUNCTIONS 
******************************************************************/
 
-VOID ConSrvApplyUserSettings(IN PCONSOLE Console,
-                             IN PCONSOLE_STATE_INFO ConsoleInfo);
+VOID
+ConSrvApplyUserSettings(
+    IN PCONSRV_CONSOLE Console,
+    IN PCONSOLE_STATE_INFO ConsoleInfo);
 
 /* EOF */
diff --git a/win32ss/user/winsrv/consrv/init.c 
b/win32ss/user/winsrv/consrv/init.c
index eea8cf890f7..448c1836965 100644
--- a/win32ss/user/winsrv/consrv/init.c
+++ b/win32ss/user/winsrv/consrv/init.c
@@ -569,7 +569,6 @@ CSR_SERVER_DLL_INIT(ConServerDllInitialization)
     if (!ConSrvHeap) return STATUS_NO_MEMORY;
 */
 
-    ConDrvInitConsoleSupport();
     ConSrvInitConsoleSupport();
 
     /* Setup the DLL Object */
diff --git a/win32ss/user/winsrv/consrv/settings.c 
b/win32ss/user/winsrv/consrv/settings.c
index fdfc4cb9468..b0cef35638c 100644
--- a/win32ss/user/winsrv/consrv/settings.c
+++ b/win32ss/user/winsrv/consrv/settings.c
@@ -29,12 +29,13 @@ ConDrvChangeScreenBufferAttributes(IN PCONSOLE Console,
                                    IN USHORT NewScreenAttrib,
                                    IN USHORT NewPopupAttrib);
 /*
- * NOTE: This function explicitely references Console->ActiveBuffer.
+ * NOTE: This function explicitly references Console->ActiveBuffer.
  * It is possible that it should go into some frontend...
  */
 VOID
-ConSrvApplyUserSettings(IN PCONSOLE Console,
-                        IN PCONSOLE_STATE_INFO ConsoleInfo)
+ConSrvApplyUserSettings(
+    IN PCONSRV_CONSOLE Console,
+    IN PCONSOLE_STATE_INFO ConsoleInfo)
 {
     PCONSOLE_SCREEN_BUFFER ActiveBuffer = Console->ActiveBuffer;
 
@@ -123,7 +124,7 @@ ConSrvApplyUserSettings(IN PCONSOLE Console,
             if (BufSize.X != ActiveBuffer->ScreenBufferSize.X ||
                 BufSize.Y != ActiveBuffer->ScreenBufferSize.Y)
             {
-                if (NT_SUCCESS(ConioResizeBuffer(Console, Buffer, BufSize)))
+                if (NT_SUCCESS(ConioResizeBuffer((PCONSOLE)Console, Buffer, 
BufSize)))
                     SizeChanged = TRUE;
             }
 
@@ -131,7 +132,7 @@ ConSrvApplyUserSettings(IN PCONSOLE Console,
         }
 
         /* Apply foreground and background colors for both screen and popup */
-        ConDrvChangeScreenBufferAttributes(Console,
+        ConDrvChangeScreenBufferAttributes((PCONSOLE)Console,
                                            Buffer,
                                            ConsoleInfo->ScreenAttributes,
                                            ConsoleInfo->PopupAttributes);

Reply via email to