// Some names are also deduced from the subsystems/win32/csrss/csrsrv/server.c ones.
typedef enum _CONSRV_API_NUMBER
{
- // ConsolepOpenConsole = CONSRV_FIRST_API_NUMBER,
- ConsolepGetConsoleInput = CONSRV_FIRST_API_NUMBER,
+ ConsolepOpenConsole = CONSRV_FIRST_API_NUMBER,
+ ConsolepGetConsoleInput,
ConsolepWriteConsoleInput,
ConsolepReadConsoleOutput,
ConsolepWriteConsoleOutput,
ConsolepReadConsoleOutputString,
- // ConsolepWriteConsoleOutputString,
- // ConsolepFillConsoleOutput,
+ ConsolepWriteConsoleOutputString,
+ ConsolepFillConsoleOutput,
ConsolepGetMode,
// ConsolepGetNumberOfFonts,
ConsolepGetNumberOfInputEvents,
ConsolepFlushInputBuffer,
// ConsolepGetLargestWindowSize,
ConsolepSetScreenBufferSize,
- // ConsolepSetCursorPosition,
+ ConsolepSetCursorPosition,
ConsolepSetCursorInfo,
// ConsolepSetWindowInfo,
ConsolepScrollScreenBuffer,
- // ConsolepSetTextAttribute,
+ ConsolepSetTextAttribute,
// ConsolepSetFont,
ConsolepSetIcon,
ConsolepReadConsole,
ConsolepWriteConsole,
ConsolepDuplicateHandle,
- /**/ ConsolepGetHandleInformation /**/,
+ // ConsolepGetHandleInformation,
// ConsolepSetHandleInformation,
ConsolepCloseHandle,
ConsolepVerifyIoHandle,
ConsolepCreateScreenBuffer,
// ConsolepInvalidateBitMapRect,
// ConsolepVDMOperation,
- ConsolepSetCursor,
+ // ConsolepSetCursor,
// ConsolepShowCursor,
// ConsolepMenuControl,
// ConsolepSetPalette,
} CONSRV_API_NUMBER, *PCONSRV_API_NUMBER;
-#define CSR_API_MESSAGE_HEADER_SIZE(Type) (FIELD_OFFSET(CSR_API_MESSAGE, Data) + sizeof(Type))
-#define CSRSS_MAX_WRITE_CONSOLE (LPC_MAX_DATA_LENGTH - CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE))
-#define CSRSS_MAX_WRITE_CONSOLE_OUTPUT_CHAR (LPC_MAX_DATA_LENGTH - CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE_OUTPUT_CHAR))
-#define CSRSS_MAX_WRITE_CONSOLE_OUTPUT_ATTRIB (LPC_MAX_DATA_LENGTH - CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB))
-#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))
+typedef struct _CONSOLE_CONNECTION_INFO
+{
+ ULONG Dummy;
+} CONSOLE_CONNECTION_INFO, *PCONSOLE_CONNECTION_INFO;
+
-#define CONSOLE_INPUT_MODE_VALID (0x0f)
-#define CONSOLE_OUTPUT_MODE_VALID (0x03)
+#define CONSOLE_INPUT_MODE_VALID 0x0f
+#define CONSOLE_OUTPUT_MODE_VALID 0x03
typedef struct
{
USHORT nMaxIds;
- PDWORD ProcessId;
- ULONG nProcessIdsTotal;
+ ULONG nProcessIdsTotal;
+ PDWORD pProcessIds;
} CSRSS_GET_PROCESS_LIST, *PCSRSS_GET_PROCESS_LIST;
typedef struct
BOOL Unicode;
ULONG NrCharactersToWrite;
ULONG NrCharactersWritten;
- HANDLE UnpauseEvent;
- BYTE Buffer[0];
+
+ ULONG BufferSize;
+ PVOID Buffer;
} CSRSS_WRITE_CONSOLE, *PCSRSS_WRITE_CONSOLE;
typedef struct
BOOL Unicode;
WORD NrCharactersToRead;
WORD NrCharactersRead;
- HANDLE EventHandle;
-
- PVOID Buffer;
- ULONG BufferSize;
UNICODE_STRING ExeName;
DWORD CtrlWakeupMask;
DWORD ControlKeyState;
+
+ ULONG BufferSize;
+ PVOID Buffer;
} CSRSS_READ_CONSOLE, *PCSRSS_READ_CONSOLE;
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;
- 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;
+} CSRSS_SET_CURSOR_POSITION, *PCSRSS_SET_CURSOR_POSITION;
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;
+} CSRSS_CURSOR_INFO, *PCSRSS_CURSOR_INFO;
typedef struct
{
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;
+} CSRSS_CONSOLE_MODE, *PCSRSS_CONSOLE_MODE;
typedef struct
{
{
DWORD Length;
PWCHAR Title;
-} CSRSS_SET_TITLE, *PCSRSS_SET_TITLE;
-
-typedef struct
-{
- DWORD Length;
- PWCHAR Title;
-} CSRSS_GET_TITLE, *PCSRSS_GET_TITLE;
+} CSRSS_CONSOLE_TITLE, *PCSRSS_CONSOLE_TITLE;
typedef struct
{
typedef struct
{
- HANDLE ConsoleHandle;
- CODE_TYPE CodeType;
+ HANDLE ConsoleHandle;
DWORD NumCodesToRead;
COORD ReadCoord;
DWORD CodesRead;
+ CODE_TYPE CodeType;
union
{
PVOID pCode;
} pCode; // Either a pointer to a character or to an attribute.
} CSRSS_READ_CONSOLE_OUTPUT_CODE, *PCSRSS_READ_CONSOLE_OUTPUT_CODE;
+typedef struct
+{
+ HANDLE ConsoleHandle;
+ USHORT CodeType;
+
+ ULONG BufferSize;
+ WORD Length;
+ COORD Coord;
+ COORD EndCoord;
+
+ ULONG NrCharactersWritten;
+
+ union
+ {
+ // PVOID String;
+ PVOID pCode;
+ PCHAR AsciiChar;
+ PWCHAR UnicodeChar;
+ PWORD Attribute;
+ } pCode; // Either a pointer to a character or to an attribute.
+} CSRSS_WRITE_CONSOLE_OUTPUT_CODE, *PCSRSS_WRITE_CONSOLE_OUTPUT_CODE;
+
+typedef struct
+{
+ HANDLE ConsoleHandle;
+
+ CODE_TYPE CodeType;
+ union
+ {
+ CHAR AsciiChar;
+ WCHAR UnicodeChar;
+ WORD Attribute;
+ } Code; // Either a character or an attribute.
+
+ COORD Coord;
+ ULONG Length;
+
+ ULONG NrCharactersWritten; // FIXME: Only for chars, is it removable ?
+} CSRSS_FILL_OUTPUT, *PCSRSS_FILL_OUTPUT;
typedef struct
{
BOOL Unicode;
BOOL bRead; // TRUE --> Read ; FALSE --> Peek
- DWORD Length;
- INPUT_RECORD* InputRecord;
-
- /** For Read **/
ULONG InputsRead;
- // INPUT_RECORD Input;
- BOOL MoreEvents;
- HANDLE Event;
+
+ ULONG Length;
+ PINPUT_RECORD InputRecord;
} CSRSS_GET_CONSOLE_INPUT, *PCSRSS_GET_CONSOLE_INPUT;
typedef struct
DWORD Options;
} CSRSS_DUPLICATE_HANDLE, *PCSRSS_DUPLICATE_HANDLE;
+/*
+ * Type of handles.
+ */
+typedef enum _CONSOLE_HANDLE_TYPE
+{
+ HANDLE_INPUT = 0x01,
+ HANDLE_OUTPUT = 0x02
+} CONSOLE_HANDLE_TYPE;
+
typedef struct
{
+ HANDLE Handle;
+ CONSOLE_HANDLE_TYPE HandleType;
DWORD Access;
BOOL Inheritable;
- HANDLE Handle;
DWORD ShareMode;
-} CSRSS_GET_INPUT_HANDLE, *PCSRSS_GET_INPUT_HANDLE,
- CSRSS_GET_OUTPUT_HANDLE, *PCSRSS_GET_OUTPUT_HANDLE;
+} CSRSS_OPEN_CONSOLE, *PCSRSS_OPEN_CONSOLE;
typedef struct
{
HANDLE InputWaitHandle;
} CSRSS_GET_INPUT_WAIT_HANDLE, *PCSRSS_GET_INPUT_WAIT_HANDLE;
-#define CONSOLE_HARDWARE_STATE_GET 0
-#define CONSOLE_HARDWARE_STATE_SET 1
+/*
+ * Console hardware states.
+ */
#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;
+ DWORD State;
+} CSRSS_CONSOLE_HW_STATE, *PCSRSS_CONSOLE_HW_STATE;
typedef struct
{
- HWND WindowHandle;
+ HWND WindowHandle;
} CSRSS_GET_CONSOLE_WINDOW, *PCSRSS_GET_CONSOLE_WINDOW;
typedef struct
{
- HICON WindowIcon;
+ HICON WindowIcon;
} CSRSS_SET_CONSOLE_ICON, *PCSRSS_SET_CONSOLE_ICON;
typedef struct
{
+ BOOL InputCP; // TRUE : Input Code Page ; FALSE : Output Code Page
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;
+} CSRSS_CONSOLE_CP, *PCSRSS_CONSOLE_CP;
typedef struct _CONSOLE_API_MESSAGE
{
ULONG Reserved;
union
{
- CSRSS_WRITE_CONSOLE WriteConsoleRequest;
CSRSS_ALLOC_CONSOLE AllocConsoleRequest;
CSRSS_FREE_CONSOLE FreeConsoleRequest;
- CSRSS_SCREEN_BUFFER_INFO ScreenBufferInfoRequest;
- CSRSS_SET_CURSOR SetCursorRequest;
- CSRSS_FILL_OUTPUT FillOutputRequest;
- CSRSS_FILL_OUTPUT_ATTRIB FillOutputAttribRequest;
- CSRSS_WRITE_CONSOLE_OUTPUT_CHAR WriteConsoleOutputCharRequest;
- CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB WriteConsoleOutputAttribRequest;
- CSRSS_GET_CURSOR_INFO GetCursorInfoRequest;
- CSRSS_SET_CURSOR_INFO SetCursorInfoRequest;
- 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_WRITE_CONSOLE_INPUT WriteConsoleInputRequest;
- CSRSS_GET_INPUT_HANDLE GetInputHandleRequest;
- CSRSS_GET_OUTPUT_HANDLE GetOutputHandleRequest;
+
+ /* Handles */
+ CSRSS_OPEN_CONSOLE OpenConsoleRequest;
CSRSS_CLOSE_HANDLE CloseHandleRequest;
CSRSS_VERIFY_HANDLE VerifyHandleRequest;
CSRSS_DUPLICATE_HANDLE DuplicateHandleRequest;
CSRSS_GET_INPUT_WAIT_HANDLE GetConsoleInputWaitHandle;
- CSRSS_SETGET_CONSOLE_HW_STATE ConsoleHardwareStateRequest;
+
+ /* Cursor */
+ CSRSS_CURSOR_INFO CursorInfoRequest;
+ CSRSS_SET_CURSOR_POSITION SetCursorPositionRequest;
+
+ /* Screen buffer */
+ CSRSS_CREATE_SCREEN_BUFFER CreateScreenBufferRequest;
+ CSRSS_SET_SCREEN_BUFFER SetScreenBufferRequest;
+ CSRSS_SCREEN_BUFFER_INFO ScreenBufferInfoRequest;
+ CSRSS_SET_SCREEN_BUFFER_SIZE SetScreenBufferSize;
+ CSRSS_SCROLL_CONSOLE_SCREEN_BUFFER ScrollConsoleScreenBufferRequest;
+
+ CSRSS_GET_CONSOLE_SELECTION_INFO GetConsoleSelectionInfo;
+ CSRSS_FLUSH_INPUT_BUFFER FlushInputBufferRequest;
+
+ /* Console mode */
+ CSRSS_CONSOLE_MODE ConsoleModeRequest;
+ CSRSS_CONSOLE_HW_STATE ConsoleHardwareStateRequest;
+
+ /* Console window */
+ CSRSS_CONSOLE_TITLE TitleRequest;
CSRSS_GET_CONSOLE_WINDOW GetConsoleWindowRequest;
CSRSS_SET_CONSOLE_ICON SetConsoleIconRequest;
CSRSS_READ_CONSOLE_OUTPUT ReadConsoleOutputRequest; // SrvReadConsoleOutput / ReadConsoleOutput
CSRSS_READ_CONSOLE_OUTPUT_CODE ReadConsoleOutputCodeRequest; // SrvReadConsoleOutputString / ReadConsoleOutputAttribute & ReadConsoleOutputCharacter
+ /* Write */
+ CSRSS_WRITE_CONSOLE WriteConsoleRequest; // SrvWriteConsole / WriteConsole
+ CSRSS_WRITE_CONSOLE_INPUT WriteConsoleInputRequest;
+ CSRSS_WRITE_CONSOLE_OUTPUT WriteConsoleOutputRequest;
+ CSRSS_WRITE_CONSOLE_OUTPUT_CODE WriteConsoleOutputCodeRequest;
+
+ CSRSS_FILL_OUTPUT FillOutputRequest;
+ CSRSS_SET_ATTRIB SetAttribRequest;
+
/* Aliases */
CSRSS_CONSOLE_ALIAS ConsoleAlias;
CSRSS_GET_ALL_CONSOLE_ALIASES GetAllConsoleAliases;
CSRSS_GENERATE_CTRL_EVENT GenerateCtrlEvent;
CSRSS_GET_NUM_INPUT_EVENTS GetNumInputEventsRequest;
- CSRSS_SET_SCREEN_BUFFER_SIZE SetScreenBufferSize;
- CSRSS_GET_CONSOLE_SELECTION_INFO GetConsoleSelectionInfo;
- CSRSS_GET_CONSOLE_CP GetConsoleCodePage;
- CSRSS_SET_CONSOLE_CP SetConsoleCodePage;
- CSRSS_GET_CONSOLE_OUTPUT_CP GetConsoleOutputCodePage;
- CSRSS_SET_CONSOLE_OUTPUT_CP SetConsoleOutputCodePage;
+
+ /* Input and Output Code Pages */
+ CSRSS_CONSOLE_CP ConsoleCPRequest;
+
CSRSS_GET_PROCESS_LIST GetProcessListRequest;
} Data;
} CONSOLE_API_MESSAGE, *PCONSOLE_API_MESSAGE;
+// Check that a CONSOLE_API_MESSAGE can hold in a CSR_API_MESSAGE.
+CHECK_API_MSG_SIZE(CONSOLE_API_MESSAGE);
+
#endif // _CONMSG_H
/* EOF */