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