Sync with trunk r58151 to bring the latest changes from Amine and Timo.
[reactos.git] / include / reactos / subsys / win / conmsg.h
1 /*
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)
8 */
9
10 #ifndef _CONMSG_H
11 #define _CONMSG_H
12
13 #pragma once
14
15 #define CONSRV_SERVERDLL_INDEX 2
16 #define CONSRV_FIRST_API_NUMBER 512
17
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
22 {
23 ConsolepOpenConsole = CONSRV_FIRST_API_NUMBER,
24 ConsolepGetConsoleInput,
25 ConsolepWriteConsoleInput,
26 ConsolepReadConsoleOutput,
27 ConsolepWriteConsoleOutput,
28 ConsolepReadConsoleOutputString,
29 ConsolepWriteConsoleOutputString,
30 ConsolepFillConsoleOutput,
31 ConsolepGetMode,
32 // ConsolepGetNumberOfFonts,
33 ConsolepGetNumberOfInputEvents,
34 ConsolepGetScreenBufferInfo,
35 ConsolepGetCursorInfo,
36 // ConsolepGetMouseInfo,
37 // ConsolepGetFontInfo,
38 // ConsolepGetFontSize,
39 // ConsolepGetCurrentFont,
40 ConsolepSetMode,
41 ConsolepSetActiveScreenBuffer,
42 ConsolepFlushInputBuffer,
43 // ConsolepGetLargestWindowSize,
44 ConsolepSetScreenBufferSize,
45 ConsolepSetCursorPosition,
46 ConsolepSetCursorInfo,
47 // ConsolepSetWindowInfo,
48 ConsolepScrollScreenBuffer,
49 ConsolepSetTextAttribute,
50 // ConsolepSetFont,
51 ConsolepSetIcon,
52 ConsolepReadConsole,
53 ConsolepWriteConsole,
54 ConsolepDuplicateHandle,
55 // ConsolepGetHandleInformation,
56 // ConsolepSetHandleInformation,
57 ConsolepCloseHandle,
58 ConsolepVerifyIoHandle,
59 ConsolepAlloc,
60 ConsolepFree,
61 ConsolepGetTitle,
62 ConsolepSetTitle,
63 ConsolepCreateScreenBuffer,
64 // ConsolepInvalidateBitMapRect,
65 // ConsolepVDMOperation,
66 // ConsolepSetCursor,
67 // ConsolepShowCursor,
68 // ConsolepMenuControl,
69 // ConsolepSetPalette,
70 // ConsolepSetDisplayMode,
71 // ConsolepRegisterVDM,
72 ConsolepGetHardwareState,
73 ConsolepSetHardwareState,
74 // ConsolepGetDisplayMode,
75 ConsolepAddAlias,
76 ConsolepGetAlias,
77 ConsolepGetAliasesLength,
78 ConsolepGetAliasExesLength,
79 ConsolepGetAliases,
80 ConsolepGetAliasExes,
81 ConsolepExpungeCommandHistory,
82 ConsolepSetNumberOfCommands,
83 ConsolepGetCommandHistoryLength,
84 ConsolepGetCommandHistory,
85 // ConsolepSetCommandHistoryMode,
86 ConsolepGetCP,
87 ConsolepSetCP,
88 // ConsolepSetKeyShortcuts,
89 // ConsolepSetMenuClose,
90 // ConsolepNotifyLastClose,
91 ConsolepGenerateCtrlEvent,
92 // ConsolepGetKeyboardLayoutName,
93 ConsolepGetConsoleWindow,
94 // ConsolepCharType,
95 // ConsolepSetLocalEUDC,
96 // ConsolepSetCursorMode,
97 // ConsolepGetCursorMode,
98 // ConsolepRegisterOS2,
99 // ConsolepSetOS2OemFormat,
100 // ConsolepGetNlsMode,
101 // ConsolepSetNlsMode,
102 // ConsolepRegisterConsoleIME,
103 // ConsolepUnregisterConsoleIME,
104 // ConsolepGetLangId,
105 // ConsolepAttach,
106 ConsolepGetSelectionInfo,
107 ConsolepGetProcessList,
108 ConsolepGetHistory,
109 ConsolepSetHistory,
110
111 ConsolepMaxApiNumber
112 } CONSRV_API_NUMBER, *PCONSRV_API_NUMBER;
113
114
115 typedef struct _CONSOLE_CONNECTION_INFO
116 {
117 BOOL ConsoleNeeded; // Used for GUI apps only.
118
119 /* Copied from CONSOLE_ALLOCCONSOLE */
120 INT ShowCmd;
121 HANDLE Console; // ConsoleHandle // In fact, it is a PCSRSS_CONSOLE <-- correct that !!
122 HANDLE InputHandle;
123 HANDLE OutputHandle;
124 HANDLE ErrorHandle;
125 HANDLE InputWaitHandle;
126 LPTHREAD_START_ROUTINE CtrlDispatcher;
127 } CONSOLE_CONNECTION_INFO, *PCONSOLE_CONNECTION_INFO;
128
129
130 #define CONSOLE_INPUT_MODE_VALID 0x0f
131 #define CONSOLE_OUTPUT_MODE_VALID 0x03
132
133
134 typedef struct
135 {
136 USHORT nMaxIds;
137 ULONG nProcessIdsTotal;
138 PDWORD pProcessIds;
139 } CONSOLE_GETPROCESSLIST, *PCONSOLE_GETPROCESSLIST;
140
141 typedef struct
142 {
143 HANDLE OutputHandle;
144
145 BOOL Unicode;
146 ULONG NrCharactersToWrite;
147 ULONG NrCharactersWritten;
148
149 ULONG BufferSize;
150 PVOID Buffer;
151 } CONSOLE_WRITECONSOLE, *PCONSOLE_WRITECONSOLE;
152
153 typedef struct
154 {
155 HANDLE InputHandle;
156
157 BOOL Unicode;
158 WORD NrCharactersToRead;
159 WORD NrCharactersRead;
160
161 UNICODE_STRING ExeName;
162 DWORD CtrlWakeupMask;
163 DWORD ControlKeyState;
164
165 ULONG BufferSize;
166 PVOID Buffer;
167 } CONSOLE_READCONSOLE, *PCONSOLE_READCONSOLE;
168
169 typedef struct
170 {
171 INT ShowCmd;
172 HANDLE Console; // ConsoleHandle // In fact, it is a PCSRSS_CONSOLE <-- correct that !!
173 HANDLE InputHandle;
174 HANDLE OutputHandle;
175 HANDLE ErrorHandle;
176 HANDLE InputWaitHandle;
177 LPTHREAD_START_ROUTINE CtrlDispatcher;
178 } CONSOLE_ALLOCCONSOLE, *PCONSOLE_ALLOCCONSOLE;
179
180 typedef struct
181 {
182 ULONG Dummy;
183 } CONSOLE_FREECONSOLE, *PCONSOLE_FREECONSOLE;
184
185 typedef struct
186 {
187 HANDLE OutputHandle;
188 CONSOLE_SCREEN_BUFFER_INFO Info;
189 } CONSOLE_GETSCREENBUFFERINFO, *PCONSOLE_GETSCREENBUFFERINFO;
190
191 typedef struct
192 {
193 HANDLE OutputHandle;
194 COORD Position;
195 } CONSOLE_SETCURSORPOSITION, *PCONSOLE_SETCURSORPOSITION;
196
197 typedef struct
198 {
199 HANDLE OutputHandle;
200 CONSOLE_CURSOR_INFO Info;
201 } CONSOLE_GETSETCURSORINFO, *PCONSOLE_GETSETCURSORINFO;
202
203 typedef struct
204 {
205 HANDLE OutputHandle;
206 WORD Attrib;
207 } CONSOLE_SETTEXTATTRIB, *PCONSOLE_SETTEXTATTRIB;
208
209 typedef struct
210 {
211 HANDLE ConsoleHandle; /* A valid input or output console handle */
212 DWORD ConsoleMode;
213 } CONSOLE_GETSETCONSOLEMODE, *PCONSOLE_GETSETCONSOLEMODE;
214
215 typedef struct
216 {
217 HANDLE OutputHandle; /* Handle to newly created screen buffer */
218
219 DWORD Access;
220 DWORD ShareMode;
221 BOOL Inheritable;
222 } CONSOLE_CREATESCREENBUFFER, *PCONSOLE_CREATESCREENBUFFER;
223
224 typedef struct
225 {
226 HANDLE OutputHandle; /* Handle to screen buffer to switch to */
227 } CONSOLE_SETACTIVESCREENBUFFER, *PCONSOLE_SETACTIVESCREENBUFFER;
228
229 typedef struct
230 {
231 DWORD Length;
232 PWCHAR Title;
233 } CONSOLE_GETSETCONSOLETITLE, *PCONSOLE_GETSETCONSOLETITLE;
234
235 typedef struct
236 {
237 HANDLE OutputHandle;
238
239 BOOL Unicode;
240 COORD BufferSize;
241 COORD BufferCoord;
242 SMALL_RECT WriteRegion;
243 CHAR_INFO* CharInfo;
244 } CONSOLE_WRITEOUTPUT, *PCONSOLE_WRITEOUTPUT;
245
246 typedef struct
247 {
248 HANDLE InputHandle;
249 } CONSOLE_FLUSHINPUTBUFFER, *PCONSOLE_FLUSHINPUTBUFFER;
250
251 typedef struct
252 {
253 HANDLE OutputHandle;
254
255 BOOL Unicode;
256 SMALL_RECT ScrollRectangle;
257 BOOL UseClipRectangle;
258 SMALL_RECT ClipRectangle;
259 COORD DestinationOrigin;
260 CHAR_INFO Fill;
261 } CONSOLE_SCROLLSCREENBUFFER, *PCONSOLE_SCROLLSCREENBUFFER;
262
263
264 /*
265 * An attribute or a character are instances of the same entity, namely
266 * a "code" (what would be called an (ANSI) escape sequence). Therefore
267 * encode them inside the same structure.
268 */
269 typedef enum _CODE_TYPE
270 {
271 CODE_ASCII = 0x01,
272 CODE_UNICODE = 0x02,
273 CODE_ATTRIBUTE = 0x03
274 } CODE_TYPE;
275
276 typedef struct
277 {
278 HANDLE OutputHandle;
279
280 DWORD NumCodesToRead;
281 COORD ReadCoord;
282 COORD EndCoord;
283
284 DWORD CodesRead;
285
286 CODE_TYPE CodeType;
287 union
288 {
289 PVOID pCode;
290 PCHAR AsciiChar;
291 PWCHAR UnicodeChar;
292 PWORD Attribute;
293 } pCode; // Either a pointer to a character or to an attribute.
294 } CONSOLE_READOUTPUTCODE, *PCONSOLE_READOUTPUTCODE;
295
296 typedef struct
297 {
298 HANDLE OutputHandle;
299
300 ULONG BufferSize;
301 WORD Length;
302 COORD Coord;
303 COORD EndCoord;
304
305 ULONG NrCharactersWritten;
306
307 USHORT CodeType;
308 union
309 {
310 // PVOID String;
311 PVOID pCode;
312 PCHAR AsciiChar;
313 PWCHAR UnicodeChar;
314 PWORD Attribute;
315 } pCode; // Either a pointer to a character or to an attribute.
316 } CONSOLE_WRITEOUTPUTCODE, *PCONSOLE_WRITEOUTPUTCODE;
317
318 typedef struct
319 {
320 HANDLE OutputHandle;
321
322 CODE_TYPE CodeType;
323 union
324 {
325 CHAR AsciiChar;
326 WCHAR UnicodeChar;
327 WORD Attribute;
328 } Code; // Either a character or an attribute.
329
330 COORD Coord;
331 ULONG Length;
332
333 ULONG NrCharactersWritten; // FIXME: Only for chars, is it removable ?
334 } CONSOLE_FILLOUTPUTCODE, *PCONSOLE_FILLOUTPUTCODE;
335
336 typedef struct
337 {
338 HANDLE InputHandle;
339 BOOL Unicode;
340 BOOL bRead; // TRUE --> Read ; FALSE --> Peek
341
342 ULONG InputsRead;
343
344 ULONG Length;
345 PINPUT_RECORD InputRecord;
346 } CONSOLE_GETINPUT, *PCONSOLE_GETINPUT;
347
348 typedef struct
349 {
350 HANDLE OutputHandle;
351
352 BOOL Unicode;
353 COORD BufferSize;
354 COORD BufferCoord;
355 SMALL_RECT ReadRegion;
356 CHAR_INFO* CharInfo;
357 } CONSOLE_READOUTPUT, *PCONSOLE_READOUTPUT;
358
359 typedef struct
360 {
361 HANDLE InputHandle;
362 BOOL Unicode;
363 DWORD Length;
364 INPUT_RECORD* InputRecord;
365 } CONSOLE_WRITEINPUT, *PCONSOLE_WRITEINPUT;
366
367 typedef struct
368 {
369 HANDLE ConsoleHandle;
370 } CONSOLE_CLOSEHANDLE, *PCONSOLE_CLOSEHANDLE;
371
372 typedef struct
373 {
374 HANDLE ConsoleHandle;
375 } CONSOLE_VERIFYHANDLE, *PCONSOLE_VERIFYHANDLE;
376
377 typedef struct
378 {
379 HANDLE ConsoleHandle;
380 DWORD Access;
381 BOOL Inheritable;
382 DWORD Options;
383 } CONSOLE_DUPLICATEHANDLE, *PCONSOLE_DUPLICATEHANDLE;
384
385 /*
386 * Type of handles.
387 */
388 typedef enum _CONSOLE_HANDLE_TYPE
389 {
390 HANDLE_INPUT = 0x01,
391 HANDLE_OUTPUT = 0x02
392 } CONSOLE_HANDLE_TYPE;
393
394 typedef struct
395 {
396 HANDLE ConsoleHandle;
397 CONSOLE_HANDLE_TYPE HandleType;
398 DWORD Access;
399 BOOL Inheritable;
400 DWORD ShareMode;
401 } CONSOLE_OPENCONSOLE, *PCONSOLE_OPENCONSOLE;
402
403 #if 0
404 typedef struct
405 {
406 HANDLE InputWaitHandle;
407 } CSRSS_GET_INPUT_WAIT_HANDLE, *PCSRSS_GET_INPUT_WAIT_HANDLE;
408 #endif
409
410
411 /*
412 * Console hardware states.
413 */
414 #define CONSOLE_HARDWARE_STATE_GDI_MANAGED 0
415 #define CONSOLE_HARDWARE_STATE_DIRECT 1
416
417 typedef struct
418 {
419 HANDLE OutputHandle;
420 DWORD State;
421 } CONSOLE_GETSETHWSTATE, *PCONSOLE_GETSETHWSTATE;
422
423 typedef struct
424 {
425 HWND WindowHandle;
426 } CONSOLE_GETWINDOW, *PCONSOLE_GETWINDOW;
427
428 typedef struct
429 {
430 HICON WindowIcon;
431 } CONSOLE_SETICON, *PCONSOLE_SETICON;
432
433
434
435 typedef struct
436 {
437 ULONG SourceLength;
438 ULONG TargetLength; // Also used for storing the number of bytes written.
439 ULONG ExeLength;
440 LPWSTR Source;
441 LPWSTR Target;
442 LPWSTR Exe;
443 } CONSOLE_ADDGETALIAS, *PCONSOLE_ADDGETALIAS;
444
445 typedef struct
446 {
447 DWORD ExeLength;
448 DWORD AliasesBufferLength;
449 LPWSTR ExeName;
450 LPWSTR AliasesBuffer;
451 } CONSOLE_GETALLALIASES, *PCONSOLE_GETALLALIASES;
452
453 typedef struct
454 {
455 DWORD Length;
456 DWORD ExeLength;
457 LPWSTR ExeName;
458 } CONSOLE_GETALLALIASESLENGTH, *PCONSOLE_GETALLALIASESLENGTH;
459
460 typedef struct
461 {
462 DWORD Length;
463 LPWSTR ExeNames;
464 } CONSOLE_GETALIASESEXES, *PCONSOLE_GETALIASESEXES;
465
466 typedef struct
467 {
468 DWORD Length;
469 } CONSOLE_GETALIASESEXESLENGTH, *PCONSOLE_GETALIASESEXESLENGTH;
470
471
472
473 typedef struct
474 {
475 UNICODE_STRING ExeName;
476 PWCHAR History;
477 DWORD Length;
478 } CONSOLE_GETCOMMANDHISTORY, *PCONSOLE_GETCOMMANDHISTORY;
479
480 typedef struct
481 {
482 UNICODE_STRING ExeName;
483 DWORD Length;
484 } CONSOLE_GETCOMMANDHISTORYLENGTH, *PCONSOLE_GETCOMMANDHISTORYLENGTH;
485
486 typedef struct
487 {
488 UNICODE_STRING ExeName;
489 } CONSOLE_EXPUNGECOMMANDHISTORY, *PCONSOLE_EXPUNGECOMMANDHISTORY;
490
491 typedef struct
492 {
493 UNICODE_STRING ExeName;
494 DWORD NumCommands;
495 } CONSOLE_SETHISTORYNUMBERCOMMANDS, *PCONSOLE_SETHISTORYNUMBERCOMMANDS;
496
497 typedef struct
498 {
499 UINT HistoryBufferSize;
500 UINT NumberOfHistoryBuffers;
501 DWORD dwFlags;
502 } CONSOLE_GETSETHISTORYINFO, *PCONSOLE_GETSETHISTORYINFO;
503
504
505
506 typedef struct
507 {
508 DWORD Event;
509 DWORD ProcessGroup;
510 } CONSOLE_GENERATECTRLEVENT, *PCONSOLE_GENERATECTRLEVENT;
511
512 typedef struct
513 {
514 HANDLE InputHandle;
515 DWORD NumInputEvents;
516 } CONSOLE_GETNUMINPUTEVENTS, *PCONSOLE_GETNUMINPUTEVENTS;
517
518 typedef struct
519 {
520 HANDLE OutputHandle;
521 COORD Size;
522 } CONSOLE_SETSCREENBUFFERSIZE, *PCONSOLE_SETSCREENBUFFERSIZE;
523
524 typedef struct
525 {
526 CONSOLE_SELECTION_INFO Info;
527 } CONSOLE_GETSELECTIONINFO, *PCONSOLE_GETSELECTIONINFO;
528
529 typedef struct
530 {
531 BOOL InputCP; // TRUE : Input Code Page ; FALSE : Output Code Page
532 UINT CodePage;
533 } CONSOLE_GETSETINPUTOUTPUTCP, *PCONSOLE_GETSETINPUTOUTPUTCP;
534
535 typedef struct _CONSOLE_API_MESSAGE
536 {
537 PORT_MESSAGE Header;
538
539 PCSR_CAPTURE_BUFFER CsrCaptureData;
540 CSR_API_NUMBER ApiNumber;
541 ULONG Status; // ReturnValue; // NTSTATUS Status
542 ULONG Reserved;
543 union
544 {
545 CONSOLE_ALLOCCONSOLE AllocConsoleRequest;
546 CONSOLE_FREECONSOLE FreeConsoleRequest;
547
548 /* Handles */
549 CONSOLE_OPENCONSOLE OpenConsoleRequest;
550 CONSOLE_CLOSEHANDLE CloseHandleRequest;
551 CONSOLE_VERIFYHANDLE VerifyHandleRequest;
552 CONSOLE_DUPLICATEHANDLE DuplicateHandleRequest;
553 #if 0
554 CSRSS_GET_INPUT_WAIT_HANDLE GetConsoleInputWaitHandle;
555 #endif
556
557 /* Cursor */
558 CONSOLE_GETSETCURSORINFO CursorInfoRequest;
559 CONSOLE_SETCURSORPOSITION SetCursorPositionRequest;
560
561 /* Screen buffer */
562 CONSOLE_CREATESCREENBUFFER CreateScreenBufferRequest;
563 CONSOLE_SETACTIVESCREENBUFFER SetScreenBufferRequest;
564 CONSOLE_GETSCREENBUFFERINFO ScreenBufferInfoRequest;
565 CONSOLE_SETSCREENBUFFERSIZE SetScreenBufferSizeRequest;
566 CONSOLE_SCROLLSCREENBUFFER ScrollScreenBufferRequest;
567
568 CONSOLE_GETSELECTIONINFO GetSelectionInfoRequest;
569 CONSOLE_FLUSHINPUTBUFFER FlushInputBufferRequest;
570
571 /* Console mode */
572 CONSOLE_GETSETCONSOLEMODE ConsoleModeRequest;
573 CONSOLE_GETSETHWSTATE HardwareStateRequest;
574
575 /* Console window */
576 CONSOLE_GETSETCONSOLETITLE TitleRequest;
577 CONSOLE_GETWINDOW GetWindowRequest;
578 CONSOLE_SETICON SetIconRequest;
579
580 /* Read */
581 CONSOLE_READCONSOLE ReadConsoleRequest; // SrvReadConsole / ReadConsole
582 CONSOLE_GETINPUT GetInputRequest; // SrvGetConsoleInput / PeekConsoleInput & ReadConsoleInput
583 CONSOLE_READOUTPUT ReadOutputRequest; // SrvReadConsoleOutput / ReadConsoleOutput
584 CONSOLE_READOUTPUTCODE ReadOutputCodeRequest; // SrvReadConsoleOutputString / ReadConsoleOutputAttribute & ReadConsoleOutputCharacter
585
586 /* Write */
587 CONSOLE_WRITECONSOLE WriteConsoleRequest; // SrvWriteConsole / WriteConsole
588 CONSOLE_WRITEINPUT WriteInputRequest;
589 CONSOLE_WRITEOUTPUT WriteOutputRequest;
590 CONSOLE_WRITEOUTPUTCODE WriteOutputCodeRequest;
591
592 CONSOLE_FILLOUTPUTCODE FillOutputRequest;
593 CONSOLE_SETTEXTATTRIB SetTextAttribRequest;
594
595 /* Aliases */
596 CONSOLE_ADDGETALIAS ConsoleAliasRequest;
597 CONSOLE_GETALLALIASES GetAllAliasesRequest;
598 CONSOLE_GETALLALIASESLENGTH GetAllAliasesLengthRequest;
599 CONSOLE_GETALIASESEXES GetAliasesExesRequest;
600 CONSOLE_GETALIASESEXESLENGTH GetAliasesExesLengthRequest;
601
602 /* History */
603 CONSOLE_GETCOMMANDHISTORY GetCommandHistoryRequest;
604 CONSOLE_GETCOMMANDHISTORYLENGTH GetCommandHistoryLengthRequest;
605 CONSOLE_EXPUNGECOMMANDHISTORY ExpungeCommandHistoryRequest;
606 CONSOLE_SETHISTORYNUMBERCOMMANDS SetHistoryNumberCommandsRequest;
607 CONSOLE_GETSETHISTORYINFO HistoryInfoRequest;
608
609 CONSOLE_GENERATECTRLEVENT GenerateCtrlEventRequest;
610 CONSOLE_GETNUMINPUTEVENTS GetNumInputEventsRequest;
611
612 /* Input and Output Code Pages */
613 CONSOLE_GETSETINPUTOUTPUTCP ConsoleCPRequest;
614
615 CONSOLE_GETPROCESSLIST GetProcessListRequest;
616 } Data;
617 } CONSOLE_API_MESSAGE, *PCONSOLE_API_MESSAGE;
618
619 // Check that a CONSOLE_API_MESSAGE can hold in a CSR_API_MESSAGE.
620 CHECK_API_MSG_SIZE(CONSOLE_API_MESSAGE);
621
622 #endif // _CONMSG_H
623
624 /* EOF */