From 61d07a5b47cbe91ab5f482b13e700eabf391966a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Wed, 17 Oct 2012 23:10:40 +0000 Subject: [PATCH] [NTDLL/KERNEL32/CSRSRV/WIN32K/USER32/WIN32CSR] - Use the new messaging structures and the new macros, plus the new CSR_API function's signature (--> and rename some variables). - Code cleaning & formatting. [CSRSS/NDK] - Reorganize all the header files in logical units (server.h for server-side of CSR, client.h for client-side, and msg.h for messaging), removing duplicated definitions. - Code cleaning & formatting. The next step would be to activate the code of server-dll loading inside csrsrv, then moving all the console-related APIs from win32csr to winsrv, the latter built with the same structure as csrsrv's. svn path=/branches/ros-csrss/; revision=57570 --- dll/ntdll/csr/api.c | 18 +- dll/ntdll/csr/connect.c | 21 +- dll/ntdll/include/ntdll.h | 3 +- dll/ntdll/include/ntdllp.h | 8 +- dll/win32/kernel32/CMakeLists.txt | 36 +- dll/win32/kernel32/client/dllmain.c | 4 +- dll/win32/kernel32/client/dosdev.c | 2 +- dll/win32/kernel32/client/file/console.c | 326 ++++---- dll/win32/kernel32/client/file/deviceio.c | 2 +- dll/win32/kernel32/client/file/filename.c | 5 +- dll/win32/kernel32/client/proc.c | 10 +- dll/win32/kernel32/client/vdm.c | 12 +- dll/win32/kernel32/client/vista.c | 20 +- dll/win32/kernel32/k32.h | 3 +- include/ndk/umfuncs.h | 97 --- include/ndk/umtypes.h | 7 - include/reactos/subsys/csrss/client.h | 100 +++ include/reactos/subsys/csrss/csrcons.h | 392 ++++++++++ include/reactos/subsys/csrss/csrss.h | 703 ++---------------- include/reactos/subsys/csrss/msg.h | 219 ++++++ .../reactos/subsys/{csr => csrss}/server.h | 253 ++++--- subsystems/win32/csrss/csrsrv/api/process.c | 79 +- subsystems/win32/csrss/csrsrv/api/user.c | 2 +- subsystems/win32/csrss/csrsrv/api/wapi.c | 53 +- subsystems/win32/csrss/csrsrv/procsup.c | 6 +- subsystems/win32/csrss/csrsrv/server.c | 4 +- subsystems/win32/csrss/csrsrv/thredsup.c | 2 +- subsystems/win32/csrss/include/api.h | 251 +------ win32ss/pch.h | 5 +- win32ss/user/ntuser/csr.c | 2 +- win32ss/user/ntuser/desktop.c | 2 +- win32ss/user/ntuser/simplecall.c | 2 +- win32ss/user/user32/include/user32.h | 5 +- win32ss/user/user32/include/user_x.h | 1 - win32ss/user/user32/misc/exit.c | 52 +- win32ss/user/user32/misc/misc.c | 26 +- win32ss/user/win32csr/alias.c | 116 +-- win32ss/user/win32csr/coninput.c | 68 +- win32ss/user/win32csr/conoutput.c | 274 +++---- win32ss/user/win32csr/console.c | 126 ++-- win32ss/user/win32csr/desktopbg.c | 14 +- win32ss/user/win32csr/exitros.c | 24 +- win32ss/user/win32csr/file.c | 16 +- win32ss/user/win32csr/handle.c | 43 +- win32ss/user/win32csr/lineinput.c | 54 +- 45 files changed, 1714 insertions(+), 1754 deletions(-) create mode 100644 include/reactos/subsys/csrss/client.h create mode 100644 include/reactos/subsys/csrss/csrcons.h create mode 100644 include/reactos/subsys/csrss/msg.h rename include/reactos/subsys/{csr => csrss}/server.h (62%) diff --git a/dll/ntdll/csr/api.c b/dll/ntdll/csr/api.c index de280d9292b..965fe5c2ea1 100644 --- a/dll/ntdll/csr/api.c +++ b/dll/ntdll/csr/api.c @@ -37,8 +37,8 @@ CsrSetPriorityClass(HANDLE hProcess, PULONG PriorityClass) { NTSTATUS Status; - CSR_API_MESSAGE2 ApiMessage; /* <- Remove the "2" when CSR is commited */ - PCSR_SET_PRIORITY_CLASS SetPriorityClass = &ApiMessage.SetPriorityClass; + CSR_API_MESSAGE ApiMessage; + PCSR_SET_PRIORITY_CLASS SetPriorityClass = &ApiMessage.Data.SetPriorityClass; /* Set up the data for CSR */ DbgBreakPoint(); @@ -46,10 +46,9 @@ CsrSetPriorityClass(HANDLE hProcess, SetPriorityClass->PriorityClass = *PriorityClass; /* Call it */ - Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, + Status = CsrClientCallServer(&ApiMessage, NULL, - CSR_MAKE_OPCODE(CsrpSetPriorityClass, - CSR_SRV_SERVER), + CSR_CREATE_API_NUMBER(CSR_SRV_SERVER, CsrpSetPriorityClass), sizeof(CSR_SET_PRIORITY_CLASS)); /* Return what we got, if requested */ @@ -67,19 +66,18 @@ NTAPI CsrIdentifyAlertableThread (VOID) { NTSTATUS Status; - CSR_API_MESSAGE2 ApiMessage; /* <- Remove the "2" when CSR is commited */ + CSR_API_MESSAGE ApiMessage; PCSR_IDENTIFY_ALTERTABLE_THREAD IdentifyAlertableThread; /* Set up the data for CSR */ DbgBreakPoint(); - IdentifyAlertableThread = &ApiMessage.IdentifyAlertableThread; + IdentifyAlertableThread = &ApiMessage.Data.IdentifyAlertableThread; IdentifyAlertableThread->Cid = NtCurrentTeb()->ClientId; /* Call it */ - Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage, + Status = CsrClientCallServer(&ApiMessage, NULL, - CSR_MAKE_OPCODE(CsrpIdentifyAlertable, - CSR_SRV_SERVER), + CSR_CREATE_API_NUMBER(CSR_SRV_SERVER, CsrpIdentifyAlertable), sizeof(CSR_SET_PRIORITY_CLASS)); /* Return to caller */ diff --git a/dll/ntdll/csr/connect.c b/dll/ntdll/csr/connect.c index e356cc772d5..17220f23805 100644 --- a/dll/ntdll/csr/connect.c +++ b/dll/ntdll/csr/connect.c @@ -27,7 +27,6 @@ typedef NTSTATUS PCSR_SERVER_API_ROUTINE CsrServerApiRoutine; #define UNICODE_PATH_SEP L"\\" -#define CSR_PORT_NAME L"ApiPort" /* FUNCTIONS *****************************************************************/ @@ -63,8 +62,7 @@ CsrClientCallServer(PCSR_API_MESSAGE ApiMessage, ApiMessage->Header.u1.s1.TotalLength = RequestLength; /* Fill out the CSR Header */ - ApiMessage->Type = ApiNumber; - //ApiMessage->Opcode = ApiNumber; <- Activate with new CSR + ApiMessage->ApiNumber = ApiNumber; ApiMessage->CsrCaptureData = NULL; DPRINT("API: %lx, u1.s1.DataLength: %x, u1.s1.TotalLength: %x\n", @@ -332,9 +330,8 @@ CsrClientConnectToServer(PWSTR ObjectDirectory, HANDLE hCsrSrv; ANSI_STRING CsrServerRoutineName; PCSR_CAPTURE_BUFFER CaptureBuffer; - CSR_API_MESSAGE RosApiMessage; - CSR_API_MESSAGE2 ApiMessage; - PCSR_CLIENT_CONNECT ClientConnect = &ApiMessage.ClientConnect; + CSR_API_MESSAGE ApiMessage; + PCSR_CLIENT_CONNECT ClientConnect = &ApiMessage.Data.CsrClientConnect; /* Validate the Connection Info */ DPRINT("CsrClientConnectToServer: %lx %p\n", ServerId, ConnectionInfo); @@ -437,14 +434,14 @@ CsrClientConnectToServer(PWSTR ObjectDirectory, #if 0 Status = CsrClientCallServer(&ApiMessage, CaptureBuffer, - CSR_MAKE_OPCODE(CsrpClientConnect, - CSR_SRV_DLL), + CSR_CREATE_API_NUMBER(CSR_SRV_DLL, CsrpClientConnect), sizeof(CSR_CLIENT_CONNECT)); -#endif - Status = CsrClientCallServer(&RosApiMessage, - NULL, - MAKE_CSR_API(CONNECT_PROCESS, CSR_NATIVE), +#else + Status = CsrClientCallServer(&ApiMessage, + CaptureBuffer, + CSR_CREATE_API_NUMBER(CSR_NATIVE, CONNECT_PROCESS), sizeof(CSR_API_MESSAGE)); +#endif } else { diff --git a/dll/ntdll/include/ntdll.h b/dll/ntdll/include/ntdll.h index edbce5ae68d..c2bef832a84 100644 --- a/dll/ntdll/include/ntdll.h +++ b/dll/ntdll/include/ntdll.h @@ -42,7 +42,8 @@ #include "ntdllp.h" /* CSRSS Header */ -#include +#include +#include // FIXME: data header. /* PSEH */ #include diff --git a/dll/ntdll/include/ntdllp.h b/dll/ntdll/include/ntdllp.h index e806e00a76e..0880b2782ab 100644 --- a/dll/ntdll/include/ntdllp.h +++ b/dll/ntdll/include/ntdllp.h @@ -143,11 +143,11 @@ LdrpFreeUnicodeString(PUNICODE_STRING String); /* FIXME: Cleanup this mess */ typedef NTSTATUS (NTAPI *PEPFUNC)(PPEB); NTSTATUS LdrMapSections(HANDLE ProcessHandle, - PVOID ImageBase, - HANDLE SectionHandle, - PIMAGE_NT_HEADERS NTHeaders); + PVOID ImageBase, + HANDLE SectionHandle, + PIMAGE_NT_HEADERS NTHeaders); NTSTATUS LdrMapNTDllForProcess(HANDLE ProcessHandle, - PHANDLE NTDllSectionHandle); + PHANDLE NTDllSectionHandle); ULONG LdrpGetResidentSize(PIMAGE_NT_HEADERS NTHeaders); diff --git a/dll/win32/kernel32/CMakeLists.txt b/dll/win32/kernel32/CMakeLists.txt index ad5a2a3bded..70d35c868ec 100644 --- a/dll/win32/kernel32/CMakeLists.txt +++ b/dll/win32/kernel32/CMakeLists.txt @@ -8,34 +8,34 @@ set_rc_compiler() spec2def(kernel32.dll kernel32.spec ADD_IMPORTLIB) list(APPEND SOURCE - client/appcache.c - client/atom.c - client/compname.c + client/appcache.c + client/atom.c + client/compname.c client/debugger.c client/dosdev.c - client/dllmain.c - client/environ.c + client/dllmain.c + client/environ.c client/except.c client/fiber.c - client/handle.c + client/handle.c client/heapmem.c client/job.c - client/loader.c - client/path.c - client/perfcnt.c - client/power.c + client/loader.c + client/path.c + client/perfcnt.c + client/power.c client/proc.c - client/resntfy.c + client/resntfy.c client/session.c client/synch.c - client/sysinfo.c - client/time.c - client/timerqueue.c - client/toolhelp.c - client/utils.c + client/sysinfo.c + client/time.c + client/timerqueue.c + client/toolhelp.c + client/utils.c client/thread.c - client/vdm.c - client/version.c + client/vdm.c + client/version.c client/virtmem.c client/vista.c client/file/backup.c diff --git a/dll/win32/kernel32/client/dllmain.c b/dll/win32/kernel32/client/dllmain.c index 04c5cff7452..0ad734dc4af 100644 --- a/dll/win32/kernel32/client/dllmain.c +++ b/dll/win32/kernel32/client/dllmain.c @@ -62,7 +62,6 @@ WINAPI BasepInitConsole(VOID) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; BOOLEAN NotConsole = FALSE; PRTL_USER_PROCESS_PARAMETERS Parameters = NtCurrentPeb()->ProcessParameters; @@ -178,11 +177,10 @@ BasepInitConsole(VOID) * console message to the Base Server. When we finally have a Console * Server, this code should be changed to send connection data instead. */ - CsrRequest = MAKE_CSR_API(ALLOC_CONSOLE, CSR_CONSOLE); Request.Data.AllocConsoleRequest.CtrlDispatcher = ConsoleControlDispatcher; Status = CsrClientCallServer(&Request, NULL, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, ALLOC_CONSOLE), sizeof(CSR_API_MESSAGE)); if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { diff --git a/dll/win32/kernel32/client/dosdev.c b/dll/win32/kernel32/client/dosdev.c index 7bfb6cd8f9f..3da3ec83312 100644 --- a/dll/win32/kernel32/client/dosdev.c +++ b/dll/win32/kernel32/client/dosdev.c @@ -183,7 +183,7 @@ DefineDosDeviceW( Status = CsrClientCallServer(&Request, CaptureBuffer, - MAKE_CSR_API(DEFINE_DOS_DEVICE, CSR_CONSOLE), + CSR_CREATE_API_NUMBER(CSR_CONSOLE, DEFINE_DOS_DEVICE), sizeof(CSR_API_MESSAGE)); CsrFreeCaptureBuffer(CaptureBuffer); diff --git a/dll/win32/kernel32/client/file/console.c b/dll/win32/kernel32/client/file/console.c index de9208a9dd1..4c9044454ae 100644 --- a/dll/win32/kernel32/client/file/console.c +++ b/dll/win32/kernel32/client/file/console.c @@ -257,7 +257,6 @@ AddConsoleAliasW(LPCWSTR lpSource, LPCWSTR lpExeName) { PCSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; ULONG SourceLength; ULONG TargetLength = 0; @@ -292,10 +291,9 @@ AddConsoleAliasW(LPCWSTR lpSource, Request->Data.AddConsoleAlias.TargetLength = TargetLength; - CsrRequest = MAKE_CSR_API(ADD_CONSOLE_ALIAS, CSR_CONSOLE); Status = CsrClientCallServer(Request, NULL, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, ADD_CONSOLE_ALIAS), RequestLength); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request->Status)) @@ -336,7 +334,6 @@ DuplicateConsoleHandle(HANDLE hConsole, DWORD dwOptions) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; if (dwOptions & ~(DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS) @@ -347,7 +344,6 @@ DuplicateConsoleHandle(HANDLE hConsole, return INVALID_HANDLE_VALUE; } - CsrRequest = MAKE_CSR_API(DUPLICATE_HANDLE, CSR_NATIVE); Request.Data.DuplicateHandleRequest.Handle = hConsole; Request.Data.DuplicateHandleRequest.Access = dwDesiredAccess; Request.Data.DuplicateHandleRequest.Inheritable = bInheritHandle; @@ -355,7 +351,7 @@ DuplicateConsoleHandle(HANDLE hConsole, Status = CsrClientCallServer(&Request, NULL, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_NATIVE, DUPLICATE_HANDLE), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status=Request.Status)) { @@ -372,7 +368,6 @@ IntExpungeConsoleCommandHistory(LPCVOID lpExeName, BOOL bUnicode) { CSR_API_MESSAGE Request; PCSR_CAPTURE_BUFFER CaptureBuffer; - ULONG CsrRequest = MAKE_CSR_API(EXPUNGE_COMMAND_HISTORY, CSR_CONSOLE); NTSTATUS Status; if (lpExeName == NULL || !(bUnicode ? *(PWCHAR)lpExeName : *(PCHAR)lpExeName)) @@ -388,15 +383,23 @@ IntExpungeConsoleCommandHistory(LPCVOID lpExeName, BOOL bUnicode) SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } + IntCaptureMessageString(CaptureBuffer, lpExeName, bUnicode, &Request.Data.ExpungeCommandHistory.ExeName); - Status = CsrClientCallServer(&Request, CaptureBuffer, CsrRequest, sizeof(CSR_API_MESSAGE)); + + Status = CsrClientCallServer(&Request, + CaptureBuffer, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, EXPUNGE_COMMAND_HISTORY), + sizeof(CSR_API_MESSAGE)); + CsrFreeCaptureBuffer(CaptureBuffer); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); return FALSE; } + return TRUE; } @@ -433,7 +436,6 @@ GetConsoleAliasW(LPWSTR lpSource, { PCSR_API_MESSAGE Request; PCSR_CAPTURE_BUFFER CaptureBuffer; - ULONG CsrRequest; NTSTATUS Status; ULONG Size; ULONG ExeLength; @@ -449,8 +451,6 @@ GetConsoleAliasW(LPWSTR lpSource, return 0; } - CsrRequest = MAKE_CSR_API(GET_CONSOLE_ALIAS, CSR_CONSOLE); - ExeLength = wcslen(lpExeName) + 1; SourceLength = wcslen(lpSource) + 1; @@ -492,7 +492,7 @@ GetConsoleAliasW(LPWSTR lpSource, Status = CsrClientCallServer(Request, CaptureBuffer, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_ALIAS), sizeof(CSR_API_MESSAGE) + Size); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request->Status)) @@ -588,7 +588,6 @@ GetConsoleAliasExesW(LPWSTR lpExeNameBuffer, { CSR_API_MESSAGE Request; PCSR_CAPTURE_BUFFER CaptureBuffer; - ULONG CsrRequest; NTSTATUS Status; DPRINT("GetConsoleAliasExesW entered\n"); @@ -601,7 +600,6 @@ GetConsoleAliasExesW(LPWSTR lpExeNameBuffer, return 0; } - CsrRequest = MAKE_CSR_API(GET_CONSOLE_ALIASES_EXES, CSR_CONSOLE); CsrAllocateMessagePointer(CaptureBuffer, ExeNameBufferLength, (PVOID*)&Request.Data.GetConsoleAliasesExes.ExeNames); @@ -609,7 +607,7 @@ GetConsoleAliasExesW(LPWSTR lpExeNameBuffer, Status = CsrClientCallServer(&Request, CaptureBuffer, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_ALIASES_EXES), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) @@ -660,18 +658,15 @@ WINAPI GetConsoleAliasExesLengthW(VOID) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; DPRINT("GetConsoleAliasExesLengthW entered\n"); - CsrRequest = MAKE_CSR_API(GET_CONSOLE_ALIASES_EXES_LENGTH, CSR_CONSOLE); Request.Data.GetConsoleAliasesExesLength.Length = 0; - Status = CsrClientCallServer(&Request, NULL, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_ALIASES_EXES_LENGTH), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) @@ -713,7 +708,6 @@ GetConsoleAliasesW(LPWSTR AliasBuffer, LPWSTR ExeName) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; DWORD dwLength; @@ -723,14 +717,13 @@ GetConsoleAliasesW(LPWSTR AliasBuffer, if (!dwLength || dwLength > AliasBufferLength) return 0; - CsrRequest = MAKE_CSR_API(GET_ALL_CONSOLE_ALIASES, CSR_CONSOLE); Request.Data.GetAllConsoleAlias.AliasBuffer = AliasBuffer; Request.Data.GetAllConsoleAlias.AliasBufferLength = AliasBufferLength; Request.Data.GetAllConsoleAlias.lpExeName = ExeName; Status = CsrClientCallServer(&Request, NULL, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_ALL_CONSOLE_ALIASES), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) @@ -784,18 +777,16 @@ WINAPI GetConsoleAliasesLengthW(LPWSTR lpExeName) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; DPRINT("GetConsoleAliasesLengthW entered\n"); - CsrRequest = MAKE_CSR_API(GET_ALL_CONSOLE_ALIASES_LENGTH, CSR_CONSOLE); Request.Data.GetAllConsoleAliasesLength.lpExeName = lpExeName; Request.Data.GetAllConsoleAliasesLength.Length = 0; Status = CsrClientCallServer(&Request, NULL, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_ALL_CONSOLE_ALIASES_LENGTH), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) @@ -838,7 +829,6 @@ IntGetConsoleCommandHistory(LPVOID lpHistory, DWORD cbHistory, LPCVOID lpExeName { CSR_API_MESSAGE Request; PCSR_CAPTURE_BUFFER CaptureBuffer; - ULONG CsrRequest = MAKE_CSR_API(GET_COMMAND_HISTORY, CSR_CONSOLE); NTSTATUS Status; DWORD HistoryLength = cbHistory * (bUnicode ? 1 : sizeof(WCHAR)); @@ -856,13 +846,17 @@ IntGetConsoleCommandHistory(LPVOID lpHistory, DWORD cbHistory, LPCVOID lpExeName SetLastError(ERROR_NOT_ENOUGH_MEMORY); return 0; } + IntCaptureMessageString(CaptureBuffer, lpExeName, bUnicode, &Request.Data.GetCommandHistory.ExeName); Request.Data.GetCommandHistory.Length = HistoryLength; CsrAllocateMessagePointer(CaptureBuffer, HistoryLength, (PVOID*)&Request.Data.GetCommandHistory.History); - Status = CsrClientCallServer(&Request, CaptureBuffer, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + CaptureBuffer, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_COMMAND_HISTORY), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { CsrFreeCaptureBuffer(CaptureBuffer); @@ -885,6 +879,7 @@ IntGetConsoleCommandHistory(LPVOID lpHistory, DWORD cbHistory, LPCVOID lpExeName cbHistory, NULL, NULL); } + CsrFreeCaptureBuffer(CaptureBuffer); return Request.Data.GetCommandHistory.Length; } @@ -919,7 +914,6 @@ IntGetConsoleCommandHistoryLength(LPCVOID lpExeName, BOOL bUnicode) { CSR_API_MESSAGE Request; PCSR_CAPTURE_BUFFER CaptureBuffer; - ULONG CsrRequest = MAKE_CSR_API(GET_COMMAND_HISTORY_LENGTH, CSR_CONSOLE); NTSTATUS Status; if (lpExeName == NULL || !(bUnicode ? *(PWCHAR)lpExeName : *(PCHAR)lpExeName)) @@ -935,15 +929,23 @@ IntGetConsoleCommandHistoryLength(LPCVOID lpExeName, BOOL bUnicode) SetLastError(ERROR_NOT_ENOUGH_MEMORY); return 0; } + IntCaptureMessageString(CaptureBuffer, lpExeName, bUnicode, &Request.Data.GetCommandHistoryLength.ExeName); - Status = CsrClientCallServer(&Request, CaptureBuffer, CsrRequest, sizeof(CSR_API_MESSAGE)); + + Status = CsrClientCallServer(&Request, + CaptureBuffer, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_COMMAND_HISTORY_LENGTH), + sizeof(CSR_API_MESSAGE)); + CsrFreeCaptureBuffer(CaptureBuffer); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); return 0; } + return Request.Data.GetCommandHistoryLength.Length; } @@ -1029,16 +1031,14 @@ GetConsoleHardwareState(HANDLE hConsole, PDWORD State) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(SETGET_CONSOLE_HW_STATE, CSR_CONSOLE); Request.Data.ConsoleHardwareStateRequest.ConsoleHandle = hConsole; Request.Data.ConsoleHardwareStateRequest.SetGet = CONSOLE_HARDWARE_STATE_GET; Status = CsrClientCallServer(&Request, NULL, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SETGET_CONSOLE_HW_STATE), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { @@ -1059,14 +1059,11 @@ WINAPI GetConsoleInputWaitHandle(VOID) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(GET_INPUT_WAIT_HANDLE, CSR_CONSOLE); - Status = CsrClientCallServer(&Request, NULL, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_INPUT_WAIT_HANDLE), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { @@ -1136,11 +1133,11 @@ OpenConsoleW(LPCWSTR wsName, if (wsName && 0 == _wcsicmp(wsName, L"CONIN$")) { - CsrRequest = MAKE_CSR_API(GET_INPUT_HANDLE, CSR_NATIVE); + CsrRequest = CSR_CREATE_API_NUMBER(CSR_NATIVE, GET_INPUT_HANDLE); } else if (wsName && 0 == _wcsicmp(wsName, L"CONOUT$")) { - CsrRequest = MAKE_CSR_API(GET_OUTPUT_HANDLE, CSR_NATIVE); + CsrRequest = CSR_CREATE_API_NUMBER(CSR_NATIVE, GET_OUTPUT_HANDLE); } else { @@ -1239,17 +1236,15 @@ SetConsoleHardwareState(HANDLE hConsole, DWORD State) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(SETGET_CONSOLE_HW_STATE, CSR_CONSOLE); Request.Data.ConsoleHardwareStateRequest.ConsoleHandle = hConsole; Request.Data.ConsoleHardwareStateRequest.SetGet = CONSOLE_HARDWARE_STATE_SET; Request.Data.ConsoleHardwareStateRequest.State = State; Status = CsrClientCallServer(&Request, NULL, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SETGET_CONSOLE_HW_STATE), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { @@ -1311,7 +1306,6 @@ IntSetConsoleNumberOfCommands(DWORD dwNumCommands, { CSR_API_MESSAGE Request; PCSR_CAPTURE_BUFFER CaptureBuffer; - ULONG CsrRequest = MAKE_CSR_API(SET_HISTORY_NUMBER_COMMANDS, CSR_CONSOLE); NTSTATUS Status; if (lpExeName == NULL || !(bUnicode ? *(PWCHAR)lpExeName : *(PCHAR)lpExeName)) @@ -1327,16 +1321,24 @@ IntSetConsoleNumberOfCommands(DWORD dwNumCommands, SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } + IntCaptureMessageString(CaptureBuffer, lpExeName, bUnicode, &Request.Data.SetHistoryNumberCommands.ExeName); Request.Data.SetHistoryNumberCommands.NumCommands = dwNumCommands; - Status = CsrClientCallServer(&Request, CaptureBuffer, CsrRequest, sizeof(CSR_API_MESSAGE)); + + Status = CsrClientCallServer(&Request, + CaptureBuffer, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_HISTORY_NUMBER_COMMANDS), + sizeof(CSR_API_MESSAGE)); + CsrFreeCaptureBuffer(CaptureBuffer); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); return FALSE; } + return TRUE; } @@ -1407,15 +1409,13 @@ WINAPI VerifyConsoleIoHandle(HANDLE Handle) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(VERIFY_HANDLE, CSR_NATIVE); Request.Data.VerifyHandleRequest.Handle = Handle; Status = CsrClientCallServer(&Request, NULL, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_NATIVE, VERIFY_HANDLE), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status)) { @@ -1467,15 +1467,13 @@ WINAPI CloseConsoleHandle(HANDLE Handle) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(CLOSE_HANDLE, CSR_NATIVE); Request.Data.CloseHandleRequest.Handle = Handle; Status = CsrClientCallServer(&Request, NULL, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_NATIVE, CLOSE_HANDLE), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status)) { @@ -1592,7 +1590,7 @@ IntWriteConsole(HANDLE hConsoleOutput, return FALSE; } - CsrRequest = MAKE_CSR_API(WRITE_CONSOLE, CSR_CONSOLE); + CsrRequest = CSR_CREATE_API_NUMBER(CSR_CONSOLE, WRITE_CONSOLE); while (nNumberOfCharsToWrite > 0) { @@ -1694,8 +1692,8 @@ IntReadConsole(HANDLE hConsoleInput, BOOL bUnicode) { CSR_API_MESSAGE Request; + ULONG CsrRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; - ULONG CsrRequest = MAKE_CSR_API(READ_CONSOLE, CSR_CONSOLE); NTSTATUS Status = STATUS_SUCCESS; ULONG CharSize = (bUnicode ? sizeof(WCHAR) : sizeof(CHAR)); @@ -1725,6 +1723,8 @@ IntReadConsole(HANDLE hConsoleInput, Request.Data.ReadConsoleRequest.CtrlWakeupMask = pInputControl->dwCtrlWakeupMask; } + CsrRequest = CSR_CREATE_API_NUMBER(CSR_CONSOLE, READ_CONSOLE); + do { if (Status == STATUS_PENDING) @@ -1739,7 +1739,10 @@ IntReadConsole(HANDLE hConsoleInput, } } - Status = CsrClientCallServer(&Request, CaptureBuffer, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + CaptureBuffer, + CsrRequest, + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { DPRINT1("CSR returned error in ReadConsole\n"); @@ -1820,7 +1823,6 @@ WINAPI AllocConsole(VOID) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; HANDLE hStdError; STARTUPINFO si; @@ -1838,9 +1840,10 @@ AllocConsole(VOID) Request.Data.AllocConsoleRequest.ConsoleNeeded = TRUE; Request.Data.AllocConsoleRequest.ShowCmd = si.wShowWindow; - CsrRequest = MAKE_CSR_API(ALLOC_CONSOLE, CSR_CONSOLE); - - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, ALLOC_CONSOLE), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -1875,12 +1878,12 @@ FreeConsole(VOID) // but I just tried to reverse what AllocConsole() does... CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(FREE_CONSOLE, CSR_CONSOLE); - - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, FREE_CONSOLE), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -1903,13 +1906,14 @@ GetConsoleScreenBufferInfo(HANDLE hConsoleOutput, PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(SCREEN_BUFFER_INFO, CSR_CONSOLE); Request.Data.ScreenBufferInfoRequest.ConsoleHandle = hConsoleOutput; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SCREEN_BUFFER_INFO), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -1931,14 +1935,15 @@ SetConsoleCursorPosition(HANDLE hConsoleOutput, COORD dwCursorPosition) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(SET_CURSOR, CSR_CONSOLE); Request.Data.SetCursorRequest.ConsoleHandle = hConsoleOutput; Request.Data.SetCursorRequest.Position = dwCursorPosition; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_CURSOR), + sizeof(CSR_API_MESSAGE)); if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -1959,10 +1964,8 @@ IntFillConsoleOutputCharacter(HANDLE hConsoleOutput, BOOL bUnicode) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(FILL_OUTPUT, CSR_CONSOLE); Request.Data.FillOutputRequest.ConsoleHandle = hConsoleOutput; Request.Data.FillOutputRequest.Unicode = bUnicode; @@ -1976,7 +1979,7 @@ IntFillConsoleOutputCharacter(HANDLE hConsoleOutput, Status = CsrClientCallServer(&Request, NULL, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, FILL_OUTPUT), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) @@ -2046,7 +2049,6 @@ IntPeekConsoleInput(HANDLE hConsoleInput, BOOL bUnicode) { CSR_API_MESSAGE Request; - ULONG CsrRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; ULONG Size; @@ -2075,7 +2077,6 @@ IntPeekConsoleInput(HANDLE hConsoleInput, (PVOID*)&Request.Data.PeekConsoleInputRequest.InputRecord); /* Set up the data to send to the Console Server */ - CsrRequest = MAKE_CSR_API(PEEK_CONSOLE_INPUT, CSR_CONSOLE); Request.Data.PeekConsoleInputRequest.ConsoleHandle = hConsoleInput; Request.Data.PeekConsoleInputRequest.Unicode = bUnicode; Request.Data.PeekConsoleInputRequest.Length = nLength; @@ -2083,7 +2084,7 @@ IntPeekConsoleInput(HANDLE hConsoleInput, /* Call the server */ CsrClientCallServer(&Request, CaptureBuffer, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, PEEK_CONSOLE_INPUT), sizeof(CSR_API_MESSAGE)); DPRINT("Server returned: %x\n", Request.Status); @@ -2166,7 +2167,7 @@ IntReadConsoleInput(HANDLE hConsoleInput, ULONG Read; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(READ_INPUT, CSR_CONSOLE); + CsrRequest = CSR_CREATE_API_NUMBER(CSR_CONSOLE, READ_INPUT); Read = 0; while (nLength > 0) @@ -2280,7 +2281,6 @@ IntWriteConsoleInput(HANDLE hConsoleInput, BOOL bUnicode) { CSR_API_MESSAGE Request; - ULONG CsrRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; DWORD Size; @@ -2309,7 +2309,6 @@ IntWriteConsoleInput(HANDLE hConsoleInput, (PVOID*)&Request.Data.WriteConsoleInputRequest.InputRecord); /* Set up the data to send to the Console Server */ - CsrRequest = MAKE_CSR_API(WRITE_CONSOLE_INPUT, CSR_CONSOLE); Request.Data.WriteConsoleInputRequest.ConsoleHandle = hConsoleInput; Request.Data.WriteConsoleInputRequest.Unicode = bUnicode; Request.Data.WriteConsoleInputRequest.Length = nLength; @@ -2317,7 +2316,7 @@ IntWriteConsoleInput(HANDLE hConsoleInput, /* Call the server */ CsrClientCallServer(&Request, CaptureBuffer, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, WRITE_CONSOLE_INPUT), sizeof(CSR_API_MESSAGE)); DPRINT("Server returned: %x\n", Request.Status); @@ -2393,7 +2392,6 @@ IntReadConsoleOutput(HANDLE hConsoleOutput, BOOL bUnicode) { CSR_API_MESSAGE Request; - ULONG CsrRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; DWORD Size, SizeX, SizeY; @@ -2422,7 +2420,6 @@ IntReadConsoleOutput(HANDLE hConsoleOutput, (PVOID*)&Request.Data.ReadConsoleOutputRequest.CharInfo); /* Set up the data to send to the Console Server */ - CsrRequest = MAKE_CSR_API(READ_CONSOLE_OUTPUT, CSR_CONSOLE); Request.Data.ReadConsoleOutputRequest.ConsoleHandle = hConsoleOutput; Request.Data.ReadConsoleOutputRequest.Unicode = bUnicode; Request.Data.ReadConsoleOutputRequest.BufferSize = dwBufferSize; @@ -2432,7 +2429,7 @@ IntReadConsoleOutput(HANDLE hConsoleOutput, /* Call the server */ CsrClientCallServer(&Request, CaptureBuffer, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, READ_CONSOLE_OUTPUT), sizeof(CSR_API_MESSAGE)); DPRINT("Server returned: %x\n", Request.Status); @@ -2520,7 +2517,6 @@ IntWriteConsoleOutput(HANDLE hConsoleOutput, BOOL bUnicode) { CSR_API_MESSAGE Request; - ULONG CsrRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; ULONG Size; @@ -2546,7 +2542,6 @@ IntWriteConsoleOutput(HANDLE hConsoleOutput, RtlCopyMemory(Request.Data.WriteConsoleOutputRequest.CharInfo, lpBuffer, Size); /* Set up the data to send to the Console Server */ - CsrRequest = MAKE_CSR_API(WRITE_CONSOLE_OUTPUT, CSR_CONSOLE); Request.Data.WriteConsoleOutputRequest.ConsoleHandle = hConsoleOutput; Request.Data.WriteConsoleOutputRequest.Unicode = bUnicode; Request.Data.WriteConsoleOutputRequest.BufferSize = dwBufferSize; @@ -2556,7 +2551,7 @@ IntWriteConsoleOutput(HANDLE hConsoleOutput, /* Call the server */ CsrClientCallServer(&Request, CaptureBuffer, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, WRITE_CONSOLE_OUTPUT), sizeof(CSR_API_MESSAGE)); DPRINT("Server returned: %x\n", Request.Status); @@ -2651,7 +2646,7 @@ IntReadConsoleOutputCharacter(HANDLE hConsoleOutput, return FALSE; } - CsrRequest = MAKE_CSR_API(READ_CONSOLE_OUTPUT_CHAR, CSR_CONSOLE); + CsrRequest = CSR_CREATE_API_NUMBER(CSR_CONSOLE, READ_CONSOLE_OUTPUT_CHAR); Request->Data.ReadConsoleOutputCharRequest.ReadCoord = dwReadCoord; while (nLength > 0) @@ -2771,7 +2766,7 @@ ReadConsoleOutputAttribute(HANDLE hConsoleOutput, return FALSE; } - CsrRequest = MAKE_CSR_API(READ_CONSOLE_OUTPUT_ATTRIB, CSR_CONSOLE); + CsrRequest = CSR_CREATE_API_NUMBER(CSR_CONSOLE, READ_CONSOLE_OUTPUT_ATTRIB); while (nLength != 0) { @@ -2840,7 +2835,7 @@ IntWriteConsoleOutputCharacter(HANDLE hConsoleOutput, return FALSE; } - CsrRequest = MAKE_CSR_API(WRITE_CONSOLE_OUTPUT_CHAR, CSR_CONSOLE); + CsrRequest = CSR_CREATE_API_NUMBER(CSR_CONSOLE, WRITE_CONSOLE_OUTPUT_CHAR); Request->Data.WriteConsoleOutputCharRequest.Coord = dwWriteCoord; while (nLength > 0) @@ -2958,7 +2953,7 @@ WriteConsoleOutputAttribute(HANDLE hConsoleOutput, return FALSE; } - CsrRequest = MAKE_CSR_API(WRITE_CONSOLE_OUTPUT_ATTRIB, CSR_CONSOLE); + CsrRequest = CSR_CREATE_API_NUMBER(CSR_CONSOLE, WRITE_CONSOLE_OUTPUT_ATTRIB); Request->Data.WriteConsoleOutputAttribRequest.Coord = dwWriteCoord; if (lpNumberOfAttrsWritten) @@ -3007,16 +3002,17 @@ FillConsoleOutputAttribute(HANDLE hConsoleOutput, LPDWORD lpNumberOfAttrsWritten) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(FILL_OUTPUT_ATTRIB, CSR_CONSOLE); Request.Data.FillOutputAttribRequest.ConsoleHandle = hConsoleOutput; Request.Data.FillOutputAttribRequest.Attribute = (CHAR)wAttribute; Request.Data.FillOutputAttribRequest.Coord = dwWriteCoord; Request.Data.FillOutputAttribRequest.Length = (WORD)nLength; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, FILL_OUTPUT_ATTRIB), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError ( Status ); @@ -3041,18 +3037,20 @@ GetConsoleMode(HANDLE hConsoleHandle, LPDWORD lpMode) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(GET_CONSOLE_MODE, CSR_CONSOLE); Request.Data.GetConsoleModeRequest.ConsoleHandle = hConsoleHandle; - Status = CsrClientCallServer( &Request, NULL, CsrRequest, sizeof( CSR_API_MESSAGE ) ); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_MODE), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { - BaseSetLastNTError ( Status ); + BaseSetLastNTError(Status); return FALSE; } + *lpMode = Request.Data.GetConsoleModeRequest.ConsoleMode; return TRUE; @@ -3070,7 +3068,6 @@ GetNumberOfConsoleInputEvents(HANDLE hConsoleInput, LPDWORD lpNumberOfEvents) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; if (lpNumberOfEvents == NULL) @@ -3079,10 +3076,12 @@ GetNumberOfConsoleInputEvents(HANDLE hConsoleInput, return FALSE; } - CsrRequest = MAKE_CSR_API(GET_NUM_INPUT_EVENTS, CSR_CONSOLE); Request.Data.GetNumInputEventsRequest.ConsoleHandle = hConsoleInput; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_NUM_INPUT_EVENTS), + sizeof(CSR_API_MESSAGE)); if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -3122,7 +3121,6 @@ GetConsoleCursorInfo(HANDLE hConsoleOutput, PCONSOLE_CURSOR_INFO lpConsoleCursorInfo) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; if (!lpConsoleCursorInfo) @@ -3135,16 +3133,18 @@ GetConsoleCursorInfo(HANDLE hConsoleOutput, return FALSE; } - CsrRequest = MAKE_CSR_API(GET_CURSOR_INFO, CSR_CONSOLE); Request.Data.GetCursorInfoRequest.ConsoleHandle = hConsoleOutput; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); - + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CURSOR_INFO), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); return FALSE; } + *lpConsoleCursorInfo = Request.Data.GetCursorInfoRequest.Info; return TRUE; @@ -3177,17 +3177,18 @@ SetConsoleMode(HANDLE hConsoleHandle, DWORD dwMode) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(SET_CONSOLE_MODE, CSR_CONSOLE); Request.Data.SetConsoleModeRequest.ConsoleHandle = hConsoleHandle; Request.Data.SetConsoleModeRequest.Mode = dwMode; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_CONSOLE_MODE), + sizeof(CSR_API_MESSAGE)); if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { - BaseSetLastNTError ( Status ); + BaseSetLastNTError(Status); return FALSE; } @@ -3205,13 +3206,14 @@ WINAPI SetConsoleActiveScreenBuffer(HANDLE hConsoleOutput) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(SET_SCREEN_BUFFER, CSR_CONSOLE); Request.Data.SetScreenBufferRequest.OutputHandle = hConsoleOutput; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_SCREEN_BUFFER), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -3232,13 +3234,14 @@ WINAPI FlushConsoleInputBuffer(HANDLE hConsoleInput) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(FLUSH_INPUT_BUFFER, CSR_CONSOLE); Request.Data.FlushInputBufferRequest.ConsoleInput = hConsoleInput; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, FLUSH_INPUT_BUFFER), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -3260,14 +3263,15 @@ SetConsoleScreenBufferSize(HANDLE hConsoleOutput, COORD dwSize) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(SET_SCREEN_BUFFER_SIZE, CSR_CONSOLE); Request.Data.SetScreenBufferSize.OutputHandle = hConsoleOutput; Request.Data.SetScreenBufferSize.Size = dwSize; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_SCREEN_BUFFER_SIZE), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -3288,14 +3292,15 @@ SetConsoleCursorInfo(HANDLE hConsoleOutput, CONST CONSOLE_CURSOR_INFO *lpConsoleCursorInfo) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(SET_CURSOR_INFO, CSR_CONSOLE); Request.Data.SetCursorInfoRequest.ConsoleHandle = hConsoleOutput; Request.Data.SetCursorInfoRequest.Info = *lpConsoleCursorInfo; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_CURSOR_INFO), + sizeof(CSR_API_MESSAGE)); if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -3316,10 +3321,8 @@ IntScrollConsoleScreenBuffer(HANDLE hConsoleOutput, BOOL bUnicode) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(SCROLL_CONSOLE_SCREEN_BUFFER, CSR_CONSOLE); Request.Data.ScrollConsoleScreenBufferRequest.ConsoleHandle = hConsoleOutput; Request.Data.ScrollConsoleScreenBufferRequest.Unicode = bUnicode; Request.Data.ScrollConsoleScreenBufferRequest.ScrollRectangle = *lpScrollRectangle; @@ -3339,7 +3342,7 @@ IntScrollConsoleScreenBuffer(HANDLE hConsoleOutput, Status = CsrClientCallServer(&Request, NULL, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SCROLL_CONSOLE_SCREEN_BUFFER), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) @@ -3424,14 +3427,15 @@ SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(SET_ATTRIB, CSR_CONSOLE); Request.Data.SetAttribRequest.ConsoleHandle = hConsoleOutput; Request.Data.SetAttribRequest.Attrib = wAttributes; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_ATTRIB), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -3549,7 +3553,6 @@ GenerateConsoleCtrlEvent(DWORD dwCtrlEvent, DWORD dwProcessGroupId) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; if (dwCtrlEvent != CTRL_C_EVENT && dwCtrlEvent != CTRL_BREAK_EVENT) @@ -3558,13 +3561,12 @@ GenerateConsoleCtrlEvent(DWORD dwCtrlEvent, return FALSE; } - CsrRequest = MAKE_CSR_API(GENERATE_CTRL_EVENT, CSR_CONSOLE); Request.Data.GenerateCtrlEvent.Event = dwCtrlEvent; Request.Data.GenerateCtrlEvent.ProcessGroup = dwProcessGroupId; Status = CsrClientCallServer(&Request, NULL, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GENERATE_CTRL_EVENT), sizeof(CSR_API_MESSAGE)); if(!NT_SUCCESS(Status) || !(NT_SUCCESS(Status = Request.Status))) { @@ -3581,7 +3583,6 @@ IntGetConsoleTitle(LPVOID lpConsoleTitle, DWORD nSize, BOOL bUnicode) { CSR_API_MESSAGE Request; PCSR_CAPTURE_BUFFER CaptureBuffer; - ULONG CsrRequest = MAKE_CSR_API(GET_TITLE, CSR_CONSOLE); NTSTATUS Status; if (nSize == 0) @@ -3600,7 +3601,10 @@ IntGetConsoleTitle(LPVOID lpConsoleTitle, DWORD nSize, BOOL bUnicode) Request.Data.GetTitleRequest.Length, (PVOID*)&Request.Data.GetTitleRequest.Title); - Status = CsrClientCallServer(&Request, CaptureBuffer, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + CaptureBuffer, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_TITLE), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !(NT_SUCCESS(Status = Request.Status))) { CsrFreeCaptureBuffer(CaptureBuffer); @@ -3675,7 +3679,6 @@ SetConsoleTitleW(LPCWSTR lpConsoleTitle) { CSR_API_MESSAGE Request; PCSR_CAPTURE_BUFFER CaptureBuffer; - ULONG CsrRequest = MAKE_CSR_API(SET_TITLE, CSR_CONSOLE); NTSTATUS Status; Request.Data.SetTitleRequest.Length = wcslen(lpConsoleTitle) * sizeof(WCHAR); @@ -3693,8 +3696,13 @@ SetConsoleTitleW(LPCWSTR lpConsoleTitle) Request.Data.SetTitleRequest.Length, (PVOID*)&Request.Data.SetTitleRequest.Title); - Status = CsrClientCallServer(&Request, CaptureBuffer, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + CaptureBuffer, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_TITLE), + sizeof(CSR_API_MESSAGE)); + CsrFreeCaptureBuffer(CaptureBuffer); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -3745,7 +3753,6 @@ CreateConsoleScreenBuffer(DWORD dwDesiredAccess, LPVOID lpScreenBufferData) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; if (dwDesiredAccess & ~(GENERIC_READ | GENERIC_WRITE) @@ -3761,8 +3768,10 @@ CreateConsoleScreenBuffer(DWORD dwDesiredAccess, Request.Data.CreateScreenBufferRequest.Inheritable = lpSecurityAttributes ? lpSecurityAttributes->bInheritHandle : FALSE; - CsrRequest = MAKE_CSR_API(CREATE_SCREEN_BUFFER, CSR_CONSOLE); - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, CREATE_SCREEN_BUFFER), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -3782,11 +3791,12 @@ WINAPI GetConsoleCP(VOID) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(GET_CONSOLE_CP, CSR_CONSOLE); - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_CP), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError (Status); @@ -3807,13 +3817,14 @@ WINAPI SetConsoleCP(UINT wCodePageID) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(SET_CONSOLE_CP, CSR_CONSOLE); Request.Data.SetConsoleCodePage.CodePage = wCodePageID; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_CONSOLE_CP), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -3833,11 +3844,12 @@ WINAPI GetConsoleOutputCP(VOID) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(GET_CONSOLE_OUTPUT_CP, CSR_CONSOLE); - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_OUTPUT_CP), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError (Status); @@ -3858,12 +3870,14 @@ WINAPI SetConsoleOutputCP(UINT wCodePageID) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(SET_CONSOLE_OUTPUT_CP, CSR_CONSOLE); Request.Data.SetConsoleOutputCodePage.CodePage = wCodePageID; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_CONSOLE_OUTPUT_CP), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -3885,7 +3899,6 @@ GetConsoleProcessList(LPDWORD lpdwProcessList, { PCSR_CAPTURE_BUFFER CaptureBuffer; CSR_API_MESSAGE Request; - ULONG CsrRequest; ULONG nProcesses; NTSTATUS Status; @@ -3903,7 +3916,6 @@ GetConsoleProcessList(LPDWORD lpdwProcessList, return FALSE; } - CsrRequest = MAKE_CSR_API(GET_PROCESS_LIST, CSR_CONSOLE); Request.Data.GetProcessListRequest.nMaxIds = dwProcessCount; CsrAllocateMessagePointer(CaptureBuffer, dwProcessCount * sizeof(DWORD), @@ -3911,7 +3923,7 @@ GetConsoleProcessList(LPDWORD lpdwProcessList, Status = CsrClientCallServer(&Request, CaptureBuffer, - CsrRequest, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_PROCESS_LIST), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { @@ -3943,8 +3955,10 @@ WINAPI GetConsoleSelectionInfo(PCONSOLE_SELECTION_INFO lpConsoleSelectionInfo) { CSR_API_MESSAGE Request; - ULONG CsrRequest = MAKE_CSR_API(GET_CONSOLE_SELECTION_INFO, CSR_CONSOLE); - NTSTATUS Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + 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)) { BaseSetLastNTError(Status); @@ -3980,11 +3994,12 @@ WINAPI GetConsoleWindow(VOID) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(GET_CONSOLE_WINDOW, CSR_CONSOLE); - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_CONSOLE_WINDOW), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status ) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); @@ -4005,13 +4020,14 @@ WINAPI SetConsoleIcon(HICON hicon) { CSR_API_MESSAGE Request; - ULONG CsrRequest; NTSTATUS Status; - CsrRequest = MAKE_CSR_API(SET_CONSOLE_ICON, CSR_CONSOLE); Request.Data.SetConsoleIconRequest.WindowIcon = hicon; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, SET_CONSOLE_ICON), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); diff --git a/dll/win32/kernel32/client/file/deviceio.c b/dll/win32/kernel32/client/file/deviceio.c index caa331b1b73..28eab558ba1 100644 --- a/dll/win32/kernel32/client/file/deviceio.c +++ b/dll/win32/kernel32/client/file/deviceio.c @@ -31,7 +31,7 @@ NotifySoundSentry(VOID) { CsrClientCallServer(&ApiMessage, NULL, - MAKE_CSR_API(SOUND_SENTRY, CSR_NATIVE), + CSR_CREATE_API_NUMBER(CSR_NATIVE, SOUND_SENTRY), sizeof(CSR_API_MESSAGE)); } } diff --git a/dll/win32/kernel32/client/file/filename.c b/dll/win32/kernel32/client/file/filename.c index a1aa505e97c..6a3e2105444 100644 --- a/dll/win32/kernel32/client/file/filename.c +++ b/dll/win32/kernel32/client/file/filename.c @@ -158,7 +158,10 @@ GetTempFileNameW(IN LPCWSTR lpPathName, /* If user didn't gave any ID, ask Csrss to give one */ if (!uUnique) { - CsrClientCallServer(&ApiMessage, NULL, MAKE_CSR_API(GET_TEMP_FILE, CSR_NATIVE), sizeof(CSR_API_MESSAGE)); + CsrClientCallServer(&ApiMessage, + NULL, + CSR_CREATE_API_NUMBER(CSR_NATIVE, GET_TEMP_FILE), + sizeof(CSR_API_MESSAGE)); if (ApiMessage.Data.GetTempFile.UniqueID == 0) { Num++; diff --git a/dll/win32/kernel32/client/proc.c b/dll/win32/kernel32/client/proc.c index cbf5437ab81..601e6882099 100644 --- a/dll/win32/kernel32/client/proc.c +++ b/dll/win32/kernel32/client/proc.c @@ -508,7 +508,7 @@ BasepNotifyCsrOfThread(IN HANDLE ThreadHandle, /* Call CSR */ Status = CsrClientCallServer(&CsrRequest, NULL, - MAKE_CSR_API(Request, CSR_NATIVE), + CSR_CREATE_API_NUMBER(CSR_NATIVE, Request), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrRequest.Status)) { @@ -584,7 +584,7 @@ BasepCreateFirstThread(HANDLE ProcessHandle, /* Call CSR */ Status = CsrClientCallServer(&CsrRequest, NULL, - MAKE_CSR_API(Request, CSR_NATIVE), + CSR_CREATE_API_NUMBER(CSR_NATIVE, Request), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrRequest.Status)) { @@ -1182,7 +1182,7 @@ GetProcessShutdownParameters(OUT LPDWORD lpdwLevel, /* Ask CSRSS for shutdown information */ Status = CsrClientCallServer(&CsrRequest, NULL, - MAKE_CSR_API(GET_SHUTDOWN_PARAMETERS, CSR_NATIVE), + CSR_CREATE_API_NUMBER(CSR_NATIVE, GET_SHUTDOWN_PARAMETERS), sizeof(CSR_API_MESSAGE)); if (!(NT_SUCCESS(Status)) || !(NT_SUCCESS(CsrRequest.Status))) { @@ -1213,7 +1213,7 @@ SetProcessShutdownParameters(IN DWORD dwLevel, CsrRequest.Data.SetShutdownParametersRequest.Flags = dwFlags; Status = CsrClientCallServer(&CsrRequest, NULL, - MAKE_CSR_API(SET_SHUTDOWN_PARAMETERS, CSR_NATIVE), + CSR_CREATE_API_NUMBER(CSR_NATIVE, SET_SHUTDOWN_PARAMETERS), sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrRequest.Status)) { @@ -1760,7 +1760,7 @@ ExitProcess(IN UINT uExitCode) CsrRequest.Data.TerminateProcessRequest.uExitCode = uExitCode; CsrClientCallServer(&CsrRequest, NULL, - MAKE_CSR_API(TERMINATE_PROCESS, CSR_NATIVE), + CSR_CREATE_API_NUMBER(CSR_NATIVE, TERMINATE_PROCESS), sizeof(CSR_API_MESSAGE)); /* Now do it again */ diff --git a/dll/win32/kernel32/client/vdm.c b/dll/win32/kernel32/client/vdm.c index 2c122e011d8..166cd21f835 100644 --- a/dll/win32/kernel32/client/vdm.c +++ b/dll/win32/kernel32/client/vdm.c @@ -89,7 +89,6 @@ BaseUpdateVDMEntry(IN ULONG UpdateIndex, { NTSTATUS Status; CSR_API_MESSAGE Msg; - ULONG CsrRequest = MAKE_CSR_API(UPDATE_VDM_ENTRY, CSR_CONSOLE); /* Check what update is being sent */ switch (UpdateIndex) @@ -133,7 +132,10 @@ BaseUpdateVDMEntry(IN ULONG UpdateIndex, Msg.Data.UpdateVdmEntry.BinaryType = BinaryType; /* Send the message to CSRSS */ - Status = CsrClientCallServer(&Msg, NULL, CsrRequest, sizeof(Msg)); + Status = CsrClientCallServer(&Msg, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, UPDATE_VDM_ENTRY), + sizeof(Msg)); if (!(NT_SUCCESS(Status)) || !(NT_SUCCESS(Msg.Status))) { /* Handle failure */ @@ -160,7 +162,6 @@ BaseCheckForVDM(IN HANDLE ProcessHandle, NTSTATUS Status; EVENT_BASIC_INFORMATION EventBasicInfo; CSR_API_MESSAGE Msg; - ULONG CsrRequest = MAKE_CSR_API(GET_VDM_EXIT_CODE, CSR_CONSOLE); /* It's VDM if the process is actually a wait handle (an event) */ Status = NtQueryEvent(ProcessHandle, @@ -175,7 +176,10 @@ BaseCheckForVDM(IN HANDLE ProcessHandle, Msg.Data.GetVdmExitCode.hParent = ProcessHandle; /* Call CSRSS */ - Status = CsrClientCallServer(&Msg, NULL, CsrRequest, sizeof(Msg)); + Status = CsrClientCallServer(&Msg, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_VDM_EXIT_CODE), + sizeof(Msg)); if (!NT_SUCCESS(Status)) return FALSE; /* Get the exit code from the reply */ diff --git a/dll/win32/kernel32/client/vista.c b/dll/win32/kernel32/client/vista.c index aff5208f1a3..697207dabc9 100644 --- a/dll/win32/kernel32/client/vista.c +++ b/dll/win32/kernel32/client/vista.c @@ -319,22 +319,28 @@ WINAPI GetConsoleHistoryInfo(PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo) { CSR_API_MESSAGE Request; - ULONG CsrRequest = MAKE_CSR_API(GET_HISTORY_INFO, CSR_CONSOLE); NTSTATUS Status; + if (lpConsoleHistoryInfo->cbSize != sizeof(CONSOLE_HISTORY_INFO)) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_HISTORY_INFO), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); return FALSE; } + lpConsoleHistoryInfo->HistoryBufferSize = Request.Data.GetHistoryInfo.HistoryBufferSize; lpConsoleHistoryInfo->NumberOfHistoryBuffers = Request.Data.GetHistoryInfo.NumberOfHistoryBuffers; lpConsoleHistoryInfo->dwFlags = Request.Data.GetHistoryInfo.dwFlags; + return TRUE; } @@ -349,22 +355,28 @@ WINAPI SetConsoleHistoryInfo(IN PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo) { CSR_API_MESSAGE Request; - ULONG CsrRequest = MAKE_CSR_API(GET_HISTORY_INFO, CSR_CONSOLE); NTSTATUS Status; + if (lpConsoleHistoryInfo->cbSize != sizeof(CONSOLE_HISTORY_INFO)) { SetLastError(ERROR_INVALID_PARAMETER); return FALSE; } + Request.Data.SetHistoryInfo.HistoryBufferSize = lpConsoleHistoryInfo->HistoryBufferSize; Request.Data.SetHistoryInfo.NumberOfHistoryBuffers = lpConsoleHistoryInfo->NumberOfHistoryBuffers; Request.Data.SetHistoryInfo.dwFlags = lpConsoleHistoryInfo->dwFlags; - Status = CsrClientCallServer(&Request, NULL, CsrRequest, sizeof(CSR_API_MESSAGE)); + + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_CONSOLE, GET_HISTORY_INFO), + sizeof(CSR_API_MESSAGE)); if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { BaseSetLastNTError(Status); return FALSE; } + return TRUE; } diff --git a/dll/win32/kernel32/k32.h b/dll/win32/kernel32/k32.h index d791465e56f..997e0237d52 100644 --- a/dll/win32/kernel32/k32.h +++ b/dll/win32/kernel32/k32.h @@ -36,7 +36,8 @@ #include /* CSRSS Header */ -#include +#include +#include // FIXME: data header. /* C Headers */ #include diff --git a/include/ndk/umfuncs.h b/include/ndk/umfuncs.h index 16b8f4620fe..f8c86920ab9 100644 --- a/include/ndk/umfuncs.h +++ b/include/ndk/umfuncs.h @@ -25,103 +25,6 @@ Author: #include #include -// -// Don't force inclusion of csrss header, leave this opaque. -// -struct _CSR_API_MESSAGE; -struct _CSR_CAPTURE_BUFFER; - -// -// CSR Functions -// -PVOID -NTAPI -CsrAllocateCaptureBuffer( - ULONG ArgumentCount, - ULONG BufferSize -); - -ULONG -NTAPI -CsrAllocateMessagePointer( - struct _CSR_CAPTURE_BUFFER *CaptureBuffer, - ULONG MessageLength, - PVOID *CaptureData -); - -VOID -NTAPI -CsrCaptureMessageBuffer( - struct _CSR_CAPTURE_BUFFER *CaptureBuffer, - PVOID MessageString, - ULONG StringLength, - PVOID *CapturedData -); - -NTSTATUS -NTAPI -CsrClientConnectToServer( - PWSTR ObjectDirectory, - ULONG ServerId, - PVOID ConnectionInfo, - PULONG ConnectionInfoSize, - PBOOLEAN ServerToServerCall -); - -NTSTATUS -NTAPI -CsrClientCallServer( - struct _CSR_API_MESSAGE *Request, - struct _CSR_CAPTURE_BUFFER *CaptureBuffer OPTIONAL, - ULONG ApiNumber, - ULONG RequestLength -); - -NTSTATUS -NTAPI -CsrIdentifyAlertableThread( - VOID -); - -VOID -NTAPI -CsrFreeCaptureBuffer( - struct _CSR_CAPTURE_BUFFER *CaptureBuffer -); - -HANDLE -NTAPI -CsrGetProcessId( - VOID -); - -NTSTATUS -NTAPI -CsrNewThread(VOID); - -NTSTATUS -NTAPI -CsrSetPriorityClass( - HANDLE Process, - PULONG PriorityClass -); - -VOID -NTAPI -CsrProbeForRead( - IN PVOID Address, - IN ULONG Length, - IN ULONG Alignment -); - -VOID -NTAPI -CsrProbeForWrite( - IN PVOID Address, - IN ULONG Length, - IN ULONG Alignment -); - // // Debug Functions // diff --git a/include/ndk/umtypes.h b/include/ndk/umtypes.h index 6c5a331d75c..ff8af0eebce 100644 --- a/include/ndk/umtypes.h +++ b/include/ndk/umtypes.h @@ -105,13 +105,6 @@ Author: #define MAXUSHORT 0xffff #define MAXULONG 0xffffffff -// -// CSR Macros -// -#define CSR_MAKE_OPCODE(s,m) ((s) << 16) | (m) -#define CSR_API_ID_FROM_OPCODE(n) ((ULONG)((USHORT)(n))) -#define CSR_SERVER_ID_FROM_OPCODE(n) (ULONG)((n) >> 16) - // // Basic Types that aren't defined in User-Mode Headers // diff --git a/include/reactos/subsys/csrss/client.h b/include/reactos/subsys/csrss/client.h new file mode 100644 index 00000000000..251296ef332 --- /dev/null +++ b/include/reactos/subsys/csrss/client.h @@ -0,0 +1,100 @@ +/* + * PROJECT: ReactOS Native Headers + * FILE: include/subsys/csrss/client.h + * PURPOSE: Public Definitions for CSR Clients + * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) + * Hermes Belusca-Maito (hermes.belusca@sfr.fr) + */ + +#ifndef _CSRCLIENT_H +#define _CSRCLIENT_H + +#include "msg.h" + +/* +BOOLEAN +NTAPI +CsrCaptureArguments(IN PCSR_THREAD CsrThread, + IN PCSR_API_MESSAGE ApiMessage); + +VOID +NTAPI +CsrReleaseCapturedArguments(IN PCSR_API_MESSAGE ApiMessage); +*/ + +NTSTATUS +NTAPI +CsrClientConnectToServer(IN PWSTR ObjectDirectory, + IN ULONG ServerId, + IN PVOID ConnectionInfo, + IN OUT PULONG ConnectionInfoSize, + OUT PBOOLEAN ServerToServerCall); + +NTSTATUS +NTAPI +CsrClientCallServer(IN OUT PCSR_API_MESSAGE Request, + IN OUT PCSR_CAPTURE_BUFFER CaptureBuffer OPTIONAL, + IN ULONG ApiNumber, + IN ULONG RequestLength); + +PVOID +NTAPI +CsrAllocateCaptureBuffer(IN ULONG ArgumentCount, + IN ULONG BufferSize); + +VOID +NTAPI +CsrFreeCaptureBuffer(IN PCSR_CAPTURE_BUFFER CaptureBuffer); + +ULONG +NTAPI +CsrAllocateMessagePointer(IN OUT PCSR_CAPTURE_BUFFER CaptureBuffer, + IN ULONG MessageLength, + OUT PVOID* CaptureData); + +VOID +NTAPI +CsrCaptureMessageBuffer(IN OUT PCSR_CAPTURE_BUFFER CaptureBuffer, + IN PVOID MessageString, + IN ULONG StringLength, + OUT PVOID* CapturedData); + +BOOLEAN +NTAPI +CsrValidateMessageBuffer(IN PCSR_API_MESSAGE ApiMessage, + IN PVOID* Buffer, + IN ULONG ArgumentSize, + IN ULONG ArgumentCount); + +VOID +NTAPI +CsrProbeForRead(IN PVOID Address, + IN ULONG Length, + IN ULONG Alignment); + +VOID +NTAPI +CsrProbeForWrite(IN PVOID Address, + IN ULONG Length, + IN ULONG Alignment); + +NTSTATUS +NTAPI +CsrIdentifyAlertableThread(VOID); + +HANDLE +NTAPI +CsrGetProcessId(VOID); + +NTSTATUS +NTAPI +CsrNewThread(VOID); + +NTSTATUS +NTAPI +CsrSetPriorityClass(IN HANDLE Process, + IN OUT PULONG PriorityClass); + +#endif // _CSRCLIENT_H + +/* EOF */ diff --git a/include/reactos/subsys/csrss/csrcons.h b/include/reactos/subsys/csrss/csrcons.h new file mode 100644 index 00000000000..ce7e7d0e034 --- /dev/null +++ b/include/reactos/subsys/csrss/csrcons.h @@ -0,0 +1,392 @@ +/* + * CSRSS Console management structures. + */ + +#ifndef __CSRCONS_H__ +#define __CSRCONS_H__ + +#include + +typedef struct +{ + HANDLE ConsoleHandle; + BOOL Unicode; + ULONG NrCharactersToWrite; + ULONG NrCharactersWritten; + HANDLE UnpauseEvent; + BYTE Buffer[0]; +} CSRSS_WRITE_CONSOLE, *PCSRSS_WRITE_CONSOLE; + +typedef struct +{ + HANDLE ConsoleHandle; + BOOL Unicode; + WORD NrCharactersToRead; + WORD NrCharactersRead; + HANDLE EventHandle; + PVOID Buffer; + UNICODE_STRING ExeName; + DWORD CtrlWakeupMask; + DWORD ControlKeyState; +} CSRSS_READ_CONSOLE, *PCSRSS_READ_CONSOLE; + +typedef struct +{ + PCONTROLDISPATCHER CtrlDispatcher; + BOOLEAN ConsoleNeeded; + INT ShowCmd; + HANDLE Console; + HANDLE InputHandle; + HANDLE OutputHandle; +} CSRSS_ALLOC_CONSOLE, *PCSRSS_ALLOC_CONSOLE; + +typedef struct +{ + ULONG Dummy; +} CSRSS_FREE_CONSOLE, *PCSRSS_FREE_CONSOLE; + +typedef struct +{ + HANDLE ConsoleHandle; + CONSOLE_SCREEN_BUFFER_INFO Info; +} CSRSS_SCREEN_BUFFER_INFO, *PCSRSS_SCREEN_BUFFER_INFO; + +typedef struct +{ + HANDLE ConsoleHandle; + COORD Position; +} CSRSS_SET_CURSOR, *PCSRSS_SET_CURSOR; + +typedef struct +{ + HANDLE ConsoleHandle; + BOOL Unicode; + union + { + CHAR AsciiChar; + WCHAR UnicodeChar; + } Char; + COORD Position; + WORD Length; + ULONG NrCharactersWritten; +} CSRSS_FILL_OUTPUT, *PCSRSS_FILL_OUTPUT; + +typedef struct +{ + HANDLE ConsoleHandle; + CHAR Attribute; + COORD Coord; + WORD Length; +} CSRSS_FILL_OUTPUT_ATTRIB, *PCSRSS_FILL_OUTPUT_ATTRIB; + +typedef struct +{ + HANDLE ConsoleHandle; + BOOL Unicode; + INPUT_RECORD Input; + BOOL MoreEvents; + HANDLE Event; +} CSRSS_READ_INPUT, *PCSRSS_READ_INPUT; + +typedef struct +{ + HANDLE ConsoleHandle; + BOOL Unicode; + WORD Length; + COORD Coord; + COORD EndCoord; + ULONG NrCharactersWritten; + CHAR String[0]; +} CSRSS_WRITE_CONSOLE_OUTPUT_CHAR, *PCSRSS_WRITE_CONSOLE_OUTPUT_CHAR; + +typedef struct +{ + HANDLE ConsoleHandle; + WORD Length; + COORD Coord; + COORD EndCoord; + WORD Attribute[0]; +} CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB, *PCSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB; + +typedef struct +{ + HANDLE ConsoleHandle; + CONSOLE_CURSOR_INFO Info; +} CSRSS_GET_CURSOR_INFO, *PCSRSS_GET_CURSOR_INFO; + +typedef struct +{ + HANDLE ConsoleHandle; + CONSOLE_CURSOR_INFO Info; +} CSRSS_SET_CURSOR_INFO, *PCSRSS_SET_CURSOR_INFO; + +typedef struct +{ + HANDLE ConsoleHandle; + WORD Attrib; +} CSRSS_SET_ATTRIB, *PCSRSS_SET_ATTRIB; + +typedef struct +{ + HANDLE ConsoleHandle; + DWORD Mode; +} CSRSS_SET_CONSOLE_MODE, *PCSRSS_SET_CONSOLE_MODE; + +typedef struct +{ + HANDLE ConsoleHandle; + DWORD ConsoleMode; +} CSRSS_GET_CONSOLE_MODE, *PCSRSS_GET_CONSOLE_MODE; + +typedef struct +{ + DWORD Access; + DWORD ShareMode; + BOOL Inheritable; + HANDLE OutputHandle; /* handle to newly created screen buffer */ +} CSRSS_CREATE_SCREEN_BUFFER, *PCSRSS_CREATE_SCREEN_BUFFER; + +typedef struct +{ + HANDLE OutputHandle; /* handle to screen buffer to switch to */ +} CSRSS_SET_SCREEN_BUFFER, *PCSRSS_SET_SCREEN_BUFFER; + +typedef struct +{ + DWORD Length; + PWCHAR Title; +} CSRSS_SET_TITLE, *PCSRSS_SET_TITLE; + +typedef struct +{ + DWORD Length; + PWCHAR Title; +} CSRSS_GET_TITLE, *PCSRSS_GET_TITLE; + +typedef struct +{ + HANDLE ConsoleHandle; + BOOL Unicode; + COORD BufferSize; + COORD BufferCoord; + SMALL_RECT WriteRegion; + CHAR_INFO* CharInfo; +} CSRSS_WRITE_CONSOLE_OUTPUT, *PCSRSS_WRITE_CONSOLE_OUTPUT; + +typedef struct +{ + HANDLE ConsoleInput; +} CSRSS_FLUSH_INPUT_BUFFER, *PCSRSS_FLUSH_INPUT_BUFFER; + +typedef struct +{ + HANDLE ConsoleHandle; + BOOL Unicode; + SMALL_RECT ScrollRectangle; + BOOLEAN UseClipRectangle; + SMALL_RECT ClipRectangle; + COORD DestinationOrigin; + CHAR_INFO Fill; +} CSRSS_SCROLL_CONSOLE_SCREEN_BUFFER, *PCSRSS_SCROLL_CONSOLE_SCREEN_BUFFER; + +typedef struct +{ + HANDLE ConsoleHandle; + BOOL Unicode; + DWORD NumCharsToRead; + COORD ReadCoord; + COORD EndCoord; + DWORD CharsRead; + CHAR String[0]; +} CSRSS_READ_CONSOLE_OUTPUT_CHAR, *PCSRSS_READ_CONSOLE_OUTPUT_CHAR; + +typedef struct +{ + HANDLE ConsoleHandle; + DWORD NumAttrsToRead; + COORD ReadCoord; + COORD EndCoord; + WORD Attribute[0]; +} CSRSS_READ_CONSOLE_OUTPUT_ATTRIB, *PCSRSS_READ_CONSOLE_OUTPUT_ATTRIB; + + +typedef struct +{ + HANDLE ConsoleHandle; + BOOL Unicode; + DWORD Length; + INPUT_RECORD* InputRecord; +} CSRSS_PEEK_CONSOLE_INPUT, *PCSRSS_PEEK_CONSOLE_INPUT; + +typedef struct +{ + HANDLE ConsoleHandle; + BOOL Unicode; + COORD BufferSize; + COORD BufferCoord; + SMALL_RECT ReadRegion; + CHAR_INFO* CharInfo; +} CSRSS_READ_CONSOLE_OUTPUT, *PCSRSS_READ_CONSOLE_OUTPUT; + +typedef struct +{ + HANDLE ConsoleHandle; + BOOL Unicode; + DWORD Length; + INPUT_RECORD* InputRecord; +} CSRSS_WRITE_CONSOLE_INPUT, *PCSRSS_WRITE_CONSOLE_INPUT; + +typedef struct +{ + DWORD Access; + BOOL Inheritable; + HANDLE Handle; + DWORD ShareMode; +} CSRSS_GET_INPUT_HANDLE, *PCSRSS_GET_INPUT_HANDLE, + CSRSS_GET_OUTPUT_HANDLE, *PCSRSS_GET_OUTPUT_HANDLE; + + +#define CONSOLE_HARDWARE_STATE_GET 0 +#define CONSOLE_HARDWARE_STATE_SET 1 + +#define CONSOLE_HARDWARE_STATE_GDI_MANAGED 0 +#define CONSOLE_HARDWARE_STATE_DIRECT 1 + +typedef struct +{ + HANDLE ConsoleHandle; + DWORD SetGet; /* 0=get; 1=set */ + DWORD State; +} CSRSS_SETGET_CONSOLE_HW_STATE, *PCSRSS_SETGET_CONSOLE_HW_STATE; + +typedef struct +{ + HWND WindowHandle; +} CSRSS_GET_CONSOLE_WINDOW, *PCSRSS_GET_CONSOLE_WINDOW; + +typedef struct +{ + HICON WindowIcon; +} CSRSS_SET_CONSOLE_ICON, *PCSRSS_SET_CONSOLE_ICON; + +typedef struct +{ + ULONG SourceLength; + ULONG ExeLength; + ULONG TargetLength; +} CSRSS_ADD_CONSOLE_ALIAS, *PCSRSS_ADD_CONSOLE_ALIAS; + +typedef struct +{ + ULONG SourceLength; + ULONG ExeLength; + ULONG BytesWritten; + ULONG TargetBufferLength; + PVOID TargetBuffer; +} CSRSS_GET_CONSOLE_ALIAS, *PCSRSS_GET_CONSOLE_ALIAS; + +typedef struct +{ + LPWSTR lpExeName; + DWORD BytesWritten; + DWORD AliasBufferLength; + LPWSTR AliasBuffer; +} CSRSS_GET_ALL_CONSOLE_ALIASES, *PCSRSS_GET_ALL_CONSOLE_ALIAS; + +typedef struct +{ + LPWSTR lpExeName; + DWORD Length; +} CSRSS_GET_ALL_CONSOLE_ALIASES_LENGTH, *PCSRSS_GET_ALL_CONSOLE_ALIASES_LENGTH; + +typedef struct +{ + DWORD BytesWritten; + DWORD Length; + LPWSTR ExeNames; +} CSRSS_GET_CONSOLE_ALIASES_EXES, *PCSRSS_GET_CONSOLE_ALIASES_EXES; + +typedef struct +{ + DWORD Length; +} CSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH, *PCSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH; + +typedef struct +{ + DWORD Event; + DWORD ProcessGroup; +} CSRSS_GENERATE_CTRL_EVENT, *PCSRSS_GENERATE_CTRL_EVENT; + +typedef struct +{ + HANDLE ConsoleHandle; + DWORD NumInputEvents; +} CSRSS_GET_NUM_INPUT_EVENTS, *PCSRSS_GET_NUM_INPUT_EVENTS; + +typedef struct +{ + HANDLE OutputHandle; + COORD Size; +} CSRSS_SET_SCREEN_BUFFER_SIZE, *PCSRSS_SET_SCREEN_BUFFER_SIZE; + +typedef struct +{ + CONSOLE_SELECTION_INFO Info; +} CSRSS_GET_CONSOLE_SELECTION_INFO, *PCSRSS_GET_CONSOLE_SELECTION_INFO; + +typedef struct +{ + UNICODE_STRING ExeName; + DWORD Length; +} CSRSS_GET_COMMAND_HISTORY_LENGTH, *PCSRSS_GET_COMMAND_HISTORY_LENGTH; + +typedef struct +{ + UNICODE_STRING ExeName; + PWCHAR History; + DWORD Length; +} CSRSS_GET_COMMAND_HISTORY, *PCSRSS_GET_COMMAND_HISTORY; + +typedef struct +{ + UNICODE_STRING ExeName; +} CSRSS_EXPUNGE_COMMAND_HISTORY, *PCSRSS_EXPUNGE_COMMAND_HISTORY; + +typedef struct +{ + UNICODE_STRING ExeName; + DWORD NumCommands; +} CSRSS_SET_HISTORY_NUMBER_COMMANDS, *PCSRSS_SET_HISTORY_NUMBER_COMMANDS; + +typedef struct +{ + DWORD HistoryBufferSize; + DWORD NumberOfHistoryBuffers; + DWORD dwFlags; +} CSRSS_GET_HISTORY_INFO, *PCSRSS_GET_HISTORY_INFO, + CSRSS_SET_HISTORY_INFO, *PCSRSS_SET_HISTORY_INFO;; + + +typedef struct +{ + UINT CodePage; +} CSRSS_GET_CONSOLE_CP, *PCSRSS_GET_CONSOLE_CP; + +typedef struct +{ + UINT CodePage; +} CSRSS_SET_CONSOLE_CP, *PCSRSS_SET_CONSOLE_CP; + +typedef struct +{ + UINT CodePage; +} CSRSS_GET_CONSOLE_OUTPUT_CP, *PCSRSS_GET_CONSOLE_OUTPUT_CP; + +typedef struct +{ + UINT CodePage; +} CSRSS_SET_CONSOLE_OUTPUT_CP, *PCSRSS_SET_CONSOLE_OUTPUT_CP; + +#endif // __CSRCONS_H__ + +/* EOF */ diff --git a/include/reactos/subsys/csrss/csrss.h b/include/reactos/subsys/csrss/csrss.h index beb5780059b..06385623443 100644 --- a/include/reactos/subsys/csrss/csrss.h +++ b/include/reactos/subsys/csrss/csrss.h @@ -1,26 +1,14 @@ +/***************************** CSRSS Data ***********************************/ + #ifndef __INCLUDE_CSRSS_CSRSS_H #define __INCLUDE_CSRSS_CSRSS_H -#include - #define CSR_NATIVE 0x0000 #define CSR_CONSOLE 0x0001 #define CSR_GUI 0x0002 #define CONSOLE_INPUT_MODE_VALID (0x0f) #define CONSOLE_OUTPUT_MODE_VALID (0x03) -/* -typedef union _CSR_API_NUMBER -{ - WORD Index; // CSRSS API number - WORD Subsystem; // 0=NTDLL;1=KERNEL32;2=KERNEL32 -} CSR_API_NUMBER, *PCSR_API_NUMBER; -*/ - -typedef ULONG CSR_API_NUMBER; - -#define MAKE_CSR_API(Number, Server) \ - ((Server) << 16) + Number #define CSR_CSRSS_SECTION_SIZE (65536) @@ -90,149 +78,7 @@ typedef struct ULONG nProcessIdsTotal; } CSRSS_GET_PROCESS_LIST, *PCSRSS_GET_PROCESS_LIST; -typedef struct -{ - HANDLE ConsoleHandle; - BOOL Unicode; - ULONG NrCharactersToWrite; - ULONG NrCharactersWritten; - HANDLE UnpauseEvent; - BYTE Buffer[0]; -} CSRSS_WRITE_CONSOLE, *PCSRSS_WRITE_CONSOLE; - -typedef struct -{ - HANDLE ConsoleHandle; - BOOL Unicode; - WORD NrCharactersToRead; - WORD NrCharactersRead; - HANDLE EventHandle; - PVOID Buffer; - UNICODE_STRING ExeName; - DWORD CtrlWakeupMask; - DWORD ControlKeyState; -} CSRSS_READ_CONSOLE, *PCSRSS_READ_CONSOLE; - -typedef struct -{ - PCONTROLDISPATCHER CtrlDispatcher; - BOOLEAN ConsoleNeeded; - INT ShowCmd; - HANDLE Console; - HANDLE InputHandle; - HANDLE OutputHandle; -} CSRSS_ALLOC_CONSOLE, *PCSRSS_ALLOC_CONSOLE; - -typedef struct -{ - ULONG Dummy; -} CSRSS_FREE_CONSOLE, *PCSRSS_FREE_CONSOLE; - -typedef struct -{ - HANDLE ConsoleHandle; - CONSOLE_SCREEN_BUFFER_INFO Info; -} CSRSS_SCREEN_BUFFER_INFO, *PCSRSS_SCREEN_BUFFER_INFO; - -typedef struct -{ - HANDLE ConsoleHandle; - COORD Position; -} CSRSS_SET_CURSOR, *PCSRSS_SET_CURSOR; - -typedef struct -{ - HANDLE ConsoleHandle; - BOOL Unicode; - union - { - CHAR AsciiChar; - WCHAR UnicodeChar; - } Char; - COORD Position; - WORD Length; - ULONG NrCharactersWritten; -} CSRSS_FILL_OUTPUT, *PCSRSS_FILL_OUTPUT; - -typedef struct -{ - HANDLE ConsoleHandle; - CHAR Attribute; - COORD Coord; - WORD Length; -} CSRSS_FILL_OUTPUT_ATTRIB, *PCSRSS_FILL_OUTPUT_ATTRIB; - -typedef struct -{ - HANDLE ConsoleHandle; - BOOL Unicode; - INPUT_RECORD Input; - BOOL MoreEvents; - HANDLE Event; -} CSRSS_READ_INPUT, *PCSRSS_READ_INPUT; - -typedef struct -{ - HANDLE ConsoleHandle; - BOOL Unicode; - WORD Length; - COORD Coord; - COORD EndCoord; - ULONG NrCharactersWritten; - CHAR String[0]; -} CSRSS_WRITE_CONSOLE_OUTPUT_CHAR, *PCSRSS_WRITE_CONSOLE_OUTPUT_CHAR; - -typedef struct -{ - HANDLE ConsoleHandle; - WORD Length; - COORD Coord; - COORD EndCoord; - WORD Attribute[0]; -} CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB, *PCSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB; - -typedef struct -{ - HANDLE ConsoleHandle; - CONSOLE_CURSOR_INFO Info; -} CSRSS_GET_CURSOR_INFO, *PCSRSS_GET_CURSOR_INFO; - -typedef struct -{ - HANDLE ConsoleHandle; - CONSOLE_CURSOR_INFO Info; -} CSRSS_SET_CURSOR_INFO, *PCSRSS_SET_CURSOR_INFO; - -typedef struct -{ - HANDLE ConsoleHandle; - WORD Attrib; -} CSRSS_SET_ATTRIB, *PCSRSS_SET_ATTRIB; - -typedef struct -{ - HANDLE ConsoleHandle; - DWORD Mode; -} CSRSS_SET_CONSOLE_MODE, *PCSRSS_SET_CONSOLE_MODE; - -typedef struct -{ - HANDLE ConsoleHandle; - DWORD ConsoleMode; -} CSRSS_GET_CONSOLE_MODE, *PCSRSS_GET_CONSOLE_MODE; - -typedef struct -{ - DWORD Access; - DWORD ShareMode; - BOOL Inheritable; - HANDLE OutputHandle; /* handle to newly created screen buffer */ -} CSRSS_CREATE_SCREEN_BUFFER, *PCSRSS_CREATE_SCREEN_BUFFER; - -typedef struct -{ - HANDLE OutputHandle; /* handle to screen buffer to switch to */ -} CSRSS_SET_SCREEN_BUFFER, *PCSRSS_SET_SCREEN_BUFFER; +#include "csrcons.h" typedef struct { @@ -240,70 +86,6 @@ typedef struct CLIENT_ID Cid; } CSRSS_IDENTIFY_ALERTABLE_THREAD, *PCSRSS_IDENTIFY_ALERTABLE_THREAD; -typedef struct -{ - DWORD Length; - PWCHAR Title; -} CSRSS_SET_TITLE, *PCSRSS_SET_TITLE; - -typedef struct -{ - DWORD Length; - PWCHAR Title; -} CSRSS_GET_TITLE, *PCSRSS_GET_TITLE; - -typedef struct -{ - HANDLE ConsoleHandle; - BOOL Unicode; - COORD BufferSize; - COORD BufferCoord; - SMALL_RECT WriteRegion; - CHAR_INFO* CharInfo; -} CSRSS_WRITE_CONSOLE_OUTPUT, *PCSRSS_WRITE_CONSOLE_OUTPUT; - -typedef struct -{ - HANDLE ConsoleInput; -} CSRSS_FLUSH_INPUT_BUFFER, *PCSRSS_FLUSH_INPUT_BUFFER; - -typedef struct -{ - HANDLE ConsoleHandle; - BOOL Unicode; - SMALL_RECT ScrollRectangle; - BOOLEAN UseClipRectangle; - SMALL_RECT ClipRectangle; - COORD DestinationOrigin; - CHAR_INFO Fill; -} CSRSS_SCROLL_CONSOLE_SCREEN_BUFFER, *PCSRSS_SCROLL_CONSOLE_SCREEN_BUFFER; - -typedef struct -{ - HANDLE ConsoleHandle; - BOOL Unicode; - DWORD NumCharsToRead; - COORD ReadCoord; - COORD EndCoord; - DWORD CharsRead; - CHAR String[0]; -} CSRSS_READ_CONSOLE_OUTPUT_CHAR, *PCSRSS_READ_CONSOLE_OUTPUT_CHAR; - -typedef struct -{ - HANDLE ConsoleHandle; - DWORD NumAttrsToRead; - COORD ReadCoord; - COORD EndCoord; - WORD Attribute[0]; -} CSRSS_READ_CONSOLE_OUTPUT_ATTRIB, *PCSRSS_READ_CONSOLE_OUTPUT_ATTRIB; - -typedef struct -{ - HANDLE ConsoleHandle; - DWORD NumInputEvents; -} CSRSS_GET_NUM_INPUT_EVENTS, *PCSRSS_GET_NUM_INPUT_EVENTS; - typedef struct { HANDLE ProcessId; @@ -327,41 +109,6 @@ typedef struct DWORD Flags; } CSRSS_GET_SHUTDOWN_PARAMETERS, *PCSRSS_GET_SHUTDOWN_PARAMETERS; -typedef struct -{ - HANDLE ConsoleHandle; - BOOL Unicode; - DWORD Length; - INPUT_RECORD* InputRecord; -} CSRSS_PEEK_CONSOLE_INPUT, *PCSRSS_PEEK_CONSOLE_INPUT; - -typedef struct -{ - HANDLE ConsoleHandle; - BOOL Unicode; - COORD BufferSize; - COORD BufferCoord; - SMALL_RECT ReadRegion; - CHAR_INFO* CharInfo; -} CSRSS_READ_CONSOLE_OUTPUT, *PCSRSS_READ_CONSOLE_OUTPUT; - -typedef struct -{ - HANDLE ConsoleHandle; - BOOL Unicode; - DWORD Length; - INPUT_RECORD* InputRecord; -} CSRSS_WRITE_CONSOLE_INPUT, *PCSRSS_WRITE_CONSOLE_INPUT; - -typedef struct -{ - DWORD Access; - BOOL Inheritable; - HANDLE Handle; - DWORD ShareMode; -} CSRSS_GET_INPUT_HANDLE, *PCSRSS_GET_INPUT_HANDLE, - CSRSS_GET_OUTPUT_HANDLE, *PCSRSS_GET_OUTPUT_HANDLE; - typedef struct { HANDLE Handle; @@ -380,29 +127,6 @@ typedef struct DWORD Options; } CSRSS_DUPLICATE_HANDLE, *PCSRSS_DUPLICATE_HANDLE; -#define CONSOLE_HARDWARE_STATE_GET 0 -#define CONSOLE_HARDWARE_STATE_SET 1 - -#define CONSOLE_HARDWARE_STATE_GDI_MANAGED 0 -#define CONSOLE_HARDWARE_STATE_DIRECT 1 - -typedef struct -{ - HANDLE ConsoleHandle; - DWORD SetGet; /* 0=get; 1=set */ - DWORD State; -} CSRSS_SETGET_CONSOLE_HW_STATE, *PCSRSS_SETGET_CONSOLE_HW_STATE; - -typedef struct -{ - HWND WindowHandle; -} CSRSS_GET_CONSOLE_WINDOW, *PCSRSS_GET_CONSOLE_WINDOW; - -typedef struct -{ - HICON WindowIcon; -} CSRSS_SET_CONSOLE_ICON, *PCSRSS_SET_CONSOLE_ICON; - typedef struct { HDESK DesktopHandle; @@ -431,122 +155,11 @@ typedef struct BOOL Register; } CSRSS_REGISTER_LOGON_PROCESS, *PCSRSS_REGISTER_LOGON_PROCESS; -typedef struct -{ - UINT CodePage; -} CSRSS_GET_CONSOLE_CP, *PCSRSS_GET_CONSOLE_CP; - -typedef struct -{ - UINT CodePage; -} CSRSS_SET_CONSOLE_CP, *PCSRSS_SET_CONSOLE_CP; - -typedef struct -{ - UINT CodePage; -} CSRSS_GET_CONSOLE_OUTPUT_CP, *PCSRSS_GET_CONSOLE_OUTPUT_CP; - -typedef struct -{ - UINT CodePage; -} CSRSS_SET_CONSOLE_OUTPUT_CP, *PCSRSS_SET_CONSOLE_OUTPUT_CP; - typedef struct { HANDLE InputWaitHandle; } CSRSS_GET_INPUT_WAIT_HANDLE, *PCSRSS_GET_INPUT_WAIT_HANDLE; -typedef struct -{ - ULONG SourceLength; - ULONG ExeLength; - ULONG TargetLength; -} CSRSS_ADD_CONSOLE_ALIAS, *PCSRSS_ADD_CONSOLE_ALIAS; - -typedef struct -{ - ULONG SourceLength; - ULONG ExeLength; - ULONG BytesWritten; - ULONG TargetBufferLength; - PVOID TargetBuffer; -} CSRSS_GET_CONSOLE_ALIAS, *PCSRSS_GET_CONSOLE_ALIAS; - -typedef struct -{ - LPWSTR lpExeName; - DWORD BytesWritten; - DWORD AliasBufferLength; - LPWSTR AliasBuffer; -} CSRSS_GET_ALL_CONSOLE_ALIASES, *PCSRSS_GET_ALL_CONSOLE_ALIAS; - -typedef struct -{ - LPWSTR lpExeName; - DWORD Length; -} CSRSS_GET_ALL_CONSOLE_ALIASES_LENGTH, *PCSRSS_GET_ALL_CONSOLE_ALIASES_LENGTH; - -typedef struct -{ - DWORD BytesWritten; - DWORD Length; - LPWSTR ExeNames; -} CSRSS_GET_CONSOLE_ALIASES_EXES, *PCSRSS_GET_CONSOLE_ALIASES_EXES; - -typedef struct -{ - DWORD Length; -} CSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH, *PCSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH; - -typedef struct -{ - DWORD Event; - DWORD ProcessGroup; -} CSRSS_GENERATE_CTRL_EVENT, *PCSRSS_GENERATE_CTRL_EVENT; - -typedef struct -{ - HANDLE OutputHandle; - COORD Size; -} CSRSS_SET_SCREEN_BUFFER_SIZE, *PCSRSS_SET_SCREEN_BUFFER_SIZE; - -typedef struct -{ - CONSOLE_SELECTION_INFO Info; -} CSRSS_GET_CONSOLE_SELECTION_INFO, *PCSRSS_GET_CONSOLE_SELECTION_INFO; - -typedef struct -{ - UNICODE_STRING ExeName; - DWORD Length; -} CSRSS_GET_COMMAND_HISTORY_LENGTH, *PCSRSS_GET_COMMAND_HISTORY_LENGTH; - -typedef struct -{ - UNICODE_STRING ExeName; - PWCHAR History; - DWORD Length; -} CSRSS_GET_COMMAND_HISTORY, *PCSRSS_GET_COMMAND_HISTORY; - -typedef struct -{ - UNICODE_STRING ExeName; -} CSRSS_EXPUNGE_COMMAND_HISTORY, *PCSRSS_EXPUNGE_COMMAND_HISTORY; - -typedef struct -{ - UNICODE_STRING ExeName; - DWORD NumCommands; -} CSRSS_SET_HISTORY_NUMBER_COMMANDS, *PCSRSS_SET_HISTORY_NUMBER_COMMANDS; - -typedef struct -{ - DWORD HistoryBufferSize; - DWORD NumberOfHistoryBuffers; - DWORD dwFlags; -} CSRSS_GET_HISTORY_INFO, *PCSRSS_GET_HISTORY_INFO, - CSRSS_SET_HISTORY_INFO, *PCSRSS_SET_HISTORY_INFO;; - typedef struct { UINT UniqueID; @@ -621,174 +234,85 @@ typedef struct #define CSRSS_MAX_READ_CONSOLE_OUTPUT_CHAR (LPC_MAX_DATA_LENGTH - CSR_API_MESSAGE_HEADER_SIZE(CSRSS_READ_CONSOLE_OUTPUT_CHAR)) #define CSRSS_MAX_READ_CONSOLE_OUTPUT_ATTRIB (LPC_MAX_DATA_LENGTH - CSR_API_MESSAGE_HEADER_SIZE(CSRSS_READ_CONSOLE_OUTPUT_ATTRIB)) -#define CREATE_PROCESS (0x0) -#define TERMINATE_PROCESS (0x1) -#define WRITE_CONSOLE (0x2) -#define READ_CONSOLE (0x3) -#define ALLOC_CONSOLE (0x4) -#define FREE_CONSOLE (0x5) -#define CONNECT_PROCESS (0x6) -#define SCREEN_BUFFER_INFO (0x7) -#define SET_CURSOR (0x8) -#define FILL_OUTPUT (0x9) -#define READ_INPUT (0xA) -#define WRITE_CONSOLE_OUTPUT_CHAR (0xB) -#define WRITE_CONSOLE_OUTPUT_ATTRIB (0xC) -#define FILL_OUTPUT_ATTRIB (0xD) -#define GET_CURSOR_INFO (0xE) -#define SET_CURSOR_INFO (0xF) -#define SET_ATTRIB (0x10) -#define GET_CONSOLE_MODE (0x11) -#define SET_CONSOLE_MODE (0x12) -#define CREATE_SCREEN_BUFFER (0x13) -#define SET_SCREEN_BUFFER (0x14) -#define SET_TITLE (0x15) -#define GET_TITLE (0x16) -#define WRITE_CONSOLE_OUTPUT (0x17) -#define FLUSH_INPUT_BUFFER (0x18) -#define SCROLL_CONSOLE_SCREEN_BUFFER (0x19) -#define READ_CONSOLE_OUTPUT_CHAR (0x1A) -#define READ_CONSOLE_OUTPUT_ATTRIB (0x1B) -#define GET_NUM_INPUT_EVENTS (0x1C) -#define REGISTER_SERVICES_PROCESS (0x1D) -#define EXIT_REACTOS (0x1E) -#define GET_SHUTDOWN_PARAMETERS (0x1F) -#define SET_SHUTDOWN_PARAMETERS (0x20) -#define PEEK_CONSOLE_INPUT (0x21) -#define READ_CONSOLE_OUTPUT (0x22) -#define WRITE_CONSOLE_INPUT (0x23) -#define GET_INPUT_HANDLE (0x24) -#define GET_OUTPUT_HANDLE (0x25) -#define CLOSE_HANDLE (0x26) -#define VERIFY_HANDLE (0x27) -#define DUPLICATE_HANDLE (0x28) -#define SETGET_CONSOLE_HW_STATE (0x29) -#define GET_CONSOLE_WINDOW (0x2A) -#define CREATE_DESKTOP (0x2B) -#define SHOW_DESKTOP (0x2C) -#define HIDE_DESKTOP (0x2D) -#define SET_CONSOLE_ICON (0x2E) -#define SET_LOGON_NOTIFY_WINDOW (0x2F) -#define REGISTER_LOGON_PROCESS (0x30) -#define GET_CONSOLE_CP (0x31) -#define SET_CONSOLE_CP (0x32) -#define GET_CONSOLE_OUTPUT_CP (0x33) -#define SET_CONSOLE_OUTPUT_CP (0x34) -#define GET_INPUT_WAIT_HANDLE (0x35) -#define GET_PROCESS_LIST (0x36) -#define START_SCREEN_SAVER (0x37) -#define ADD_CONSOLE_ALIAS (0x38) -#define GET_CONSOLE_ALIAS (0x39) +#define CREATE_PROCESS (0x0) +#define TERMINATE_PROCESS (0x1) +#define WRITE_CONSOLE (0x2) +#define READ_CONSOLE (0x3) +#define ALLOC_CONSOLE (0x4) +#define FREE_CONSOLE (0x5) +#define CONNECT_PROCESS (0x6) +#define SCREEN_BUFFER_INFO (0x7) +#define SET_CURSOR (0x8) +#define FILL_OUTPUT (0x9) +#define READ_INPUT (0xA) +#define WRITE_CONSOLE_OUTPUT_CHAR (0xB) +#define WRITE_CONSOLE_OUTPUT_ATTRIB (0xC) +#define FILL_OUTPUT_ATTRIB (0xD) +#define GET_CURSOR_INFO (0xE) +#define SET_CURSOR_INFO (0xF) +#define SET_ATTRIB (0x10) +#define GET_CONSOLE_MODE (0x11) +#define SET_CONSOLE_MODE (0x12) +#define CREATE_SCREEN_BUFFER (0x13) +#define SET_SCREEN_BUFFER (0x14) +#define SET_TITLE (0x15) +#define GET_TITLE (0x16) +#define WRITE_CONSOLE_OUTPUT (0x17) +#define FLUSH_INPUT_BUFFER (0x18) +#define SCROLL_CONSOLE_SCREEN_BUFFER (0x19) +#define READ_CONSOLE_OUTPUT_CHAR (0x1A) +#define READ_CONSOLE_OUTPUT_ATTRIB (0x1B) +#define GET_NUM_INPUT_EVENTS (0x1C) +#define REGISTER_SERVICES_PROCESS (0x1D) +#define EXIT_REACTOS (0x1E) +#define GET_SHUTDOWN_PARAMETERS (0x1F) +#define SET_SHUTDOWN_PARAMETERS (0x20) +#define PEEK_CONSOLE_INPUT (0x21) +#define READ_CONSOLE_OUTPUT (0x22) +#define WRITE_CONSOLE_INPUT (0x23) +#define GET_INPUT_HANDLE (0x24) +#define GET_OUTPUT_HANDLE (0x25) +#define CLOSE_HANDLE (0x26) +#define VERIFY_HANDLE (0x27) +#define DUPLICATE_HANDLE (0x28) +#define SETGET_CONSOLE_HW_STATE (0x29) +#define GET_CONSOLE_WINDOW (0x2A) +#define CREATE_DESKTOP (0x2B) +#define SHOW_DESKTOP (0x2C) +#define HIDE_DESKTOP (0x2D) +#define SET_CONSOLE_ICON (0x2E) +#define SET_LOGON_NOTIFY_WINDOW (0x2F) +#define REGISTER_LOGON_PROCESS (0x30) +#define GET_CONSOLE_CP (0x31) +#define SET_CONSOLE_CP (0x32) +#define GET_CONSOLE_OUTPUT_CP (0x33) +#define SET_CONSOLE_OUTPUT_CP (0x34) +#define GET_INPUT_WAIT_HANDLE (0x35) +#define GET_PROCESS_LIST (0x36) +#define START_SCREEN_SAVER (0x37) +#define ADD_CONSOLE_ALIAS (0x38) +#define GET_CONSOLE_ALIAS (0x39) #define GET_ALL_CONSOLE_ALIASES (0x3A) -#define GET_ALL_CONSOLE_ALIASES_LENGTH (0x3B) -#define GET_CONSOLE_ALIASES_EXES (0x3C) +#define GET_ALL_CONSOLE_ALIASES_LENGTH (0x3B) +#define GET_CONSOLE_ALIASES_EXES (0x3C) #define GET_CONSOLE_ALIASES_EXES_LENGTH (0x3D) -#define GENERATE_CTRL_EVENT (0x3E) -#define CREATE_THREAD (0x3F) -#define SET_SCREEN_BUFFER_SIZE (0x40) -#define GET_CONSOLE_SELECTION_INFO (0x41) -#define GET_COMMAND_HISTORY_LENGTH (0x42) -#define GET_COMMAND_HISTORY (0x43) -#define EXPUNGE_COMMAND_HISTORY (0x44) -#define SET_HISTORY_NUMBER_COMMANDS (0x45) -#define GET_HISTORY_INFO (0x46) -#define SET_HISTORY_INFO (0x47) -#define GET_TEMP_FILE (0x48) -#define DEFINE_DOS_DEVICE (0X49) -#define SOUND_SENTRY (0x50) -#define UPDATE_VDM_ENTRY (0x51) -#define GET_VDM_EXIT_CODE (0x52) -#define CHECK_VDM (0x53) +#define GENERATE_CTRL_EVENT (0x3E) +#define CREATE_THREAD (0x3F) +#define SET_SCREEN_BUFFER_SIZE (0x40) +#define GET_CONSOLE_SELECTION_INFO (0x41) +#define GET_COMMAND_HISTORY_LENGTH (0x42) +#define GET_COMMAND_HISTORY (0x43) +#define EXPUNGE_COMMAND_HISTORY (0x44) +#define SET_HISTORY_NUMBER_COMMANDS (0x45) +#define GET_HISTORY_INFO (0x46) +#define SET_HISTORY_INFO (0x47) +#define GET_TEMP_FILE (0x48) +#define DEFINE_DOS_DEVICE (0x49) +#define SOUND_SENTRY (0x50) +#define UPDATE_VDM_ENTRY (0x51) +#define GET_VDM_EXIT_CODE (0x52) +#define CHECK_VDM (0x53) -/* Keep in sync with definition below. */ -#define CSRSS_HEADER_SIZE (sizeof(PORT_MESSAGE) + sizeof(ULONG) + sizeof(NTSTATUS)) - -typedef struct _CSR_API_MESSAGE -{ - PORT_MESSAGE Header; - PVOID CsrCaptureData; - ULONG Type; - NTSTATUS Status; - union - { - CSRSS_CREATE_PROCESS CreateProcessRequest; - CSRSS_CREATE_THREAD CreateThreadRequest; - CSRSS_TERMINATE_PROCESS TerminateProcessRequest; - CSRSS_CONNECT_PROCESS ConnectRequest; - CSRSS_WRITE_CONSOLE WriteConsoleRequest; - CSRSS_READ_CONSOLE ReadConsoleRequest; - CSRSS_ALLOC_CONSOLE AllocConsoleRequest; - CSRSS_SCREEN_BUFFER_INFO ScreenBufferInfoRequest; - CSRSS_SET_CURSOR SetCursorRequest; - CSRSS_FILL_OUTPUT FillOutputRequest; - CSRSS_READ_INPUT ReadInputRequest; - CSRSS_WRITE_CONSOLE_OUTPUT_CHAR WriteConsoleOutputCharRequest; - CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB WriteConsoleOutputAttribRequest; - CSRSS_FILL_OUTPUT_ATTRIB FillOutputAttribRequest; - CSRSS_SET_CURSOR_INFO SetCursorInfoRequest; - CSRSS_GET_CURSOR_INFO GetCursorInfoRequest; - CSRSS_SET_ATTRIB SetAttribRequest; - CSRSS_SET_CONSOLE_MODE SetConsoleModeRequest; - CSRSS_GET_CONSOLE_MODE GetConsoleModeRequest; - CSRSS_CREATE_SCREEN_BUFFER CreateScreenBufferRequest; - CSRSS_SET_SCREEN_BUFFER SetScreenBufferRequest; - CSRSS_SET_TITLE SetTitleRequest; - CSRSS_GET_TITLE GetTitleRequest; - CSRSS_WRITE_CONSOLE_OUTPUT WriteConsoleOutputRequest; - CSRSS_FLUSH_INPUT_BUFFER FlushInputBufferRequest; - CSRSS_SCROLL_CONSOLE_SCREEN_BUFFER ScrollConsoleScreenBufferRequest; - CSRSS_READ_CONSOLE_OUTPUT_CHAR ReadConsoleOutputCharRequest; - CSRSS_READ_CONSOLE_OUTPUT_ATTRIB ReadConsoleOutputAttribRequest; - CSRSS_GET_NUM_INPUT_EVENTS GetNumInputEventsRequest; - CSRSS_REGISTER_SERVICES_PROCESS RegisterServicesProcessRequest; - CSRSS_EXIT_REACTOS ExitReactosRequest; - CSRSS_SET_SHUTDOWN_PARAMETERS SetShutdownParametersRequest; - CSRSS_GET_SHUTDOWN_PARAMETERS GetShutdownParametersRequest; - CSRSS_PEEK_CONSOLE_INPUT PeekConsoleInputRequest; - CSRSS_READ_CONSOLE_OUTPUT ReadConsoleOutputRequest; - CSRSS_WRITE_CONSOLE_INPUT WriteConsoleInputRequest; - CSRSS_GET_INPUT_HANDLE GetInputHandleRequest; - CSRSS_GET_OUTPUT_HANDLE GetOutputHandleRequest; - CSRSS_CLOSE_HANDLE CloseHandleRequest; - CSRSS_VERIFY_HANDLE VerifyHandleRequest; - CSRSS_DUPLICATE_HANDLE DuplicateHandleRequest; - CSRSS_SETGET_CONSOLE_HW_STATE ConsoleHardwareStateRequest; - CSRSS_GET_CONSOLE_WINDOW GetConsoleWindowRequest; - CSRSS_CREATE_DESKTOP CreateDesktopRequest; - CSRSS_SHOW_DESKTOP ShowDesktopRequest; - CSRSS_HIDE_DESKTOP HideDesktopRequest; - CSRSS_SET_CONSOLE_ICON SetConsoleIconRequest; - CSRSS_SET_LOGON_NOTIFY_WINDOW SetLogonNotifyWindowRequest; - CSRSS_REGISTER_LOGON_PROCESS RegisterLogonProcessRequest; - CSRSS_GET_CONSOLE_CP GetConsoleCodePage; - CSRSS_SET_CONSOLE_CP SetConsoleCodePage; - CSRSS_GET_CONSOLE_OUTPUT_CP GetConsoleOutputCodePage; - CSRSS_SET_CONSOLE_OUTPUT_CP SetConsoleOutputCodePage; - CSRSS_GET_INPUT_WAIT_HANDLE GetConsoleInputWaitHandle; - CSRSS_GET_PROCESS_LIST GetProcessListRequest; - CSRSS_ADD_CONSOLE_ALIAS AddConsoleAlias; - CSRSS_GET_CONSOLE_ALIAS GetConsoleAlias; - CSRSS_GET_ALL_CONSOLE_ALIASES GetAllConsoleAlias; - CSRSS_GET_ALL_CONSOLE_ALIASES_LENGTH GetAllConsoleAliasesLength; - CSRSS_GET_CONSOLE_ALIASES_EXES GetConsoleAliasesExes; - CSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH GetConsoleAliasesExesLength; - CSRSS_GENERATE_CTRL_EVENT GenerateCtrlEvent; - CSRSS_SET_SCREEN_BUFFER_SIZE SetScreenBufferSize; - CSRSS_GET_CONSOLE_SELECTION_INFO GetConsoleSelectionInfo; - CSRSS_GET_COMMAND_HISTORY_LENGTH GetCommandHistoryLength; - CSRSS_GET_COMMAND_HISTORY GetCommandHistory; - CSRSS_EXPUNGE_COMMAND_HISTORY ExpungeCommandHistory; - CSRSS_SET_HISTORY_NUMBER_COMMANDS SetHistoryNumberCommands; - CSRSS_GET_HISTORY_INFO GetHistoryInfo; - CSRSS_SET_HISTORY_INFO SetHistoryInfo; - CSRSS_GET_TEMP_FILE GetTempFile; - CSRSS_DEFINE_DOS_DEVICE DefineDosDeviceRequest; - CSRSS_SOUND_SENTRY SoundSentryRequest; - CSRSS_UPDATE_VDM_ENTRY UpdateVdmEntry; - CSRSS_GET_VDM_EXIT_CODE GetVdmExitCode; - CSRSS_CHECK_VDM CheckVdm; - } Data; -} CSR_API_MESSAGE, *PCSR_API_MESSAGE; typedef struct _NLS_USER_INFO { @@ -827,7 +351,7 @@ typedef struct _NLS_USER_INFO WCHAR sLocaleName[85]; LCID UserLocaleId; LUID InteractiveUserLuid; - CHAR InteractiveUserSid[68]; // SECURITY_MAX_SID_SIZE to make ros happy + CHAR InteractiveUserSid[68]; // SECURITY_MAX_SID_SIZE to make ROS happy ULONG ulCacheUpdateCount; } NLS_USER_INFO, *PNLS_USER_INFO; @@ -860,8 +384,7 @@ typedef struct _BASE_STATIC_SERVER_DATA /* Types used in the new CSR. Temporarly here for proper compile of NTDLL */ -#define CSR_SRV_SERVER 0 - +// Not used at the moment... typedef enum _CSR_SRV_API_NUMBER { CsrpClientConnect, @@ -872,68 +395,4 @@ typedef enum _CSR_SRV_API_NUMBER CsrpMaxApiNumber } CSR_SRV_API_NUMBER, *PCSR_SRV_API_NUMBER; -#define CSR_MAKE_OPCODE(s,m) ((s) << 16) | (m) - -typedef struct _CSR_CONNECTION_INFO -{ - ULONG Version; - ULONG Unknown; - HANDLE ObjectDirectory; - PVOID SharedSectionBase; - PVOID SharedSectionHeap; - PVOID SharedSectionData; - ULONG DebugFlags; - ULONG Unknown2[3]; - HANDLE ProcessId; -} CSR_CONNECTION_INFO, *PCSR_CONNECTION_INFO; - -typedef struct _CSR_CLIENT_CONNECT -{ - ULONG ServerId; - PVOID ConnectionInfo; - ULONG ConnectionInfoSize; -} CSR_CLIENT_CONNECT, *PCSR_CLIENT_CONNECT; - -typedef struct _CSR_IDENTIFY_ALTERTABLE_THREAD -{ - CLIENT_ID Cid; -} CSR_IDENTIFY_ALTERTABLE_THREAD, *PCSR_IDENTIFY_ALTERTABLE_THREAD; - -typedef struct _CSR_SET_PRIORITY_CLASS -{ - HANDLE hProcess; - ULONG PriorityClass; -} CSR_SET_PRIORITY_CLASS, *PCSR_SET_PRIORITY_CLASS; - -typedef struct _CSR_API_MESSAGE2 -{ - PORT_MESSAGE Header; - union - { - CSR_CONNECTION_INFO ConnectionInfo; - struct - { - PVOID CsrCaptureData; - CSR_API_NUMBER Opcode; - ULONG Status; - ULONG Reserved; - union - { - CSR_CLIENT_CONNECT ClientConnect; - CSR_SET_PRIORITY_CLASS SetPriorityClass; - CSR_IDENTIFY_ALTERTABLE_THREAD IdentifyAlertableThread; - }; - }; - }; -} CSR_API_MESSAGE2, *PCSR_API_MESSAGE2; - -typedef struct _CSR_CAPTURE_BUFFER -{ - ULONG Size; - struct _CSR_CAPTURE_BUFFER *PreviousCaptureBuffer; - ULONG PointerCount; - ULONG_PTR BufferEnd; - ULONG_PTR PointerArray[1]; -} CSR_CAPTURE_BUFFER, *PCSR_CAPTURE_BUFFER; - #endif /* __INCLUDE_CSRSS_CSRSS_H */ diff --git a/include/reactos/subsys/csrss/msg.h b/include/reactos/subsys/csrss/msg.h new file mode 100644 index 00000000000..1f77ba35afe --- /dev/null +++ b/include/reactos/subsys/csrss/msg.h @@ -0,0 +1,219 @@ +/* + * PROJECT: ReactOS Native Headers + * FILE: include/subsys/csrss/msg.h + * PURPOSE: Public Definitions for communication + * between CSR Clients and Servers. + * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) + * Hermes Belusca-Maito (hermes.belusca@sfr.fr) + */ + +#ifndef _CSRMSG_H +#define _CSRMSG_H + +typedef struct _CSR_CONNECTION_INFO +{ + ULONG Version; + ULONG Unknown; + HANDLE ObjectDirectory; + PVOID SharedSectionBase; + PVOID SharedSectionHeap; + PVOID SharedSectionData; + ULONG DebugFlags; + ULONG Unknown2[3]; + HANDLE ProcessId; +} CSR_CONNECTION_INFO, *PCSR_CONNECTION_INFO; + +typedef struct _CSR_IDENTIFY_ALTERTABLE_THREAD +{ + CLIENT_ID Cid; +} CSR_IDENTIFY_ALTERTABLE_THREAD, *PCSR_IDENTIFY_ALTERTABLE_THREAD; + +typedef struct _CSR_SET_PRIORITY_CLASS +{ + HANDLE hProcess; + ULONG PriorityClass; +} CSR_SET_PRIORITY_CLASS, *PCSR_SET_PRIORITY_CLASS; + +typedef struct _CSR_CLIENT_CONNECT +{ + ULONG ServerId; + PVOID ConnectionInfo; + ULONG ConnectionInfoSize; +} CSR_CLIENT_CONNECT, *PCSR_CLIENT_CONNECT; + +typedef struct _CSR_CAPTURE_BUFFER +{ + ULONG Size; + struct _CSR_CAPTURE_BUFFER *PreviousCaptureBuffer; + ULONG PointerCount; + ULONG_PTR BufferEnd; + ULONG_PTR PointerArray[1]; +} CSR_CAPTURE_BUFFER, *PCSR_CAPTURE_BUFFER; + +/* +typedef union _CSR_API_NUMBER +{ + WORD Index; + WORD Subsystem; +} CSR_API_NUMBER, *PCSR_API_NUMBER; +*/ +typedef ULONG CSR_API_NUMBER; + +#include "csrss.h" // remove it when the data structures are not used anymore. + +/* Keep in sync with definition below. */ +// #define CSRSS_HEADER_SIZE (sizeof(PORT_MESSAGE) + sizeof(ULONG) + sizeof(NTSTATUS)) + +typedef struct _CSR_API_MESSAGE +{ + PORT_MESSAGE Header; + union + { + CSR_CONNECTION_INFO ConnectionInfo; + struct + { + PCSR_CAPTURE_BUFFER CsrCaptureData; + CSR_API_NUMBER ApiNumber; + ULONG Status; + ULONG Reserved; + union + { + CSR_CLIENT_CONNECT CsrClientConnect; + + CSR_SET_PRIORITY_CLASS SetPriorityClass; + CSR_IDENTIFY_ALTERTABLE_THREAD IdentifyAlertableThread; + + /*** Temporary ***/ +#if 1 + CSRSS_CREATE_PROCESS CreateProcessRequest; + CSRSS_CREATE_THREAD CreateThreadRequest; + CSRSS_TERMINATE_PROCESS TerminateProcessRequest; + CSRSS_CONNECT_PROCESS ConnectRequest; + CSRSS_WRITE_CONSOLE WriteConsoleRequest; + CSRSS_READ_CONSOLE ReadConsoleRequest; + CSRSS_ALLOC_CONSOLE AllocConsoleRequest; + CSRSS_SCREEN_BUFFER_INFO ScreenBufferInfoRequest; + CSRSS_SET_CURSOR SetCursorRequest; + CSRSS_FILL_OUTPUT FillOutputRequest; + CSRSS_READ_INPUT ReadInputRequest; + CSRSS_WRITE_CONSOLE_OUTPUT_CHAR WriteConsoleOutputCharRequest; + CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB WriteConsoleOutputAttribRequest; + CSRSS_FILL_OUTPUT_ATTRIB FillOutputAttribRequest; + CSRSS_SET_CURSOR_INFO SetCursorInfoRequest; + CSRSS_GET_CURSOR_INFO GetCursorInfoRequest; + CSRSS_SET_ATTRIB SetAttribRequest; + CSRSS_SET_CONSOLE_MODE SetConsoleModeRequest; + CSRSS_GET_CONSOLE_MODE GetConsoleModeRequest; + CSRSS_CREATE_SCREEN_BUFFER CreateScreenBufferRequest; + CSRSS_SET_SCREEN_BUFFER SetScreenBufferRequest; + CSRSS_SET_TITLE SetTitleRequest; + CSRSS_GET_TITLE GetTitleRequest; + CSRSS_WRITE_CONSOLE_OUTPUT WriteConsoleOutputRequest; + CSRSS_FLUSH_INPUT_BUFFER FlushInputBufferRequest; + CSRSS_SCROLL_CONSOLE_SCREEN_BUFFER ScrollConsoleScreenBufferRequest; + CSRSS_READ_CONSOLE_OUTPUT_CHAR ReadConsoleOutputCharRequest; + CSRSS_READ_CONSOLE_OUTPUT_ATTRIB ReadConsoleOutputAttribRequest; + CSRSS_GET_NUM_INPUT_EVENTS GetNumInputEventsRequest; + CSRSS_REGISTER_SERVICES_PROCESS RegisterServicesProcessRequest; + CSRSS_EXIT_REACTOS ExitReactosRequest; + CSRSS_SET_SHUTDOWN_PARAMETERS SetShutdownParametersRequest; + CSRSS_GET_SHUTDOWN_PARAMETERS GetShutdownParametersRequest; + CSRSS_PEEK_CONSOLE_INPUT PeekConsoleInputRequest; + CSRSS_READ_CONSOLE_OUTPUT ReadConsoleOutputRequest; + CSRSS_WRITE_CONSOLE_INPUT WriteConsoleInputRequest; + CSRSS_GET_INPUT_HANDLE GetInputHandleRequest; + CSRSS_GET_OUTPUT_HANDLE GetOutputHandleRequest; + CSRSS_CLOSE_HANDLE CloseHandleRequest; + CSRSS_VERIFY_HANDLE VerifyHandleRequest; + CSRSS_DUPLICATE_HANDLE DuplicateHandleRequest; + CSRSS_SETGET_CONSOLE_HW_STATE ConsoleHardwareStateRequest; + CSRSS_GET_CONSOLE_WINDOW GetConsoleWindowRequest; + CSRSS_CREATE_DESKTOP CreateDesktopRequest; + CSRSS_SHOW_DESKTOP ShowDesktopRequest; + CSRSS_HIDE_DESKTOP HideDesktopRequest; + CSRSS_SET_CONSOLE_ICON SetConsoleIconRequest; + CSRSS_SET_LOGON_NOTIFY_WINDOW SetLogonNotifyWindowRequest; + CSRSS_REGISTER_LOGON_PROCESS RegisterLogonProcessRequest; + CSRSS_GET_CONSOLE_CP GetConsoleCodePage; + CSRSS_SET_CONSOLE_CP SetConsoleCodePage; + CSRSS_GET_CONSOLE_OUTPUT_CP GetConsoleOutputCodePage; + CSRSS_SET_CONSOLE_OUTPUT_CP SetConsoleOutputCodePage; + CSRSS_GET_INPUT_WAIT_HANDLE GetConsoleInputWaitHandle; + CSRSS_GET_PROCESS_LIST GetProcessListRequest; + CSRSS_ADD_CONSOLE_ALIAS AddConsoleAlias; + CSRSS_GET_CONSOLE_ALIAS GetConsoleAlias; + CSRSS_GET_ALL_CONSOLE_ALIASES GetAllConsoleAlias; + CSRSS_GET_ALL_CONSOLE_ALIASES_LENGTH GetAllConsoleAliasesLength; + CSRSS_GET_CONSOLE_ALIASES_EXES GetConsoleAliasesExes; + CSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH GetConsoleAliasesExesLength; + CSRSS_GENERATE_CTRL_EVENT GenerateCtrlEvent; + CSRSS_SET_SCREEN_BUFFER_SIZE SetScreenBufferSize; + CSRSS_GET_CONSOLE_SELECTION_INFO GetConsoleSelectionInfo; + CSRSS_GET_COMMAND_HISTORY_LENGTH GetCommandHistoryLength; + CSRSS_GET_COMMAND_HISTORY GetCommandHistory; + CSRSS_EXPUNGE_COMMAND_HISTORY ExpungeCommandHistory; + CSRSS_SET_HISTORY_NUMBER_COMMANDS SetHistoryNumberCommands; + CSRSS_GET_HISTORY_INFO GetHistoryInfo; + CSRSS_SET_HISTORY_INFO SetHistoryInfo; + CSRSS_GET_TEMP_FILE GetTempFile; + CSRSS_DEFINE_DOS_DEVICE DefineDosDeviceRequest; + CSRSS_SOUND_SENTRY SoundSentryRequest; + CSRSS_UPDATE_VDM_ENTRY UpdateVdmEntry; + CSRSS_GET_VDM_EXIT_CODE GetVdmExitCode; + CSRSS_CHECK_VDM CheckVdm; +#endif + /*****************/ + } Data; + }; + }; +} CSR_API_MESSAGE, *PCSR_API_MESSAGE; + +/*** old *** +typedef struct _CSR_API_MESSAGE +{ + PORT_MESSAGE Header; + PVOID CsrCaptureData; + ULONG Type; + NTSTATUS Status; + union + { + CSRSS_CREATE_PROCESS CreateProcessRequest; + CSRSS_CREATE_THREAD CreateThreadRequest; + CSRSS_TERMINATE_PROCESS TerminateProcessRequest; + CSRSS_CONNECT_PROCESS ConnectRequest; + + . . . . . . . . . . . . . . . + + CSRSS_GET_VDM_EXIT_CODE GetVdmExitCode; + CSRSS_CHECK_VDM CheckVdm; + } Data; +} CSR_API_MESSAGE, *PCSR_API_MESSAGE; + +***/ + + + + +#define CSR_PORT_NAME L"ApiPort" + +/**** move these defines elsewhere ****/ + +#define CSR_SRV_SERVER 0 +#define CSR_SERVER_DLL_MAX 4 + +/**************************************/ + + + +#define CSR_CREATE_API_NUMBER(ServerId, ApiId) \ + (CSR_API_NUMBER)(((ServerId) << 16) | (ApiId)) + +#define CSR_API_NUMBER_TO_SERVER_ID(ApiNumber) \ + (ULONG)((ULONG)(ApiNumber) >> 16) + +#define CSR_API_NUMBER_TO_API_ID(ApiNumber) \ + (ULONG)((ULONG)(ApiNumber) & 0xFFFF) + +#endif // _CSRMSG_H + +/* EOF */ diff --git a/include/reactos/subsys/csr/server.h b/include/reactos/subsys/csrss/server.h similarity index 62% rename from include/reactos/subsys/csr/server.h rename to include/reactos/subsys/csrss/server.h index db3a506e657..e5d1280deb8 100644 --- a/include/reactos/subsys/csr/server.h +++ b/include/reactos/subsys/csrss/server.h @@ -1,9 +1,11 @@ /* * PROJECT: ReactOS Native Headers - * FILE: include/subsys/csr/server.h + * FILE: include/subsys/csrss/server.h * PURPOSE: Public Definitions for CSR Servers - * PROGRAMMER: Alex Ionescu (alex@relsoft.net) + * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) + * Hermes Belusca-Maito (hermes.belusca@sfr.fr) */ + #ifndef _CSRSERVER_H #define _CSRSERVER_H @@ -12,9 +14,10 @@ #pragma warning (disable:4201) #endif -/* DEPENDENCIES **************************************************************/ +#include "msg.h" /* TYPES **********************************************************************/ + typedef struct _CSR_NT_SESSION { ULONG ReferenceCount; @@ -22,6 +25,20 @@ typedef struct _CSR_NT_SESSION ULONG SessionId; } CSR_NT_SESSION, *PCSR_NT_SESSION; +/*** old thingie, remove it later... (put it in winsrv -- console) ***/ +typedef struct _CSRSS_CON_PROCESS_DATA +{ + HANDLE ConsoleEvent; + struct tagCSRSS_CONSOLE *Console; + struct tagCSRSS_CONSOLE *ParentConsole; + BOOL bInheritHandles; + RTL_CRITICAL_SECTION HandleTableLock; + ULONG HandleTableSize; + struct _CSRSS_HANDLE *HandleTable; + PCONTROLDISPATCHER CtrlDispatcher; + LIST_ENTRY ConsoleLink; +} CSRSS_CON_PROCESS_DATA, *PCSRSS_CON_PROCESS_DATA; +/*********************************************************************/ typedef struct _CSR_PROCESS { CLIENT_ID ClientId; @@ -47,7 +64,8 @@ typedef struct _CSR_PROCESS ULONG Reserved; ULONG ShutdownLevel; ULONG ShutdownFlags; - PVOID ServerData[ANYSIZE_ARRAY]; +// PVOID ServerData[ANYSIZE_ARRAY]; + CSRSS_CON_PROCESS_DATA; //// FIXME: Remove it after we activate the previous member. } CSR_PROCESS, *PCSR_PROCESS; typedef struct _CSR_THREAD @@ -64,33 +82,36 @@ typedef struct _CSR_THREAD ULONG ImpersonationCount; } CSR_THREAD, *PCSR_THREAD; -/* ENUMERATIONS **************************************************************/ -#define CSR_SRV_SERVER 0 +#define CsrGetClientThread() \ + ((PCSR_THREAD)(NtCurrentTeb()->CsrClientThread)) + + +/* ENUMERATIONS ***************************************************************/ typedef enum _CSR_PROCESS_FLAGS { - CsrProcessTerminating = 0x1, - CsrProcessSkipShutdown = 0x2, - CsrProcessNormalPriority = 0x10, - CsrProcessIdlePriority = 0x20, - CsrProcessHighPriority = 0x40, - CsrProcessRealtimePriority = 0x80, - CsrProcessCreateNewGroup = 0x100, - CsrProcessTerminated = 0x200, + CsrProcessTerminating = 0x1, + CsrProcessSkipShutdown = 0x2, + CsrProcessNormalPriority = 0x10, + CsrProcessIdlePriority = 0x20, + CsrProcessHighPriority = 0x40, + CsrProcessRealtimePriority = 0x80, + CsrProcessCreateNewGroup = 0x100, + CsrProcessTerminated = 0x200, CsrProcessLastThreadTerminated = 0x400, - CsrProcessIsConsoleApp = 0x800 + CsrProcessIsConsoleApp = 0x800 } CSR_PROCESS_FLAGS, *PCSR_PROCESS_FLAGS; #define CsrProcessPriorityFlags (CsrProcessNormalPriority | \ - CsrProcessIdlePriority | \ - CsrProcessHighPriority | \ + CsrProcessIdlePriority | \ + CsrProcessHighPriority | \ CsrProcessRealtimePriority) typedef enum _CSR_THREAD_FLAGS { - CsrThreadAltertable = 0x1, - CsrThreadInTermination = 0x2, - CsrThreadTerminated = 0x4, + CsrThreadAltertable = 0x1, + CsrThreadInTermination = 0x2, + CsrThreadTerminated = 0x4, CsrThreadIsServerThread = 0x10 } CSR_THREAD_FLAGS, *PCSR_THREAD_FLAGS; @@ -104,7 +125,7 @@ typedef enum _SHUTDOWN_RESULT typedef enum _CSR_SHUTDOWN_FLAGS { CsrShutdownSystem = 4, - CsrShutdownOther = 8 + CsrShutdownOther = 8 } CSR_SHUTDOWN_FLAGS, *PCSR_SHUTDOWN_FLAGS; typedef enum _CSR_DEBUG_FLAGS @@ -113,7 +134,48 @@ typedef enum _CSR_DEBUG_FLAGS CsrDebugProcessChildren = 2 } CSR_PROCESS_DEBUG_FLAGS, *PCSR_PROCESS_DEBUG_FLAGS; -/* FUNCTION TYPES ************************************************************/ + +/* + * Wait block + */ +typedef +BOOLEAN +(*CSR_WAIT_FUNCTION)( + IN PLIST_ENTRY WaitList, + IN PCSR_THREAD WaitThread, + IN PCSR_API_MESSAGE WaitApiMessage, + IN PVOID WaitContext, + IN PVOID WaitArgument1, + IN PVOID WaitArgument2, + IN ULONG WaitFlags +); + +typedef struct _CSR_WAIT_BLOCK +{ + ULONG Size; + LIST_ENTRY WaitList; + LIST_ENTRY UserWaitList; + PVOID WaitContext; + PCSR_THREAD WaitThread; + CSR_WAIT_FUNCTION WaitFunction; + CSR_API_MESSAGE WaitApiMessage; +} CSR_WAIT_BLOCK, *PCSR_WAIT_BLOCK; + + +/* + * Server DLL structure + */ +typedef +NTSTATUS +(NTAPI *PCSR_API_ROUTINE)( + IN OUT PCSR_API_MESSAGE ApiMessage, + OUT PULONG Reply +); + +#define CSR_API(n) NTSTATUS NTAPI n ( \ + IN OUT PCSR_API_MESSAGE ApiMessage, \ + OUT PULONG Reply) + typedef NTSTATUS (NTAPI *PCSR_CONNECT_CALLBACK)( @@ -148,69 +210,6 @@ ULONG IN BOOLEAN FirstPhase ); - -/* FIXME: Put into public NDK Header */ -typedef ULONG CSR_API_NUMBER; - -#define CSR_MAKE_OPCODE(s,m) ((s) << 16) | (m) -#define CSR_API_ID_FROM_OPCODE(n) ((ULONG)((USHORT)(n))) -#define CSR_SERVER_ID_FROM_OPCODE(n) (ULONG)((n) >> 16) - -typedef struct _CSR_CONNECTION_INFO -{ - ULONG Unknown[2]; - HANDLE ObjectDirectory; - PVOID SharedSectionBase; - PVOID SharedSectionHeap; - PVOID SharedSectionData; - ULONG DebugFlags; - ULONG Unknown2[3]; - HANDLE ProcessId; -} CSR_CONNECTION_INFO, *PCSR_CONNECTION_INFO; - -typedef struct _CSR_CLIENT_CONNECT -{ - ULONG ServerId; - PVOID ConnectionInfo; - ULONG ConnectionInfoSize; -} CSR_CLIENT_CONNECT, *PCSR_CLIENT_CONNECT; - -typedef struct _CSR_API_MESSAGE -{ - PORT_MESSAGE Header; - union - { - CSR_CONNECTION_INFO ConnectionInfo; - struct - { - PVOID CsrCaptureData; - CSR_API_NUMBER Opcode; - ULONG Status; - ULONG Reserved; - union - { - CSR_CLIENT_CONNECT CsrClientConnect; - }; - }; - }; -} CSR_API_MESSAGE, *PCSR_API_MESSAGE; - -typedef struct _CSR_CAPTURE_BUFFER -{ - ULONG Size; - struct _CSR_CAPTURE_BUFFER *PreviousCaptureBuffer; - ULONG PointerCount; - ULONG_PTR BufferEnd; -} CSR_CAPTURE_BUFFER, *PCSR_CAPTURE_BUFFER; - -/* Private data resumes here */ -typedef -NTSTATUS -(NTAPI *PCSR_API_ROUTINE)( - IN OUT PCSR_API_MESSAGE ApiMessage, - IN OUT PULONG Reply -); - typedef struct _CSR_SERVER_DLL { ULONG Length; @@ -234,44 +233,78 @@ typedef struct _CSR_SERVER_DLL ULONG Unknown2[3]; } CSR_SERVER_DLL, *PCSR_SERVER_DLL; + +/* FUNCTION TYPES *************************************************************/ + typedef NTSTATUS -(NTAPI *PCSR_SERVER_DLL_INIT_CALLBACK)(IN PCSR_SERVER_DLL ServerDll); +(NTAPI *PCSR_SERVER_DLL_INIT_CALLBACK)(IN PCSR_SERVER_DLL LoadedServerDll); -typedef -BOOLEAN -(*CSR_WAIT_FUNCTION)( - IN PLIST_ENTRY WaitList, - IN PCSR_THREAD WaitThread, - IN PCSR_API_MESSAGE WaitApiMessage, - IN PVOID WaitContext, - IN PVOID WaitArgument1, - IN PVOID WaitArgument2, - IN ULONG WaitFlags -); +/* +NTSTATUS +NTAPI +CsrServerDllInitialization(IN PCSR_SERVER_DLL LoadedServerDll); +*/ -typedef struct _CSR_WAIT_BLOCK -{ - ULONG Size; - LIST_ENTRY WaitList; - LIST_ENTRY UserWaitList; - PVOID WaitContext; - PCSR_THREAD WaitThread; - CSR_WAIT_FUNCTION WaitFunction; - CSR_API_MESSAGE WaitApiMessage; -} CSR_WAIT_BLOCK, *PCSR_WAIT_BLOCK; /* PROTOTYPES ****************************************************************/ NTSTATUS NTAPI CsrServerInitialization( - ULONG ArgumentCount, - PCHAR Arguments[] + IN ULONG ArgumentCount, + IN PCHAR Arguments[] ); +/////////// +BOOLEAN +NTAPI +CsrCaptureArguments( + IN PCSR_THREAD CsrThread, + IN PCSR_API_MESSAGE ApiMessage +); + +VOID +NTAPI +CsrReleaseCapturedArguments(IN PCSR_API_MESSAGE ApiMessage); +////////// + +PCSR_THREAD +NTAPI +CsrAddStaticServerThread( + IN HANDLE hThread, + IN PCLIENT_ID ClientId, + IN ULONG ThreadFlags +); + +PCSR_THREAD +NTAPI +CsrConnectToUser(VOID); + +BOOLEAN +NTAPI +CsrImpersonateClient(IN PCSR_THREAD CsrThread); + +BOOLEAN +NTAPI +CsrRevertToSelf(VOID); + +VOID +NTAPI +CsrSetBackgroundPriority(IN PCSR_PROCESS CsrProcess); + +LONG +NTAPI +CsrUnhandledExceptionFilter( + IN PEXCEPTION_POINTERS ExceptionInfo +); + + + #ifdef _MSC_VER #pragma warning(pop) #endif -#endif +#endif // _CSRSERVER_H + +/* EOF */ diff --git a/subsystems/win32/csrss/csrsrv/api/process.c b/subsystems/win32/csrss/csrsrv/api/process.c index 2493481ce99..7d82c06f616 100644 --- a/subsystems/win32/csrss/csrsrv/api/process.c +++ b/subsystems/win32/csrss/csrsrv/api/process.c @@ -28,20 +28,22 @@ CSR_API(CsrSrvCreateProcess) NTSTATUS Status; HANDLE ProcessHandle, ThreadHandle; PCSR_THREAD CsrThread; - PCSR_PROCESS NewProcessData; + PCSR_PROCESS Process, NewProcess; ULONG Flags, VdmPower = 0, DebugFlags = 0; /* Get the current client thread */ - CsrThread = NtCurrentTeb()->CsrClientThread; + CsrThread = CsrGetClientThread(); ASSERT(CsrThread != NULL); + Process = CsrThread->Process; + /* Extract the flags out of the process handle */ - Flags = (ULONG_PTR)Request->Data.CreateProcessRequest.ProcessHandle & 3; - Request->Data.CreateProcessRequest.ProcessHandle = (HANDLE)((ULONG_PTR)Request->Data.CreateProcessRequest.ProcessHandle & ~3); + Flags = (ULONG_PTR)ApiMessage->Data.CreateProcessRequest.ProcessHandle & 3; + ApiMessage->Data.CreateProcessRequest.ProcessHandle = (HANDLE)((ULONG_PTR)ApiMessage->Data.CreateProcessRequest.ProcessHandle & ~3); /* Duplicate the process handle */ - Status = NtDuplicateObject(CsrThread->Process->ProcessHandle, - Request->Data.CreateProcessRequest.ProcessHandle, + Status = NtDuplicateObject(Process->ProcessHandle, + ApiMessage->Data.CreateProcessRequest.ProcessHandle, NtCurrentProcess(), &ProcessHandle, 0, @@ -54,8 +56,8 @@ CSR_API(CsrSrvCreateProcess) } /* Duplicate the thread handle */ - Status = NtDuplicateObject(CsrThread->Process->ProcessHandle, - Request->Data.CreateProcessRequest.ThreadHandle, + Status = NtDuplicateObject(Process->ProcessHandle, + ApiMessage->Data.CreateProcessRequest.ThreadHandle, NtCurrentProcess(), &ThreadHandle, 0, @@ -86,7 +88,7 @@ CSR_API(CsrSrvCreateProcess) } /* Convert some flags. FIXME: More need conversion */ - if (Request->Data.CreateProcessRequest.CreationFlags & CREATE_NEW_PROCESS_GROUP) + if (ApiMessage->Data.CreateProcessRequest.CreationFlags & CREATE_NEW_PROCESS_GROUP) { DebugFlags |= CsrProcessCreateNewGroup; } @@ -96,8 +98,8 @@ CSR_API(CsrSrvCreateProcess) /* Call CSRSRV to create the CSR_PROCESS structure and the first CSR_THREAD */ Status = CsrCreateProcess(ProcessHandle, ThreadHandle, - &Request->Data.CreateProcessRequest.ClientId, - CsrThread->Process->NtSession, + &ApiMessage->Data.CreateProcessRequest.ClientId, + Process->NtSession, DebugFlags, NULL); if (Status == STATUS_THREAD_IS_TERMINATING) @@ -118,16 +120,16 @@ CSR_API(CsrSrvCreateProcess) /* FIXME: VDM vodoo */ /* ReactOS Compatibility */ - Status = CsrLockProcessByClientId(Request->Data.CreateProcessRequest.ClientId.UniqueProcess, &NewProcessData); + Status = CsrLockProcessByClientId(ApiMessage->Data.CreateProcessRequest.ClientId.UniqueProcess, &NewProcess); ASSERT(Status == STATUS_SUCCESS); - if (!(Request->Data.CreateProcessRequest.CreationFlags & (CREATE_NEW_CONSOLE | DETACHED_PROCESS))) + if (!(ApiMessage->Data.CreateProcessRequest.CreationFlags & (CREATE_NEW_CONSOLE | DETACHED_PROCESS))) { - NewProcessData->ParentConsole = ProcessData->Console; - NewProcessData->bInheritHandles = Request->Data.CreateProcessRequest.bInheritHandles; + NewProcess->ParentConsole = Process->Console; + NewProcess->bInheritHandles = ApiMessage->Data.CreateProcessRequest.bInheritHandles; } - RtlInitializeCriticalSection(&NewProcessData->HandleTableLock); - CallProcessCreated(ProcessData, NewProcessData); - CsrUnlockProcess(NewProcessData); + RtlInitializeCriticalSection(&NewProcess->HandleTableLock); + CallProcessCreated(Process, NewProcess); + CsrUnlockProcess(NewProcess); /* Return the result of this operation */ return Status; @@ -141,36 +143,36 @@ CSR_API(CsrSrvCreateThread) PCSR_PROCESS CsrProcess; /* Get the current CSR thread */ - CurrentThread = NtCurrentTeb()->CsrClientThread; + CurrentThread = CsrGetClientThread(); if (!CurrentThread) { DPRINT1("Server Thread TID: [%lx.%lx]\n", - Request->Data.CreateThreadRequest.ClientId.UniqueProcess, - Request->Data.CreateThreadRequest.ClientId.UniqueThread); + ApiMessage->Data.CreateThreadRequest.ClientId.UniqueProcess, + ApiMessage->Data.CreateThreadRequest.ClientId.UniqueThread); return STATUS_SUCCESS; // server-to-server } /* Get the CSR Process for this request */ CsrProcess = CurrentThread->Process; if (CsrProcess->ClientId.UniqueProcess != - Request->Data.CreateThreadRequest.ClientId.UniqueProcess) + ApiMessage->Data.CreateThreadRequest.ClientId.UniqueProcess) { /* This is a remote thread request -- is it within the server itself? */ - if (Request->Data.CreateThreadRequest.ClientId.UniqueProcess == NtCurrentTeb()->ClientId.UniqueProcess) + if (ApiMessage->Data.CreateThreadRequest.ClientId.UniqueProcess == NtCurrentTeb()->ClientId.UniqueProcess) { /* Accept this without any further work */ return STATUS_SUCCESS; } /* Get the real CSR Process for the remote thread's process */ - Status = CsrLockProcessByClientId(Request->Data.CreateThreadRequest.ClientId.UniqueProcess, + Status = CsrLockProcessByClientId(ApiMessage->Data.CreateThreadRequest.ClientId.UniqueProcess, &CsrProcess); if (!NT_SUCCESS(Status)) return Status; } /* Duplicate the thread handle so we can own it */ Status = NtDuplicateObject(CurrentThread->Process->ProcessHandle, - Request->Data.CreateThreadRequest.ThreadHandle, + ApiMessage->Data.CreateThreadRequest.ThreadHandle, NtCurrentProcess(), &ThreadHandle, 0, @@ -181,7 +183,7 @@ CSR_API(CsrSrvCreateThread) /* Call CSRSRV to tell it about the new thread */ Status = CsrCreateThread(CsrProcess, ThreadHandle, - &Request->Data.CreateThreadRequest.ClientId); + &ApiMessage->Data.CreateThreadRequest.ClientId); } /* Unlock the process and return */ @@ -191,39 +193,42 @@ CSR_API(CsrSrvCreateThread) CSR_API(CsrTerminateProcess) { - PCSR_THREAD CsrThread = NtCurrentTeb()->CsrClientThread; + PCSR_THREAD CsrThread = CsrGetClientThread(); ASSERT(CsrThread != NULL); /* Set magic flag so we don't reply this message back */ - Request->Type = 0xBABE; + ApiMessage->ApiNumber = 0xBABE; /* Remove the CSR_THREADs and CSR_PROCESS */ return CsrDestroyProcess(&CsrThread->ClientId, - (NTSTATUS)Request->Data.TerminateProcessRequest.uExitCode); + (NTSTATUS)ApiMessage->Data.TerminateProcessRequest.uExitCode); } CSR_API(CsrConnectProcess) { - - return(STATUS_SUCCESS); + return STATUS_SUCCESS; } CSR_API(CsrGetShutdownParameters) { + PCSR_THREAD CsrThread = CsrGetClientThread(); + ASSERT(CsrThread); - Request->Data.GetShutdownParametersRequest.Level = ProcessData->ShutdownLevel; - Request->Data.GetShutdownParametersRequest.Flags = ProcessData->ShutdownFlags; + ApiMessage->Data.GetShutdownParametersRequest.Level = CsrThread->Process->ShutdownLevel; + ApiMessage->Data.GetShutdownParametersRequest.Flags = CsrThread->Process->ShutdownFlags; - return(STATUS_SUCCESS); + return STATUS_SUCCESS; } CSR_API(CsrSetShutdownParameters) { + PCSR_THREAD CsrThread = CsrGetClientThread(); + ASSERT(CsrThread); - ProcessData->ShutdownLevel = Request->Data.SetShutdownParametersRequest.Level; - ProcessData->ShutdownFlags = Request->Data.SetShutdownParametersRequest.Flags; + CsrThread->Process->ShutdownLevel = ApiMessage->Data.SetShutdownParametersRequest.Level; + CsrThread->Process->ShutdownFlags = ApiMessage->Data.SetShutdownParametersRequest.Flags; - return(STATUS_SUCCESS); + return STATUS_SUCCESS; } /* EOF */ diff --git a/subsystems/win32/csrss/csrsrv/api/user.c b/subsystems/win32/csrss/csrsrv/api/user.c index 9ce9da0174d..1ba4fb38acb 100644 --- a/subsystems/win32/csrss/csrsrv/api/user.c +++ b/subsystems/win32/csrss/csrsrv/api/user.c @@ -32,7 +32,7 @@ CSR_API(CsrRegisterServicesProcess) } else { - ServicesProcessId = (ULONG_PTR)Request->Data.RegisterServicesProcessRequest.ProcessId; + ServicesProcessId = (ULONG_PTR)ApiMessage->Data.RegisterServicesProcessRequest.ProcessId; ServicesProcessIdValid = TRUE; return STATUS_SUCCESS; } diff --git a/subsystems/win32/csrss/csrsrv/api/wapi.c b/subsystems/win32/csrss/csrsrv/api/wapi.c index af4f764a9e6..cd2fa0c6ce3 100644 --- a/subsystems/win32/csrss/csrsrv/api/wapi.c +++ b/subsystems/win32/csrss/csrsrv/api/wapi.c @@ -62,39 +62,47 @@ CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions) return STATUS_SUCCESS; } +/* VOID FASTCALL CsrApiCallHandler(PCSR_PROCESS ProcessData, PCSR_API_MESSAGE Request) +*/ +VOID +FASTCALL +CsrApiCallHandler( + IN OUT PCSR_API_MESSAGE ApiMessage, + OUT PULONG Reply +) { unsigned DefIndex; - ULONG Type; + ULONG ApiId; - DPRINT("CSR: Calling handler for type: %x.\n", Request->Type); - Type = Request->Type & 0xFFFF; /* FIXME: USE MACRO */ - DPRINT("CSR: API Number: %x ServerID: %x\n",Type, Request->Type >> 16); + DPRINT("CSR: Calling handler for ApiNumber: %x.\n", ApiMessage->ApiNumber); + ApiId = CSR_API_NUMBER_TO_API_ID(ApiMessage->ApiNumber); + DPRINT("CSR: ApiID: %x ServerID: %x\n", ApiId, CSR_API_NUMBER_TO_SERVER_ID(ApiMessage->ApiNumber)); /* FIXME: Extract DefIndex instead of looping */ for (DefIndex = 0; DefIndex < ApiDefinitionsCount; DefIndex++) { - if (ApiDefinitions[DefIndex].Type == Type) + if (ApiDefinitions[DefIndex].ApiID == ApiId) { - if (Request->Header.u1.s1.DataLength < ApiDefinitions[DefIndex].MinRequestSize) + if (ApiMessage->Header.u1.s1.DataLength < ApiDefinitions[DefIndex].MinRequestSize) { - DPRINT1("Request type %d min request size %d actual %d\n", - Type, ApiDefinitions[DefIndex].MinRequestSize, - Request->Header.u1.s1.DataLength); - Request->Status = STATUS_INVALID_PARAMETER; + DPRINT1("Request ApiID %d min request size %d actual %d\n", + ApiId, ApiDefinitions[DefIndex].MinRequestSize, + ApiMessage->Header.u1.s1.DataLength); + ApiMessage->Status = STATUS_INVALID_PARAMETER; } else { - Request->Status = (ApiDefinitions[DefIndex].Handler)(ProcessData, Request); + ApiMessage->Status = (ApiDefinitions[DefIndex].Handler)(ApiMessage, Reply); } return; } } - DPRINT1("CSR: Unknown request type 0x%x\n", Request->Type); - Request->Status = STATUS_INVALID_SYSTEM_SERVICE; + DPRINT1("CSR: Unknown request ApiNumber 0x%x\n", ApiMessage->ApiNumber); + ApiMessage->Status = STATUS_INVALID_SYSTEM_SERVICE; } VOID @@ -127,7 +135,7 @@ CsrHandleHardError(IN PCSR_THREAD ThreadData, * Pointer to the CSR API Message to receive from the server. * * @return STATUS_SUCCESS in case of success, STATUS_ILLEGAL_FUNCTION - * if the opcode is invalid, or STATUS_ACCESS_VIOLATION if there + * if the ApiNumber is invalid, or STATUS_ACCESS_VIOLATION if there * was a problem executing the API. * * @remarks None. @@ -146,7 +154,7 @@ CsrCallServerFromServer(PCSR_API_MESSAGE ReceiveMsg, NTSTATUS Status; /* Get the Server ID */ - ServerId = CSR_SERVER_ID_FROM_OPCODE(ReceiveMsg->Opcode); + ServerId = CSR_SERVER_ID_FROM_OPCODE(ReceiveMsg->ApiNumber); /* Make sure that the ID is within limits, and the Server DLL loaded */ if ((ServerId >= CSR_SERVER_DLL_MAX) || @@ -160,7 +168,7 @@ CsrCallServerFromServer(PCSR_API_MESSAGE ReceiveMsg, else { /* Get the API ID */ - ApiId = CSR_API_ID_FROM_OPCODE(ReceiveMsg->Opcode); + ApiId = CSR_API_NUMBER_TO_API_ID(ReceiveMsg->ApiNumber); /* Normalize it with our Base ID */ ApiId -= ServerDll->ApiBase; @@ -209,6 +217,7 @@ CsrCallServerFromServer(PCSR_API_MESSAGE ReceiveMsg, #else // Hacky reactos code PCSR_PROCESS ProcessData; + ULONG ReplyCode; /* Get the Process Data */ CsrLockProcessByClientId(&ReceiveMsg->Header.ClientId.UniqueProcess, &ProcessData); @@ -223,7 +232,7 @@ CsrCallServerFromServer(PCSR_API_MESSAGE ReceiveMsg, _SEH2_TRY { /* Call the API and get the result */ - CsrApiCallHandler(ProcessData, ReplyMsg); + CsrApiCallHandler(ReplyMsg, /*ProcessData*/ &ReplyCode); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { @@ -1163,7 +1172,7 @@ HandleHardError: { /* This is an API Message coming from a non-CSR Thread */ DPRINT1("No thread found for request %lx and clientID %lx.%lx\n", - Request->Type & 0xFFFF, + Request->ApiNumber & 0xFFFF, Request->Header.ClientId.UniqueProcess, Request->Header.ClientId.UniqueThread); Reply = Request; @@ -1276,12 +1285,14 @@ HandleHardError: ReplyPort = CsrThread->Process->ClientPort; DPRINT("CSR: Got CSR API: %x [Message Origin: %x]\n", - Request->Type, + Request->ApiNumber, Request->Header.ClientId.UniqueThread); /* Validation complete, start SEH */ _SEH2_TRY { + ULONG ReplyCode; + /* Make sure we have enough threads */ CsrpCheckRequestThreads(); @@ -1289,7 +1300,7 @@ HandleHardError: NtCurrentTeb()->CsrClientThread = CsrThread; /* Call the Handler */ - CsrApiCallHandler(CsrThread->Process, Request); + CsrApiCallHandler(Request, &ReplyCode); /* Increase the static thread count */ _InterlockedIncrement(&CsrpStaticThreadCount); @@ -1298,7 +1309,7 @@ HandleHardError: NtCurrentTeb()->CsrClientThread = ServerThread; /* Check if this is a dead client now */ - if (Request->Type == 0xBABE) + if (Request->ApiNumber == 0xBABE) { /* Reply to the death message */ NtReplyPort(ReplyPort, &Reply->Header); diff --git a/subsystems/win32/csrss/csrsrv/procsup.c b/subsystems/win32/csrss/csrsrv/procsup.c index 228597050c2..604c7e95d88 100644 --- a/subsystems/win32/csrss/csrsrv/procsup.c +++ b/subsystems/win32/csrss/csrsrv/procsup.c @@ -187,7 +187,7 @@ NTAPI CsrImpersonateClient(IN PCSR_THREAD CsrThread) { NTSTATUS Status; - PCSR_THREAD CurrentThread = NtCurrentTeb()->CsrClientThread; + PCSR_THREAD CurrentThread = CsrGetClientThread(); /* Use the current thread if none given */ if (!CsrThread) CsrThread = CurrentThread; @@ -241,7 +241,7 @@ NTAPI CsrRevertToSelf(VOID) { NTSTATUS Status; - PCSR_THREAD CurrentThread = NtCurrentTeb()->CsrClientThread; + PCSR_THREAD CurrentThread = CsrGetClientThread(); HANDLE ImpersonationToken = NULL; /* Check if we have a Current Thread */ @@ -699,7 +699,7 @@ CsrCreateProcess(IN HANDLE hProcess, IN ULONG Flags, IN PCLIENT_ID DebugCid) { - PCSR_THREAD CurrentThread = NtCurrentTeb()->CsrClientThread; + PCSR_THREAD CurrentThread = CsrGetClientThread(); CLIENT_ID CurrentCid; PCSR_PROCESS CurrentProcess; // PVOID ProcessData; diff --git a/subsystems/win32/csrss/csrsrv/server.c b/subsystems/win32/csrss/csrsrv/server.c index 1221edc127a..1ca428e59c6 100644 --- a/subsystems/win32/csrss/csrsrv/server.c +++ b/subsystems/win32/csrss/csrsrv/server.c @@ -281,7 +281,7 @@ CsrSrvClientConnect(IN OUT PCSR_API_MESSAGE ApiMessage, NTSTATUS Status; PCSR_CLIENT_CONNECT ClientConnect; PCSR_SERVER_DLL ServerDll; - PCSR_PROCESS CurrentProcess = ((PCSR_THREAD)NtCurrentTeb()->CsrClientThread)->Process; + PCSR_PROCESS CurrentProcess = CsrGetClientThread()->Process; /* Load the Message, set default reply */ ClientConnect = (PCSR_CLIENT_CONNECT)&ApiMessage->CsrClientConnect; @@ -525,7 +525,7 @@ NTAPI CsrSrvIdentifyAlertableThread(IN OUT PCSR_API_MESSAGE ApiMessage, IN OUT PULONG Reply) { - PCSR_THREAD CsrThread = NtCurrentTeb()->CsrClientThread; + PCSR_THREAD CsrThread = CsrGetClientThread(); /* Set the alertable flag */ CsrThread->Flags |= CsrThreadAltertable; diff --git a/subsystems/win32/csrss/csrsrv/thredsup.c b/subsystems/win32/csrss/csrsrv/thredsup.c index 18cfca15961..d1c3de4b2ab 100644 --- a/subsystems/win32/csrss/csrsrv/thredsup.c +++ b/subsystems/win32/csrss/csrsrv/thredsup.c @@ -668,7 +668,7 @@ CsrCreateThread(IN PCSR_PROCESS CsrProcess, { PCSR_THREAD CsrThread; PCSR_PROCESS CurrentProcess; - PCSR_THREAD CurrentThread = NtCurrentTeb()->CsrClientThread; + PCSR_THREAD CurrentThread = CsrGetClientThread(); CLIENT_ID CurrentCid; KERNEL_USER_TIMES KernelTimes; diff --git a/subsystems/win32/csrss/include/api.h b/subsystems/win32/csrss/include/api.h index 6a71ee05a6d..c7ee19ce5d9 100644 --- a/subsystems/win32/csrss/include/api.h +++ b/subsystems/win32/csrss/include/api.h @@ -11,14 +11,15 @@ #include #include -#include +#include + + +#define CsrAcquireProcessLock() \ + RtlEnterCriticalSection(&ProcessDataLock); // CsrProcessLock + +#define CsrReleaseProcessLock() \ + RtlLeaveCriticalSection(&ProcessDataLock); -#define CSR_SRV_SERVER 0 -#define CSR_SERVER_DLL_MAX 4 -#define LOCK RtlEnterCriticalSection(&ProcessDataLock) -#define UNLOCK RtlLeaveCriticalSection(&ProcessDataLock) -#define CsrAcquireProcessLock() LOCK -#define CsrReleaseProcessLock() UNLOCK #define ProcessStructureListLocked() \ (ProcessDataLock.OwningThread == NtCurrentTeb()->ClientId.UniqueThread) @@ -34,230 +35,35 @@ #define CsrReleaseNtSessionLock() \ RtlLeaveCriticalSection(&CsrNtSessionLock); -typedef enum _CSR_THREAD_FLAGS -{ - CsrThreadAltertable = 0x1, - CsrThreadInTermination = 0x2, - CsrThreadTerminated = 0x4, - CsrThreadIsServerThread = 0x10 -} CSR_THREAD_FLAGS, *PCSR_THREAD_FLAGS; -typedef enum _SHUTDOWN_RESULT -{ - CsrShutdownCsrProcess = 1, - CsrShutdownNonCsrProcess, - CsrShutdownCancelled -} SHUTDOWN_RESULT, *PSHUTDOWN_RESULT; - -typedef enum _CSR_SHUTDOWN_FLAGS -{ - CsrShutdownSystem = 4, - CsrShutdownOther = 8 -} CSR_SHUTDOWN_FLAGS, *PCSR_SHUTDOWN_FLAGS; - -typedef enum _CSR_DEBUG_FLAGS -{ - CsrDebugOnlyThisProcess = 1, - CsrDebugProcessChildren = 2 -} CSR_PROCESS_DEBUG_FLAGS, *PCSR_PROCESS_DEBUG_FLAGS; - -typedef enum _CSR_PROCESS_FLAGS -{ - CsrProcessTerminating = 0x1, - CsrProcessSkipShutdown = 0x2, - CsrProcessNormalPriority = 0x10, - CsrProcessIdlePriority = 0x20, - CsrProcessHighPriority = 0x40, - CsrProcessRealtimePriority = 0x80, - CsrProcessCreateNewGroup = 0x100, - CsrProcessTerminated = 0x200, - CsrProcessLastThreadTerminated = 0x400, - CsrProcessIsConsoleApp = 0x800 -} CSR_PROCESS_FLAGS, *PCSR_PROCESS_FLAGS; - -#define CsrProcessPriorityFlags (CsrProcessNormalPriority | \ - CsrProcessIdlePriority | \ - CsrProcessHighPriority | \ - CsrProcessRealtimePriority) - -typedef struct _CSRSS_CON_PROCESS_DATA -{ - HANDLE ConsoleEvent; - struct tagCSRSS_CONSOLE *Console; - struct tagCSRSS_CONSOLE *ParentConsole; - BOOL bInheritHandles; - RTL_CRITICAL_SECTION HandleTableLock; - ULONG HandleTableSize; - struct _CSRSS_HANDLE *HandleTable; - PCONTROLDISPATCHER CtrlDispatcher; - LIST_ENTRY ConsoleLink; -} CSRSS_CON_PROCESS_DATA, *PCSRSS_CON_PROCESS_DATA; - -typedef struct _CSR_NT_SESSION -{ - ULONG ReferenceCount; - LIST_ENTRY SessionLink; - ULONG SessionId; -} CSR_NT_SESSION, *PCSR_NT_SESSION; - -typedef struct _CSR_PROCESS -{ - CLIENT_ID ClientId; - LIST_ENTRY ListLink; - LIST_ENTRY ThreadList; - struct _CSR_PROCESS *Parent; - PCSR_NT_SESSION NtSession; - ULONG ExpectedVersion; - HANDLE ClientPort; - ULONG_PTR ClientViewBase; - ULONG_PTR ClientViewBounds; - HANDLE ProcessHandle; - ULONG SequenceNumber; - ULONG Flags; - ULONG DebugFlags; - CLIENT_ID DebugCid; - ULONG ReferenceCount; - ULONG ProcessGroupId; - ULONG ProcessGroupSequence; - ULONG fVDM; - ULONG ThreadCount; - ULONG PriorityClass; - ULONG Reserved; - ULONG ShutdownLevel; - ULONG ShutdownFlags; -// PVOID ServerData[ANYSIZE_ARRAY]; - CSRSS_CON_PROCESS_DATA; -} CSR_PROCESS, *PCSR_PROCESS; - -typedef struct _CSR_THREAD -{ - LARGE_INTEGER CreateTime; - LIST_ENTRY Link; - LIST_ENTRY HashLinks; - CLIENT_ID ClientId; - PCSR_PROCESS Process; - struct _CSR_WAIT_BLOCK *WaitBlock; - HANDLE ThreadHandle; - ULONG Flags; - ULONG ReferenceCount; - ULONG ImpersonationCount; -} CSR_THREAD, *PCSR_THREAD; - -typedef -BOOLEAN -(*CSR_WAIT_FUNCTION)( - IN PLIST_ENTRY WaitList, - IN PCSR_THREAD WaitThread, - IN PCSR_API_MESSAGE WaitApiMessage, - IN PVOID WaitContext, - IN PVOID WaitArgument1, - IN PVOID WaitArgument2, - IN ULONG WaitFlags -); - -typedef struct _CSR_WAIT_BLOCK -{ - ULONG Size; - LIST_ENTRY WaitList; - LIST_ENTRY UserWaitList; - PVOID WaitContext; - PCSR_THREAD WaitThread; - CSR_WAIT_FUNCTION WaitFunction; - CSR_API_MESSAGE WaitApiMessage; -} CSR_WAIT_BLOCK, *PCSR_WAIT_BLOCK; - -typedef -NTSTATUS -(NTAPI *PCSR_CONNECT_CALLBACK)( - IN PCSR_PROCESS CsrProcess, - IN OUT PVOID ConnectionInfo, - IN OUT PULONG ConnectionInfoLength -); - -typedef -VOID -(NTAPI *PCSR_DISCONNECT_CALLBACK)(IN PCSR_PROCESS CsrProcess); - -typedef -NTSTATUS -(NTAPI *PCSR_NEWPROCESS_CALLBACK)( - IN PCSR_PROCESS Parent, - IN PCSR_PROCESS CsrProcess -); - -typedef -VOID -(NTAPI *PCSR_HARDERROR_CALLBACK)( - IN PCSR_THREAD CsrThread, - IN PHARDERROR_MSG HardErrorMessage -); - -typedef -ULONG -(NTAPI *PCSR_SHUTDOWNPROCESS_CALLBACK)( - IN PCSR_PROCESS CsrProcess, - IN ULONG Flags, - IN BOOLEAN FirstPhase -); - -typedef -NTSTATUS -(NTAPI *PCSR_API_ROUTINE)( - IN OUT PCSR_API_MESSAGE ApiMessage, - IN OUT PULONG Reply -); - -typedef struct _CSR_SERVER_DLL -{ - ULONG Length; - HANDLE Event; - ANSI_STRING Name; - HANDLE ServerHandle; - ULONG ServerId; - ULONG Unknown; - ULONG ApiBase; - ULONG HighestApiSupported; - PCSR_API_ROUTINE *DispatchTable; - PBOOLEAN ValidTable; - PCHAR *NameTable; - ULONG SizeOfProcessData; - PCSR_CONNECT_CALLBACK ConnectCallback; - PCSR_DISCONNECT_CALLBACK DisconnectCallback; - PCSR_HARDERROR_CALLBACK HardErrorCallback; - PVOID SharedSection; - PCSR_NEWPROCESS_CALLBACK NewProcessCallback; - PCSR_SHUTDOWNPROCESS_CALLBACK ShutdownProcessCallback; - ULONG Unknown2[3]; -} CSR_SERVER_DLL, *PCSR_SERVER_DLL; - -typedef -NTSTATUS -(NTAPI *PCSR_SERVER_DLL_INIT_CALLBACK)(IN PCSR_SERVER_DLL ServerDll); - - -typedef NTSTATUS (WINAPI *CSRSS_API_PROC)(PCSR_PROCESS ProcessData, - PCSR_API_MESSAGE Request); typedef struct _CSRSS_API_DEFINITION { - ULONG Type; + ULONG ApiID; ULONG MinRequestSize; - CSRSS_API_PROC Handler; + PCSR_API_ROUTINE Handler; } CSRSS_API_DEFINITION, *PCSRSS_API_DEFINITION; #define CSRSS_DEFINE_API(Func, Handler) \ - { Func, sizeof(CSRSS_##Func), Handler } + { Func, sizeof(CSRSS_##Func), Handler } + + typedef struct _CSRSS_LISTEN_DATA { - HANDLE ApiPortHandle; - ULONG ApiDefinitionsCount; - PCSRSS_API_DEFINITION *ApiDefinitions; + HANDLE ApiPortHandle; + ULONG ApiDefinitionsCount; + PCSRSS_API_DEFINITION *ApiDefinitions; } CSRSS_LISTEN_DATA, *PCSRSS_LISTEN_DATA; -#define CSR_API(n) NTSTATUS WINAPI n ( \ - PCSR_PROCESS ProcessData, \ - PCSR_API_MESSAGE Request) + + + +/****************************************************************************** + ****************************************************************************** + ******************************************************************************/ + + /* init.c */ extern HANDLE hBootstrapOk; @@ -304,15 +110,10 @@ CsrInsertProcess(IN PCSR_PROCESS Parent OPTIONAL, /* api/wapi.c */ NTSTATUS FASTCALL CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions); -VOID FASTCALL CsrApiCallHandler(PCSR_PROCESS ProcessData, - PCSR_API_MESSAGE Request); +VOID FASTCALL CsrApiCallHandler(IN OUT PCSR_API_MESSAGE ApiMessage, OUT PULONG Reply); VOID WINAPI CsrSbApiRequestThread (PVOID PortHandle); VOID NTAPI ClientConnectionThread(HANDLE ServerPort); -VOID -NTAPI -CsrReleaseCapturedArguments(IN PCSR_API_MESSAGE ApiMessage); - extern HANDLE CsrApiPort; extern HANDLE CsrSmApiPort; extern HANDLE CsrSbApiPort; @@ -357,7 +158,7 @@ CsrLockedReferenceThread(IN PCSR_THREAD CsrThread); /* api/process.c */ typedef NTSTATUS (WINAPI *CSRSS_ENUM_PROCESS_PROC)(PCSR_PROCESS ProcessData, - PVOID Context); + PVOID Context); NTSTATUS WINAPI CsrInitializeProcessStructure(VOID); NTSTATUS WINAPI CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc, PVOID Context); diff --git a/win32ss/pch.h b/win32ss/pch.h index 921f4588644..5cbb2735c5f 100644 --- a/win32ss/pch.h +++ b/win32ss/pch.h @@ -70,8 +70,9 @@ typedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES; /* SEH support with PSEH */ #include -/* CSRSS header */ -#include +/* CSRSS Header */ +#include +#include // FIXME: data header. /* Public Win32K headers */ #include diff --git a/win32ss/user/ntuser/csr.c b/win32ss/user/ntuser/csr.c index af757006a69..f807d509088 100644 --- a/win32ss/user/ntuser/csr.c +++ b/win32ss/user/ntuser/csr.c @@ -34,7 +34,7 @@ CsrInit(void) NULL, NULL, &ConnectInfoLength); - if (! NT_SUCCESS(Status)) + if (!NT_SUCCESS(Status)) { return Status; } diff --git a/win32ss/user/ntuser/desktop.c b/win32ss/user/ntuser/desktop.c index fdad25e3c51..8c9b9f334c2 100644 --- a/win32ss/user/ntuser/desktop.c +++ b/win32ss/user/ntuser/desktop.c @@ -1208,7 +1208,7 @@ NtUserCreateDesktop( /* * Create a handle for CSRSS and notify CSRSS for Creating Desktop Background Windows and Threads. */ - Request.Type = MAKE_CSR_API(CREATE_DESKTOP, CSR_GUI); + Request.ApiNumber = CSR_CREATE_API_NUMBER(CSR_GUI, CREATE_DESKTOP); Status = CsrInsertObject(Desktop, GENERIC_ALL, (HANDLE*)&Request.Data.CreateDesktopRequest.DesktopHandle); diff --git a/win32ss/user/ntuser/simplecall.c b/win32ss/user/ntuser/simplecall.c index da3041ad97f..91216bed5fc 100644 --- a/win32ss/user/ntuser/simplecall.c +++ b/win32ss/user/ntuser/simplecall.c @@ -52,7 +52,7 @@ co_IntRegisterLogonProcess(HANDLE ProcessId, BOOL Register) ObDereferenceObject(Process); - Request.Type = MAKE_CSR_API(REGISTER_LOGON_PROCESS, CSR_GUI); + Request.ApiNumber = CSR_CREATE_API_NUMBER(CSR_GUI, REGISTER_LOGON_PROCESS); Request.Data.RegisterLogonProcessRequest.ProcessId = ProcessId; Request.Data.RegisterLogonProcessRequest.Register = Register; diff --git a/win32ss/user/user32/include/user32.h b/win32ss/user/user32/include/user32.h index be2e6cd8e50..0078cab3a9a 100644 --- a/win32ss/user/user32/include/user32.h +++ b/win32ss/user/user32/include/user32.h @@ -29,8 +29,9 @@ #include #include -/* CSRSS Headers */ -#include +/* CSRSS Header */ +#include +#include // FIXME: data header. /* Public Win32K Headers */ #include diff --git a/win32ss/user/user32/include/user_x.h b/win32ss/user/user32/include/user_x.h index f27d4520892..16b5a6f073d 100644 --- a/win32ss/user/user32/include/user_x.h +++ b/win32ss/user/user32/include/user_x.h @@ -109,4 +109,3 @@ static __inline void LoadUserApiHook() #define HOOKID_TO_FLAG(HookId) (1 << ((HookId) + 1)) #define ISITHOOKED(HookId) (GetWin32ClientInfo()->fsHooks & HOOKID_TO_FLAG(HookId) ||\ (GetWin32ClientInfo()->pDeskInfo && GetWin32ClientInfo()->pDeskInfo->fsHooks & HOOKID_TO_FLAG(HookId))) - \ No newline at end of file diff --git a/win32ss/user/user32/misc/exit.c b/win32ss/user/user32/misc/exit.c index 3c16521b61f..0a2ba9898b3 100644 --- a/win32ss/user/user32/misc/exit.c +++ b/win32ss/user/user32/misc/exit.c @@ -65,27 +65,25 @@ */ BOOL WINAPI ExitWindowsEx(UINT uFlags, - DWORD dwReserved) + DWORD dwReserved) { - CSR_API_MESSAGE Request; - ULONG CsrRequest; - NTSTATUS Status; + CSR_API_MESSAGE Request; + NTSTATUS Status; - CsrRequest = MAKE_CSR_API(EXIT_REACTOS, CSR_GUI); - Request.Data.ExitReactosRequest.Flags = uFlags; - Request.Data.ExitReactosRequest.Reserved = dwReserved; + Request.Data.ExitReactosRequest.Flags = uFlags; + Request.Data.ExitReactosRequest.Reserved = dwReserved; - Status = CsrClientCallServer(&Request, - NULL, - CsrRequest, - sizeof(CSR_API_MESSAGE)); - if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_GUI, EXIT_REACTOS), + sizeof(CSR_API_MESSAGE)); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { - SetLastError(RtlNtStatusToDosError(Status)); - return(FALSE); + SetLastError(RtlNtStatusToDosError(Status)); + return FALSE; } - return(TRUE); + return TRUE; } @@ -95,24 +93,22 @@ ExitWindowsEx(UINT uFlags, BOOL WINAPI RegisterServicesProcess(DWORD ServicesProcessId) { - CSR_API_MESSAGE Request; - ULONG CsrRequest; - NTSTATUS Status; + CSR_API_MESSAGE Request; + NTSTATUS Status; - CsrRequest = MAKE_CSR_API(REGISTER_SERVICES_PROCESS, CSR_GUI); - Request.Data.RegisterServicesProcessRequest.ProcessId = UlongToHandle(ServicesProcessId); + Request.Data.RegisterServicesProcessRequest.ProcessId = UlongToHandle(ServicesProcessId); - Status = CsrClientCallServer(&Request, - NULL, - CsrRequest, - sizeof(CSR_API_MESSAGE)); - if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_GUI, REGISTER_SERVICES_PROCESS), + sizeof(CSR_API_MESSAGE)); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { - SetLastError(RtlNtStatusToDosError(Status)); - return(FALSE); + SetLastError(RtlNtStatusToDosError(Status)); + return FALSE; } - return(TRUE); + return TRUE; } /* EOF */ diff --git a/win32ss/user/user32/misc/misc.c b/win32ss/user/user32/misc/misc.c index 8059f4cef3c..cdf91ff1671 100644 --- a/win32ss/user/user32/misc/misc.c +++ b/win32ss/user/user32/misc/misc.c @@ -52,25 +52,23 @@ BOOL WINAPI SetLogonNotifyWindow (HWND Wnd, HWINSTA WinSta) { - /* Maybe we should call NtUserSetLogonNotifyWindow and let that one inform CSRSS??? */ - CSR_API_MESSAGE Request; - ULONG CsrRequest; - NTSTATUS Status; + /* Maybe we should call NtUserSetLogonNotifyWindow and let that one inform CSRSS??? */ + CSR_API_MESSAGE Request; + NTSTATUS Status; - CsrRequest = MAKE_CSR_API(SET_LOGON_NOTIFY_WINDOW, CSR_GUI); - Request.Data.SetLogonNotifyWindowRequest.LogonNotifyWindow = Wnd; + Request.Data.SetLogonNotifyWindowRequest.LogonNotifyWindow = Wnd; - Status = CsrClientCallServer(&Request, - NULL, - CsrRequest, - sizeof(CSR_API_MESSAGE)); - if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) + Status = CsrClientCallServer(&Request, + NULL, + CSR_CREATE_API_NUMBER(CSR_GUI, SET_LOGON_NOTIFY_WINDOW), + sizeof(CSR_API_MESSAGE)); + if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status)) { - SetLastError(RtlNtStatusToDosError(Status)); - return(FALSE); + SetLastError(RtlNtStatusToDosError(Status)); + return FALSE; } - return NtUserSetLogonNotifyWindow(Wnd); + return NtUserSetLogonNotifyWindow(Wnd); } /* diff --git a/win32ss/user/win32csr/alias.c b/win32ss/user/win32csr/alias.c index 55c69966627..a12eb036af4 100644 --- a/win32ss/user/win32csr/alias.c +++ b/win32ss/user/win32csr/alias.c @@ -288,24 +288,24 @@ CSR_API(CsrAddConsoleAlias) //ULONG TotalLength; //WCHAR * Ptr; - //TotalLength = Request->Data.AddConsoleAlias.SourceLength + Request->Data.AddConsoleAlias.ExeLength + Request->Data.AddConsoleAlias.TargetLength; - //Ptr = (WCHAR*)((ULONG_PTR)Request + sizeof(CSR_API_MESSAGE)); + //TotalLength = ApiMessage->Data.AddConsoleAlias.SourceLength + ApiMessage->Data.AddConsoleAlias.ExeLength + ApiMessage->Data.AddConsoleAlias.TargetLength; + //Ptr = (WCHAR*)((ULONG_PTR)ApiMessage + sizeof(CSR_API_MESSAGE)); - lpSource = (WCHAR*)((ULONG_PTR)Request + sizeof(CSR_API_MESSAGE)); - lpExeName = (WCHAR*)((ULONG_PTR)Request + sizeof(CSR_API_MESSAGE) + Request->Data.AddConsoleAlias.SourceLength * sizeof(WCHAR)); - lpTarget = (Request->Data.AddConsoleAlias.TargetLength != 0 ? lpExeName + Request->Data.AddConsoleAlias.ExeLength : NULL); + lpSource = (WCHAR*)((ULONG_PTR)ApiMessage + sizeof(CSR_API_MESSAGE)); + lpExeName = (WCHAR*)((ULONG_PTR)ApiMessage + sizeof(CSR_API_MESSAGE) + ApiMessage->Data.AddConsoleAlias.SourceLength * sizeof(WCHAR)); + lpTarget = (ApiMessage->Data.AddConsoleAlias.TargetLength != 0 ? lpExeName + ApiMessage->Data.AddConsoleAlias.ExeLength : NULL); - DPRINT("CsrAddConsoleAlias entered Request %p lpSource %p lpExeName %p lpTarget %p\n", Request, lpSource, lpExeName, lpTarget); + DPRINT("CsrAddConsoleAlias entered ApiMessage %p lpSource %p lpExeName %p lpTarget %p\n", ApiMessage, lpSource, lpExeName, lpTarget); if (lpExeName == NULL || lpSource == NULL) { return STATUS_INVALID_PARAMETER; } - Request->Status = ConioConsoleFromProcessData(ProcessData, &Console); - if (!NT_SUCCESS(Request->Status)) + ApiMessage->Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); + if (!NT_SUCCESS(ApiMessage->Status)) { - return Request->Status; + return ApiMessage->Status; } Header = IntFindAliasHeader(Console->Aliases, lpExeName); @@ -326,14 +326,14 @@ CSR_API(CsrAddConsoleAlias) if (Entry) { IntDeleteAliasEntry(Header, Entry); - Request->Status = STATUS_SUCCESS; + ApiMessage->Status = STATUS_SUCCESS; } else { - Request->Status = STATUS_INVALID_PARAMETER; + ApiMessage->Status = STATUS_INVALID_PARAMETER; } ConioUnlockConsole(Console); - return Request->Status; + return ApiMessage->Status; } Entry = IntCreateAliasEntry(lpSource, lpTarget); @@ -359,24 +359,24 @@ CSR_API(CsrGetConsoleAlias) WCHAR * lpSource; WCHAR * lpTarget; - lpSource = (LPWSTR)((ULONG_PTR)Request + sizeof(CSR_API_MESSAGE)); - lpExeName = lpSource + Request->Data.GetConsoleAlias.SourceLength; - lpTarget = Request->Data.GetConsoleAlias.TargetBuffer; + lpSource = (LPWSTR)((ULONG_PTR)ApiMessage + sizeof(CSR_API_MESSAGE)); + lpExeName = lpSource + ApiMessage->Data.GetConsoleAlias.SourceLength; + lpTarget = ApiMessage->Data.GetConsoleAlias.TargetBuffer; DPRINT("CsrGetConsoleAlias entered lpExeName %p lpSource %p TargetBuffer %p TargetBufferLength %u\n", - lpExeName, lpSource, lpTarget, Request->Data.GetConsoleAlias.TargetBufferLength); + lpExeName, lpSource, lpTarget, ApiMessage->Data.GetConsoleAlias.TargetBufferLength); - if (Request->Data.GetConsoleAlias.ExeLength == 0 || lpTarget == NULL || - Request->Data.GetConsoleAlias.TargetBufferLength == 0 || Request->Data.GetConsoleAlias.SourceLength == 0) + if (ApiMessage->Data.GetConsoleAlias.ExeLength == 0 || lpTarget == NULL || + ApiMessage->Data.GetConsoleAlias.TargetBufferLength == 0 || ApiMessage->Data.GetConsoleAlias.SourceLength == 0) { return STATUS_INVALID_PARAMETER; } - Request->Status = ConioConsoleFromProcessData(ProcessData, &Console); - if (!NT_SUCCESS(Request->Status)) + ApiMessage->Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); + if (!NT_SUCCESS(ApiMessage->Status)) { - return Request->Status; + return ApiMessage->Status; } Header = IntFindAliasHeader(Console->Aliases, lpExeName); @@ -394,21 +394,21 @@ CSR_API(CsrGetConsoleAlias) } Length = (wcslen(Entry->lpTarget)+1) * sizeof(WCHAR); - if (Length > Request->Data.GetConsoleAlias.TargetBufferLength) + if (Length > ApiMessage->Data.GetConsoleAlias.TargetBufferLength) { ConioUnlockConsole(Console); return STATUS_BUFFER_TOO_SMALL; } - if (!Win32CsrValidateBuffer(ProcessData, lpTarget, - Request->Data.GetConsoleAlias.TargetBufferLength, 1)) + if (!Win32CsrValidateBuffer(CsrGetClientThread()->Process, lpTarget, + ApiMessage->Data.GetConsoleAlias.TargetBufferLength, 1)) { ConioUnlockConsole(Console); return STATUS_ACCESS_VIOLATION; } wcscpy(lpTarget, Entry->lpTarget); - Request->Data.GetConsoleAlias.BytesWritten = Length; + ApiMessage->Data.GetConsoleAlias.BytesWritten = Length; ConioUnlockConsole(Console); return STATUS_SUCCESS; } @@ -419,33 +419,33 @@ CSR_API(CsrGetAllConsoleAliases) ULONG BytesWritten; PALIAS_HEADER Header; - if (Request->Data.GetAllConsoleAlias.lpExeName == NULL) + if (ApiMessage->Data.GetAllConsoleAlias.lpExeName == NULL) { return STATUS_INVALID_PARAMETER; } - Request->Status = ConioConsoleFromProcessData(ProcessData, &Console); - if (!NT_SUCCESS(Request->Status)) + ApiMessage->Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); + if (!NT_SUCCESS(ApiMessage->Status)) { - return Request->Status; + return ApiMessage->Status; } - Header = IntFindAliasHeader(Console->Aliases, Request->Data.GetAllConsoleAlias.lpExeName); + Header = IntFindAliasHeader(Console->Aliases, ApiMessage->Data.GetAllConsoleAlias.lpExeName); if (!Header) { ConioUnlockConsole(Console); return STATUS_INVALID_PARAMETER; } - if (IntGetAllConsoleAliasesLength(Header) > Request->Data.GetAllConsoleAlias.AliasBufferLength) + if (IntGetAllConsoleAliasesLength(Header) > ApiMessage->Data.GetAllConsoleAlias.AliasBufferLength) { ConioUnlockConsole(Console); return STATUS_BUFFER_OVERFLOW; } - if (!Win32CsrValidateBuffer(ProcessData, - Request->Data.GetAllConsoleAlias.AliasBuffer, - Request->Data.GetAllConsoleAlias.AliasBufferLength, + if (!Win32CsrValidateBuffer(CsrGetClientThread()->Process, + ApiMessage->Data.GetAllConsoleAlias.AliasBuffer, + ApiMessage->Data.GetAllConsoleAlias.AliasBufferLength, 1)) { ConioUnlockConsole(Console); @@ -453,10 +453,10 @@ CSR_API(CsrGetAllConsoleAliases) } BytesWritten = IntGetAllConsoleAliases(Header, - Request->Data.GetAllConsoleAlias.AliasBuffer, - Request->Data.GetAllConsoleAlias.AliasBufferLength); + ApiMessage->Data.GetAllConsoleAlias.AliasBuffer, + ApiMessage->Data.GetAllConsoleAlias.AliasBufferLength); - Request->Data.GetAllConsoleAlias.BytesWritten = BytesWritten; + ApiMessage->Data.GetAllConsoleAlias.BytesWritten = BytesWritten; ConioUnlockConsole(Console); return STATUS_SUCCESS; } @@ -467,18 +467,18 @@ CSR_API(CsrGetAllConsoleAliasesLength) PALIAS_HEADER Header; UINT Length; - if (Request->Data.GetAllConsoleAliasesLength.lpExeName == NULL) + if (ApiMessage->Data.GetAllConsoleAliasesLength.lpExeName == NULL) { return STATUS_INVALID_PARAMETER; } - Request->Status = ConioConsoleFromProcessData(ProcessData, &Console); - if (!NT_SUCCESS(Request->Status)) + ApiMessage->Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); + if (!NT_SUCCESS(ApiMessage->Status)) { - return Request->Status; + return ApiMessage->Status; } - Header = IntFindAliasHeader(Console->Aliases, Request->Data.GetAllConsoleAliasesLength.lpExeName); + Header = IntFindAliasHeader(Console->Aliases, ApiMessage->Data.GetAllConsoleAliasesLength.lpExeName); if (!Header) { ConioUnlockConsole(Console); @@ -486,7 +486,7 @@ CSR_API(CsrGetAllConsoleAliasesLength) } Length = IntGetAllConsoleAliasesLength(Header); - Request->Data.GetAllConsoleAliasesLength.Length = Length; + ApiMessage->Data.GetAllConsoleAliasesLength.Length = Length; ConioUnlockConsole(Console); return STATUS_SUCCESS; } @@ -499,29 +499,29 @@ CSR_API(CsrGetConsoleAliasesExes) DPRINT("CsrGetConsoleAliasesExes entered\n"); - Request->Status = ConioConsoleFromProcessData(ProcessData, &Console); - if (!NT_SUCCESS(Request->Status)) + ApiMessage->Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); + if (!NT_SUCCESS(ApiMessage->Status)) { - return Request->Status; + return ApiMessage->Status; } ExesLength = IntGetConsoleAliasesExesLength(Console->Aliases); - if (ExesLength > Request->Data.GetConsoleAliasesExes.Length) + if (ExesLength > ApiMessage->Data.GetConsoleAliasesExes.Length) { ConioUnlockConsole(Console); return STATUS_BUFFER_OVERFLOW; } - if (Request->Data.GetConsoleAliasesExes.ExeNames == NULL) + if (ApiMessage->Data.GetConsoleAliasesExes.ExeNames == NULL) { ConioUnlockConsole(Console); return STATUS_INVALID_PARAMETER; } - if (!Win32CsrValidateBuffer(ProcessData, - Request->Data.GetConsoleAliasesExes.ExeNames, - Request->Data.GetConsoleAliasesExes.Length, + if (!Win32CsrValidateBuffer(CsrGetClientThread()->Process, + ApiMessage->Data.GetConsoleAliasesExes.ExeNames, + ApiMessage->Data.GetConsoleAliasesExes.Length, 1)) { ConioUnlockConsole(Console); @@ -529,10 +529,10 @@ CSR_API(CsrGetConsoleAliasesExes) } BytesWritten = IntGetConsoleAliasesExes(Console->Aliases, - Request->Data.GetConsoleAliasesExes.ExeNames, - Request->Data.GetConsoleAliasesExes.Length); + ApiMessage->Data.GetConsoleAliasesExes.ExeNames, + ApiMessage->Data.GetConsoleAliasesExes.Length); - Request->Data.GetConsoleAliasesExes.BytesWritten = BytesWritten; + ApiMessage->Data.GetConsoleAliasesExes.BytesWritten = BytesWritten; ConioUnlockConsole(Console); return STATUS_SUCCESS; } @@ -542,11 +542,11 @@ CSR_API(CsrGetConsoleAliasesExesLength) PCSRSS_CONSOLE Console; DPRINT("CsrGetConsoleAliasesExesLength entered\n"); - Request->Status = ConioConsoleFromProcessData(ProcessData, &Console); - if (NT_SUCCESS(Request->Status)) + ApiMessage->Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); + if (NT_SUCCESS(ApiMessage->Status)) { - Request->Data.GetConsoleAliasesExesLength.Length = IntGetConsoleAliasesExesLength(Console->Aliases); + ApiMessage->Data.GetConsoleAliasesExesLength.Length = IntGetConsoleAliasesExesLength(Console->Aliases); ConioUnlockConsole(Console); } - return Request->Status; + return ApiMessage->Status; } diff --git a/win32ss/user/win32csr/coninput.c b/win32ss/user/win32csr/coninput.c index 93a3f658ffc..a93b8a9fb9f 100644 --- a/win32ss/user/win32csr/coninput.c +++ b/win32ss/user/win32csr/coninput.c @@ -30,30 +30,31 @@ CSR_API(CsrReadConsole) PWCHAR UnicodeBuffer; ULONG i = 0; ULONG nNumberOfCharsToRead, CharSize; + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; NTSTATUS Status; DPRINT("CsrReadConsole\n"); - CharSize = (Request->Data.ReadConsoleRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR)); + CharSize = (ApiMessage->Data.ReadConsoleRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR)); - nNumberOfCharsToRead = Request->Data.ReadConsoleRequest.NrCharactersToRead; + nNumberOfCharsToRead = ApiMessage->Data.ReadConsoleRequest.NrCharactersToRead; - Buffer = (PCHAR)Request->Data.ReadConsoleRequest.Buffer; + Buffer = (PCHAR)ApiMessage->Data.ReadConsoleRequest.Buffer; UnicodeBuffer = (PWCHAR)Buffer; if (!Win32CsrValidateBuffer(ProcessData, Buffer, nNumberOfCharsToRead, CharSize)) return STATUS_ACCESS_VIOLATION; - if (Request->Data.ReadConsoleRequest.NrCharactersRead * sizeof(WCHAR) > nNumberOfCharsToRead * CharSize) + if (ApiMessage->Data.ReadConsoleRequest.NrCharactersRead * sizeof(WCHAR) > nNumberOfCharsToRead * CharSize) return STATUS_INVALID_PARAMETER; - Status = ConioLockConsole(ProcessData, Request->Data.ReadConsoleRequest.ConsoleHandle, + Status = ConioLockConsole(ProcessData, ApiMessage->Data.ReadConsoleRequest.ConsoleHandle, &Console, GENERIC_READ); if (! NT_SUCCESS(Status)) { return Status; } - Request->Data.ReadConsoleRequest.EventHandle = ProcessData->ConsoleEvent; + ApiMessage->Data.ReadConsoleRequest.EventHandle = ProcessData->ConsoleEvent; Status = STATUS_PENDING; /* we haven't read anything (yet) */ if (Console->Mode & ENABLE_LINE_INPUT) @@ -71,8 +72,8 @@ CSR_API(CsrReadConsole) Console->LineComplete = FALSE; Console->LineUpPressed = FALSE; Console->LineInsertToggle = 0; - Console->LineWakeupMask = Request->Data.ReadConsoleRequest.CtrlWakeupMask; - Console->LineSize = Request->Data.ReadConsoleRequest.NrCharactersRead; + Console->LineWakeupMask = ApiMessage->Data.ReadConsoleRequest.CtrlWakeupMask; + Console->LineSize = ApiMessage->Data.ReadConsoleRequest.NrCharactersRead; Console->LinePos = Console->LineSize; /* pre-filling the buffer is only allowed in the Unicode API, * so we don't need to worry about conversion */ @@ -100,7 +101,7 @@ CSR_API(CsrReadConsole) && Input->InputEvent.Event.KeyEvent.bKeyDown) { LineInputKeyDown(Console, &Input->InputEvent.Event.KeyEvent); - Request->Data.ReadConsoleRequest.ControlKeyState = Input->InputEvent.Event.KeyEvent.dwControlKeyState; + ApiMessage->Data.ReadConsoleRequest.ControlKeyState = Input->InputEvent.Event.KeyEvent.dwControlKeyState; } HeapFree(Win32CsrApiHeap, 0, Input); } @@ -111,7 +112,7 @@ CSR_API(CsrReadConsole) while (i < nNumberOfCharsToRead && Console->LinePos != Console->LineSize) { WCHAR Char = Console->LineBuffer[Console->LinePos++]; - if (Request->Data.ReadConsoleRequest.Unicode) + if (ApiMessage->Data.ReadConsoleRequest.Unicode) UnicodeBuffer[i++] = Char; else ConsoleInputUnicodeCharToAnsiChar(Console, &Buffer[i++], &Char); @@ -144,7 +145,7 @@ CSR_API(CsrReadConsole) && Input->InputEvent.Event.KeyEvent.uChar.UnicodeChar != L'\0') { WCHAR Char = Input->InputEvent.Event.KeyEvent.uChar.UnicodeChar; - if (Request->Data.ReadConsoleRequest.Unicode) + if (ApiMessage->Data.ReadConsoleRequest.Unicode) UnicodeBuffer[i++] = Char; else ConsoleInputUnicodeCharToAnsiChar(Console, &Buffer[i++], &Char); @@ -154,7 +155,7 @@ CSR_API(CsrReadConsole) } } done: - Request->Data.ReadConsoleRequest.NrCharactersRead = i; + ApiMessage->Data.ReadConsoleRequest.NrCharactersRead = i; ConioUnlockConsole(Console); return Status; @@ -423,6 +424,7 @@ ConioProcessKey(MSG *msg, PCSRSS_CONSOLE Console, BOOL TextMode) CSR_API(CsrReadInputEvent) { PLIST_ENTRY CurrentEntry; + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; NTSTATUS Status; BOOLEAN Done = FALSE; @@ -430,9 +432,9 @@ CSR_API(CsrReadInputEvent) DPRINT("CsrReadInputEvent\n"); - Request->Data.ReadInputRequest.Event = ProcessData->ConsoleEvent; + ApiMessage->Data.ReadInputRequest.Event = ProcessData->ConsoleEvent; - Status = ConioLockConsole(ProcessData, Request->Data.ReadInputRequest.ConsoleHandle, &Console, GENERIC_READ); + Status = ConioLockConsole(ProcessData, ApiMessage->Data.ReadInputRequest.ConsoleHandle, &Console, GENERIC_READ); if (! NT_SUCCESS(Status)) { return Status; @@ -447,7 +449,7 @@ CSR_API(CsrReadInputEvent) if (Done) { - Request->Data.ReadInputRequest.MoreEvents = TRUE; + ApiMessage->Data.ReadInputRequest.MoreEvents = TRUE; break; } @@ -455,10 +457,10 @@ CSR_API(CsrReadInputEvent) if (!Done) { - Request->Data.ReadInputRequest.Input = Input->InputEvent; - if (Request->Data.ReadInputRequest.Unicode == FALSE) + ApiMessage->Data.ReadInputRequest.Input = Input->InputEvent; + if (ApiMessage->Data.ReadInputRequest.Unicode == FALSE) { - ConioInputEventToAnsi(Console, &Request->Data.ReadInputRequest.Input); + ConioInputEventToAnsi(Console, &ApiMessage->Data.ReadInputRequest.Input); } Done = TRUE; } @@ -490,8 +492,8 @@ CSR_API(CsrFlushInputBuffer) DPRINT("CsrFlushInputBuffer\n"); - Status = ConioLockConsole(ProcessData, - Request->Data.FlushInputBufferRequest.ConsoleInput, + Status = ConioLockConsole(CsrGetClientThread()->Process, + ApiMessage->Data.FlushInputBufferRequest.ConsoleInput, &Console, GENERIC_WRITE); if(! NT_SUCCESS(Status)) @@ -523,7 +525,7 @@ CSR_API(CsrGetNumberOfConsoleInputEvents) DPRINT("CsrGetNumberOfConsoleInputEvents\n"); - Status = ConioLockConsole(ProcessData, Request->Data.GetNumInputEventsRequest.ConsoleHandle, &Console, GENERIC_READ); + Status = ConioLockConsole(CsrGetClientThread()->Process, ApiMessage->Data.GetNumInputEventsRequest.ConsoleHandle, &Console, GENERIC_READ); if (! NT_SUCCESS(Status)) { return Status; @@ -541,7 +543,7 @@ CSR_API(CsrGetNumberOfConsoleInputEvents) ConioUnlockConsole(Console); - Request->Data.GetNumInputEventsRequest.NumInputEvents = NumEvents; + ApiMessage->Data.GetNumInputEventsRequest.NumInputEvents = NumEvents; return STATUS_SUCCESS; } @@ -549,6 +551,7 @@ CSR_API(CsrGetNumberOfConsoleInputEvents) CSR_API(CsrPeekConsoleInput) { NTSTATUS Status; + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; DWORD Length; PLIST_ENTRY CurrentItem; @@ -558,14 +561,14 @@ CSR_API(CsrPeekConsoleInput) DPRINT("CsrPeekConsoleInput\n"); - Status = ConioLockConsole(ProcessData, Request->Data.GetNumInputEventsRequest.ConsoleHandle, &Console, GENERIC_READ); + Status = ConioLockConsole(ProcessData, ApiMessage->Data.GetNumInputEventsRequest.ConsoleHandle, &Console, GENERIC_READ); if(! NT_SUCCESS(Status)) { return Status; } - InputRecord = Request->Data.PeekConsoleInputRequest.InputRecord; - Length = Request->Data.PeekConsoleInputRequest.Length; + InputRecord = ApiMessage->Data.PeekConsoleInputRequest.InputRecord; + Length = ApiMessage->Data.PeekConsoleInputRequest.Length; if (!Win32CsrValidateBuffer(ProcessData, InputRecord, Length, sizeof(INPUT_RECORD))) { @@ -586,7 +589,7 @@ CSR_API(CsrPeekConsoleInput) ++NumItems; *InputRecord = Item->InputEvent; - if (Request->Data.PeekConsoleInputRequest.Unicode == FALSE) + if (ApiMessage->Data.PeekConsoleInputRequest.Unicode == FALSE) { ConioInputEventToAnsi(Console, InputRecord); } @@ -598,7 +601,7 @@ CSR_API(CsrPeekConsoleInput) ConioUnlockConsole(Console); - Request->Data.PeekConsoleInputRequest.Length = NumItems; + ApiMessage->Data.PeekConsoleInputRequest.Length = NumItems; return STATUS_SUCCESS; } @@ -606,6 +609,7 @@ CSR_API(CsrPeekConsoleInput) CSR_API(CsrWriteConsoleInput) { PINPUT_RECORD InputRecord; + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; NTSTATUS Status; DWORD Length; @@ -613,14 +617,14 @@ CSR_API(CsrWriteConsoleInput) DPRINT("CsrWriteConsoleInput\n"); - Status = ConioLockConsole(ProcessData, Request->Data.WriteConsoleInputRequest.ConsoleHandle, &Console, GENERIC_WRITE); + Status = ConioLockConsole(ProcessData, ApiMessage->Data.WriteConsoleInputRequest.ConsoleHandle, &Console, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { return Status; } - InputRecord = Request->Data.WriteConsoleInputRequest.InputRecord; - Length = Request->Data.WriteConsoleInputRequest.Length; + InputRecord = ApiMessage->Data.WriteConsoleInputRequest.InputRecord; + Length = ApiMessage->Data.WriteConsoleInputRequest.Length; if (!Win32CsrValidateBuffer(ProcessData, InputRecord, Length, sizeof(INPUT_RECORD))) { @@ -630,7 +634,7 @@ CSR_API(CsrWriteConsoleInput) for (i = 0; i < Length && NT_SUCCESS(Status); i++) { - if (!Request->Data.WriteConsoleInputRequest.Unicode && + if (!ApiMessage->Data.WriteConsoleInputRequest.Unicode && InputRecord->EventType == KEY_EVENT) { CHAR AsciiChar = InputRecord->Event.KeyEvent.uChar.AsciiChar; @@ -643,7 +647,7 @@ CSR_API(CsrWriteConsoleInput) ConioUnlockConsole(Console); - Request->Data.WriteConsoleInputRequest.Length = i; + ApiMessage->Data.WriteConsoleInputRequest.Length = i; return Status; } diff --git a/win32ss/user/win32csr/conoutput.c b/win32ss/user/win32csr/conoutput.c index 5415a601ab9..5dff1bb6c4e 100644 --- a/win32ss/user/win32csr/conoutput.c +++ b/win32ss/user/win32csr/conoutput.c @@ -359,22 +359,23 @@ CSR_API(CsrWriteConsole) NTSTATUS Status; PCHAR Buffer; PCSRSS_SCREEN_BUFFER Buff; + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; DWORD Written = 0; ULONG Length; - ULONG CharSize = (Request->Data.WriteConsoleRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR)); + ULONG CharSize = (ApiMessage->Data.WriteConsoleRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR)); DPRINT("CsrWriteConsole\n"); - if (Request->Header.u1.s1.TotalLength + if (ApiMessage->Header.u1.s1.TotalLength < CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE) - + (Request->Data.WriteConsoleRequest.NrCharactersToWrite * CharSize)) + + (ApiMessage->Data.WriteConsoleRequest.NrCharactersToWrite * CharSize)) { - DPRINT1("Invalid request size\n"); + DPRINT1("Invalid ApiMessage size\n"); return STATUS_INVALID_PARAMETER; } - Status = ConioLockScreenBuffer(ProcessData, Request->Data.WriteConsoleRequest.ConsoleHandle, &Buff, GENERIC_WRITE); + Status = ConioLockScreenBuffer(ProcessData, ApiMessage->Data.WriteConsoleRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { return Status; @@ -384,24 +385,24 @@ CSR_API(CsrWriteConsole) if (Console->UnpauseEvent) { Status = NtDuplicateObject(GetCurrentProcess(), Console->UnpauseEvent, - ProcessData->ProcessHandle, &Request->Data.WriteConsoleRequest.UnpauseEvent, + ProcessData->ProcessHandle, &ApiMessage->Data.WriteConsoleRequest.UnpauseEvent, SYNCHRONIZE, 0, 0); ConioUnlockScreenBuffer(Buff); return NT_SUCCESS(Status) ? STATUS_PENDING : Status; } - if(Request->Data.WriteConsoleRequest.Unicode) + if(ApiMessage->Data.WriteConsoleRequest.Unicode) { Length = WideCharToMultiByte(Console->OutputCodePage, 0, - (PWCHAR)Request->Data.WriteConsoleRequest.Buffer, - Request->Data.WriteConsoleRequest.NrCharactersToWrite, + (PWCHAR)ApiMessage->Data.WriteConsoleRequest.Buffer, + ApiMessage->Data.WriteConsoleRequest.NrCharactersToWrite, NULL, 0, NULL, NULL); Buffer = RtlAllocateHeap(GetProcessHeap(), 0, Length); if (Buffer) { WideCharToMultiByte(Console->OutputCodePage, 0, - (PWCHAR)Request->Data.WriteConsoleRequest.Buffer, - Request->Data.WriteConsoleRequest.NrCharactersToWrite, + (PWCHAR)ApiMessage->Data.WriteConsoleRequest.Buffer, + ApiMessage->Data.WriteConsoleRequest.NrCharactersToWrite, Buffer, Length, NULL, NULL); } else @@ -411,7 +412,7 @@ CSR_API(CsrWriteConsole) } else { - Buffer = (PCHAR)Request->Data.WriteConsoleRequest.Buffer; + Buffer = (PCHAR)ApiMessage->Data.WriteConsoleRequest.Buffer; } if (Buffer) @@ -419,20 +420,20 @@ CSR_API(CsrWriteConsole) if (NT_SUCCESS(Status)) { Status = ConioWriteConsole(Console, Buff, Buffer, - Request->Data.WriteConsoleRequest.NrCharactersToWrite, TRUE); + ApiMessage->Data.WriteConsoleRequest.NrCharactersToWrite, TRUE); if (NT_SUCCESS(Status)) { - Written = Request->Data.WriteConsoleRequest.NrCharactersToWrite; + Written = ApiMessage->Data.WriteConsoleRequest.NrCharactersToWrite; } } - if (Request->Data.WriteConsoleRequest.Unicode) + if (ApiMessage->Data.WriteConsoleRequest.Unicode) { RtlFreeHeap(GetProcessHeap(), 0, Buffer); } } ConioUnlockScreenBuffer(Buff); - Request->Data.WriteConsoleRequest.NrCharactersWritten = Written; + ApiMessage->Data.WriteConsoleRequest.NrCharactersWritten = Written; return Status; } @@ -477,13 +478,13 @@ CSR_API(CsrGetScreenBufferInfo) DPRINT("CsrGetScreenBufferInfo\n"); - Status = ConioLockScreenBuffer(ProcessData, Request->Data.ScreenBufferInfoRequest.ConsoleHandle, &Buff, GENERIC_READ); + Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.ScreenBufferInfoRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { return Status; } Console = Buff->Header.Console; - pInfo = &Request->Data.ScreenBufferInfoRequest.Info; + pInfo = &ApiMessage->Data.ScreenBufferInfoRequest.Info; pInfo->dwSize.X = Buff->MaxX; pInfo->dwSize.Y = Buff->MaxY; pInfo->dwCursorPosition.X = Buff->CurrentX; @@ -510,15 +511,15 @@ CSR_API(CsrSetCursor) DPRINT("CsrSetCursor\n"); - Status = ConioLockScreenBuffer(ProcessData, Request->Data.SetCursorRequest.ConsoleHandle, &Buff, GENERIC_WRITE); + Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.SetCursorRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { return Status; } Console = Buff->Header.Console; - NewCursorX = Request->Data.SetCursorRequest.Position.X; - NewCursorY = Request->Data.SetCursorRequest.Position.Y; + NewCursorX = ApiMessage->Data.SetCursorRequest.Position.X; + NewCursorY = ApiMessage->Data.SetCursorRequest.Position.Y; if (NewCursorX < 0 || NewCursorX >= Buff->MaxX || NewCursorY < 0 || NewCursorY >= Buff->MaxY) { @@ -582,35 +583,35 @@ CSR_API(CsrWriteConsoleOutputChar) DPRINT("CsrWriteConsoleOutputChar\n"); - CharSize = (Request->Data.WriteConsoleOutputCharRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR)); + CharSize = (ApiMessage->Data.WriteConsoleOutputCharRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR)); - if (Request->Header.u1.s1.TotalLength + if (ApiMessage->Header.u1.s1.TotalLength < CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE_OUTPUT_CHAR) - + (Request->Data.WriteConsoleOutputCharRequest.Length * CharSize)) + + (ApiMessage->Data.WriteConsoleOutputCharRequest.Length * CharSize)) { - DPRINT1("Invalid request size\n"); + DPRINT1("Invalid ApiMessage size\n"); return STATUS_INVALID_PARAMETER; } - Status = ConioLockScreenBuffer(ProcessData, - Request->Data.WriteConsoleOutputCharRequest.ConsoleHandle, + Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, + ApiMessage->Data.WriteConsoleOutputCharRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (NT_SUCCESS(Status)) { Console = Buff->Header.Console; - if(Request->Data.WriteConsoleOutputCharRequest.Unicode) + if(ApiMessage->Data.WriteConsoleOutputCharRequest.Unicode) { Length = WideCharToMultiByte(Console->OutputCodePage, 0, - (PWCHAR)Request->Data.WriteConsoleOutputCharRequest.String, - Request->Data.WriteConsoleOutputCharRequest.Length, + (PWCHAR)ApiMessage->Data.WriteConsoleOutputCharRequest.String, + ApiMessage->Data.WriteConsoleOutputCharRequest.Length, NULL, 0, NULL, NULL); tmpString = String = RtlAllocateHeap(GetProcessHeap(), 0, Length); if (String) { WideCharToMultiByte(Console->OutputCodePage, 0, - (PWCHAR)Request->Data.WriteConsoleOutputCharRequest.String, - Request->Data.WriteConsoleOutputCharRequest.Length, + (PWCHAR)ApiMessage->Data.WriteConsoleOutputCharRequest.String, + ApiMessage->Data.WriteConsoleOutputCharRequest.Length, String, Length, NULL, NULL); } else @@ -620,16 +621,16 @@ CSR_API(CsrWriteConsoleOutputChar) } else { - String = (PCHAR)Request->Data.WriteConsoleOutputCharRequest.String; + String = (PCHAR)ApiMessage->Data.WriteConsoleOutputCharRequest.String; } if (String) { if (NT_SUCCESS(Status)) { - X = Request->Data.WriteConsoleOutputCharRequest.Coord.X; - Y = (Request->Data.WriteConsoleOutputCharRequest.Coord.Y + Buff->VirtualY) % Buff->MaxY; - Length = Request->Data.WriteConsoleOutputCharRequest.Length; + X = ApiMessage->Data.WriteConsoleOutputCharRequest.Coord.X; + Y = (ApiMessage->Data.WriteConsoleOutputCharRequest.Coord.Y + Buff->VirtualY) % Buff->MaxY; + Length = ApiMessage->Data.WriteConsoleOutputCharRequest.Length; Buffer = &Buff->Buffer[2 * (Y * Buff->MaxX + X)]; while (Length--) { @@ -648,23 +649,23 @@ CSR_API(CsrWriteConsoleOutputChar) } if (Buff == Console->ActiveBuffer) { - ConioComputeUpdateRect(Buff, &UpdateRect, &Request->Data.WriteConsoleOutputCharRequest.Coord, - Request->Data.WriteConsoleOutputCharRequest.Length); + ConioComputeUpdateRect(Buff, &UpdateRect, &ApiMessage->Data.WriteConsoleOutputCharRequest.Coord, + ApiMessage->Data.WriteConsoleOutputCharRequest.Length); ConioDrawRegion(Console, &UpdateRect); } - Request->Data.WriteConsoleOutputCharRequest.EndCoord.X = X; - Request->Data.WriteConsoleOutputCharRequest.EndCoord.Y = (Y + Buff->MaxY - Buff->VirtualY) % Buff->MaxY; + ApiMessage->Data.WriteConsoleOutputCharRequest.EndCoord.X = X; + ApiMessage->Data.WriteConsoleOutputCharRequest.EndCoord.Y = (Y + Buff->MaxY - Buff->VirtualY) % Buff->MaxY; } - if (Request->Data.WriteConsoleRequest.Unicode) + if (ApiMessage->Data.WriteConsoleRequest.Unicode) { RtlFreeHeap(GetProcessHeap(), 0, tmpString); } } ConioUnlockScreenBuffer(Buff); } - Request->Data.WriteConsoleOutputCharRequest.NrCharactersWritten = Written; + ApiMessage->Data.WriteConsoleOutputCharRequest.NrCharactersWritten = Written; return Status; } @@ -680,21 +681,21 @@ CSR_API(CsrFillOutputChar) DPRINT("CsrFillOutputChar\n"); - Status = ConioLockScreenBuffer(ProcessData, Request->Data.FillOutputRequest.ConsoleHandle, &Buff, GENERIC_WRITE); + Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.FillOutputRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { return Status; } Console = Buff->Header.Console; - X = Request->Data.FillOutputRequest.Position.X; - Y = (Request->Data.FillOutputRequest.Position.Y + Buff->VirtualY) % Buff->MaxY; + X = ApiMessage->Data.FillOutputRequest.Position.X; + Y = (ApiMessage->Data.FillOutputRequest.Position.Y + Buff->VirtualY) % Buff->MaxY; Buffer = &Buff->Buffer[2 * (Y * Buff->MaxX + X)]; - if(Request->Data.FillOutputRequest.Unicode) - ConsoleUnicodeCharToAnsiChar(Console, &Char, &Request->Data.FillOutputRequest.Char.UnicodeChar); + if(ApiMessage->Data.FillOutputRequest.Unicode) + ConsoleUnicodeCharToAnsiChar(Console, &Char, &ApiMessage->Data.FillOutputRequest.Char.UnicodeChar); else - Char = Request->Data.FillOutputRequest.Char.AsciiChar; - Length = Request->Data.FillOutputRequest.Length; + Char = ApiMessage->Data.FillOutputRequest.Char.AsciiChar; + Length = ApiMessage->Data.FillOutputRequest.Length; while (Length--) { *Buffer = Char; @@ -713,14 +714,14 @@ CSR_API(CsrFillOutputChar) if (Buff == Console->ActiveBuffer) { - ConioComputeUpdateRect(Buff, &UpdateRect, &Request->Data.FillOutputRequest.Position, - Request->Data.FillOutputRequest.Length); + ConioComputeUpdateRect(Buff, &UpdateRect, &ApiMessage->Data.FillOutputRequest.Position, + ApiMessage->Data.FillOutputRequest.Length); ConioDrawRegion(Console, &UpdateRect); } ConioUnlockScreenBuffer(Buff); - Length = Request->Data.FillOutputRequest.Length; - Request->Data.FillOutputRequest.NrCharactersWritten = Length; + Length = ApiMessage->Data.FillOutputRequest.Length; + ApiMessage->Data.FillOutputRequest.NrCharactersWritten = Length; return STATUS_SUCCESS; } @@ -736,16 +737,16 @@ CSR_API(CsrWriteConsoleOutputAttrib) DPRINT("CsrWriteConsoleOutputAttrib\n"); - if (Request->Header.u1.s1.TotalLength + if (ApiMessage->Header.u1.s1.TotalLength < CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB) - + Request->Data.WriteConsoleOutputAttribRequest.Length * sizeof(WORD)) + + ApiMessage->Data.WriteConsoleOutputAttribRequest.Length * sizeof(WORD)) { - DPRINT1("Invalid request size\n"); + DPRINT1("Invalid ApiMessage size\n"); return STATUS_INVALID_PARAMETER; } - Status = ConioLockScreenBuffer(ProcessData, - Request->Data.WriteConsoleOutputAttribRequest.ConsoleHandle, + Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, + ApiMessage->Data.WriteConsoleOutputAttribRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) @@ -754,11 +755,11 @@ CSR_API(CsrWriteConsoleOutputAttrib) } Console = Buff->Header.Console; - X = Request->Data.WriteConsoleOutputAttribRequest.Coord.X; - Y = (Request->Data.WriteConsoleOutputAttribRequest.Coord.Y + Buff->VirtualY) % Buff->MaxY; - Length = Request->Data.WriteConsoleOutputAttribRequest.Length; + X = ApiMessage->Data.WriteConsoleOutputAttribRequest.Coord.X; + Y = (ApiMessage->Data.WriteConsoleOutputAttribRequest.Coord.Y + Buff->VirtualY) % Buff->MaxY; + Length = ApiMessage->Data.WriteConsoleOutputAttribRequest.Length; Buffer = &Buff->Buffer[2 * (Y * Buff->MaxX + X) + 1]; - Attribute = Request->Data.WriteConsoleOutputAttribRequest.Attribute; + Attribute = ApiMessage->Data.WriteConsoleOutputAttribRequest.Attribute; while (Length--) { *Buffer = (UCHAR)(*Attribute++); @@ -776,13 +777,13 @@ CSR_API(CsrWriteConsoleOutputAttrib) if (Buff == Console->ActiveBuffer) { - ConioComputeUpdateRect(Buff, &UpdateRect, &Request->Data.WriteConsoleOutputAttribRequest.Coord, - Request->Data.WriteConsoleOutputAttribRequest.Length); + ConioComputeUpdateRect(Buff, &UpdateRect, &ApiMessage->Data.WriteConsoleOutputAttribRequest.Coord, + ApiMessage->Data.WriteConsoleOutputAttribRequest.Length); ConioDrawRegion(Console, &UpdateRect); } - Request->Data.WriteConsoleOutputAttribRequest.EndCoord.X = X; - Request->Data.WriteConsoleOutputAttribRequest.EndCoord.Y = (Y + Buff->MaxY - Buff->VirtualY) % Buff->MaxY; + ApiMessage->Data.WriteConsoleOutputAttribRequest.EndCoord.X = X; + ApiMessage->Data.WriteConsoleOutputAttribRequest.EndCoord.Y = (Y + Buff->MaxY - Buff->VirtualY) % Buff->MaxY; ConioUnlockScreenBuffer(Buff); @@ -801,17 +802,17 @@ CSR_API(CsrFillOutputAttrib) DPRINT("CsrFillOutputAttrib\n"); - Status = ConioLockScreenBuffer(ProcessData, Request->Data.FillOutputAttribRequest.ConsoleHandle, &Buff, GENERIC_WRITE); + Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.FillOutputAttribRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { return Status; } Console = Buff->Header.Console; - X = Request->Data.FillOutputAttribRequest.Coord.X; - Y = (Request->Data.FillOutputAttribRequest.Coord.Y + Buff->VirtualY) % Buff->MaxY; - Length = Request->Data.FillOutputAttribRequest.Length; - Attr = Request->Data.FillOutputAttribRequest.Attribute; + X = ApiMessage->Data.FillOutputAttribRequest.Coord.X; + Y = (ApiMessage->Data.FillOutputAttribRequest.Coord.Y + Buff->VirtualY) % Buff->MaxY; + Length = ApiMessage->Data.FillOutputAttribRequest.Length; + Attr = ApiMessage->Data.FillOutputAttribRequest.Attribute; Buffer = &Buff->Buffer[(Y * Buff->MaxX * 2) + (X * 2) + 1]; while (Length--) { @@ -830,8 +831,8 @@ CSR_API(CsrFillOutputAttrib) if (Buff == Console->ActiveBuffer) { - ConioComputeUpdateRect(Buff, &UpdateRect, &Request->Data.FillOutputAttribRequest.Coord, - Request->Data.FillOutputAttribRequest.Length); + ConioComputeUpdateRect(Buff, &UpdateRect, &ApiMessage->Data.FillOutputAttribRequest.Coord, + ApiMessage->Data.FillOutputAttribRequest.Length); ConioDrawRegion(Console, &UpdateRect); } @@ -857,13 +858,13 @@ CSR_API(CsrGetCursorInfo) DPRINT("CsrGetCursorInfo\n"); - Status = ConioLockScreenBuffer(ProcessData, Request->Data.GetCursorInfoRequest.ConsoleHandle, &Buff, GENERIC_READ); + Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.GetCursorInfoRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { return Status; } - Request->Data.GetCursorInfoRequest.Info.bVisible = Buff->CursorInfo.bVisible; - Request->Data.GetCursorInfoRequest.Info.dwSize = Buff->CursorInfo.dwSize; + ApiMessage->Data.GetCursorInfoRequest.Info.bVisible = Buff->CursorInfo.bVisible; + ApiMessage->Data.GetCursorInfoRequest.Info.dwSize = Buff->CursorInfo.dwSize; ConioUnlockScreenBuffer(Buff); return STATUS_SUCCESS; @@ -879,15 +880,15 @@ CSR_API(CsrSetCursorInfo) DPRINT("CsrSetCursorInfo\n"); - Status = ConioLockScreenBuffer(ProcessData, Request->Data.SetCursorInfoRequest.ConsoleHandle, &Buff, GENERIC_WRITE); + Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.SetCursorInfoRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { return Status; } Console = Buff->Header.Console; - Size = Request->Data.SetCursorInfoRequest.Info.dwSize; - Visible = Request->Data.SetCursorInfoRequest.Info.bVisible; + Size = ApiMessage->Data.SetCursorInfoRequest.Info.dwSize; + Visible = ApiMessage->Data.SetCursorInfoRequest.Info.bVisible; if (Size < 1) { Size = 1; @@ -923,14 +924,14 @@ CSR_API(CsrSetTextAttrib) DPRINT("CsrSetTextAttrib\n"); - Status = ConioLockScreenBuffer(ProcessData, Request->Data.SetCursorRequest.ConsoleHandle, &Buff, GENERIC_WRITE); + Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.SetCursorRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { return Status; } Console = Buff->Header.Console; - Buff->DefaultAttrib = Request->Data.SetAttribRequest.Attrib; + Buff->DefaultAttrib = ApiMessage->Data.SetAttribRequest.Attrib; if (Buff == Console->ActiveBuffer) { if (! ConioUpdateScreenInfo(Console, Buff)) @@ -947,6 +948,7 @@ CSR_API(CsrSetTextAttrib) CSR_API(CsrCreateScreenBuffer) { + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; PCSRSS_SCREEN_BUFFER Buff; NTSTATUS Status; @@ -991,11 +993,11 @@ CSR_API(CsrCreateScreenBuffer) if (NT_SUCCESS(Status)) { Status = Win32CsrInsertObject(ProcessData, - &Request->Data.CreateScreenBufferRequest.OutputHandle, + &ApiMessage->Data.CreateScreenBufferRequest.OutputHandle, &Buff->Header, - Request->Data.CreateScreenBufferRequest.Access, - Request->Data.CreateScreenBufferRequest.Inheritable, - Request->Data.CreateScreenBufferRequest.ShareMode); + ApiMessage->Data.CreateScreenBufferRequest.Access, + ApiMessage->Data.CreateScreenBufferRequest.Inheritable, + ApiMessage->Data.CreateScreenBufferRequest.ShareMode); } } else @@ -1016,7 +1018,7 @@ CSR_API(CsrSetScreenBuffer) DPRINT("CsrSetScreenBuffer\n"); - Status = ConioLockScreenBuffer(ProcessData, Request->Data.SetScreenBufferRequest.OutputHandle, &Buff, GENERIC_WRITE); + Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.SetScreenBufferRequest.OutputHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { return Status; @@ -1047,6 +1049,7 @@ CSR_API(CsrSetScreenBuffer) CSR_API(CsrWriteConsoleOutput) { SHORT i, X, Y, SizeX, SizeY; + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; PCSRSS_SCREEN_BUFFER Buff; SMALL_RECT ScreenBuffer; @@ -1061,7 +1064,7 @@ CSR_API(CsrWriteConsoleOutput) DPRINT("CsrWriteConsoleOutput\n"); Status = ConioLockScreenBuffer(ProcessData, - Request->Data.WriteConsoleOutputRequest.ConsoleHandle, + ApiMessage->Data.WriteConsoleOutputRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) @@ -1070,16 +1073,16 @@ CSR_API(CsrWriteConsoleOutput) } Console = Buff->Header.Console; - BufferSize = Request->Data.WriteConsoleOutputRequest.BufferSize; - BufferCoord = Request->Data.WriteConsoleOutputRequest.BufferCoord; - CharInfo = Request->Data.WriteConsoleOutputRequest.CharInfo; + BufferSize = ApiMessage->Data.WriteConsoleOutputRequest.BufferSize; + BufferCoord = ApiMessage->Data.WriteConsoleOutputRequest.BufferCoord; + CharInfo = ApiMessage->Data.WriteConsoleOutputRequest.CharInfo; if (!Win32CsrValidateBuffer(ProcessData, CharInfo, BufferSize.X * BufferSize.Y, sizeof(CHAR_INFO))) { ConioUnlockScreenBuffer(Buff); return STATUS_ACCESS_VIOLATION; } - WriteRegion = Request->Data.WriteConsoleOutputRequest.WriteRegion; + WriteRegion = ApiMessage->Data.WriteConsoleOutputRequest.WriteRegion; SizeY = min(BufferSize.Y - BufferCoord.Y, ConioRectHeight(&WriteRegion)); SizeX = min(BufferSize.X - BufferCoord.X, ConioRectWidth(&WriteRegion)); @@ -1104,7 +1107,7 @@ CSR_API(CsrWriteConsoleOutput) for (X = WriteRegion.Left; X <= WriteRegion.Right; X++) { CHAR AsciiChar; - if (Request->Data.WriteConsoleOutputRequest.Unicode) + if (ApiMessage->Data.WriteConsoleOutputRequest.Unicode) { ConsoleUnicodeCharToAnsiChar(Console, &AsciiChar, &CurCharInfo->Char.UnicodeChar); } @@ -1122,10 +1125,10 @@ CSR_API(CsrWriteConsoleOutput) ConioUnlockScreenBuffer(Buff); - Request->Data.WriteConsoleOutputRequest.WriteRegion.Right = WriteRegion.Left + SizeX - 1; - Request->Data.WriteConsoleOutputRequest.WriteRegion.Bottom = WriteRegion.Top + SizeY - 1; - Request->Data.WriteConsoleOutputRequest.WriteRegion.Left = WriteRegion.Left; - Request->Data.WriteConsoleOutputRequest.WriteRegion.Top = WriteRegion.Top; + ApiMessage->Data.WriteConsoleOutputRequest.WriteRegion.Right = WriteRegion.Left + SizeX - 1; + ApiMessage->Data.WriteConsoleOutputRequest.WriteRegion.Bottom = WriteRegion.Top + SizeY - 1; + ApiMessage->Data.WriteConsoleOutputRequest.WriteRegion.Left = WriteRegion.Left; + ApiMessage->Data.WriteConsoleOutputRequest.WriteRegion.Top = WriteRegion.Top; return STATUS_SUCCESS; } @@ -1149,19 +1152,19 @@ CSR_API(CsrScrollConsoleScreenBuffer) DPRINT("CsrScrollConsoleScreenBuffer\n"); - ConsoleHandle = Request->Data.ScrollConsoleScreenBufferRequest.ConsoleHandle; - UseClipRectangle = Request->Data.ScrollConsoleScreenBufferRequest.UseClipRectangle; - DestinationOrigin = Request->Data.ScrollConsoleScreenBufferRequest.DestinationOrigin; - Fill = Request->Data.ScrollConsoleScreenBufferRequest.Fill; + ConsoleHandle = ApiMessage->Data.ScrollConsoleScreenBufferRequest.ConsoleHandle; + UseClipRectangle = ApiMessage->Data.ScrollConsoleScreenBufferRequest.UseClipRectangle; + DestinationOrigin = ApiMessage->Data.ScrollConsoleScreenBufferRequest.DestinationOrigin; + Fill = ApiMessage->Data.ScrollConsoleScreenBufferRequest.Fill; - Status = ConioLockScreenBuffer(ProcessData, ConsoleHandle, &Buff, GENERIC_WRITE); + Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { return Status; } Console = Buff->Header.Console; - ScrollRectangle = Request->Data.ScrollConsoleScreenBufferRequest.ScrollRectangle; + ScrollRectangle = ApiMessage->Data.ScrollConsoleScreenBufferRequest.ScrollRectangle; /* Make sure source rectangle is inside the screen buffer */ ConioInitRect(&ScreenBuffer, 0, 0, Buff->MaxY - 1, Buff->MaxX - 1); @@ -1183,7 +1186,7 @@ CSR_API(CsrScrollConsoleScreenBuffer) if (UseClipRectangle) { - ClipRectangle = Request->Data.ScrollConsoleScreenBufferRequest.ClipRectangle; + ClipRectangle = ApiMessage->Data.ScrollConsoleScreenBufferRequest.ClipRectangle; if (!ConioGetIntersection(&ClipRectangle, &ClipRectangle, &ScreenBuffer)) { ConioUnlockScreenBuffer(Buff); @@ -1201,7 +1204,7 @@ CSR_API(CsrScrollConsoleScreenBuffer) DestinationOrigin.Y + ConioRectHeight(&SrcRegion) - 1, DestinationOrigin.X + ConioRectWidth(&SrcRegion) - 1); - if (Request->Data.ScrollConsoleScreenBufferRequest.Unicode) + if (ApiMessage->Data.ScrollConsoleScreenBufferRequest.Unicode) ConsoleUnicodeCharToAnsiChar(Console, &FillChar, &Fill.Char.UnicodeChar); else FillChar = Fill.Char.AsciiChar; @@ -1236,25 +1239,25 @@ CSR_API(CsrReadConsoleOutputChar) DPRINT("CsrReadConsoleOutputChar\n"); - ReadBuffer = Request->Data.ReadConsoleOutputCharRequest.String; + ReadBuffer = ApiMessage->Data.ReadConsoleOutputCharRequest.String; - CharSize = (Request->Data.ReadConsoleOutputCharRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR)); + CharSize = (ApiMessage->Data.ReadConsoleOutputCharRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR)); - Status = ConioLockScreenBuffer(ProcessData, Request->Data.ReadConsoleOutputCharRequest.ConsoleHandle, &Buff, GENERIC_READ); + Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.ReadConsoleOutputCharRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { return Status; } Console = Buff->Header.Console; - Xpos = Request->Data.ReadConsoleOutputCharRequest.ReadCoord.X; - Ypos = (Request->Data.ReadConsoleOutputCharRequest.ReadCoord.Y + Buff->VirtualY) % Buff->MaxY; + Xpos = ApiMessage->Data.ReadConsoleOutputCharRequest.ReadCoord.X; + Ypos = (ApiMessage->Data.ReadConsoleOutputCharRequest.ReadCoord.Y + Buff->VirtualY) % Buff->MaxY; - for (i = 0; i < Request->Data.ReadConsoleOutputCharRequest.NumCharsToRead; ++i) + for (i = 0; i < ApiMessage->Data.ReadConsoleOutputCharRequest.NumCharsToRead; ++i) { Char = Buff->Buffer[(Xpos * 2) + (Ypos * 2 * Buff->MaxX)]; - if(Request->Data.ReadConsoleOutputCharRequest.Unicode) + if(ApiMessage->Data.ReadConsoleOutputCharRequest.Unicode) { ConsoleAnsiCharToUnicodeChar(Console, (WCHAR*)ReadBuffer, &Char); ReadBuffer += sizeof(WCHAR); @@ -1277,13 +1280,13 @@ CSR_API(CsrReadConsoleOutputChar) } *ReadBuffer = 0; - Request->Data.ReadConsoleOutputCharRequest.EndCoord.X = Xpos; - Request->Data.ReadConsoleOutputCharRequest.EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY; + ApiMessage->Data.ReadConsoleOutputCharRequest.EndCoord.X = Xpos; + ApiMessage->Data.ReadConsoleOutputCharRequest.EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY; ConioUnlockScreenBuffer(Buff); - Request->Data.ReadConsoleOutputCharRequest.CharsRead = (DWORD)((ULONG_PTR)ReadBuffer - (ULONG_PTR)Request->Data.ReadConsoleOutputCharRequest.String) / CharSize; - if (Request->Data.ReadConsoleOutputCharRequest.CharsRead * CharSize + CSR_API_MESSAGE_HEADER_SIZE(CSRSS_READ_CONSOLE_OUTPUT_CHAR) > sizeof(CSR_API_MESSAGE)) + ApiMessage->Data.ReadConsoleOutputCharRequest.CharsRead = (DWORD)((ULONG_PTR)ReadBuffer - (ULONG_PTR)ApiMessage->Data.ReadConsoleOutputCharRequest.String) / CharSize; + if (ApiMessage->Data.ReadConsoleOutputCharRequest.CharsRead * CharSize + CSR_API_MESSAGE_HEADER_SIZE(CSRSS_READ_CONSOLE_OUTPUT_CHAR) > sizeof(CSR_API_MESSAGE)) { DPRINT1("Length won't fit in message\n"); return STATUS_BUFFER_TOO_SMALL; @@ -1304,18 +1307,18 @@ CSR_API(CsrReadConsoleOutputAttrib) DPRINT("CsrReadConsoleOutputAttrib\n"); - ReadBuffer = Request->Data.ReadConsoleOutputAttribRequest.Attribute; + ReadBuffer = ApiMessage->Data.ReadConsoleOutputAttribRequest.Attribute; - Status = ConioLockScreenBuffer(ProcessData, Request->Data.ReadConsoleOutputAttribRequest.ConsoleHandle, &Buff, GENERIC_READ); + Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.ReadConsoleOutputAttribRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { return Status; } - Xpos = Request->Data.ReadConsoleOutputAttribRequest.ReadCoord.X; - Ypos = (Request->Data.ReadConsoleOutputAttribRequest.ReadCoord.Y + Buff->VirtualY) % Buff->MaxY; + Xpos = ApiMessage->Data.ReadConsoleOutputAttribRequest.ReadCoord.X; + Ypos = (ApiMessage->Data.ReadConsoleOutputAttribRequest.ReadCoord.Y + Buff->VirtualY) % Buff->MaxY; - for (i = 0; i < Request->Data.ReadConsoleOutputAttribRequest.NumAttrsToRead; ++i) + for (i = 0; i < ApiMessage->Data.ReadConsoleOutputAttribRequest.NumAttrsToRead; ++i) { *ReadBuffer = Buff->Buffer[(Xpos * 2) + (Ypos * 2 * Buff->MaxX) + 1]; @@ -1336,13 +1339,13 @@ CSR_API(CsrReadConsoleOutputAttrib) *ReadBuffer = 0; - Request->Data.ReadConsoleOutputAttribRequest.EndCoord.X = Xpos; - Request->Data.ReadConsoleOutputAttribRequest.EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY; + ApiMessage->Data.ReadConsoleOutputAttribRequest.EndCoord.X = Xpos; + ApiMessage->Data.ReadConsoleOutputAttribRequest.EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY; ConioUnlockScreenBuffer(Buff); CurrentLength = CSR_API_MESSAGE_HEADER_SIZE(CSRSS_READ_CONSOLE_OUTPUT_ATTRIB) - + Request->Data.ReadConsoleOutputAttribRequest.NumAttrsToRead * sizeof(WORD); + + ApiMessage->Data.ReadConsoleOutputAttribRequest.NumAttrsToRead * sizeof(WORD); if (CurrentLength > sizeof(CSR_API_MESSAGE)) { DPRINT1("Length won't fit in message\n"); @@ -1354,6 +1357,7 @@ CSR_API(CsrReadConsoleOutputAttrib) CSR_API(CsrReadConsoleOutput) { + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCHAR_INFO CharInfo; PCHAR_INFO CurCharInfo; PCSRSS_SCREEN_BUFFER Buff; @@ -1370,16 +1374,16 @@ CSR_API(CsrReadConsoleOutput) DPRINT("CsrReadConsoleOutput\n"); - Status = ConioLockScreenBuffer(ProcessData, Request->Data.ReadConsoleOutputRequest.ConsoleHandle, &Buff, GENERIC_READ); + Status = ConioLockScreenBuffer(ProcessData, ApiMessage->Data.ReadConsoleOutputRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { return Status; } - CharInfo = Request->Data.ReadConsoleOutputRequest.CharInfo; - ReadRegion = Request->Data.ReadConsoleOutputRequest.ReadRegion; - BufferSize = Request->Data.ReadConsoleOutputRequest.BufferSize; - BufferCoord = Request->Data.ReadConsoleOutputRequest.BufferCoord; + CharInfo = ApiMessage->Data.ReadConsoleOutputRequest.CharInfo; + ReadRegion = ApiMessage->Data.ReadConsoleOutputRequest.ReadRegion; + BufferSize = ApiMessage->Data.ReadConsoleOutputRequest.BufferSize; + BufferCoord = ApiMessage->Data.ReadConsoleOutputRequest.BufferCoord; /* FIXME: Is this correct? */ CodePage = ProcessData->Console->OutputCodePage; @@ -1410,7 +1414,7 @@ CSR_API(CsrReadConsoleOutput) Ptr = ConioCoordToPointer(Buff, ReadRegion.Left, Y); for (X = ReadRegion.Left; X < ReadRegion.Right; ++X) { - if (Request->Data.ReadConsoleOutputRequest.Unicode) + if (ApiMessage->Data.ReadConsoleOutputRequest.Unicode) { MultiByteToWideChar(CodePage, 0, (PCHAR)Ptr++, 1, @@ -1427,10 +1431,10 @@ CSR_API(CsrReadConsoleOutput) ConioUnlockScreenBuffer(Buff); - Request->Data.ReadConsoleOutputRequest.ReadRegion.Right = ReadRegion.Left + SizeX - 1; - Request->Data.ReadConsoleOutputRequest.ReadRegion.Bottom = ReadRegion.Top + SizeY - 1; - Request->Data.ReadConsoleOutputRequest.ReadRegion.Left = ReadRegion.Left; - Request->Data.ReadConsoleOutputRequest.ReadRegion.Top = ReadRegion.Top; + ApiMessage->Data.ReadConsoleOutputRequest.ReadRegion.Right = ReadRegion.Left + SizeX - 1; + ApiMessage->Data.ReadConsoleOutputRequest.ReadRegion.Bottom = ReadRegion.Top + SizeY - 1; + ApiMessage->Data.ReadConsoleOutputRequest.ReadRegion.Left = ReadRegion.Left; + ApiMessage->Data.ReadConsoleOutputRequest.ReadRegion.Top = ReadRegion.Top; return STATUS_SUCCESS; } @@ -1441,14 +1445,14 @@ CSR_API(CsrSetScreenBufferSize) PCSRSS_CONSOLE Console; PCSRSS_SCREEN_BUFFER Buff; - Status = ConioLockScreenBuffer(ProcessData, Request->Data.SetScreenBufferSize.OutputHandle, &Buff, GENERIC_WRITE); + Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.SetScreenBufferSize.OutputHandle, &Buff, GENERIC_WRITE); if (!NT_SUCCESS(Status)) { return Status; } Console = Buff->Header.Console; - Status = ConioResizeBuffer(Console, Buff, Request->Data.SetScreenBufferSize.Size); + Status = ConioResizeBuffer(Console, Buff, ApiMessage->Data.SetScreenBufferSize.Size); ConioUnlockScreenBuffer(Buff); return Status; diff --git a/win32ss/user/win32csr/console.c b/win32ss/user/win32csr/console.c index cfb1eba4d5f..93186eb1ec7 100644 --- a/win32ss/user/win32csr/console.c +++ b/win32ss/user/win32csr/console.c @@ -174,6 +174,7 @@ CsrInitConsole(PCSRSS_CONSOLE Console, int ShowCmd) CSR_API(CsrAllocConsole) { + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; NTSTATUS Status = STATUS_SUCCESS; BOOLEAN NewConsole = FALSE; @@ -189,7 +190,7 @@ CSR_API(CsrAllocConsole) } /* If we don't need a console, then get out of here */ - if (!Request->Data.AllocConsoleRequest.ConsoleNeeded) + if (!ApiMessage->Data.AllocConsoleRequest.ConsoleNeeded) { DPRINT("No console needed\n"); RtlLeaveCriticalSection(&ProcessData->HandleTableLock); @@ -197,8 +198,8 @@ CSR_API(CsrAllocConsole) } /* If we already have one, then don't create a new one... */ - if (!Request->Data.AllocConsoleRequest.Console || - Request->Data.AllocConsoleRequest.Console != ProcessData->ParentConsole) + if (!ApiMessage->Data.AllocConsoleRequest.Console || + ApiMessage->Data.AllocConsoleRequest.Console != ProcessData->ParentConsole) { /* Allocate a console structure */ NewConsole = TRUE; @@ -214,7 +215,7 @@ CSR_API(CsrAllocConsole) /* insert process data required for GUI initialization */ InsertHeadList(&Console->ProcessList, &ProcessData->ConsoleLink); /* Initialize the Console */ - Status = CsrInitConsole(Console, Request->Data.AllocConsoleRequest.ShowCmd); + Status = CsrInitConsole(Console, ApiMessage->Data.AllocConsoleRequest.ShowCmd); if (!NT_SUCCESS(Status)) { DPRINT1("Console init failed\n"); @@ -226,14 +227,14 @@ CSR_API(CsrAllocConsole) else { /* Reuse our current console */ - Console = Request->Data.AllocConsoleRequest.Console; + Console = ApiMessage->Data.AllocConsoleRequest.Console; } /* Set the Process Console */ ProcessData->Console = Console; /* Return it to the caller */ - Request->Data.AllocConsoleRequest.Console = Console; + ApiMessage->Data.AllocConsoleRequest.Console = Console; /* Add a reference count because the process is tied to the console */ _InterlockedIncrement(&Console->ReferenceCount); @@ -242,7 +243,7 @@ CSR_API(CsrAllocConsole) { /* Insert the Objects */ Status = Win32CsrInsertObject(ProcessData, - &Request->Data.AllocConsoleRequest.InputHandle, + &ApiMessage->Data.AllocConsoleRequest.InputHandle, &Console->Header, GENERIC_READ | GENERIC_WRITE, TRUE, @@ -257,7 +258,7 @@ CSR_API(CsrAllocConsole) } Status = Win32CsrInsertObject(ProcessData, - &Request->Data.AllocConsoleRequest.OutputHandle, + &ApiMessage->Data.AllocConsoleRequest.OutputHandle, &Console->ActiveBuffer->Header, GENERIC_READ | GENERIC_WRITE, TRUE, @@ -267,7 +268,7 @@ CSR_API(CsrAllocConsole) DPRINT1("Failed to insert object\n"); ConioDeleteConsole((Object_t *) Console); Win32CsrReleaseObject(ProcessData, - Request->Data.AllocConsoleRequest.InputHandle); + ApiMessage->Data.AllocConsoleRequest.InputHandle); ProcessData->Console = 0; RtlLeaveCriticalSection(&ProcessData->HandleTableLock); return Status; @@ -288,9 +289,9 @@ CSR_API(CsrAllocConsole) if (NewConsole || !ProcessData->bInheritHandles) { Win32CsrReleaseObject(ProcessData, - Request->Data.AllocConsoleRequest.OutputHandle); + ApiMessage->Data.AllocConsoleRequest.OutputHandle); Win32CsrReleaseObject(ProcessData, - Request->Data.AllocConsoleRequest.InputHandle); + ApiMessage->Data.AllocConsoleRequest.InputHandle); } ProcessData->Console = 0; RtlLeaveCriticalSection(&ProcessData->HandleTableLock); @@ -298,7 +299,7 @@ CSR_API(CsrAllocConsole) } /* Set the Ctrl Dispatcher */ - ProcessData->CtrlDispatcher = Request->Data.AllocConsoleRequest.CtrlDispatcher; + ProcessData->CtrlDispatcher = ApiMessage->Data.AllocConsoleRequest.CtrlDispatcher; DPRINT("CSRSS:CtrlDispatcher address: %x\n", ProcessData->CtrlDispatcher); if (!NewConsole) @@ -313,7 +314,7 @@ CSR_API(CsrAllocConsole) CSR_API(CsrFreeConsole) { - Win32CsrReleaseConsole(ProcessData); + Win32CsrReleaseConsole(CsrGetClientThread()->Process); return STATUS_SUCCESS; } @@ -390,8 +391,8 @@ CSR_API(CsrSetConsoleMode) DPRINT("CsrSetConsoleMode\n"); - Status = Win32CsrLockObject(ProcessData, - Request->Data.SetConsoleModeRequest.ConsoleHandle, + Status = Win32CsrLockObject(CsrGetClientThread()->Process, + ApiMessage->Data.SetConsoleModeRequest.ConsoleHandle, (Object_t **) &Console, GENERIC_WRITE, 0); if (! NT_SUCCESS(Status)) { @@ -401,11 +402,11 @@ CSR_API(CsrSetConsoleMode) Buff = (PCSRSS_SCREEN_BUFFER)Console; if (CONIO_CONSOLE_MAGIC == Console->Header.Type) { - Console->Mode = Request->Data.SetConsoleModeRequest.Mode & CONSOLE_INPUT_MODE_VALID; + Console->Mode = ApiMessage->Data.SetConsoleModeRequest.Mode & CONSOLE_INPUT_MODE_VALID; } else if (CONIO_SCREEN_BUFFER_MAGIC == Console->Header.Type) { - Buff->Mode = Request->Data.SetConsoleModeRequest.Mode & CONSOLE_OUTPUT_MODE_VALID; + Buff->Mode = ApiMessage->Data.SetConsoleModeRequest.Mode & CONSOLE_OUTPUT_MODE_VALID; } else { @@ -425,7 +426,7 @@ CSR_API(CsrGetConsoleMode) DPRINT("CsrGetConsoleMode\n"); - Status = Win32CsrLockObject(ProcessData, Request->Data.GetConsoleModeRequest.ConsoleHandle, + Status = Win32CsrLockObject(CsrGetClientThread()->Process, ApiMessage->Data.GetConsoleModeRequest.ConsoleHandle, (Object_t **) &Console, GENERIC_READ, 0); if (! NT_SUCCESS(Status)) { @@ -435,11 +436,11 @@ CSR_API(CsrGetConsoleMode) Buff = (PCSRSS_SCREEN_BUFFER) Console; if (CONIO_CONSOLE_MAGIC == Console->Header.Type) { - Request->Data.GetConsoleModeRequest.ConsoleMode = Console->Mode; + ApiMessage->Data.GetConsoleModeRequest.ConsoleMode = Console->Mode; } else if (CONIO_SCREEN_BUFFER_MAGIC == Buff->Header.Type) { - Request->Data.GetConsoleModeRequest.ConsoleMode = Buff->Mode; + ApiMessage->Data.GetConsoleModeRequest.ConsoleMode = Buff->Mode; } else { @@ -453,13 +454,14 @@ CSR_API(CsrGetConsoleMode) CSR_API(CsrSetTitle) { NTSTATUS Status; + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; PWCHAR Buffer; DPRINT("CsrSetTitle\n"); - if (!Win32CsrValidateBuffer(ProcessData, Request->Data.SetTitleRequest.Title, - Request->Data.SetTitleRequest.Length, 1)) + if (!Win32CsrValidateBuffer(ProcessData, ApiMessage->Data.SetTitleRequest.Title, + ApiMessage->Data.SetTitleRequest.Length, 1)) { return STATUS_ACCESS_VIOLATION; } @@ -467,14 +469,14 @@ CSR_API(CsrSetTitle) Status = ConioConsoleFromProcessData(ProcessData, &Console); if(NT_SUCCESS(Status)) { - Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, Request->Data.SetTitleRequest.Length); + Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, ApiMessage->Data.SetTitleRequest.Length); if (Buffer) { /* copy title to console */ RtlFreeUnicodeString(&Console->Title); Console->Title.Buffer = Buffer; - Console->Title.Length = Console->Title.MaximumLength = Request->Data.SetTitleRequest.Length; - memcpy(Console->Title.Buffer, Request->Data.SetTitleRequest.Title, Console->Title.Length); + Console->Title.Length = Console->Title.MaximumLength = ApiMessage->Data.SetTitleRequest.Length; + memcpy(Console->Title.Buffer, ApiMessage->Data.SetTitleRequest.Title, Console->Title.Length); if (! ConioChangeTitle(Console)) { Status = STATUS_UNSUCCESSFUL; @@ -497,14 +499,15 @@ CSR_API(CsrSetTitle) CSR_API(CsrGetTitle) { NTSTATUS Status; + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; DWORD Length; DPRINT("CsrGetTitle\n"); - if (!Win32CsrValidateBuffer(ProcessData, Request->Data.GetTitleRequest.Title, - Request->Data.GetTitleRequest.Length, 1)) + if (!Win32CsrValidateBuffer(ProcessData, ApiMessage->Data.GetTitleRequest.Title, + ApiMessage->Data.GetTitleRequest.Length, 1)) { return STATUS_ACCESS_VIOLATION; } @@ -517,14 +520,14 @@ CSR_API(CsrGetTitle) } /* Copy title of the console to the user title buffer */ - if (Request->Data.GetTitleRequest.Length >= sizeof(WCHAR)) + if (ApiMessage->Data.GetTitleRequest.Length >= sizeof(WCHAR)) { - Length = min(Request->Data.GetTitleRequest.Length - sizeof(WCHAR), Console->Title.Length); - memcpy(Request->Data.GetTitleRequest.Title, Console->Title.Buffer, Length); - Request->Data.GetTitleRequest.Title[Length / sizeof(WCHAR)] = L'\0'; + Length = min(ApiMessage->Data.GetTitleRequest.Length - sizeof(WCHAR), Console->Title.Length); + memcpy(ApiMessage->Data.GetTitleRequest.Title, Console->Title.Buffer, Length); + ApiMessage->Data.GetTitleRequest.Title[Length / sizeof(WCHAR)] = L'\0'; } - Request->Data.GetTitleRequest.Length = Console->Title.Length; + ApiMessage->Data.GetTitleRequest.Length = Console->Title.Length; ConioUnlockConsole(Console); return STATUS_SUCCESS; @@ -572,8 +575,8 @@ CSR_API(CsrHardwareStateProperty) DPRINT("CsrHardwareStateProperty\n"); - Status = ConioLockConsole(ProcessData, - Request->Data.ConsoleHardwareStateRequest.ConsoleHandle, + Status = ConioLockConsole(CsrGetClientThread()->Process, + ApiMessage->Data.ConsoleHardwareStateRequest.ConsoleHandle, &Console, GENERIC_READ); if (! NT_SUCCESS(Status)) @@ -582,15 +585,15 @@ CSR_API(CsrHardwareStateProperty) return Status; } - switch (Request->Data.ConsoleHardwareStateRequest.SetGet) + switch (ApiMessage->Data.ConsoleHardwareStateRequest.SetGet) { case CONSOLE_HARDWARE_STATE_GET: - Request->Data.ConsoleHardwareStateRequest.State = Console->HardwareState; + ApiMessage->Data.ConsoleHardwareStateRequest.State = Console->HardwareState; break; case CONSOLE_HARDWARE_STATE_SET: DPRINT("Setting console hardware state.\n"); - Status = SetConsoleHardwareState(Console, Request->Data.ConsoleHardwareStateRequest.State); + Status = SetConsoleHardwareState(Console, ApiMessage->Data.ConsoleHardwareStateRequest.State); break; default: @@ -610,13 +613,13 @@ CSR_API(CsrGetConsoleWindow) DPRINT("CsrGetConsoleWindow\n"); - Status = ConioConsoleFromProcessData(ProcessData, &Console); + Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); if (! NT_SUCCESS(Status)) { return Status; } - Request->Data.GetConsoleWindowRequest.WindowHandle = Console->hWindow; + ApiMessage->Data.GetConsoleWindowRequest.WindowHandle = Console->hWindow; ConioUnlockConsole(Console); return STATUS_SUCCESS; @@ -629,13 +632,13 @@ CSR_API(CsrSetConsoleIcon) DPRINT("CsrSetConsoleIcon\n"); - Status = ConioConsoleFromProcessData(ProcessData, &Console); + Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); if (! NT_SUCCESS(Status)) { return Status; } - Status = (ConioChangeIcon(Console, Request->Data.SetConsoleIconRequest.WindowIcon) + Status = (ConioChangeIcon(Console, ApiMessage->Data.SetConsoleIconRequest.WindowIcon) ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL); ConioUnlockConsole(Console); @@ -649,13 +652,13 @@ CSR_API(CsrGetConsoleCodePage) DPRINT("CsrGetConsoleCodePage\n"); - Status = ConioConsoleFromProcessData(ProcessData, &Console); + Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); if (! NT_SUCCESS(Status)) { return Status; } - Request->Data.GetConsoleCodePage.CodePage = Console->CodePage; + ApiMessage->Data.GetConsoleCodePage.CodePage = Console->CodePage; ConioUnlockConsole(Console); return STATUS_SUCCESS; } @@ -667,15 +670,15 @@ CSR_API(CsrSetConsoleCodePage) DPRINT("CsrSetConsoleCodePage\n"); - Status = ConioConsoleFromProcessData(ProcessData, &Console); + Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); if (! NT_SUCCESS(Status)) { return Status; } - if (IsValidCodePage(Request->Data.SetConsoleCodePage.CodePage)) + if (IsValidCodePage(ApiMessage->Data.SetConsoleCodePage.CodePage)) { - Console->CodePage = Request->Data.SetConsoleCodePage.CodePage; + Console->CodePage = ApiMessage->Data.SetConsoleCodePage.CodePage; ConioUnlockConsole(Console); return STATUS_SUCCESS; } @@ -691,13 +694,13 @@ CSR_API(CsrGetConsoleOutputCodePage) DPRINT("CsrGetConsoleOutputCodePage\n"); - Status = ConioConsoleFromProcessData(ProcessData, &Console); + Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); if (! NT_SUCCESS(Status)) { return Status; } - Request->Data.GetConsoleOutputCodePage.CodePage = Console->OutputCodePage; + ApiMessage->Data.GetConsoleOutputCodePage.CodePage = Console->OutputCodePage; ConioUnlockConsole(Console); return STATUS_SUCCESS; } @@ -709,15 +712,15 @@ CSR_API(CsrSetConsoleOutputCodePage) DPRINT("CsrSetConsoleOutputCodePage\n"); - Status = ConioConsoleFromProcessData(ProcessData, &Console); + Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); if (! NT_SUCCESS(Status)) { return Status; } - if (IsValidCodePage(Request->Data.SetConsoleOutputCodePage.CodePage)) + if (IsValidCodePage(ApiMessage->Data.SetConsoleOutputCodePage.CodePage)) { - Console->OutputCodePage = Request->Data.SetConsoleOutputCodePage.CodePage; + Console->OutputCodePage = ApiMessage->Data.SetConsoleOutputCodePage.CodePage; ConioUnlockConsole(Console); return STATUS_SUCCESS; } @@ -729,6 +732,7 @@ CSR_API(CsrSetConsoleOutputCodePage) CSR_API(CsrGetProcessList) { PDWORD Buffer; + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; PCSR_PROCESS current; PLIST_ENTRY current_entry; @@ -737,8 +741,8 @@ CSR_API(CsrGetProcessList) DPRINT("CsrGetProcessList\n"); - Buffer = Request->Data.GetProcessListRequest.ProcessId; - if (!Win32CsrValidateBuffer(ProcessData, Buffer, Request->Data.GetProcessListRequest.nMaxIds, sizeof(DWORD))) + Buffer = ApiMessage->Data.GetProcessListRequest.ProcessId; + if (!Win32CsrValidateBuffer(ProcessData, Buffer, ApiMessage->Data.GetProcessListRequest.nMaxIds, sizeof(DWORD))) return STATUS_ACCESS_VIOLATION; Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -752,7 +756,7 @@ CSR_API(CsrGetProcessList) current_entry = current_entry->Flink) { current = CONTAINING_RECORD(current_entry, CSR_PROCESS, ConsoleLink); - if (++nItems <= Request->Data.GetProcessListRequest.nMaxIds) + if (++nItems <= ApiMessage->Data.GetProcessListRequest.nMaxIds) { *Buffer++ = HandleToUlong(current->ClientId.UniqueProcess); } @@ -760,7 +764,7 @@ CSR_API(CsrGetProcessList) ConioUnlockConsole(Console); - Request->Data.GetProcessListRequest.nProcessIdsTotal = nItems; + ApiMessage->Data.GetProcessListRequest.nProcessIdsTotal = nItems; return STATUS_SUCCESS; } @@ -772,13 +776,13 @@ CSR_API(CsrGenerateCtrlEvent) DWORD Group; NTSTATUS Status; - Status = ConioConsoleFromProcessData(ProcessData, &Console); + Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); if (! NT_SUCCESS(Status)) { return Status; } - Group = Request->Data.GenerateCtrlEvent.ProcessGroup; + Group = ApiMessage->Data.GenerateCtrlEvent.ProcessGroup; Status = STATUS_INVALID_PARAMETER; for (current_entry = Console->ProcessList.Flink; current_entry != &Console->ProcessList; @@ -787,7 +791,7 @@ CSR_API(CsrGenerateCtrlEvent) current = CONTAINING_RECORD(current_entry, CSR_PROCESS, ConsoleLink); if (Group == 0 || current->ProcessGroupId == Group) { - ConioConsoleCtrlEvent(Request->Data.GenerateCtrlEvent.Event, current); + ConioConsoleCtrlEvent(ApiMessage->Data.GenerateCtrlEvent.Event, current); Status = STATUS_SUCCESS; } } @@ -802,12 +806,12 @@ CSR_API(CsrGetConsoleSelectionInfo) NTSTATUS Status; PCSRSS_CONSOLE Console; - Status = ConioConsoleFromProcessData(ProcessData, &Console); + Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); if (NT_SUCCESS(Status)) { - memset(&Request->Data.GetConsoleSelectionInfo.Info, 0, sizeof(CONSOLE_SELECTION_INFO)); + memset(&ApiMessage->Data.GetConsoleSelectionInfo.Info, 0, sizeof(CONSOLE_SELECTION_INFO)); if (Console->Selection.dwFlags != 0) - Request->Data.GetConsoleSelectionInfo.Info = Console->Selection; + ApiMessage->Data.GetConsoleSelectionInfo.Info = Console->Selection; ConioUnlockConsole(Console); } return Status; diff --git a/win32ss/user/win32csr/desktopbg.c b/win32ss/user/win32csr/desktopbg.c index 4edd7a3fb2c..0235ac06b01 100644 --- a/win32ss/user/win32csr/desktopbg.c +++ b/win32ss/user/win32csr/desktopbg.c @@ -254,7 +254,7 @@ CSR_API(CsrCreateDesktop) * The desktop handle we got from win32k is in * the scope of CSRSS so we can just use it. */ - ThreadData.Desktop = Request->Data.CreateDesktopRequest.DesktopHandle; + ThreadData.Desktop = ApiMessage->Data.CreateDesktopRequest.DesktopHandle; ThreadData.Event = CreateEventW(NULL, FALSE, FALSE, NULL); @@ -292,14 +292,14 @@ CSR_API(CsrShowDesktop) PRIVATE_NOTIFY_DESKTOP nmh; DPRINT("CsrShowDesktop\n"); - nmh.hdr.hwndFrom = Request->Data.ShowDesktopRequest.DesktopWindow; + nmh.hdr.hwndFrom = ApiMessage->Data.ShowDesktopRequest.DesktopWindow; nmh.hdr.idFrom = 0; nmh.hdr.code = PM_SHOW_DESKTOP; - nmh.ShowDesktop.Width = (int)Request->Data.ShowDesktopRequest.Width; - nmh.ShowDesktop.Height = (int)Request->Data.ShowDesktopRequest.Height; + nmh.ShowDesktop.Width = (int)ApiMessage->Data.ShowDesktopRequest.Width; + nmh.ShowDesktop.Height = (int)ApiMessage->Data.ShowDesktopRequest.Height; - if (SendMessageW(Request->Data.ShowDesktopRequest.DesktopWindow, + if (SendMessageW(ApiMessage->Data.ShowDesktopRequest.DesktopWindow, WM_NOTIFY, (WPARAM)nmh.hdr.hwndFrom, (LPARAM)&nmh)) @@ -316,11 +316,11 @@ CSR_API(CsrHideDesktop) PRIVATE_NOTIFY_DESKTOP nmh; DPRINT("CsrHideDesktop\n"); - nmh.hdr.hwndFrom = Request->Data.ShowDesktopRequest.DesktopWindow; + nmh.hdr.hwndFrom = ApiMessage->Data.ShowDesktopRequest.DesktopWindow; nmh.hdr.idFrom = 0; nmh.hdr.code = PM_HIDE_DESKTOP; - if (SendMessageW(Request->Data.ShowDesktopRequest.DesktopWindow, + if (SendMessageW(ApiMessage->Data.ShowDesktopRequest.DesktopWindow, WM_NOTIFY, (WPARAM)nmh.hdr.hwndFrom, (LPARAM)&nmh)) diff --git a/win32ss/user/win32csr/exitros.c b/win32ss/user/win32csr/exitros.c index fd11c1651c0..9fe92cede38 100644 --- a/win32ss/user/win32csr/exitros.c +++ b/win32ss/user/win32csr/exitros.c @@ -18,20 +18,20 @@ static HANDLE LogonProcess = NULL; CSR_API(CsrRegisterLogonProcess) { - if (Request->Data.RegisterLogonProcessRequest.Register) + if (ApiMessage->Data.RegisterLogonProcessRequest.Register) { if (0 != LogonProcess) { return STATUS_LOGON_SESSION_EXISTS; } - LogonProcess = Request->Data.RegisterLogonProcessRequest.ProcessId; + LogonProcess = ApiMessage->Data.RegisterLogonProcessRequest.ProcessId; } else { - if (Request->Header.ClientId.UniqueProcess != LogonProcess) + if (ApiMessage->Header.ClientId.UniqueProcess != LogonProcess) { DPRINT1("Current logon process 0x%x, can't deregister from process 0x%x\n", - LogonProcess, Request->Header.ClientId.UniqueProcess); + LogonProcess, ApiMessage->Header.ClientId.UniqueProcess); return STATUS_NOT_LOGON_PROCESS; } LogonProcess = 0; @@ -44,7 +44,7 @@ CSR_API(CsrSetLogonNotifyWindow) { DWORD WindowCreator; - if (0 == GetWindowThreadProcessId(Request->Data.SetLogonNotifyWindowRequest.LogonNotifyWindow, + if (0 == GetWindowThreadProcessId(ApiMessage->Data.SetLogonNotifyWindowRequest.LogonNotifyWindow, &WindowCreator)) { DPRINT1("Can't get window creator\n"); @@ -56,7 +56,7 @@ CSR_API(CsrSetLogonNotifyWindow) return STATUS_ACCESS_DENIED; } - LogonNotifyWindow = Request->Data.SetLogonNotifyWindowRequest.LogonNotifyWindow; + LogonNotifyWindow = ApiMessage->Data.SetLogonNotifyWindowRequest.LogonNotifyWindow; return STATUS_SUCCESS; } @@ -915,16 +915,16 @@ UserExitReactos(DWORD UserProcessId, UINT Flags) CSR_API(CsrExitReactos) { - if (0 == (Request->Data.ExitReactosRequest.Flags & EWX_INTERNAL_FLAG)) + if (0 == (ApiMessage->Data.ExitReactosRequest.Flags & EWX_INTERNAL_FLAG)) { - return UserExitReactos((DWORD_PTR) Request->Header.ClientId.UniqueProcess, - Request->Data.ExitReactosRequest.Flags); + return UserExitReactos((DWORD_PTR) ApiMessage->Header.ClientId.UniqueProcess, + ApiMessage->Data.ExitReactosRequest.Flags); } else { - return InternalExitReactos((DWORD_PTR) Request->Header.ClientId.UniqueProcess, - (DWORD_PTR) Request->Header.ClientId.UniqueThread, - Request->Data.ExitReactosRequest.Flags); + return InternalExitReactos((DWORD_PTR) ApiMessage->Header.ClientId.UniqueProcess, + (DWORD_PTR) ApiMessage->Header.ClientId.UniqueThread, + ApiMessage->Data.ExitReactosRequest.Flags); } } diff --git a/win32ss/user/win32csr/file.c b/win32ss/user/win32csr/file.c index 638769fad28..5ac4f2ddd02 100644 --- a/win32ss/user/win32csr/file.c +++ b/win32ss/user/win32csr/file.c @@ -73,9 +73,9 @@ CSR_API(CsrGetTempFile) DPRINT("CsrGetTempFile entered\n"); /* Return 16-bits ID */ - Request->Data.GetTempFile.UniqueID = (++CsrGetTempFileUnique & 0xFFFF); + ApiMessage->Data.GetTempFile.UniqueID = (++CsrGetTempFileUnique & 0xFFFF); - DPRINT("Returning: %u\n", Request->Data.GetTempFile.UniqueID); + DPRINT("Returning: %u\n", ApiMessage->Data.GetTempFile.UniqueID); return STATUS_SUCCESS; } @@ -106,16 +106,16 @@ CSR_API(CsrDefineDosDevice) PWSTR lpBuffer; DPRINT("CsrDefineDosDevice entered, Flags:%d, DeviceName:%wZ, TargetName:%wZ\n", - Request->Data.DefineDosDeviceRequest.dwFlags, - &Request->Data.DefineDosDeviceRequest.DeviceName, - &Request->Data.DefineDosDeviceRequest.TargetName); + ApiMessage->Data.DefineDosDeviceRequest.dwFlags, + &ApiMessage->Data.DefineDosDeviceRequest.DeviceName, + &ApiMessage->Data.DefineDosDeviceRequest.TargetName); Matched = AddHistory = FALSE; HistoryEntry = NULL; AdminSid = SystemSid = WorldSid = NULL; SecurityDescriptor = NULL; ListHead = &DosDeviceHistory; - dwFlags = Request->Data.DefineDosDeviceRequest.dwFlags; + dwFlags = ApiMessage->Data.DefineDosDeviceRequest.dwFlags; /* Validate the flags */ if ( (dwFlags & 0xFFFFFFF0) || @@ -137,13 +137,13 @@ CSR_API(CsrDefineDosDevice) { Status = RtlUpcaseUnicodeString(&RequestDeviceName, - &Request->Data.DefineDosDeviceRequest.DeviceName, + &ApiMessage->Data.DefineDosDeviceRequest.DeviceName, TRUE); if (! NT_SUCCESS(Status)) _SEH2_LEAVE; RequestLinkTarget = - &Request->Data.DefineDosDeviceRequest.TargetName; + &ApiMessage->Data.DefineDosDeviceRequest.TargetName; lpBuffer = (PWSTR) RtlAllocateHeap(Win32CsrApiHeap, HEAP_ZERO_MEMORY, RequestDeviceName.MaximumLength + 5 * sizeof(WCHAR)); diff --git a/win32ss/user/win32csr/handle.c b/win32ss/user/win32csr/handle.c index 1b3201d5c19..dec33a25097 100644 --- a/win32ss/user/win32csr/handle.c +++ b/win32ss/user/win32csr/handle.c @@ -259,20 +259,21 @@ Win32CsrDuplicateHandleTable( CSR_API(CsrGetHandle) { NTSTATUS Status = STATUS_SUCCESS; + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; - Request->Data.GetInputHandleRequest.Handle = INVALID_HANDLE_VALUE; + ApiMessage->Data.GetInputHandleRequest.Handle = INVALID_HANDLE_VALUE; RtlEnterCriticalSection(&ProcessData->HandleTableLock); if (ProcessData->Console) { - DWORD DesiredAccess = Request->Data.GetInputHandleRequest.Access; - DWORD ShareMode = Request->Data.GetInputHandleRequest.ShareMode; + DWORD DesiredAccess = ApiMessage->Data.GetInputHandleRequest.Access; + DWORD ShareMode = ApiMessage->Data.GetInputHandleRequest.ShareMode; PCSRSS_CONSOLE Console = ProcessData->Console; Object_t *Object; EnterCriticalSection(&Console->Lock); - if (Request->Type == GET_OUTPUT_HANDLE) + if (ApiMessage->ApiNumber == GET_OUTPUT_HANDLE) Object = &Console->ActiveBuffer->Header; else Object = &Console->Header; @@ -288,10 +289,10 @@ CSR_API(CsrGetHandle) else { Status = Win32CsrInsertObject(ProcessData, - &Request->Data.GetInputHandleRequest.Handle, + &ApiMessage->Data.GetInputHandleRequest.Handle, Object, DesiredAccess, - Request->Data.GetInputHandleRequest.Inheritable, + ApiMessage->Data.GetInputHandleRequest.Inheritable, ShareMode); } LeaveCriticalSection(&Console->Lock); @@ -303,15 +304,16 @@ CSR_API(CsrGetHandle) CSR_API(CsrCloseHandle) { - return Win32CsrReleaseObject(ProcessData, Request->Data.CloseHandleRequest.Handle); + return Win32CsrReleaseObject(CsrGetClientThread()->Process, ApiMessage->Data.CloseHandleRequest.Handle); } CSR_API(CsrVerifyHandle) { ULONG_PTR Index; NTSTATUS Status = STATUS_SUCCESS; + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; - Index = (ULONG_PTR)Request->Data.VerifyHandleRequest.Handle >> 2; + Index = (ULONG_PTR)ApiMessage->Data.VerifyHandleRequest.Handle >> 2; RtlEnterCriticalSection(&ProcessData->HandleTableLock); if (Index >= ProcessData->HandleTableSize || ProcessData->HandleTable[Index].Object == NULL) @@ -329,53 +331,54 @@ CSR_API(CsrDuplicateHandle) ULONG_PTR Index; PCSRSS_HANDLE Entry; DWORD DesiredAccess; + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; - Index = (ULONG_PTR)Request->Data.DuplicateHandleRequest.Handle >> 2; + Index = (ULONG_PTR)ApiMessage->Data.DuplicateHandleRequest.Handle >> 2; RtlEnterCriticalSection(&ProcessData->HandleTableLock); if (Index >= ProcessData->HandleTableSize || (Entry = &ProcessData->HandleTable[Index])->Object == NULL) { - DPRINT1("Couldn't dup invalid handle %p\n", Request->Data.DuplicateHandleRequest.Handle); + DPRINT1("Couldn't dup invalid handle %p\n", ApiMessage->Data.DuplicateHandleRequest.Handle); RtlLeaveCriticalSection(&ProcessData->HandleTableLock); return STATUS_INVALID_HANDLE; } - if (Request->Data.DuplicateHandleRequest.Options & DUPLICATE_SAME_ACCESS) + if (ApiMessage->Data.DuplicateHandleRequest.Options & DUPLICATE_SAME_ACCESS) { DesiredAccess = Entry->Access; } else { - DesiredAccess = Request->Data.DuplicateHandleRequest.Access; + DesiredAccess = ApiMessage->Data.DuplicateHandleRequest.Access; /* Make sure the source handle has all the desired flags */ if (~Entry->Access & DesiredAccess) { DPRINT1("Handle %p only has access %X; requested %X\n", - Request->Data.DuplicateHandleRequest.Handle, Entry->Access, DesiredAccess); + ApiMessage->Data.DuplicateHandleRequest.Handle, Entry->Access, DesiredAccess); RtlLeaveCriticalSection(&ProcessData->HandleTableLock); return STATUS_INVALID_PARAMETER; } } - Request->Status = Win32CsrInsertObject(ProcessData, - &Request->Data.DuplicateHandleRequest.Handle, + ApiMessage->Status = Win32CsrInsertObject(ProcessData, + &ApiMessage->Data.DuplicateHandleRequest.Handle, Entry->Object, DesiredAccess, - Request->Data.DuplicateHandleRequest.Inheritable, + ApiMessage->Data.DuplicateHandleRequest.Inheritable, Entry->ShareMode); - if (NT_SUCCESS(Request->Status) - && Request->Data.DuplicateHandleRequest.Options & DUPLICATE_CLOSE_SOURCE) + if (NT_SUCCESS(ApiMessage->Status) + && ApiMessage->Data.DuplicateHandleRequest.Options & DUPLICATE_CLOSE_SOURCE) { Win32CsrCloseHandleEntry(Entry); } RtlLeaveCriticalSection(&ProcessData->HandleTableLock); - return Request->Status; + return ApiMessage->Status; } CSR_API(CsrGetInputWaitHandle) { - Request->Data.GetConsoleInputWaitHandle.InputWaitHandle = ProcessData->ConsoleEvent; + ApiMessage->Data.GetConsoleInputWaitHandle.InputWaitHandle = CsrGetClientThread()->Process->ConsoleEvent; return STATUS_SUCCESS; } diff --git a/win32ss/user/win32csr/lineinput.c b/win32ss/user/win32csr/lineinput.c index 78cbe27cfb1..1d55fb5ad66 100644 --- a/win32ss/user/win32csr/lineinput.c +++ b/win32ss/user/win32csr/lineinput.c @@ -149,6 +149,7 @@ HistoryDeleteBuffer(PHISTORY_BUFFER Hist) CSR_API(CsrGetCommandHistoryLength) { + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; NTSTATUS Status; PHISTORY_BUFFER Hist; @@ -156,8 +157,8 @@ CSR_API(CsrGetCommandHistoryLength) INT i; if (!Win32CsrValidateBuffer(ProcessData, - Request->Data.GetCommandHistoryLength.ExeName.Buffer, - Request->Data.GetCommandHistoryLength.ExeName.Length, 1)) + ApiMessage->Data.GetCommandHistoryLength.ExeName.Buffer, + ApiMessage->Data.GetCommandHistoryLength.ExeName.Length, 1)) { return STATUS_ACCESS_VIOLATION; } @@ -165,13 +166,13 @@ CSR_API(CsrGetCommandHistoryLength) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (NT_SUCCESS(Status)) { - Hist = HistoryFindBuffer(Console, &Request->Data.GetCommandHistory.ExeName); + Hist = HistoryFindBuffer(Console, &ApiMessage->Data.GetCommandHistory.ExeName); if (Hist) { for (i = 0; i < Hist->NumEntries; i++) Length += Hist->Entries[i].Length + sizeof(WCHAR); } - Request->Data.GetCommandHistoryLength.Length = Length; + ApiMessage->Data.GetCommandHistoryLength.Length = Length; ConioUnlockConsole(Console); } return Status; @@ -179,17 +180,18 @@ CSR_API(CsrGetCommandHistoryLength) CSR_API(CsrGetCommandHistory) { + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; NTSTATUS Status; PHISTORY_BUFFER Hist; - PBYTE Buffer = (PBYTE)Request->Data.GetCommandHistory.History; - ULONG BufferSize = Request->Data.GetCommandHistory.Length; + PBYTE Buffer = (PBYTE)ApiMessage->Data.GetCommandHistory.History; + ULONG BufferSize = ApiMessage->Data.GetCommandHistory.Length; INT i; if (!Win32CsrValidateBuffer(ProcessData, Buffer, BufferSize, 1) || !Win32CsrValidateBuffer(ProcessData, - Request->Data.GetCommandHistory.ExeName.Buffer, - Request->Data.GetCommandHistory.ExeName.Length, 1)) + ApiMessage->Data.GetCommandHistory.ExeName.Buffer, + ApiMessage->Data.GetCommandHistory.ExeName.Length, 1)) { return STATUS_ACCESS_VIOLATION; } @@ -197,7 +199,7 @@ CSR_API(CsrGetCommandHistory) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (NT_SUCCESS(Status)) { - Hist = HistoryFindBuffer(Console, &Request->Data.GetCommandHistory.ExeName); + Hist = HistoryFindBuffer(Console, &ApiMessage->Data.GetCommandHistory.ExeName); if (Hist) { for (i = 0; i < Hist->NumEntries; i++) @@ -213,7 +215,7 @@ CSR_API(CsrGetCommandHistory) Buffer += sizeof(WCHAR); } } - Request->Data.GetCommandHistory.Length = Buffer - (PBYTE)Request->Data.GetCommandHistory.History; + ApiMessage->Data.GetCommandHistory.Length = Buffer - (PBYTE)ApiMessage->Data.GetCommandHistory.History; ConioUnlockConsole(Console); } return Status; @@ -221,13 +223,14 @@ CSR_API(CsrGetCommandHistory) CSR_API(CsrExpungeCommandHistory) { + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; PHISTORY_BUFFER Hist; NTSTATUS Status; if (!Win32CsrValidateBuffer(ProcessData, - Request->Data.ExpungeCommandHistory.ExeName.Buffer, - Request->Data.ExpungeCommandHistory.ExeName.Length, 1)) + ApiMessage->Data.ExpungeCommandHistory.ExeName.Buffer, + ApiMessage->Data.ExpungeCommandHistory.ExeName.Length, 1)) { return STATUS_ACCESS_VIOLATION; } @@ -235,7 +238,7 @@ CSR_API(CsrExpungeCommandHistory) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (NT_SUCCESS(Status)) { - Hist = HistoryFindBuffer(Console, &Request->Data.ExpungeCommandHistory.ExeName); + Hist = HistoryFindBuffer(Console, &ApiMessage->Data.ExpungeCommandHistory.ExeName); HistoryDeleteBuffer(Hist); ConioUnlockConsole(Console); } @@ -244,15 +247,16 @@ CSR_API(CsrExpungeCommandHistory) CSR_API(CsrSetHistoryNumberCommands) { + PCSR_PROCESS ProcessData = CsrGetClientThread()->Process; PCSRSS_CONSOLE Console; PHISTORY_BUFFER Hist; NTSTATUS Status; - WORD MaxEntries = Request->Data.SetHistoryNumberCommands.NumCommands; + WORD MaxEntries = ApiMessage->Data.SetHistoryNumberCommands.NumCommands; PUNICODE_STRING OldEntryList, NewEntryList; if (!Win32CsrValidateBuffer(ProcessData, - Request->Data.SetHistoryNumberCommands.ExeName.Buffer, - Request->Data.SetHistoryNumberCommands.ExeName.Length, 1)) + ApiMessage->Data.SetHistoryNumberCommands.ExeName.Buffer, + ApiMessage->Data.SetHistoryNumberCommands.ExeName.Length, 1)) { return STATUS_ACCESS_VIOLATION; } @@ -260,7 +264,7 @@ CSR_API(CsrSetHistoryNumberCommands) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (NT_SUCCESS(Status)) { - Hist = HistoryFindBuffer(Console, &Request->Data.SetHistoryNumberCommands.ExeName); + Hist = HistoryFindBuffer(Console, &ApiMessage->Data.SetHistoryNumberCommands.ExeName); if (Hist) { OldEntryList = Hist->Entries; @@ -293,12 +297,12 @@ CSR_API(CsrSetHistoryNumberCommands) CSR_API(CsrGetHistoryInfo) { PCSRSS_CONSOLE Console; - NTSTATUS Status = ConioConsoleFromProcessData(ProcessData, &Console); + NTSTATUS Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); if (NT_SUCCESS(Status)) { - Request->Data.SetHistoryInfo.HistoryBufferSize = Console->HistoryBufferSize; - Request->Data.SetHistoryInfo.NumberOfHistoryBuffers = Console->NumberOfHistoryBuffers; - Request->Data.SetHistoryInfo.dwFlags = Console->HistoryNoDup; + ApiMessage->Data.SetHistoryInfo.HistoryBufferSize = Console->HistoryBufferSize; + ApiMessage->Data.SetHistoryInfo.NumberOfHistoryBuffers = Console->NumberOfHistoryBuffers; + ApiMessage->Data.SetHistoryInfo.dwFlags = Console->HistoryNoDup; ConioUnlockConsole(Console); } return Status; @@ -307,12 +311,12 @@ CSR_API(CsrGetHistoryInfo) CSR_API(CsrSetHistoryInfo) { PCSRSS_CONSOLE Console; - NTSTATUS Status = ConioConsoleFromProcessData(ProcessData, &Console); + NTSTATUS Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console); if (NT_SUCCESS(Status)) { - Console->HistoryBufferSize = (WORD)Request->Data.SetHistoryInfo.HistoryBufferSize; - Console->NumberOfHistoryBuffers = (WORD)Request->Data.SetHistoryInfo.NumberOfHistoryBuffers; - Console->HistoryNoDup = Request->Data.SetHistoryInfo.dwFlags & HISTORY_NO_DUP_FLAG; + Console->HistoryBufferSize = (WORD)ApiMessage->Data.SetHistoryInfo.HistoryBufferSize; + Console->NumberOfHistoryBuffers = (WORD)ApiMessage->Data.SetHistoryInfo.NumberOfHistoryBuffers; + Console->HistoryNoDup = ApiMessage->Data.SetHistoryInfo.dwFlags & HISTORY_NO_DUP_FLAG; ConioUnlockConsole(Console); } return Status;