mirror of
https://github.com/reactos/reactos.git
synced 2025-07-03 09:11:25 +00:00
[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
This commit is contained in:
parent
9616bdb4f0
commit
61d07a5b47
45 changed files with 1714 additions and 1754 deletions
|
@ -37,8 +37,8 @@ CsrSetPriorityClass(HANDLE hProcess,
|
||||||
PULONG PriorityClass)
|
PULONG PriorityClass)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
CSR_API_MESSAGE2 ApiMessage; /* <- Remove the "2" when CSR is commited */
|
CSR_API_MESSAGE ApiMessage;
|
||||||
PCSR_SET_PRIORITY_CLASS SetPriorityClass = &ApiMessage.SetPriorityClass;
|
PCSR_SET_PRIORITY_CLASS SetPriorityClass = &ApiMessage.Data.SetPriorityClass;
|
||||||
|
|
||||||
/* Set up the data for CSR */
|
/* Set up the data for CSR */
|
||||||
DbgBreakPoint();
|
DbgBreakPoint();
|
||||||
|
@ -46,10 +46,9 @@ CsrSetPriorityClass(HANDLE hProcess,
|
||||||
SetPriorityClass->PriorityClass = *PriorityClass;
|
SetPriorityClass->PriorityClass = *PriorityClass;
|
||||||
|
|
||||||
/* Call it */
|
/* Call it */
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
Status = CsrClientCallServer(&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_MAKE_OPCODE(CsrpSetPriorityClass,
|
CSR_CREATE_API_NUMBER(CSR_SRV_SERVER, CsrpSetPriorityClass),
|
||||||
CSR_SRV_SERVER),
|
|
||||||
sizeof(CSR_SET_PRIORITY_CLASS));
|
sizeof(CSR_SET_PRIORITY_CLASS));
|
||||||
|
|
||||||
/* Return what we got, if requested */
|
/* Return what we got, if requested */
|
||||||
|
@ -67,19 +66,18 @@ NTAPI
|
||||||
CsrIdentifyAlertableThread (VOID)
|
CsrIdentifyAlertableThread (VOID)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
CSR_API_MESSAGE2 ApiMessage; /* <- Remove the "2" when CSR is commited */
|
CSR_API_MESSAGE ApiMessage;
|
||||||
PCSR_IDENTIFY_ALTERTABLE_THREAD IdentifyAlertableThread;
|
PCSR_IDENTIFY_ALTERTABLE_THREAD IdentifyAlertableThread;
|
||||||
|
|
||||||
/* Set up the data for CSR */
|
/* Set up the data for CSR */
|
||||||
DbgBreakPoint();
|
DbgBreakPoint();
|
||||||
IdentifyAlertableThread = &ApiMessage.IdentifyAlertableThread;
|
IdentifyAlertableThread = &ApiMessage.Data.IdentifyAlertableThread;
|
||||||
IdentifyAlertableThread->Cid = NtCurrentTeb()->ClientId;
|
IdentifyAlertableThread->Cid = NtCurrentTeb()->ClientId;
|
||||||
|
|
||||||
/* Call it */
|
/* Call it */
|
||||||
Status = CsrClientCallServer((PCSR_API_MESSAGE)&ApiMessage,
|
Status = CsrClientCallServer(&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
CSR_MAKE_OPCODE(CsrpIdentifyAlertable,
|
CSR_CREATE_API_NUMBER(CSR_SRV_SERVER, CsrpIdentifyAlertable),
|
||||||
CSR_SRV_SERVER),
|
|
||||||
sizeof(CSR_SET_PRIORITY_CLASS));
|
sizeof(CSR_SET_PRIORITY_CLASS));
|
||||||
|
|
||||||
/* Return to caller */
|
/* Return to caller */
|
||||||
|
|
|
@ -27,7 +27,6 @@ typedef NTSTATUS
|
||||||
PCSR_SERVER_API_ROUTINE CsrServerApiRoutine;
|
PCSR_SERVER_API_ROUTINE CsrServerApiRoutine;
|
||||||
|
|
||||||
#define UNICODE_PATH_SEP L"\\"
|
#define UNICODE_PATH_SEP L"\\"
|
||||||
#define CSR_PORT_NAME L"ApiPort"
|
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
|
@ -63,8 +62,7 @@ CsrClientCallServer(PCSR_API_MESSAGE ApiMessage,
|
||||||
ApiMessage->Header.u1.s1.TotalLength = RequestLength;
|
ApiMessage->Header.u1.s1.TotalLength = RequestLength;
|
||||||
|
|
||||||
/* Fill out the CSR Header */
|
/* Fill out the CSR Header */
|
||||||
ApiMessage->Type = ApiNumber;
|
ApiMessage->ApiNumber = ApiNumber;
|
||||||
//ApiMessage->Opcode = ApiNumber; <- Activate with new CSR
|
|
||||||
ApiMessage->CsrCaptureData = NULL;
|
ApiMessage->CsrCaptureData = NULL;
|
||||||
|
|
||||||
DPRINT("API: %lx, u1.s1.DataLength: %x, u1.s1.TotalLength: %x\n",
|
DPRINT("API: %lx, u1.s1.DataLength: %x, u1.s1.TotalLength: %x\n",
|
||||||
|
@ -332,9 +330,8 @@ CsrClientConnectToServer(PWSTR ObjectDirectory,
|
||||||
HANDLE hCsrSrv;
|
HANDLE hCsrSrv;
|
||||||
ANSI_STRING CsrServerRoutineName;
|
ANSI_STRING CsrServerRoutineName;
|
||||||
PCSR_CAPTURE_BUFFER CaptureBuffer;
|
PCSR_CAPTURE_BUFFER CaptureBuffer;
|
||||||
CSR_API_MESSAGE RosApiMessage;
|
CSR_API_MESSAGE ApiMessage;
|
||||||
CSR_API_MESSAGE2 ApiMessage;
|
PCSR_CLIENT_CONNECT ClientConnect = &ApiMessage.Data.CsrClientConnect;
|
||||||
PCSR_CLIENT_CONNECT ClientConnect = &ApiMessage.ClientConnect;
|
|
||||||
|
|
||||||
/* Validate the Connection Info */
|
/* Validate the Connection Info */
|
||||||
DPRINT("CsrClientConnectToServer: %lx %p\n", ServerId, ConnectionInfo);
|
DPRINT("CsrClientConnectToServer: %lx %p\n", ServerId, ConnectionInfo);
|
||||||
|
@ -437,14 +434,14 @@ CsrClientConnectToServer(PWSTR ObjectDirectory,
|
||||||
#if 0
|
#if 0
|
||||||
Status = CsrClientCallServer(&ApiMessage,
|
Status = CsrClientCallServer(&ApiMessage,
|
||||||
CaptureBuffer,
|
CaptureBuffer,
|
||||||
CSR_MAKE_OPCODE(CsrpClientConnect,
|
CSR_CREATE_API_NUMBER(CSR_SRV_DLL, CsrpClientConnect),
|
||||||
CSR_SRV_DLL),
|
|
||||||
sizeof(CSR_CLIENT_CONNECT));
|
sizeof(CSR_CLIENT_CONNECT));
|
||||||
#endif
|
#else
|
||||||
Status = CsrClientCallServer(&RosApiMessage,
|
Status = CsrClientCallServer(&ApiMessage,
|
||||||
NULL,
|
CaptureBuffer,
|
||||||
MAKE_CSR_API(CONNECT_PROCESS, CSR_NATIVE),
|
CSR_CREATE_API_NUMBER(CSR_NATIVE, CONNECT_PROCESS),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSR_API_MESSAGE));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -42,7 +42,8 @@
|
||||||
#include "ntdllp.h"
|
#include "ntdllp.h"
|
||||||
|
|
||||||
/* CSRSS Header */
|
/* CSRSS Header */
|
||||||
#include <csrss/csrss.h>
|
#include <csrss/client.h>
|
||||||
|
#include <csrss/csrss.h> // FIXME: data header.
|
||||||
|
|
||||||
/* PSEH */
|
/* PSEH */
|
||||||
#include <pseh/pseh2.h>
|
#include <pseh/pseh2.h>
|
||||||
|
|
|
@ -143,11 +143,11 @@ LdrpFreeUnicodeString(PUNICODE_STRING String);
|
||||||
/* FIXME: Cleanup this mess */
|
/* FIXME: Cleanup this mess */
|
||||||
typedef NTSTATUS (NTAPI *PEPFUNC)(PPEB);
|
typedef NTSTATUS (NTAPI *PEPFUNC)(PPEB);
|
||||||
NTSTATUS LdrMapSections(HANDLE ProcessHandle,
|
NTSTATUS LdrMapSections(HANDLE ProcessHandle,
|
||||||
PVOID ImageBase,
|
PVOID ImageBase,
|
||||||
HANDLE SectionHandle,
|
HANDLE SectionHandle,
|
||||||
PIMAGE_NT_HEADERS NTHeaders);
|
PIMAGE_NT_HEADERS NTHeaders);
|
||||||
NTSTATUS LdrMapNTDllForProcess(HANDLE ProcessHandle,
|
NTSTATUS LdrMapNTDllForProcess(HANDLE ProcessHandle,
|
||||||
PHANDLE NTDllSectionHandle);
|
PHANDLE NTDllSectionHandle);
|
||||||
ULONG
|
ULONG
|
||||||
LdrpGetResidentSize(PIMAGE_NT_HEADERS NTHeaders);
|
LdrpGetResidentSize(PIMAGE_NT_HEADERS NTHeaders);
|
||||||
|
|
||||||
|
|
|
@ -8,34 +8,34 @@ set_rc_compiler()
|
||||||
spec2def(kernel32.dll kernel32.spec ADD_IMPORTLIB)
|
spec2def(kernel32.dll kernel32.spec ADD_IMPORTLIB)
|
||||||
|
|
||||||
list(APPEND SOURCE
|
list(APPEND SOURCE
|
||||||
client/appcache.c
|
client/appcache.c
|
||||||
client/atom.c
|
client/atom.c
|
||||||
client/compname.c
|
client/compname.c
|
||||||
client/debugger.c
|
client/debugger.c
|
||||||
client/dosdev.c
|
client/dosdev.c
|
||||||
client/dllmain.c
|
client/dllmain.c
|
||||||
client/environ.c
|
client/environ.c
|
||||||
client/except.c
|
client/except.c
|
||||||
client/fiber.c
|
client/fiber.c
|
||||||
client/handle.c
|
client/handle.c
|
||||||
client/heapmem.c
|
client/heapmem.c
|
||||||
client/job.c
|
client/job.c
|
||||||
client/loader.c
|
client/loader.c
|
||||||
client/path.c
|
client/path.c
|
||||||
client/perfcnt.c
|
client/perfcnt.c
|
||||||
client/power.c
|
client/power.c
|
||||||
client/proc.c
|
client/proc.c
|
||||||
client/resntfy.c
|
client/resntfy.c
|
||||||
client/session.c
|
client/session.c
|
||||||
client/synch.c
|
client/synch.c
|
||||||
client/sysinfo.c
|
client/sysinfo.c
|
||||||
client/time.c
|
client/time.c
|
||||||
client/timerqueue.c
|
client/timerqueue.c
|
||||||
client/toolhelp.c
|
client/toolhelp.c
|
||||||
client/utils.c
|
client/utils.c
|
||||||
client/thread.c
|
client/thread.c
|
||||||
client/vdm.c
|
client/vdm.c
|
||||||
client/version.c
|
client/version.c
|
||||||
client/virtmem.c
|
client/virtmem.c
|
||||||
client/vista.c
|
client/vista.c
|
||||||
client/file/backup.c
|
client/file/backup.c
|
||||||
|
|
|
@ -62,7 +62,6 @@ WINAPI
|
||||||
BasepInitConsole(VOID)
|
BasepInitConsole(VOID)
|
||||||
{
|
{
|
||||||
CSR_API_MESSAGE Request;
|
CSR_API_MESSAGE Request;
|
||||||
ULONG CsrRequest;
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
BOOLEAN NotConsole = FALSE;
|
BOOLEAN NotConsole = FALSE;
|
||||||
PRTL_USER_PROCESS_PARAMETERS Parameters = NtCurrentPeb()->ProcessParameters;
|
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
|
* console message to the Base Server. When we finally have a Console
|
||||||
* Server, this code should be changed to send connection data instead.
|
* Server, this code should be changed to send connection data instead.
|
||||||
*/
|
*/
|
||||||
CsrRequest = MAKE_CSR_API(ALLOC_CONSOLE, CSR_CONSOLE);
|
|
||||||
Request.Data.AllocConsoleRequest.CtrlDispatcher = ConsoleControlDispatcher;
|
Request.Data.AllocConsoleRequest.CtrlDispatcher = ConsoleControlDispatcher;
|
||||||
Status = CsrClientCallServer(&Request,
|
Status = CsrClientCallServer(&Request,
|
||||||
NULL,
|
NULL,
|
||||||
CsrRequest,
|
CSR_CREATE_API_NUMBER(CSR_CONSOLE, ALLOC_CONSOLE),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSR_API_MESSAGE));
|
||||||
if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
if(!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
||||||
{
|
{
|
||||||
|
|
|
@ -183,7 +183,7 @@ DefineDosDeviceW(
|
||||||
|
|
||||||
Status = CsrClientCallServer(&Request,
|
Status = CsrClientCallServer(&Request,
|
||||||
CaptureBuffer,
|
CaptureBuffer,
|
||||||
MAKE_CSR_API(DEFINE_DOS_DEVICE, CSR_CONSOLE),
|
CSR_CREATE_API_NUMBER(CSR_CONSOLE, DEFINE_DOS_DEVICE),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSR_API_MESSAGE));
|
||||||
CsrFreeCaptureBuffer(CaptureBuffer);
|
CsrFreeCaptureBuffer(CaptureBuffer);
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -31,7 +31,7 @@ NotifySoundSentry(VOID)
|
||||||
{
|
{
|
||||||
CsrClientCallServer(&ApiMessage,
|
CsrClientCallServer(&ApiMessage,
|
||||||
NULL,
|
NULL,
|
||||||
MAKE_CSR_API(SOUND_SENTRY, CSR_NATIVE),
|
CSR_CREATE_API_NUMBER(CSR_NATIVE, SOUND_SENTRY),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSR_API_MESSAGE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -158,7 +158,10 @@ GetTempFileNameW(IN LPCWSTR lpPathName,
|
||||||
/* If user didn't gave any ID, ask Csrss to give one */
|
/* If user didn't gave any ID, ask Csrss to give one */
|
||||||
if (!uUnique)
|
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)
|
if (ApiMessage.Data.GetTempFile.UniqueID == 0)
|
||||||
{
|
{
|
||||||
Num++;
|
Num++;
|
||||||
|
|
|
@ -508,7 +508,7 @@ BasepNotifyCsrOfThread(IN HANDLE ThreadHandle,
|
||||||
/* Call CSR */
|
/* Call CSR */
|
||||||
Status = CsrClientCallServer(&CsrRequest,
|
Status = CsrClientCallServer(&CsrRequest,
|
||||||
NULL,
|
NULL,
|
||||||
MAKE_CSR_API(Request, CSR_NATIVE),
|
CSR_CREATE_API_NUMBER(CSR_NATIVE, Request),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSR_API_MESSAGE));
|
||||||
if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrRequest.Status))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrRequest.Status))
|
||||||
{
|
{
|
||||||
|
@ -584,7 +584,7 @@ BasepCreateFirstThread(HANDLE ProcessHandle,
|
||||||
/* Call CSR */
|
/* Call CSR */
|
||||||
Status = CsrClientCallServer(&CsrRequest,
|
Status = CsrClientCallServer(&CsrRequest,
|
||||||
NULL,
|
NULL,
|
||||||
MAKE_CSR_API(Request, CSR_NATIVE),
|
CSR_CREATE_API_NUMBER(CSR_NATIVE, Request),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSR_API_MESSAGE));
|
||||||
if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrRequest.Status))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrRequest.Status))
|
||||||
{
|
{
|
||||||
|
@ -1182,7 +1182,7 @@ GetProcessShutdownParameters(OUT LPDWORD lpdwLevel,
|
||||||
/* Ask CSRSS for shutdown information */
|
/* Ask CSRSS for shutdown information */
|
||||||
Status = CsrClientCallServer(&CsrRequest,
|
Status = CsrClientCallServer(&CsrRequest,
|
||||||
NULL,
|
NULL,
|
||||||
MAKE_CSR_API(GET_SHUTDOWN_PARAMETERS, CSR_NATIVE),
|
CSR_CREATE_API_NUMBER(CSR_NATIVE, GET_SHUTDOWN_PARAMETERS),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSR_API_MESSAGE));
|
||||||
if (!(NT_SUCCESS(Status)) || !(NT_SUCCESS(CsrRequest.Status)))
|
if (!(NT_SUCCESS(Status)) || !(NT_SUCCESS(CsrRequest.Status)))
|
||||||
{
|
{
|
||||||
|
@ -1213,7 +1213,7 @@ SetProcessShutdownParameters(IN DWORD dwLevel,
|
||||||
CsrRequest.Data.SetShutdownParametersRequest.Flags = dwFlags;
|
CsrRequest.Data.SetShutdownParametersRequest.Flags = dwFlags;
|
||||||
Status = CsrClientCallServer(&CsrRequest,
|
Status = CsrClientCallServer(&CsrRequest,
|
||||||
NULL,
|
NULL,
|
||||||
MAKE_CSR_API(SET_SHUTDOWN_PARAMETERS, CSR_NATIVE),
|
CSR_CREATE_API_NUMBER(CSR_NATIVE, SET_SHUTDOWN_PARAMETERS),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSR_API_MESSAGE));
|
||||||
if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrRequest.Status))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(CsrRequest.Status))
|
||||||
{
|
{
|
||||||
|
@ -1760,7 +1760,7 @@ ExitProcess(IN UINT uExitCode)
|
||||||
CsrRequest.Data.TerminateProcessRequest.uExitCode = uExitCode;
|
CsrRequest.Data.TerminateProcessRequest.uExitCode = uExitCode;
|
||||||
CsrClientCallServer(&CsrRequest,
|
CsrClientCallServer(&CsrRequest,
|
||||||
NULL,
|
NULL,
|
||||||
MAKE_CSR_API(TERMINATE_PROCESS, CSR_NATIVE),
|
CSR_CREATE_API_NUMBER(CSR_NATIVE, TERMINATE_PROCESS),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSR_API_MESSAGE));
|
||||||
|
|
||||||
/* Now do it again */
|
/* Now do it again */
|
||||||
|
|
|
@ -89,7 +89,6 @@ BaseUpdateVDMEntry(IN ULONG UpdateIndex,
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
CSR_API_MESSAGE Msg;
|
CSR_API_MESSAGE Msg;
|
||||||
ULONG CsrRequest = MAKE_CSR_API(UPDATE_VDM_ENTRY, CSR_CONSOLE);
|
|
||||||
|
|
||||||
/* Check what update is being sent */
|
/* Check what update is being sent */
|
||||||
switch (UpdateIndex)
|
switch (UpdateIndex)
|
||||||
|
@ -133,7 +132,10 @@ BaseUpdateVDMEntry(IN ULONG UpdateIndex,
|
||||||
Msg.Data.UpdateVdmEntry.BinaryType = BinaryType;
|
Msg.Data.UpdateVdmEntry.BinaryType = BinaryType;
|
||||||
|
|
||||||
/* Send the message to CSRSS */
|
/* 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)))
|
if (!(NT_SUCCESS(Status)) || !(NT_SUCCESS(Msg.Status)))
|
||||||
{
|
{
|
||||||
/* Handle failure */
|
/* Handle failure */
|
||||||
|
@ -160,7 +162,6 @@ BaseCheckForVDM(IN HANDLE ProcessHandle,
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
EVENT_BASIC_INFORMATION EventBasicInfo;
|
EVENT_BASIC_INFORMATION EventBasicInfo;
|
||||||
CSR_API_MESSAGE Msg;
|
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) */
|
/* It's VDM if the process is actually a wait handle (an event) */
|
||||||
Status = NtQueryEvent(ProcessHandle,
|
Status = NtQueryEvent(ProcessHandle,
|
||||||
|
@ -175,7 +176,10 @@ BaseCheckForVDM(IN HANDLE ProcessHandle,
|
||||||
Msg.Data.GetVdmExitCode.hParent = ProcessHandle;
|
Msg.Data.GetVdmExitCode.hParent = ProcessHandle;
|
||||||
|
|
||||||
/* Call CSRSS */
|
/* 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;
|
if (!NT_SUCCESS(Status)) return FALSE;
|
||||||
|
|
||||||
/* Get the exit code from the reply */
|
/* Get the exit code from the reply */
|
||||||
|
|
|
@ -319,22 +319,28 @@ WINAPI
|
||||||
GetConsoleHistoryInfo(PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo)
|
GetConsoleHistoryInfo(PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo)
|
||||||
{
|
{
|
||||||
CSR_API_MESSAGE Request;
|
CSR_API_MESSAGE Request;
|
||||||
ULONG CsrRequest = MAKE_CSR_API(GET_HISTORY_INFO, CSR_CONSOLE);
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
if (lpConsoleHistoryInfo->cbSize != sizeof(CONSOLE_HISTORY_INFO))
|
if (lpConsoleHistoryInfo->cbSize != sizeof(CONSOLE_HISTORY_INFO))
|
||||||
{
|
{
|
||||||
SetLastError(ERROR_INVALID_PARAMETER);
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
return FALSE;
|
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))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
lpConsoleHistoryInfo->HistoryBufferSize = Request.Data.GetHistoryInfo.HistoryBufferSize;
|
lpConsoleHistoryInfo->HistoryBufferSize = Request.Data.GetHistoryInfo.HistoryBufferSize;
|
||||||
lpConsoleHistoryInfo->NumberOfHistoryBuffers = Request.Data.GetHistoryInfo.NumberOfHistoryBuffers;
|
lpConsoleHistoryInfo->NumberOfHistoryBuffers = Request.Data.GetHistoryInfo.NumberOfHistoryBuffers;
|
||||||
lpConsoleHistoryInfo->dwFlags = Request.Data.GetHistoryInfo.dwFlags;
|
lpConsoleHistoryInfo->dwFlags = Request.Data.GetHistoryInfo.dwFlags;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,22 +355,28 @@ WINAPI
|
||||||
SetConsoleHistoryInfo(IN PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo)
|
SetConsoleHistoryInfo(IN PCONSOLE_HISTORY_INFO lpConsoleHistoryInfo)
|
||||||
{
|
{
|
||||||
CSR_API_MESSAGE Request;
|
CSR_API_MESSAGE Request;
|
||||||
ULONG CsrRequest = MAKE_CSR_API(GET_HISTORY_INFO, CSR_CONSOLE);
|
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
if (lpConsoleHistoryInfo->cbSize != sizeof(CONSOLE_HISTORY_INFO))
|
if (lpConsoleHistoryInfo->cbSize != sizeof(CONSOLE_HISTORY_INFO))
|
||||||
{
|
{
|
||||||
SetLastError(ERROR_INVALID_PARAMETER);
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Request.Data.SetHistoryInfo.HistoryBufferSize = lpConsoleHistoryInfo->HistoryBufferSize;
|
Request.Data.SetHistoryInfo.HistoryBufferSize = lpConsoleHistoryInfo->HistoryBufferSize;
|
||||||
Request.Data.SetHistoryInfo.NumberOfHistoryBuffers = lpConsoleHistoryInfo->NumberOfHistoryBuffers;
|
Request.Data.SetHistoryInfo.NumberOfHistoryBuffers = lpConsoleHistoryInfo->NumberOfHistoryBuffers;
|
||||||
Request.Data.SetHistoryInfo.dwFlags = lpConsoleHistoryInfo->dwFlags;
|
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))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
||||||
{
|
{
|
||||||
BaseSetLastNTError(Status);
|
BaseSetLastNTError(Status);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,8 @@
|
||||||
#include <ndk/umfuncs.h>
|
#include <ndk/umfuncs.h>
|
||||||
|
|
||||||
/* CSRSS Header */
|
/* CSRSS Header */
|
||||||
#include <csrss/csrss.h>
|
#include <csrss/client.h>
|
||||||
|
#include <csrss/csrss.h> // FIXME: data header.
|
||||||
|
|
||||||
/* C Headers */
|
/* C Headers */
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
|
@ -25,103 +25,6 @@ Author:
|
||||||
#include <umtypes.h>
|
#include <umtypes.h>
|
||||||
#include <dbgktypes.h>
|
#include <dbgktypes.h>
|
||||||
|
|
||||||
//
|
|
||||||
// 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
|
// Debug Functions
|
||||||
//
|
//
|
||||||
|
|
|
@ -105,13 +105,6 @@ Author:
|
||||||
#define MAXUSHORT 0xffff
|
#define MAXUSHORT 0xffff
|
||||||
#define MAXULONG 0xffffffff
|
#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
|
// Basic Types that aren't defined in User-Mode Headers
|
||||||
//
|
//
|
||||||
|
|
100
include/reactos/subsys/csrss/client.h
Normal file
100
include/reactos/subsys/csrss/client.h
Normal file
|
@ -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 */
|
392
include/reactos/subsys/csrss/csrcons.h
Normal file
392
include/reactos/subsys/csrss/csrcons.h
Normal file
|
@ -0,0 +1,392 @@
|
||||||
|
/*
|
||||||
|
* CSRSS Console management structures.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __CSRCONS_H__
|
||||||
|
#define __CSRCONS_H__
|
||||||
|
|
||||||
|
#include <drivers/blue/ntddblue.h>
|
||||||
|
|
||||||
|
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 */
|
|
@ -1,26 +1,14 @@
|
||||||
|
/***************************** CSRSS Data ***********************************/
|
||||||
|
|
||||||
#ifndef __INCLUDE_CSRSS_CSRSS_H
|
#ifndef __INCLUDE_CSRSS_CSRSS_H
|
||||||
#define __INCLUDE_CSRSS_CSRSS_H
|
#define __INCLUDE_CSRSS_CSRSS_H
|
||||||
|
|
||||||
#include <drivers/blue/ntddblue.h>
|
|
||||||
|
|
||||||
#define CSR_NATIVE 0x0000
|
#define CSR_NATIVE 0x0000
|
||||||
#define CSR_CONSOLE 0x0001
|
#define CSR_CONSOLE 0x0001
|
||||||
#define CSR_GUI 0x0002
|
#define CSR_GUI 0x0002
|
||||||
#define CONSOLE_INPUT_MODE_VALID (0x0f)
|
#define CONSOLE_INPUT_MODE_VALID (0x0f)
|
||||||
#define CONSOLE_OUTPUT_MODE_VALID (0x03)
|
#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)
|
#define CSR_CSRSS_SECTION_SIZE (65536)
|
||||||
|
|
||||||
|
@ -90,149 +78,7 @@ typedef struct
|
||||||
ULONG nProcessIdsTotal;
|
ULONG nProcessIdsTotal;
|
||||||
} CSRSS_GET_PROCESS_LIST, *PCSRSS_GET_PROCESS_LIST;
|
} CSRSS_GET_PROCESS_LIST, *PCSRSS_GET_PROCESS_LIST;
|
||||||
|
|
||||||
typedef struct
|
#include "csrcons.h"
|
||||||
{
|
|
||||||
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
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -240,70 +86,6 @@ typedef struct
|
||||||
CLIENT_ID Cid;
|
CLIENT_ID Cid;
|
||||||
} CSRSS_IDENTIFY_ALERTABLE_THREAD, *PCSRSS_IDENTIFY_ALERTABLE_THREAD;
|
} 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
|
typedef struct
|
||||||
{
|
{
|
||||||
HANDLE ProcessId;
|
HANDLE ProcessId;
|
||||||
|
@ -327,41 +109,6 @@ typedef struct
|
||||||
DWORD Flags;
|
DWORD Flags;
|
||||||
} CSRSS_GET_SHUTDOWN_PARAMETERS, *PCSRSS_GET_SHUTDOWN_PARAMETERS;
|
} 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
|
typedef struct
|
||||||
{
|
{
|
||||||
HANDLE Handle;
|
HANDLE Handle;
|
||||||
|
@ -380,29 +127,6 @@ typedef struct
|
||||||
DWORD Options;
|
DWORD Options;
|
||||||
} CSRSS_DUPLICATE_HANDLE, *PCSRSS_DUPLICATE_HANDLE;
|
} 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
|
typedef struct
|
||||||
{
|
{
|
||||||
HDESK DesktopHandle;
|
HDESK DesktopHandle;
|
||||||
|
@ -431,122 +155,11 @@ typedef struct
|
||||||
BOOL Register;
|
BOOL Register;
|
||||||
} CSRSS_REGISTER_LOGON_PROCESS, *PCSRSS_REGISTER_LOGON_PROCESS;
|
} 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
|
typedef struct
|
||||||
{
|
{
|
||||||
HANDLE InputWaitHandle;
|
HANDLE InputWaitHandle;
|
||||||
} CSRSS_GET_INPUT_WAIT_HANDLE, *PCSRSS_GET_INPUT_WAIT_HANDLE;
|
} 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
|
typedef struct
|
||||||
{
|
{
|
||||||
UINT UniqueID;
|
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_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 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 CREATE_PROCESS (0x0)
|
||||||
#define TERMINATE_PROCESS (0x1)
|
#define TERMINATE_PROCESS (0x1)
|
||||||
#define WRITE_CONSOLE (0x2)
|
#define WRITE_CONSOLE (0x2)
|
||||||
#define READ_CONSOLE (0x3)
|
#define READ_CONSOLE (0x3)
|
||||||
#define ALLOC_CONSOLE (0x4)
|
#define ALLOC_CONSOLE (0x4)
|
||||||
#define FREE_CONSOLE (0x5)
|
#define FREE_CONSOLE (0x5)
|
||||||
#define CONNECT_PROCESS (0x6)
|
#define CONNECT_PROCESS (0x6)
|
||||||
#define SCREEN_BUFFER_INFO (0x7)
|
#define SCREEN_BUFFER_INFO (0x7)
|
||||||
#define SET_CURSOR (0x8)
|
#define SET_CURSOR (0x8)
|
||||||
#define FILL_OUTPUT (0x9)
|
#define FILL_OUTPUT (0x9)
|
||||||
#define READ_INPUT (0xA)
|
#define READ_INPUT (0xA)
|
||||||
#define WRITE_CONSOLE_OUTPUT_CHAR (0xB)
|
#define WRITE_CONSOLE_OUTPUT_CHAR (0xB)
|
||||||
#define WRITE_CONSOLE_OUTPUT_ATTRIB (0xC)
|
#define WRITE_CONSOLE_OUTPUT_ATTRIB (0xC)
|
||||||
#define FILL_OUTPUT_ATTRIB (0xD)
|
#define FILL_OUTPUT_ATTRIB (0xD)
|
||||||
#define GET_CURSOR_INFO (0xE)
|
#define GET_CURSOR_INFO (0xE)
|
||||||
#define SET_CURSOR_INFO (0xF)
|
#define SET_CURSOR_INFO (0xF)
|
||||||
#define SET_ATTRIB (0x10)
|
#define SET_ATTRIB (0x10)
|
||||||
#define GET_CONSOLE_MODE (0x11)
|
#define GET_CONSOLE_MODE (0x11)
|
||||||
#define SET_CONSOLE_MODE (0x12)
|
#define SET_CONSOLE_MODE (0x12)
|
||||||
#define CREATE_SCREEN_BUFFER (0x13)
|
#define CREATE_SCREEN_BUFFER (0x13)
|
||||||
#define SET_SCREEN_BUFFER (0x14)
|
#define SET_SCREEN_BUFFER (0x14)
|
||||||
#define SET_TITLE (0x15)
|
#define SET_TITLE (0x15)
|
||||||
#define GET_TITLE (0x16)
|
#define GET_TITLE (0x16)
|
||||||
#define WRITE_CONSOLE_OUTPUT (0x17)
|
#define WRITE_CONSOLE_OUTPUT (0x17)
|
||||||
#define FLUSH_INPUT_BUFFER (0x18)
|
#define FLUSH_INPUT_BUFFER (0x18)
|
||||||
#define SCROLL_CONSOLE_SCREEN_BUFFER (0x19)
|
#define SCROLL_CONSOLE_SCREEN_BUFFER (0x19)
|
||||||
#define READ_CONSOLE_OUTPUT_CHAR (0x1A)
|
#define READ_CONSOLE_OUTPUT_CHAR (0x1A)
|
||||||
#define READ_CONSOLE_OUTPUT_ATTRIB (0x1B)
|
#define READ_CONSOLE_OUTPUT_ATTRIB (0x1B)
|
||||||
#define GET_NUM_INPUT_EVENTS (0x1C)
|
#define GET_NUM_INPUT_EVENTS (0x1C)
|
||||||
#define REGISTER_SERVICES_PROCESS (0x1D)
|
#define REGISTER_SERVICES_PROCESS (0x1D)
|
||||||
#define EXIT_REACTOS (0x1E)
|
#define EXIT_REACTOS (0x1E)
|
||||||
#define GET_SHUTDOWN_PARAMETERS (0x1F)
|
#define GET_SHUTDOWN_PARAMETERS (0x1F)
|
||||||
#define SET_SHUTDOWN_PARAMETERS (0x20)
|
#define SET_SHUTDOWN_PARAMETERS (0x20)
|
||||||
#define PEEK_CONSOLE_INPUT (0x21)
|
#define PEEK_CONSOLE_INPUT (0x21)
|
||||||
#define READ_CONSOLE_OUTPUT (0x22)
|
#define READ_CONSOLE_OUTPUT (0x22)
|
||||||
#define WRITE_CONSOLE_INPUT (0x23)
|
#define WRITE_CONSOLE_INPUT (0x23)
|
||||||
#define GET_INPUT_HANDLE (0x24)
|
#define GET_INPUT_HANDLE (0x24)
|
||||||
#define GET_OUTPUT_HANDLE (0x25)
|
#define GET_OUTPUT_HANDLE (0x25)
|
||||||
#define CLOSE_HANDLE (0x26)
|
#define CLOSE_HANDLE (0x26)
|
||||||
#define VERIFY_HANDLE (0x27)
|
#define VERIFY_HANDLE (0x27)
|
||||||
#define DUPLICATE_HANDLE (0x28)
|
#define DUPLICATE_HANDLE (0x28)
|
||||||
#define SETGET_CONSOLE_HW_STATE (0x29)
|
#define SETGET_CONSOLE_HW_STATE (0x29)
|
||||||
#define GET_CONSOLE_WINDOW (0x2A)
|
#define GET_CONSOLE_WINDOW (0x2A)
|
||||||
#define CREATE_DESKTOP (0x2B)
|
#define CREATE_DESKTOP (0x2B)
|
||||||
#define SHOW_DESKTOP (0x2C)
|
#define SHOW_DESKTOP (0x2C)
|
||||||
#define HIDE_DESKTOP (0x2D)
|
#define HIDE_DESKTOP (0x2D)
|
||||||
#define SET_CONSOLE_ICON (0x2E)
|
#define SET_CONSOLE_ICON (0x2E)
|
||||||
#define SET_LOGON_NOTIFY_WINDOW (0x2F)
|
#define SET_LOGON_NOTIFY_WINDOW (0x2F)
|
||||||
#define REGISTER_LOGON_PROCESS (0x30)
|
#define REGISTER_LOGON_PROCESS (0x30)
|
||||||
#define GET_CONSOLE_CP (0x31)
|
#define GET_CONSOLE_CP (0x31)
|
||||||
#define SET_CONSOLE_CP (0x32)
|
#define SET_CONSOLE_CP (0x32)
|
||||||
#define GET_CONSOLE_OUTPUT_CP (0x33)
|
#define GET_CONSOLE_OUTPUT_CP (0x33)
|
||||||
#define SET_CONSOLE_OUTPUT_CP (0x34)
|
#define SET_CONSOLE_OUTPUT_CP (0x34)
|
||||||
#define GET_INPUT_WAIT_HANDLE (0x35)
|
#define GET_INPUT_WAIT_HANDLE (0x35)
|
||||||
#define GET_PROCESS_LIST (0x36)
|
#define GET_PROCESS_LIST (0x36)
|
||||||
#define START_SCREEN_SAVER (0x37)
|
#define START_SCREEN_SAVER (0x37)
|
||||||
#define ADD_CONSOLE_ALIAS (0x38)
|
#define ADD_CONSOLE_ALIAS (0x38)
|
||||||
#define GET_CONSOLE_ALIAS (0x39)
|
#define GET_CONSOLE_ALIAS (0x39)
|
||||||
#define GET_ALL_CONSOLE_ALIASES (0x3A)
|
#define GET_ALL_CONSOLE_ALIASES (0x3A)
|
||||||
#define GET_ALL_CONSOLE_ALIASES_LENGTH (0x3B)
|
#define GET_ALL_CONSOLE_ALIASES_LENGTH (0x3B)
|
||||||
#define GET_CONSOLE_ALIASES_EXES (0x3C)
|
#define GET_CONSOLE_ALIASES_EXES (0x3C)
|
||||||
#define GET_CONSOLE_ALIASES_EXES_LENGTH (0x3D)
|
#define GET_CONSOLE_ALIASES_EXES_LENGTH (0x3D)
|
||||||
#define GENERATE_CTRL_EVENT (0x3E)
|
#define GENERATE_CTRL_EVENT (0x3E)
|
||||||
#define CREATE_THREAD (0x3F)
|
#define CREATE_THREAD (0x3F)
|
||||||
#define SET_SCREEN_BUFFER_SIZE (0x40)
|
#define SET_SCREEN_BUFFER_SIZE (0x40)
|
||||||
#define GET_CONSOLE_SELECTION_INFO (0x41)
|
#define GET_CONSOLE_SELECTION_INFO (0x41)
|
||||||
#define GET_COMMAND_HISTORY_LENGTH (0x42)
|
#define GET_COMMAND_HISTORY_LENGTH (0x42)
|
||||||
#define GET_COMMAND_HISTORY (0x43)
|
#define GET_COMMAND_HISTORY (0x43)
|
||||||
#define EXPUNGE_COMMAND_HISTORY (0x44)
|
#define EXPUNGE_COMMAND_HISTORY (0x44)
|
||||||
#define SET_HISTORY_NUMBER_COMMANDS (0x45)
|
#define SET_HISTORY_NUMBER_COMMANDS (0x45)
|
||||||
#define GET_HISTORY_INFO (0x46)
|
#define GET_HISTORY_INFO (0x46)
|
||||||
#define SET_HISTORY_INFO (0x47)
|
#define SET_HISTORY_INFO (0x47)
|
||||||
#define GET_TEMP_FILE (0x48)
|
#define GET_TEMP_FILE (0x48)
|
||||||
#define DEFINE_DOS_DEVICE (0X49)
|
#define DEFINE_DOS_DEVICE (0x49)
|
||||||
#define SOUND_SENTRY (0x50)
|
#define SOUND_SENTRY (0x50)
|
||||||
#define UPDATE_VDM_ENTRY (0x51)
|
#define UPDATE_VDM_ENTRY (0x51)
|
||||||
#define GET_VDM_EXIT_CODE (0x52)
|
#define GET_VDM_EXIT_CODE (0x52)
|
||||||
#define CHECK_VDM (0x53)
|
#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
|
typedef struct _NLS_USER_INFO
|
||||||
{
|
{
|
||||||
|
@ -827,7 +351,7 @@ typedef struct _NLS_USER_INFO
|
||||||
WCHAR sLocaleName[85];
|
WCHAR sLocaleName[85];
|
||||||
LCID UserLocaleId;
|
LCID UserLocaleId;
|
||||||
LUID InteractiveUserLuid;
|
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;
|
ULONG ulCacheUpdateCount;
|
||||||
} NLS_USER_INFO, *PNLS_USER_INFO;
|
} 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 */
|
/* 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
|
typedef enum _CSR_SRV_API_NUMBER
|
||||||
{
|
{
|
||||||
CsrpClientConnect,
|
CsrpClientConnect,
|
||||||
|
@ -872,68 +395,4 @@ typedef enum _CSR_SRV_API_NUMBER
|
||||||
CsrpMaxApiNumber
|
CsrpMaxApiNumber
|
||||||
} CSR_SRV_API_NUMBER, *PCSR_SRV_API_NUMBER;
|
} 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 */
|
#endif /* __INCLUDE_CSRSS_CSRSS_H */
|
||||||
|
|
219
include/reactos/subsys/csrss/msg.h
Normal file
219
include/reactos/subsys/csrss/msg.h
Normal file
|
@ -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 */
|
|
@ -1,9 +1,11 @@
|
||||||
/*
|
/*
|
||||||
* PROJECT: ReactOS Native Headers
|
* PROJECT: ReactOS Native Headers
|
||||||
* FILE: include/subsys/csr/server.h
|
* FILE: include/subsys/csrss/server.h
|
||||||
* PURPOSE: Public Definitions for CSR Servers
|
* 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
|
#ifndef _CSRSERVER_H
|
||||||
#define _CSRSERVER_H
|
#define _CSRSERVER_H
|
||||||
|
|
||||||
|
@ -12,9 +14,10 @@
|
||||||
#pragma warning (disable:4201)
|
#pragma warning (disable:4201)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* DEPENDENCIES **************************************************************/
|
#include "msg.h"
|
||||||
|
|
||||||
/* TYPES **********************************************************************/
|
/* TYPES **********************************************************************/
|
||||||
|
|
||||||
typedef struct _CSR_NT_SESSION
|
typedef struct _CSR_NT_SESSION
|
||||||
{
|
{
|
||||||
ULONG ReferenceCount;
|
ULONG ReferenceCount;
|
||||||
|
@ -22,6 +25,20 @@ typedef struct _CSR_NT_SESSION
|
||||||
ULONG SessionId;
|
ULONG SessionId;
|
||||||
} CSR_NT_SESSION, *PCSR_NT_SESSION;
|
} 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
|
typedef struct _CSR_PROCESS
|
||||||
{
|
{
|
||||||
CLIENT_ID ClientId;
|
CLIENT_ID ClientId;
|
||||||
|
@ -47,7 +64,8 @@ typedef struct _CSR_PROCESS
|
||||||
ULONG Reserved;
|
ULONG Reserved;
|
||||||
ULONG ShutdownLevel;
|
ULONG ShutdownLevel;
|
||||||
ULONG ShutdownFlags;
|
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;
|
} CSR_PROCESS, *PCSR_PROCESS;
|
||||||
|
|
||||||
typedef struct _CSR_THREAD
|
typedef struct _CSR_THREAD
|
||||||
|
@ -64,33 +82,36 @@ typedef struct _CSR_THREAD
|
||||||
ULONG ImpersonationCount;
|
ULONG ImpersonationCount;
|
||||||
} CSR_THREAD, *PCSR_THREAD;
|
} CSR_THREAD, *PCSR_THREAD;
|
||||||
|
|
||||||
/* ENUMERATIONS **************************************************************/
|
#define CsrGetClientThread() \
|
||||||
#define CSR_SRV_SERVER 0
|
((PCSR_THREAD)(NtCurrentTeb()->CsrClientThread))
|
||||||
|
|
||||||
|
|
||||||
|
/* ENUMERATIONS ***************************************************************/
|
||||||
|
|
||||||
typedef enum _CSR_PROCESS_FLAGS
|
typedef enum _CSR_PROCESS_FLAGS
|
||||||
{
|
{
|
||||||
CsrProcessTerminating = 0x1,
|
CsrProcessTerminating = 0x1,
|
||||||
CsrProcessSkipShutdown = 0x2,
|
CsrProcessSkipShutdown = 0x2,
|
||||||
CsrProcessNormalPriority = 0x10,
|
CsrProcessNormalPriority = 0x10,
|
||||||
CsrProcessIdlePriority = 0x20,
|
CsrProcessIdlePriority = 0x20,
|
||||||
CsrProcessHighPriority = 0x40,
|
CsrProcessHighPriority = 0x40,
|
||||||
CsrProcessRealtimePriority = 0x80,
|
CsrProcessRealtimePriority = 0x80,
|
||||||
CsrProcessCreateNewGroup = 0x100,
|
CsrProcessCreateNewGroup = 0x100,
|
||||||
CsrProcessTerminated = 0x200,
|
CsrProcessTerminated = 0x200,
|
||||||
CsrProcessLastThreadTerminated = 0x400,
|
CsrProcessLastThreadTerminated = 0x400,
|
||||||
CsrProcessIsConsoleApp = 0x800
|
CsrProcessIsConsoleApp = 0x800
|
||||||
} CSR_PROCESS_FLAGS, *PCSR_PROCESS_FLAGS;
|
} CSR_PROCESS_FLAGS, *PCSR_PROCESS_FLAGS;
|
||||||
|
|
||||||
#define CsrProcessPriorityFlags (CsrProcessNormalPriority | \
|
#define CsrProcessPriorityFlags (CsrProcessNormalPriority | \
|
||||||
CsrProcessIdlePriority | \
|
CsrProcessIdlePriority | \
|
||||||
CsrProcessHighPriority | \
|
CsrProcessHighPriority | \
|
||||||
CsrProcessRealtimePriority)
|
CsrProcessRealtimePriority)
|
||||||
|
|
||||||
typedef enum _CSR_THREAD_FLAGS
|
typedef enum _CSR_THREAD_FLAGS
|
||||||
{
|
{
|
||||||
CsrThreadAltertable = 0x1,
|
CsrThreadAltertable = 0x1,
|
||||||
CsrThreadInTermination = 0x2,
|
CsrThreadInTermination = 0x2,
|
||||||
CsrThreadTerminated = 0x4,
|
CsrThreadTerminated = 0x4,
|
||||||
CsrThreadIsServerThread = 0x10
|
CsrThreadIsServerThread = 0x10
|
||||||
} CSR_THREAD_FLAGS, *PCSR_THREAD_FLAGS;
|
} CSR_THREAD_FLAGS, *PCSR_THREAD_FLAGS;
|
||||||
|
|
||||||
|
@ -104,7 +125,7 @@ typedef enum _SHUTDOWN_RESULT
|
||||||
typedef enum _CSR_SHUTDOWN_FLAGS
|
typedef enum _CSR_SHUTDOWN_FLAGS
|
||||||
{
|
{
|
||||||
CsrShutdownSystem = 4,
|
CsrShutdownSystem = 4,
|
||||||
CsrShutdownOther = 8
|
CsrShutdownOther = 8
|
||||||
} CSR_SHUTDOWN_FLAGS, *PCSR_SHUTDOWN_FLAGS;
|
} CSR_SHUTDOWN_FLAGS, *PCSR_SHUTDOWN_FLAGS;
|
||||||
|
|
||||||
typedef enum _CSR_DEBUG_FLAGS
|
typedef enum _CSR_DEBUG_FLAGS
|
||||||
|
@ -113,7 +134,48 @@ typedef enum _CSR_DEBUG_FLAGS
|
||||||
CsrDebugProcessChildren = 2
|
CsrDebugProcessChildren = 2
|
||||||
} CSR_PROCESS_DEBUG_FLAGS, *PCSR_PROCESS_DEBUG_FLAGS;
|
} 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
|
typedef
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
(NTAPI *PCSR_CONNECT_CALLBACK)(
|
(NTAPI *PCSR_CONNECT_CALLBACK)(
|
||||||
|
@ -148,69 +210,6 @@ ULONG
|
||||||
IN BOOLEAN FirstPhase
|
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
|
typedef struct _CSR_SERVER_DLL
|
||||||
{
|
{
|
||||||
ULONG Length;
|
ULONG Length;
|
||||||
|
@ -234,44 +233,78 @@ typedef struct _CSR_SERVER_DLL
|
||||||
ULONG Unknown2[3];
|
ULONG Unknown2[3];
|
||||||
} CSR_SERVER_DLL, *PCSR_SERVER_DLL;
|
} CSR_SERVER_DLL, *PCSR_SERVER_DLL;
|
||||||
|
|
||||||
|
|
||||||
|
/* FUNCTION TYPES *************************************************************/
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
NTSTATUS
|
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
|
NTSTATUS
|
||||||
(*CSR_WAIT_FUNCTION)(
|
NTAPI
|
||||||
IN PLIST_ENTRY WaitList,
|
CsrServerDllInitialization(IN PCSR_SERVER_DLL LoadedServerDll);
|
||||||
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;
|
|
||||||
|
|
||||||
/* PROTOTYPES ****************************************************************/
|
/* PROTOTYPES ****************************************************************/
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
CsrServerInitialization(
|
CsrServerInitialization(
|
||||||
ULONG ArgumentCount,
|
IN ULONG ArgumentCount,
|
||||||
PCHAR Arguments[]
|
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
|
#ifdef _MSC_VER
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif // _CSRSERVER_H
|
||||||
|
|
||||||
|
/* EOF */
|
|
@ -28,20 +28,22 @@ CSR_API(CsrSrvCreateProcess)
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
HANDLE ProcessHandle, ThreadHandle;
|
HANDLE ProcessHandle, ThreadHandle;
|
||||||
PCSR_THREAD CsrThread;
|
PCSR_THREAD CsrThread;
|
||||||
PCSR_PROCESS NewProcessData;
|
PCSR_PROCESS Process, NewProcess;
|
||||||
ULONG Flags, VdmPower = 0, DebugFlags = 0;
|
ULONG Flags, VdmPower = 0, DebugFlags = 0;
|
||||||
|
|
||||||
/* Get the current client thread */
|
/* Get the current client thread */
|
||||||
CsrThread = NtCurrentTeb()->CsrClientThread;
|
CsrThread = CsrGetClientThread();
|
||||||
ASSERT(CsrThread != NULL);
|
ASSERT(CsrThread != NULL);
|
||||||
|
|
||||||
|
Process = CsrThread->Process;
|
||||||
|
|
||||||
/* Extract the flags out of the process handle */
|
/* Extract the flags out of the process handle */
|
||||||
Flags = (ULONG_PTR)Request->Data.CreateProcessRequest.ProcessHandle & 3;
|
Flags = (ULONG_PTR)ApiMessage->Data.CreateProcessRequest.ProcessHandle & 3;
|
||||||
Request->Data.CreateProcessRequest.ProcessHandle = (HANDLE)((ULONG_PTR)Request->Data.CreateProcessRequest.ProcessHandle & ~3);
|
ApiMessage->Data.CreateProcessRequest.ProcessHandle = (HANDLE)((ULONG_PTR)ApiMessage->Data.CreateProcessRequest.ProcessHandle & ~3);
|
||||||
|
|
||||||
/* Duplicate the process handle */
|
/* Duplicate the process handle */
|
||||||
Status = NtDuplicateObject(CsrThread->Process->ProcessHandle,
|
Status = NtDuplicateObject(Process->ProcessHandle,
|
||||||
Request->Data.CreateProcessRequest.ProcessHandle,
|
ApiMessage->Data.CreateProcessRequest.ProcessHandle,
|
||||||
NtCurrentProcess(),
|
NtCurrentProcess(),
|
||||||
&ProcessHandle,
|
&ProcessHandle,
|
||||||
0,
|
0,
|
||||||
|
@ -54,8 +56,8 @@ CSR_API(CsrSrvCreateProcess)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Duplicate the thread handle */
|
/* Duplicate the thread handle */
|
||||||
Status = NtDuplicateObject(CsrThread->Process->ProcessHandle,
|
Status = NtDuplicateObject(Process->ProcessHandle,
|
||||||
Request->Data.CreateProcessRequest.ThreadHandle,
|
ApiMessage->Data.CreateProcessRequest.ThreadHandle,
|
||||||
NtCurrentProcess(),
|
NtCurrentProcess(),
|
||||||
&ThreadHandle,
|
&ThreadHandle,
|
||||||
0,
|
0,
|
||||||
|
@ -86,7 +88,7 @@ CSR_API(CsrSrvCreateProcess)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Convert some flags. FIXME: More need conversion */
|
/* 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;
|
DebugFlags |= CsrProcessCreateNewGroup;
|
||||||
}
|
}
|
||||||
|
@ -96,8 +98,8 @@ CSR_API(CsrSrvCreateProcess)
|
||||||
/* Call CSRSRV to create the CSR_PROCESS structure and the first CSR_THREAD */
|
/* Call CSRSRV to create the CSR_PROCESS structure and the first CSR_THREAD */
|
||||||
Status = CsrCreateProcess(ProcessHandle,
|
Status = CsrCreateProcess(ProcessHandle,
|
||||||
ThreadHandle,
|
ThreadHandle,
|
||||||
&Request->Data.CreateProcessRequest.ClientId,
|
&ApiMessage->Data.CreateProcessRequest.ClientId,
|
||||||
CsrThread->Process->NtSession,
|
Process->NtSession,
|
||||||
DebugFlags,
|
DebugFlags,
|
||||||
NULL);
|
NULL);
|
||||||
if (Status == STATUS_THREAD_IS_TERMINATING)
|
if (Status == STATUS_THREAD_IS_TERMINATING)
|
||||||
|
@ -118,16 +120,16 @@ CSR_API(CsrSrvCreateProcess)
|
||||||
/* FIXME: VDM vodoo */
|
/* FIXME: VDM vodoo */
|
||||||
|
|
||||||
/* ReactOS Compatibility */
|
/* ReactOS Compatibility */
|
||||||
Status = CsrLockProcessByClientId(Request->Data.CreateProcessRequest.ClientId.UniqueProcess, &NewProcessData);
|
Status = CsrLockProcessByClientId(ApiMessage->Data.CreateProcessRequest.ClientId.UniqueProcess, &NewProcess);
|
||||||
ASSERT(Status == STATUS_SUCCESS);
|
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;
|
NewProcess->ParentConsole = Process->Console;
|
||||||
NewProcessData->bInheritHandles = Request->Data.CreateProcessRequest.bInheritHandles;
|
NewProcess->bInheritHandles = ApiMessage->Data.CreateProcessRequest.bInheritHandles;
|
||||||
}
|
}
|
||||||
RtlInitializeCriticalSection(&NewProcessData->HandleTableLock);
|
RtlInitializeCriticalSection(&NewProcess->HandleTableLock);
|
||||||
CallProcessCreated(ProcessData, NewProcessData);
|
CallProcessCreated(Process, NewProcess);
|
||||||
CsrUnlockProcess(NewProcessData);
|
CsrUnlockProcess(NewProcess);
|
||||||
|
|
||||||
/* Return the result of this operation */
|
/* Return the result of this operation */
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -141,36 +143,36 @@ CSR_API(CsrSrvCreateThread)
|
||||||
PCSR_PROCESS CsrProcess;
|
PCSR_PROCESS CsrProcess;
|
||||||
|
|
||||||
/* Get the current CSR thread */
|
/* Get the current CSR thread */
|
||||||
CurrentThread = NtCurrentTeb()->CsrClientThread;
|
CurrentThread = CsrGetClientThread();
|
||||||
if (!CurrentThread)
|
if (!CurrentThread)
|
||||||
{
|
{
|
||||||
DPRINT1("Server Thread TID: [%lx.%lx]\n",
|
DPRINT1("Server Thread TID: [%lx.%lx]\n",
|
||||||
Request->Data.CreateThreadRequest.ClientId.UniqueProcess,
|
ApiMessage->Data.CreateThreadRequest.ClientId.UniqueProcess,
|
||||||
Request->Data.CreateThreadRequest.ClientId.UniqueThread);
|
ApiMessage->Data.CreateThreadRequest.ClientId.UniqueThread);
|
||||||
return STATUS_SUCCESS; // server-to-server
|
return STATUS_SUCCESS; // server-to-server
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the CSR Process for this request */
|
/* Get the CSR Process for this request */
|
||||||
CsrProcess = CurrentThread->Process;
|
CsrProcess = CurrentThread->Process;
|
||||||
if (CsrProcess->ClientId.UniqueProcess !=
|
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? */
|
/* 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 */
|
/* Accept this without any further work */
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the real CSR Process for the remote thread's process */
|
/* 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);
|
&CsrProcess);
|
||||||
if (!NT_SUCCESS(Status)) return Status;
|
if (!NT_SUCCESS(Status)) return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Duplicate the thread handle so we can own it */
|
/* Duplicate the thread handle so we can own it */
|
||||||
Status = NtDuplicateObject(CurrentThread->Process->ProcessHandle,
|
Status = NtDuplicateObject(CurrentThread->Process->ProcessHandle,
|
||||||
Request->Data.CreateThreadRequest.ThreadHandle,
|
ApiMessage->Data.CreateThreadRequest.ThreadHandle,
|
||||||
NtCurrentProcess(),
|
NtCurrentProcess(),
|
||||||
&ThreadHandle,
|
&ThreadHandle,
|
||||||
0,
|
0,
|
||||||
|
@ -181,7 +183,7 @@ CSR_API(CsrSrvCreateThread)
|
||||||
/* Call CSRSRV to tell it about the new thread */
|
/* Call CSRSRV to tell it about the new thread */
|
||||||
Status = CsrCreateThread(CsrProcess,
|
Status = CsrCreateThread(CsrProcess,
|
||||||
ThreadHandle,
|
ThreadHandle,
|
||||||
&Request->Data.CreateThreadRequest.ClientId);
|
&ApiMessage->Data.CreateThreadRequest.ClientId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unlock the process and return */
|
/* Unlock the process and return */
|
||||||
|
@ -191,39 +193,42 @@ CSR_API(CsrSrvCreateThread)
|
||||||
|
|
||||||
CSR_API(CsrTerminateProcess)
|
CSR_API(CsrTerminateProcess)
|
||||||
{
|
{
|
||||||
PCSR_THREAD CsrThread = NtCurrentTeb()->CsrClientThread;
|
PCSR_THREAD CsrThread = CsrGetClientThread();
|
||||||
ASSERT(CsrThread != NULL);
|
ASSERT(CsrThread != NULL);
|
||||||
|
|
||||||
/* Set magic flag so we don't reply this message back */
|
/* Set magic flag so we don't reply this message back */
|
||||||
Request->Type = 0xBABE;
|
ApiMessage->ApiNumber = 0xBABE;
|
||||||
|
|
||||||
/* Remove the CSR_THREADs and CSR_PROCESS */
|
/* Remove the CSR_THREADs and CSR_PROCESS */
|
||||||
return CsrDestroyProcess(&CsrThread->ClientId,
|
return CsrDestroyProcess(&CsrThread->ClientId,
|
||||||
(NTSTATUS)Request->Data.TerminateProcessRequest.uExitCode);
|
(NTSTATUS)ApiMessage->Data.TerminateProcessRequest.uExitCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
CSR_API(CsrConnectProcess)
|
CSR_API(CsrConnectProcess)
|
||||||
{
|
{
|
||||||
|
return STATUS_SUCCESS;
|
||||||
return(STATUS_SUCCESS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CSR_API(CsrGetShutdownParameters)
|
CSR_API(CsrGetShutdownParameters)
|
||||||
{
|
{
|
||||||
|
PCSR_THREAD CsrThread = CsrGetClientThread();
|
||||||
|
ASSERT(CsrThread);
|
||||||
|
|
||||||
Request->Data.GetShutdownParametersRequest.Level = ProcessData->ShutdownLevel;
|
ApiMessage->Data.GetShutdownParametersRequest.Level = CsrThread->Process->ShutdownLevel;
|
||||||
Request->Data.GetShutdownParametersRequest.Flags = ProcessData->ShutdownFlags;
|
ApiMessage->Data.GetShutdownParametersRequest.Flags = CsrThread->Process->ShutdownFlags;
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSR_API(CsrSetShutdownParameters)
|
CSR_API(CsrSetShutdownParameters)
|
||||||
{
|
{
|
||||||
|
PCSR_THREAD CsrThread = CsrGetClientThread();
|
||||||
|
ASSERT(CsrThread);
|
||||||
|
|
||||||
ProcessData->ShutdownLevel = Request->Data.SetShutdownParametersRequest.Level;
|
CsrThread->Process->ShutdownLevel = ApiMessage->Data.SetShutdownParametersRequest.Level;
|
||||||
ProcessData->ShutdownFlags = Request->Data.SetShutdownParametersRequest.Flags;
|
CsrThread->Process->ShutdownFlags = ApiMessage->Data.SetShutdownParametersRequest.Flags;
|
||||||
|
|
||||||
return(STATUS_SUCCESS);
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -32,7 +32,7 @@ CSR_API(CsrRegisterServicesProcess)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ServicesProcessId = (ULONG_PTR)Request->Data.RegisterServicesProcessRequest.ProcessId;
|
ServicesProcessId = (ULONG_PTR)ApiMessage->Data.RegisterServicesProcessRequest.ProcessId;
|
||||||
ServicesProcessIdValid = TRUE;
|
ServicesProcessIdValid = TRUE;
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,39 +62,47 @@ CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions)
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
VOID
|
VOID
|
||||||
FASTCALL
|
FASTCALL
|
||||||
CsrApiCallHandler(PCSR_PROCESS ProcessData,
|
CsrApiCallHandler(PCSR_PROCESS ProcessData,
|
||||||
PCSR_API_MESSAGE Request)
|
PCSR_API_MESSAGE Request)
|
||||||
|
*/
|
||||||
|
VOID
|
||||||
|
FASTCALL
|
||||||
|
CsrApiCallHandler(
|
||||||
|
IN OUT PCSR_API_MESSAGE ApiMessage,
|
||||||
|
OUT PULONG Reply
|
||||||
|
)
|
||||||
{
|
{
|
||||||
unsigned DefIndex;
|
unsigned DefIndex;
|
||||||
ULONG Type;
|
ULONG ApiId;
|
||||||
|
|
||||||
DPRINT("CSR: Calling handler for type: %x.\n", Request->Type);
|
DPRINT("CSR: Calling handler for ApiNumber: %x.\n", ApiMessage->ApiNumber);
|
||||||
Type = Request->Type & 0xFFFF; /* FIXME: USE MACRO */
|
ApiId = CSR_API_NUMBER_TO_API_ID(ApiMessage->ApiNumber);
|
||||||
DPRINT("CSR: API Number: %x ServerID: %x\n",Type, Request->Type >> 16);
|
DPRINT("CSR: ApiID: %x ServerID: %x\n", ApiId, CSR_API_NUMBER_TO_SERVER_ID(ApiMessage->ApiNumber));
|
||||||
|
|
||||||
/* FIXME: Extract DefIndex instead of looping */
|
/* FIXME: Extract DefIndex instead of looping */
|
||||||
for (DefIndex = 0; DefIndex < ApiDefinitionsCount; DefIndex++)
|
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",
|
DPRINT1("Request ApiID %d min request size %d actual %d\n",
|
||||||
Type, ApiDefinitions[DefIndex].MinRequestSize,
|
ApiId, ApiDefinitions[DefIndex].MinRequestSize,
|
||||||
Request->Header.u1.s1.DataLength);
|
ApiMessage->Header.u1.s1.DataLength);
|
||||||
Request->Status = STATUS_INVALID_PARAMETER;
|
ApiMessage->Status = STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Request->Status = (ApiDefinitions[DefIndex].Handler)(ProcessData, Request);
|
ApiMessage->Status = (ApiDefinitions[DefIndex].Handler)(ApiMessage, Reply);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DPRINT1("CSR: Unknown request type 0x%x\n", Request->Type);
|
DPRINT1("CSR: Unknown request ApiNumber 0x%x\n", ApiMessage->ApiNumber);
|
||||||
Request->Status = STATUS_INVALID_SYSTEM_SERVICE;
|
ApiMessage->Status = STATUS_INVALID_SYSTEM_SERVICE;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
@ -127,7 +135,7 @@ CsrHandleHardError(IN PCSR_THREAD ThreadData,
|
||||||
* Pointer to the CSR API Message to receive from the server.
|
* Pointer to the CSR API Message to receive from the server.
|
||||||
*
|
*
|
||||||
* @return STATUS_SUCCESS in case of success, STATUS_ILLEGAL_FUNCTION
|
* @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.
|
* was a problem executing the API.
|
||||||
*
|
*
|
||||||
* @remarks None.
|
* @remarks None.
|
||||||
|
@ -146,7 +154,7 @@ CsrCallServerFromServer(PCSR_API_MESSAGE ReceiveMsg,
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
/* Get the Server ID */
|
/* 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 */
|
/* Make sure that the ID is within limits, and the Server DLL loaded */
|
||||||
if ((ServerId >= CSR_SERVER_DLL_MAX) ||
|
if ((ServerId >= CSR_SERVER_DLL_MAX) ||
|
||||||
|
@ -160,7 +168,7 @@ CsrCallServerFromServer(PCSR_API_MESSAGE ReceiveMsg,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Get the API ID */
|
/* 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 */
|
/* Normalize it with our Base ID */
|
||||||
ApiId -= ServerDll->ApiBase;
|
ApiId -= ServerDll->ApiBase;
|
||||||
|
@ -209,6 +217,7 @@ CsrCallServerFromServer(PCSR_API_MESSAGE ReceiveMsg,
|
||||||
#else // Hacky reactos code
|
#else // Hacky reactos code
|
||||||
|
|
||||||
PCSR_PROCESS ProcessData;
|
PCSR_PROCESS ProcessData;
|
||||||
|
ULONG ReplyCode;
|
||||||
|
|
||||||
/* Get the Process Data */
|
/* Get the Process Data */
|
||||||
CsrLockProcessByClientId(&ReceiveMsg->Header.ClientId.UniqueProcess, &ProcessData);
|
CsrLockProcessByClientId(&ReceiveMsg->Header.ClientId.UniqueProcess, &ProcessData);
|
||||||
|
@ -223,7 +232,7 @@ CsrCallServerFromServer(PCSR_API_MESSAGE ReceiveMsg,
|
||||||
_SEH2_TRY
|
_SEH2_TRY
|
||||||
{
|
{
|
||||||
/* Call the API and get the result */
|
/* Call the API and get the result */
|
||||||
CsrApiCallHandler(ProcessData, ReplyMsg);
|
CsrApiCallHandler(ReplyMsg, /*ProcessData*/ &ReplyCode);
|
||||||
}
|
}
|
||||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||||
{
|
{
|
||||||
|
@ -1163,7 +1172,7 @@ HandleHardError:
|
||||||
{
|
{
|
||||||
/* This is an API Message coming from a non-CSR Thread */
|
/* This is an API Message coming from a non-CSR Thread */
|
||||||
DPRINT1("No thread found for request %lx and clientID %lx.%lx\n",
|
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.UniqueProcess,
|
||||||
Request->Header.ClientId.UniqueThread);
|
Request->Header.ClientId.UniqueThread);
|
||||||
Reply = Request;
|
Reply = Request;
|
||||||
|
@ -1276,12 +1285,14 @@ HandleHardError:
|
||||||
ReplyPort = CsrThread->Process->ClientPort;
|
ReplyPort = CsrThread->Process->ClientPort;
|
||||||
|
|
||||||
DPRINT("CSR: Got CSR API: %x [Message Origin: %x]\n",
|
DPRINT("CSR: Got CSR API: %x [Message Origin: %x]\n",
|
||||||
Request->Type,
|
Request->ApiNumber,
|
||||||
Request->Header.ClientId.UniqueThread);
|
Request->Header.ClientId.UniqueThread);
|
||||||
|
|
||||||
/* Validation complete, start SEH */
|
/* Validation complete, start SEH */
|
||||||
_SEH2_TRY
|
_SEH2_TRY
|
||||||
{
|
{
|
||||||
|
ULONG ReplyCode;
|
||||||
|
|
||||||
/* Make sure we have enough threads */
|
/* Make sure we have enough threads */
|
||||||
CsrpCheckRequestThreads();
|
CsrpCheckRequestThreads();
|
||||||
|
|
||||||
|
@ -1289,7 +1300,7 @@ HandleHardError:
|
||||||
NtCurrentTeb()->CsrClientThread = CsrThread;
|
NtCurrentTeb()->CsrClientThread = CsrThread;
|
||||||
|
|
||||||
/* Call the Handler */
|
/* Call the Handler */
|
||||||
CsrApiCallHandler(CsrThread->Process, Request);
|
CsrApiCallHandler(Request, &ReplyCode);
|
||||||
|
|
||||||
/* Increase the static thread count */
|
/* Increase the static thread count */
|
||||||
_InterlockedIncrement(&CsrpStaticThreadCount);
|
_InterlockedIncrement(&CsrpStaticThreadCount);
|
||||||
|
@ -1298,7 +1309,7 @@ HandleHardError:
|
||||||
NtCurrentTeb()->CsrClientThread = ServerThread;
|
NtCurrentTeb()->CsrClientThread = ServerThread;
|
||||||
|
|
||||||
/* Check if this is a dead client now */
|
/* Check if this is a dead client now */
|
||||||
if (Request->Type == 0xBABE)
|
if (Request->ApiNumber == 0xBABE)
|
||||||
{
|
{
|
||||||
/* Reply to the death message */
|
/* Reply to the death message */
|
||||||
NtReplyPort(ReplyPort, &Reply->Header);
|
NtReplyPort(ReplyPort, &Reply->Header);
|
||||||
|
|
|
@ -187,7 +187,7 @@ NTAPI
|
||||||
CsrImpersonateClient(IN PCSR_THREAD CsrThread)
|
CsrImpersonateClient(IN PCSR_THREAD CsrThread)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PCSR_THREAD CurrentThread = NtCurrentTeb()->CsrClientThread;
|
PCSR_THREAD CurrentThread = CsrGetClientThread();
|
||||||
|
|
||||||
/* Use the current thread if none given */
|
/* Use the current thread if none given */
|
||||||
if (!CsrThread) CsrThread = CurrentThread;
|
if (!CsrThread) CsrThread = CurrentThread;
|
||||||
|
@ -241,7 +241,7 @@ NTAPI
|
||||||
CsrRevertToSelf(VOID)
|
CsrRevertToSelf(VOID)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PCSR_THREAD CurrentThread = NtCurrentTeb()->CsrClientThread;
|
PCSR_THREAD CurrentThread = CsrGetClientThread();
|
||||||
HANDLE ImpersonationToken = NULL;
|
HANDLE ImpersonationToken = NULL;
|
||||||
|
|
||||||
/* Check if we have a Current Thread */
|
/* Check if we have a Current Thread */
|
||||||
|
@ -699,7 +699,7 @@ CsrCreateProcess(IN HANDLE hProcess,
|
||||||
IN ULONG Flags,
|
IN ULONG Flags,
|
||||||
IN PCLIENT_ID DebugCid)
|
IN PCLIENT_ID DebugCid)
|
||||||
{
|
{
|
||||||
PCSR_THREAD CurrentThread = NtCurrentTeb()->CsrClientThread;
|
PCSR_THREAD CurrentThread = CsrGetClientThread();
|
||||||
CLIENT_ID CurrentCid;
|
CLIENT_ID CurrentCid;
|
||||||
PCSR_PROCESS CurrentProcess;
|
PCSR_PROCESS CurrentProcess;
|
||||||
// PVOID ProcessData;
|
// PVOID ProcessData;
|
||||||
|
|
|
@ -281,7 +281,7 @@ CsrSrvClientConnect(IN OUT PCSR_API_MESSAGE ApiMessage,
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PCSR_CLIENT_CONNECT ClientConnect;
|
PCSR_CLIENT_CONNECT ClientConnect;
|
||||||
PCSR_SERVER_DLL ServerDll;
|
PCSR_SERVER_DLL ServerDll;
|
||||||
PCSR_PROCESS CurrentProcess = ((PCSR_THREAD)NtCurrentTeb()->CsrClientThread)->Process;
|
PCSR_PROCESS CurrentProcess = CsrGetClientThread()->Process;
|
||||||
|
|
||||||
/* Load the Message, set default reply */
|
/* Load the Message, set default reply */
|
||||||
ClientConnect = (PCSR_CLIENT_CONNECT)&ApiMessage->CsrClientConnect;
|
ClientConnect = (PCSR_CLIENT_CONNECT)&ApiMessage->CsrClientConnect;
|
||||||
|
@ -525,7 +525,7 @@ NTAPI
|
||||||
CsrSrvIdentifyAlertableThread(IN OUT PCSR_API_MESSAGE ApiMessage,
|
CsrSrvIdentifyAlertableThread(IN OUT PCSR_API_MESSAGE ApiMessage,
|
||||||
IN OUT PULONG Reply)
|
IN OUT PULONG Reply)
|
||||||
{
|
{
|
||||||
PCSR_THREAD CsrThread = NtCurrentTeb()->CsrClientThread;
|
PCSR_THREAD CsrThread = CsrGetClientThread();
|
||||||
|
|
||||||
/* Set the alertable flag */
|
/* Set the alertable flag */
|
||||||
CsrThread->Flags |= CsrThreadAltertable;
|
CsrThread->Flags |= CsrThreadAltertable;
|
||||||
|
|
|
@ -668,7 +668,7 @@ CsrCreateThread(IN PCSR_PROCESS CsrProcess,
|
||||||
{
|
{
|
||||||
PCSR_THREAD CsrThread;
|
PCSR_THREAD CsrThread;
|
||||||
PCSR_PROCESS CurrentProcess;
|
PCSR_PROCESS CurrentProcess;
|
||||||
PCSR_THREAD CurrentThread = NtCurrentTeb()->CsrClientThread;
|
PCSR_THREAD CurrentThread = CsrGetClientThread();
|
||||||
CLIENT_ID CurrentCid;
|
CLIENT_ID CurrentCid;
|
||||||
KERNEL_USER_TIMES KernelTimes;
|
KERNEL_USER_TIMES KernelTimes;
|
||||||
|
|
||||||
|
|
|
@ -11,14 +11,15 @@
|
||||||
#include <ndk/psfuncs.h>
|
#include <ndk/psfuncs.h>
|
||||||
#include <ndk/rtlfuncs.h>
|
#include <ndk/rtlfuncs.h>
|
||||||
|
|
||||||
#include <csrss/csrss.h>
|
#include <csrss/server.h>
|
||||||
|
|
||||||
|
|
||||||
|
#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() \
|
#define ProcessStructureListLocked() \
|
||||||
(ProcessDataLock.OwningThread == NtCurrentTeb()->ClientId.UniqueThread)
|
(ProcessDataLock.OwningThread == NtCurrentTeb()->ClientId.UniqueThread)
|
||||||
|
|
||||||
|
@ -34,230 +35,35 @@
|
||||||
#define CsrReleaseNtSessionLock() \
|
#define CsrReleaseNtSessionLock() \
|
||||||
RtlLeaveCriticalSection(&CsrNtSessionLock);
|
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
|
typedef struct _CSRSS_API_DEFINITION
|
||||||
{
|
{
|
||||||
ULONG Type;
|
ULONG ApiID;
|
||||||
ULONG MinRequestSize;
|
ULONG MinRequestSize;
|
||||||
CSRSS_API_PROC Handler;
|
PCSR_API_ROUTINE Handler;
|
||||||
} CSRSS_API_DEFINITION, *PCSRSS_API_DEFINITION;
|
} CSRSS_API_DEFINITION, *PCSRSS_API_DEFINITION;
|
||||||
|
|
||||||
#define CSRSS_DEFINE_API(Func, Handler) \
|
#define CSRSS_DEFINE_API(Func, Handler) \
|
||||||
{ Func, sizeof(CSRSS_##Func), Handler }
|
{ Func, sizeof(CSRSS_##Func), Handler }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _CSRSS_LISTEN_DATA
|
typedef struct _CSRSS_LISTEN_DATA
|
||||||
{
|
{
|
||||||
HANDLE ApiPortHandle;
|
HANDLE ApiPortHandle;
|
||||||
ULONG ApiDefinitionsCount;
|
ULONG ApiDefinitionsCount;
|
||||||
PCSRSS_API_DEFINITION *ApiDefinitions;
|
PCSRSS_API_DEFINITION *ApiDefinitions;
|
||||||
} CSRSS_LISTEN_DATA, *PCSRSS_LISTEN_DATA;
|
} CSRSS_LISTEN_DATA, *PCSRSS_LISTEN_DATA;
|
||||||
|
|
||||||
#define CSR_API(n) NTSTATUS WINAPI n ( \
|
|
||||||
PCSR_PROCESS ProcessData, \
|
|
||||||
PCSR_API_MESSAGE Request)
|
|
||||||
|
/******************************************************************************
|
||||||
|
******************************************************************************
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* init.c */
|
/* init.c */
|
||||||
extern HANDLE hBootstrapOk;
|
extern HANDLE hBootstrapOk;
|
||||||
|
@ -304,15 +110,10 @@ CsrInsertProcess(IN PCSR_PROCESS Parent OPTIONAL,
|
||||||
|
|
||||||
/* api/wapi.c */
|
/* api/wapi.c */
|
||||||
NTSTATUS FASTCALL CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions);
|
NTSTATUS FASTCALL CsrApiRegisterDefinitions(PCSRSS_API_DEFINITION NewDefinitions);
|
||||||
VOID FASTCALL CsrApiCallHandler(PCSR_PROCESS ProcessData,
|
VOID FASTCALL CsrApiCallHandler(IN OUT PCSR_API_MESSAGE ApiMessage, OUT PULONG Reply);
|
||||||
PCSR_API_MESSAGE Request);
|
|
||||||
VOID WINAPI CsrSbApiRequestThread (PVOID PortHandle);
|
VOID WINAPI CsrSbApiRequestThread (PVOID PortHandle);
|
||||||
VOID NTAPI ClientConnectionThread(HANDLE ServerPort);
|
VOID NTAPI ClientConnectionThread(HANDLE ServerPort);
|
||||||
|
|
||||||
VOID
|
|
||||||
NTAPI
|
|
||||||
CsrReleaseCapturedArguments(IN PCSR_API_MESSAGE ApiMessage);
|
|
||||||
|
|
||||||
extern HANDLE CsrApiPort;
|
extern HANDLE CsrApiPort;
|
||||||
extern HANDLE CsrSmApiPort;
|
extern HANDLE CsrSmApiPort;
|
||||||
extern HANDLE CsrSbApiPort;
|
extern HANDLE CsrSbApiPort;
|
||||||
|
@ -357,7 +158,7 @@ CsrLockedReferenceThread(IN PCSR_THREAD CsrThread);
|
||||||
|
|
||||||
/* api/process.c */
|
/* api/process.c */
|
||||||
typedef NTSTATUS (WINAPI *CSRSS_ENUM_PROCESS_PROC)(PCSR_PROCESS ProcessData,
|
typedef NTSTATUS (WINAPI *CSRSS_ENUM_PROCESS_PROC)(PCSR_PROCESS ProcessData,
|
||||||
PVOID Context);
|
PVOID Context);
|
||||||
NTSTATUS WINAPI CsrInitializeProcessStructure(VOID);
|
NTSTATUS WINAPI CsrInitializeProcessStructure(VOID);
|
||||||
|
|
||||||
NTSTATUS WINAPI CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc, PVOID Context);
|
NTSTATUS WINAPI CsrEnumProcesses(CSRSS_ENUM_PROCESS_PROC EnumProc, PVOID Context);
|
||||||
|
|
|
@ -70,8 +70,9 @@ typedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
|
||||||
/* SEH support with PSEH */
|
/* SEH support with PSEH */
|
||||||
#include <pseh/pseh2.h>
|
#include <pseh/pseh2.h>
|
||||||
|
|
||||||
/* CSRSS header */
|
/* CSRSS Header */
|
||||||
#include <csrss/csrss.h>
|
#include <csrss/client.h>
|
||||||
|
#include <csrss/csrss.h> // FIXME: data header.
|
||||||
|
|
||||||
/* Public Win32K headers */
|
/* Public Win32K headers */
|
||||||
#include <include/callback.h>
|
#include <include/callback.h>
|
||||||
|
|
|
@ -34,7 +34,7 @@ CsrInit(void)
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
&ConnectInfoLength);
|
&ConnectInfoLength);
|
||||||
if (! NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1208,7 +1208,7 @@ NtUserCreateDesktop(
|
||||||
/*
|
/*
|
||||||
* Create a handle for CSRSS and notify CSRSS for Creating Desktop Background Windows and Threads.
|
* 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,
|
Status = CsrInsertObject(Desktop,
|
||||||
GENERIC_ALL,
|
GENERIC_ALL,
|
||||||
(HANDLE*)&Request.Data.CreateDesktopRequest.DesktopHandle);
|
(HANDLE*)&Request.Data.CreateDesktopRequest.DesktopHandle);
|
||||||
|
|
|
@ -52,7 +52,7 @@ co_IntRegisterLogonProcess(HANDLE ProcessId, BOOL Register)
|
||||||
|
|
||||||
ObDereferenceObject(Process);
|
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.ProcessId = ProcessId;
|
||||||
Request.Data.RegisterLogonProcessRequest.Register = Register;
|
Request.Data.RegisterLogonProcessRequest.Register = Register;
|
||||||
|
|
||||||
|
|
|
@ -29,8 +29,9 @@
|
||||||
#include <ndk/rtlfuncs.h>
|
#include <ndk/rtlfuncs.h>
|
||||||
#include <ndk/umfuncs.h>
|
#include <ndk/umfuncs.h>
|
||||||
|
|
||||||
/* CSRSS Headers */
|
/* CSRSS Header */
|
||||||
#include <csrss/csrss.h>
|
#include <csrss/client.h>
|
||||||
|
#include <csrss/csrss.h> // FIXME: data header.
|
||||||
|
|
||||||
/* Public Win32K Headers */
|
/* Public Win32K Headers */
|
||||||
#include <ntusrtyp.h>
|
#include <ntusrtyp.h>
|
||||||
|
|
|
@ -109,4 +109,3 @@ static __inline void LoadUserApiHook()
|
||||||
#define HOOKID_TO_FLAG(HookId) (1 << ((HookId) + 1))
|
#define HOOKID_TO_FLAG(HookId) (1 << ((HookId) + 1))
|
||||||
#define ISITHOOKED(HookId) (GetWin32ClientInfo()->fsHooks & HOOKID_TO_FLAG(HookId) ||\
|
#define ISITHOOKED(HookId) (GetWin32ClientInfo()->fsHooks & HOOKID_TO_FLAG(HookId) ||\
|
||||||
(GetWin32ClientInfo()->pDeskInfo && GetWin32ClientInfo()->pDeskInfo->fsHooks & HOOKID_TO_FLAG(HookId)))
|
(GetWin32ClientInfo()->pDeskInfo && GetWin32ClientInfo()->pDeskInfo->fsHooks & HOOKID_TO_FLAG(HookId)))
|
||||||
|
|
|
@ -65,27 +65,25 @@
|
||||||
*/
|
*/
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
ExitWindowsEx(UINT uFlags,
|
ExitWindowsEx(UINT uFlags,
|
||||||
DWORD dwReserved)
|
DWORD dwReserved)
|
||||||
{
|
{
|
||||||
CSR_API_MESSAGE Request;
|
CSR_API_MESSAGE Request;
|
||||||
ULONG CsrRequest;
|
NTSTATUS Status;
|
||||||
NTSTATUS Status;
|
|
||||||
|
|
||||||
CsrRequest = MAKE_CSR_API(EXIT_REACTOS, CSR_GUI);
|
Request.Data.ExitReactosRequest.Flags = uFlags;
|
||||||
Request.Data.ExitReactosRequest.Flags = uFlags;
|
Request.Data.ExitReactosRequest.Reserved = dwReserved;
|
||||||
Request.Data.ExitReactosRequest.Reserved = dwReserved;
|
|
||||||
|
|
||||||
Status = CsrClientCallServer(&Request,
|
Status = CsrClientCallServer(&Request,
|
||||||
NULL,
|
NULL,
|
||||||
CsrRequest,
|
CSR_CREATE_API_NUMBER(CSR_GUI, EXIT_REACTOS),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSR_API_MESSAGE));
|
||||||
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
||||||
{
|
{
|
||||||
SetLastError(RtlNtStatusToDosError(Status));
|
SetLastError(RtlNtStatusToDosError(Status));
|
||||||
return(FALSE);
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(TRUE);
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -95,24 +93,22 @@ ExitWindowsEx(UINT uFlags,
|
||||||
BOOL WINAPI
|
BOOL WINAPI
|
||||||
RegisterServicesProcess(DWORD ServicesProcessId)
|
RegisterServicesProcess(DWORD ServicesProcessId)
|
||||||
{
|
{
|
||||||
CSR_API_MESSAGE Request;
|
CSR_API_MESSAGE Request;
|
||||||
ULONG CsrRequest;
|
NTSTATUS Status;
|
||||||
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,
|
Status = CsrClientCallServer(&Request,
|
||||||
NULL,
|
NULL,
|
||||||
CsrRequest,
|
CSR_CREATE_API_NUMBER(CSR_GUI, REGISTER_SERVICES_PROCESS),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSR_API_MESSAGE));
|
||||||
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
||||||
{
|
{
|
||||||
SetLastError(RtlNtStatusToDosError(Status));
|
SetLastError(RtlNtStatusToDosError(Status));
|
||||||
return(FALSE);
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return(TRUE);
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -52,25 +52,23 @@ BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
SetLogonNotifyWindow (HWND Wnd, HWINSTA WinSta)
|
SetLogonNotifyWindow (HWND Wnd, HWINSTA WinSta)
|
||||||
{
|
{
|
||||||
/* Maybe we should call NtUserSetLogonNotifyWindow and let that one inform CSRSS??? */
|
/* Maybe we should call NtUserSetLogonNotifyWindow and let that one inform CSRSS??? */
|
||||||
CSR_API_MESSAGE Request;
|
CSR_API_MESSAGE Request;
|
||||||
ULONG CsrRequest;
|
NTSTATUS Status;
|
||||||
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,
|
Status = CsrClientCallServer(&Request,
|
||||||
NULL,
|
NULL,
|
||||||
CsrRequest,
|
CSR_CREATE_API_NUMBER(CSR_GUI, SET_LOGON_NOTIFY_WINDOW),
|
||||||
sizeof(CSR_API_MESSAGE));
|
sizeof(CSR_API_MESSAGE));
|
||||||
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
if (!NT_SUCCESS(Status) || !NT_SUCCESS(Status = Request.Status))
|
||||||
{
|
{
|
||||||
SetLastError(RtlNtStatusToDosError(Status));
|
SetLastError(RtlNtStatusToDosError(Status));
|
||||||
return(FALSE);
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NtUserSetLogonNotifyWindow(Wnd);
|
return NtUserSetLogonNotifyWindow(Wnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -288,24 +288,24 @@ CSR_API(CsrAddConsoleAlias)
|
||||||
//ULONG TotalLength;
|
//ULONG TotalLength;
|
||||||
//WCHAR * Ptr;
|
//WCHAR * Ptr;
|
||||||
|
|
||||||
//TotalLength = Request->Data.AddConsoleAlias.SourceLength + Request->Data.AddConsoleAlias.ExeLength + Request->Data.AddConsoleAlias.TargetLength;
|
//TotalLength = ApiMessage->Data.AddConsoleAlias.SourceLength + ApiMessage->Data.AddConsoleAlias.ExeLength + ApiMessage->Data.AddConsoleAlias.TargetLength;
|
||||||
//Ptr = (WCHAR*)((ULONG_PTR)Request + sizeof(CSR_API_MESSAGE));
|
//Ptr = (WCHAR*)((ULONG_PTR)ApiMessage + sizeof(CSR_API_MESSAGE));
|
||||||
|
|
||||||
lpSource = (WCHAR*)((ULONG_PTR)Request + sizeof(CSR_API_MESSAGE));
|
lpSource = (WCHAR*)((ULONG_PTR)ApiMessage + sizeof(CSR_API_MESSAGE));
|
||||||
lpExeName = (WCHAR*)((ULONG_PTR)Request + sizeof(CSR_API_MESSAGE) + Request->Data.AddConsoleAlias.SourceLength * sizeof(WCHAR));
|
lpExeName = (WCHAR*)((ULONG_PTR)ApiMessage + sizeof(CSR_API_MESSAGE) + ApiMessage->Data.AddConsoleAlias.SourceLength * sizeof(WCHAR));
|
||||||
lpTarget = (Request->Data.AddConsoleAlias.TargetLength != 0 ? lpExeName + Request->Data.AddConsoleAlias.ExeLength : NULL);
|
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)
|
if (lpExeName == NULL || lpSource == NULL)
|
||||||
{
|
{
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Request->Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
ApiMessage->Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (!NT_SUCCESS(Request->Status))
|
if (!NT_SUCCESS(ApiMessage->Status))
|
||||||
{
|
{
|
||||||
return Request->Status;
|
return ApiMessage->Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Header = IntFindAliasHeader(Console->Aliases, lpExeName);
|
Header = IntFindAliasHeader(Console->Aliases, lpExeName);
|
||||||
|
@ -326,14 +326,14 @@ CSR_API(CsrAddConsoleAlias)
|
||||||
if (Entry)
|
if (Entry)
|
||||||
{
|
{
|
||||||
IntDeleteAliasEntry(Header, Entry);
|
IntDeleteAliasEntry(Header, Entry);
|
||||||
Request->Status = STATUS_SUCCESS;
|
ApiMessage->Status = STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Request->Status = STATUS_INVALID_PARAMETER;
|
ApiMessage->Status = STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return Request->Status;
|
return ApiMessage->Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Entry = IntCreateAliasEntry(lpSource, lpTarget);
|
Entry = IntCreateAliasEntry(lpSource, lpTarget);
|
||||||
|
@ -359,24 +359,24 @@ CSR_API(CsrGetConsoleAlias)
|
||||||
WCHAR * lpSource;
|
WCHAR * lpSource;
|
||||||
WCHAR * lpTarget;
|
WCHAR * lpTarget;
|
||||||
|
|
||||||
lpSource = (LPWSTR)((ULONG_PTR)Request + sizeof(CSR_API_MESSAGE));
|
lpSource = (LPWSTR)((ULONG_PTR)ApiMessage + sizeof(CSR_API_MESSAGE));
|
||||||
lpExeName = lpSource + Request->Data.GetConsoleAlias.SourceLength;
|
lpExeName = lpSource + ApiMessage->Data.GetConsoleAlias.SourceLength;
|
||||||
lpTarget = Request->Data.GetConsoleAlias.TargetBuffer;
|
lpTarget = ApiMessage->Data.GetConsoleAlias.TargetBuffer;
|
||||||
|
|
||||||
|
|
||||||
DPRINT("CsrGetConsoleAlias entered lpExeName %p lpSource %p TargetBuffer %p TargetBufferLength %u\n",
|
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 ||
|
if (ApiMessage->Data.GetConsoleAlias.ExeLength == 0 || lpTarget == NULL ||
|
||||||
Request->Data.GetConsoleAlias.TargetBufferLength == 0 || Request->Data.GetConsoleAlias.SourceLength == 0)
|
ApiMessage->Data.GetConsoleAlias.TargetBufferLength == 0 || ApiMessage->Data.GetConsoleAlias.SourceLength == 0)
|
||||||
{
|
{
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Request->Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
ApiMessage->Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (!NT_SUCCESS(Request->Status))
|
if (!NT_SUCCESS(ApiMessage->Status))
|
||||||
{
|
{
|
||||||
return Request->Status;
|
return ApiMessage->Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Header = IntFindAliasHeader(Console->Aliases, lpExeName);
|
Header = IntFindAliasHeader(Console->Aliases, lpExeName);
|
||||||
|
@ -394,21 +394,21 @@ CSR_API(CsrGetConsoleAlias)
|
||||||
}
|
}
|
||||||
|
|
||||||
Length = (wcslen(Entry->lpTarget)+1) * sizeof(WCHAR);
|
Length = (wcslen(Entry->lpTarget)+1) * sizeof(WCHAR);
|
||||||
if (Length > Request->Data.GetConsoleAlias.TargetBufferLength)
|
if (Length > ApiMessage->Data.GetConsoleAlias.TargetBufferLength)
|
||||||
{
|
{
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_BUFFER_TOO_SMALL;
|
return STATUS_BUFFER_TOO_SMALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Win32CsrValidateBuffer(ProcessData, lpTarget,
|
if (!Win32CsrValidateBuffer(CsrGetClientThread()->Process, lpTarget,
|
||||||
Request->Data.GetConsoleAlias.TargetBufferLength, 1))
|
ApiMessage->Data.GetConsoleAlias.TargetBufferLength, 1))
|
||||||
{
|
{
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_ACCESS_VIOLATION;
|
return STATUS_ACCESS_VIOLATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
wcscpy(lpTarget, Entry->lpTarget);
|
wcscpy(lpTarget, Entry->lpTarget);
|
||||||
Request->Data.GetConsoleAlias.BytesWritten = Length;
|
ApiMessage->Data.GetConsoleAlias.BytesWritten = Length;
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -419,33 +419,33 @@ CSR_API(CsrGetAllConsoleAliases)
|
||||||
ULONG BytesWritten;
|
ULONG BytesWritten;
|
||||||
PALIAS_HEADER Header;
|
PALIAS_HEADER Header;
|
||||||
|
|
||||||
if (Request->Data.GetAllConsoleAlias.lpExeName == NULL)
|
if (ApiMessage->Data.GetAllConsoleAlias.lpExeName == NULL)
|
||||||
{
|
{
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Request->Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
ApiMessage->Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (!NT_SUCCESS(Request->Status))
|
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)
|
if (!Header)
|
||||||
{
|
{
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IntGetAllConsoleAliasesLength(Header) > Request->Data.GetAllConsoleAlias.AliasBufferLength)
|
if (IntGetAllConsoleAliasesLength(Header) > ApiMessage->Data.GetAllConsoleAlias.AliasBufferLength)
|
||||||
{
|
{
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_BUFFER_OVERFLOW;
|
return STATUS_BUFFER_OVERFLOW;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Win32CsrValidateBuffer(ProcessData,
|
if (!Win32CsrValidateBuffer(CsrGetClientThread()->Process,
|
||||||
Request->Data.GetAllConsoleAlias.AliasBuffer,
|
ApiMessage->Data.GetAllConsoleAlias.AliasBuffer,
|
||||||
Request->Data.GetAllConsoleAlias.AliasBufferLength,
|
ApiMessage->Data.GetAllConsoleAlias.AliasBufferLength,
|
||||||
1))
|
1))
|
||||||
{
|
{
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
|
@ -453,10 +453,10 @@ CSR_API(CsrGetAllConsoleAliases)
|
||||||
}
|
}
|
||||||
|
|
||||||
BytesWritten = IntGetAllConsoleAliases(Header,
|
BytesWritten = IntGetAllConsoleAliases(Header,
|
||||||
Request->Data.GetAllConsoleAlias.AliasBuffer,
|
ApiMessage->Data.GetAllConsoleAlias.AliasBuffer,
|
||||||
Request->Data.GetAllConsoleAlias.AliasBufferLength);
|
ApiMessage->Data.GetAllConsoleAlias.AliasBufferLength);
|
||||||
|
|
||||||
Request->Data.GetAllConsoleAlias.BytesWritten = BytesWritten;
|
ApiMessage->Data.GetAllConsoleAlias.BytesWritten = BytesWritten;
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -467,18 +467,18 @@ CSR_API(CsrGetAllConsoleAliasesLength)
|
||||||
PALIAS_HEADER Header;
|
PALIAS_HEADER Header;
|
||||||
UINT Length;
|
UINT Length;
|
||||||
|
|
||||||
if (Request->Data.GetAllConsoleAliasesLength.lpExeName == NULL)
|
if (ApiMessage->Data.GetAllConsoleAliasesLength.lpExeName == NULL)
|
||||||
{
|
{
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Request->Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
ApiMessage->Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (!NT_SUCCESS(Request->Status))
|
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)
|
if (!Header)
|
||||||
{
|
{
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
|
@ -486,7 +486,7 @@ CSR_API(CsrGetAllConsoleAliasesLength)
|
||||||
}
|
}
|
||||||
|
|
||||||
Length = IntGetAllConsoleAliasesLength(Header);
|
Length = IntGetAllConsoleAliasesLength(Header);
|
||||||
Request->Data.GetAllConsoleAliasesLength.Length = Length;
|
ApiMessage->Data.GetAllConsoleAliasesLength.Length = Length;
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -499,29 +499,29 @@ CSR_API(CsrGetConsoleAliasesExes)
|
||||||
|
|
||||||
DPRINT("CsrGetConsoleAliasesExes entered\n");
|
DPRINT("CsrGetConsoleAliasesExes entered\n");
|
||||||
|
|
||||||
Request->Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
ApiMessage->Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (!NT_SUCCESS(Request->Status))
|
if (!NT_SUCCESS(ApiMessage->Status))
|
||||||
{
|
{
|
||||||
return Request->Status;
|
return ApiMessage->Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
ExesLength = IntGetConsoleAliasesExesLength(Console->Aliases);
|
ExesLength = IntGetConsoleAliasesExesLength(Console->Aliases);
|
||||||
|
|
||||||
if (ExesLength > Request->Data.GetConsoleAliasesExes.Length)
|
if (ExesLength > ApiMessage->Data.GetConsoleAliasesExes.Length)
|
||||||
{
|
{
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_BUFFER_OVERFLOW;
|
return STATUS_BUFFER_OVERFLOW;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Request->Data.GetConsoleAliasesExes.ExeNames == NULL)
|
if (ApiMessage->Data.GetConsoleAliasesExes.ExeNames == NULL)
|
||||||
{
|
{
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Win32CsrValidateBuffer(ProcessData,
|
if (!Win32CsrValidateBuffer(CsrGetClientThread()->Process,
|
||||||
Request->Data.GetConsoleAliasesExes.ExeNames,
|
ApiMessage->Data.GetConsoleAliasesExes.ExeNames,
|
||||||
Request->Data.GetConsoleAliasesExes.Length,
|
ApiMessage->Data.GetConsoleAliasesExes.Length,
|
||||||
1))
|
1))
|
||||||
{
|
{
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
|
@ -529,10 +529,10 @@ CSR_API(CsrGetConsoleAliasesExes)
|
||||||
}
|
}
|
||||||
|
|
||||||
BytesWritten = IntGetConsoleAliasesExes(Console->Aliases,
|
BytesWritten = IntGetConsoleAliasesExes(Console->Aliases,
|
||||||
Request->Data.GetConsoleAliasesExes.ExeNames,
|
ApiMessage->Data.GetConsoleAliasesExes.ExeNames,
|
||||||
Request->Data.GetConsoleAliasesExes.Length);
|
ApiMessage->Data.GetConsoleAliasesExes.Length);
|
||||||
|
|
||||||
Request->Data.GetConsoleAliasesExes.BytesWritten = BytesWritten;
|
ApiMessage->Data.GetConsoleAliasesExes.BytesWritten = BytesWritten;
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -542,11 +542,11 @@ CSR_API(CsrGetConsoleAliasesExesLength)
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
DPRINT("CsrGetConsoleAliasesExesLength entered\n");
|
DPRINT("CsrGetConsoleAliasesExesLength entered\n");
|
||||||
|
|
||||||
Request->Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
ApiMessage->Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (NT_SUCCESS(Request->Status))
|
if (NT_SUCCESS(ApiMessage->Status))
|
||||||
{
|
{
|
||||||
Request->Data.GetConsoleAliasesExesLength.Length = IntGetConsoleAliasesExesLength(Console->Aliases);
|
ApiMessage->Data.GetConsoleAliasesExesLength.Length = IntGetConsoleAliasesExesLength(Console->Aliases);
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
}
|
}
|
||||||
return Request->Status;
|
return ApiMessage->Status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,30 +30,31 @@ CSR_API(CsrReadConsole)
|
||||||
PWCHAR UnicodeBuffer;
|
PWCHAR UnicodeBuffer;
|
||||||
ULONG i = 0;
|
ULONG i = 0;
|
||||||
ULONG nNumberOfCharsToRead, CharSize;
|
ULONG nNumberOfCharsToRead, CharSize;
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
DPRINT("CsrReadConsole\n");
|
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;
|
UnicodeBuffer = (PWCHAR)Buffer;
|
||||||
if (!Win32CsrValidateBuffer(ProcessData, Buffer, nNumberOfCharsToRead, CharSize))
|
if (!Win32CsrValidateBuffer(ProcessData, Buffer, nNumberOfCharsToRead, CharSize))
|
||||||
return STATUS_ACCESS_VIOLATION;
|
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;
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
Status = ConioLockConsole(ProcessData, Request->Data.ReadConsoleRequest.ConsoleHandle,
|
Status = ConioLockConsole(ProcessData, ApiMessage->Data.ReadConsoleRequest.ConsoleHandle,
|
||||||
&Console, GENERIC_READ);
|
&Console, GENERIC_READ);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
Request->Data.ReadConsoleRequest.EventHandle = ProcessData->ConsoleEvent;
|
ApiMessage->Data.ReadConsoleRequest.EventHandle = ProcessData->ConsoleEvent;
|
||||||
|
|
||||||
Status = STATUS_PENDING; /* we haven't read anything (yet) */
|
Status = STATUS_PENDING; /* we haven't read anything (yet) */
|
||||||
if (Console->Mode & ENABLE_LINE_INPUT)
|
if (Console->Mode & ENABLE_LINE_INPUT)
|
||||||
|
@ -71,8 +72,8 @@ CSR_API(CsrReadConsole)
|
||||||
Console->LineComplete = FALSE;
|
Console->LineComplete = FALSE;
|
||||||
Console->LineUpPressed = FALSE;
|
Console->LineUpPressed = FALSE;
|
||||||
Console->LineInsertToggle = 0;
|
Console->LineInsertToggle = 0;
|
||||||
Console->LineWakeupMask = Request->Data.ReadConsoleRequest.CtrlWakeupMask;
|
Console->LineWakeupMask = ApiMessage->Data.ReadConsoleRequest.CtrlWakeupMask;
|
||||||
Console->LineSize = Request->Data.ReadConsoleRequest.NrCharactersRead;
|
Console->LineSize = ApiMessage->Data.ReadConsoleRequest.NrCharactersRead;
|
||||||
Console->LinePos = Console->LineSize;
|
Console->LinePos = Console->LineSize;
|
||||||
/* pre-filling the buffer is only allowed in the Unicode API,
|
/* pre-filling the buffer is only allowed in the Unicode API,
|
||||||
* so we don't need to worry about conversion */
|
* so we don't need to worry about conversion */
|
||||||
|
@ -100,7 +101,7 @@ CSR_API(CsrReadConsole)
|
||||||
&& Input->InputEvent.Event.KeyEvent.bKeyDown)
|
&& Input->InputEvent.Event.KeyEvent.bKeyDown)
|
||||||
{
|
{
|
||||||
LineInputKeyDown(Console, &Input->InputEvent.Event.KeyEvent);
|
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);
|
HeapFree(Win32CsrApiHeap, 0, Input);
|
||||||
}
|
}
|
||||||
|
@ -111,7 +112,7 @@ CSR_API(CsrReadConsole)
|
||||||
while (i < nNumberOfCharsToRead && Console->LinePos != Console->LineSize)
|
while (i < nNumberOfCharsToRead && Console->LinePos != Console->LineSize)
|
||||||
{
|
{
|
||||||
WCHAR Char = Console->LineBuffer[Console->LinePos++];
|
WCHAR Char = Console->LineBuffer[Console->LinePos++];
|
||||||
if (Request->Data.ReadConsoleRequest.Unicode)
|
if (ApiMessage->Data.ReadConsoleRequest.Unicode)
|
||||||
UnicodeBuffer[i++] = Char;
|
UnicodeBuffer[i++] = Char;
|
||||||
else
|
else
|
||||||
ConsoleInputUnicodeCharToAnsiChar(Console, &Buffer[i++], &Char);
|
ConsoleInputUnicodeCharToAnsiChar(Console, &Buffer[i++], &Char);
|
||||||
|
@ -144,7 +145,7 @@ CSR_API(CsrReadConsole)
|
||||||
&& Input->InputEvent.Event.KeyEvent.uChar.UnicodeChar != L'\0')
|
&& Input->InputEvent.Event.KeyEvent.uChar.UnicodeChar != L'\0')
|
||||||
{
|
{
|
||||||
WCHAR Char = Input->InputEvent.Event.KeyEvent.uChar.UnicodeChar;
|
WCHAR Char = Input->InputEvent.Event.KeyEvent.uChar.UnicodeChar;
|
||||||
if (Request->Data.ReadConsoleRequest.Unicode)
|
if (ApiMessage->Data.ReadConsoleRequest.Unicode)
|
||||||
UnicodeBuffer[i++] = Char;
|
UnicodeBuffer[i++] = Char;
|
||||||
else
|
else
|
||||||
ConsoleInputUnicodeCharToAnsiChar(Console, &Buffer[i++], &Char);
|
ConsoleInputUnicodeCharToAnsiChar(Console, &Buffer[i++], &Char);
|
||||||
|
@ -154,7 +155,7 @@ CSR_API(CsrReadConsole)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
done:
|
done:
|
||||||
Request->Data.ReadConsoleRequest.NrCharactersRead = i;
|
ApiMessage->Data.ReadConsoleRequest.NrCharactersRead = i;
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -423,6 +424,7 @@ ConioProcessKey(MSG *msg, PCSRSS_CONSOLE Console, BOOL TextMode)
|
||||||
CSR_API(CsrReadInputEvent)
|
CSR_API(CsrReadInputEvent)
|
||||||
{
|
{
|
||||||
PLIST_ENTRY CurrentEntry;
|
PLIST_ENTRY CurrentEntry;
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
BOOLEAN Done = FALSE;
|
BOOLEAN Done = FALSE;
|
||||||
|
@ -430,9 +432,9 @@ CSR_API(CsrReadInputEvent)
|
||||||
|
|
||||||
DPRINT("CsrReadInputEvent\n");
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -447,7 +449,7 @@ CSR_API(CsrReadInputEvent)
|
||||||
|
|
||||||
if (Done)
|
if (Done)
|
||||||
{
|
{
|
||||||
Request->Data.ReadInputRequest.MoreEvents = TRUE;
|
ApiMessage->Data.ReadInputRequest.MoreEvents = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -455,10 +457,10 @@ CSR_API(CsrReadInputEvent)
|
||||||
|
|
||||||
if (!Done)
|
if (!Done)
|
||||||
{
|
{
|
||||||
Request->Data.ReadInputRequest.Input = Input->InputEvent;
|
ApiMessage->Data.ReadInputRequest.Input = Input->InputEvent;
|
||||||
if (Request->Data.ReadInputRequest.Unicode == FALSE)
|
if (ApiMessage->Data.ReadInputRequest.Unicode == FALSE)
|
||||||
{
|
{
|
||||||
ConioInputEventToAnsi(Console, &Request->Data.ReadInputRequest.Input);
|
ConioInputEventToAnsi(Console, &ApiMessage->Data.ReadInputRequest.Input);
|
||||||
}
|
}
|
||||||
Done = TRUE;
|
Done = TRUE;
|
||||||
}
|
}
|
||||||
|
@ -490,8 +492,8 @@ CSR_API(CsrFlushInputBuffer)
|
||||||
|
|
||||||
DPRINT("CsrFlushInputBuffer\n");
|
DPRINT("CsrFlushInputBuffer\n");
|
||||||
|
|
||||||
Status = ConioLockConsole(ProcessData,
|
Status = ConioLockConsole(CsrGetClientThread()->Process,
|
||||||
Request->Data.FlushInputBufferRequest.ConsoleInput,
|
ApiMessage->Data.FlushInputBufferRequest.ConsoleInput,
|
||||||
&Console,
|
&Console,
|
||||||
GENERIC_WRITE);
|
GENERIC_WRITE);
|
||||||
if(! NT_SUCCESS(Status))
|
if(! NT_SUCCESS(Status))
|
||||||
|
@ -523,7 +525,7 @@ CSR_API(CsrGetNumberOfConsoleInputEvents)
|
||||||
|
|
||||||
DPRINT("CsrGetNumberOfConsoleInputEvents\n");
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -541,7 +543,7 @@ CSR_API(CsrGetNumberOfConsoleInputEvents)
|
||||||
|
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
|
|
||||||
Request->Data.GetNumInputEventsRequest.NumInputEvents = NumEvents;
|
ApiMessage->Data.GetNumInputEventsRequest.NumInputEvents = NumEvents;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -549,6 +551,7 @@ CSR_API(CsrGetNumberOfConsoleInputEvents)
|
||||||
CSR_API(CsrPeekConsoleInput)
|
CSR_API(CsrPeekConsoleInput)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
DWORD Length;
|
DWORD Length;
|
||||||
PLIST_ENTRY CurrentItem;
|
PLIST_ENTRY CurrentItem;
|
||||||
|
@ -558,14 +561,14 @@ CSR_API(CsrPeekConsoleInput)
|
||||||
|
|
||||||
DPRINT("CsrPeekConsoleInput\n");
|
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))
|
if(! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
InputRecord = Request->Data.PeekConsoleInputRequest.InputRecord;
|
InputRecord = ApiMessage->Data.PeekConsoleInputRequest.InputRecord;
|
||||||
Length = Request->Data.PeekConsoleInputRequest.Length;
|
Length = ApiMessage->Data.PeekConsoleInputRequest.Length;
|
||||||
|
|
||||||
if (!Win32CsrValidateBuffer(ProcessData, InputRecord, Length, sizeof(INPUT_RECORD)))
|
if (!Win32CsrValidateBuffer(ProcessData, InputRecord, Length, sizeof(INPUT_RECORD)))
|
||||||
{
|
{
|
||||||
|
@ -586,7 +589,7 @@ CSR_API(CsrPeekConsoleInput)
|
||||||
++NumItems;
|
++NumItems;
|
||||||
*InputRecord = Item->InputEvent;
|
*InputRecord = Item->InputEvent;
|
||||||
|
|
||||||
if (Request->Data.PeekConsoleInputRequest.Unicode == FALSE)
|
if (ApiMessage->Data.PeekConsoleInputRequest.Unicode == FALSE)
|
||||||
{
|
{
|
||||||
ConioInputEventToAnsi(Console, InputRecord);
|
ConioInputEventToAnsi(Console, InputRecord);
|
||||||
}
|
}
|
||||||
|
@ -598,7 +601,7 @@ CSR_API(CsrPeekConsoleInput)
|
||||||
|
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
|
|
||||||
Request->Data.PeekConsoleInputRequest.Length = NumItems;
|
ApiMessage->Data.PeekConsoleInputRequest.Length = NumItems;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -606,6 +609,7 @@ CSR_API(CsrPeekConsoleInput)
|
||||||
CSR_API(CsrWriteConsoleInput)
|
CSR_API(CsrWriteConsoleInput)
|
||||||
{
|
{
|
||||||
PINPUT_RECORD InputRecord;
|
PINPUT_RECORD InputRecord;
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
DWORD Length;
|
DWORD Length;
|
||||||
|
@ -613,14 +617,14 @@ CSR_API(CsrWriteConsoleInput)
|
||||||
|
|
||||||
DPRINT("CsrWriteConsoleInput\n");
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
InputRecord = Request->Data.WriteConsoleInputRequest.InputRecord;
|
InputRecord = ApiMessage->Data.WriteConsoleInputRequest.InputRecord;
|
||||||
Length = Request->Data.WriteConsoleInputRequest.Length;
|
Length = ApiMessage->Data.WriteConsoleInputRequest.Length;
|
||||||
|
|
||||||
if (!Win32CsrValidateBuffer(ProcessData, InputRecord, Length, sizeof(INPUT_RECORD)))
|
if (!Win32CsrValidateBuffer(ProcessData, InputRecord, Length, sizeof(INPUT_RECORD)))
|
||||||
{
|
{
|
||||||
|
@ -630,7 +634,7 @@ CSR_API(CsrWriteConsoleInput)
|
||||||
|
|
||||||
for (i = 0; i < Length && NT_SUCCESS(Status); i++)
|
for (i = 0; i < Length && NT_SUCCESS(Status); i++)
|
||||||
{
|
{
|
||||||
if (!Request->Data.WriteConsoleInputRequest.Unicode &&
|
if (!ApiMessage->Data.WriteConsoleInputRequest.Unicode &&
|
||||||
InputRecord->EventType == KEY_EVENT)
|
InputRecord->EventType == KEY_EVENT)
|
||||||
{
|
{
|
||||||
CHAR AsciiChar = InputRecord->Event.KeyEvent.uChar.AsciiChar;
|
CHAR AsciiChar = InputRecord->Event.KeyEvent.uChar.AsciiChar;
|
||||||
|
@ -643,7 +647,7 @@ CSR_API(CsrWriteConsoleInput)
|
||||||
|
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
|
|
||||||
Request->Data.WriteConsoleInputRequest.Length = i;
|
ApiMessage->Data.WriteConsoleInputRequest.Length = i;
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -359,22 +359,23 @@ CSR_API(CsrWriteConsole)
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PCHAR Buffer;
|
PCHAR Buffer;
|
||||||
PCSRSS_SCREEN_BUFFER Buff;
|
PCSRSS_SCREEN_BUFFER Buff;
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
DWORD Written = 0;
|
DWORD Written = 0;
|
||||||
ULONG Length;
|
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");
|
DPRINT("CsrWriteConsole\n");
|
||||||
|
|
||||||
if (Request->Header.u1.s1.TotalLength
|
if (ApiMessage->Header.u1.s1.TotalLength
|
||||||
< CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE)
|
< 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;
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -384,24 +385,24 @@ CSR_API(CsrWriteConsole)
|
||||||
if (Console->UnpauseEvent)
|
if (Console->UnpauseEvent)
|
||||||
{
|
{
|
||||||
Status = NtDuplicateObject(GetCurrentProcess(), Console->UnpauseEvent,
|
Status = NtDuplicateObject(GetCurrentProcess(), Console->UnpauseEvent,
|
||||||
ProcessData->ProcessHandle, &Request->Data.WriteConsoleRequest.UnpauseEvent,
|
ProcessData->ProcessHandle, &ApiMessage->Data.WriteConsoleRequest.UnpauseEvent,
|
||||||
SYNCHRONIZE, 0, 0);
|
SYNCHRONIZE, 0, 0);
|
||||||
ConioUnlockScreenBuffer(Buff);
|
ConioUnlockScreenBuffer(Buff);
|
||||||
return NT_SUCCESS(Status) ? STATUS_PENDING : Status;
|
return NT_SUCCESS(Status) ? STATUS_PENDING : Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Request->Data.WriteConsoleRequest.Unicode)
|
if(ApiMessage->Data.WriteConsoleRequest.Unicode)
|
||||||
{
|
{
|
||||||
Length = WideCharToMultiByte(Console->OutputCodePage, 0,
|
Length = WideCharToMultiByte(Console->OutputCodePage, 0,
|
||||||
(PWCHAR)Request->Data.WriteConsoleRequest.Buffer,
|
(PWCHAR)ApiMessage->Data.WriteConsoleRequest.Buffer,
|
||||||
Request->Data.WriteConsoleRequest.NrCharactersToWrite,
|
ApiMessage->Data.WriteConsoleRequest.NrCharactersToWrite,
|
||||||
NULL, 0, NULL, NULL);
|
NULL, 0, NULL, NULL);
|
||||||
Buffer = RtlAllocateHeap(GetProcessHeap(), 0, Length);
|
Buffer = RtlAllocateHeap(GetProcessHeap(), 0, Length);
|
||||||
if (Buffer)
|
if (Buffer)
|
||||||
{
|
{
|
||||||
WideCharToMultiByte(Console->OutputCodePage, 0,
|
WideCharToMultiByte(Console->OutputCodePage, 0,
|
||||||
(PWCHAR)Request->Data.WriteConsoleRequest.Buffer,
|
(PWCHAR)ApiMessage->Data.WriteConsoleRequest.Buffer,
|
||||||
Request->Data.WriteConsoleRequest.NrCharactersToWrite,
|
ApiMessage->Data.WriteConsoleRequest.NrCharactersToWrite,
|
||||||
Buffer, Length, NULL, NULL);
|
Buffer, Length, NULL, NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -411,7 +412,7 @@ CSR_API(CsrWriteConsole)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Buffer = (PCHAR)Request->Data.WriteConsoleRequest.Buffer;
|
Buffer = (PCHAR)ApiMessage->Data.WriteConsoleRequest.Buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Buffer)
|
if (Buffer)
|
||||||
|
@ -419,20 +420,20 @@ CSR_API(CsrWriteConsole)
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
Status = ConioWriteConsole(Console, Buff, Buffer,
|
Status = ConioWriteConsole(Console, Buff, Buffer,
|
||||||
Request->Data.WriteConsoleRequest.NrCharactersToWrite, TRUE);
|
ApiMessage->Data.WriteConsoleRequest.NrCharactersToWrite, TRUE);
|
||||||
if (NT_SUCCESS(Status))
|
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);
|
RtlFreeHeap(GetProcessHeap(), 0, Buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ConioUnlockScreenBuffer(Buff);
|
ConioUnlockScreenBuffer(Buff);
|
||||||
|
|
||||||
Request->Data.WriteConsoleRequest.NrCharactersWritten = Written;
|
ApiMessage->Data.WriteConsoleRequest.NrCharactersWritten = Written;
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
@ -477,13 +478,13 @@ CSR_API(CsrGetScreenBufferInfo)
|
||||||
|
|
||||||
DPRINT("CsrGetScreenBufferInfo\n");
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
Console = Buff->Header.Console;
|
Console = Buff->Header.Console;
|
||||||
pInfo = &Request->Data.ScreenBufferInfoRequest.Info;
|
pInfo = &ApiMessage->Data.ScreenBufferInfoRequest.Info;
|
||||||
pInfo->dwSize.X = Buff->MaxX;
|
pInfo->dwSize.X = Buff->MaxX;
|
||||||
pInfo->dwSize.Y = Buff->MaxY;
|
pInfo->dwSize.Y = Buff->MaxY;
|
||||||
pInfo->dwCursorPosition.X = Buff->CurrentX;
|
pInfo->dwCursorPosition.X = Buff->CurrentX;
|
||||||
|
@ -510,15 +511,15 @@ CSR_API(CsrSetCursor)
|
||||||
|
|
||||||
DPRINT("CsrSetCursor\n");
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
Console = Buff->Header.Console;
|
Console = Buff->Header.Console;
|
||||||
|
|
||||||
NewCursorX = Request->Data.SetCursorRequest.Position.X;
|
NewCursorX = ApiMessage->Data.SetCursorRequest.Position.X;
|
||||||
NewCursorY = Request->Data.SetCursorRequest.Position.Y;
|
NewCursorY = ApiMessage->Data.SetCursorRequest.Position.Y;
|
||||||
if (NewCursorX < 0 || NewCursorX >= Buff->MaxX ||
|
if (NewCursorX < 0 || NewCursorX >= Buff->MaxX ||
|
||||||
NewCursorY < 0 || NewCursorY >= Buff->MaxY)
|
NewCursorY < 0 || NewCursorY >= Buff->MaxY)
|
||||||
{
|
{
|
||||||
|
@ -582,35 +583,35 @@ CSR_API(CsrWriteConsoleOutputChar)
|
||||||
|
|
||||||
DPRINT("CsrWriteConsoleOutputChar\n");
|
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)
|
< 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;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = ConioLockScreenBuffer(ProcessData,
|
Status = ConioLockScreenBuffer(CsrGetClientThread()->Process,
|
||||||
Request->Data.WriteConsoleOutputCharRequest.ConsoleHandle,
|
ApiMessage->Data.WriteConsoleOutputCharRequest.ConsoleHandle,
|
||||||
&Buff,
|
&Buff,
|
||||||
GENERIC_WRITE);
|
GENERIC_WRITE);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
Console = Buff->Header.Console;
|
Console = Buff->Header.Console;
|
||||||
if(Request->Data.WriteConsoleOutputCharRequest.Unicode)
|
if(ApiMessage->Data.WriteConsoleOutputCharRequest.Unicode)
|
||||||
{
|
{
|
||||||
Length = WideCharToMultiByte(Console->OutputCodePage, 0,
|
Length = WideCharToMultiByte(Console->OutputCodePage, 0,
|
||||||
(PWCHAR)Request->Data.WriteConsoleOutputCharRequest.String,
|
(PWCHAR)ApiMessage->Data.WriteConsoleOutputCharRequest.String,
|
||||||
Request->Data.WriteConsoleOutputCharRequest.Length,
|
ApiMessage->Data.WriteConsoleOutputCharRequest.Length,
|
||||||
NULL, 0, NULL, NULL);
|
NULL, 0, NULL, NULL);
|
||||||
tmpString = String = RtlAllocateHeap(GetProcessHeap(), 0, Length);
|
tmpString = String = RtlAllocateHeap(GetProcessHeap(), 0, Length);
|
||||||
if (String)
|
if (String)
|
||||||
{
|
{
|
||||||
WideCharToMultiByte(Console->OutputCodePage, 0,
|
WideCharToMultiByte(Console->OutputCodePage, 0,
|
||||||
(PWCHAR)Request->Data.WriteConsoleOutputCharRequest.String,
|
(PWCHAR)ApiMessage->Data.WriteConsoleOutputCharRequest.String,
|
||||||
Request->Data.WriteConsoleOutputCharRequest.Length,
|
ApiMessage->Data.WriteConsoleOutputCharRequest.Length,
|
||||||
String, Length, NULL, NULL);
|
String, Length, NULL, NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -620,16 +621,16 @@ CSR_API(CsrWriteConsoleOutputChar)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
String = (PCHAR)Request->Data.WriteConsoleOutputCharRequest.String;
|
String = (PCHAR)ApiMessage->Data.WriteConsoleOutputCharRequest.String;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (String)
|
if (String)
|
||||||
{
|
{
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
X = Request->Data.WriteConsoleOutputCharRequest.Coord.X;
|
X = ApiMessage->Data.WriteConsoleOutputCharRequest.Coord.X;
|
||||||
Y = (Request->Data.WriteConsoleOutputCharRequest.Coord.Y + Buff->VirtualY) % Buff->MaxY;
|
Y = (ApiMessage->Data.WriteConsoleOutputCharRequest.Coord.Y + Buff->VirtualY) % Buff->MaxY;
|
||||||
Length = Request->Data.WriteConsoleOutputCharRequest.Length;
|
Length = ApiMessage->Data.WriteConsoleOutputCharRequest.Length;
|
||||||
Buffer = &Buff->Buffer[2 * (Y * Buff->MaxX + X)];
|
Buffer = &Buff->Buffer[2 * (Y * Buff->MaxX + X)];
|
||||||
while (Length--)
|
while (Length--)
|
||||||
{
|
{
|
||||||
|
@ -648,23 +649,23 @@ CSR_API(CsrWriteConsoleOutputChar)
|
||||||
}
|
}
|
||||||
if (Buff == Console->ActiveBuffer)
|
if (Buff == Console->ActiveBuffer)
|
||||||
{
|
{
|
||||||
ConioComputeUpdateRect(Buff, &UpdateRect, &Request->Data.WriteConsoleOutputCharRequest.Coord,
|
ConioComputeUpdateRect(Buff, &UpdateRect, &ApiMessage->Data.WriteConsoleOutputCharRequest.Coord,
|
||||||
Request->Data.WriteConsoleOutputCharRequest.Length);
|
ApiMessage->Data.WriteConsoleOutputCharRequest.Length);
|
||||||
ConioDrawRegion(Console, &UpdateRect);
|
ConioDrawRegion(Console, &UpdateRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
Request->Data.WriteConsoleOutputCharRequest.EndCoord.X = X;
|
ApiMessage->Data.WriteConsoleOutputCharRequest.EndCoord.X = X;
|
||||||
Request->Data.WriteConsoleOutputCharRequest.EndCoord.Y = (Y + Buff->MaxY - Buff->VirtualY) % Buff->MaxY;
|
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);
|
RtlFreeHeap(GetProcessHeap(), 0, tmpString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ConioUnlockScreenBuffer(Buff);
|
ConioUnlockScreenBuffer(Buff);
|
||||||
}
|
}
|
||||||
Request->Data.WriteConsoleOutputCharRequest.NrCharactersWritten = Written;
|
ApiMessage->Data.WriteConsoleOutputCharRequest.NrCharactersWritten = Written;
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -680,21 +681,21 @@ CSR_API(CsrFillOutputChar)
|
||||||
|
|
||||||
DPRINT("CsrFillOutputChar\n");
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
Console = Buff->Header.Console;
|
Console = Buff->Header.Console;
|
||||||
|
|
||||||
X = Request->Data.FillOutputRequest.Position.X;
|
X = ApiMessage->Data.FillOutputRequest.Position.X;
|
||||||
Y = (Request->Data.FillOutputRequest.Position.Y + Buff->VirtualY) % Buff->MaxY;
|
Y = (ApiMessage->Data.FillOutputRequest.Position.Y + Buff->VirtualY) % Buff->MaxY;
|
||||||
Buffer = &Buff->Buffer[2 * (Y * Buff->MaxX + X)];
|
Buffer = &Buff->Buffer[2 * (Y * Buff->MaxX + X)];
|
||||||
if(Request->Data.FillOutputRequest.Unicode)
|
if(ApiMessage->Data.FillOutputRequest.Unicode)
|
||||||
ConsoleUnicodeCharToAnsiChar(Console, &Char, &Request->Data.FillOutputRequest.Char.UnicodeChar);
|
ConsoleUnicodeCharToAnsiChar(Console, &Char, &ApiMessage->Data.FillOutputRequest.Char.UnicodeChar);
|
||||||
else
|
else
|
||||||
Char = Request->Data.FillOutputRequest.Char.AsciiChar;
|
Char = ApiMessage->Data.FillOutputRequest.Char.AsciiChar;
|
||||||
Length = Request->Data.FillOutputRequest.Length;
|
Length = ApiMessage->Data.FillOutputRequest.Length;
|
||||||
while (Length--)
|
while (Length--)
|
||||||
{
|
{
|
||||||
*Buffer = Char;
|
*Buffer = Char;
|
||||||
|
@ -713,14 +714,14 @@ CSR_API(CsrFillOutputChar)
|
||||||
|
|
||||||
if (Buff == Console->ActiveBuffer)
|
if (Buff == Console->ActiveBuffer)
|
||||||
{
|
{
|
||||||
ConioComputeUpdateRect(Buff, &UpdateRect, &Request->Data.FillOutputRequest.Position,
|
ConioComputeUpdateRect(Buff, &UpdateRect, &ApiMessage->Data.FillOutputRequest.Position,
|
||||||
Request->Data.FillOutputRequest.Length);
|
ApiMessage->Data.FillOutputRequest.Length);
|
||||||
ConioDrawRegion(Console, &UpdateRect);
|
ConioDrawRegion(Console, &UpdateRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
ConioUnlockScreenBuffer(Buff);
|
ConioUnlockScreenBuffer(Buff);
|
||||||
Length = Request->Data.FillOutputRequest.Length;
|
Length = ApiMessage->Data.FillOutputRequest.Length;
|
||||||
Request->Data.FillOutputRequest.NrCharactersWritten = Length;
|
ApiMessage->Data.FillOutputRequest.NrCharactersWritten = Length;
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -736,16 +737,16 @@ CSR_API(CsrWriteConsoleOutputAttrib)
|
||||||
|
|
||||||
DPRINT("CsrWriteConsoleOutputAttrib\n");
|
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)
|
< 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;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = ConioLockScreenBuffer(ProcessData,
|
Status = ConioLockScreenBuffer(CsrGetClientThread()->Process,
|
||||||
Request->Data.WriteConsoleOutputAttribRequest.ConsoleHandle,
|
ApiMessage->Data.WriteConsoleOutputAttribRequest.ConsoleHandle,
|
||||||
&Buff,
|
&Buff,
|
||||||
GENERIC_WRITE);
|
GENERIC_WRITE);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
|
@ -754,11 +755,11 @@ CSR_API(CsrWriteConsoleOutputAttrib)
|
||||||
}
|
}
|
||||||
Console = Buff->Header.Console;
|
Console = Buff->Header.Console;
|
||||||
|
|
||||||
X = Request->Data.WriteConsoleOutputAttribRequest.Coord.X;
|
X = ApiMessage->Data.WriteConsoleOutputAttribRequest.Coord.X;
|
||||||
Y = (Request->Data.WriteConsoleOutputAttribRequest.Coord.Y + Buff->VirtualY) % Buff->MaxY;
|
Y = (ApiMessage->Data.WriteConsoleOutputAttribRequest.Coord.Y + Buff->VirtualY) % Buff->MaxY;
|
||||||
Length = Request->Data.WriteConsoleOutputAttribRequest.Length;
|
Length = ApiMessage->Data.WriteConsoleOutputAttribRequest.Length;
|
||||||
Buffer = &Buff->Buffer[2 * (Y * Buff->MaxX + X) + 1];
|
Buffer = &Buff->Buffer[2 * (Y * Buff->MaxX + X) + 1];
|
||||||
Attribute = Request->Data.WriteConsoleOutputAttribRequest.Attribute;
|
Attribute = ApiMessage->Data.WriteConsoleOutputAttribRequest.Attribute;
|
||||||
while (Length--)
|
while (Length--)
|
||||||
{
|
{
|
||||||
*Buffer = (UCHAR)(*Attribute++);
|
*Buffer = (UCHAR)(*Attribute++);
|
||||||
|
@ -776,13 +777,13 @@ CSR_API(CsrWriteConsoleOutputAttrib)
|
||||||
|
|
||||||
if (Buff == Console->ActiveBuffer)
|
if (Buff == Console->ActiveBuffer)
|
||||||
{
|
{
|
||||||
ConioComputeUpdateRect(Buff, &UpdateRect, &Request->Data.WriteConsoleOutputAttribRequest.Coord,
|
ConioComputeUpdateRect(Buff, &UpdateRect, &ApiMessage->Data.WriteConsoleOutputAttribRequest.Coord,
|
||||||
Request->Data.WriteConsoleOutputAttribRequest.Length);
|
ApiMessage->Data.WriteConsoleOutputAttribRequest.Length);
|
||||||
ConioDrawRegion(Console, &UpdateRect);
|
ConioDrawRegion(Console, &UpdateRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
Request->Data.WriteConsoleOutputAttribRequest.EndCoord.X = X;
|
ApiMessage->Data.WriteConsoleOutputAttribRequest.EndCoord.X = X;
|
||||||
Request->Data.WriteConsoleOutputAttribRequest.EndCoord.Y = (Y + Buff->MaxY - Buff->VirtualY) % Buff->MaxY;
|
ApiMessage->Data.WriteConsoleOutputAttribRequest.EndCoord.Y = (Y + Buff->MaxY - Buff->VirtualY) % Buff->MaxY;
|
||||||
|
|
||||||
ConioUnlockScreenBuffer(Buff);
|
ConioUnlockScreenBuffer(Buff);
|
||||||
|
|
||||||
|
@ -801,17 +802,17 @@ CSR_API(CsrFillOutputAttrib)
|
||||||
|
|
||||||
DPRINT("CsrFillOutputAttrib\n");
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
Console = Buff->Header.Console;
|
Console = Buff->Header.Console;
|
||||||
|
|
||||||
X = Request->Data.FillOutputAttribRequest.Coord.X;
|
X = ApiMessage->Data.FillOutputAttribRequest.Coord.X;
|
||||||
Y = (Request->Data.FillOutputAttribRequest.Coord.Y + Buff->VirtualY) % Buff->MaxY;
|
Y = (ApiMessage->Data.FillOutputAttribRequest.Coord.Y + Buff->VirtualY) % Buff->MaxY;
|
||||||
Length = Request->Data.FillOutputAttribRequest.Length;
|
Length = ApiMessage->Data.FillOutputAttribRequest.Length;
|
||||||
Attr = Request->Data.FillOutputAttribRequest.Attribute;
|
Attr = ApiMessage->Data.FillOutputAttribRequest.Attribute;
|
||||||
Buffer = &Buff->Buffer[(Y * Buff->MaxX * 2) + (X * 2) + 1];
|
Buffer = &Buff->Buffer[(Y * Buff->MaxX * 2) + (X * 2) + 1];
|
||||||
while (Length--)
|
while (Length--)
|
||||||
{
|
{
|
||||||
|
@ -830,8 +831,8 @@ CSR_API(CsrFillOutputAttrib)
|
||||||
|
|
||||||
if (Buff == Console->ActiveBuffer)
|
if (Buff == Console->ActiveBuffer)
|
||||||
{
|
{
|
||||||
ConioComputeUpdateRect(Buff, &UpdateRect, &Request->Data.FillOutputAttribRequest.Coord,
|
ConioComputeUpdateRect(Buff, &UpdateRect, &ApiMessage->Data.FillOutputAttribRequest.Coord,
|
||||||
Request->Data.FillOutputAttribRequest.Length);
|
ApiMessage->Data.FillOutputAttribRequest.Length);
|
||||||
ConioDrawRegion(Console, &UpdateRect);
|
ConioDrawRegion(Console, &UpdateRect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -857,13 +858,13 @@ CSR_API(CsrGetCursorInfo)
|
||||||
|
|
||||||
DPRINT("CsrGetCursorInfo\n");
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
Request->Data.GetCursorInfoRequest.Info.bVisible = Buff->CursorInfo.bVisible;
|
ApiMessage->Data.GetCursorInfoRequest.Info.bVisible = Buff->CursorInfo.bVisible;
|
||||||
Request->Data.GetCursorInfoRequest.Info.dwSize = Buff->CursorInfo.dwSize;
|
ApiMessage->Data.GetCursorInfoRequest.Info.dwSize = Buff->CursorInfo.dwSize;
|
||||||
ConioUnlockScreenBuffer(Buff);
|
ConioUnlockScreenBuffer(Buff);
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
@ -879,15 +880,15 @@ CSR_API(CsrSetCursorInfo)
|
||||||
|
|
||||||
DPRINT("CsrSetCursorInfo\n");
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
Console = Buff->Header.Console;
|
Console = Buff->Header.Console;
|
||||||
|
|
||||||
Size = Request->Data.SetCursorInfoRequest.Info.dwSize;
|
Size = ApiMessage->Data.SetCursorInfoRequest.Info.dwSize;
|
||||||
Visible = Request->Data.SetCursorInfoRequest.Info.bVisible;
|
Visible = ApiMessage->Data.SetCursorInfoRequest.Info.bVisible;
|
||||||
if (Size < 1)
|
if (Size < 1)
|
||||||
{
|
{
|
||||||
Size = 1;
|
Size = 1;
|
||||||
|
@ -923,14 +924,14 @@ CSR_API(CsrSetTextAttrib)
|
||||||
|
|
||||||
DPRINT("CsrSetTextAttrib\n");
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
Console = Buff->Header.Console;
|
Console = Buff->Header.Console;
|
||||||
|
|
||||||
Buff->DefaultAttrib = Request->Data.SetAttribRequest.Attrib;
|
Buff->DefaultAttrib = ApiMessage->Data.SetAttribRequest.Attrib;
|
||||||
if (Buff == Console->ActiveBuffer)
|
if (Buff == Console->ActiveBuffer)
|
||||||
{
|
{
|
||||||
if (! ConioUpdateScreenInfo(Console, Buff))
|
if (! ConioUpdateScreenInfo(Console, Buff))
|
||||||
|
@ -947,6 +948,7 @@ CSR_API(CsrSetTextAttrib)
|
||||||
|
|
||||||
CSR_API(CsrCreateScreenBuffer)
|
CSR_API(CsrCreateScreenBuffer)
|
||||||
{
|
{
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
PCSRSS_SCREEN_BUFFER Buff;
|
PCSRSS_SCREEN_BUFFER Buff;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
@ -991,11 +993,11 @@ CSR_API(CsrCreateScreenBuffer)
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
Status = Win32CsrInsertObject(ProcessData,
|
Status = Win32CsrInsertObject(ProcessData,
|
||||||
&Request->Data.CreateScreenBufferRequest.OutputHandle,
|
&ApiMessage->Data.CreateScreenBufferRequest.OutputHandle,
|
||||||
&Buff->Header,
|
&Buff->Header,
|
||||||
Request->Data.CreateScreenBufferRequest.Access,
|
ApiMessage->Data.CreateScreenBufferRequest.Access,
|
||||||
Request->Data.CreateScreenBufferRequest.Inheritable,
|
ApiMessage->Data.CreateScreenBufferRequest.Inheritable,
|
||||||
Request->Data.CreateScreenBufferRequest.ShareMode);
|
ApiMessage->Data.CreateScreenBufferRequest.ShareMode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1016,7 +1018,7 @@ CSR_API(CsrSetScreenBuffer)
|
||||||
|
|
||||||
DPRINT("CsrSetScreenBuffer\n");
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -1047,6 +1049,7 @@ CSR_API(CsrSetScreenBuffer)
|
||||||
CSR_API(CsrWriteConsoleOutput)
|
CSR_API(CsrWriteConsoleOutput)
|
||||||
{
|
{
|
||||||
SHORT i, X, Y, SizeX, SizeY;
|
SHORT i, X, Y, SizeX, SizeY;
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
PCSRSS_SCREEN_BUFFER Buff;
|
PCSRSS_SCREEN_BUFFER Buff;
|
||||||
SMALL_RECT ScreenBuffer;
|
SMALL_RECT ScreenBuffer;
|
||||||
|
@ -1061,7 +1064,7 @@ CSR_API(CsrWriteConsoleOutput)
|
||||||
DPRINT("CsrWriteConsoleOutput\n");
|
DPRINT("CsrWriteConsoleOutput\n");
|
||||||
|
|
||||||
Status = ConioLockScreenBuffer(ProcessData,
|
Status = ConioLockScreenBuffer(ProcessData,
|
||||||
Request->Data.WriteConsoleOutputRequest.ConsoleHandle,
|
ApiMessage->Data.WriteConsoleOutputRequest.ConsoleHandle,
|
||||||
&Buff,
|
&Buff,
|
||||||
GENERIC_WRITE);
|
GENERIC_WRITE);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
|
@ -1070,16 +1073,16 @@ CSR_API(CsrWriteConsoleOutput)
|
||||||
}
|
}
|
||||||
Console = Buff->Header.Console;
|
Console = Buff->Header.Console;
|
||||||
|
|
||||||
BufferSize = Request->Data.WriteConsoleOutputRequest.BufferSize;
|
BufferSize = ApiMessage->Data.WriteConsoleOutputRequest.BufferSize;
|
||||||
BufferCoord = Request->Data.WriteConsoleOutputRequest.BufferCoord;
|
BufferCoord = ApiMessage->Data.WriteConsoleOutputRequest.BufferCoord;
|
||||||
CharInfo = Request->Data.WriteConsoleOutputRequest.CharInfo;
|
CharInfo = ApiMessage->Data.WriteConsoleOutputRequest.CharInfo;
|
||||||
if (!Win32CsrValidateBuffer(ProcessData, CharInfo,
|
if (!Win32CsrValidateBuffer(ProcessData, CharInfo,
|
||||||
BufferSize.X * BufferSize.Y, sizeof(CHAR_INFO)))
|
BufferSize.X * BufferSize.Y, sizeof(CHAR_INFO)))
|
||||||
{
|
{
|
||||||
ConioUnlockScreenBuffer(Buff);
|
ConioUnlockScreenBuffer(Buff);
|
||||||
return STATUS_ACCESS_VIOLATION;
|
return STATUS_ACCESS_VIOLATION;
|
||||||
}
|
}
|
||||||
WriteRegion = Request->Data.WriteConsoleOutputRequest.WriteRegion;
|
WriteRegion = ApiMessage->Data.WriteConsoleOutputRequest.WriteRegion;
|
||||||
|
|
||||||
SizeY = min(BufferSize.Y - BufferCoord.Y, ConioRectHeight(&WriteRegion));
|
SizeY = min(BufferSize.Y - BufferCoord.Y, ConioRectHeight(&WriteRegion));
|
||||||
SizeX = min(BufferSize.X - BufferCoord.X, ConioRectWidth(&WriteRegion));
|
SizeX = min(BufferSize.X - BufferCoord.X, ConioRectWidth(&WriteRegion));
|
||||||
|
@ -1104,7 +1107,7 @@ CSR_API(CsrWriteConsoleOutput)
|
||||||
for (X = WriteRegion.Left; X <= WriteRegion.Right; X++)
|
for (X = WriteRegion.Left; X <= WriteRegion.Right; X++)
|
||||||
{
|
{
|
||||||
CHAR AsciiChar;
|
CHAR AsciiChar;
|
||||||
if (Request->Data.WriteConsoleOutputRequest.Unicode)
|
if (ApiMessage->Data.WriteConsoleOutputRequest.Unicode)
|
||||||
{
|
{
|
||||||
ConsoleUnicodeCharToAnsiChar(Console, &AsciiChar, &CurCharInfo->Char.UnicodeChar);
|
ConsoleUnicodeCharToAnsiChar(Console, &AsciiChar, &CurCharInfo->Char.UnicodeChar);
|
||||||
}
|
}
|
||||||
|
@ -1122,10 +1125,10 @@ CSR_API(CsrWriteConsoleOutput)
|
||||||
|
|
||||||
ConioUnlockScreenBuffer(Buff);
|
ConioUnlockScreenBuffer(Buff);
|
||||||
|
|
||||||
Request->Data.WriteConsoleOutputRequest.WriteRegion.Right = WriteRegion.Left + SizeX - 1;
|
ApiMessage->Data.WriteConsoleOutputRequest.WriteRegion.Right = WriteRegion.Left + SizeX - 1;
|
||||||
Request->Data.WriteConsoleOutputRequest.WriteRegion.Bottom = WriteRegion.Top + SizeY - 1;
|
ApiMessage->Data.WriteConsoleOutputRequest.WriteRegion.Bottom = WriteRegion.Top + SizeY - 1;
|
||||||
Request->Data.WriteConsoleOutputRequest.WriteRegion.Left = WriteRegion.Left;
|
ApiMessage->Data.WriteConsoleOutputRequest.WriteRegion.Left = WriteRegion.Left;
|
||||||
Request->Data.WriteConsoleOutputRequest.WriteRegion.Top = WriteRegion.Top;
|
ApiMessage->Data.WriteConsoleOutputRequest.WriteRegion.Top = WriteRegion.Top;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -1149,19 +1152,19 @@ CSR_API(CsrScrollConsoleScreenBuffer)
|
||||||
|
|
||||||
DPRINT("CsrScrollConsoleScreenBuffer\n");
|
DPRINT("CsrScrollConsoleScreenBuffer\n");
|
||||||
|
|
||||||
ConsoleHandle = Request->Data.ScrollConsoleScreenBufferRequest.ConsoleHandle;
|
ConsoleHandle = ApiMessage->Data.ScrollConsoleScreenBufferRequest.ConsoleHandle;
|
||||||
UseClipRectangle = Request->Data.ScrollConsoleScreenBufferRequest.UseClipRectangle;
|
UseClipRectangle = ApiMessage->Data.ScrollConsoleScreenBufferRequest.UseClipRectangle;
|
||||||
DestinationOrigin = Request->Data.ScrollConsoleScreenBufferRequest.DestinationOrigin;
|
DestinationOrigin = ApiMessage->Data.ScrollConsoleScreenBufferRequest.DestinationOrigin;
|
||||||
Fill = Request->Data.ScrollConsoleScreenBufferRequest.Fill;
|
Fill = ApiMessage->Data.ScrollConsoleScreenBufferRequest.Fill;
|
||||||
|
|
||||||
Status = ConioLockScreenBuffer(ProcessData, ConsoleHandle, &Buff, GENERIC_WRITE);
|
Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ConsoleHandle, &Buff, GENERIC_WRITE);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
Console = Buff->Header.Console;
|
Console = Buff->Header.Console;
|
||||||
|
|
||||||
ScrollRectangle = Request->Data.ScrollConsoleScreenBufferRequest.ScrollRectangle;
|
ScrollRectangle = ApiMessage->Data.ScrollConsoleScreenBufferRequest.ScrollRectangle;
|
||||||
|
|
||||||
/* Make sure source rectangle is inside the screen buffer */
|
/* Make sure source rectangle is inside the screen buffer */
|
||||||
ConioInitRect(&ScreenBuffer, 0, 0, Buff->MaxY - 1, Buff->MaxX - 1);
|
ConioInitRect(&ScreenBuffer, 0, 0, Buff->MaxY - 1, Buff->MaxX - 1);
|
||||||
|
@ -1183,7 +1186,7 @@ CSR_API(CsrScrollConsoleScreenBuffer)
|
||||||
|
|
||||||
if (UseClipRectangle)
|
if (UseClipRectangle)
|
||||||
{
|
{
|
||||||
ClipRectangle = Request->Data.ScrollConsoleScreenBufferRequest.ClipRectangle;
|
ClipRectangle = ApiMessage->Data.ScrollConsoleScreenBufferRequest.ClipRectangle;
|
||||||
if (!ConioGetIntersection(&ClipRectangle, &ClipRectangle, &ScreenBuffer))
|
if (!ConioGetIntersection(&ClipRectangle, &ClipRectangle, &ScreenBuffer))
|
||||||
{
|
{
|
||||||
ConioUnlockScreenBuffer(Buff);
|
ConioUnlockScreenBuffer(Buff);
|
||||||
|
@ -1201,7 +1204,7 @@ CSR_API(CsrScrollConsoleScreenBuffer)
|
||||||
DestinationOrigin.Y + ConioRectHeight(&SrcRegion) - 1,
|
DestinationOrigin.Y + ConioRectHeight(&SrcRegion) - 1,
|
||||||
DestinationOrigin.X + ConioRectWidth(&SrcRegion) - 1);
|
DestinationOrigin.X + ConioRectWidth(&SrcRegion) - 1);
|
||||||
|
|
||||||
if (Request->Data.ScrollConsoleScreenBufferRequest.Unicode)
|
if (ApiMessage->Data.ScrollConsoleScreenBufferRequest.Unicode)
|
||||||
ConsoleUnicodeCharToAnsiChar(Console, &FillChar, &Fill.Char.UnicodeChar);
|
ConsoleUnicodeCharToAnsiChar(Console, &FillChar, &Fill.Char.UnicodeChar);
|
||||||
else
|
else
|
||||||
FillChar = Fill.Char.AsciiChar;
|
FillChar = Fill.Char.AsciiChar;
|
||||||
|
@ -1236,25 +1239,25 @@ CSR_API(CsrReadConsoleOutputChar)
|
||||||
|
|
||||||
DPRINT("CsrReadConsoleOutputChar\n");
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
Console = Buff->Header.Console;
|
Console = Buff->Header.Console;
|
||||||
|
|
||||||
Xpos = Request->Data.ReadConsoleOutputCharRequest.ReadCoord.X;
|
Xpos = ApiMessage->Data.ReadConsoleOutputCharRequest.ReadCoord.X;
|
||||||
Ypos = (Request->Data.ReadConsoleOutputCharRequest.ReadCoord.Y + Buff->VirtualY) % Buff->MaxY;
|
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)];
|
Char = Buff->Buffer[(Xpos * 2) + (Ypos * 2 * Buff->MaxX)];
|
||||||
|
|
||||||
if(Request->Data.ReadConsoleOutputCharRequest.Unicode)
|
if(ApiMessage->Data.ReadConsoleOutputCharRequest.Unicode)
|
||||||
{
|
{
|
||||||
ConsoleAnsiCharToUnicodeChar(Console, (WCHAR*)ReadBuffer, &Char);
|
ConsoleAnsiCharToUnicodeChar(Console, (WCHAR*)ReadBuffer, &Char);
|
||||||
ReadBuffer += sizeof(WCHAR);
|
ReadBuffer += sizeof(WCHAR);
|
||||||
|
@ -1277,13 +1280,13 @@ CSR_API(CsrReadConsoleOutputChar)
|
||||||
}
|
}
|
||||||
|
|
||||||
*ReadBuffer = 0;
|
*ReadBuffer = 0;
|
||||||
Request->Data.ReadConsoleOutputCharRequest.EndCoord.X = Xpos;
|
ApiMessage->Data.ReadConsoleOutputCharRequest.EndCoord.X = Xpos;
|
||||||
Request->Data.ReadConsoleOutputCharRequest.EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY;
|
ApiMessage->Data.ReadConsoleOutputCharRequest.EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY;
|
||||||
|
|
||||||
ConioUnlockScreenBuffer(Buff);
|
ConioUnlockScreenBuffer(Buff);
|
||||||
|
|
||||||
Request->Data.ReadConsoleOutputCharRequest.CharsRead = (DWORD)((ULONG_PTR)ReadBuffer - (ULONG_PTR)Request->Data.ReadConsoleOutputCharRequest.String) / CharSize;
|
ApiMessage->Data.ReadConsoleOutputCharRequest.CharsRead = (DWORD)((ULONG_PTR)ReadBuffer - (ULONG_PTR)ApiMessage->Data.ReadConsoleOutputCharRequest.String) / CharSize;
|
||||||
if (Request->Data.ReadConsoleOutputCharRequest.CharsRead * CharSize + CSR_API_MESSAGE_HEADER_SIZE(CSRSS_READ_CONSOLE_OUTPUT_CHAR) > sizeof(CSR_API_MESSAGE))
|
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");
|
DPRINT1("Length won't fit in message\n");
|
||||||
return STATUS_BUFFER_TOO_SMALL;
|
return STATUS_BUFFER_TOO_SMALL;
|
||||||
|
@ -1304,18 +1307,18 @@ CSR_API(CsrReadConsoleOutputAttrib)
|
||||||
|
|
||||||
DPRINT("CsrReadConsoleOutputAttrib\n");
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Xpos = Request->Data.ReadConsoleOutputAttribRequest.ReadCoord.X;
|
Xpos = ApiMessage->Data.ReadConsoleOutputAttribRequest.ReadCoord.X;
|
||||||
Ypos = (Request->Data.ReadConsoleOutputAttribRequest.ReadCoord.Y + Buff->VirtualY) % Buff->MaxY;
|
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];
|
*ReadBuffer = Buff->Buffer[(Xpos * 2) + (Ypos * 2 * Buff->MaxX) + 1];
|
||||||
|
|
||||||
|
@ -1336,13 +1339,13 @@ CSR_API(CsrReadConsoleOutputAttrib)
|
||||||
|
|
||||||
*ReadBuffer = 0;
|
*ReadBuffer = 0;
|
||||||
|
|
||||||
Request->Data.ReadConsoleOutputAttribRequest.EndCoord.X = Xpos;
|
ApiMessage->Data.ReadConsoleOutputAttribRequest.EndCoord.X = Xpos;
|
||||||
Request->Data.ReadConsoleOutputAttribRequest.EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY;
|
ApiMessage->Data.ReadConsoleOutputAttribRequest.EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY;
|
||||||
|
|
||||||
ConioUnlockScreenBuffer(Buff);
|
ConioUnlockScreenBuffer(Buff);
|
||||||
|
|
||||||
CurrentLength = CSR_API_MESSAGE_HEADER_SIZE(CSRSS_READ_CONSOLE_OUTPUT_ATTRIB)
|
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))
|
if (CurrentLength > sizeof(CSR_API_MESSAGE))
|
||||||
{
|
{
|
||||||
DPRINT1("Length won't fit in message\n");
|
DPRINT1("Length won't fit in message\n");
|
||||||
|
@ -1354,6 +1357,7 @@ CSR_API(CsrReadConsoleOutputAttrib)
|
||||||
|
|
||||||
CSR_API(CsrReadConsoleOutput)
|
CSR_API(CsrReadConsoleOutput)
|
||||||
{
|
{
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCHAR_INFO CharInfo;
|
PCHAR_INFO CharInfo;
|
||||||
PCHAR_INFO CurCharInfo;
|
PCHAR_INFO CurCharInfo;
|
||||||
PCSRSS_SCREEN_BUFFER Buff;
|
PCSRSS_SCREEN_BUFFER Buff;
|
||||||
|
@ -1370,16 +1374,16 @@ CSR_API(CsrReadConsoleOutput)
|
||||||
|
|
||||||
DPRINT("CsrReadConsoleOutput\n");
|
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))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
CharInfo = Request->Data.ReadConsoleOutputRequest.CharInfo;
|
CharInfo = ApiMessage->Data.ReadConsoleOutputRequest.CharInfo;
|
||||||
ReadRegion = Request->Data.ReadConsoleOutputRequest.ReadRegion;
|
ReadRegion = ApiMessage->Data.ReadConsoleOutputRequest.ReadRegion;
|
||||||
BufferSize = Request->Data.ReadConsoleOutputRequest.BufferSize;
|
BufferSize = ApiMessage->Data.ReadConsoleOutputRequest.BufferSize;
|
||||||
BufferCoord = Request->Data.ReadConsoleOutputRequest.BufferCoord;
|
BufferCoord = ApiMessage->Data.ReadConsoleOutputRequest.BufferCoord;
|
||||||
|
|
||||||
/* FIXME: Is this correct? */
|
/* FIXME: Is this correct? */
|
||||||
CodePage = ProcessData->Console->OutputCodePage;
|
CodePage = ProcessData->Console->OutputCodePage;
|
||||||
|
@ -1410,7 +1414,7 @@ CSR_API(CsrReadConsoleOutput)
|
||||||
Ptr = ConioCoordToPointer(Buff, ReadRegion.Left, Y);
|
Ptr = ConioCoordToPointer(Buff, ReadRegion.Left, Y);
|
||||||
for (X = ReadRegion.Left; X < ReadRegion.Right; ++X)
|
for (X = ReadRegion.Left; X < ReadRegion.Right; ++X)
|
||||||
{
|
{
|
||||||
if (Request->Data.ReadConsoleOutputRequest.Unicode)
|
if (ApiMessage->Data.ReadConsoleOutputRequest.Unicode)
|
||||||
{
|
{
|
||||||
MultiByteToWideChar(CodePage, 0,
|
MultiByteToWideChar(CodePage, 0,
|
||||||
(PCHAR)Ptr++, 1,
|
(PCHAR)Ptr++, 1,
|
||||||
|
@ -1427,10 +1431,10 @@ CSR_API(CsrReadConsoleOutput)
|
||||||
|
|
||||||
ConioUnlockScreenBuffer(Buff);
|
ConioUnlockScreenBuffer(Buff);
|
||||||
|
|
||||||
Request->Data.ReadConsoleOutputRequest.ReadRegion.Right = ReadRegion.Left + SizeX - 1;
|
ApiMessage->Data.ReadConsoleOutputRequest.ReadRegion.Right = ReadRegion.Left + SizeX - 1;
|
||||||
Request->Data.ReadConsoleOutputRequest.ReadRegion.Bottom = ReadRegion.Top + SizeY - 1;
|
ApiMessage->Data.ReadConsoleOutputRequest.ReadRegion.Bottom = ReadRegion.Top + SizeY - 1;
|
||||||
Request->Data.ReadConsoleOutputRequest.ReadRegion.Left = ReadRegion.Left;
|
ApiMessage->Data.ReadConsoleOutputRequest.ReadRegion.Left = ReadRegion.Left;
|
||||||
Request->Data.ReadConsoleOutputRequest.ReadRegion.Top = ReadRegion.Top;
|
ApiMessage->Data.ReadConsoleOutputRequest.ReadRegion.Top = ReadRegion.Top;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -1441,14 +1445,14 @@ CSR_API(CsrSetScreenBufferSize)
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
PCSRSS_SCREEN_BUFFER Buff;
|
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))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
Console = Buff->Header.Console;
|
Console = Buff->Header.Console;
|
||||||
|
|
||||||
Status = ConioResizeBuffer(Console, Buff, Request->Data.SetScreenBufferSize.Size);
|
Status = ConioResizeBuffer(Console, Buff, ApiMessage->Data.SetScreenBufferSize.Size);
|
||||||
ConioUnlockScreenBuffer(Buff);
|
ConioUnlockScreenBuffer(Buff);
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
|
|
|
@ -174,6 +174,7 @@ CsrInitConsole(PCSRSS_CONSOLE Console, int ShowCmd)
|
||||||
|
|
||||||
CSR_API(CsrAllocConsole)
|
CSR_API(CsrAllocConsole)
|
||||||
{
|
{
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
BOOLEAN NewConsole = FALSE;
|
BOOLEAN NewConsole = FALSE;
|
||||||
|
@ -189,7 +190,7 @@ CSR_API(CsrAllocConsole)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we don't need a console, then get out of here */
|
/* 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");
|
DPRINT("No console needed\n");
|
||||||
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
||||||
|
@ -197,8 +198,8 @@ CSR_API(CsrAllocConsole)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we already have one, then don't create a new one... */
|
/* If we already have one, then don't create a new one... */
|
||||||
if (!Request->Data.AllocConsoleRequest.Console ||
|
if (!ApiMessage->Data.AllocConsoleRequest.Console ||
|
||||||
Request->Data.AllocConsoleRequest.Console != ProcessData->ParentConsole)
|
ApiMessage->Data.AllocConsoleRequest.Console != ProcessData->ParentConsole)
|
||||||
{
|
{
|
||||||
/* Allocate a console structure */
|
/* Allocate a console structure */
|
||||||
NewConsole = TRUE;
|
NewConsole = TRUE;
|
||||||
|
@ -214,7 +215,7 @@ CSR_API(CsrAllocConsole)
|
||||||
/* insert process data required for GUI initialization */
|
/* insert process data required for GUI initialization */
|
||||||
InsertHeadList(&Console->ProcessList, &ProcessData->ConsoleLink);
|
InsertHeadList(&Console->ProcessList, &ProcessData->ConsoleLink);
|
||||||
/* Initialize the Console */
|
/* Initialize the Console */
|
||||||
Status = CsrInitConsole(Console, Request->Data.AllocConsoleRequest.ShowCmd);
|
Status = CsrInitConsole(Console, ApiMessage->Data.AllocConsoleRequest.ShowCmd);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
DPRINT1("Console init failed\n");
|
DPRINT1("Console init failed\n");
|
||||||
|
@ -226,14 +227,14 @@ CSR_API(CsrAllocConsole)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Reuse our current console */
|
/* Reuse our current console */
|
||||||
Console = Request->Data.AllocConsoleRequest.Console;
|
Console = ApiMessage->Data.AllocConsoleRequest.Console;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the Process Console */
|
/* Set the Process Console */
|
||||||
ProcessData->Console = Console;
|
ProcessData->Console = Console;
|
||||||
|
|
||||||
/* Return it to the caller */
|
/* 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 */
|
/* Add a reference count because the process is tied to the console */
|
||||||
_InterlockedIncrement(&Console->ReferenceCount);
|
_InterlockedIncrement(&Console->ReferenceCount);
|
||||||
|
@ -242,7 +243,7 @@ CSR_API(CsrAllocConsole)
|
||||||
{
|
{
|
||||||
/* Insert the Objects */
|
/* Insert the Objects */
|
||||||
Status = Win32CsrInsertObject(ProcessData,
|
Status = Win32CsrInsertObject(ProcessData,
|
||||||
&Request->Data.AllocConsoleRequest.InputHandle,
|
&ApiMessage->Data.AllocConsoleRequest.InputHandle,
|
||||||
&Console->Header,
|
&Console->Header,
|
||||||
GENERIC_READ | GENERIC_WRITE,
|
GENERIC_READ | GENERIC_WRITE,
|
||||||
TRUE,
|
TRUE,
|
||||||
|
@ -257,7 +258,7 @@ CSR_API(CsrAllocConsole)
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = Win32CsrInsertObject(ProcessData,
|
Status = Win32CsrInsertObject(ProcessData,
|
||||||
&Request->Data.AllocConsoleRequest.OutputHandle,
|
&ApiMessage->Data.AllocConsoleRequest.OutputHandle,
|
||||||
&Console->ActiveBuffer->Header,
|
&Console->ActiveBuffer->Header,
|
||||||
GENERIC_READ | GENERIC_WRITE,
|
GENERIC_READ | GENERIC_WRITE,
|
||||||
TRUE,
|
TRUE,
|
||||||
|
@ -267,7 +268,7 @@ CSR_API(CsrAllocConsole)
|
||||||
DPRINT1("Failed to insert object\n");
|
DPRINT1("Failed to insert object\n");
|
||||||
ConioDeleteConsole((Object_t *) Console);
|
ConioDeleteConsole((Object_t *) Console);
|
||||||
Win32CsrReleaseObject(ProcessData,
|
Win32CsrReleaseObject(ProcessData,
|
||||||
Request->Data.AllocConsoleRequest.InputHandle);
|
ApiMessage->Data.AllocConsoleRequest.InputHandle);
|
||||||
ProcessData->Console = 0;
|
ProcessData->Console = 0;
|
||||||
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -288,9 +289,9 @@ CSR_API(CsrAllocConsole)
|
||||||
if (NewConsole || !ProcessData->bInheritHandles)
|
if (NewConsole || !ProcessData->bInheritHandles)
|
||||||
{
|
{
|
||||||
Win32CsrReleaseObject(ProcessData,
|
Win32CsrReleaseObject(ProcessData,
|
||||||
Request->Data.AllocConsoleRequest.OutputHandle);
|
ApiMessage->Data.AllocConsoleRequest.OutputHandle);
|
||||||
Win32CsrReleaseObject(ProcessData,
|
Win32CsrReleaseObject(ProcessData,
|
||||||
Request->Data.AllocConsoleRequest.InputHandle);
|
ApiMessage->Data.AllocConsoleRequest.InputHandle);
|
||||||
}
|
}
|
||||||
ProcessData->Console = 0;
|
ProcessData->Console = 0;
|
||||||
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
||||||
|
@ -298,7 +299,7 @@ CSR_API(CsrAllocConsole)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the Ctrl Dispatcher */
|
/* Set the Ctrl Dispatcher */
|
||||||
ProcessData->CtrlDispatcher = Request->Data.AllocConsoleRequest.CtrlDispatcher;
|
ProcessData->CtrlDispatcher = ApiMessage->Data.AllocConsoleRequest.CtrlDispatcher;
|
||||||
DPRINT("CSRSS:CtrlDispatcher address: %x\n", ProcessData->CtrlDispatcher);
|
DPRINT("CSRSS:CtrlDispatcher address: %x\n", ProcessData->CtrlDispatcher);
|
||||||
|
|
||||||
if (!NewConsole)
|
if (!NewConsole)
|
||||||
|
@ -313,7 +314,7 @@ CSR_API(CsrAllocConsole)
|
||||||
|
|
||||||
CSR_API(CsrFreeConsole)
|
CSR_API(CsrFreeConsole)
|
||||||
{
|
{
|
||||||
Win32CsrReleaseConsole(ProcessData);
|
Win32CsrReleaseConsole(CsrGetClientThread()->Process);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -390,8 +391,8 @@ CSR_API(CsrSetConsoleMode)
|
||||||
|
|
||||||
DPRINT("CsrSetConsoleMode\n");
|
DPRINT("CsrSetConsoleMode\n");
|
||||||
|
|
||||||
Status = Win32CsrLockObject(ProcessData,
|
Status = Win32CsrLockObject(CsrGetClientThread()->Process,
|
||||||
Request->Data.SetConsoleModeRequest.ConsoleHandle,
|
ApiMessage->Data.SetConsoleModeRequest.ConsoleHandle,
|
||||||
(Object_t **) &Console, GENERIC_WRITE, 0);
|
(Object_t **) &Console, GENERIC_WRITE, 0);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -401,11 +402,11 @@ CSR_API(CsrSetConsoleMode)
|
||||||
Buff = (PCSRSS_SCREEN_BUFFER)Console;
|
Buff = (PCSRSS_SCREEN_BUFFER)Console;
|
||||||
if (CONIO_CONSOLE_MAGIC == Console->Header.Type)
|
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)
|
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
|
else
|
||||||
{
|
{
|
||||||
|
@ -425,7 +426,7 @@ CSR_API(CsrGetConsoleMode)
|
||||||
|
|
||||||
DPRINT("CsrGetConsoleMode\n");
|
DPRINT("CsrGetConsoleMode\n");
|
||||||
|
|
||||||
Status = Win32CsrLockObject(ProcessData, Request->Data.GetConsoleModeRequest.ConsoleHandle,
|
Status = Win32CsrLockObject(CsrGetClientThread()->Process, ApiMessage->Data.GetConsoleModeRequest.ConsoleHandle,
|
||||||
(Object_t **) &Console, GENERIC_READ, 0);
|
(Object_t **) &Console, GENERIC_READ, 0);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
|
@ -435,11 +436,11 @@ CSR_API(CsrGetConsoleMode)
|
||||||
Buff = (PCSRSS_SCREEN_BUFFER) Console;
|
Buff = (PCSRSS_SCREEN_BUFFER) Console;
|
||||||
if (CONIO_CONSOLE_MAGIC == Console->Header.Type)
|
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)
|
else if (CONIO_SCREEN_BUFFER_MAGIC == Buff->Header.Type)
|
||||||
{
|
{
|
||||||
Request->Data.GetConsoleModeRequest.ConsoleMode = Buff->Mode;
|
ApiMessage->Data.GetConsoleModeRequest.ConsoleMode = Buff->Mode;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -453,13 +454,14 @@ CSR_API(CsrGetConsoleMode)
|
||||||
CSR_API(CsrSetTitle)
|
CSR_API(CsrSetTitle)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
PWCHAR Buffer;
|
PWCHAR Buffer;
|
||||||
|
|
||||||
DPRINT("CsrSetTitle\n");
|
DPRINT("CsrSetTitle\n");
|
||||||
|
|
||||||
if (!Win32CsrValidateBuffer(ProcessData, Request->Data.SetTitleRequest.Title,
|
if (!Win32CsrValidateBuffer(ProcessData, ApiMessage->Data.SetTitleRequest.Title,
|
||||||
Request->Data.SetTitleRequest.Length, 1))
|
ApiMessage->Data.SetTitleRequest.Length, 1))
|
||||||
{
|
{
|
||||||
return STATUS_ACCESS_VIOLATION;
|
return STATUS_ACCESS_VIOLATION;
|
||||||
}
|
}
|
||||||
|
@ -467,14 +469,14 @@ CSR_API(CsrSetTitle)
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
||||||
if(NT_SUCCESS(Status))
|
if(NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, Request->Data.SetTitleRequest.Length);
|
Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, ApiMessage->Data.SetTitleRequest.Length);
|
||||||
if (Buffer)
|
if (Buffer)
|
||||||
{
|
{
|
||||||
/* copy title to console */
|
/* copy title to console */
|
||||||
RtlFreeUnicodeString(&Console->Title);
|
RtlFreeUnicodeString(&Console->Title);
|
||||||
Console->Title.Buffer = Buffer;
|
Console->Title.Buffer = Buffer;
|
||||||
Console->Title.Length = Console->Title.MaximumLength = Request->Data.SetTitleRequest.Length;
|
Console->Title.Length = Console->Title.MaximumLength = ApiMessage->Data.SetTitleRequest.Length;
|
||||||
memcpy(Console->Title.Buffer, Request->Data.SetTitleRequest.Title, Console->Title.Length);
|
memcpy(Console->Title.Buffer, ApiMessage->Data.SetTitleRequest.Title, Console->Title.Length);
|
||||||
if (! ConioChangeTitle(Console))
|
if (! ConioChangeTitle(Console))
|
||||||
{
|
{
|
||||||
Status = STATUS_UNSUCCESSFUL;
|
Status = STATUS_UNSUCCESSFUL;
|
||||||
|
@ -497,14 +499,15 @@ CSR_API(CsrSetTitle)
|
||||||
CSR_API(CsrGetTitle)
|
CSR_API(CsrGetTitle)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
DWORD Length;
|
DWORD Length;
|
||||||
|
|
||||||
DPRINT("CsrGetTitle\n");
|
DPRINT("CsrGetTitle\n");
|
||||||
|
|
||||||
|
|
||||||
if (!Win32CsrValidateBuffer(ProcessData, Request->Data.GetTitleRequest.Title,
|
if (!Win32CsrValidateBuffer(ProcessData, ApiMessage->Data.GetTitleRequest.Title,
|
||||||
Request->Data.GetTitleRequest.Length, 1))
|
ApiMessage->Data.GetTitleRequest.Length, 1))
|
||||||
{
|
{
|
||||||
return STATUS_ACCESS_VIOLATION;
|
return STATUS_ACCESS_VIOLATION;
|
||||||
}
|
}
|
||||||
|
@ -517,14 +520,14 @@ CSR_API(CsrGetTitle)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy title of the console to the user title buffer */
|
/* 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);
|
Length = min(ApiMessage->Data.GetTitleRequest.Length - sizeof(WCHAR), Console->Title.Length);
|
||||||
memcpy(Request->Data.GetTitleRequest.Title, Console->Title.Buffer, Length);
|
memcpy(ApiMessage->Data.GetTitleRequest.Title, Console->Title.Buffer, Length);
|
||||||
Request->Data.GetTitleRequest.Title[Length / sizeof(WCHAR)] = L'\0';
|
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);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
@ -572,8 +575,8 @@ CSR_API(CsrHardwareStateProperty)
|
||||||
|
|
||||||
DPRINT("CsrHardwareStateProperty\n");
|
DPRINT("CsrHardwareStateProperty\n");
|
||||||
|
|
||||||
Status = ConioLockConsole(ProcessData,
|
Status = ConioLockConsole(CsrGetClientThread()->Process,
|
||||||
Request->Data.ConsoleHardwareStateRequest.ConsoleHandle,
|
ApiMessage->Data.ConsoleHardwareStateRequest.ConsoleHandle,
|
||||||
&Console,
|
&Console,
|
||||||
GENERIC_READ);
|
GENERIC_READ);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
|
@ -582,15 +585,15 @@ CSR_API(CsrHardwareStateProperty)
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (Request->Data.ConsoleHardwareStateRequest.SetGet)
|
switch (ApiMessage->Data.ConsoleHardwareStateRequest.SetGet)
|
||||||
{
|
{
|
||||||
case CONSOLE_HARDWARE_STATE_GET:
|
case CONSOLE_HARDWARE_STATE_GET:
|
||||||
Request->Data.ConsoleHardwareStateRequest.State = Console->HardwareState;
|
ApiMessage->Data.ConsoleHardwareStateRequest.State = Console->HardwareState;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CONSOLE_HARDWARE_STATE_SET:
|
case CONSOLE_HARDWARE_STATE_SET:
|
||||||
DPRINT("Setting console hardware state.\n");
|
DPRINT("Setting console hardware state.\n");
|
||||||
Status = SetConsoleHardwareState(Console, Request->Data.ConsoleHardwareStateRequest.State);
|
Status = SetConsoleHardwareState(Console, ApiMessage->Data.ConsoleHardwareStateRequest.State);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -610,13 +613,13 @@ CSR_API(CsrGetConsoleWindow)
|
||||||
|
|
||||||
DPRINT("CsrGetConsoleWindow\n");
|
DPRINT("CsrGetConsoleWindow\n");
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Request->Data.GetConsoleWindowRequest.WindowHandle = Console->hWindow;
|
ApiMessage->Data.GetConsoleWindowRequest.WindowHandle = Console->hWindow;
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
@ -629,13 +632,13 @@ CSR_API(CsrSetConsoleIcon)
|
||||||
|
|
||||||
DPRINT("CsrSetConsoleIcon\n");
|
DPRINT("CsrSetConsoleIcon\n");
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = (ConioChangeIcon(Console, Request->Data.SetConsoleIconRequest.WindowIcon)
|
Status = (ConioChangeIcon(Console, ApiMessage->Data.SetConsoleIconRequest.WindowIcon)
|
||||||
? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
|
? STATUS_SUCCESS : STATUS_UNSUCCESSFUL);
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
|
|
||||||
|
@ -649,13 +652,13 @@ CSR_API(CsrGetConsoleCodePage)
|
||||||
|
|
||||||
DPRINT("CsrGetConsoleCodePage\n");
|
DPRINT("CsrGetConsoleCodePage\n");
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Request->Data.GetConsoleCodePage.CodePage = Console->CodePage;
|
ApiMessage->Data.GetConsoleCodePage.CodePage = Console->CodePage;
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -667,15 +670,15 @@ CSR_API(CsrSetConsoleCodePage)
|
||||||
|
|
||||||
DPRINT("CsrSetConsoleCodePage\n");
|
DPRINT("CsrSetConsoleCodePage\n");
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return 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);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -691,13 +694,13 @@ CSR_API(CsrGetConsoleOutputCodePage)
|
||||||
|
|
||||||
DPRINT("CsrGetConsoleOutputCodePage\n");
|
DPRINT("CsrGetConsoleOutputCodePage\n");
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Request->Data.GetConsoleOutputCodePage.CodePage = Console->OutputCodePage;
|
ApiMessage->Data.GetConsoleOutputCodePage.CodePage = Console->OutputCodePage;
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -709,15 +712,15 @@ CSR_API(CsrSetConsoleOutputCodePage)
|
||||||
|
|
||||||
DPRINT("CsrSetConsoleOutputCodePage\n");
|
DPRINT("CsrSetConsoleOutputCodePage\n");
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return 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);
|
ConioUnlockConsole(Console);
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -729,6 +732,7 @@ CSR_API(CsrSetConsoleOutputCodePage)
|
||||||
CSR_API(CsrGetProcessList)
|
CSR_API(CsrGetProcessList)
|
||||||
{
|
{
|
||||||
PDWORD Buffer;
|
PDWORD Buffer;
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
PCSR_PROCESS current;
|
PCSR_PROCESS current;
|
||||||
PLIST_ENTRY current_entry;
|
PLIST_ENTRY current_entry;
|
||||||
|
@ -737,8 +741,8 @@ CSR_API(CsrGetProcessList)
|
||||||
|
|
||||||
DPRINT("CsrGetProcessList\n");
|
DPRINT("CsrGetProcessList\n");
|
||||||
|
|
||||||
Buffer = Request->Data.GetProcessListRequest.ProcessId;
|
Buffer = ApiMessage->Data.GetProcessListRequest.ProcessId;
|
||||||
if (!Win32CsrValidateBuffer(ProcessData, Buffer, Request->Data.GetProcessListRequest.nMaxIds, sizeof(DWORD)))
|
if (!Win32CsrValidateBuffer(ProcessData, Buffer, ApiMessage->Data.GetProcessListRequest.nMaxIds, sizeof(DWORD)))
|
||||||
return STATUS_ACCESS_VIOLATION;
|
return STATUS_ACCESS_VIOLATION;
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
||||||
|
@ -752,7 +756,7 @@ CSR_API(CsrGetProcessList)
|
||||||
current_entry = current_entry->Flink)
|
current_entry = current_entry->Flink)
|
||||||
{
|
{
|
||||||
current = CONTAINING_RECORD(current_entry, CSR_PROCESS, ConsoleLink);
|
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);
|
*Buffer++ = HandleToUlong(current->ClientId.UniqueProcess);
|
||||||
}
|
}
|
||||||
|
@ -760,7 +764,7 @@ CSR_API(CsrGetProcessList)
|
||||||
|
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
|
|
||||||
Request->Data.GetProcessListRequest.nProcessIdsTotal = nItems;
|
ApiMessage->Data.GetProcessListRequest.nProcessIdsTotal = nItems;
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -772,13 +776,13 @@ CSR_API(CsrGenerateCtrlEvent)
|
||||||
DWORD Group;
|
DWORD Group;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Group = Request->Data.GenerateCtrlEvent.ProcessGroup;
|
Group = ApiMessage->Data.GenerateCtrlEvent.ProcessGroup;
|
||||||
Status = STATUS_INVALID_PARAMETER;
|
Status = STATUS_INVALID_PARAMETER;
|
||||||
for (current_entry = Console->ProcessList.Flink;
|
for (current_entry = Console->ProcessList.Flink;
|
||||||
current_entry != &Console->ProcessList;
|
current_entry != &Console->ProcessList;
|
||||||
|
@ -787,7 +791,7 @@ CSR_API(CsrGenerateCtrlEvent)
|
||||||
current = CONTAINING_RECORD(current_entry, CSR_PROCESS, ConsoleLink);
|
current = CONTAINING_RECORD(current_entry, CSR_PROCESS, ConsoleLink);
|
||||||
if (Group == 0 || current->ProcessGroupId == Group)
|
if (Group == 0 || current->ProcessGroupId == Group)
|
||||||
{
|
{
|
||||||
ConioConsoleCtrlEvent(Request->Data.GenerateCtrlEvent.Event, current);
|
ConioConsoleCtrlEvent(ApiMessage->Data.GenerateCtrlEvent.Event, current);
|
||||||
Status = STATUS_SUCCESS;
|
Status = STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -802,12 +806,12 @@ CSR_API(CsrGetConsoleSelectionInfo)
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
|
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (NT_SUCCESS(Status))
|
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)
|
if (Console->Selection.dwFlags != 0)
|
||||||
Request->Data.GetConsoleSelectionInfo.Info = Console->Selection;
|
ApiMessage->Data.GetConsoleSelectionInfo.Info = Console->Selection;
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
}
|
}
|
||||||
return Status;
|
return Status;
|
||||||
|
|
|
@ -254,7 +254,7 @@ CSR_API(CsrCreateDesktop)
|
||||||
* The desktop handle we got from win32k is in
|
* The desktop handle we got from win32k is in
|
||||||
* the scope of CSRSS so we can just use it.
|
* 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);
|
ThreadData.Event = CreateEventW(NULL, FALSE, FALSE, NULL);
|
||||||
|
|
||||||
|
@ -292,14 +292,14 @@ CSR_API(CsrShowDesktop)
|
||||||
PRIVATE_NOTIFY_DESKTOP nmh;
|
PRIVATE_NOTIFY_DESKTOP nmh;
|
||||||
DPRINT("CsrShowDesktop\n");
|
DPRINT("CsrShowDesktop\n");
|
||||||
|
|
||||||
nmh.hdr.hwndFrom = Request->Data.ShowDesktopRequest.DesktopWindow;
|
nmh.hdr.hwndFrom = ApiMessage->Data.ShowDesktopRequest.DesktopWindow;
|
||||||
nmh.hdr.idFrom = 0;
|
nmh.hdr.idFrom = 0;
|
||||||
nmh.hdr.code = PM_SHOW_DESKTOP;
|
nmh.hdr.code = PM_SHOW_DESKTOP;
|
||||||
|
|
||||||
nmh.ShowDesktop.Width = (int)Request->Data.ShowDesktopRequest.Width;
|
nmh.ShowDesktop.Width = (int)ApiMessage->Data.ShowDesktopRequest.Width;
|
||||||
nmh.ShowDesktop.Height = (int)Request->Data.ShowDesktopRequest.Height;
|
nmh.ShowDesktop.Height = (int)ApiMessage->Data.ShowDesktopRequest.Height;
|
||||||
|
|
||||||
if (SendMessageW(Request->Data.ShowDesktopRequest.DesktopWindow,
|
if (SendMessageW(ApiMessage->Data.ShowDesktopRequest.DesktopWindow,
|
||||||
WM_NOTIFY,
|
WM_NOTIFY,
|
||||||
(WPARAM)nmh.hdr.hwndFrom,
|
(WPARAM)nmh.hdr.hwndFrom,
|
||||||
(LPARAM)&nmh))
|
(LPARAM)&nmh))
|
||||||
|
@ -316,11 +316,11 @@ CSR_API(CsrHideDesktop)
|
||||||
PRIVATE_NOTIFY_DESKTOP nmh;
|
PRIVATE_NOTIFY_DESKTOP nmh;
|
||||||
DPRINT("CsrHideDesktop\n");
|
DPRINT("CsrHideDesktop\n");
|
||||||
|
|
||||||
nmh.hdr.hwndFrom = Request->Data.ShowDesktopRequest.DesktopWindow;
|
nmh.hdr.hwndFrom = ApiMessage->Data.ShowDesktopRequest.DesktopWindow;
|
||||||
nmh.hdr.idFrom = 0;
|
nmh.hdr.idFrom = 0;
|
||||||
nmh.hdr.code = PM_HIDE_DESKTOP;
|
nmh.hdr.code = PM_HIDE_DESKTOP;
|
||||||
|
|
||||||
if (SendMessageW(Request->Data.ShowDesktopRequest.DesktopWindow,
|
if (SendMessageW(ApiMessage->Data.ShowDesktopRequest.DesktopWindow,
|
||||||
WM_NOTIFY,
|
WM_NOTIFY,
|
||||||
(WPARAM)nmh.hdr.hwndFrom,
|
(WPARAM)nmh.hdr.hwndFrom,
|
||||||
(LPARAM)&nmh))
|
(LPARAM)&nmh))
|
||||||
|
|
|
@ -18,20 +18,20 @@ static HANDLE LogonProcess = NULL;
|
||||||
|
|
||||||
CSR_API(CsrRegisterLogonProcess)
|
CSR_API(CsrRegisterLogonProcess)
|
||||||
{
|
{
|
||||||
if (Request->Data.RegisterLogonProcessRequest.Register)
|
if (ApiMessage->Data.RegisterLogonProcessRequest.Register)
|
||||||
{
|
{
|
||||||
if (0 != LogonProcess)
|
if (0 != LogonProcess)
|
||||||
{
|
{
|
||||||
return STATUS_LOGON_SESSION_EXISTS;
|
return STATUS_LOGON_SESSION_EXISTS;
|
||||||
}
|
}
|
||||||
LogonProcess = Request->Data.RegisterLogonProcessRequest.ProcessId;
|
LogonProcess = ApiMessage->Data.RegisterLogonProcessRequest.ProcessId;
|
||||||
}
|
}
|
||||||
else
|
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",
|
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;
|
return STATUS_NOT_LOGON_PROCESS;
|
||||||
}
|
}
|
||||||
LogonProcess = 0;
|
LogonProcess = 0;
|
||||||
|
@ -44,7 +44,7 @@ CSR_API(CsrSetLogonNotifyWindow)
|
||||||
{
|
{
|
||||||
DWORD WindowCreator;
|
DWORD WindowCreator;
|
||||||
|
|
||||||
if (0 == GetWindowThreadProcessId(Request->Data.SetLogonNotifyWindowRequest.LogonNotifyWindow,
|
if (0 == GetWindowThreadProcessId(ApiMessage->Data.SetLogonNotifyWindowRequest.LogonNotifyWindow,
|
||||||
&WindowCreator))
|
&WindowCreator))
|
||||||
{
|
{
|
||||||
DPRINT1("Can't get window creator\n");
|
DPRINT1("Can't get window creator\n");
|
||||||
|
@ -56,7 +56,7 @@ CSR_API(CsrSetLogonNotifyWindow)
|
||||||
return STATUS_ACCESS_DENIED;
|
return STATUS_ACCESS_DENIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
LogonNotifyWindow = Request->Data.SetLogonNotifyWindowRequest.LogonNotifyWindow;
|
LogonNotifyWindow = ApiMessage->Data.SetLogonNotifyWindowRequest.LogonNotifyWindow;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -915,16 +915,16 @@ UserExitReactos(DWORD UserProcessId, UINT Flags)
|
||||||
|
|
||||||
CSR_API(CsrExitReactos)
|
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,
|
return UserExitReactos((DWORD_PTR) ApiMessage->Header.ClientId.UniqueProcess,
|
||||||
Request->Data.ExitReactosRequest.Flags);
|
ApiMessage->Data.ExitReactosRequest.Flags);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return InternalExitReactos((DWORD_PTR) Request->Header.ClientId.UniqueProcess,
|
return InternalExitReactos((DWORD_PTR) ApiMessage->Header.ClientId.UniqueProcess,
|
||||||
(DWORD_PTR) Request->Header.ClientId.UniqueThread,
|
(DWORD_PTR) ApiMessage->Header.ClientId.UniqueThread,
|
||||||
Request->Data.ExitReactosRequest.Flags);
|
ApiMessage->Data.ExitReactosRequest.Flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -73,9 +73,9 @@ CSR_API(CsrGetTempFile)
|
||||||
DPRINT("CsrGetTempFile entered\n");
|
DPRINT("CsrGetTempFile entered\n");
|
||||||
|
|
||||||
/* Return 16-bits ID */
|
/* 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;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -106,16 +106,16 @@ CSR_API(CsrDefineDosDevice)
|
||||||
PWSTR lpBuffer;
|
PWSTR lpBuffer;
|
||||||
|
|
||||||
DPRINT("CsrDefineDosDevice entered, Flags:%d, DeviceName:%wZ, TargetName:%wZ\n",
|
DPRINT("CsrDefineDosDevice entered, Flags:%d, DeviceName:%wZ, TargetName:%wZ\n",
|
||||||
Request->Data.DefineDosDeviceRequest.dwFlags,
|
ApiMessage->Data.DefineDosDeviceRequest.dwFlags,
|
||||||
&Request->Data.DefineDosDeviceRequest.DeviceName,
|
&ApiMessage->Data.DefineDosDeviceRequest.DeviceName,
|
||||||
&Request->Data.DefineDosDeviceRequest.TargetName);
|
&ApiMessage->Data.DefineDosDeviceRequest.TargetName);
|
||||||
|
|
||||||
Matched = AddHistory = FALSE;
|
Matched = AddHistory = FALSE;
|
||||||
HistoryEntry = NULL;
|
HistoryEntry = NULL;
|
||||||
AdminSid = SystemSid = WorldSid = NULL;
|
AdminSid = SystemSid = WorldSid = NULL;
|
||||||
SecurityDescriptor = NULL;
|
SecurityDescriptor = NULL;
|
||||||
ListHead = &DosDeviceHistory;
|
ListHead = &DosDeviceHistory;
|
||||||
dwFlags = Request->Data.DefineDosDeviceRequest.dwFlags;
|
dwFlags = ApiMessage->Data.DefineDosDeviceRequest.dwFlags;
|
||||||
|
|
||||||
/* Validate the flags */
|
/* Validate the flags */
|
||||||
if ( (dwFlags & 0xFFFFFFF0) ||
|
if ( (dwFlags & 0xFFFFFFF0) ||
|
||||||
|
@ -137,13 +137,13 @@ CSR_API(CsrDefineDosDevice)
|
||||||
{
|
{
|
||||||
Status =
|
Status =
|
||||||
RtlUpcaseUnicodeString(&RequestDeviceName,
|
RtlUpcaseUnicodeString(&RequestDeviceName,
|
||||||
&Request->Data.DefineDosDeviceRequest.DeviceName,
|
&ApiMessage->Data.DefineDosDeviceRequest.DeviceName,
|
||||||
TRUE);
|
TRUE);
|
||||||
if (! NT_SUCCESS(Status))
|
if (! NT_SUCCESS(Status))
|
||||||
_SEH2_LEAVE;
|
_SEH2_LEAVE;
|
||||||
|
|
||||||
RequestLinkTarget =
|
RequestLinkTarget =
|
||||||
&Request->Data.DefineDosDeviceRequest.TargetName;
|
&ApiMessage->Data.DefineDosDeviceRequest.TargetName;
|
||||||
lpBuffer = (PWSTR) RtlAllocateHeap(Win32CsrApiHeap,
|
lpBuffer = (PWSTR) RtlAllocateHeap(Win32CsrApiHeap,
|
||||||
HEAP_ZERO_MEMORY,
|
HEAP_ZERO_MEMORY,
|
||||||
RequestDeviceName.MaximumLength + 5 * sizeof(WCHAR));
|
RequestDeviceName.MaximumLength + 5 * sizeof(WCHAR));
|
||||||
|
|
|
@ -259,20 +259,21 @@ Win32CsrDuplicateHandleTable(
|
||||||
CSR_API(CsrGetHandle)
|
CSR_API(CsrGetHandle)
|
||||||
{
|
{
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
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);
|
RtlEnterCriticalSection(&ProcessData->HandleTableLock);
|
||||||
if (ProcessData->Console)
|
if (ProcessData->Console)
|
||||||
{
|
{
|
||||||
DWORD DesiredAccess = Request->Data.GetInputHandleRequest.Access;
|
DWORD DesiredAccess = ApiMessage->Data.GetInputHandleRequest.Access;
|
||||||
DWORD ShareMode = Request->Data.GetInputHandleRequest.ShareMode;
|
DWORD ShareMode = ApiMessage->Data.GetInputHandleRequest.ShareMode;
|
||||||
|
|
||||||
PCSRSS_CONSOLE Console = ProcessData->Console;
|
PCSRSS_CONSOLE Console = ProcessData->Console;
|
||||||
Object_t *Object;
|
Object_t *Object;
|
||||||
|
|
||||||
EnterCriticalSection(&Console->Lock);
|
EnterCriticalSection(&Console->Lock);
|
||||||
if (Request->Type == GET_OUTPUT_HANDLE)
|
if (ApiMessage->ApiNumber == GET_OUTPUT_HANDLE)
|
||||||
Object = &Console->ActiveBuffer->Header;
|
Object = &Console->ActiveBuffer->Header;
|
||||||
else
|
else
|
||||||
Object = &Console->Header;
|
Object = &Console->Header;
|
||||||
|
@ -288,10 +289,10 @@ CSR_API(CsrGetHandle)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Status = Win32CsrInsertObject(ProcessData,
|
Status = Win32CsrInsertObject(ProcessData,
|
||||||
&Request->Data.GetInputHandleRequest.Handle,
|
&ApiMessage->Data.GetInputHandleRequest.Handle,
|
||||||
Object,
|
Object,
|
||||||
DesiredAccess,
|
DesiredAccess,
|
||||||
Request->Data.GetInputHandleRequest.Inheritable,
|
ApiMessage->Data.GetInputHandleRequest.Inheritable,
|
||||||
ShareMode);
|
ShareMode);
|
||||||
}
|
}
|
||||||
LeaveCriticalSection(&Console->Lock);
|
LeaveCriticalSection(&Console->Lock);
|
||||||
|
@ -303,15 +304,16 @@ CSR_API(CsrGetHandle)
|
||||||
|
|
||||||
CSR_API(CsrCloseHandle)
|
CSR_API(CsrCloseHandle)
|
||||||
{
|
{
|
||||||
return Win32CsrReleaseObject(ProcessData, Request->Data.CloseHandleRequest.Handle);
|
return Win32CsrReleaseObject(CsrGetClientThread()->Process, ApiMessage->Data.CloseHandleRequest.Handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
CSR_API(CsrVerifyHandle)
|
CSR_API(CsrVerifyHandle)
|
||||||
{
|
{
|
||||||
ULONG_PTR Index;
|
ULONG_PTR Index;
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
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);
|
RtlEnterCriticalSection(&ProcessData->HandleTableLock);
|
||||||
if (Index >= ProcessData->HandleTableSize ||
|
if (Index >= ProcessData->HandleTableSize ||
|
||||||
ProcessData->HandleTable[Index].Object == NULL)
|
ProcessData->HandleTable[Index].Object == NULL)
|
||||||
|
@ -329,53 +331,54 @@ CSR_API(CsrDuplicateHandle)
|
||||||
ULONG_PTR Index;
|
ULONG_PTR Index;
|
||||||
PCSRSS_HANDLE Entry;
|
PCSRSS_HANDLE Entry;
|
||||||
DWORD DesiredAccess;
|
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);
|
RtlEnterCriticalSection(&ProcessData->HandleTableLock);
|
||||||
if (Index >= ProcessData->HandleTableSize
|
if (Index >= ProcessData->HandleTableSize
|
||||||
|| (Entry = &ProcessData->HandleTable[Index])->Object == NULL)
|
|| (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);
|
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
||||||
return STATUS_INVALID_HANDLE;
|
return STATUS_INVALID_HANDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Request->Data.DuplicateHandleRequest.Options & DUPLICATE_SAME_ACCESS)
|
if (ApiMessage->Data.DuplicateHandleRequest.Options & DUPLICATE_SAME_ACCESS)
|
||||||
{
|
{
|
||||||
DesiredAccess = Entry->Access;
|
DesiredAccess = Entry->Access;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DesiredAccess = Request->Data.DuplicateHandleRequest.Access;
|
DesiredAccess = ApiMessage->Data.DuplicateHandleRequest.Access;
|
||||||
/* Make sure the source handle has all the desired flags */
|
/* Make sure the source handle has all the desired flags */
|
||||||
if (~Entry->Access & DesiredAccess)
|
if (~Entry->Access & DesiredAccess)
|
||||||
{
|
{
|
||||||
DPRINT1("Handle %p only has access %X; requested %X\n",
|
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);
|
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Request->Status = Win32CsrInsertObject(ProcessData,
|
ApiMessage->Status = Win32CsrInsertObject(ProcessData,
|
||||||
&Request->Data.DuplicateHandleRequest.Handle,
|
&ApiMessage->Data.DuplicateHandleRequest.Handle,
|
||||||
Entry->Object,
|
Entry->Object,
|
||||||
DesiredAccess,
|
DesiredAccess,
|
||||||
Request->Data.DuplicateHandleRequest.Inheritable,
|
ApiMessage->Data.DuplicateHandleRequest.Inheritable,
|
||||||
Entry->ShareMode);
|
Entry->ShareMode);
|
||||||
if (NT_SUCCESS(Request->Status)
|
if (NT_SUCCESS(ApiMessage->Status)
|
||||||
&& Request->Data.DuplicateHandleRequest.Options & DUPLICATE_CLOSE_SOURCE)
|
&& ApiMessage->Data.DuplicateHandleRequest.Options & DUPLICATE_CLOSE_SOURCE)
|
||||||
{
|
{
|
||||||
Win32CsrCloseHandleEntry(Entry);
|
Win32CsrCloseHandleEntry(Entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
RtlLeaveCriticalSection(&ProcessData->HandleTableLock);
|
||||||
return Request->Status;
|
return ApiMessage->Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSR_API(CsrGetInputWaitHandle)
|
CSR_API(CsrGetInputWaitHandle)
|
||||||
{
|
{
|
||||||
Request->Data.GetConsoleInputWaitHandle.InputWaitHandle = ProcessData->ConsoleEvent;
|
ApiMessage->Data.GetConsoleInputWaitHandle.InputWaitHandle = CsrGetClientThread()->Process->ConsoleEvent;
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -149,6 +149,7 @@ HistoryDeleteBuffer(PHISTORY_BUFFER Hist)
|
||||||
|
|
||||||
CSR_API(CsrGetCommandHistoryLength)
|
CSR_API(CsrGetCommandHistoryLength)
|
||||||
{
|
{
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PHISTORY_BUFFER Hist;
|
PHISTORY_BUFFER Hist;
|
||||||
|
@ -156,8 +157,8 @@ CSR_API(CsrGetCommandHistoryLength)
|
||||||
INT i;
|
INT i;
|
||||||
|
|
||||||
if (!Win32CsrValidateBuffer(ProcessData,
|
if (!Win32CsrValidateBuffer(ProcessData,
|
||||||
Request->Data.GetCommandHistoryLength.ExeName.Buffer,
|
ApiMessage->Data.GetCommandHistoryLength.ExeName.Buffer,
|
||||||
Request->Data.GetCommandHistoryLength.ExeName.Length, 1))
|
ApiMessage->Data.GetCommandHistoryLength.ExeName.Length, 1))
|
||||||
{
|
{
|
||||||
return STATUS_ACCESS_VIOLATION;
|
return STATUS_ACCESS_VIOLATION;
|
||||||
}
|
}
|
||||||
|
@ -165,13 +166,13 @@ CSR_API(CsrGetCommandHistoryLength)
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
Hist = HistoryFindBuffer(Console, &Request->Data.GetCommandHistory.ExeName);
|
Hist = HistoryFindBuffer(Console, &ApiMessage->Data.GetCommandHistory.ExeName);
|
||||||
if (Hist)
|
if (Hist)
|
||||||
{
|
{
|
||||||
for (i = 0; i < Hist->NumEntries; i++)
|
for (i = 0; i < Hist->NumEntries; i++)
|
||||||
Length += Hist->Entries[i].Length + sizeof(WCHAR);
|
Length += Hist->Entries[i].Length + sizeof(WCHAR);
|
||||||
}
|
}
|
||||||
Request->Data.GetCommandHistoryLength.Length = Length;
|
ApiMessage->Data.GetCommandHistoryLength.Length = Length;
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
}
|
}
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -179,17 +180,18 @@ CSR_API(CsrGetCommandHistoryLength)
|
||||||
|
|
||||||
CSR_API(CsrGetCommandHistory)
|
CSR_API(CsrGetCommandHistory)
|
||||||
{
|
{
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PHISTORY_BUFFER Hist;
|
PHISTORY_BUFFER Hist;
|
||||||
PBYTE Buffer = (PBYTE)Request->Data.GetCommandHistory.History;
|
PBYTE Buffer = (PBYTE)ApiMessage->Data.GetCommandHistory.History;
|
||||||
ULONG BufferSize = Request->Data.GetCommandHistory.Length;
|
ULONG BufferSize = ApiMessage->Data.GetCommandHistory.Length;
|
||||||
INT i;
|
INT i;
|
||||||
|
|
||||||
if (!Win32CsrValidateBuffer(ProcessData, Buffer, BufferSize, 1) ||
|
if (!Win32CsrValidateBuffer(ProcessData, Buffer, BufferSize, 1) ||
|
||||||
!Win32CsrValidateBuffer(ProcessData,
|
!Win32CsrValidateBuffer(ProcessData,
|
||||||
Request->Data.GetCommandHistory.ExeName.Buffer,
|
ApiMessage->Data.GetCommandHistory.ExeName.Buffer,
|
||||||
Request->Data.GetCommandHistory.ExeName.Length, 1))
|
ApiMessage->Data.GetCommandHistory.ExeName.Length, 1))
|
||||||
{
|
{
|
||||||
return STATUS_ACCESS_VIOLATION;
|
return STATUS_ACCESS_VIOLATION;
|
||||||
}
|
}
|
||||||
|
@ -197,7 +199,7 @@ CSR_API(CsrGetCommandHistory)
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
Hist = HistoryFindBuffer(Console, &Request->Data.GetCommandHistory.ExeName);
|
Hist = HistoryFindBuffer(Console, &ApiMessage->Data.GetCommandHistory.ExeName);
|
||||||
if (Hist)
|
if (Hist)
|
||||||
{
|
{
|
||||||
for (i = 0; i < Hist->NumEntries; i++)
|
for (i = 0; i < Hist->NumEntries; i++)
|
||||||
|
@ -213,7 +215,7 @@ CSR_API(CsrGetCommandHistory)
|
||||||
Buffer += sizeof(WCHAR);
|
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);
|
ConioUnlockConsole(Console);
|
||||||
}
|
}
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -221,13 +223,14 @@ CSR_API(CsrGetCommandHistory)
|
||||||
|
|
||||||
CSR_API(CsrExpungeCommandHistory)
|
CSR_API(CsrExpungeCommandHistory)
|
||||||
{
|
{
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
PHISTORY_BUFFER Hist;
|
PHISTORY_BUFFER Hist;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
|
||||||
if (!Win32CsrValidateBuffer(ProcessData,
|
if (!Win32CsrValidateBuffer(ProcessData,
|
||||||
Request->Data.ExpungeCommandHistory.ExeName.Buffer,
|
ApiMessage->Data.ExpungeCommandHistory.ExeName.Buffer,
|
||||||
Request->Data.ExpungeCommandHistory.ExeName.Length, 1))
|
ApiMessage->Data.ExpungeCommandHistory.ExeName.Length, 1))
|
||||||
{
|
{
|
||||||
return STATUS_ACCESS_VIOLATION;
|
return STATUS_ACCESS_VIOLATION;
|
||||||
}
|
}
|
||||||
|
@ -235,7 +238,7 @@ CSR_API(CsrExpungeCommandHistory)
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
Hist = HistoryFindBuffer(Console, &Request->Data.ExpungeCommandHistory.ExeName);
|
Hist = HistoryFindBuffer(Console, &ApiMessage->Data.ExpungeCommandHistory.ExeName);
|
||||||
HistoryDeleteBuffer(Hist);
|
HistoryDeleteBuffer(Hist);
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
}
|
}
|
||||||
|
@ -244,15 +247,16 @@ CSR_API(CsrExpungeCommandHistory)
|
||||||
|
|
||||||
CSR_API(CsrSetHistoryNumberCommands)
|
CSR_API(CsrSetHistoryNumberCommands)
|
||||||
{
|
{
|
||||||
|
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
PHISTORY_BUFFER Hist;
|
PHISTORY_BUFFER Hist;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
WORD MaxEntries = Request->Data.SetHistoryNumberCommands.NumCommands;
|
WORD MaxEntries = ApiMessage->Data.SetHistoryNumberCommands.NumCommands;
|
||||||
PUNICODE_STRING OldEntryList, NewEntryList;
|
PUNICODE_STRING OldEntryList, NewEntryList;
|
||||||
|
|
||||||
if (!Win32CsrValidateBuffer(ProcessData,
|
if (!Win32CsrValidateBuffer(ProcessData,
|
||||||
Request->Data.SetHistoryNumberCommands.ExeName.Buffer,
|
ApiMessage->Data.SetHistoryNumberCommands.ExeName.Buffer,
|
||||||
Request->Data.SetHistoryNumberCommands.ExeName.Length, 1))
|
ApiMessage->Data.SetHistoryNumberCommands.ExeName.Length, 1))
|
||||||
{
|
{
|
||||||
return STATUS_ACCESS_VIOLATION;
|
return STATUS_ACCESS_VIOLATION;
|
||||||
}
|
}
|
||||||
|
@ -260,7 +264,7 @@ CSR_API(CsrSetHistoryNumberCommands)
|
||||||
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
Hist = HistoryFindBuffer(Console, &Request->Data.SetHistoryNumberCommands.ExeName);
|
Hist = HistoryFindBuffer(Console, &ApiMessage->Data.SetHistoryNumberCommands.ExeName);
|
||||||
if (Hist)
|
if (Hist)
|
||||||
{
|
{
|
||||||
OldEntryList = Hist->Entries;
|
OldEntryList = Hist->Entries;
|
||||||
|
@ -293,12 +297,12 @@ CSR_API(CsrSetHistoryNumberCommands)
|
||||||
CSR_API(CsrGetHistoryInfo)
|
CSR_API(CsrGetHistoryInfo)
|
||||||
{
|
{
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
NTSTATUS Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
NTSTATUS Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
Request->Data.SetHistoryInfo.HistoryBufferSize = Console->HistoryBufferSize;
|
ApiMessage->Data.SetHistoryInfo.HistoryBufferSize = Console->HistoryBufferSize;
|
||||||
Request->Data.SetHistoryInfo.NumberOfHistoryBuffers = Console->NumberOfHistoryBuffers;
|
ApiMessage->Data.SetHistoryInfo.NumberOfHistoryBuffers = Console->NumberOfHistoryBuffers;
|
||||||
Request->Data.SetHistoryInfo.dwFlags = Console->HistoryNoDup;
|
ApiMessage->Data.SetHistoryInfo.dwFlags = Console->HistoryNoDup;
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
}
|
}
|
||||||
return Status;
|
return Status;
|
||||||
|
@ -307,12 +311,12 @@ CSR_API(CsrGetHistoryInfo)
|
||||||
CSR_API(CsrSetHistoryInfo)
|
CSR_API(CsrSetHistoryInfo)
|
||||||
{
|
{
|
||||||
PCSRSS_CONSOLE Console;
|
PCSRSS_CONSOLE Console;
|
||||||
NTSTATUS Status = ConioConsoleFromProcessData(ProcessData, &Console);
|
NTSTATUS Status = ConioConsoleFromProcessData(CsrGetClientThread()->Process, &Console);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
Console->HistoryBufferSize = (WORD)Request->Data.SetHistoryInfo.HistoryBufferSize;
|
Console->HistoryBufferSize = (WORD)ApiMessage->Data.SetHistoryInfo.HistoryBufferSize;
|
||||||
Console->NumberOfHistoryBuffers = (WORD)Request->Data.SetHistoryInfo.NumberOfHistoryBuffers;
|
Console->NumberOfHistoryBuffers = (WORD)ApiMessage->Data.SetHistoryInfo.NumberOfHistoryBuffers;
|
||||||
Console->HistoryNoDup = Request->Data.SetHistoryInfo.dwFlags & HISTORY_NO_DUP_FLAG;
|
Console->HistoryNoDup = ApiMessage->Data.SetHistoryInfo.dwFlags & HISTORY_NO_DUP_FLAG;
|
||||||
ConioUnlockConsole(Console);
|
ConioUnlockConsole(Console);
|
||||||
}
|
}
|
||||||
return Status;
|
return Status;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue