[KERNEL32]
[reactos.git] / dll / win32 / kernel32 / client / console / console.c
index 47bd55b..f6aaea0 100644 (file)
@@ -15,7 +15,7 @@
 
 #include <k32.h>
 
-// #define NDEBUG
+#define NDEBUG
 #include <debug.h>
 
 extern RTL_CRITICAL_SECTION ConsoleLock;
@@ -66,16 +66,16 @@ DefaultConsoleCtrlHandler(DWORD Event)
     return TRUE;
 }
 
-__declspec(noreturn)
-VOID
-CALLBACK
-ConsoleControlDispatcher(DWORD CodeAndFlag)
+DWORD
+WINAPI
+ConsoleControlDispatcher(IN LPVOID lpThreadParameter)
 {
     DWORD nExitCode = 0;
+    DWORD CodeAndFlag = PtrToUlong(lpThreadParameter);
     DWORD nCode = CodeAndFlag & MAXLONG;
     UINT i;
     EXCEPTION_RECORD erException;
-    
+
     DPRINT("Console Dispatcher Active: %lx %lx\n", CodeAndFlag, nCode);
     SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
 
@@ -92,7 +92,7 @@ ConsoleControlDispatcher(DWORD CodeAndFlag)
                 erException.ExceptionRecord = NULL;
                 erException.ExceptionAddress = DefaultConsoleCtrlHandler;
                 erException.NumberParameters = 0;
-                
+
                 _SEH2_TRY
                 {
                     RtlRaiseException(&erException);
@@ -100,7 +100,7 @@ ConsoleControlDispatcher(DWORD CodeAndFlag)
                 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
                 {
                     RtlEnterCriticalSection(&ConsoleLock);
-                    
+
                     if ((nCode != CTRL_C_EVENT) ||
                         (NtCurrentPeb()->ProcessParameters->ConsoleFlags != 1))
                     {
@@ -109,14 +109,13 @@ ConsoleControlDispatcher(DWORD CodeAndFlag)
                             if (CtrlHandlers[i - 1](nCode)) break;
                         }
                     }
-                    
+
                     RtlLeaveCriticalSection(&ConsoleLock);
                 }
                 _SEH2_END;
-                
+
                 ExitThread(0);
             }
-            
             break;
         }
 
@@ -124,25 +123,22 @@ ConsoleControlDispatcher(DWORD CodeAndFlag)
         case CTRL_LOGOFF_EVENT:
         case CTRL_SHUTDOWN_EVENT:
             break;
-            
+
         case 3:
-        
             ExitThread(0);
             break;
-        
+
         case 4:
-        
             ExitProcess(CONTROL_C_EXIT);
             break;
 
         default:
-        
             ASSERT(FALSE);
             break;
     }
-    
+
     ASSERT(ConsoleInitialized);
-    
+
     RtlEnterCriticalSection(&ConsoleLock);
     nExitCode = 0;
     if ((nCode != CTRL_C_EVENT) || (NtCurrentPeb()->ProcessParameters->ConsoleFlags != 1))
@@ -172,9 +168,10 @@ ConsoleControlDispatcher(DWORD CodeAndFlag)
             }
         }
     }
-    
+
     RtlLeaveCriticalSection(&ConsoleLock);
     ExitThread(nExitCode);
+    return STATUS_SUCCESS;
 }
 
 
@@ -205,33 +202,34 @@ DuplicateConsoleHandle(HANDLE hConsole,
                        BOOL bInheritHandle,
                        DWORD dwOptions)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
+    PCSRSS_DUPLICATE_HANDLE DuplicateHandleRequest = &ApiMessage.Data.DuplicateHandleRequest;
 
-    if (dwOptions & ~(DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)
-        || (!(dwOptions & DUPLICATE_SAME_ACCESS)
-        && dwDesiredAccess & ~(GENERIC_READ | GENERIC_WRITE)))
+    if ( (dwOptions & ~(DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) ||
+         (!(dwOptions & DUPLICATE_SAME_ACCESS) &&
+           (dwDesiredAccess & ~(GENERIC_READ | GENERIC_WRITE))) )
     {
         SetLastError (ERROR_INVALID_PARAMETER);
         return INVALID_HANDLE_VALUE;
     }
 
-    Request.Data.DuplicateHandleRequest.Handle = hConsole;
-    Request.Data.DuplicateHandleRequest.Access = dwDesiredAccess;
-    Request.Data.DuplicateHandleRequest.Inheritable = bInheritHandle;
-    Request.Data.DuplicateHandleRequest.Options = dwOptions;
+    DuplicateHandleRequest->Handle = hConsole;
+    DuplicateHandleRequest->Access = dwDesiredAccess;
+    DuplicateHandleRequest->Inheritable = bInheritHandle;
+    DuplicateHandleRequest->Options = dwOptions;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_NATIVE, DUPLICATE_HANDLE),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status=Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepDuplicateHandle),
+                                 sizeof(CSRSS_DUPLICATE_HANDLE));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return INVALID_HANDLE_VALUE;
     }
 
-    return Request.Data.DuplicateHandleRequest.Handle;
+    return DuplicateHandleRequest->Handle;
 }
 
 
@@ -295,23 +293,23 @@ GetConsoleHardwareState(HANDLE hConsole,
                         DWORD Flags,
                         PDWORD State)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
+    PCSRSS_CONSOLE_HW_STATE ConsoleHardwareStateRequest = &ApiMessage.Data.ConsoleHardwareStateRequest;
 
-    Request.Data.ConsoleHardwareStateRequest.ConsoleHandle = hConsole;
-    Request.Data.ConsoleHardwareStateRequest.SetGet = CONSOLE_HARDWARE_STATE_GET;
+    ConsoleHardwareStateRequest->ConsoleHandle = hConsole;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, SETGET_CONSOLE_HW_STATE),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetHardwareState),
+                                 sizeof(CSRSS_CONSOLE_HW_STATE));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
     }
 
-    *State = Request.Data.ConsoleHardwareStateRequest.State;
+    *State = ConsoleHardwareStateRequest->State;
     return TRUE;
 }
 
@@ -364,7 +362,7 @@ GetNumberOfConsoleFonts(VOID)
 {
     DPRINT1("GetNumberOfConsoleFonts() UNIMPLEMENTED!\n");
     SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
-    return 1; /* FIXME: call csrss.exe */
+    return 1;
 }
 
 
@@ -392,52 +390,53 @@ OpenConsoleW(LPCWSTR wsName,
              BOOL bInheritHandle,
              DWORD dwShareMode)
 {
-    CSR_API_MESSAGE Request;
-    ULONG CsrRequest;
     NTSTATUS Status = STATUS_SUCCESS;
+    CONSOLE_API_MESSAGE ApiMessage;
+    PCSRSS_OPEN_CONSOLE OpenConsoleRequest = &ApiMessage.Data.OpenConsoleRequest;
+    HANDLE_TYPE HandleType;
 
     if (wsName && 0 == _wcsicmp(wsName, L"CONIN$"))
     {
-        CsrRequest = CSR_CREATE_API_NUMBER(CSR_NATIVE, GET_INPUT_HANDLE);
+        HandleType = HANDLE_INPUT;
     }
     else if (wsName && 0 == _wcsicmp(wsName, L"CONOUT$"))
     {
-        CsrRequest = CSR_CREATE_API_NUMBER(CSR_NATIVE, GET_OUTPUT_HANDLE);
+        HandleType = HANDLE_OUTPUT;
     }
     else
     {
         SetLastError(ERROR_INVALID_PARAMETER);
-        return(INVALID_HANDLE_VALUE);
+        return INVALID_HANDLE_VALUE;
     }
 
-    if (dwDesiredAccess & ~(GENERIC_READ|GENERIC_WRITE))
+    if (dwDesiredAccess & ~(GENERIC_READ | GENERIC_WRITE))
     {
         SetLastError(ERROR_INVALID_PARAMETER);
-        return(INVALID_HANDLE_VALUE);
+        return INVALID_HANDLE_VALUE;
     }
 
-    if (dwShareMode & ~(FILE_SHARE_READ|FILE_SHARE_WRITE))
+    if (dwShareMode & ~(FILE_SHARE_READ | FILE_SHARE_WRITE))
     {
         SetLastError(ERROR_INVALID_PARAMETER);
-        return(INVALID_HANDLE_VALUE);
+        return INVALID_HANDLE_VALUE;
     }
 
-    /* Structures for GET_INPUT_HANDLE and GET_OUTPUT_HANDLE requests are identical */
-    Request.Data.GetInputHandleRequest.Access = dwDesiredAccess;
-    Request.Data.GetInputHandleRequest.Inheritable = bInheritHandle;
-    Request.Data.GetInputHandleRequest.ShareMode = dwShareMode;
+    OpenConsoleRequest->HandleType = HandleType;
+    OpenConsoleRequest->Access = dwDesiredAccess;
+    OpenConsoleRequest->Inheritable = bInheritHandle;
+    OpenConsoleRequest->ShareMode = dwShareMode;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CsrRequest,
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepOpenConsole),
+                                 sizeof(CSRSS_OPEN_CONSOLE));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return INVALID_HANDLE_VALUE;
     }
 
-    return Request.Data.GetInputHandleRequest.Handle;
+    return OpenConsoleRequest->Handle;
 }
 
 
@@ -500,18 +499,18 @@ SetConsoleHardwareState(HANDLE hConsole,
                         DWORD Flags,
                         DWORD State)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
+    PCSRSS_CONSOLE_HW_STATE ConsoleHardwareStateRequest = &ApiMessage.Data.ConsoleHardwareStateRequest;
 
-    Request.Data.ConsoleHardwareStateRequest.ConsoleHandle = hConsole;
-    Request.Data.ConsoleHardwareStateRequest.SetGet = CONSOLE_HARDWARE_STATE_SET;
-    Request.Data.ConsoleHardwareStateRequest.State = State;
+    ConsoleHardwareStateRequest->ConsoleHandle = hConsole;
+    ConsoleHardwareStateRequest->State = State;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, SETGET_CONSOLE_HW_STATE),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetHardwareState),
+                                 sizeof(CSRSS_CONSOLE_HW_STATE));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
@@ -594,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
@@ -607,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);
 }
 
 
@@ -665,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);
@@ -683,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;
 
@@ -713,7 +718,7 @@ GetStdHandle(DWORD nStdHandle)
             return Ppb->StandardError;
     }
 
-    SetLastError (ERROR_INVALID_PARAMETER);
+    SetLastError(ERROR_INVALID_PARAMETER);
     return INVALID_HANDLE_VALUE;
 }
 
@@ -725,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;
 
@@ -770,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;
 
@@ -784,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);
@@ -825,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;
@@ -853,21 +861,29 @@ WINAPI
 GetConsoleScreenBufferInfo(HANDLE hConsoleOutput,
                            PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
 
-    Request.Data.ScreenBufferInfoRequest.ConsoleHandle = hConsoleOutput;
+    if (lpConsoleScreenBufferInfo == NULL)
+    {
+        SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
 
-    Status = CsrClientCallServer(&Request,
+    ApiMessage.Data.ScreenBufferInfoRequest.ConsoleHandle = hConsoleOutput;
+
+    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;
 }
 
@@ -882,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;
@@ -912,22 +928,23 @@ WINAPI
 GetConsoleMode(HANDLE hConsoleHandle,
                LPDWORD lpMode)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
+    PCSRSS_CONSOLE_MODE ConsoleModeRequest = &ApiMessage.Data.ConsoleModeRequest;
 
-    Request.Data.GetConsoleModeRequest.ConsoleHandle = hConsoleHandle;
+    ConsoleModeRequest->ConsoleHandle = hConsoleHandle;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_MODE),
-                                 sizeof(CSR_API_MESSAGE));
-    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepGetMode),
+                                 sizeof(CSRSS_CONSOLE_MODE));
+    if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
     }
 
-    *lpMode = Request.Data.GetConsoleModeRequest.ConsoleMode;
+    *lpMode = ConsoleModeRequest->ConsoleMode;
 
     return TRUE;
 }
@@ -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;
 }
@@ -1052,17 +1069,18 @@ WINAPI
 SetConsoleMode(HANDLE hConsoleHandle,
                DWORD dwMode)
 {
-    CSR_API_MESSAGE Request;
     NTSTATUS Status;
+    CONSOLE_API_MESSAGE ApiMessage;
+    PCSRSS_CONSOLE_MODE ConsoleModeRequest = &ApiMessage.Data.ConsoleModeRequest;
 
-    Request.Data.SetConsoleModeRequest.ConsoleHandle = hConsoleHandle;
-    Request.Data.SetConsoleModeRequest.Mode = dwMode;
+    ConsoleModeRequest->ConsoleHandle = hConsoleHandle;
+    ConsoleModeRequest->ConsoleMode = dwMode;
 
-    Status = CsrClientCallServer(&Request,
+    Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
                                  NULL,
-                                 CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_CONSOLE_MODE),
-                                 sizeof(CSR_API_MESSAGE));
-    if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
+                                 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX, ConsolepSetMode),
+                                 sizeof(CSRSS_CONSOLE_MODE));
+    if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = ApiMessage.Status))
     {
         BaseSetLastNTError(Status);
         return FALSE;
@@ -1081,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;
@@ -1109,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;
@@ -1138,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;
@@ -1157,6 +1175,7 @@ SetConsoleScreenBufferSize(HANDLE hConsoleOutput,
     return TRUE;
 }
 
+
 /*--------------------------------------------------------------
  *     SetConsoleCursorInfo
  *
@@ -1167,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;
@@ -1196,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;
@@ -1302,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;
@@ -1531,8 +1551,6 @@ GetConsoleTitleW(LPWSTR lpConsoleTitle,
 /*--------------------------------------------------------------
  *     GetConsoleTitleA
  *
- *     19990306 EA
- *
  * @implemented
  */
 DWORD
@@ -1592,8 +1610,6 @@ SetConsoleTitleW(LPCWSTR lpConsoleTitle)
 /*--------------------------------------------------------------
  *    SetConsoleTitleA
  *
- *     19990204 EA    Added
- *
  * @implemented
  */
 BOOL
@@ -1628,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;
 }
 
 
@@ -1829,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;
 }
 
@@ -1858,6 +1883,7 @@ AttachConsole(DWORD dwProcessId)
     return TRUE;
 }
 
+
 /*--------------------------------------------------------------
  *     GetConsoleWindow
  *
@@ -1867,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;
 }
 
 
@@ -1893,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;