/* INCLUDES ******************************************************************/
+#include "consrv.h"
+#include "conio.h"
+
#define NDEBUG
-#include "w32csr.h"
#include <debug.h>
/* GLOBALS *******************************************************************/
CSR_API(SrvWriteConsole)
{
NTSTATUS Status;
+ PCSRSS_WRITE_CONSOLE WriteConsoleRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.WriteConsoleRequest;
PCHAR Buffer;
PCSRSS_SCREEN_BUFFER Buff;
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
PCSRSS_CONSOLE Console;
DWORD Written = 0;
ULONG Length;
- ULONG CharSize = (ApiMessage->Data.WriteConsoleRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR));
+ ULONG CharSize = (WriteConsoleRequest->Unicode ? sizeof(WCHAR) : sizeof(CHAR));
DPRINT("SrvWriteConsole\n");
if (ApiMessage->Header.u1.s1.TotalLength
< CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE)
- + (ApiMessage->Data.WriteConsoleRequest.NrCharactersToWrite * CharSize))
+ + (WriteConsoleRequest->NrCharactersToWrite * CharSize))
{
DPRINT1("Invalid ApiMessage size\n");
return STATUS_INVALID_PARAMETER;
}
- Status = ConioLockScreenBuffer(ProcessData, ApiMessage->Data.WriteConsoleRequest.ConsoleHandle, &Buff, GENERIC_WRITE);
+ Status = ConioLockScreenBuffer(ProcessData, WriteConsoleRequest->ConsoleHandle, &Buff, GENERIC_WRITE);
if (! NT_SUCCESS(Status))
{
return Status;
if (Console->UnpauseEvent)
{
Status = NtDuplicateObject(GetCurrentProcess(), Console->UnpauseEvent,
- ProcessData->ProcessHandle, &ApiMessage->Data.WriteConsoleRequest.UnpauseEvent,
+ ProcessData->ProcessHandle, &WriteConsoleRequest->UnpauseEvent,
SYNCHRONIZE, 0, 0);
ConioUnlockScreenBuffer(Buff);
return NT_SUCCESS(Status) ? STATUS_PENDING : Status;
}
- if(ApiMessage->Data.WriteConsoleRequest.Unicode)
+ if(WriteConsoleRequest->Unicode)
{
Length = WideCharToMultiByte(Console->OutputCodePage, 0,
- (PWCHAR)ApiMessage->Data.WriteConsoleRequest.Buffer,
- ApiMessage->Data.WriteConsoleRequest.NrCharactersToWrite,
+ (PWCHAR)WriteConsoleRequest->Buffer,
+ WriteConsoleRequest->NrCharactersToWrite,
NULL, 0, NULL, NULL);
Buffer = RtlAllocateHeap(GetProcessHeap(), 0, Length);
if (Buffer)
{
WideCharToMultiByte(Console->OutputCodePage, 0,
- (PWCHAR)ApiMessage->Data.WriteConsoleRequest.Buffer,
- ApiMessage->Data.WriteConsoleRequest.NrCharactersToWrite,
+ (PWCHAR)WriteConsoleRequest->Buffer,
+ WriteConsoleRequest->NrCharactersToWrite,
Buffer, Length, NULL, NULL);
}
else
}
else
{
- Buffer = (PCHAR)ApiMessage->Data.WriteConsoleRequest.Buffer;
+ Buffer = (PCHAR)WriteConsoleRequest->Buffer;
}
if (Buffer)
if (NT_SUCCESS(Status))
{
Status = ConioWriteConsole(Console, Buff, Buffer,
- ApiMessage->Data.WriteConsoleRequest.NrCharactersToWrite, TRUE);
+ WriteConsoleRequest->NrCharactersToWrite, TRUE);
if (NT_SUCCESS(Status))
{
- Written = ApiMessage->Data.WriteConsoleRequest.NrCharactersToWrite;
+ Written = WriteConsoleRequest->NrCharactersToWrite;
}
}
- if (ApiMessage->Data.WriteConsoleRequest.Unicode)
+ if (WriteConsoleRequest->Unicode)
{
RtlFreeHeap(GetProcessHeap(), 0, Buffer);
}
}
ConioUnlockScreenBuffer(Buff);
- ApiMessage->Data.WriteConsoleRequest.NrCharactersWritten = Written;
+ WriteConsoleRequest->NrCharactersWritten = Written;
return Status;
}
CSR_API(SrvGetConsoleScreenBufferInfo) // CsrGetScreenBufferInfo
{
NTSTATUS Status;
+ PCSRSS_SCREEN_BUFFER_INFO ScreenBufferInfoRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ScreenBufferInfoRequest;
PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff;
PCONSOLE_SCREEN_BUFFER_INFO pInfo;
DPRINT("SrvGetConsoleScreenBufferInfo\n");
- Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.ScreenBufferInfoRequest.ConsoleHandle, &Buff, GENERIC_READ);
+ Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ScreenBufferInfoRequest->ConsoleHandle, &Buff, GENERIC_READ);
if (! NT_SUCCESS(Status))
{
return Status;
}
Console = Buff->Header.Console;
- pInfo = &ApiMessage->Data.ScreenBufferInfoRequest.Info;
+ pInfo = &ScreenBufferInfoRequest->Info;
pInfo->dwSize.X = Buff->MaxX;
pInfo->dwSize.Y = Buff->MaxY;
pInfo->dwCursorPosition.X = Buff->CurrentX;
CSR_API(SrvSetConsoleCursor)
{
NTSTATUS Status;
+ PCSRSS_SET_CURSOR SetCursorRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetCursorRequest;
PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff;
LONG OldCursorX, OldCursorY;
DPRINT("SrvSetConsoleCursor\n");
- Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.SetCursorRequest.ConsoleHandle, &Buff, GENERIC_WRITE);
+ Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, SetCursorRequest->ConsoleHandle, &Buff, GENERIC_WRITE);
if (! NT_SUCCESS(Status))
{
return Status;
}
Console = Buff->Header.Console;
- NewCursorX = ApiMessage->Data.SetCursorRequest.Position.X;
- NewCursorY = ApiMessage->Data.SetCursorRequest.Position.Y;
+ NewCursorX = SetCursorRequest->Position.X;
+ NewCursorY = SetCursorRequest->Position.Y;
if (NewCursorX < 0 || NewCursorX >= Buff->MaxX ||
NewCursorY < 0 || NewCursorY >= Buff->MaxY)
{
CSR_API(CsrWriteConsoleOutputChar)
{
NTSTATUS Status;
+ PCSRSS_WRITE_CONSOLE_OUTPUT_CHAR WriteConsoleOutputCharRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.WriteConsoleOutputCharRequest;
PCHAR String, tmpString = NULL;
PBYTE Buffer;
PCSRSS_CONSOLE Console;
DPRINT("CsrWriteConsoleOutputChar\n");
- CharSize = (ApiMessage->Data.WriteConsoleOutputCharRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR));
+ CharSize = (WriteConsoleOutputCharRequest->Unicode ? sizeof(WCHAR) : sizeof(CHAR));
if (ApiMessage->Header.u1.s1.TotalLength
< CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE_OUTPUT_CHAR)
- + (ApiMessage->Data.WriteConsoleOutputCharRequest.Length * CharSize))
+ + (WriteConsoleOutputCharRequest->Length * CharSize))
{
DPRINT1("Invalid ApiMessage size\n");
return STATUS_INVALID_PARAMETER;
}
Status = ConioLockScreenBuffer(CsrGetClientThread()->Process,
- ApiMessage->Data.WriteConsoleOutputCharRequest.ConsoleHandle,
+ WriteConsoleOutputCharRequest->ConsoleHandle,
&Buff,
GENERIC_WRITE);
if (NT_SUCCESS(Status))
{
Console = Buff->Header.Console;
- if(ApiMessage->Data.WriteConsoleOutputCharRequest.Unicode)
+ if(WriteConsoleOutputCharRequest->Unicode)
{
Length = WideCharToMultiByte(Console->OutputCodePage, 0,
- (PWCHAR)ApiMessage->Data.WriteConsoleOutputCharRequest.String,
- ApiMessage->Data.WriteConsoleOutputCharRequest.Length,
+ (PWCHAR)WriteConsoleOutputCharRequest->String,
+ WriteConsoleOutputCharRequest->Length,
NULL, 0, NULL, NULL);
tmpString = String = RtlAllocateHeap(GetProcessHeap(), 0, Length);
if (String)
{
WideCharToMultiByte(Console->OutputCodePage, 0,
- (PWCHAR)ApiMessage->Data.WriteConsoleOutputCharRequest.String,
- ApiMessage->Data.WriteConsoleOutputCharRequest.Length,
+ (PWCHAR)WriteConsoleOutputCharRequest->String,
+ WriteConsoleOutputCharRequest->Length,
String, Length, NULL, NULL);
}
else
}
else
{
- String = (PCHAR)ApiMessage->Data.WriteConsoleOutputCharRequest.String;
+ String = (PCHAR)WriteConsoleOutputCharRequest->String;
}
if (String)
{
if (NT_SUCCESS(Status))
{
- X = ApiMessage->Data.WriteConsoleOutputCharRequest.Coord.X;
- Y = (ApiMessage->Data.WriteConsoleOutputCharRequest.Coord.Y + Buff->VirtualY) % Buff->MaxY;
- Length = ApiMessage->Data.WriteConsoleOutputCharRequest.Length;
+ X = WriteConsoleOutputCharRequest->Coord.X;
+ Y = (WriteConsoleOutputCharRequest->Coord.Y + Buff->VirtualY) % Buff->MaxY;
+ Length = WriteConsoleOutputCharRequest->Length;
Buffer = &Buff->Buffer[2 * (Y * Buff->MaxX + X)];
while (Length--)
{
}
if (Buff == Console->ActiveBuffer)
{
- ConioComputeUpdateRect(Buff, &UpdateRect, &ApiMessage->Data.WriteConsoleOutputCharRequest.Coord,
- ApiMessage->Data.WriteConsoleOutputCharRequest.Length);
+ ConioComputeUpdateRect(Buff, &UpdateRect, &WriteConsoleOutputCharRequest->Coord,
+ WriteConsoleOutputCharRequest->Length);
ConioDrawRegion(Console, &UpdateRect);
}
- ApiMessage->Data.WriteConsoleOutputCharRequest.EndCoord.X = X;
- ApiMessage->Data.WriteConsoleOutputCharRequest.EndCoord.Y = (Y + Buff->MaxY - Buff->VirtualY) % Buff->MaxY;
+ WriteConsoleOutputCharRequest->EndCoord.X = X;
+ WriteConsoleOutputCharRequest->EndCoord.Y = (Y + Buff->MaxY - Buff->VirtualY) % Buff->MaxY;
}
- if (ApiMessage->Data.WriteConsoleRequest.Unicode)
+ if (WriteConsoleOutputCharRequest->Unicode)
{
RtlFreeHeap(GetProcessHeap(), 0, tmpString);
}
}
ConioUnlockScreenBuffer(Buff);
}
- ApiMessage->Data.WriteConsoleOutputCharRequest.NrCharactersWritten = Written;
+ WriteConsoleOutputCharRequest->NrCharactersWritten = Written;
return Status;
}
CSR_API(CsrFillOutputChar)
{
NTSTATUS Status;
+ PCSRSS_FILL_OUTPUT FillOutputRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.FillOutputRequest;
PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff;
DWORD X, Y, Length, Written = 0;
DPRINT("CsrFillOutputChar\n");
- Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.FillOutputRequest.ConsoleHandle, &Buff, GENERIC_WRITE);
+ Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, FillOutputRequest->ConsoleHandle, &Buff, GENERIC_WRITE);
if (! NT_SUCCESS(Status))
{
return Status;
}
Console = Buff->Header.Console;
- X = ApiMessage->Data.FillOutputRequest.Position.X;
- Y = (ApiMessage->Data.FillOutputRequest.Position.Y + Buff->VirtualY) % Buff->MaxY;
+ X = FillOutputRequest->Position.X;
+ Y = (FillOutputRequest->Position.Y + Buff->VirtualY) % Buff->MaxY;
Buffer = &Buff->Buffer[2 * (Y * Buff->MaxX + X)];
- if(ApiMessage->Data.FillOutputRequest.Unicode)
- ConsoleUnicodeCharToAnsiChar(Console, &Char, &ApiMessage->Data.FillOutputRequest.Char.UnicodeChar);
+ if(FillOutputRequest->Unicode)
+ ConsoleUnicodeCharToAnsiChar(Console, &Char, &FillOutputRequest->Char.UnicodeChar);
else
- Char = ApiMessage->Data.FillOutputRequest.Char.AsciiChar;
- Length = ApiMessage->Data.FillOutputRequest.Length;
+ Char = FillOutputRequest->Char.AsciiChar;
+ Length = FillOutputRequest->Length;
while (Length--)
{
*Buffer = Char;
if (Buff == Console->ActiveBuffer)
{
- ConioComputeUpdateRect(Buff, &UpdateRect, &ApiMessage->Data.FillOutputRequest.Position,
- ApiMessage->Data.FillOutputRequest.Length);
+ ConioComputeUpdateRect(Buff, &UpdateRect, &FillOutputRequest->Position,
+ FillOutputRequest->Length);
ConioDrawRegion(Console, &UpdateRect);
}
ConioUnlockScreenBuffer(Buff);
- Length = ApiMessage->Data.FillOutputRequest.Length;
- ApiMessage->Data.FillOutputRequest.NrCharactersWritten = Length;
+ Length = FillOutputRequest->Length;
+ FillOutputRequest->NrCharactersWritten = Length;
return STATUS_SUCCESS;
}
CSR_API(CsrWriteConsoleOutputAttrib)
{
+ PCSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB WriteConsoleOutputAttribRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.WriteConsoleOutputAttribRequest;
PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff;
PUCHAR Buffer;
if (ApiMessage->Header.u1.s1.TotalLength
< CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB)
- + ApiMessage->Data.WriteConsoleOutputAttribRequest.Length * sizeof(WORD))
+ + WriteConsoleOutputAttribRequest->Length * sizeof(WORD))
{
DPRINT1("Invalid ApiMessage size\n");
return STATUS_INVALID_PARAMETER;
}
Status = ConioLockScreenBuffer(CsrGetClientThread()->Process,
- ApiMessage->Data.WriteConsoleOutputAttribRequest.ConsoleHandle,
+ WriteConsoleOutputAttribRequest->ConsoleHandle,
&Buff,
GENERIC_WRITE);
if (! NT_SUCCESS(Status))
}
Console = Buff->Header.Console;
- X = ApiMessage->Data.WriteConsoleOutputAttribRequest.Coord.X;
- Y = (ApiMessage->Data.WriteConsoleOutputAttribRequest.Coord.Y + Buff->VirtualY) % Buff->MaxY;
- Length = ApiMessage->Data.WriteConsoleOutputAttribRequest.Length;
+ X = WriteConsoleOutputAttribRequest->Coord.X;
+ Y = (WriteConsoleOutputAttribRequest->Coord.Y + Buff->VirtualY) % Buff->MaxY;
+ Length = WriteConsoleOutputAttribRequest->Length;
Buffer = &Buff->Buffer[2 * (Y * Buff->MaxX + X) + 1];
- Attribute = ApiMessage->Data.WriteConsoleOutputAttribRequest.Attribute;
+ Attribute = WriteConsoleOutputAttribRequest->Attribute;
while (Length--)
{
*Buffer = (UCHAR)(*Attribute++);
if (Buff == Console->ActiveBuffer)
{
- ConioComputeUpdateRect(Buff, &UpdateRect, &ApiMessage->Data.WriteConsoleOutputAttribRequest.Coord,
- ApiMessage->Data.WriteConsoleOutputAttribRequest.Length);
+ ConioComputeUpdateRect(Buff, &UpdateRect, &WriteConsoleOutputAttribRequest->Coord,
+ WriteConsoleOutputAttribRequest->Length);
ConioDrawRegion(Console, &UpdateRect);
}
- ApiMessage->Data.WriteConsoleOutputAttribRequest.EndCoord.X = X;
- ApiMessage->Data.WriteConsoleOutputAttribRequest.EndCoord.Y = (Y + Buff->MaxY - Buff->VirtualY) % Buff->MaxY;
+ WriteConsoleOutputAttribRequest->EndCoord.X = X;
+ WriteConsoleOutputAttribRequest->EndCoord.Y = (Y + Buff->MaxY - Buff->VirtualY) % Buff->MaxY;
ConioUnlockScreenBuffer(Buff);
CSR_API(CsrFillOutputAttrib)
{
+ PCSRSS_FILL_OUTPUT_ATTRIB FillOutputAttribRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.FillOutputAttribRequest;
PCSRSS_SCREEN_BUFFER Buff;
PUCHAR Buffer;
NTSTATUS Status;
DPRINT("CsrFillOutputAttrib\n");
- Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.FillOutputAttribRequest.ConsoleHandle, &Buff, GENERIC_WRITE);
+ Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, FillOutputAttribRequest->ConsoleHandle, &Buff, GENERIC_WRITE);
if (! NT_SUCCESS(Status))
{
return Status;
}
Console = Buff->Header.Console;
- 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;
+ X = FillOutputAttribRequest->Coord.X;
+ Y = (FillOutputAttribRequest->Coord.Y + Buff->VirtualY) % Buff->MaxY;
+ Length = FillOutputAttribRequest->Length;
+ Attr = FillOutputAttribRequest->Attribute;
Buffer = &Buff->Buffer[(Y * Buff->MaxX * 2) + (X * 2) + 1];
while (Length--)
{
if (Buff == Console->ActiveBuffer)
{
- ConioComputeUpdateRect(Buff, &UpdateRect, &ApiMessage->Data.FillOutputAttribRequest.Coord,
- ApiMessage->Data.FillOutputAttribRequest.Length);
+ ConioComputeUpdateRect(Buff, &UpdateRect, &FillOutputAttribRequest->Coord,
+ FillOutputAttribRequest->Length);
ConioDrawRegion(Console, &UpdateRect);
}
CSR_API(SrvGetConsoleCursorInfo)
{
- PCSRSS_SCREEN_BUFFER Buff;
NTSTATUS Status;
+ PCSRSS_GET_CURSOR_INFO GetCursorInfoRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetCursorInfoRequest;
+ PCSRSS_SCREEN_BUFFER Buff;
DPRINT("SrvGetConsoleCursorInfo\n");
- Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.GetCursorInfoRequest.ConsoleHandle, &Buff, GENERIC_READ);
+ Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, GetCursorInfoRequest->ConsoleHandle, &Buff, GENERIC_READ);
if (! NT_SUCCESS(Status))
{
return Status;
}
- ApiMessage->Data.GetCursorInfoRequest.Info.bVisible = Buff->CursorInfo.bVisible;
- ApiMessage->Data.GetCursorInfoRequest.Info.dwSize = Buff->CursorInfo.dwSize;
+ GetCursorInfoRequest->Info.bVisible = Buff->CursorInfo.bVisible;
+ GetCursorInfoRequest->Info.dwSize = Buff->CursorInfo.dwSize;
ConioUnlockScreenBuffer(Buff);
return STATUS_SUCCESS;
CSR_API(SrvSetConsoleCursorInfo)
{
+ PCSRSS_SET_CURSOR_INFO SetCursorInfoRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetCursorInfoRequest;
PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff;
DWORD Size;
DPRINT("SrvSetConsoleCursorInfo\n");
- Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.SetCursorInfoRequest.ConsoleHandle, &Buff, GENERIC_WRITE);
+ Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, SetCursorInfoRequest->ConsoleHandle, &Buff, GENERIC_WRITE);
if (! NT_SUCCESS(Status))
{
return Status;
}
Console = Buff->Header.Console;
- Size = ApiMessage->Data.SetCursorInfoRequest.Info.dwSize;
- Visible = ApiMessage->Data.SetCursorInfoRequest.Info.bVisible;
+ Size = SetCursorInfoRequest->Info.dwSize;
+ Visible = SetCursorInfoRequest->Info.bVisible;
if (Size < 1)
{
Size = 1;
CSR_API(CsrSetTextAttrib)
{
NTSTATUS Status;
+ PCSRSS_SET_ATTRIB SetAttribRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetAttribRequest;
PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff;
DPRINT("CsrSetTextAttrib\n");
- Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.SetCursorRequest.ConsoleHandle, &Buff, GENERIC_WRITE);
+ Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, SetAttribRequest->ConsoleHandle, &Buff, GENERIC_WRITE);
if (! NT_SUCCESS(Status))
{
return Status;
}
Console = Buff->Header.Console;
- Buff->DefaultAttrib = ApiMessage->Data.SetAttribRequest.Attrib;
+ Buff->DefaultAttrib = SetAttribRequest->Attrib;
if (Buff == Console->ActiveBuffer)
{
if (! ConioUpdateScreenInfo(Console, Buff))
CSR_API(SrvCreateConsoleScreenBuffer)
{
+ PCSRSS_CREATE_SCREEN_BUFFER CreateScreenBufferRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.CreateScreenBufferRequest;
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff;
if (NT_SUCCESS(Status))
{
Status = Win32CsrInsertObject(ProcessData,
- &ApiMessage->Data.CreateScreenBufferRequest.OutputHandle,
+ &CreateScreenBufferRequest->OutputHandle,
&Buff->Header,
- ApiMessage->Data.CreateScreenBufferRequest.Access,
- ApiMessage->Data.CreateScreenBufferRequest.Inheritable,
- ApiMessage->Data.CreateScreenBufferRequest.ShareMode);
+ CreateScreenBufferRequest->Access,
+ CreateScreenBufferRequest->Inheritable,
+ CreateScreenBufferRequest->ShareMode);
}
}
else
CSR_API(SrvSetConsoleActiveScreenBuffer)
{
NTSTATUS Status;
+ PCSRSS_SET_SCREEN_BUFFER SetScreenBufferRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetScreenBufferRequest;
PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff;
DPRINT("SrvSetConsoleActiveScreenBuffer\n");
- Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.SetScreenBufferRequest.OutputHandle, &Buff, GENERIC_WRITE);
+ Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, SetScreenBufferRequest->OutputHandle, &Buff, GENERIC_WRITE);
if (! NT_SUCCESS(Status))
{
return Status;
CSR_API(SrvWriteConsoleOutput)
{
+ PCSRSS_WRITE_CONSOLE_OUTPUT WriteConsoleOutputRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.WriteConsoleOutputRequest;
SHORT i, X, Y, SizeX, SizeY;
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
PCSRSS_CONSOLE Console;
DPRINT("SrvWriteConsoleOutput\n");
Status = ConioLockScreenBuffer(ProcessData,
- ApiMessage->Data.WriteConsoleOutputRequest.ConsoleHandle,
+ WriteConsoleOutputRequest->ConsoleHandle,
&Buff,
GENERIC_WRITE);
if (! NT_SUCCESS(Status))
}
Console = Buff->Header.Console;
- BufferSize = ApiMessage->Data.WriteConsoleOutputRequest.BufferSize;
- BufferCoord = ApiMessage->Data.WriteConsoleOutputRequest.BufferCoord;
- CharInfo = ApiMessage->Data.WriteConsoleOutputRequest.CharInfo;
+ BufferSize = WriteConsoleOutputRequest->BufferSize;
+ BufferCoord = WriteConsoleOutputRequest->BufferCoord;
+ CharInfo = WriteConsoleOutputRequest->CharInfo;
if (!Win32CsrValidateBuffer(ProcessData, CharInfo,
BufferSize.X * BufferSize.Y, sizeof(CHAR_INFO)))
{
ConioUnlockScreenBuffer(Buff);
return STATUS_ACCESS_VIOLATION;
}
- WriteRegion = ApiMessage->Data.WriteConsoleOutputRequest.WriteRegion;
+ WriteRegion = WriteConsoleOutputRequest->WriteRegion;
SizeY = min(BufferSize.Y - BufferCoord.Y, ConioRectHeight(&WriteRegion));
SizeX = min(BufferSize.X - BufferCoord.X, ConioRectWidth(&WriteRegion));
for (X = WriteRegion.Left; X <= WriteRegion.Right; X++)
{
CHAR AsciiChar;
- if (ApiMessage->Data.WriteConsoleOutputRequest.Unicode)
+ if (WriteConsoleOutputRequest->Unicode)
{
ConsoleUnicodeCharToAnsiChar(Console, &AsciiChar, &CurCharInfo->Char.UnicodeChar);
}
ConioUnlockScreenBuffer(Buff);
- 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;
+ WriteConsoleOutputRequest->WriteRegion.Right = WriteRegion.Left + SizeX - 1;
+ WriteConsoleOutputRequest->WriteRegion.Bottom = WriteRegion.Top + SizeY - 1;
+ WriteConsoleOutputRequest->WriteRegion.Left = WriteRegion.Left;
+ WriteConsoleOutputRequest->WriteRegion.Top = WriteRegion.Top;
return STATUS_SUCCESS;
}
CSR_API(SrvScrollConsoleScreenBuffer)
{
+ PCSRSS_SCROLL_CONSOLE_SCREEN_BUFFER ScrollConsoleScreenBufferRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ScrollConsoleScreenBufferRequest;
PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff;
SMALL_RECT ScreenBuffer;
DPRINT("SrvScrollConsoleScreenBuffer\n");
- ConsoleHandle = ApiMessage->Data.ScrollConsoleScreenBufferRequest.ConsoleHandle;
- UseClipRectangle = ApiMessage->Data.ScrollConsoleScreenBufferRequest.UseClipRectangle;
- DestinationOrigin = ApiMessage->Data.ScrollConsoleScreenBufferRequest.DestinationOrigin;
- Fill = ApiMessage->Data.ScrollConsoleScreenBufferRequest.Fill;
+ ConsoleHandle = ScrollConsoleScreenBufferRequest->ConsoleHandle;
+ UseClipRectangle = ScrollConsoleScreenBufferRequest->UseClipRectangle;
+ DestinationOrigin = ScrollConsoleScreenBufferRequest->DestinationOrigin;
+ Fill = ScrollConsoleScreenBufferRequest->Fill;
Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ConsoleHandle, &Buff, GENERIC_WRITE);
if (! NT_SUCCESS(Status))
}
Console = Buff->Header.Console;
- ScrollRectangle = ApiMessage->Data.ScrollConsoleScreenBufferRequest.ScrollRectangle;
+ ScrollRectangle = ScrollConsoleScreenBufferRequest->ScrollRectangle;
/* Make sure source rectangle is inside the screen buffer */
ConioInitRect(&ScreenBuffer, 0, 0, Buff->MaxY - 1, Buff->MaxX - 1);
if (UseClipRectangle)
{
- ClipRectangle = ApiMessage->Data.ScrollConsoleScreenBufferRequest.ClipRectangle;
+ ClipRectangle = ScrollConsoleScreenBufferRequest->ClipRectangle;
if (!ConioGetIntersection(&ClipRectangle, &ClipRectangle, &ScreenBuffer))
{
ConioUnlockScreenBuffer(Buff);
DestinationOrigin.Y + ConioRectHeight(&SrcRegion) - 1,
DestinationOrigin.X + ConioRectWidth(&SrcRegion) - 1);
- if (ApiMessage->Data.ScrollConsoleScreenBufferRequest.Unicode)
+ if (ScrollConsoleScreenBufferRequest->Unicode)
ConsoleUnicodeCharToAnsiChar(Console, &FillChar, &Fill.Char.UnicodeChar);
else
FillChar = Fill.Char.AsciiChar;
CSR_API(CsrReadConsoleOutputChar)
{
NTSTATUS Status;
+ PCSRSS_READ_CONSOLE_OUTPUT_CHAR ReadConsoleOutputCharRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ReadConsoleOutputCharRequest;
PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff;
DWORD Xpos, Ypos;
DPRINT("CsrReadConsoleOutputChar\n");
- ReadBuffer = ApiMessage->Data.ReadConsoleOutputCharRequest.String;
+ ReadBuffer = ReadConsoleOutputCharRequest->String;
- CharSize = (ApiMessage->Data.ReadConsoleOutputCharRequest.Unicode ? sizeof(WCHAR) : sizeof(CHAR));
+ CharSize = (ReadConsoleOutputCharRequest->Unicode ? sizeof(WCHAR) : sizeof(CHAR));
- Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.ReadConsoleOutputCharRequest.ConsoleHandle, &Buff, GENERIC_READ);
+ Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ReadConsoleOutputCharRequest->ConsoleHandle, &Buff, GENERIC_READ);
if (! NT_SUCCESS(Status))
{
return Status;
}
Console = Buff->Header.Console;
- Xpos = ApiMessage->Data.ReadConsoleOutputCharRequest.ReadCoord.X;
- Ypos = (ApiMessage->Data.ReadConsoleOutputCharRequest.ReadCoord.Y + Buff->VirtualY) % Buff->MaxY;
+ Xpos = ReadConsoleOutputCharRequest->ReadCoord.X;
+ Ypos = (ReadConsoleOutputCharRequest->ReadCoord.Y + Buff->VirtualY) % Buff->MaxY;
- for (i = 0; i < ApiMessage->Data.ReadConsoleOutputCharRequest.NumCharsToRead; ++i)
+ for (i = 0; i < ReadConsoleOutputCharRequest->NumCharsToRead; ++i)
{
Char = Buff->Buffer[(Xpos * 2) + (Ypos * 2 * Buff->MaxX)];
- if(ApiMessage->Data.ReadConsoleOutputCharRequest.Unicode)
+ if(ReadConsoleOutputCharRequest->Unicode)
{
ConsoleAnsiCharToUnicodeChar(Console, (WCHAR*)ReadBuffer, &Char);
ReadBuffer += sizeof(WCHAR);
}
*ReadBuffer = 0;
- ApiMessage->Data.ReadConsoleOutputCharRequest.EndCoord.X = Xpos;
- ApiMessage->Data.ReadConsoleOutputCharRequest.EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY;
+ ReadConsoleOutputCharRequest->EndCoord.X = Xpos;
+ ReadConsoleOutputCharRequest->EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY;
ConioUnlockScreenBuffer(Buff);
- 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))
+ ReadConsoleOutputCharRequest->CharsRead = (DWORD)((ULONG_PTR)ReadBuffer - (ULONG_PTR)ReadConsoleOutputCharRequest->String) / CharSize;
+ if (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;
CSR_API(CsrReadConsoleOutputAttrib)
{
NTSTATUS Status;
+ PCSRSS_READ_CONSOLE_OUTPUT_ATTRIB ReadConsoleOutputAttribRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ReadConsoleOutputAttribRequest;
PCSRSS_SCREEN_BUFFER Buff;
DWORD Xpos, Ypos;
PWORD ReadBuffer;
DPRINT("CsrReadConsoleOutputAttrib\n");
- ReadBuffer = ApiMessage->Data.ReadConsoleOutputAttribRequest.Attribute;
+ ReadBuffer = ReadConsoleOutputAttribRequest->Attribute;
- Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.ReadConsoleOutputAttribRequest.ConsoleHandle, &Buff, GENERIC_READ);
+ Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ReadConsoleOutputAttribRequest->ConsoleHandle, &Buff, GENERIC_READ);
if (! NT_SUCCESS(Status))
{
return Status;
}
- Xpos = ApiMessage->Data.ReadConsoleOutputAttribRequest.ReadCoord.X;
- Ypos = (ApiMessage->Data.ReadConsoleOutputAttribRequest.ReadCoord.Y + Buff->VirtualY) % Buff->MaxY;
+ Xpos = ReadConsoleOutputAttribRequest->ReadCoord.X;
+ Ypos = (ReadConsoleOutputAttribRequest->ReadCoord.Y + Buff->VirtualY) % Buff->MaxY;
- for (i = 0; i < ApiMessage->Data.ReadConsoleOutputAttribRequest.NumAttrsToRead; ++i)
+ for (i = 0; i < ReadConsoleOutputAttribRequest->NumAttrsToRead; ++i)
{
*ReadBuffer = Buff->Buffer[(Xpos * 2) + (Ypos * 2 * Buff->MaxX) + 1];
*ReadBuffer = 0;
- ApiMessage->Data.ReadConsoleOutputAttribRequest.EndCoord.X = Xpos;
- ApiMessage->Data.ReadConsoleOutputAttribRequest.EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY;
+ ReadConsoleOutputAttribRequest->EndCoord.X = Xpos;
+ ReadConsoleOutputAttribRequest->EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY;
ConioUnlockScreenBuffer(Buff);
CurrentLength = CSR_API_MESSAGE_HEADER_SIZE(CSRSS_READ_CONSOLE_OUTPUT_ATTRIB)
- + ApiMessage->Data.ReadConsoleOutputAttribRequest.NumAttrsToRead * sizeof(WORD);
+ + ReadConsoleOutputAttribRequest->NumAttrsToRead * sizeof(WORD);
if (CurrentLength > sizeof(CSR_API_MESSAGE))
{
DPRINT1("Length won't fit in message\n");
CSR_API(SrvReadConsoleOutput)
{
+ PCSRSS_READ_CONSOLE_OUTPUT ReadConsoleOutputRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ReadConsoleOutputRequest;
PCSR_PROCESS ProcessData = CsrGetClientThread()->Process;
PCHAR_INFO CharInfo;
PCHAR_INFO CurCharInfo;
DPRINT("SrvReadConsoleOutput\n");
- Status = ConioLockScreenBuffer(ProcessData, ApiMessage->Data.ReadConsoleOutputRequest.ConsoleHandle, &Buff, GENERIC_READ);
+ Status = ConioLockScreenBuffer(ProcessData, ReadConsoleOutputRequest->ConsoleHandle, &Buff, GENERIC_READ);
if (! NT_SUCCESS(Status))
{
return Status;
}
- CharInfo = ApiMessage->Data.ReadConsoleOutputRequest.CharInfo;
- ReadRegion = ApiMessage->Data.ReadConsoleOutputRequest.ReadRegion;
- BufferSize = ApiMessage->Data.ReadConsoleOutputRequest.BufferSize;
- BufferCoord = ApiMessage->Data.ReadConsoleOutputRequest.BufferCoord;
+ CharInfo = ReadConsoleOutputRequest->CharInfo;
+ ReadRegion = ReadConsoleOutputRequest->ReadRegion;
+ BufferSize = ReadConsoleOutputRequest->BufferSize;
+ BufferCoord = ReadConsoleOutputRequest->BufferCoord;
/* FIXME: Is this correct? */
CodePage = ProcessData->Console->OutputCodePage;
Ptr = ConioCoordToPointer(Buff, ReadRegion.Left, Y);
for (X = ReadRegion.Left; X < ReadRegion.Right; ++X)
{
- if (ApiMessage->Data.ReadConsoleOutputRequest.Unicode)
+ if (ReadConsoleOutputRequest->Unicode)
{
MultiByteToWideChar(CodePage, 0,
(PCHAR)Ptr++, 1,
ConioUnlockScreenBuffer(Buff);
- 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;
+ ReadConsoleOutputRequest->ReadRegion.Right = ReadRegion.Left + SizeX - 1;
+ ReadConsoleOutputRequest->ReadRegion.Bottom = ReadRegion.Top + SizeY - 1;
+ ReadConsoleOutputRequest->ReadRegion.Left = ReadRegion.Left;
+ ReadConsoleOutputRequest->ReadRegion.Top = ReadRegion.Top;
return STATUS_SUCCESS;
}
CSR_API(SrvSetConsoleScreenBufferSize)
{
NTSTATUS Status;
+ PCSRSS_SET_SCREEN_BUFFER_SIZE SetScreenBufferSize = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetScreenBufferSize;
PCSRSS_CONSOLE Console;
PCSRSS_SCREEN_BUFFER Buff;
- Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, ApiMessage->Data.SetScreenBufferSize.OutputHandle, &Buff, GENERIC_WRITE);
+ Status = ConioLockScreenBuffer(CsrGetClientThread()->Process, SetScreenBufferSize->OutputHandle, &Buff, GENERIC_WRITE);
if (!NT_SUCCESS(Status))
{
return Status;
}
Console = Buff->Header.Console;
- Status = ConioResizeBuffer(Console, Buff, ApiMessage->Data.SetScreenBufferSize.Size);
+ Status = ConioResizeBuffer(Console, Buff, SetScreenBufferSize->Size);
ConioUnlockScreenBuffer(Buff);
return Status;