https://git.reactos.org/?p=reactos.git;a=commitdiff;h=75d0346c54ecd00c60a82…
commit 75d0346c54ecd00c60a8241cb384c5999ef30f1f
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Fri Apr 10 20:37:28 2020 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
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);