22 #define ConioRectHeight(Rect) \ 23 (((Rect)->Top) > ((Rect)->Bottom) ? 0 : ((Rect)->Bottom) - ((Rect)->Top) + 1) 24 #define ConioRectWidth(Rect) \ 25 (((Rect)->Left) > ((Rect)->Right) ? 0 : ((Rect)->Right) - ((Rect)->Left) + 1) 47 ULONG CharSize, SizeBytes;
49 DPRINT(
"IntReadConsole\n");
54 ReadConsoleRequest->
Unicode = bUnicode;
69 DPRINT(
"IntReadConsole(ExeName = %wZ)\n", &ExeName);
74 CharSize = (bUnicode ?
sizeof(
WCHAR) :
sizeof(
CHAR));
78 ReadConsoleRequest->
NumBytes = SizeBytes;
86 if (SizeBytes <=
sizeof(ReadConsoleRequest->
StaticBuffer))
95 if (CaptureBuffer ==
NULL)
97 DPRINT1(
"CsrAllocateCaptureBuffer failed!\n");
180 sizeof(*ReadConsoleRequest));
190 *lpNumberOfCharsRead = ReadConsoleRequest->
NumBytes / CharSize;
196 ReadConsoleRequest->
Buffer,
266 GetInputRequest->
Unicode = bUnicode;
285 if (CaptureBuffer ==
NULL)
287 DPRINT1(
"CsrAllocateCaptureBuffer failed!\n");
302 sizeof(*GetInputRequest));
359 ReadOutputRequest->
Unicode = bUnicode;
371 lpReadRegion->Right = lpReadRegion->Left +
SizeX - 1;
372 lpReadRegion->Bottom = lpReadRegion->Top +
SizeY - 1;
374 ReadOutputRequest->
ReadRegion = *lpReadRegion;
403 if (CaptureBuffer ==
NULL)
405 DPRINT1(
"CsrAllocateCaptureBuffer failed with size %ld!\n",
Size);
420 sizeof(*ReadOutputRequest));
428 *lpReadRegion = ReadOutputRequest->
ReadRegion;
442 for (
y = 0,
Y = ReadOutputRequest->
ReadRegion.
Top; Y <= ReadOutputRequest->ReadRegion.Bottom; ++
y, ++
Y)
450 *(
lpBuffer + (
y + dwBufferCoord.Y) * dwBufferSize.X + (
x + dwBufferCoord.X)) =
489 ULONG CodeSize, SizeBytes;
491 DPRINT(
"IntReadConsoleOutputCode\n");
504 ReadOutputCodeRequest->
Coord = dwReadCoord;
508 ReadOutputCodeRequest->
CodeType = CodeType;
523 SizeBytes =
nLength * CodeSize;
540 if (CaptureBuffer ==
NULL)
542 DPRINT1(
"CsrAllocateCaptureBuffer failed!\n");
557 sizeof(*ReadOutputCodeRequest));
565 *lpNumberOfCodesRead = ReadOutputCodeRequest->
NumCodes;
570 ReadOutputCodeRequest->
pCode,
571 ReadOutputCodeRequest->
NumCodes * CodeSize);
601 IN DWORD nNumberOfCharsToWrite,
610 ULONG CharSize, SizeBytes;
612 DPRINT(
"IntWriteConsole\n");
617 WriteConsoleRequest->
Unicode = bUnicode;
624 CharSize = (bUnicode ?
sizeof(
WCHAR) :
sizeof(
CHAR));
625 SizeBytes = nNumberOfCharsToWrite * CharSize;
627 WriteConsoleRequest->
NumBytes = SizeBytes;
635 if (SizeBytes <=
sizeof(WriteConsoleRequest->
StaticBuffer))
658 if (CaptureBuffer ==
NULL)
660 DPRINT1(
"CsrAllocateCaptureBuffer failed!\n");
677 sizeof(*WriteConsoleRequest));
690 *lpNumberOfCharsWritten = WriteConsoleRequest->
NumBytes / CharSize;
723 DPRINT(
"IntWriteConsoleInput: %lx %p\n",
nLength, lpNumberOfEventsWritten);
729 WriteInputRequest->
Unicode = bUnicode;
762 if (CaptureBuffer ==
NULL)
764 DPRINT1(
"CsrAllocateCaptureBuffer failed!\n");
780 sizeof(*WriteInputRequest));
792 *lpNumberOfEventsWritten = WriteInputRequest->
NumRecords;
829 WriteOutputRequest->
Unicode = bUnicode;
841 lpWriteRegion->Right = lpWriteRegion->Left +
SizeX - 1;
842 lpWriteRegion->Bottom = lpWriteRegion->Top +
SizeY - 1;
891 DPRINT1(
"CsrAllocateCaptureBuffer failed with size %ld, let's use local heap buffer...\n",
Size);
899 DPRINT1(
"Failed to allocate heap buffer with size %ld!\n",
Size);
919 for (
y = 0,
Y = WriteOutputRequest->
WriteRegion.
Top; Y <= WriteOutputRequest->WriteRegion.Bottom; ++
y, ++
Y)
922 lpBuffer + (
y + dwBufferCoord.Y) * dwBufferSize.X + dwBufferCoord.X,
928 *(
lpBuffer + (
y + dwBufferCoord.Y) * dwBufferSize.X + (
x + dwBufferCoord.X));
944 sizeof(*WriteOutputRequest));
994 ULONG CodeSize, SizeBytes;
1004 DPRINT(
"IntWriteConsoleOutputCode\n");
1009 WriteOutputCodeRequest->
Coord = dwWriteCoord;
1013 WriteOutputCodeRequest->
CodeType = CodeType;
1028 SizeBytes =
nLength * CodeSize;
1058 if (CaptureBuffer ==
NULL)
1060 DPRINT1(
"CsrAllocateCaptureBuffer failed!\n");
1076 sizeof(*WriteOutputCodeRequest));
1087 *lpNumberOfCodesWritten = WriteOutputCodeRequest->
NumCodes;
1117 DPRINT(
"IntFillConsoleOutputCode\n");
1130 FillOutputRequest->
WriteCoord = dwWriteCoord;
1131 FillOutputRequest->
CodeType = CodeType;
1139 sizeof(*FillOutputRequest));
1147 *lpNumberOfCodesWritten = FillOutputRequest->
NumCodes;
1185 lpNumberOfCharsRead,
1206 lpNumberOfCharsRead,
1393 lpNumberOfCharsRead);
1414 lpNumberOfCharsRead);
1435 lpNumberOfAttrsRead);
1451 IN DWORD nNumberOfCharsToWrite,
1457 nNumberOfCharsToWrite,
1458 lpNumberOfCharsWritten,
1472 IN DWORD nNumberOfCharsToWrite,
1478 nNumberOfCharsToWrite,
1479 lpNumberOfCharsWritten,
1499 lpNumberOfEventsWritten,
1519 lpNumberOfEventsWritten,
1539 lpNumberOfEventsWritten,
1559 lpNumberOfEventsWritten,
1624 lpNumberOfCharsWritten);
1645 lpNumberOfCharsWritten);
1666 lpNumberOfAttrsWritten);
1683 Code.UnicodeChar = cCharacter;
1689 lpNumberOfCharsWritten);
1703 LPDWORD lpNumberOfCharsWritten)
1706 Code.AsciiChar = cCharacter;
1712 lpNumberOfCharsWritten);
1729 Code.Attribute = wAttribute;
1735 lpNumberOfAttrsWritten);
#define ERROR_INVALID_PARAMETER
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleOutputA(IN HANDLE hConsoleOutput, IN CONST CHAR_INFO *lpBuffer, IN COORD dwBufferSize, IN COORD dwBufferCoord, IN OUT PSMALL_RECT lpWriteRegion)
VOID NTAPI CsrFreeCaptureBuffer(IN PCSR_CAPTURE_BUFFER CaptureBuffer)
#define RTL_FIELD_SIZE(type, field)
BOOL WINAPI DECLSPEC_HOTPATCH FillConsoleOutputAttribute(IN HANDLE hConsoleOutput, IN WORD wAttribute, IN DWORD nLength, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfAttrsWritten)
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleInputExW(IN HANDLE hConsoleInput, OUT PINPUT_RECORD lpBuffer, IN DWORD nLength, OUT LPDWORD lpNumberOfEventsRead, IN WORD wFlags)
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleOutputCharacterA(IN HANDLE hConsoleOutput, IN LPCSTR lpCharacter, IN DWORD nLength, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfCharsWritten)
static BOOL IntGetConsoleInput(IN HANDLE hConsoleInput, OUT PINPUT_RECORD lpBuffer, IN DWORD nLength, OUT LPDWORD lpNumberOfEventsRead, IN WORD wFlags, IN BOOLEAN bUnicode)
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleOutputW(IN HANDLE hConsoleOutput, IN CONST CHAR_INFO *lpBuffer, IN COORD dwBufferSize, IN COORD dwBufferCoord, IN OUT PSMALL_RECT lpWriteRegion)
_In_ DWORD _Out_ LPDWORD lpNumberOfEventsRead
ULONG NTAPI CsrAllocateMessagePointer(IN OUT PCSR_CAPTURE_BUFFER CaptureBuffer, IN ULONG MessageLength, OUT PVOID *CapturedData)
PCSR_CAPTURE_BUFFER NTAPI CsrAllocateCaptureBuffer(IN ULONG ArgumentCount, IN ULONG BufferSize)
BOOL WINAPI DECLSPEC_HOTPATCH FillConsoleOutputCharacterA(IN HANDLE hConsoleOutput, IN CHAR cCharacter, IN DWORD nLength, IN COORD dwWriteCoord, LPDWORD lpNumberOfCharsWritten)
USHORT GetCurrentExeName(OUT PWCHAR ExeName, IN USHORT BufferSize)
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleW(IN HANDLE hConsoleOutput, IN CONST VOID *lpBuffer, IN DWORD nNumberOfCharsToWrite, OUT LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved)
NTSTATUS NTAPI CsrClientCallServer(IN OUT PCSR_API_MESSAGE ApiMessage, IN OUT PCSR_CAPTURE_BUFFER CaptureBuffer OPTIONAL, IN CSR_API_NUMBER ApiNumber, IN ULONG DataLength)
static BOOL IntWriteConsoleOutputCode(IN HANDLE hConsoleOutput, IN CODE_TYPE CodeType, IN CONST VOID *pCode, IN DWORD nLength, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfCodesWritten)
#define ERROR_INVALID_HANDLE
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleOutputW(IN HANDLE hConsoleOutput, OUT PCHAR_INFO lpBuffer, IN COORD dwBufferSize, IN COORD dwBufferCoord, IN OUT PSMALL_RECT lpReadRegion)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
#define ERROR_NOT_ENOUGH_MEMORY
GLint GLint GLint GLint GLint x
static BOOL IntWriteConsole(IN HANDLE hConsoleOutput, IN PVOID lpBuffer, IN DWORD nNumberOfCharsToWrite, OUT LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved, IN BOOLEAN bUnicode)
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleInputVDMW(IN HANDLE hConsoleInput, IN CONST INPUT_RECORD *lpBuffer, IN DWORD nLength, OUT LPDWORD lpNumberOfEventsWritten)
#define ERROR_OPERATION_ABORTED
CONSOLE_WRITEOUTPUT WriteOutputRequest
VOID NTAPI CsrCaptureMessageBuffer(IN OUT PCSR_CAPTURE_BUFFER CaptureBuffer, IN PVOID MessageBuffer OPTIONAL, IN ULONG MessageLength, OUT PVOID *CapturedData)
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleA(IN HANDLE hConsoleOutput, IN CONST VOID *lpBuffer, IN DWORD nNumberOfCharsToWrite, OUT LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved)
CONSOLE_READOUTPUT ReadOutputRequest
#define ConioRectWidth(Rect)
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleOutputA(IN HANDLE hConsoleOutput, OUT PCHAR_INFO lpBuffer, IN COORD dwBufferSize, IN COORD dwBufferCoord, IN OUT PSMALL_RECT lpReadRegion)
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
static BOOL IntReadConsole(IN HANDLE hConsoleInput, OUT PVOID lpBuffer, IN DWORD nNumberOfCharsToRead, OUT LPDWORD lpNumberOfCharsRead, IN PCONSOLE_READCONSOLE_CONTROL pInputControl OPTIONAL, IN BOOLEAN bUnicode)
#define EXCEPTION_EXECUTE_HANDLER
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleInputW(IN HANDLE hConsoleInput, IN CONST INPUT_RECORD *lpBuffer, IN DWORD nLength, OUT LPDWORD lpNumberOfEventsWritten)
struct _CHAR_INFO CHAR_INFO
static BOOL IntReadConsoleOutputCode(IN HANDLE hConsoleOutput, IN CODE_TYPE CodeType, OUT PVOID pCode, IN DWORD nLength, IN COORD dwReadCoord, OUT LPDWORD lpNumberOfCodesRead)
#define ConioRectHeight(Rect)
_In_ DWORD nNumberOfCharsToRead
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleInputA(IN HANDLE hConsoleInput, IN CONST INPUT_RECORD *lpBuffer, IN DWORD nLength, OUT LPDWORD lpNumberOfEventsWritten)
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleOutputCharacterA(IN HANDLE hConsoleOutput, OUT LPSTR lpCharacter, IN DWORD nLength, IN COORD dwReadCoord, OUT LPDWORD lpNumberOfCharsRead)
DWORD BaseSetLastNTError(IN NTSTATUS Status)
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleInputA(IN HANDLE hConsoleInput, OUT PINPUT_RECORD lpBuffer, IN DWORD nLength, OUT LPDWORD lpNumberOfEventsRead)
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleInputExA(IN HANDLE hConsoleInput, OUT PINPUT_RECORD lpBuffer, IN DWORD nLength, OUT LPDWORD lpNumberOfEventsRead, IN WORD wFlags)
#define CSR_CREATE_API_NUMBER(ServerId, ApiId)
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
#define DECLSPEC_HOTPATCH
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleW(IN HANDLE hConsoleInput, OUT LPVOID lpBuffer, IN DWORD nNumberOfCharsToRead, OUT LPDWORD lpNumberOfCharsRead, IN PCONSOLE_READCONSOLE_CONTROL pInputControl OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH PeekConsoleInputW(IN HANDLE hConsoleInput, OUT PINPUT_RECORD lpBuffer, IN DWORD nLength, OUT LPDWORD lpNumberOfEventsRead)
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleInputVDMA(IN HANDLE hConsoleInput, IN CONST INPUT_RECORD *lpBuffer, IN DWORD nLength, OUT LPDWORD lpNumberOfEventsWritten)
#define _SEH2_YIELD(STMT_)
static BOOL IntFillConsoleOutputCode(IN HANDLE hConsoleOutput, IN CODE_TYPE CodeType, IN CODE_ELEMENT Code, IN DWORD nLength, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfCodesWritten)
CONSOLE_GETINPUT GetInputRequest
#define NT_SUCCESS(StatCode)
NTSTATUS NTAPI NtYieldExecution(VOID)
CONSOLE_READOUTPUTCODE ReadOutputCodeRequest
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleOutputAttribute(IN HANDLE hConsoleOutput, OUT LPWORD lpAttribute, IN DWORD nLength, IN COORD dwReadCoord, OUT LPDWORD lpNumberOfAttrsRead)
CHAR CodeStaticBuffer[80]
static BOOL IntWriteConsoleInput(IN HANDLE hConsoleInput, IN PINPUT_RECORD lpBuffer, IN DWORD nLength, OUT LPDWORD lpNumberOfEventsWritten, IN BOOLEAN bUnicode, IN BOOLEAN bAppendToEnd)
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleA(IN HANDLE hConsoleInput, OUT LPVOID lpBuffer, IN DWORD nNumberOfCharsToRead, OUT LPDWORD lpNumberOfCharsRead, IN PCONSOLE_READCONSOLE_CONTROL pInputControl OPTIONAL)
CONSOLE_FILLOUTPUTCODE FillOutputRequest
#define IsConsoleHandle(h)
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleOutputCharacterW(IN HANDLE hConsoleOutput, IN LPCWSTR lpCharacter, IN DWORD nLength, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfCharsWritten)
CONSOLE_READCONSOLE ReadConsoleRequest
CONSOLE_WRITECONSOLE WriteConsoleRequest
#define ERROR_INVALID_ACCESS
IN PVOID IN PVOID IN USHORT IN USHORT Size
static BOOL IntWriteConsoleOutput(IN HANDLE hConsoleOutput, IN CONST CHAR_INFO *lpBuffer, IN COORD dwBufferSize, IN COORD dwBufferCoord, IN OUT PSMALL_RECT lpWriteRegion, IN BOOLEAN bUnicode)
#define CONSOLE_READ_KEEPEVENT
BOOLEAN UsingStaticBuffer
_In_ DWORD _Out_ _In_ WORD wFlags
_In_ DWORD _Out_ _In_opt_ PCONSOLE_READCONSOLE_CONTROL pInputControl
BOOL WINAPI DECLSPEC_HOTPATCH PeekConsoleInputA(IN HANDLE hConsoleInput, OUT PINPUT_RECORD lpBuffer, IN DWORD nLength, OUT LPDWORD lpNumberOfEventsRead)
#define CONSOLE_READ_CONTINUE
GLint GLint GLint GLint GLint GLint y
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleOutputCharacterW(IN HANDLE hConsoleOutput, OUT LPWSTR lpCharacter, IN DWORD nLength, IN COORD dwReadCoord, OUT LPDWORD lpNumberOfCharsRead)
union _CONSOLE_API_MESSAGE::@3413 Data
CONSOLE_WRITEINPUT WriteInputRequest
#define _SEH2_EXCEPT(...)
BOOL WINAPI DECLSPEC_HOTPATCH WriteConsoleOutputAttribute(IN HANDLE hConsoleOutput, IN CONST WORD *lpAttribute, IN DWORD nLength, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfAttrsWritten)
CONSOLE_WRITEOUTPUTCODE WriteOutputCodeRequest
static BOOL IntReadConsoleOutput(IN HANDLE hConsoleOutput, OUT PCHAR_INFO lpBuffer, IN COORD dwBufferSize, IN COORD dwBufferCoord, IN OUT PSMALL_RECT lpReadRegion, IN BOOLEAN bUnicode)
enum _CODE_TYPE CODE_TYPE
BOOL WINAPI DECLSPEC_HOTPATCH ReadConsoleInputW(IN HANDLE hConsoleInput, OUT PINPUT_RECORD lpBuffer, IN DWORD nLength, OUT LPDWORD lpNumberOfEventsRead)
BOOL WINAPI DECLSPEC_HOTPATCH FillConsoleOutputCharacterW(IN HANDLE hConsoleOutput, IN WCHAR cCharacter, IN DWORD nLength, IN COORD dwWriteCoord, OUT LPDWORD lpNumberOfCharsWritten)
#define CONSRV_SERVERDLL_INDEX
struct _INPUT_RECORD INPUT_RECORD
PULONG MinorVersion OPTIONAL