2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Console Server DLL
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 Server 2003 table from http://j00ru.vexillium.org/csrss_list/api_list.html#Windows_2k3
19 // plus a little bit of Windows 7.
20 typedef enum _CONSRV_API_NUMBER
22 ConsolepOpenConsole
= CONSRV_FIRST_API_NUMBER
,
23 ConsolepGetConsoleInput
,
24 ConsolepWriteConsoleInput
,
25 ConsolepReadConsoleOutput
,
26 ConsolepWriteConsoleOutput
,
27 ConsolepReadConsoleOutputString
,
28 ConsolepWriteConsoleOutputString
,
29 ConsolepFillConsoleOutput
,
31 // ConsolepGetNumberOfFonts,
32 ConsolepGetNumberOfInputEvents
,
33 ConsolepGetScreenBufferInfo
,
34 ConsolepGetCursorInfo
,
35 // ConsolepGetMouseInfo,
36 // ConsolepGetFontInfo,
37 // ConsolepGetFontSize,
38 // ConsolepGetCurrentFont,
40 ConsolepSetActiveScreenBuffer
,
41 ConsolepFlushInputBuffer
,
42 ConsolepGetLargestWindowSize
,
43 ConsolepSetScreenBufferSize
,
44 ConsolepSetCursorPosition
,
45 ConsolepSetCursorInfo
,
46 ConsolepSetWindowInfo
,
47 ConsolepScrollScreenBuffer
,
48 ConsolepSetTextAttribute
,
53 ConsolepDuplicateHandle
,
54 // ConsolepGetHandleInformation,
55 // ConsolepSetHandleInformation,
57 ConsolepVerifyIoHandle
,
62 ConsolepCreateScreenBuffer
,
63 ConsolepInvalidateBitMapRect
,
64 // ConsolepVDMOperation,
69 ConsolepSetDisplayMode
,
70 // ConsolepRegisterVDM,
71 ConsolepGetHardwareState
,
72 ConsolepSetHardwareState
,
73 ConsolepGetDisplayMode
,
76 ConsolepGetAliasesLength
,
77 ConsolepGetAliasExesLength
,
80 ConsolepExpungeCommandHistory
,
81 ConsolepSetNumberOfCommands
,
82 ConsolepGetCommandHistoryLength
,
83 ConsolepGetCommandHistory
,
84 // ConsolepSetCommandHistoryMode,
87 // ConsolepSetKeyShortcuts,
89 // ConsolepNotifyLastClose,
90 ConsolepGenerateCtrlEvent
,
91 // ConsolepGetKeyboardLayoutName,
92 ConsolepGetConsoleWindow
,
94 // ConsolepSetLocalEUDC,
95 // ConsolepSetCursorMode,
96 // ConsolepGetCursorMode,
97 // ConsolepRegisterOS2,
98 // ConsolepSetOS2OemFormat,
99 // ConsolepGetNlsMode,
100 // ConsolepSetNlsMode,
101 // ConsolepRegisterConsoleIME,
102 // ConsolepUnregisterConsoleIME,
103 // ConsolepGetLangId,
105 ConsolepGetSelectionInfo
,
106 ConsolepGetProcessList
,
111 } CONSRV_API_NUMBER
, *PCONSRV_API_NUMBER
;
114 typedef struct _CONSOLE_START_INFO
116 DWORD dwStartupFlags
;
118 COORD ScreenBufferSize
;
120 POINT ConsoleWindowOrigin
;
121 SIZE ConsoleWindowSize
;
122 // UNICODE_STRING ConsoleTitle;
123 WCHAR ConsoleTitle
[MAX_PATH
+ 1]; // Console title or full path to the startup shortcut
124 WCHAR AppPath
[MAX_PATH
+ 1]; // Full path of the launched app
125 WCHAR IconPath
[MAX_PATH
+ 1]; // Path to the file containing the icon
126 INT IconIndex
; // Index of the icon
127 } CONSOLE_START_INFO
, *PCONSOLE_START_INFO
;
129 typedef struct _CONSRV_API_CONNECTINFO
131 BOOL ConsoleNeeded
; // Used for GUI apps only.
133 /* Adapted from CONSOLE_ALLOCCONSOLE */
134 CONSOLE_START_INFO ConsoleStartInfo
;
136 HANDLE ConsoleHandle
;
140 HANDLE InputWaitHandle
;
141 LPTHREAD_START_ROUTINE CtrlDispatcher
;
142 LPTHREAD_START_ROUTINE PropDispatcher
;
143 } CONSRV_API_CONNECTINFO
, *PCONSRV_API_CONNECTINFO
;
149 ULONG nProcessIdsTotal
;
151 } CONSOLE_GETPROCESSLIST
, *PCONSOLE_GETPROCESSLIST
;
158 ULONG NrCharactersToWrite
;
159 ULONG NrCharactersWritten
;
163 } CONSOLE_WRITECONSOLE
, *PCONSOLE_WRITECONSOLE
;
170 ULONG NrCharactersToRead
;
171 ULONG NrCharactersRead
;
173 UNICODE_STRING ExeName
;
174 DWORD CtrlWakeupMask
;
175 DWORD ControlKeyState
;
179 } CONSOLE_READCONSOLE
, *PCONSOLE_READCONSOLE
;
183 PCONSOLE_START_INFO ConsoleStartInfo
;
185 HANDLE ConsoleHandle
;
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 ConsoleHandle
;
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
;
228 } CONSOLE_SHOWCURSOR
, *PCONSOLE_SHOWCURSOR
;
234 } CONSOLE_SETCURSOR
, *PCONSOLE_SETCURSOR
;
239 CONSOLE_CURSOR_INFO Info
;
240 } CONSOLE_GETSETCURSORINFO
, *PCONSOLE_GETSETCURSORINFO
;
246 } CONSOLE_SETTEXTATTRIB
, *PCONSOLE_SETTEXTATTRIB
;
250 HANDLE ConsoleHandle
; /* A valid input or output console handle */
252 } CONSOLE_GETSETCONSOLEMODE
, *PCONSOLE_GETSETCONSOLEMODE
;
256 // HANDLE OutputHandle;
258 } CONSOLE_GETDISPLAYMODE
, *PCONSOLE_GETDISPLAYMODE
;
265 } CONSOLE_SETDISPLAYMODE
, *PCONSOLE_SETDISPLAYMODE
;
268 * Console hardware states.
270 #define CONSOLE_HARDWARE_STATE_GDI_MANAGED 0
271 #define CONSOLE_HARDWARE_STATE_DIRECT 1
277 } CONSOLE_GETSETHWSTATE
, *PCONSOLE_GETSETHWSTATE
;
282 HANDLE OutputHandle
; /* Handle to newly created screen buffer */
283 DWORD ScreenBufferType
; /* Type of the screen buffer: CONSOLE_TEXTMODE_BUFFER or CONSOLE_GRAPHICS_BUFFER */
285 * If we are creating a graphics screen buffer,
286 * this structure holds the initialization information.
288 CONSOLE_GRAPHICS_BUFFER_INFO GraphicsBufferInfo
;
293 } CONSOLE_CREATESCREENBUFFER
, *PCONSOLE_CREATESCREENBUFFER
;
297 HANDLE OutputHandle
; /* Handle to screen buffer to switch to */
298 } CONSOLE_SETACTIVESCREENBUFFER
, *PCONSOLE_SETACTIVESCREENBUFFER
;
304 } CONSOLE_INVALIDATEDIBITS
, *PCONSOLE_INVALIDATEDIBITS
;
309 HPALETTE PaletteHandle
;
311 } CONSOLE_SETPALETTE
, *PCONSOLE_SETPALETTE
;
317 } CONSOLE_GETSETCONSOLETITLE
, *PCONSOLE_GETSETCONSOLETITLE
;
326 SMALL_RECT WriteRegion
;
328 } CONSOLE_WRITEOUTPUT
, *PCONSOLE_WRITEOUTPUT
;
333 } CONSOLE_FLUSHINPUTBUFFER
, *PCONSOLE_FLUSHINPUTBUFFER
;
340 SMALL_RECT ScrollRectangle
;
341 BOOL UseClipRectangle
;
342 SMALL_RECT ClipRectangle
;
343 COORD DestinationOrigin
;
345 } CONSOLE_SCROLLSCREENBUFFER
, *PCONSOLE_SCROLLSCREENBUFFER
;
349 * An attribute or a character are instances of the same entity, namely
350 * a "code" (what would be called an (ANSI) escape sequence). Therefore
351 * encode them inside the same structure.
353 typedef enum _CODE_TYPE
357 CODE_ATTRIBUTE
= 0x03
364 DWORD NumCodesToRead
;
377 } pCode
; // Either a pointer to a character or to an attribute.
378 } CONSOLE_READOUTPUTCODE
, *PCONSOLE_READOUTPUTCODE
;
384 ULONG BufferSize
; // Seems unusued
389 ULONG NrCharactersWritten
; // Seems unusued
398 } pCode
; // Either a pointer to a character or to an attribute.
399 } CONSOLE_WRITEOUTPUTCODE
, *PCONSOLE_WRITEOUTPUTCODE
;
411 } Code
; // Either a character or an attribute.
416 ULONG NrCharactersWritten
; // FIXME: Only for chars, is it removable ?
417 } CONSOLE_FILLOUTPUTCODE
, *PCONSOLE_FILLOUTPUTCODE
;
423 BOOL bRead
; // TRUE --> Read ; FALSE --> Peek
428 PINPUT_RECORD InputRecord
;
429 } CONSOLE_GETINPUT
, *PCONSOLE_GETINPUT
;
438 SMALL_RECT ReadRegion
;
440 } CONSOLE_READOUTPUT
, *PCONSOLE_READOUTPUT
;
447 INPUT_RECORD
* InputRecord
;
448 } CONSOLE_WRITEINPUT
, *PCONSOLE_WRITEINPUT
;
452 HANDLE ConsoleHandle
;
453 } CONSOLE_CLOSEHANDLE
, *PCONSOLE_CLOSEHANDLE
;
457 HANDLE ConsoleHandle
;
458 } CONSOLE_VERIFYHANDLE
, *PCONSOLE_VERIFYHANDLE
;
462 HANDLE ConsoleHandle
;
466 } CONSOLE_DUPLICATEHANDLE
, *PCONSOLE_DUPLICATEHANDLE
;
471 typedef enum _CONSOLE_HANDLE_TYPE
475 } CONSOLE_HANDLE_TYPE
;
479 HANDLE ConsoleHandle
;
480 CONSOLE_HANDLE_TYPE HandleType
;
484 } CONSOLE_OPENCONSOLE
, *PCONSOLE_OPENCONSOLE
;
491 } CONSOLE_GETLARGESTWINDOWSIZE
, *PCONSOLE_GETLARGESTWINDOWSIZE
;
499 } CONSOLE_MENUCONTROL
, *PCONSOLE_MENUCONTROL
;
504 } CONSOLE_SETMENUCLOSE
, *PCONSOLE_SETMENUCLOSE
;
510 SMALL_RECT WindowRect
; // New console window position in the screen-buffer frame (Absolute == TRUE)
511 // or in the old window position frame (Absolute == FALSE).
512 } CONSOLE_SETWINDOWINFO
, *PCONSOLE_SETWINDOWINFO
;
517 } CONSOLE_GETWINDOW
, *PCONSOLE_GETWINDOW
;
522 } CONSOLE_SETICON
, *PCONSOLE_SETICON
;
529 ULONG TargetLength
; // Also used for storing the number of bytes written.
534 } CONSOLE_ADDGETALIAS
, *PCONSOLE_ADDGETALIAS
;
539 DWORD AliasesBufferLength
;
541 LPWSTR AliasesBuffer
;
542 } CONSOLE_GETALLALIASES
, *PCONSOLE_GETALLALIASES
;
549 } CONSOLE_GETALLALIASESLENGTH
, *PCONSOLE_GETALLALIASESLENGTH
;
555 } CONSOLE_GETALIASESEXES
, *PCONSOLE_GETALIASESEXES
;
560 } CONSOLE_GETALIASESEXESLENGTH
, *PCONSOLE_GETALIASESEXESLENGTH
;
566 UNICODE_STRING ExeName
;
569 } CONSOLE_GETCOMMANDHISTORY
, *PCONSOLE_GETCOMMANDHISTORY
;
573 UNICODE_STRING ExeName
;
575 } CONSOLE_GETCOMMANDHISTORYLENGTH
, *PCONSOLE_GETCOMMANDHISTORYLENGTH
;
579 UNICODE_STRING ExeName
;
580 } CONSOLE_EXPUNGECOMMANDHISTORY
, *PCONSOLE_EXPUNGECOMMANDHISTORY
;
584 UNICODE_STRING ExeName
;
586 } CONSOLE_SETHISTORYNUMBERCOMMANDS
, *PCONSOLE_SETHISTORYNUMBERCOMMANDS
;
590 UINT HistoryBufferSize
;
591 UINT NumberOfHistoryBuffers
;
593 } CONSOLE_GETSETHISTORYINFO
, *PCONSOLE_GETSETHISTORYINFO
;
601 } CONSOLE_GENERATECTRLEVENT
, *PCONSOLE_GENERATECTRLEVENT
;
606 DWORD NumInputEvents
;
607 } CONSOLE_GETNUMINPUTEVENTS
, *PCONSOLE_GETNUMINPUTEVENTS
;
613 } CONSOLE_SETSCREENBUFFERSIZE
, *PCONSOLE_SETSCREENBUFFERSIZE
;
617 CONSOLE_SELECTION_INFO Info
;
618 } CONSOLE_GETSELECTIONINFO
, *PCONSOLE_GETSELECTIONINFO
;
622 BOOL InputCP
; // TRUE : Input Code Page ; FALSE : Output Code Page
624 } CONSOLE_GETSETINPUTOUTPUTCP
, *PCONSOLE_GETSETINPUTOUTPUTCP
;
626 typedef struct _CONSOLE_API_MESSAGE
630 PCSR_CAPTURE_BUFFER CsrCaptureData
;
631 CSR_API_NUMBER ApiNumber
;
636 /* Console initialization and uninitialization */
637 CONSOLE_ALLOCCONSOLE AllocConsoleRequest
;
638 CONSOLE_ATTACHCONSOLE AttachConsoleRequest
;
639 CONSOLE_FREECONSOLE FreeConsoleRequest
;
642 CONSOLE_GETPROCESSLIST GetProcessListRequest
;
645 CONSOLE_OPENCONSOLE OpenConsoleRequest
;
646 CONSOLE_CLOSEHANDLE CloseHandleRequest
;
647 CONSOLE_VERIFYHANDLE VerifyHandleRequest
;
648 CONSOLE_DUPLICATEHANDLE DuplicateHandleRequest
;
651 CONSOLE_SHOWCURSOR ShowCursorRequest
;
652 CONSOLE_SETCURSOR SetCursorRequest
;
653 CONSOLE_GETSETCURSORINFO CursorInfoRequest
;
654 CONSOLE_SETCURSORPOSITION SetCursorPositionRequest
;
657 CONSOLE_CREATESCREENBUFFER CreateScreenBufferRequest
;
658 CONSOLE_SETACTIVESCREENBUFFER SetScreenBufferRequest
;
659 CONSOLE_GETSCREENBUFFERINFO ScreenBufferInfoRequest
;
660 CONSOLE_SETSCREENBUFFERSIZE SetScreenBufferSizeRequest
;
661 CONSOLE_SCROLLSCREENBUFFER ScrollScreenBufferRequest
;
663 CONSOLE_GETSELECTIONINFO GetSelectionInfoRequest
;
664 CONSOLE_FLUSHINPUTBUFFER FlushInputBufferRequest
;
667 CONSOLE_GETSETCONSOLEMODE ConsoleModeRequest
;
668 CONSOLE_GETDISPLAYMODE GetDisplayModeRequest
;
669 CONSOLE_SETDISPLAYMODE SetDisplayModeRequest
;
670 CONSOLE_GETSETHWSTATE HardwareStateRequest
;
673 CONSOLE_INVALIDATEDIBITS InvalidateDIBitsRequest
;
674 CONSOLE_SETPALETTE SetPaletteRequest
;
675 CONSOLE_GETSETCONSOLETITLE TitleRequest
;
676 CONSOLE_GETLARGESTWINDOWSIZE GetLargestWindowSizeRequest
;
677 CONSOLE_MENUCONTROL MenuControlRequest
;
678 CONSOLE_SETMENUCLOSE SetMenuCloseRequest
;
679 CONSOLE_SETWINDOWINFO SetWindowInfoRequest
;
680 CONSOLE_GETWINDOW GetWindowRequest
;
681 CONSOLE_SETICON SetIconRequest
;
684 CONSOLE_READCONSOLE ReadConsoleRequest
; // SrvReadConsole / ReadConsole
685 CONSOLE_GETINPUT GetInputRequest
; // SrvGetConsoleInput / PeekConsoleInput & ReadConsoleInput
686 CONSOLE_READOUTPUT ReadOutputRequest
; // SrvReadConsoleOutput / ReadConsoleOutput
687 CONSOLE_READOUTPUTCODE ReadOutputCodeRequest
; // SrvReadConsoleOutputString / ReadConsoleOutputAttribute & ReadConsoleOutputCharacter
690 CONSOLE_WRITECONSOLE WriteConsoleRequest
; // SrvWriteConsole / WriteConsole
691 CONSOLE_WRITEINPUT WriteInputRequest
;
692 CONSOLE_WRITEOUTPUT WriteOutputRequest
;
693 CONSOLE_WRITEOUTPUTCODE WriteOutputCodeRequest
;
695 CONSOLE_FILLOUTPUTCODE FillOutputRequest
;
696 CONSOLE_SETTEXTATTRIB SetTextAttribRequest
;
699 CONSOLE_ADDGETALIAS ConsoleAliasRequest
;
700 CONSOLE_GETALLALIASES GetAllAliasesRequest
;
701 CONSOLE_GETALLALIASESLENGTH GetAllAliasesLengthRequest
;
702 CONSOLE_GETALIASESEXES GetAliasesExesRequest
;
703 CONSOLE_GETALIASESEXESLENGTH GetAliasesExesLengthRequest
;
706 CONSOLE_GETCOMMANDHISTORY GetCommandHistoryRequest
;
707 CONSOLE_GETCOMMANDHISTORYLENGTH GetCommandHistoryLengthRequest
;
708 CONSOLE_EXPUNGECOMMANDHISTORY ExpungeCommandHistoryRequest
;
709 CONSOLE_SETHISTORYNUMBERCOMMANDS SetHistoryNumberCommandsRequest
;
710 CONSOLE_GETSETHISTORYINFO HistoryInfoRequest
;
712 CONSOLE_GENERATECTRLEVENT GenerateCtrlEventRequest
;
713 CONSOLE_GETNUMINPUTEVENTS GetNumInputEventsRequest
;
715 /* Input and Output Code Pages */
716 CONSOLE_GETSETINPUTOUTPUTCP ConsoleCPRequest
;
718 } CONSOLE_API_MESSAGE
, *PCONSOLE_API_MESSAGE
;
720 // Check that a CONSOLE_API_MESSAGE can hold in a CSR_API_MESSAGE.
721 CHECK_API_MSG_SIZE(CONSOLE_API_MESSAGE
);