[WINSRV] Implement SrvGetThreadConsoleDesktop(). CORE-13470
[reactos.git] / win32ss / user / winsrv / consrv / include / conio_winsrv.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Console Server DLL
4 * FILE: win32ss/user/winsrv/consrv/include/conio_winsrv.h
5 * PURPOSE: Public Console I/O Interface - Offers wrap-up structures
6 * over the console objects exposed by the console driver.
7 * PROGRAMMERS: Gé van Geldorp
8 * Jeffrey Morlan
9 * Hermes Belusca-Maito (hermes.belusca@sfr.fr)
10 */
11
12 #pragma once
13
14 #include "rect.h"
15
16 // This is ALMOST a HACK!!!!!!!
17 // Helpers for code refactoring
18 #ifdef USE_NEW_CONSOLE_WAY
19
20 #define _CONSRV_CONSOLE _WINSRV_CONSOLE
21 #define CONSRV_CONSOLE WINSRV_CONSOLE
22 #define PCONSRV_CONSOLE PWINSRV_CONSOLE
23
24 #else
25
26 #define _CONSRV_CONSOLE _CONSOLE
27 #define CONSRV_CONSOLE CONSOLE
28 #define PCONSRV_CONSOLE PCONSOLE
29
30 #endif
31
32 #define CSR_DEFAULT_CURSOR_SIZE 25
33
34 /* VGA character cell */
35 typedef struct _CHAR_CELL
36 {
37 CHAR Char;
38 BYTE Attributes;
39 } CHAR_CELL, *PCHAR_CELL;
40 C_ASSERT(sizeof(CHAR_CELL) == 2);
41
42 // HACK!!
43 struct _WINSRV_CONSOLE;
44 /* HACK: */ typedef struct _WINSRV_CONSOLE *PWINSRV_CONSOLE;
45 #ifdef USE_NEW_CONSOLE_WAY
46 #include "conio.h"
47 #endif
48
49 typedef struct _FRONTEND FRONTEND, *PFRONTEND;
50
51 typedef struct _FRONTEND_VTBL
52 {
53 // NTSTATUS (NTAPI *UnloadFrontEnd)(IN OUT PFRONTEND This);
54
55 /*
56 * Internal interface (functions called by the console server only)
57 */
58 NTSTATUS (NTAPI *InitFrontEnd)(IN OUT PFRONTEND This,
59 IN struct _CONSRV_CONSOLE* Console);
60 VOID (NTAPI *DeinitFrontEnd)(IN OUT PFRONTEND This);
61
62 /* Interface used for both text-mode and graphics screen buffers */
63 VOID (NTAPI *DrawRegion)(IN OUT PFRONTEND This,
64 SMALL_RECT* Region);
65 /* Interface used only for text-mode screen buffers */
66 VOID (NTAPI *WriteStream)(IN OUT PFRONTEND This,
67 SMALL_RECT* Region,
68 SHORT CursorStartX,
69 SHORT CursorStartY,
70 UINT ScrolledLines,
71 PWCHAR Buffer,
72 UINT Length);
73 VOID (NTAPI *RingBell)(IN OUT PFRONTEND This);
74 BOOL (NTAPI *SetCursorInfo)(IN OUT PFRONTEND This,
75 PCONSOLE_SCREEN_BUFFER ScreenBuffer);
76 BOOL (NTAPI *SetScreenInfo)(IN OUT PFRONTEND This,
77 PCONSOLE_SCREEN_BUFFER ScreenBuffer,
78 SHORT OldCursorX,
79 SHORT OldCursorY);
80 VOID (NTAPI *ResizeTerminal)(IN OUT PFRONTEND This);
81 VOID (NTAPI *SetActiveScreenBuffer)(IN OUT PFRONTEND This);
82 VOID (NTAPI *ReleaseScreenBuffer)(IN OUT PFRONTEND This,
83 IN PCONSOLE_SCREEN_BUFFER ScreenBuffer);
84 VOID (NTAPI *RefreshInternalInfo)(IN OUT PFRONTEND This);
85
86 /*
87 * External interface (functions corresponding to the Console API)
88 */
89 VOID (NTAPI *ChangeTitle)(IN OUT PFRONTEND This);
90 BOOL (NTAPI *ChangeIcon)(IN OUT PFRONTEND This,
91 HICON IconHandle);
92 HDESK (NTAPI *GetThreadConsoleDesktop)(IN OUT PFRONTEND This);
93 HWND (NTAPI *GetConsoleWindowHandle)(IN OUT PFRONTEND This);
94 VOID (NTAPI *GetLargestConsoleWindowSize)(IN OUT PFRONTEND This,
95 PCOORD pSize);
96 BOOL (NTAPI *GetSelectionInfo)(IN OUT PFRONTEND This,
97 PCONSOLE_SELECTION_INFO pSelectionInfo);
98 BOOL (NTAPI *SetPalette)(IN OUT PFRONTEND This,
99 HPALETTE PaletteHandle,
100 UINT PaletteUsage);
101 ULONG (NTAPI *GetDisplayMode)(IN OUT PFRONTEND This);
102 BOOL (NTAPI *SetDisplayMode)(IN OUT PFRONTEND This,
103 ULONG NewMode);
104 INT (NTAPI *ShowMouseCursor)(IN OUT PFRONTEND This,
105 BOOL Show);
106 BOOL (NTAPI *SetMouseCursor)(IN OUT PFRONTEND This,
107 HCURSOR CursorHandle);
108 HMENU (NTAPI *MenuControl)(IN OUT PFRONTEND This,
109 UINT CmdIdLow,
110 UINT CmdIdHigh);
111 BOOL (NTAPI *SetMenuClose)(IN OUT PFRONTEND This,
112 BOOL Enable);
113 } FRONTEND_VTBL, *PFRONTEND_VTBL;
114
115 struct _FRONTEND
116 {
117 PFRONTEND_VTBL Vtbl; /* Virtual table */
118 NTSTATUS (NTAPI *UnloadFrontEnd)(IN OUT PFRONTEND This);
119
120 struct _CONSRV_CONSOLE* Console; /* Console to which the frontend is attached to */
121 PVOID Context; /* Private context */
122 PVOID Context2; /* Private context */
123 };
124
125 /* PauseFlags values (internal only) */
126 #define PAUSED_FROM_KEYBOARD 0x1
127 #define PAUSED_FROM_SCROLLBAR 0x2
128 #define PAUSED_FROM_SELECTION 0x4
129
130 typedef struct _WINSRV_CONSOLE
131 {
132 /******************************* Console Set-up *******************************/
133 /* This **MUST** be FIRST!! */
134 #ifdef USE_NEW_CONSOLE_WAY
135 CONSOLE;
136 // CONSOLE Console;
137 // // PCONSOLE Console;
138 #endif
139
140 // LONG ReferenceCount; /* Is incremented each time a handle to something in the console (a screen-buffer or the input buffer of this console) gets referenced */
141 // CRITICAL_SECTION Lock;
142 // CONSOLE_STATE State; /* State of the console */
143
144 HANDLE InitEvents[MAX_INIT_EVENTS]; /* Initialization events */
145
146 FRONTEND FrontEndIFace; /* Frontend-specific interface */
147
148 /******************************* Process support ******************************/
149 LIST_ENTRY ProcessList; /* List of processes owning the console. The first one is the so-called "Console Leader Process" */
150 PCONSOLE_PROCESS_DATA NotifiedLastCloseProcess; /* Pointer to the unique process that needs to be notified when the console leader process is killed */
151 BOOLEAN NotifyLastClose; /* TRUE if the console should send a control event when the console leader process is killed */
152 BOOLEAN HasFocus; /* TRUE if the console has focus (is in the foreground) */
153
154 /******************************* Pausing support ******************************/
155 BYTE PauseFlags;
156 LIST_ENTRY ReadWaitQueue; /* List head for the queue of unique input buffer read wait blocks */
157 LIST_ENTRY WriteWaitQueue; /* List head for the queue of current screen-buffer write wait blocks */
158
159 /**************************** Aliases and Histories ***************************/
160 struct _ALIAS_HEADER *Aliases;
161 LIST_ENTRY HistoryBuffers;
162 ULONG HistoryBufferSize; /* Size for newly created history buffers */
163 ULONG NumberOfHistoryBuffers; /* Maximum number of history buffers allowed */
164 BOOLEAN HistoryNoDup; /* Remove old duplicate history entries */
165
166 /**************************** Input Line Discipline ***************************/
167 PWCHAR LineBuffer; /* Current line being input, in line buffered mode */
168 ULONG LineMaxSize; /* Maximum size of line in characters (including CR+LF) */
169 ULONG LineSize; /* Current size of line */
170 ULONG LinePos; /* Current position within line */
171 BOOLEAN LineComplete; /* User pressed enter, ready to send back to client */
172 BOOLEAN LineUpPressed;
173 BOOLEAN LineInsertToggle; /* Replace character over cursor instead of inserting */
174 ULONG LineWakeupMask; /* Bitmap of which control characters will end line input */
175
176 BOOLEAN InsertMode;
177 BOOLEAN QuickEdit;
178
179 /************************ Virtual DOS Machine support *************************/
180 COORD VDMBufferSize; /* Real size of the VDM buffer, in units of ??? */
181 HANDLE VDMBufferSection; /* Handle to the memory shared section for the VDM buffer */
182 PVOID VDMBuffer; /* Our VDM buffer */
183 PVOID ClientVDMBuffer; /* A copy of the client view of our VDM buffer */
184 HANDLE VDMClientProcess; /* Handle to the client process who opened the buffer, to unmap the view */
185
186 HANDLE StartHardwareEvent;
187 HANDLE EndHardwareEvent;
188 HANDLE ErrorHardwareEvent;
189
190 /****************************** Other properties ******************************/
191 LIST_ENTRY PopupWindows; /* List of popup windows */
192 UNICODE_STRING OriginalTitle; /* Original title of console, the one defined when the console leader is launched; it never changes. Always NULL-terminated */
193 UNICODE_STRING Title; /* Title of console. Always NULL-terminated */
194 COLORREF Colors[16]; /* Colour palette */
195
196 } WINSRV_CONSOLE; // , *PWINSRV_CONSOLE;
197
198 /* console.c */
199 VOID ConioPause(PCONSRV_CONSOLE Console, UINT Flags);
200 VOID ConioUnpause(PCONSRV_CONSOLE Console, UINT Flags);
201
202 PCONSOLE_PROCESS_DATA NTAPI
203 ConSrvGetConsoleLeaderProcess(IN PCONSRV_CONSOLE Console);
204 NTSTATUS
205 ConSrvConsoleCtrlEvent(IN ULONG CtrlEvent,
206 IN PCONSOLE_PROCESS_DATA ProcessData);
207 NTSTATUS NTAPI
208 ConSrvConsoleProcessCtrlEvent(IN PCONSRV_CONSOLE Console,
209 IN ULONG ProcessGroupId,
210 IN ULONG CtrlEvent);
211 VOID
212 ConSrvSetProcessFocus(IN PCSR_PROCESS CsrProcess,
213 IN BOOLEAN SetForeground);
214 NTSTATUS NTAPI
215 ConSrvSetConsoleProcessFocus(IN PCONSRV_CONSOLE Console,
216 IN BOOLEAN SetForeground);
217
218 /* coninput.c */
219 VOID NTAPI ConioProcessKey(PCONSRV_CONSOLE Console, MSG* msg);
220 DWORD ConioEffectiveCursorSize(PCONSRV_CONSOLE Console,
221 DWORD Scale);
222
223 NTSTATUS
224 ConioProcessInputEvent(PCONSRV_CONSOLE Console,
225 PINPUT_RECORD InputEvent);
226
227 /* conoutput.c */
228 PCHAR_INFO ConioCoordToPointer(PTEXTMODE_SCREEN_BUFFER Buff, ULONG X, ULONG Y);
229 NTSTATUS ConioResizeBuffer(PCONSOLE /*PCONSRV_CONSOLE*/ Console,
230 PTEXTMODE_SCREEN_BUFFER ScreenBuffer,
231 COORD Size);
232
233 /* terminal.c */
234 VOID ConioDrawConsole(PCONSRV_CONSOLE Console);
235
236 /* EOF */