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_START_INFO
117 DWORD dwStartupFlags
;
119 COORD ScreenBufferSize
;
121 POINT ConsoleWindowOrigin
;
122 SIZE ConsoleWindowSize
;
123 // UNICODE_STRING ConsoleTitle;
124 WCHAR ConsoleTitle
[MAX_PATH
+ 1];
125 } CONSOLE_START_INFO
, *PCONSOLE_START_INFO
;
127 typedef struct _CONSOLE_CONNECTION_INFO
129 BOOL ConsoleNeeded
; // Used for GUI apps only.
131 /* Adapted from CONSOLE_ALLOCCONSOLE */
132 CONSOLE_START_INFO ConsoleStartInfo
;
133 WCHAR AppPath
[MAX_PATH
+ 1];
135 HANDLE Console
; // ConsoleHandle // In fact, it is a PCSRSS_CONSOLE <-- correct that !!
139 HANDLE InputWaitHandle
;
140 LPTHREAD_START_ROUTINE CtrlDispatcher
;
141 LPTHREAD_START_ROUTINE PropDispatcher
;
142 } CONSOLE_CONNECTION_INFO
, *PCONSOLE_CONNECTION_INFO
;
148 ULONG nProcessIdsTotal
;
150 } CONSOLE_GETPROCESSLIST
, *PCONSOLE_GETPROCESSLIST
;
157 ULONG NrCharactersToWrite
;
158 ULONG NrCharactersWritten
;
162 } CONSOLE_WRITECONSOLE
, *PCONSOLE_WRITECONSOLE
;
169 WORD NrCharactersToRead
;
170 WORD NrCharactersRead
;
172 UNICODE_STRING ExeName
;
173 DWORD CtrlWakeupMask
;
174 DWORD ControlKeyState
;
178 } CONSOLE_READCONSOLE
, *PCONSOLE_READCONSOLE
;
182 PCONSOLE_START_INFO ConsoleStartInfo
;
183 LPWSTR AppPath
; // Length: MAX_PATH + 1
185 HANDLE Console
; // ConsoleHandle // In fact, it is a PCSRSS_CONSOLE <-- correct that !!
189 HANDLE InputWaitHandle
;
190 LPTHREAD_START_ROUTINE CtrlDispatcher
;
191 LPTHREAD_START_ROUTINE PropDispatcher
;
192 } CONSOLE_ALLOCCONSOLE
, *PCONSOLE_ALLOCCONSOLE
;
196 DWORD ProcessId
; // If ProcessId == ATTACH_PARENT_PROCESS == -1, then attach the current process to its parent process console.
197 HANDLE Console
; // ConsoleHandle // In fact, it is a PCSRSS_CONSOLE <-- correct that !!
201 HANDLE InputWaitHandle
;
202 LPTHREAD_START_ROUTINE CtrlDispatcher
;
203 LPTHREAD_START_ROUTINE PropDispatcher
;
204 } CONSOLE_ATTACHCONSOLE
, *PCONSOLE_ATTACHCONSOLE
;
209 } CONSOLE_FREECONSOLE
, *PCONSOLE_FREECONSOLE
;
214 CONSOLE_SCREEN_BUFFER_INFO Info
;
215 } CONSOLE_GETSCREENBUFFERINFO
, *PCONSOLE_GETSCREENBUFFERINFO
;
221 } CONSOLE_SETCURSORPOSITION
, *PCONSOLE_SETCURSORPOSITION
;
226 CONSOLE_CURSOR_INFO Info
;
227 } CONSOLE_GETSETCURSORINFO
, *PCONSOLE_GETSETCURSORINFO
;
233 } CONSOLE_SETTEXTATTRIB
, *PCONSOLE_SETTEXTATTRIB
;
237 HANDLE ConsoleHandle
; /* A valid input or output console handle */
239 } CONSOLE_GETSETCONSOLEMODE
, *PCONSOLE_GETSETCONSOLEMODE
;
243 HANDLE OutputHandle
; /* Handle to newly created screen buffer */
248 } CONSOLE_CREATESCREENBUFFER
, *PCONSOLE_CREATESCREENBUFFER
;
252 HANDLE OutputHandle
; /* Handle to screen buffer to switch to */
253 } CONSOLE_SETACTIVESCREENBUFFER
, *PCONSOLE_SETACTIVESCREENBUFFER
;
259 } CONSOLE_GETSETCONSOLETITLE
, *PCONSOLE_GETSETCONSOLETITLE
;
268 SMALL_RECT WriteRegion
;
270 } CONSOLE_WRITEOUTPUT
, *PCONSOLE_WRITEOUTPUT
;
275 } CONSOLE_FLUSHINPUTBUFFER
, *PCONSOLE_FLUSHINPUTBUFFER
;
282 SMALL_RECT ScrollRectangle
;
283 BOOL UseClipRectangle
;
284 SMALL_RECT ClipRectangle
;
285 COORD DestinationOrigin
;
287 } CONSOLE_SCROLLSCREENBUFFER
, *PCONSOLE_SCROLLSCREENBUFFER
;
291 * An attribute or a character are instances of the same entity, namely
292 * a "code" (what would be called an (ANSI) escape sequence). Therefore
293 * encode them inside the same structure.
295 typedef enum _CODE_TYPE
299 CODE_ATTRIBUTE
= 0x03
306 DWORD NumCodesToRead
;
319 } pCode
; // Either a pointer to a character or to an attribute.
320 } CONSOLE_READOUTPUTCODE
, *PCONSOLE_READOUTPUTCODE
;
331 ULONG NrCharactersWritten
;
341 } pCode
; // Either a pointer to a character or to an attribute.
342 } CONSOLE_WRITEOUTPUTCODE
, *PCONSOLE_WRITEOUTPUTCODE
;
354 } Code
; // Either a character or an attribute.
359 ULONG NrCharactersWritten
; // FIXME: Only for chars, is it removable ?
360 } CONSOLE_FILLOUTPUTCODE
, *PCONSOLE_FILLOUTPUTCODE
;
366 BOOL bRead
; // TRUE --> Read ; FALSE --> Peek
371 PINPUT_RECORD InputRecord
;
372 } CONSOLE_GETINPUT
, *PCONSOLE_GETINPUT
;
381 SMALL_RECT ReadRegion
;
383 } CONSOLE_READOUTPUT
, *PCONSOLE_READOUTPUT
;
390 INPUT_RECORD
* InputRecord
;
391 } CONSOLE_WRITEINPUT
, *PCONSOLE_WRITEINPUT
;
395 HANDLE ConsoleHandle
;
396 } CONSOLE_CLOSEHANDLE
, *PCONSOLE_CLOSEHANDLE
;
400 HANDLE ConsoleHandle
;
401 } CONSOLE_VERIFYHANDLE
, *PCONSOLE_VERIFYHANDLE
;
405 HANDLE ConsoleHandle
;
409 } CONSOLE_DUPLICATEHANDLE
, *PCONSOLE_DUPLICATEHANDLE
;
414 typedef enum _CONSOLE_HANDLE_TYPE
418 } CONSOLE_HANDLE_TYPE
;
422 HANDLE ConsoleHandle
;
423 CONSOLE_HANDLE_TYPE HandleType
;
427 } CONSOLE_OPENCONSOLE
, *PCONSOLE_OPENCONSOLE
;
432 HANDLE InputWaitHandle
;
433 } CSRSS_GET_INPUT_WAIT_HANDLE
, *PCSRSS_GET_INPUT_WAIT_HANDLE
;
438 * Console hardware states.
440 #define CONSOLE_HARDWARE_STATE_GDI_MANAGED 0
441 #define CONSOLE_HARDWARE_STATE_DIRECT 1
447 } CONSOLE_GETSETHWSTATE
, *PCONSOLE_GETSETHWSTATE
;
452 } CONSOLE_GETWINDOW
, *PCONSOLE_GETWINDOW
;
457 } CONSOLE_SETICON
, *PCONSOLE_SETICON
;
464 ULONG TargetLength
; // Also used for storing the number of bytes written.
469 } CONSOLE_ADDGETALIAS
, *PCONSOLE_ADDGETALIAS
;
474 DWORD AliasesBufferLength
;
476 LPWSTR AliasesBuffer
;
477 } CONSOLE_GETALLALIASES
, *PCONSOLE_GETALLALIASES
;
484 } CONSOLE_GETALLALIASESLENGTH
, *PCONSOLE_GETALLALIASESLENGTH
;
490 } CONSOLE_GETALIASESEXES
, *PCONSOLE_GETALIASESEXES
;
495 } CONSOLE_GETALIASESEXESLENGTH
, *PCONSOLE_GETALIASESEXESLENGTH
;
501 UNICODE_STRING ExeName
;
504 } CONSOLE_GETCOMMANDHISTORY
, *PCONSOLE_GETCOMMANDHISTORY
;
508 UNICODE_STRING ExeName
;
510 } CONSOLE_GETCOMMANDHISTORYLENGTH
, *PCONSOLE_GETCOMMANDHISTORYLENGTH
;
514 UNICODE_STRING ExeName
;
515 } CONSOLE_EXPUNGECOMMANDHISTORY
, *PCONSOLE_EXPUNGECOMMANDHISTORY
;
519 UNICODE_STRING ExeName
;
521 } CONSOLE_SETHISTORYNUMBERCOMMANDS
, *PCONSOLE_SETHISTORYNUMBERCOMMANDS
;
525 UINT HistoryBufferSize
;
526 UINT NumberOfHistoryBuffers
;
528 } CONSOLE_GETSETHISTORYINFO
, *PCONSOLE_GETSETHISTORYINFO
;
536 } CONSOLE_GENERATECTRLEVENT
, *PCONSOLE_GENERATECTRLEVENT
;
541 DWORD NumInputEvents
;
542 } CONSOLE_GETNUMINPUTEVENTS
, *PCONSOLE_GETNUMINPUTEVENTS
;
548 } CONSOLE_SETSCREENBUFFERSIZE
, *PCONSOLE_SETSCREENBUFFERSIZE
;
552 CONSOLE_SELECTION_INFO Info
;
553 } CONSOLE_GETSELECTIONINFO
, *PCONSOLE_GETSELECTIONINFO
;
557 BOOL InputCP
; // TRUE : Input Code Page ; FALSE : Output Code Page
559 } CONSOLE_GETSETINPUTOUTPUTCP
, *PCONSOLE_GETSETINPUTOUTPUTCP
;
561 typedef struct _CONSOLE_API_MESSAGE
565 PCSR_CAPTURE_BUFFER CsrCaptureData
;
566 CSR_API_NUMBER ApiNumber
;
567 ULONG Status
; // ReturnValue; // NTSTATUS Status
571 CONSOLE_ALLOCCONSOLE AllocConsoleRequest
;
572 CONSOLE_ATTACHCONSOLE AttachConsoleRequest
;
573 CONSOLE_FREECONSOLE FreeConsoleRequest
;
576 CONSOLE_OPENCONSOLE OpenConsoleRequest
;
577 CONSOLE_CLOSEHANDLE CloseHandleRequest
;
578 CONSOLE_VERIFYHANDLE VerifyHandleRequest
;
579 CONSOLE_DUPLICATEHANDLE DuplicateHandleRequest
;
581 CSRSS_GET_INPUT_WAIT_HANDLE GetConsoleInputWaitHandle
;
585 CONSOLE_GETSETCURSORINFO CursorInfoRequest
;
586 CONSOLE_SETCURSORPOSITION SetCursorPositionRequest
;
589 CONSOLE_CREATESCREENBUFFER CreateScreenBufferRequest
;
590 CONSOLE_SETACTIVESCREENBUFFER SetScreenBufferRequest
;
591 CONSOLE_GETSCREENBUFFERINFO ScreenBufferInfoRequest
;
592 CONSOLE_SETSCREENBUFFERSIZE SetScreenBufferSizeRequest
;
593 CONSOLE_SCROLLSCREENBUFFER ScrollScreenBufferRequest
;
595 CONSOLE_GETSELECTIONINFO GetSelectionInfoRequest
;
596 CONSOLE_FLUSHINPUTBUFFER FlushInputBufferRequest
;
599 CONSOLE_GETSETCONSOLEMODE ConsoleModeRequest
;
600 CONSOLE_GETSETHWSTATE HardwareStateRequest
;
603 CONSOLE_GETSETCONSOLETITLE TitleRequest
;
604 CONSOLE_GETWINDOW GetWindowRequest
;
605 CONSOLE_SETICON SetIconRequest
;
608 CONSOLE_READCONSOLE ReadConsoleRequest
; // SrvReadConsole / ReadConsole
609 CONSOLE_GETINPUT GetInputRequest
; // SrvGetConsoleInput / PeekConsoleInput & ReadConsoleInput
610 CONSOLE_READOUTPUT ReadOutputRequest
; // SrvReadConsoleOutput / ReadConsoleOutput
611 CONSOLE_READOUTPUTCODE ReadOutputCodeRequest
; // SrvReadConsoleOutputString / ReadConsoleOutputAttribute & ReadConsoleOutputCharacter
614 CONSOLE_WRITECONSOLE WriteConsoleRequest
; // SrvWriteConsole / WriteConsole
615 CONSOLE_WRITEINPUT WriteInputRequest
;
616 CONSOLE_WRITEOUTPUT WriteOutputRequest
;
617 CONSOLE_WRITEOUTPUTCODE WriteOutputCodeRequest
;
619 CONSOLE_FILLOUTPUTCODE FillOutputRequest
;
620 CONSOLE_SETTEXTATTRIB SetTextAttribRequest
;
623 CONSOLE_ADDGETALIAS ConsoleAliasRequest
;
624 CONSOLE_GETALLALIASES GetAllAliasesRequest
;
625 CONSOLE_GETALLALIASESLENGTH GetAllAliasesLengthRequest
;
626 CONSOLE_GETALIASESEXES GetAliasesExesRequest
;
627 CONSOLE_GETALIASESEXESLENGTH GetAliasesExesLengthRequest
;
630 CONSOLE_GETCOMMANDHISTORY GetCommandHistoryRequest
;
631 CONSOLE_GETCOMMANDHISTORYLENGTH GetCommandHistoryLengthRequest
;
632 CONSOLE_EXPUNGECOMMANDHISTORY ExpungeCommandHistoryRequest
;
633 CONSOLE_SETHISTORYNUMBERCOMMANDS SetHistoryNumberCommandsRequest
;
634 CONSOLE_GETSETHISTORYINFO HistoryInfoRequest
;
636 CONSOLE_GENERATECTRLEVENT GenerateCtrlEventRequest
;
637 CONSOLE_GETNUMINPUTEVENTS GetNumInputEventsRequest
;
639 /* Input and Output Code Pages */
640 CONSOLE_GETSETINPUTOUTPUTCP ConsoleCPRequest
;
642 CONSOLE_GETPROCESSLIST GetProcessListRequest
;
644 } CONSOLE_API_MESSAGE
, *PCONSOLE_API_MESSAGE
;
646 // Check that a CONSOLE_API_MESSAGE can hold in a CSR_API_MESSAGE.
647 CHECK_API_MSG_SIZE(CONSOLE_API_MESSAGE
);