xref: /reactos/sdk/include/reactos/subsys/win/conmsg.h (revision 139a3d66)
1 /*
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)
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 Server 2003 table from http://j00ru.vexillium.org/csrss_list/api_list.html#Windows_2k3
19 typedef enum _CONSRV_API_NUMBER
20 {
21     ConsolepOpenConsole = CONSRV_FIRST_API_NUMBER,
22     ConsolepGetConsoleInput,
23     ConsolepWriteConsoleInput,
24     ConsolepReadConsoleOutput,
25     ConsolepWriteConsoleOutput,
26     ConsolepReadConsoleOutputString,
27     ConsolepWriteConsoleOutputString,
28     ConsolepFillConsoleOutput,
29     ConsolepGetMode,
30     ConsolepGetNumberOfFonts,
31     ConsolepGetNumberOfInputEvents,
32     ConsolepGetScreenBufferInfo,
33     ConsolepGetCursorInfo,
34     ConsolepGetMouseInfo,
35     ConsolepGetFontInfo,
36     ConsolepGetFontSize,
37     ConsolepGetCurrentFont,
38     ConsolepSetMode,
39     ConsolepSetActiveScreenBuffer,
40     ConsolepFlushInputBuffer,
41     ConsolepGetLargestWindowSize,
42     ConsolepSetScreenBufferSize,
43     ConsolepSetCursorPosition,
44     ConsolepSetCursorInfo,
45     ConsolepSetWindowInfo,
46     ConsolepScrollScreenBuffer,
47     ConsolepSetTextAttribute,
48     ConsolepSetFont,
49     ConsolepSetIcon,
50     ConsolepReadConsole,
51     ConsolepWriteConsole,
52     ConsolepDuplicateHandle,
53     ConsolepGetHandleInformation,
54     ConsolepSetHandleInformation,
55     ConsolepCloseHandle,
56     ConsolepVerifyIoHandle,
57     ConsolepAlloc,                          // Not present in Win7
58     ConsolepFree,                           // Not present in Win7
59     ConsolepGetTitle,
60     ConsolepSetTitle,
61     ConsolepCreateScreenBuffer,
62     ConsolepInvalidateBitMapRect,
63     ConsolepVDMOperation,
64     ConsolepSetCursor,
65     ConsolepShowCursor,
66     ConsolepMenuControl,
67     ConsolepSetPalette,
68     ConsolepSetDisplayMode,
69     ConsolepRegisterVDM,
70     ConsolepGetHardwareState,
71     ConsolepSetHardwareState,
72     ConsolepGetDisplayMode,
73     ConsolepAddAlias,
74     ConsolepGetAlias,
75     ConsolepGetAliasesLength,
76     ConsolepGetAliasExesLength,
77     ConsolepGetAliases,
78     ConsolepGetAliasExes,
79     ConsolepExpungeCommandHistory,
80     ConsolepSetNumberOfCommands,
81     ConsolepGetCommandHistoryLength,
82     ConsolepGetCommandHistory,
83     ConsolepSetCommandHistoryMode,          // Not present in Vista+
84     ConsolepGetCP,
85     ConsolepSetCP,
86     ConsolepSetKeyShortcuts,
87     ConsolepSetMenuClose,
88     ConsolepNotifyLastClose,
89     ConsolepGenerateCtrlEvent,
90     ConsolepGetKeyboardLayoutName,
91     ConsolepGetConsoleWindow,
92     ConsolepCharType,
93     ConsolepSetLocalEUDC,
94     ConsolepSetCursorMode,
95     ConsolepGetCursorMode,
96     ConsolepRegisterOS2,
97     ConsolepSetOS2OemFormat,
98     ConsolepGetNlsMode,
99     ConsolepSetNlsMode,
100     ConsolepRegisterConsoleIME,             // Not present in Win7
101     ConsolepUnregisterConsoleIME,           // Not present in Win7
102     // ConsolepQueryConsoleIME,                // Added only in Vista and Win2k8, not present in Win7
103     ConsolepGetLangId,
104     ConsolepAttach,                         // Not present in Win7
105     ConsolepGetSelectionInfo,
106     ConsolepGetProcessList,
107 
108     ConsolepGetHistory,                     // Added in Vista+
109     ConsolepSetHistory,                     // Added in Vista+
110     // ConsolepSetCurrentFont,                 // Added in Vista+
111     // ConsolepSetScreenBufferInfo,            // Added in Vista+
112     // ConsolepClientConnect,                  // Added in Win7
113 
114     ConsolepMaxApiNumber
115 } CONSRV_API_NUMBER, *PCONSRV_API_NUMBER;
116 
117 //
118 // See http://msdn.microsoft.com/en-us/library/windows/desktop/bb773359(v=vs.85).aspx
119 //
120 typedef struct _CONSOLE_PROPERTIES
121 {
122     INT   IconIndex;
123     HICON hIcon;
124     HICON hIconSm;
125     DWORD dwHotKey;
126     DWORD dwStartupFlags;
127 
128     // NT_CONSOLE_PROPS
129     WORD wFillAttribute;
130     WORD wPopupFillAttribute;
131 
132     //
133     // Not on MSDN, but show up in binary
134     //
135     WORD wShowWindow;
136     WORD wUnknown;
137 
138     COORD dwScreenBufferSize;
139     COORD dwWindowSize;
140     COORD dwWindowOrigin;
141     DWORD nFont;
142     DWORD nInputBufferSize;
143     COORD dwFontSize;
144     UINT  uFontFamily;
145     UINT  uFontWeight;
146     WCHAR FaceName[LF_FACESIZE];
147     UINT  uCursorSize;
148     BOOL  bFullScreen;
149     BOOL  bQuickEdit;
150     BOOL  bInsertMode;
151     BOOL  bAutoPosition;
152     UINT  uHistoryBufferSize;
153     UINT  uNumberOfHistoryBuffers;
154     BOOL  bHistoryNoDup;
155     COLORREF ColorTable[16];
156 
157     // NT_FE_CONSOLE_PROPS
158     UINT uCodePage;
159 } CONSOLE_PROPERTIES;
160 
161 enum
162 {
163     INIT_SUCCESS, // STATUS_WAIT_0
164     INIT_FAILURE, // STATUS_WAIT_1
165     MAX_INIT_EVENTS
166 };
167 
168 typedef struct _CONSOLE_START_INFO
169 {
170     HANDLE ConsoleHandle;
171     HANDLE InputWaitHandle;
172     HANDLE InputHandle;
173     HANDLE OutputHandle;
174     HANDLE ErrorHandle;
175     HANDLE InitEvents[MAX_INIT_EVENTS];
176 
177     CONSOLE_PROPERTIES;
178 } CONSOLE_START_INFO, *PCONSOLE_START_INFO;
179 
180 #if defined(_M_IX86)
181 C_ASSERT(sizeof(CONSOLE_START_INFO) == 0xFC);
182 #endif
183 
184 typedef struct _CONSRV_API_CONNECTINFO
185 {
186     CONSOLE_START_INFO ConsoleStartInfo;
187 
188     BOOLEAN IsConsoleApp;
189     BOOLEAN IsWindowVisible;
190 
191     // USHORT Padding;
192 
193     LPTHREAD_START_ROUTINE CtrlRoutine;
194     LPTHREAD_START_ROUTINE PropRoutine;
195     LPTHREAD_START_ROUTINE ImeRoutine;
196 
197     ULONG  TitleLength;
198     WCHAR  ConsoleTitle[MAX_PATH + 1];  // Console title or full path to the startup shortcut
199     ULONG  DesktopLength;
200     PWCHAR Desktop;                     // Contrary to the case of CONSOLE_ALLOCCONSOLE, the
201                                         // desktop string is allocated in the process' heap,
202                                         // and CSR will read it via NtReadVirtualMemory.
203     ULONG  AppNameLength;
204     WCHAR  AppName[128];                // Full path of the launched app
205     ULONG  CurDirLength;
206     WCHAR  CurDir[MAX_PATH + 1];
207 } CONSRV_API_CONNECTINFO, *PCONSRV_API_CONNECTINFO;
208 
209 #if defined(_M_IX86)
210 C_ASSERT(sizeof(CONSRV_API_CONNECTINFO) == 0x638);
211 #endif
212 
213 typedef struct _CONSOLE_GETPROCESSLIST
214 {
215     HANDLE ConsoleHandle;
216     ULONG  ProcessCount;
217     PDWORD ProcessIdsList;
218 } CONSOLE_GETPROCESSLIST, *PCONSOLE_GETPROCESSLIST;
219 
220 typedef struct _CONSOLE_GENERATECTRLEVENT
221 {
222     HANDLE ConsoleHandle;
223     ULONG  CtrlEvent;
224     ULONG  ProcessGroupId;
225 } CONSOLE_GENERATECTRLEVENT, *PCONSOLE_GENERATECTRLEVENT;
226 
227 typedef struct _CONSOLE_NOTIFYLASTCLOSE
228 {
229     HANDLE ConsoleHandle;
230 } CONSOLE_NOTIFYLASTCLOSE, *PCONSOLE_NOTIFYLASTCLOSE;
231 
232 
233 
234 typedef struct _CONSOLE_WRITECONSOLE
235 {
236     HANDLE ConsoleHandle;
237     HANDLE OutputHandle;
238 
239     CHAR  StaticBuffer[80];
240     PVOID Buffer; // BufPtr
241     ULONG NumBytes;
242 
243     // On Windows, the client never uses this member
244     ULONG Reserved1;
245 
246     BOOLEAN UsingStaticBuffer;
247     BOOLEAN Unicode;
248 
249     // On Windows, the client never uses this member
250     CHAR Reserved2[6];
251 } CONSOLE_WRITECONSOLE, *PCONSOLE_WRITECONSOLE;
252 
253 typedef struct _CONSOLE_READCONSOLE
254 {
255     HANDLE ConsoleHandle;
256     HANDLE InputHandle;
257 
258     USHORT ExeLength;
259 
260     CHAR  StaticBuffer[80];
261     PVOID Buffer; // BufPtr
262     ULONG NumBytes;
263 
264     ULONG CaptureBufferSize;
265 
266     ULONG   InitialNumBytes;
267     ULONG   CtrlWakeupMask;
268     ULONG   ControlKeyState;
269     BOOLEAN Unicode;
270 } CONSOLE_READCONSOLE, *PCONSOLE_READCONSOLE;
271 
272 typedef struct _CONSOLE_ALLOCCONSOLE
273 {
274     PCONSOLE_START_INFO ConsoleStartInfo;
275 
276     ULONG  TitleLength;
277     PWCHAR ConsoleTitle;    // Console title or full path to the startup shortcut
278     ULONG  DesktopLength;
279     PWCHAR Desktop;
280     ULONG  AppNameLength;
281     PWCHAR AppName;         // Full path of the launched app
282     ULONG  CurDirLength;
283     PWCHAR CurDir;
284 
285     LPTHREAD_START_ROUTINE CtrlRoutine;
286     LPTHREAD_START_ROUTINE PropRoutine;
287 } CONSOLE_ALLOCCONSOLE, *PCONSOLE_ALLOCCONSOLE;
288 
289 typedef struct _CONSOLE_ATTACHCONSOLE
290 {
291     /*
292      * If ProcessId == ATTACH_PARENT_PROCESS == -1, then attach
293      * the current process to its parent process console.
294      */
295     ULONG ProcessId;
296 
297     PCONSOLE_START_INFO ConsoleStartInfo;
298 
299     LPTHREAD_START_ROUTINE CtrlRoutine;
300     LPTHREAD_START_ROUTINE PropRoutine;
301 } CONSOLE_ATTACHCONSOLE, *PCONSOLE_ATTACHCONSOLE;
302 
303 typedef struct _CONSOLE_FREECONSOLE
304 {
305     HANDLE ConsoleHandle;
306 } CONSOLE_FREECONSOLE, *PCONSOLE_FREECONSOLE;
307 
308 typedef struct _CONSOLE_GETSCREENBUFFERINFO
309 {
310     HANDLE ConsoleHandle;
311     HANDLE OutputHandle;
312     COORD  ScreenBufferSize;
313     COORD  CursorPosition;
314     COORD  ViewOrigin;
315     WORD   Attributes;
316     COORD  ViewSize;
317     COORD  MaximumViewSize;
318 } CONSOLE_GETSCREENBUFFERINFO, *PCONSOLE_GETSCREENBUFFERINFO;
319 
320 typedef struct _CONSOLE_SETCURSORPOSITION
321 {
322     HANDLE ConsoleHandle;
323     HANDLE OutputHandle;
324     COORD  Position;
325 } CONSOLE_SETCURSORPOSITION, *PCONSOLE_SETCURSORPOSITION;
326 
327 typedef struct _CONSOLE_SHOWCURSOR
328 {
329     HANDLE ConsoleHandle;
330     HANDLE OutputHandle;
331     BOOL   Show;
332     INT    RefCount;
333 } CONSOLE_SHOWCURSOR, *PCONSOLE_SHOWCURSOR;
334 
335 typedef struct _CONSOLE_SETCURSOR
336 {
337     HANDLE  ConsoleHandle;
338     HANDLE  OutputHandle;
339     HCURSOR CursorHandle;
340 } CONSOLE_SETCURSOR, *PCONSOLE_SETCURSOR;
341 
342 typedef struct _CONSOLE_GETSETCURSORINFO
343 {
344     HANDLE ConsoleHandle;
345     HANDLE OutputHandle;
346     CONSOLE_CURSOR_INFO Info;
347 /*
348     ULONG   Size;
349     BOOLEAN Visible;
350 */
351 } CONSOLE_GETSETCURSORINFO, *PCONSOLE_GETSETCURSORINFO;
352 
353 typedef struct _CONSOLE_GETMOUSEINFO
354 {
355     HANDLE ConsoleHandle;
356     ULONG  NumButtons;
357 } CONSOLE_GETMOUSEINFO, *PCONSOLE_GETMOUSEINFO;
358 
359 typedef struct _CONSOLE_SETTEXTATTRIB
360 {
361     HANDLE ConsoleHandle;
362     HANDLE OutputHandle;
363     WORD   Attributes;
364 } CONSOLE_SETTEXTATTRIB, *PCONSOLE_SETTEXTATTRIB;
365 
366 typedef struct _CONSOLE_GETSETCONSOLEMODE
367 {
368     HANDLE ConsoleHandle;
369     HANDLE Handle;
370     ULONG  Mode;
371 } CONSOLE_GETSETCONSOLEMODE, *PCONSOLE_GETSETCONSOLEMODE;
372 
373 typedef struct _CONSOLE_GETDISPLAYMODE
374 {
375     HANDLE ConsoleHandle;
376     ULONG  DisplayMode; // ModeFlags
377 } CONSOLE_GETDISPLAYMODE, *PCONSOLE_GETDISPLAYMODE;
378 
379 typedef struct _CONSOLE_SETDISPLAYMODE
380 {
381     HANDLE ConsoleHandle;
382     HANDLE OutputHandle;
383     ULONG  DisplayMode; // ModeFlags
384     COORD  NewSBDim;
385     HANDLE EventHandle;
386 } CONSOLE_SETDISPLAYMODE, *PCONSOLE_SETDISPLAYMODE;
387 
388 /*
389  * Console hardware states.
390  */
391 #define CONSOLE_HARDWARE_STATE_GDI_MANAGED 0
392 #define CONSOLE_HARDWARE_STATE_DIRECT      1
393 
394 typedef struct _CONSOLE_GETSETHWSTATE
395 {
396     HANDLE ConsoleHandle;
397     HANDLE OutputHandle;
398     ULONG  Flags;
399     ULONG  State;
400 } CONSOLE_GETSETHWSTATE, *PCONSOLE_GETSETHWSTATE;
401 
402 
403 typedef struct _CONSOLE_GETNUMFONTS
404 {
405     HANDLE ConsoleHandle;
406     ULONG  NumFonts;
407 } CONSOLE_GETNUMFONTS, *PCONSOLE_GETNUMFONTS;
408 
409 typedef struct _CONSOLE_GETFONTINFO
410 {
411     HANDLE  ConsoleHandle;
412     HANDLE  OutputHandle;
413     BOOLEAN MaximumWindow;
414     PCONSOLE_FONT_INFO FontInfo;
415     ULONG   NumFonts;
416 } CONSOLE_GETFONTINFO, *PCONSOLE_GETFONTINFO;
417 
418 typedef struct _CONSOLE_GETFONTSIZE
419 {
420     HANDLE ConsoleHandle;
421     HANDLE OutputHandle;
422     ULONG  FontIndex;
423     COORD  FontSize;
424 } CONSOLE_GETFONTSIZE, *PCONSOLE_GETFONTSIZE;
425 
426 typedef struct _CONSOLE_GETCURRENTFONT
427 {
428     HANDLE  ConsoleHandle;
429     HANDLE  OutputHandle;
430     BOOLEAN MaximumWindow;
431     ULONG   FontIndex;
432     COORD   FontSize;
433 } CONSOLE_GETCURRENTFONT, *PCONSOLE_GETCURRENTFONT;
434 
435 typedef struct _CONSOLE_SETFONT
436 {
437     HANDLE ConsoleHandle;
438     HANDLE OutputHandle;
439     ULONG  FontIndex;
440 } CONSOLE_SETFONT, *PCONSOLE_SETFONT;
441 
442 
443 
444 typedef struct _CONSOLE_CREATESCREENBUFFER
445 {
446     HANDLE ConsoleHandle;
447     ULONG  DesiredAccess; // ACCESS_MASK
448     BOOL   InheritHandle;
449     ULONG  ShareMode;
450     /* Type of the screen buffer: CONSOLE_TEXTMODE_BUFFER or CONSOLE_GRAPHICS_BUFFER */
451     ULONG  ScreenBufferType;
452     /*
453      * This structure holds the initialization information
454      * for graphics screen buffers.
455      */
456     CONSOLE_GRAPHICS_BUFFER_INFO GraphicsBufferInfo;
457     HANDLE hMutex;
458     PVOID  lpBitMap;
459     HANDLE OutputHandle;     /* Handle to newly created screen buffer */
460 } CONSOLE_CREATESCREENBUFFER, *PCONSOLE_CREATESCREENBUFFER;
461 
462 typedef struct _CONSOLE_SETACTIVESCREENBUFFER
463 {
464     HANDLE ConsoleHandle;
465     HANDLE OutputHandle;  /* Handle to screen buffer to switch to */
466 } CONSOLE_SETACTIVESCREENBUFFER, *PCONSOLE_SETACTIVESCREENBUFFER;
467 
468 typedef struct _CONSOLE_INVALIDATEDIBITS
469 {
470     HANDLE ConsoleHandle;
471     HANDLE OutputHandle;
472     SMALL_RECT Region;
473 } CONSOLE_INVALIDATEDIBITS, *PCONSOLE_INVALIDATEDIBITS;
474 
475 typedef struct _CONSOLE_SETPALETTE
476 {
477     HANDLE   ConsoleHandle;
478     HANDLE   OutputHandle;
479     HPALETTE PaletteHandle;
480     UINT     Usage;
481 } CONSOLE_SETPALETTE, *PCONSOLE_SETPALETTE;
482 
483 typedef struct _CONSOLE_GETSETCONSOLETITLE
484 {
485     HANDLE  ConsoleHandle;
486     ULONG   Length;
487     PVOID   Title;
488     BOOLEAN Unicode;
489 } CONSOLE_GETSETCONSOLETITLE, *PCONSOLE_GETSETCONSOLETITLE;
490 
491 typedef struct _CONSOLE_FLUSHINPUTBUFFER
492 {
493     HANDLE ConsoleHandle;
494     HANDLE InputHandle;
495 } CONSOLE_FLUSHINPUTBUFFER, *PCONSOLE_FLUSHINPUTBUFFER;
496 
497 typedef struct _CONSOLE_SCROLLSCREENBUFFER
498 {
499     HANDLE     ConsoleHandle;
500     HANDLE     OutputHandle;
501     SMALL_RECT ScrollRectangle;
502     SMALL_RECT ClipRectangle;
503     BOOL       UseClipRectangle;
504     COORD      DestinationOrigin;
505     CHAR_INFO  Fill;
506     BOOLEAN    Unicode;
507 } CONSOLE_SCROLLSCREENBUFFER, *PCONSOLE_SCROLLSCREENBUFFER;
508 
509 
510 /*
511  * An attribute or a character are instances of the same entity, namely
512  * a "code" (what would be called an (ANSI) escape sequence). Therefore
513  * encode them inside the same structure.
514  */
515 typedef enum _CODE_TYPE
516 {
517     CODE_ASCII      = 0x01,
518     CODE_UNICODE    = 0x02,
519     CODE_ATTRIBUTE  = 0x03
520 } CODE_TYPE;
521 
522 typedef union _CODE_ELEMENT
523 {
524     CHAR  AsciiChar;
525     WCHAR UnicodeChar;
526     WORD  Attribute;
527 } CODE_ELEMENT;
528 
529 typedef struct _CONSOLE_OUTPUTCODE
530 {
531     HANDLE ConsoleHandle;
532     HANDLE OutputHandle;
533     COORD  Coord;
534 
535     CODE_TYPE CodeType;
536     CHAR      CodeStaticBuffer[80]; // == 40 * sizeof(CODE_ELEMENT)
537     PVOID     pCode; // Either a pointer to a character or to an attribute.
538     // union
539     // {
540         // PVOID  pCode;
541         // PCHAR  AsciiChar;
542         // PWCHAR UnicodeChar;
543         // PWORD  Attribute;
544     // } pCode;    // Either a pointer to a character or to an attribute.
545 
546     ULONG NumCodes;
547 } CONSOLE_READOUTPUTCODE , *PCONSOLE_READOUTPUTCODE,
548   CONSOLE_WRITEOUTPUTCODE, *PCONSOLE_WRITEOUTPUTCODE;
549 
550 typedef struct _CONSOLE_FILLOUTPUTCODE
551 {
552     HANDLE ConsoleHandle;
553     HANDLE OutputHandle;
554     COORD  WriteCoord;
555 
556     CODE_TYPE    CodeType;
557     CODE_ELEMENT Code; // Either a character or an attribute.
558 
559     ULONG NumCodes;
560 } CONSOLE_FILLOUTPUTCODE, *PCONSOLE_FILLOUTPUTCODE;
561 
562 typedef struct _CONSOLE_GETINPUT
563 {
564     HANDLE        ConsoleHandle;
565     HANDLE        InputHandle;
566     INPUT_RECORD  RecordStaticBuffer[5];
567     PINPUT_RECORD RecordBufPtr;
568     ULONG         NumRecords;
569     WORD          Flags;
570     BOOLEAN       Unicode;
571 } CONSOLE_GETINPUT, *PCONSOLE_GETINPUT;
572 
573 typedef struct _CONSOLE_WRITEINPUT
574 {
575     HANDLE        ConsoleHandle;
576     HANDLE        InputHandle;
577     INPUT_RECORD  RecordStaticBuffer[5];
578     PINPUT_RECORD RecordBufPtr;
579     ULONG         NumRecords;
580     BOOLEAN       Unicode;
581     BOOLEAN       AppendToEnd;
582 } CONSOLE_WRITEINPUT, *PCONSOLE_WRITEINPUT;
583 
584 typedef struct _CONSOLE_READOUTPUT
585 {
586     HANDLE ConsoleHandle;
587     HANDLE OutputHandle;
588 
589     CHAR_INFO  StaticBuffer;
590     PCHAR_INFO CharInfo;
591 
592     SMALL_RECT ReadRegion;
593     BOOLEAN Unicode;
594 } CONSOLE_READOUTPUT, *PCONSOLE_READOUTPUT;
595 
596 typedef struct _CONSOLE_WRITEOUTPUT
597 {
598     HANDLE ConsoleHandle;
599     HANDLE OutputHandle;
600 
601     CHAR_INFO  StaticBuffer;
602     PCHAR_INFO CharInfo;
603 
604     SMALL_RECT WriteRegion;
605     BOOLEAN Unicode;
606 
607     /*
608      * If we are going to write too large (>= 64 kB, size of the CSR heap)
609      * data buffers, we allocate a heap buffer in the process' memory, and
610      * CSR will read it via NtReadVirtualMemory.
611      */
612     BOOLEAN UseVirtualMemory;
613 } CONSOLE_WRITEOUTPUT, *PCONSOLE_WRITEOUTPUT;
614 
615 typedef struct _CONSOLE_GETNUMINPUTEVENTS
616 {
617     HANDLE ConsoleHandle;
618     HANDLE InputHandle;
619     ULONG  NumberOfEvents;
620 } CONSOLE_GETNUMINPUTEVENTS, *PCONSOLE_GETNUMINPUTEVENTS;
621 
622 
623 
624 typedef struct _CONSOLE_CLOSEHANDLE
625 {
626     HANDLE ConsoleHandle;
627     HANDLE Handle;
628 } CONSOLE_CLOSEHANDLE, *PCONSOLE_CLOSEHANDLE;
629 
630 typedef struct _CONSOLE_VERIFYHANDLE
631 {
632     BOOL   IsValid;
633     HANDLE ConsoleHandle;
634     HANDLE Handle;
635 } CONSOLE_VERIFYHANDLE, *PCONSOLE_VERIFYHANDLE;
636 
637 typedef struct _CONSOLE_DUPLICATEHANDLE
638 {
639     HANDLE  ConsoleHandle;
640     HANDLE  SourceHandle;
641     ULONG   DesiredAccess; // ACCESS_MASK
642     BOOLEAN InheritHandle;
643     ULONG   Options;
644     HANDLE  TargetHandle;
645 } CONSOLE_DUPLICATEHANDLE, *PCONSOLE_DUPLICATEHANDLE;
646 
647 typedef struct _CONSOLE_GETHANDLEINFO
648 {
649     HANDLE ConsoleHandle;
650     HANDLE Handle;
651     ULONG  Flags;
652 } CONSOLE_GETHANDLEINFO, *PCONSOLE_GETHANDLEINFO;
653 
654 typedef struct _CONSOLE_SETHANDLEINFO
655 {
656     HANDLE ConsoleHandle;
657     HANDLE Handle;
658     ULONG  Mask;
659     ULONG  Flags;
660 } CONSOLE_SETHANDLEINFO, *PCONSOLE_SETHANDLEINFO;
661 
662 /*
663  * Type of handles.
664  */
665 typedef enum _CONSOLE_HANDLE_TYPE
666 {
667     HANDLE_INPUT    = 0x01,
668     HANDLE_OUTPUT   = 0x02
669 } CONSOLE_HANDLE_TYPE;
670 
671 typedef struct _CONSOLE_OPENCONSOLE
672 {
673     HANDLE ConsoleHandle;
674     CONSOLE_HANDLE_TYPE HandleType;
675     ULONG  DesiredAccess; // ACCESS_MASK
676     BOOL   InheritHandle;
677     ULONG  ShareMode;
678     HANDLE Handle;
679 } CONSOLE_OPENCONSOLE, *PCONSOLE_OPENCONSOLE;
680 
681 
682 
683 typedef struct _CONSOLE_GETLARGESTWINDOWSIZE
684 {
685     HANDLE ConsoleHandle;
686     HANDLE OutputHandle;
687     COORD  Size;
688 } CONSOLE_GETLARGESTWINDOWSIZE, *PCONSOLE_GETLARGESTWINDOWSIZE;
689 
690 typedef struct _CONSOLE_MENUCONTROL
691 {
692     HANDLE ConsoleHandle;
693     HANDLE OutputHandle;
694     ULONG  CmdIdLow;
695     ULONG  CmdIdHigh;
696     HMENU  MenuHandle;
697 } CONSOLE_MENUCONTROL, *PCONSOLE_MENUCONTROL;
698 
699 typedef struct _CONSOLE_SETMENUCLOSE
700 {
701     HANDLE ConsoleHandle;
702     BOOL   Enable;
703 } CONSOLE_SETMENUCLOSE, *PCONSOLE_SETMENUCLOSE;
704 
705 typedef struct _CONSOLE_SETWINDOWINFO
706 {
707     HANDLE ConsoleHandle;
708     HANDLE OutputHandle;
709     BOOL   Absolute;
710     SMALL_RECT WindowRect; // New console window position in the screen-buffer frame (Absolute == TRUE)
711                            // or in the old window position frame (Absolute == FALSE).
712 } CONSOLE_SETWINDOWINFO, *PCONSOLE_SETWINDOWINFO;
713 
714 typedef struct _CONSOLE_GETWINDOW
715 {
716     HANDLE ConsoleHandle;
717     HWND   WindowHandle;
718 } CONSOLE_GETWINDOW, *PCONSOLE_GETWINDOW;
719 
720 typedef struct _CONSOLE_SETICON
721 {
722     HANDLE ConsoleHandle;
723     HICON  IconHandle;
724 } CONSOLE_SETICON, *PCONSOLE_SETICON;
725 
726 
727 
728 typedef struct _CONSOLE_ADDGETALIAS
729 {
730     HANDLE  ConsoleHandle;
731     USHORT  SourceLength;
732     USHORT  TargetLength; // Also used for storing the number of bytes written.
733     USHORT  ExeLength;
734     PVOID   Source;
735     PVOID   Target;
736     PVOID   ExeName;
737     BOOLEAN Unicode;
738     BOOLEAN Unicode2;
739 } CONSOLE_ADDGETALIAS, *PCONSOLE_ADDGETALIAS;
740 
741 typedef struct _CONSOLE_GETALLALIASES
742 {
743     HANDLE  ConsoleHandle;
744     USHORT  ExeLength;
745     PVOID   ExeName;
746     BOOLEAN Unicode;
747     BOOLEAN Unicode2;
748     ULONG   AliasesBufferLength;
749     PVOID   AliasesBuffer;
750 } CONSOLE_GETALLALIASES, *PCONSOLE_GETALLALIASES;
751 
752 typedef struct _CONSOLE_GETALLALIASESLENGTH
753 {
754     HANDLE  ConsoleHandle;
755     USHORT  ExeLength;
756     PVOID   ExeName;
757     ULONG   Length;
758     BOOLEAN Unicode;
759     BOOLEAN Unicode2;
760 } CONSOLE_GETALLALIASESLENGTH, *PCONSOLE_GETALLALIASESLENGTH;
761 
762 typedef struct _CONSOLE_GETALIASESEXES
763 {
764     HANDLE  ConsoleHandle;
765     ULONG   Length ; // ExeLength; // ExesLength
766     PVOID   ExeNames;
767     BOOLEAN Unicode;
768 } CONSOLE_GETALIASESEXES, *PCONSOLE_GETALIASESEXES;
769 
770 typedef struct _CONSOLE_GETALIASESEXESLENGTH
771 {
772     HANDLE  ConsoleHandle;
773     ULONG   Length;
774     BOOLEAN Unicode;
775 } CONSOLE_GETALIASESEXESLENGTH, *PCONSOLE_GETALIASESEXESLENGTH;
776 
777 
778 
779 typedef struct _CONSOLE_GETCOMMANDHISTORY
780 {
781     HANDLE  ConsoleHandle;
782     ULONG   HistoryLength;
783     PVOID   History;
784     USHORT  ExeLength;
785     PVOID   ExeName;
786     BOOLEAN Unicode;
787     BOOLEAN Unicode2;
788 } CONSOLE_GETCOMMANDHISTORY, *PCONSOLE_GETCOMMANDHISTORY;
789 
790 typedef struct _CONSOLE_GETCOMMANDHISTORYLENGTH
791 {
792     HANDLE  ConsoleHandle;
793     ULONG   HistoryLength;
794     USHORT  ExeLength;
795     PVOID   ExeName;
796     BOOLEAN Unicode;
797     BOOLEAN Unicode2;
798 } CONSOLE_GETCOMMANDHISTORYLENGTH, *PCONSOLE_GETCOMMANDHISTORYLENGTH;
799 
800 typedef struct _CONSOLE_EXPUNGECOMMANDHISTORY
801 {
802     HANDLE  ConsoleHandle;
803     USHORT  ExeLength;
804     PVOID   ExeName;
805     BOOLEAN Unicode;
806     BOOLEAN Unicode2;
807 } CONSOLE_EXPUNGECOMMANDHISTORY, *PCONSOLE_EXPUNGECOMMANDHISTORY;
808 
809 typedef struct _CONSOLE_GETSETHISTORYINFO
810 {
811     UINT HistoryBufferSize;
812     UINT NumberOfHistoryBuffers;
813     ULONG dwFlags;
814 } CONSOLE_GETSETHISTORYINFO, *PCONSOLE_GETSETHISTORYINFO;
815 
816 typedef struct _CONSOLE_SETHISTORYNUMBERCOMMANDS
817 {
818     HANDLE  ConsoleHandle;
819     ULONG   NumCommands;
820     USHORT  ExeLength;
821     PVOID   ExeName;
822     BOOLEAN Unicode;
823     BOOLEAN Unicode2;
824 } CONSOLE_SETHISTORYNUMBERCOMMANDS, *PCONSOLE_SETHISTORYNUMBERCOMMANDS;
825 
826 typedef struct _CONSOLE_SETHISTORYMODE
827 {
828     HANDLE ConsoleHandle;
829     ULONG  Mode;
830 } CONSOLE_SETHISTORYMODE, *PCONSOLE_SETHISTORYMODE;
831 
832 
833 
834 typedef struct _CONSOLE_SETSCREENBUFFERSIZE
835 {
836     HANDLE ConsoleHandle;
837     HANDLE OutputHandle;
838     COORD  Size;
839 } CONSOLE_SETSCREENBUFFERSIZE, *PCONSOLE_SETSCREENBUFFERSIZE;
840 
841 typedef struct _CONSOLE_GETSELECTIONINFO
842 {
843     HANDLE ConsoleHandle;
844     CONSOLE_SELECTION_INFO Info;
845 } CONSOLE_GETSELECTIONINFO, *PCONSOLE_GETSELECTIONINFO;
846 
847 typedef struct _CONSOLE_GETINPUTOUTPUTCP
848 {
849     HANDLE ConsoleHandle;
850     UINT   CodePage;
851     BOOL   OutputCP;    // TRUE : Output Code Page ; FALSE : Input Code Page
852 } CONSOLE_GETINPUTOUTPUTCP, *PCONSOLE_GETINPUTOUTPUTCP;
853 
854 typedef struct _CONSOLE_SETINPUTOUTPUTCP
855 {
856     HANDLE ConsoleHandle;
857     UINT   CodePage;
858     BOOL   OutputCP;    // TRUE : Output Code Page ; FALSE : Input Code Page
859     HANDLE EventHandle;
860 } CONSOLE_SETINPUTOUTPUTCP, *PCONSOLE_SETINPUTOUTPUTCP;
861 
862 typedef struct _CONSOLE_GETKBDLAYOUTNAME
863 {
864     HANDLE ConsoleHandle;
865     CHAR   LayoutBuffer[KL_NAMELENGTH * sizeof(WCHAR)]; // Can hold up to 9 wchars
866     BOOL   Ansi;
867 } CONSOLE_GETKBDLAYOUTNAME, *PCONSOLE_GETKBDLAYOUTNAME;
868 
869 typedef struct _CONSOLE_REGISTERVDM
870 {
871     HANDLE ConsoleHandle;
872     ULONG  RegisterFlags;
873     HANDLE StartHardwareEvent;
874     HANDLE EndHardwareEvent;
875     HANDLE ErrorHardwareEvent;
876 
877     /* Unused member */
878     ULONG  UnusedVar;
879 
880     ULONG  VideoStateLength;
881     PVOID  VideoState;  // PVIDEO_HARDWARE_STATE_HEADER
882 
883     /* Unused members */
884     PVOID  UnusedBuffer;
885     ULONG  UnusedBufferLength;
886 
887     COORD  VDMBufferSize;
888     PVOID  VDMBuffer;
889 } CONSOLE_REGISTERVDM, *PCONSOLE_REGISTERVDM;
890 
891 typedef struct _CONSOLE_API_MESSAGE
892 {
893     PORT_MESSAGE Header;
894 
895     PCSR_CAPTURE_BUFFER CsrCaptureData;
896     CSR_API_NUMBER ApiNumber;
897     NTSTATUS Status;
898     ULONG Reserved;
899     union
900     {
901         /* Console initialization and uninitialization */
902         CONSOLE_ALLOCCONSOLE AllocConsoleRequest;
903         CONSOLE_ATTACHCONSOLE AttachConsoleRequest;
904         CONSOLE_FREECONSOLE FreeConsoleRequest;
905 
906         /* Processes */
907         CONSOLE_GETPROCESSLIST GetProcessListRequest;
908         CONSOLE_GENERATECTRLEVENT GenerateCtrlEventRequest;
909         CONSOLE_NOTIFYLASTCLOSE NotifyLastCloseRequest;
910 
911         /* Handles */
912         CONSOLE_OPENCONSOLE OpenConsoleRequest;
913         CONSOLE_CLOSEHANDLE CloseHandleRequest;
914         CONSOLE_VERIFYHANDLE VerifyHandleRequest;
915         CONSOLE_DUPLICATEHANDLE DuplicateHandleRequest;
916         CONSOLE_GETHANDLEINFO GetHandleInfoRequest;
917         CONSOLE_SETHANDLEINFO SetHandleInfoRequest;
918 
919         /* Cursor & Mouse */
920         CONSOLE_SHOWCURSOR ShowCursorRequest;
921         CONSOLE_SETCURSOR SetCursorRequest;
922         CONSOLE_GETSETCURSORINFO CursorInfoRequest;
923         CONSOLE_SETCURSORPOSITION SetCursorPositionRequest;
924         CONSOLE_GETMOUSEINFO GetMouseInfoRequest;
925 
926         /* Screen-buffer */
927         CONSOLE_CREATESCREENBUFFER CreateScreenBufferRequest;
928         CONSOLE_SETACTIVESCREENBUFFER SetScreenBufferRequest;
929         CONSOLE_GETSCREENBUFFERINFO ScreenBufferInfoRequest;
930         CONSOLE_SETSCREENBUFFERSIZE SetScreenBufferSizeRequest;
931         CONSOLE_SCROLLSCREENBUFFER ScrollScreenBufferRequest;
932 
933         CONSOLE_GETSELECTIONINFO GetSelectionInfoRequest;
934         CONSOLE_FLUSHINPUTBUFFER FlushInputBufferRequest;
935 
936         /* Console mode */
937         CONSOLE_GETSETCONSOLEMODE ConsoleModeRequest;
938         CONSOLE_GETDISPLAYMODE GetDisplayModeRequest;
939         CONSOLE_SETDISPLAYMODE SetDisplayModeRequest;
940         CONSOLE_GETSETHWSTATE HardwareStateRequest;
941 
942         /* Console fonts */
943         CONSOLE_GETNUMFONTS GetNumFontsRequest;
944         CONSOLE_GETFONTINFO GetFontInfoRequest;
945         CONSOLE_GETFONTSIZE GetFontSizeRequest;
946         CONSOLE_GETCURRENTFONT GetCurrentFontRequest;
947         CONSOLE_SETFONT SetFontRequest;
948 
949         /* Console window */
950         CONSOLE_INVALIDATEDIBITS InvalidateDIBitsRequest;
951         CONSOLE_SETPALETTE SetPaletteRequest;
952         CONSOLE_GETSETCONSOLETITLE TitleRequest;
953         CONSOLE_GETLARGESTWINDOWSIZE GetLargestWindowSizeRequest;
954         CONSOLE_MENUCONTROL MenuControlRequest;
955         CONSOLE_SETMENUCLOSE SetMenuCloseRequest;
956         CONSOLE_SETWINDOWINFO SetWindowInfoRequest;
957         CONSOLE_GETWINDOW GetWindowRequest;
958         CONSOLE_SETICON SetIconRequest;
959 
960         /* Read */
961         CONSOLE_READCONSOLE ReadConsoleRequest;         // SrvReadConsole / ReadConsole
962         CONSOLE_GETINPUT GetInputRequest;               // SrvGetConsoleInput / PeekConsoleInput & ReadConsoleInput
963         CONSOLE_READOUTPUT ReadOutputRequest;           // SrvReadConsoleOutput / ReadConsoleOutput
964         CONSOLE_READOUTPUTCODE ReadOutputCodeRequest;   // SrvReadConsoleOutputString / ReadConsoleOutputAttribute & ReadConsoleOutputCharacter
965         CONSOLE_GETNUMINPUTEVENTS GetNumInputEventsRequest;
966 
967         /* Write */
968         CONSOLE_WRITECONSOLE WriteConsoleRequest;       // SrvWriteConsole / WriteConsole
969         CONSOLE_WRITEINPUT WriteInputRequest;
970         CONSOLE_WRITEOUTPUT WriteOutputRequest;
971         CONSOLE_WRITEOUTPUTCODE WriteOutputCodeRequest;
972 
973         CONSOLE_FILLOUTPUTCODE FillOutputRequest;
974         CONSOLE_SETTEXTATTRIB SetTextAttribRequest;
975 
976         /* Aliases */
977         CONSOLE_ADDGETALIAS ConsoleAliasRequest;
978         CONSOLE_GETALLALIASES GetAllAliasesRequest;
979         CONSOLE_GETALLALIASESLENGTH GetAllAliasesLengthRequest;
980         CONSOLE_GETALIASESEXES GetAliasesExesRequest;
981         CONSOLE_GETALIASESEXESLENGTH GetAliasesExesLengthRequest;
982 
983         /* History */
984         CONSOLE_GETCOMMANDHISTORY GetCommandHistoryRequest;
985         CONSOLE_GETCOMMANDHISTORYLENGTH GetCommandHistoryLengthRequest;
986         CONSOLE_EXPUNGECOMMANDHISTORY ExpungeCommandHistoryRequest;
987         CONSOLE_GETSETHISTORYINFO HistoryInfoRequest;
988         CONSOLE_SETHISTORYNUMBERCOMMANDS SetHistoryNumberCommandsRequest;
989         CONSOLE_SETHISTORYMODE SetHistoryModeRequest;
990 
991         /* Input and Output Code Pages; keyboard */
992         CONSOLE_GETINPUTOUTPUTCP GetConsoleCPRequest;
993         CONSOLE_SETINPUTOUTPUTCP SetConsoleCPRequest;
994         CONSOLE_GETKBDLAYOUTNAME GetKbdLayoutNameRequest;
995 
996         /* Virtual DOS Machine */
997         CONSOLE_REGISTERVDM RegisterVDMRequest;
998     } Data;
999 } CONSOLE_API_MESSAGE, *PCONSOLE_API_MESSAGE;
1000 
1001 // Check that a CONSOLE_API_MESSAGE can hold in a CSR_API_MESSAGE.
1002 CHECK_API_MSG_SIZE(CONSOLE_API_MESSAGE);
1003 
1004 #endif // _CONMSG_H
1005 
1006 /* EOF */
1007