#include <k32.h>
-// #define NDEBUG
+#define NDEBUG
#include <debug.h>
extern RTL_CRITICAL_SECTION ConsoleLock;
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);
erException.ExceptionRecord = NULL;
erException.ExceptionAddress = DefaultConsoleCtrlHandler;
erException.NumberParameters = 0;
-
+
_SEH2_TRY
{
RtlRaiseException(&erException);
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
RtlEnterCriticalSection(&ConsoleLock);
-
+
if ((nCode != CTRL_C_EVENT) ||
(NtCurrentPeb()->ProcessParameters->ConsoleFlags != 1))
{
if (CtrlHandlers[i - 1](nCode)) break;
}
}
-
+
RtlLeaveCriticalSection(&ConsoleLock);
}
_SEH2_END;
-
+
ExitThread(0);
}
-
break;
}
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))
}
}
}
-
+
RtlLeaveCriticalSection(&ConsoleLock);
ExitThread(nExitCode);
+ return STATUS_SUCCESS;
}
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;
}
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;
}
{
DPRINT1("GetNumberOfConsoleFonts() UNIMPLEMENTED!\n");
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 1; /* FIXME: call csrss.exe */
+ return 1;
}
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;
}
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;
/*
* 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
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);
}
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);
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;
return Ppb->StandardError;
}
- SetLastError (ERROR_INVALID_PARAMETER);
+ SetLastError(ERROR_INVALID_PARAMETER);
return INVALID_HANDLE_VALUE;
}
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;
WINAPI
AllocConsole(VOID)
{
- CSR_API_MESSAGE Request;
NTSTATUS Status;
+ CONSOLE_API_MESSAGE ApiMessage;
+ PCSRSS_ALLOC_CONSOLE AllocConsoleRequest = &ApiMessage.Data.AllocConsoleRequest;
HANDLE hStdError;
STARTUPINFO si;
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);
// 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;
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;
}
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;
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;
}
GetNumberOfConsoleInputEvents(HANDLE hConsoleInput,
LPDWORD lpNumberOfEvents)
{
- CSR_API_MESSAGE Request;
NTSTATUS Status;
+ CONSOLE_API_MESSAGE ApiMessage;
if (lpNumberOfEvents == NULL)
{
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;
}
GetConsoleCursorInfo(HANDLE hConsoleOutput,
PCONSOLE_CURSOR_INFO lpConsoleCursorInfo)
{
- CSR_API_MESSAGE Request;
NTSTATUS Status;
+ CONSOLE_API_MESSAGE ApiMessage;
if (!lpConsoleCursorInfo)
{
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;
}
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;
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;
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;
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;
return TRUE;
}
+
/*--------------------------------------------------------------
* SetConsoleCursorInfo
*
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;
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;
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;
/*--------------------------------------------------------------
* GetConsoleTitleA
*
- * 19990306 EA
- *
* @implemented
*/
DWORD
/*--------------------------------------------------------------
* SetConsoleTitleA
*
- * 19990204 EA Added
- *
* @implemented
*/
BOOL
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;
}
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;
}
return TRUE;
}
+
/*--------------------------------------------------------------
* GetConsoleWindow
*
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;
}
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;