[KERNEL32]
[reactos.git] / dll / win32 / kernel32 / client / console / console.c
index cd9a87e..f6aaea0 100644 (file)
@@ -362,7 +362,7 @@ GetNumberOfConsoleFonts(VOID)
 {
     DPRINT1("GetNumberOfConsoleFonts() UNIMPLEMENTED!\n");
     SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 1; /* FIXME: call csrss.exe */
+    return 1;
 }
 
 
@@ -593,11 +593,14 @@ ShowConsoleCursor(DWORD Unknown0,
 
 /*
  * FUNCTION: Checks whether the given handle is a valid console handle.
+ *
  * ARGUMENTS:
  *      Handle - Handle to be checked
+ *
  * RETURNS:
  *      TRUE: Handle is a valid console handle
  *      FALSE: Handle is not a valid console handle.
+ *
  * STATUS: Officially undocumented
  *
  * @implemented
@@ -606,22 +609,22 @@ BOOL
 WINAPI
 VerifyConsoleIoHandle(HANDLE Handle)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
-    Request.Data.VerifyHandleRequest.Handle = Handle;
+    ApiMessage.Data.VerifyHandleRequest.Handle = Handle;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_NATIVE, VERIFY_HANDLE),
-                                 sizeof(CSR_API_MESSAGE));
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepVerifyIoHandle),
+                                 sizeof(CSRSS_VERIFY_HANDLE));
     if (!NT_SUCCESS(Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
     }
 
-    return (BOOL)NT_SUCCESS(Request.Status);
+    return (BOOL)NT_SUCCESS(ApiMessage.Status);
 }
 
 
@@ -664,15 +667,15 @@ BOOL
 WINAPI
 CloseConsoleHandle(HANDLE Handle)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
-    Request.Data.CloseHandleRequest.Handle = Handle;
+    ApiMessage.Data.CloseHandleRequest.Handle = Handle;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_NATIVE, CLOSE_HANDLE),
-                                 sizeof(CSR_API_MESSAGE));
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepCloseHandle),
+                                 sizeof(CSRSS_CLOSE_HANDLE));
     if (!NT_SUCCESS(Status))
     {
         BaseSetLastNTError(Status);
@@ -682,20 +685,23 @@ CloseConsoleHandle(HANDLE Handle)
     return TRUE;
 }
 
+
 /*
  * @implemented
  */
 HANDLE
 WINAPI
 GetStdHandle(DWORD nStdHandle)
-     /*
-      * FUNCTION: Get a handle for the standard input, standard output
-      * and a standard error device.
-      * ARGUMENTS:
-      *       nStdHandle - Specifies the device for which to return the handle.
-      * RETURNS: If the function succeeds, the return value is the handle
-      * of the specified device. Otherwise the value is INVALID_HANDLE_VALUE.
-      */
+/*
+ * FUNCTION: Get a handle for the standard input, standard output
+ * and a standard error device.
+ *
+ * ARGUMENTS:
+ *       nStdHandle - Specifies the device for which to return the handle.
+ *
+ * RETURNS: If the function succeeds, the return value is the handle
+ * of the specified device. Otherwise the value is INVALID_HANDLE_VALUE.
+ */
 {
     PRTL_USER_PROCESS_PARAMETERS Ppb;
 
@@ -712,7 +718,7 @@ GetStdHandle(DWORD nStdHandle)
             return Ppb->StandardError;
     }
 
-    SetLastError (ERROR_INVALID_PARAMETER);
+    SetLastError(ERROR_INVALID_PARAMETER);
     return INVALID_HANDLE_VALUE;
 }
 
@@ -724,14 +730,16 @@ BOOL
 WINAPI
 SetStdHandle(DWORD nStdHandle,
              HANDLE hHandle)
-     /*
-      * FUNCTION: Set the handle for the standard input, standard output or
-      * the standard error device.
-      * ARGUMENTS:
-      *        nStdHandle - Specifies the handle to be set.
-      *        hHandle - The handle to set.
-      * RETURNS: TRUE if the function succeeds, FALSE otherwise.
-      */
+/*
+ * FUNCTION: Set the handle for the standard input, standard output or
+ * the standard error device.
+ *
+ * ARGUMENTS:
+ *        nStdHandle - Specifies the handle to be set.
+ *        hHandle - The handle to set.
+ *
+ * RETURNS: TRUE if the function succeeds, FALSE otherwise.
+ */
 {
     PRTL_USER_PROCESS_PARAMETERS Ppb;
 
@@ -769,8 +777,9 @@ BOOL
 WINAPI
 AllocConsole(VOID)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
+    PCSRSS_ALLOC_CONSOLE AllocConsoleRequest = &ApiMessage.Data.AllocConsoleRequest;
     HANDLE hStdError;
     STARTUPINFO si;
 
@@ -783,26 +792,26 @@ AllocConsole(VOID)
 
     GetStartupInfo(&si);
 
-    Request.Data.AllocConsoleRequest.CtrlDispatcher = ConsoleControlDispatcher;
-    Request.Data.AllocConsoleRequest.ConsoleNeeded = TRUE;
-    Request.Data.AllocConsoleRequest.ShowCmd = si.wShowWindow;
+    AllocConsoleRequest->CtrlDispatcher = ConsoleControlDispatcher;
+    AllocConsoleRequest->ConsoleNeeded = TRUE;
+    AllocConsoleRequest->ShowCmd = si.wShowWindow;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, ALLOC_CONSOLE),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepAlloc),
+                                 sizeof(CSRSS_ALLOC_CONSOLE));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
     }
 
-    NtCurrentPeb()->ProcessParameters->ConsoleHandle = Request.Data.AllocConsoleRequest.Console;
+    NtCurrentPeb()->ProcessParameters->ConsoleHandle = AllocConsoleRequest->Console;
 
-    SetStdHandle(STD_INPUT_HANDLE, Request.Data.AllocConsoleRequest.InputHandle);
-    SetStdHandle(STD_OUTPUT_HANDLE, Request.Data.AllocConsoleRequest.OutputHandle);
+    SetStdHandle(STD_INPUT_HANDLE, AllocConsoleRequest->InputHandle);
+    SetStdHandle(STD_OUTPUT_HANDLE, AllocConsoleRequest->OutputHandle);
 
-    hStdError = DuplicateConsoleHandle(Request.Data.AllocConsoleRequest.OutputHandle,
+    hStdError = DuplicateConsoleHandle(AllocConsoleRequest->OutputHandle,
                                        0,
                                        TRUE,
                                        DUPLICATE_SAME_ACCESS);
@@ -824,14 +833,14 @@ FreeConsole(VOID)
     // AG: I'm not sure if this is correct (what happens to std handles?)
     // but I just tried to reverse what AllocConsole() does...
 
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, FREE_CONSOLE),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepFree),
+                                 sizeof(CSRSS_FREE_CONSOLE));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
@@ -852,21 +861,29 @@ WINAPI
 GetConsoleScreenBufferInfo(HANDLE hConsoleOutput,
                            PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
+
+    if (lpConsoleScreenBufferInfo == NULL)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
 
-    Request.Data.ScreenBufferInfoRequest.ConsoleHandle = hConsoleOutput;
+    ApiMessage.Data.ScreenBufferInfoRequest.ConsoleHandle = hConsoleOutput;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, SCREEN_BUFFER_INFO),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetScreenBufferInfo),
+                                 sizeof(CSRSS_SCREEN_BUFFER_INFO));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
     }
-    *lpConsoleScreenBufferInfo = Request.Data.ScreenBufferInfoRequest.Info;
+
+    *lpConsoleScreenBufferInfo = ApiMessage.Data.ScreenBufferInfoRequest.Info;
+
     return TRUE;
 }
 
@@ -881,17 +898,17 @@ WINAPI
 SetConsoleCursorPosition(HANDLE hConsoleOutput,
                          COORD dwCursorPosition)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
-    Request.Data.SetCursorRequest.ConsoleHandle = hConsoleOutput;
-    Request.Data.SetCursorRequest.Position = dwCursorPosition;
+    ApiMessage.Data.SetCursorPositionRequest.ConsoleHandle = hConsoleOutput;
+    ApiMessage.Data.SetCursorPositionRequest.Position = dwCursorPosition;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_CURSOR),
-                                 sizeof(CSR_API_MESSAGE));
-    if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetCursorPosition),
+                                 sizeof(CSRSS_SET_CURSOR_POSITION));
+    if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
@@ -943,8 +960,8 @@ WINAPI
 GetNumberOfConsoleInputEvents(HANDLE hConsoleInput,
                               LPDWORD lpNumberOfEvents)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
     if (lpNumberOfEvents == NULL)
     {
@@ -952,19 +969,19 @@ GetNumberOfConsoleInputEvents(HANDLE hConsoleInput,
         return FALSE;
     }
 
-    Request.Data.GetNumInputEventsRequest.ConsoleHandle = hConsoleInput;
+    ApiMessage.Data.GetNumInputEventsRequest.ConsoleHandle = hConsoleInput;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_NUM_INPUT_EVENTS),
-                                 sizeof(CSR_API_MESSAGE));
-    if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetNumberOfInputEvents),
+                                 sizeof(CSRSS_GET_NUM_INPUT_EVENTS));
+    if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
     }
 
-    *lpNumberOfEvents = Request.Data.GetNumInputEventsRequest.NumInputEvents;
+    *lpNumberOfEvents = ApiMessage.Data.GetNumInputEventsRequest.NumInputEvents;
 
     return TRUE;
 }
@@ -996,8 +1013,8 @@ WINAPI
 GetConsoleCursorInfo(HANDLE hConsoleOutput,
                      PCONSOLE_CURSOR_INFO lpConsoleCursorInfo)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
     if (!lpConsoleCursorInfo)
     {
@@ -1009,19 +1026,19 @@ GetConsoleCursorInfo(HANDLE hConsoleOutput,
         return FALSE;
     }
 
-    Request.Data.GetCursorInfoRequest.ConsoleHandle = hConsoleOutput;
+    ApiMessage.Data.CursorInfoRequest.ConsoleHandle = hConsoleOutput;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CURSOR_INFO),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetCursorInfo),
+                                 sizeof(CSRSS_CURSOR_INFO));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
     }
 
-    *lpConsoleCursorInfo = Request.Data.GetCursorInfoRequest.Info;
+    *lpConsoleCursorInfo = ApiMessage.Data.CursorInfoRequest.Info;
 
     return TRUE;
 }
@@ -1082,16 +1099,16 @@ BOOL
 WINAPI
 SetConsoleActiveScreenBuffer(HANDLE hConsoleOutput)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
-    Request.Data.SetScreenBufferRequest.OutputHandle = hConsoleOutput;
+    ApiMessage.Data.SetScreenBufferRequest.OutputHandle = hConsoleOutput;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_SCREEN_BUFFER),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetActiveScreenBuffer),
+                                 sizeof(CSRSS_SET_SCREEN_BUFFER));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
@@ -1110,16 +1127,16 @@ BOOL
 WINAPI
 FlushConsoleInputBuffer(HANDLE hConsoleInput)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
-    Request.Data.FlushInputBufferRequest.ConsoleInput = hConsoleInput;
+    ApiMessage.Data.FlushInputBufferRequest.ConsoleInput = hConsoleInput;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, FLUSH_INPUT_BUFFER),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepFlushInputBuffer),
+                                 sizeof(CSRSS_FLUSH_INPUT_BUFFER));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
@@ -1139,17 +1156,17 @@ WINAPI
 SetConsoleScreenBufferSize(HANDLE hConsoleOutput,
                            COORD dwSize)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
-    Request.Data.SetScreenBufferSize.OutputHandle = hConsoleOutput;
-    Request.Data.SetScreenBufferSize.Size = dwSize;
+    ApiMessage.Data.SetScreenBufferSize.OutputHandle = hConsoleOutput;
+    ApiMessage.Data.SetScreenBufferSize.Size = dwSize;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_SCREEN_BUFFER_SIZE),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetScreenBufferSize),
+                                 sizeof(CSRSS_SET_SCREEN_BUFFER_SIZE));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
@@ -1158,6 +1175,7 @@ SetConsoleScreenBufferSize(HANDLE hConsoleOutput,
     return TRUE;
 }
 
+
 /*--------------------------------------------------------------
  *     SetConsoleCursorInfo
  *
@@ -1168,17 +1186,17 @@ WINAPI
 SetConsoleCursorInfo(HANDLE hConsoleOutput,
                      CONST CONSOLE_CURSOR_INFO *lpConsoleCursorInfo)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
-    Request.Data.SetCursorInfoRequest.ConsoleHandle = hConsoleOutput;
-    Request.Data.SetCursorInfoRequest.Info = *lpConsoleCursorInfo;
+    ApiMessage.Data.CursorInfoRequest.ConsoleHandle = hConsoleOutput;
+    ApiMessage.Data.CursorInfoRequest.Info = *lpConsoleCursorInfo;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_CURSOR_INFO),
-                                 sizeof(CSR_API_MESSAGE));
-    if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetCursorInfo),
+                                 sizeof(CSRSS_CURSOR_INFO));
+    if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
@@ -1197,32 +1215,33 @@ IntScrollConsoleScreenBuffer(HANDLE hConsoleOutput,
                              const CHAR_INFO *lpFill,
                              BOOL bUnicode)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
+    PCSRSS_SCROLL_CONSOLE_SCREEN_BUFFER ScrollConsoleScreenBufferRequest = &ApiMessage.Data.ScrollConsoleScreenBufferRequest;
 
-    Request.Data.ScrollConsoleScreenBufferRequest.ConsoleHandle = hConsoleOutput;
-    Request.Data.ScrollConsoleScreenBufferRequest.Unicode = bUnicode;
-    Request.Data.ScrollConsoleScreenBufferRequest.ScrollRectangle = *lpScrollRectangle;
+    ScrollConsoleScreenBufferRequest->ConsoleHandle = hConsoleOutput;
+    ScrollConsoleScreenBufferRequest->Unicode = bUnicode;
+    ScrollConsoleScreenBufferRequest->ScrollRectangle = *lpScrollRectangle;
 
     if (lpClipRectangle != NULL)
     {
-        Request.Data.ScrollConsoleScreenBufferRequest.UseClipRectangle = TRUE;
-        Request.Data.ScrollConsoleScreenBufferRequest.ClipRectangle = *lpClipRectangle;
+        ScrollConsoleScreenBufferRequest->UseClipRectangle = TRUE;
+        ScrollConsoleScreenBufferRequest->ClipRectangle = *lpClipRectangle;
     }
     else
     {
-        Request.Data.ScrollConsoleScreenBufferRequest.UseClipRectangle = FALSE;
+        ScrollConsoleScreenBufferRequest->UseClipRectangle = FALSE;
     }
 
-    Request.Data.ScrollConsoleScreenBufferRequest.DestinationOrigin = dwDestinationOrigin;
-    Request.Data.ScrollConsoleScreenBufferRequest.Fill = *lpFill;
+    ScrollConsoleScreenBufferRequest->DestinationOrigin = dwDestinationOrigin;
+    ScrollConsoleScreenBufferRequest->Fill = *lpFill;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, SCROLL_CONSOLE_SCREEN_BUFFER),
-                                 sizeof(CSR_API_MESSAGE));
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepScrollScreenBuffer),
+                                 sizeof(CSRSS_SCROLL_CONSOLE_SCREEN_BUFFER));
 
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
@@ -1303,17 +1322,17 @@ WINAPI
 SetConsoleTextAttribute(HANDLE hConsoleOutput,
                         WORD wAttributes)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
-    Request.Data.SetAttribRequest.ConsoleHandle = hConsoleOutput;
-    Request.Data.SetAttribRequest.Attrib = wAttributes;
+    ApiMessage.Data.SetAttribRequest.ConsoleHandle = hConsoleOutput;
+    ApiMessage.Data.SetAttribRequest.Attrib = wAttributes;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_ATTRIB),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetTextAttribute),
+                                 sizeof(CSRSS_SET_ATTRIB));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
@@ -1532,8 +1551,6 @@ GetConsoleTitleW(LPWSTR lpConsoleTitle,
 /*--------------------------------------------------------------
  *     GetConsoleTitleA
  *
- *     19990306 EA
- *
  * @implemented
  */
 DWORD
@@ -1593,8 +1610,6 @@ SetConsoleTitleW(LPCWSTR lpConsoleTitle)
 /*--------------------------------------------------------------
  *    SetConsoleTitleA
  *
- *     19990204 EA    Added
- *
  * @implemented
  */
 BOOL
@@ -1629,32 +1644,33 @@ CreateConsoleScreenBuffer(DWORD dwDesiredAccess,
                           DWORD dwFlags,
                           LPVOID lpScreenBufferData)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
-    if (dwDesiredAccess & ~(GENERIC_READ | GENERIC_WRITE)
-        || dwShareMode & ~(FILE_SHARE_READ | FILE_SHARE_WRITE)
-        || dwFlags != CONSOLE_TEXTMODE_BUFFER)
+    if ( (dwDesiredAccess & ~(GENERIC_READ | GENERIC_WRITE))    ||
+         (dwShareMode & ~(FILE_SHARE_READ | FILE_SHARE_WRITE))  ||
+         (dwFlags != CONSOLE_TEXTMODE_BUFFER) )
     {
         SetLastError(ERROR_INVALID_PARAMETER);
         return INVALID_HANDLE_VALUE;
     }
 
-    Request.Data.CreateScreenBufferRequest.Access = dwDesiredAccess;
-    Request.Data.CreateScreenBufferRequest.ShareMode = dwShareMode;
-    Request.Data.CreateScreenBufferRequest.Inheritable =
-        lpSecurityAttributes ? lpSecurityAttributes->bInheritHandle : FALSE;
+    ApiMessage.Data.CreateScreenBufferRequest.Access = dwDesiredAccess;
+    ApiMessage.Data.CreateScreenBufferRequest.ShareMode = dwShareMode;
+    ApiMessage.Data.CreateScreenBufferRequest.Inheritable =
+        (lpSecurityAttributes ? lpSecurityAttributes->bInheritHandle : FALSE);
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, CREATE_SCREEN_BUFFER),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepCreateScreenBuffer),
+                                 sizeof(CSRSS_CREATE_SCREEN_BUFFER));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return INVALID_HANDLE_VALUE;
     }
-    return Request.Data.CreateScreenBufferRequest.OutputHandle;
+
+    return ApiMessage.Data.CreateScreenBufferRequest.OutputHandle;
 }
 
 
@@ -1830,18 +1846,26 @@ BOOL
 WINAPI
 GetConsoleSelectionInfo(PCONSOLE_SELECTION_INFO lpConsoleSelectionInfo)
 {
-    CSR_API_MESSAGE Request;
-    NTSTATUS Status = CsrClientCallServer(&Request,
-                                          NULL,
-                                          CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_SELECTION_INFO),
-                                          sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+    NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
+
+    if (lpConsoleSelectionInfo == NULL)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
+                                 NULL,
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetSelectionInfo),
+                                 sizeof(CSRSS_GET_CONSOLE_SELECTION_INFO));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
     }
 
-    *lpConsoleSelectionInfo = Request.Data.GetConsoleSelectionInfo.Info;
+    *lpConsoleSelectionInfo = ApiMessage.Data.GetConsoleSelectionInfo.Info;
     return TRUE;
 }
 
@@ -1859,6 +1883,7 @@ AttachConsole(DWORD dwProcessId)
     return TRUE;
 }
 
+
 /*--------------------------------------------------------------
  *     GetConsoleWindow
  *
@@ -1868,20 +1893,20 @@ HWND
 WINAPI
 GetConsoleWindow(VOID)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_WINDOW),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status ) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetConsoleWindow),
+                                 sizeof(CSRSS_GET_CONSOLE_WINDOW));
+    if (!NT_SUCCESS(Status ) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return (HWND) NULL;
     }
 
-    return Request.Data.GetConsoleWindowRequest.WindowHandle;
+    return ApiMessage.Data.GetConsoleWindowRequest.WindowHandle;
 }
 
 
@@ -1894,16 +1919,16 @@ BOOL
 WINAPI
 SetConsoleIcon(HICON hicon)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
-    Request.Data.SetConsoleIconRequest.WindowIcon = hicon;
+    ApiMessage.Data.SetConsoleIconRequest.WindowIcon = hicon;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_CONSOLE_ICON),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetIcon),
+                                 sizeof(CSRSS_SET_CONSOLE_ICON));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;