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;
441 for (
y = 0,
Y = ReadOutputRequest->
ReadRegion.
Top; Y <= ReadOutputRequest->ReadRegion.Bottom; ++
y, ++
Y)
449 *(
lpBuffer + (
y + dwBufferCoord.Y) * dwBufferSize.X + (
x + dwBufferCoord.X)) =
488 ULONG CodeSize, SizeBytes;
490 DPRINT(
"IntReadConsoleOutputCode\n");
503 ReadOutputCodeRequest->
Coord = dwReadCoord;
507 ReadOutputCodeRequest->
CodeType = CodeType;
522 SizeBytes =
nLength * CodeSize;
539 if (CaptureBuffer ==
NULL)
541 DPRINT1(
"CsrAllocateCaptureBuffer failed!\n");
556 sizeof(*ReadOutputCodeRequest));
564 *lpNumberOfCodesRead = ReadOutputCodeRequest->
NumCodes;
569 ReadOutputCodeRequest->
pCode,
570 ReadOutputCodeRequest->
NumCodes * CodeSize);
600 IN DWORD nNumberOfCharsToWrite,
609 ULONG CharSize, SizeBytes;
611 DPRINT(
"IntWriteConsole\n");
616 WriteConsoleRequest->
Unicode = bUnicode;
623 CharSize = (bUnicode ?
sizeof(
WCHAR) :
sizeof(
CHAR));
624 SizeBytes = nNumberOfCharsToWrite * CharSize;
626 WriteConsoleRequest->
NumBytes = SizeBytes;
634 if (SizeBytes <=
sizeof(WriteConsoleRequest->
StaticBuffer))
657 if (CaptureBuffer ==
NULL)
659 DPRINT1(
"CsrAllocateCaptureBuffer failed!\n");
676 sizeof(*WriteConsoleRequest));
689 *lpNumberOfCharsWritten = WriteConsoleRequest->
NumBytes / CharSize;
722 DPRINT(
"IntWriteConsoleInput: %lx %p\n",
nLength, lpNumberOfEventsWritten);
728 WriteInputRequest->
Unicode = bUnicode;
761 if (CaptureBuffer ==
NULL)
763 DPRINT1(
"CsrAllocateCaptureBuffer failed!\n");
779 sizeof(*WriteInputRequest));
791 *lpNumberOfEventsWritten = WriteInputRequest->
NumRecords;
828 WriteOutputRequest->
Unicode = bUnicode;
840 lpWriteRegion->Right = lpWriteRegion->Left +
SizeX - 1;
841 lpWriteRegion->Bottom = lpWriteRegion->Top +
SizeY - 1;
890 DPRINT1(
"CsrAllocateCaptureBuffer failed with size %ld, let's use local heap buffer...\n",
Size);
898 DPRINT1(
"Failed to allocate heap buffer with size %ld!\n",
Size);
917 for (
y = 0,
Y = WriteOutputRequest->
WriteRegion.
Top; Y <= WriteOutputRequest->WriteRegion.Bottom; ++
y, ++
Y)
920 lpBuffer + (
y + dwBufferCoord.Y) * dwBufferSize.X + dwBufferCoord.X,
926 *(
lpBuffer + (
y + dwBufferCoord.Y) * dwBufferSize.X + (
x + dwBufferCoord.X));
942 sizeof(*WriteOutputRequest));
992 ULONG CodeSize, SizeBytes;
1002 DPRINT(
"IntWriteConsoleOutputCode\n");
1007 WriteOutputCodeRequest->
Coord = dwWriteCoord;
1011 WriteOutputCodeRequest->
CodeType = CodeType;
1026 SizeBytes =
nLength * CodeSize;
1056 if (CaptureBuffer ==
NULL)
1058 DPRINT1(
"CsrAllocateCaptureBuffer failed!\n");
1074 sizeof(*WriteOutputCodeRequest));
1085 *lpNumberOfCodesWritten = WriteOutputCodeRequest->
NumCodes;
1115 DPRINT(
"IntFillConsoleOutputCode\n");
1128 FillOutputRequest->
WriteCoord = dwWriteCoord;
1129 FillOutputRequest->
CodeType = CodeType;
1137 sizeof(*FillOutputRequest));
1145 *lpNumberOfCodesWritten = FillOutputRequest->
NumCodes;
1183 lpNumberOfCharsRead,
1204 lpNumberOfCharsRead,
1391 lpNumberOfCharsRead);
1412 lpNumberOfCharsRead);
1433 lpNumberOfAttrsRead);
1449 IN DWORD nNumberOfCharsToWrite,
1455 nNumberOfCharsToWrite,
1456 lpNumberOfCharsWritten,
1470 IN DWORD nNumberOfCharsToWrite,
1476 nNumberOfCharsToWrite,
1477 lpNumberOfCharsWritten,
1497 lpNumberOfEventsWritten,
1517 lpNumberOfEventsWritten,
1537 lpNumberOfEventsWritten,
1557 lpNumberOfEventsWritten,
1622 lpNumberOfCharsWritten);
1643 lpNumberOfCharsWritten);
1664 lpNumberOfAttrsWritten);
1681 Code.UnicodeChar = cCharacter;
1687 lpNumberOfCharsWritten);
1701 LPDWORD lpNumberOfCharsWritten)
1704 Code.AsciiChar = cCharacter;
1710 lpNumberOfCharsWritten);
1727 Code.Attribute = wAttribute;
1733 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)
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
IN PVOID IN PVOID IN USHORT IN USHORT Size
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
_In_ UCHAR _In_ UCHAR _In_ ULONG Code
#define ERROR_INVALID_ACCESS
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)
CONSOLE_WRITEINPUT WriteInputRequest
#define RtlCopyMemory(Destination, Source, Length)
#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)
union _CONSOLE_API_MESSAGE::@3490 Data
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