2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Client/Server Runtime SubSystem
4 * FILE: include/reactos/subsys/win/conmsg.h
5 * PURPOSE: Public definitions for communication
6 * between Console API Clients and Servers
7 * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr)
15 #define CONSRV_SERVERDLL_INDEX 2
16 #define CONSRV_FIRST_API_NUMBER 512
18 // Windows 2k3 tables, adapted from http://j00ru.vexillium.org/csrss_list/api_list.html#Windows_2k3
19 // plus a little bit of Windows 7. It is for testing purposes. After that I will add stubs.
20 // Some names are also deduced from the subsystems/win32/csrss/csrsrv/server.c ones.
21 typedef enum _CONSRV_API_NUMBER
23 ConsolepOpenConsole
= CONSRV_FIRST_API_NUMBER
,
24 ConsolepGetConsoleInput
,
25 ConsolepWriteConsoleInput
,
26 ConsolepReadConsoleOutput
,
27 ConsolepWriteConsoleOutput
,
28 ConsolepReadConsoleOutputString
,
29 ConsolepWriteConsoleOutputString
,
30 ConsolepFillConsoleOutput
,
32 // ConsolepGetNumberOfFonts,
33 ConsolepGetNumberOfInputEvents
,
34 ConsolepGetScreenBufferInfo
,
35 ConsolepGetCursorInfo
,
36 // ConsolepGetMouseInfo,
37 // ConsolepGetFontInfo,
38 // ConsolepGetFontSize,
39 // ConsolepGetCurrentFont,
41 ConsolepSetActiveScreenBuffer
,
42 ConsolepFlushInputBuffer
,
43 // ConsolepGetLargestWindowSize,
44 ConsolepSetScreenBufferSize
,
45 ConsolepSetCursorPosition
,
46 ConsolepSetCursorInfo
,
47 // ConsolepSetWindowInfo,
48 ConsolepScrollScreenBuffer
,
49 ConsolepSetTextAttribute
,
54 ConsolepDuplicateHandle
,
55 // ConsolepGetHandleInformation,
56 // ConsolepSetHandleInformation,
58 ConsolepVerifyIoHandle
,
63 ConsolepCreateScreenBuffer
,
64 // ConsolepInvalidateBitMapRect,
65 // ConsolepVDMOperation,
67 // ConsolepShowCursor,
68 // ConsolepMenuControl,
69 // ConsolepSetPalette,
70 // ConsolepSetDisplayMode,
71 // ConsolepRegisterVDM,
72 ConsolepGetHardwareState
,
73 ConsolepSetHardwareState
,
74 // ConsolepGetDisplayMode,
77 ConsolepGetAliasesLength
,
78 ConsolepGetAliasExesLength
,
81 ConsolepExpungeCommandHistory
,
82 ConsolepSetNumberOfCommands
,
83 ConsolepGetCommandHistoryLength
,
84 ConsolepGetCommandHistory
,
85 // ConsolepSetCommandHistoryMode,
88 // ConsolepSetKeyShortcuts,
89 // ConsolepSetMenuClose,
90 // ConsolepNotifyLastClose,
91 ConsolepGenerateCtrlEvent
,
92 // ConsolepGetKeyboardLayoutName,
93 ConsolepGetConsoleWindow
,
95 // ConsolepSetLocalEUDC,
96 // ConsolepSetCursorMode,
97 // ConsolepGetCursorMode,
98 // ConsolepRegisterOS2,
99 // ConsolepSetOS2OemFormat,
100 // ConsolepGetNlsMode,
101 // ConsolepSetNlsMode,
102 // ConsolepRegisterConsoleIME,
103 // ConsolepUnregisterConsoleIME,
104 // ConsolepGetLangId,
106 ConsolepGetSelectionInfo
,
107 ConsolepGetProcessList
,
112 } CONSRV_API_NUMBER
, *PCONSRV_API_NUMBER
;
115 typedef struct _CONSOLE_CONNECTION_INFO
118 } CONSOLE_CONNECTION_INFO
, *PCONSOLE_CONNECTION_INFO
;
121 #define CONSOLE_INPUT_MODE_VALID 0x0f
122 #define CONSOLE_OUTPUT_MODE_VALID 0x03
128 ULONG nProcessIdsTotal
;
130 } CSRSS_GET_PROCESS_LIST
, *PCSRSS_GET_PROCESS_LIST
;
134 HANDLE ConsoleHandle
;
136 ULONG NrCharactersToWrite
;
137 ULONG NrCharactersWritten
;
138 // HANDLE UnpauseEvent;
142 } CSRSS_WRITE_CONSOLE
, *PCSRSS_WRITE_CONSOLE
;
146 HANDLE ConsoleHandle
;
148 WORD NrCharactersToRead
;
149 WORD NrCharactersRead
;
152 UNICODE_STRING ExeName
;
153 DWORD CtrlWakeupMask
;
154 DWORD ControlKeyState
;
158 } CSRSS_READ_CONSOLE
, *PCSRSS_READ_CONSOLE
;
162 LPTHREAD_START_ROUTINE CtrlDispatcher
;
168 } CSRSS_ALLOC_CONSOLE
, *PCSRSS_ALLOC_CONSOLE
;
173 } CSRSS_FREE_CONSOLE
, *PCSRSS_FREE_CONSOLE
;
177 HANDLE ConsoleHandle
;
178 CONSOLE_SCREEN_BUFFER_INFO Info
;
179 } CSRSS_SCREEN_BUFFER_INFO
, *PCSRSS_SCREEN_BUFFER_INFO
;
183 HANDLE ConsoleHandle
;
185 } CSRSS_SET_CURSOR_POSITION
, *PCSRSS_SET_CURSOR_POSITION
;
189 HANDLE ConsoleHandle
;
190 CONSOLE_CURSOR_INFO Info
;
191 } CSRSS_CURSOR_INFO
, *PCSRSS_CURSOR_INFO
;
195 HANDLE ConsoleHandle
;
197 } CSRSS_SET_ATTRIB
, *PCSRSS_SET_ATTRIB
;
201 HANDLE ConsoleHandle
;
203 } CSRSS_CONSOLE_MODE
, *PCSRSS_CONSOLE_MODE
;
210 HANDLE OutputHandle
; /* handle to newly created screen buffer */
211 } CSRSS_CREATE_SCREEN_BUFFER
, *PCSRSS_CREATE_SCREEN_BUFFER
;
215 HANDLE OutputHandle
; /* handle to screen buffer to switch to */
216 } CSRSS_SET_SCREEN_BUFFER
, *PCSRSS_SET_SCREEN_BUFFER
;
222 } CSRSS_CONSOLE_TITLE
, *PCSRSS_CONSOLE_TITLE
;
226 HANDLE ConsoleHandle
;
230 SMALL_RECT WriteRegion
;
232 } CSRSS_WRITE_CONSOLE_OUTPUT
, *PCSRSS_WRITE_CONSOLE_OUTPUT
;
237 } CSRSS_FLUSH_INPUT_BUFFER
, *PCSRSS_FLUSH_INPUT_BUFFER
;
241 HANDLE ConsoleHandle
;
243 SMALL_RECT ScrollRectangle
;
244 BOOL UseClipRectangle
;
245 SMALL_RECT ClipRectangle
;
246 COORD DestinationOrigin
;
248 } CSRSS_SCROLL_CONSOLE_SCREEN_BUFFER
, *PCSRSS_SCROLL_CONSOLE_SCREEN_BUFFER
;
252 * An attribute or a character are instances of the same entity, namely
253 * a "code" (what would be called an (ANSI) escape sequence). Therefore
254 * encode them inside the same structure.
256 typedef enum _CODE_TYPE
260 CODE_ATTRIBUTE
= 0x03
265 HANDLE ConsoleHandle
;
267 DWORD NumCodesToRead
;
280 } pCode
; // Either a pointer to a character or to an attribute.
281 } CSRSS_READ_CONSOLE_OUTPUT_CODE
, *PCSRSS_READ_CONSOLE_OUTPUT_CODE
;
285 HANDLE ConsoleHandle
;
293 ULONG NrCharactersWritten
;
302 } pCode
; // Either a pointer to a character or to an attribute.
303 } CSRSS_WRITE_CONSOLE_OUTPUT_CODE
, *PCSRSS_WRITE_CONSOLE_OUTPUT_CODE
;
307 HANDLE ConsoleHandle
;
315 } Code
; // Either a character or an attribute.
320 ULONG NrCharactersWritten
; // FIXME: Only for chars, is it removable ?
321 } CSRSS_FILL_OUTPUT
, *PCSRSS_FILL_OUTPUT
;
325 HANDLE ConsoleHandle
;
327 BOOL bRead
; // TRUE --> Read ; FALSE --> Peek
330 INPUT_RECORD
* InputRecord
;
334 // INPUT_RECORD Input;
337 } CSRSS_GET_CONSOLE_INPUT
, *PCSRSS_GET_CONSOLE_INPUT
;
341 HANDLE ConsoleHandle
;
345 SMALL_RECT ReadRegion
;
347 } CSRSS_READ_CONSOLE_OUTPUT
, *PCSRSS_READ_CONSOLE_OUTPUT
;
351 HANDLE ConsoleHandle
;
354 INPUT_RECORD
* InputRecord
;
355 } CSRSS_WRITE_CONSOLE_INPUT
, *PCSRSS_WRITE_CONSOLE_INPUT
;
360 } CSRSS_CLOSE_HANDLE
, *PCSRSS_CLOSE_HANDLE
;
365 } CSRSS_VERIFY_HANDLE
, *PCSRSS_VERIFY_HANDLE
;
373 } CSRSS_DUPLICATE_HANDLE
, *PCSRSS_DUPLICATE_HANDLE
;
378 typedef enum _HANDLE_TYPE
387 HANDLE_TYPE HandleType
;
391 } CSRSS_OPEN_CONSOLE
, *PCSRSS_OPEN_CONSOLE
;
395 HANDLE InputWaitHandle
;
396 } CSRSS_GET_INPUT_WAIT_HANDLE
, *PCSRSS_GET_INPUT_WAIT_HANDLE
;
400 * Console hardware states.
402 #define CONSOLE_HARDWARE_STATE_GDI_MANAGED 0
403 #define CONSOLE_HARDWARE_STATE_DIRECT 1
407 HANDLE ConsoleHandle
;
409 } CSRSS_CONSOLE_HW_STATE
, *PCSRSS_CONSOLE_HW_STATE
;
414 } CSRSS_GET_CONSOLE_WINDOW
, *PCSRSS_GET_CONSOLE_WINDOW
;
419 } CSRSS_SET_CONSOLE_ICON
, *PCSRSS_SET_CONSOLE_ICON
;
432 ULONG TargetLength
; // Also used for storing the number of bytes written.
437 } CSRSS_CONSOLE_ALIAS
, *PCSRSS_CONSOLE_ALIAS
;
442 DWORD AliasesBufferLength
;
444 LPWSTR AliasesBuffer
;
445 } CSRSS_GET_ALL_CONSOLE_ALIASES
, *PCSRSS_GET_ALL_CONSOLE_ALIASES
;
452 } CSRSS_GET_ALL_CONSOLE_ALIASES_LENGTH
, *PCSRSS_GET_ALL_CONSOLE_ALIASES_LENGTH
;
458 } CSRSS_GET_CONSOLE_ALIASES_EXES
, *PCSRSS_GET_CONSOLE_ALIASES_EXES
;
463 } CSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH
, *PCSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH
;
472 UNICODE_STRING ExeName
;
475 } CSRSS_GET_COMMAND_HISTORY
, *PCSRSS_GET_COMMAND_HISTORY
;
479 UNICODE_STRING ExeName
;
481 } CSRSS_GET_COMMAND_HISTORY_LENGTH
, *PCSRSS_GET_COMMAND_HISTORY_LENGTH
;
485 UNICODE_STRING ExeName
;
486 } CSRSS_EXPUNGE_COMMAND_HISTORY
, *PCSRSS_EXPUNGE_COMMAND_HISTORY
;
490 UNICODE_STRING ExeName
;
492 } CSRSS_SET_HISTORY_NUMBER_COMMANDS
, *PCSRSS_SET_HISTORY_NUMBER_COMMANDS
;
496 UINT HistoryBufferSize
;
497 UINT NumberOfHistoryBuffers
;
499 } CSRSS_HISTORY_INFO
, *PCSRSS_HISTORY_INFO
;
514 } CSRSS_GENERATE_CTRL_EVENT
, *PCSRSS_GENERATE_CTRL_EVENT
;
518 HANDLE ConsoleHandle
;
519 DWORD NumInputEvents
;
520 } CSRSS_GET_NUM_INPUT_EVENTS
, *PCSRSS_GET_NUM_INPUT_EVENTS
;
526 } CSRSS_SET_SCREEN_BUFFER_SIZE
, *PCSRSS_SET_SCREEN_BUFFER_SIZE
;
530 CONSOLE_SELECTION_INFO Info
;
531 } CSRSS_GET_CONSOLE_SELECTION_INFO
, *PCSRSS_GET_CONSOLE_SELECTION_INFO
;
535 BOOL InputCP
; // TRUE : Input Code Page ; FALSE : Output Code Page
537 } CSRSS_CONSOLE_CP
, *PCSRSS_CONSOLE_CP
;
539 typedef struct _CONSOLE_API_MESSAGE
543 PCSR_CAPTURE_BUFFER CsrCaptureData
;
544 CSR_API_NUMBER ApiNumber
;
545 ULONG Status
; // ReturnValue; // NTSTATUS Status
549 CSRSS_ALLOC_CONSOLE AllocConsoleRequest
;
550 CSRSS_FREE_CONSOLE FreeConsoleRequest
;
553 CSRSS_OPEN_CONSOLE OpenConsoleRequest
;
554 CSRSS_CLOSE_HANDLE CloseHandleRequest
;
555 CSRSS_VERIFY_HANDLE VerifyHandleRequest
;
556 CSRSS_DUPLICATE_HANDLE DuplicateHandleRequest
;
557 CSRSS_GET_INPUT_WAIT_HANDLE GetConsoleInputWaitHandle
;
560 CSRSS_CURSOR_INFO CursorInfoRequest
;
561 CSRSS_SET_CURSOR_POSITION SetCursorPositionRequest
;
564 CSRSS_CREATE_SCREEN_BUFFER CreateScreenBufferRequest
;
565 CSRSS_SET_SCREEN_BUFFER SetScreenBufferRequest
;
566 CSRSS_SCREEN_BUFFER_INFO ScreenBufferInfoRequest
;
567 CSRSS_SET_SCREEN_BUFFER_SIZE SetScreenBufferSize
;
568 CSRSS_SCROLL_CONSOLE_SCREEN_BUFFER ScrollConsoleScreenBufferRequest
;
570 CSRSS_GET_CONSOLE_SELECTION_INFO GetConsoleSelectionInfo
;
571 CSRSS_FLUSH_INPUT_BUFFER FlushInputBufferRequest
;
574 CSRSS_CONSOLE_MODE ConsoleModeRequest
;
575 CSRSS_CONSOLE_HW_STATE ConsoleHardwareStateRequest
;
578 CSRSS_CONSOLE_TITLE TitleRequest
;
579 CSRSS_GET_CONSOLE_WINDOW GetConsoleWindowRequest
;
580 CSRSS_SET_CONSOLE_ICON SetConsoleIconRequest
;
583 CSRSS_READ_CONSOLE ReadConsoleRequest
; // SrvReadConsole / ReadConsole
584 CSRSS_GET_CONSOLE_INPUT GetConsoleInputRequest
; // SrvGetConsoleInput / PeekConsoleInput & ReadConsoleInput
585 CSRSS_READ_CONSOLE_OUTPUT ReadConsoleOutputRequest
; // SrvReadConsoleOutput / ReadConsoleOutput
586 CSRSS_READ_CONSOLE_OUTPUT_CODE ReadConsoleOutputCodeRequest
; // SrvReadConsoleOutputString / ReadConsoleOutputAttribute & ReadConsoleOutputCharacter
589 CSRSS_WRITE_CONSOLE WriteConsoleRequest
; // SrvWriteConsole / WriteConsole
590 CSRSS_WRITE_CONSOLE_INPUT WriteConsoleInputRequest
;
591 CSRSS_WRITE_CONSOLE_OUTPUT WriteConsoleOutputRequest
;
592 CSRSS_WRITE_CONSOLE_OUTPUT_CODE WriteConsoleOutputCodeRequest
;
594 CSRSS_FILL_OUTPUT FillOutputRequest
;
595 CSRSS_SET_ATTRIB SetAttribRequest
;
598 CSRSS_CONSOLE_ALIAS ConsoleAlias
;
599 CSRSS_GET_ALL_CONSOLE_ALIASES GetAllConsoleAliases
;
600 CSRSS_GET_ALL_CONSOLE_ALIASES_LENGTH GetAllConsoleAliasesLength
;
601 CSRSS_GET_CONSOLE_ALIASES_EXES GetConsoleAliasesExes
;
602 CSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH GetConsoleAliasesExesLength
;
605 CSRSS_GET_COMMAND_HISTORY GetCommandHistory
;
606 CSRSS_GET_COMMAND_HISTORY_LENGTH GetCommandHistoryLength
;
607 CSRSS_EXPUNGE_COMMAND_HISTORY ExpungeCommandHistory
;
608 CSRSS_SET_HISTORY_NUMBER_COMMANDS SetHistoryNumberCommands
;
609 CSRSS_HISTORY_INFO HistoryInfoRequest
;
611 CSRSS_GENERATE_CTRL_EVENT GenerateCtrlEvent
;
612 CSRSS_GET_NUM_INPUT_EVENTS GetNumInputEventsRequest
;
614 /* Input and Output Code Pages */
615 CSRSS_CONSOLE_CP ConsoleCPRequest
;
617 CSRSS_GET_PROCESS_LIST GetProcessListRequest
;
619 } CONSOLE_API_MESSAGE
, *PCONSOLE_API_MESSAGE
;
621 // Check that a CONSOLE_API_MESSAGE can hold in a CSR_API_MESSAGE.
622 CHECK_API_MSG_SIZE(CONSOLE_API_MESSAGE
);