:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / include / csrss / csrss.h
1 #ifndef __INCLUDE_CSRSS_CSRSS_H
2 #define __INCLUDE_CSRSS_CSRSS_H
3
4 #include <windows.h>
5 #include <napi/lpc.h>
6 #include <ddk/ntddblue.h>
7 #include <ntos/keyboard.h>
8
9 #define CSR_PRIORITY_CLASS_NORMAL       (0x10)
10 #define CSR_PRIORITY_CLASS_IDLE         (0x20)
11 #define CSR_PRIORITY_CLASS_HIGH         (0x40)
12 #define CSR_PRIORITY_CLASS_REALTIME     (0x80)
13
14 #define CSR_CSRSS_SECTION_SIZE          (65536)
15
16 typedef struct
17 {
18 } CSRSS_CONNECT_PROCESS_REQUEST, PCSRSS_CONNECT_PROCESS_REQUEST;
19
20 typedef struct
21 {
22 } CSRSS_CONNECT_PROCESS_REPLY, PCSRSS_CONNECT_PROCESS_REPLY;
23
24 typedef struct
25 {
26    ULONG NewProcessId;
27    ULONG Flags;
28 } CSRSS_CREATE_PROCESS_REQUEST, *PCSRSS_CREATE_PROCESS_REQUEST;
29
30 typedef struct
31 {
32    HANDLE InputHandle;
33    HANDLE OutputHandle;
34 } CSRSS_CREATE_PROCESS_REPLY, *PCSRSS_CREATE_PROCESS_REPLY;
35
36 typedef struct
37 {
38    HANDLE ConsoleHandle;
39    ULONG NrCharactersToWrite;
40    BYTE Buffer[1];
41 } CSRSS_WRITE_CONSOLE_REQUEST, *PCSRSS_WRITE_CONSOLE_REQUEST;
42
43 typedef struct
44 {
45    ULONG NrCharactersWritten;
46 } CSRSS_WRITE_CONSOLE_REPLY, *PCSRSS_WRITE_CONSOLE_REPLY;
47
48 typedef struct
49 {
50    HANDLE ConsoleHandle;
51    WORD NrCharactersToRead;
52    WORD nCharsCanBeDeleted;     // number of chars already in buffer that can be backspaced
53 } CSRSS_READ_CONSOLE_REQUEST, *PCSRSS_READ_CONSOLE_REQUEST;
54
55 typedef struct
56 {
57    HANDLE EventHandle;
58    ULONG NrCharactersRead;
59    BYTE Buffer[1];
60 } CSRSS_READ_CONSOLE_REPLY, *PCSRSS_READ_CONSOLE_REPLY;
61
62 typedef struct
63 {
64    HANDLE InputHandle;
65    HANDLE OutputHandle;
66 } CSRSS_ALLOC_CONSOLE_REPLY, *PCSRSS_ALLOC_CONSOLE_REPLY;
67
68 typedef struct
69 {
70    HANDLE ConsoleHandle;
71 } CSRSS_SCREEN_BUFFER_INFO_REQUEST, *PCSRSS_SCREEN_BUFFER_INFO_REQUEST;
72
73 typedef struct
74 {
75    CONSOLE_SCREEN_BUFFER_INFO Info;
76 } CSRSS_SCREEN_BUFFER_INFO_REPLY, *PCSRSS_SCREEN_BUFFER_INFO_REPLY;
77
78 typedef struct
79 {
80    HANDLE ConsoleHandle;
81    COORD Position;
82 } CSRSS_SET_CURSOR_REQUEST, *PCSRSS_SET_CURSOR_REQUEST;
83
84 typedef struct
85 {
86    HANDLE ConsoleHandle;
87    CHAR Char;
88    COORD Position;
89    WORD Length;
90 } CSRSS_FILL_OUTPUT_REQUEST, *PCSRSS_FILL_OUTPUT_REQUEST;
91
92 typedef struct
93 {
94    HANDLE ConsoleHandle;
95    CHAR Attribute;
96    COORD Coord;
97    WORD Length;
98 } CSRSS_FILL_OUTPUT_ATTRIB_REQUEST, *PCSRSS_FILL_OUTPUT_ATTRIB_REQUEST;
99
100 typedef struct
101 {
102    HANDLE ConsoleHandle;
103 } CSRSS_READ_INPUT_REQUEST, *PCSRSS_READ_INPUT_REQUEST;
104
105 typedef struct
106 {
107    INPUT_RECORD Input;
108    BOOL MoreEvents;
109    HANDLE Event;
110 } CSRSS_READ_INPUT_REPLY, *PCSRSS_READ_INPUT_REPLY;
111
112 typedef struct
113 {
114    HANDLE ConsoleHandle;
115    WORD Length;
116    COORD Coord;
117    CHAR String[1];
118 } CSRSS_WRITE_CONSOLE_OUTPUT_CHAR_REQUEST, *PCSRSS_WRITE_CONSOLE_OUTPUT_CHAR_REQUEST;
119
120 typedef struct
121 {
122    COORD EndCoord;
123 } CSRSS_WRITE_CONSOLE_OUTPUT_CHAR_REPLY, *PCSRSS_WRITE_CONSOLE_OUTPUT_CHAR_REPLY;
124
125 typedef struct
126 {
127    HANDLE ConsoleHandle;
128    WORD Length;
129    COORD Coord;
130    CHAR String[1];
131 } CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB_REQUEST, *PCSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB_REQUEST;
132
133 typedef struct
134 {
135    COORD EndCoord;
136 } CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB_REPLY, *PCSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB_REPLY;
137
138 typedef struct
139 {
140    HANDLE ConsoleHandle;
141 } CSRSS_GET_CURSOR_INFO_REQUEST, *PCSRSS_GET_CURSOR_INFO_REQUEST;
142
143 typedef struct
144 {
145    CONSOLE_CURSOR_INFO Info;
146 } CSRSS_GET_CURSOR_INFO_REPLY, *PCSRSS_GET_CURSOR_INFO_REPLY;
147
148 typedef struct
149 {
150    HANDLE ConsoleHandle;
151    CONSOLE_CURSOR_INFO Info;
152 } CSRSS_SET_CURSOR_INFO_REQUEST, *PCSRSS_SET_CURSOR_INFO_REQUEST;
153
154 typedef struct
155 {
156    HANDLE ConsoleHandle;
157    CHAR Attrib;
158 } CSRSS_SET_ATTRIB_REQUEST, *PCSRSS_SET_ATTRIB_REQUEST;
159
160 typedef struct
161 {
162   HANDLE ConsoleHandle;
163   DWORD Mode;
164 } CSRSS_SET_CONSOLE_MODE_REQUEST, *PCSRSS_SET_CONSOLE_MODE_REQUEST;
165
166 typedef struct
167 {
168   HANDLE ConsoleHandle;
169 } CSRSS_GET_CONSOLE_MODE_REQUEST, *PCSRSS_GET_CONSOLE_MODE_REQUEST;
170
171 typedef struct
172 {
173   DWORD ConsoleMode;
174 } CSRSS_GET_CONSOLE_MODE_REPLY, *PCSRSS_GET_CONSOLE_MODE_REPLY;
175
176 typedef struct
177 {
178   /* may want to add some parameters here someday */
179 } CSRSS_CREATE_SCREEN_BUFFER_REQUEST, *PCSRSS_CREATE_SCREEN_BUFFER_REQUEST;
180
181 typedef struct
182 {
183    HANDLE OutputHandle;  /* handle to newly created screen buffer */
184 } CSRSS_CREATE_SCREEN_BUFFER_REPLY, *PCSRSS_CREATE_SCREEN_BUFFER_REPLY;
185
186 typedef struct
187 {
188    HANDLE OutputHandle;  /* handle to screen buffer to switch to */
189 } CSRSS_SET_ACTIVE_SCREEN_BUFFER_REQUEST, *PCSRSS_SET_ACTIVE_SCREEN_BUFFER_REQUEST;
190
191 typedef struct
192 {
193         HANDLE  UniqueThread;
194 } CSRSS_IDENTIFY_ALERTABLE_THREAD_REQUEST, * PCSRSS_IDENTIFY_ALERTABLE_THREAD_REQUEST;
195
196 typedef struct
197 {
198         CLIENT_ID       Cid;
199 } CSRSS_IDENTIFY_ALERTABLE_THREAD_REPLY, * PCSRSS_IDENTIFY_ALERTABLE_THREAD_REPLY;
200
201 typedef struct
202 {
203   HANDLE Console;
204   DWORD Length;
205   WCHAR Title[1];
206 } CSRSS_SET_TITLE_REQUEST, *PCSRSS_SET_TITLE_REQUEST;
207
208 typedef struct
209 {
210    HANDLE ConsoleHandle;
211 } CSRSS_GET_TITLE_REQUEST, *PCSRSS_GET_TITLE_REQUEST;
212
213 typedef struct
214 {
215   HANDLE ConsoleHandle;
216   DWORD Length;
217   WCHAR Title[1];
218 } CSRSS_GET_TITLE_REPLY, *PCSRSS_GET_TITLE_REPLY;
219
220 typedef struct
221 {
222   HANDLE ConsoleHandle;
223   COORD BufferSize;
224   COORD BufferCoord;
225   SMALL_RECT WriteRegion;
226   CHAR_INFO* CharInfo;
227 } CSRSS_WRITE_CONSOLE_OUTPUT_REQUEST, *PCSRSS_WRITE_CONSOLE_OUTPUT_REQUEST;
228
229 typedef struct
230 {
231   SMALL_RECT WriteRegion;
232 } CSRSS_WRITE_CONSOLE_OUTPUT_REPLY, *PCSRSS_WRITE_CONSOLE_OUTPUT_REPLY;
233
234 typedef struct
235 {
236    HANDLE ConsoleInput;
237 } CSRSS_FLUSH_INPUT_BUFFER_REQUEST, *PCSRSS_FLUSH_INPUT_BUFFER_REQUEST;
238
239 typedef struct
240 {
241   HANDLE     ConsoleHandle;
242   SMALL_RECT ScrollRectangle;
243   BOOLEAN    UseClipRectangle;
244   SMALL_RECT ClipRectangle;
245   COORD      DestinationOrigin;
246   CHAR_INFO  Fill;
247 } CSRSS_SCROLL_CONSOLE_SCREEN_BUFFER_REQUEST, *PCSRSS_SCROLL_CONSOLE_SCREEN_BUFFER_REQUEST;
248
249 typedef struct
250 {
251   HANDLE ConsoleHandle;
252   DWORD NumCharsToRead;
253   COORD ReadCoord;
254 }CSRSS_READ_CONSOLE_OUTPUT_CHAR_REQUEST, *PCSRSS_READ_CONSOLE_OUTPUT_CHAR_REQUEST;
255
256 typedef struct
257 {
258   COORD EndCoord;
259   CHAR String[1];
260 }CSRSS_READ_CONSOLE_OUTPUT_CHAR_REPLY, *PCSRSS_READ_CONSOLE_OUTPUT_CHAR_REPLY;
261
262 typedef struct
263 {
264   HANDLE ConsoleHandle;
265   DWORD NumAttrsToRead;
266   COORD ReadCoord;
267 }CSRSS_READ_CONSOLE_OUTPUT_ATTRIB_REQUEST, *PCSRSS_READ_CONSOLE_OUTPUT_ATTRIB_REQUEST;
268
269 typedef struct
270 {
271   COORD EndCoord;
272   CHAR String[1];
273 }CSRSS_READ_CONSOLE_OUTPUT_ATTRIB_REPLY, *PCSRSS_READ_CONSOLE_OUTPUT_ATTRIB_REPLY;
274
275 typedef struct
276 {
277   HANDLE ConsoleHandle;
278 }CSRSS_GET_NUM_INPUT_EVENTS_REQUEST, *PCSRSS_GET_NUM_INPUT_EVENTS_REQUEST;
279
280 typedef struct
281 {
282    DWORD NumInputEvents;
283 }CSRSS_GET_NUM_INPUT_EVENTS_REPLY, *PCSRSS_GET_NUM_INPUT_EVENTS_REPLY;
284
285 typedef struct
286 {
287   DWORD ProcessId;
288 } CSRSS_REGISTER_SERVICES_PROCESS_REQUEST, *PCSRSS_REGISTER_SERVICES_PROCESS_REQUEST;
289
290 typedef struct
291 {
292   UINT Flags;
293   DWORD Reserved;
294 } CSRSS_EXIT_REACTOS_REQUEST, *PCSRSS_EXIT_REACTOS_REQUEST;
295
296 typedef struct
297 {
298   DWORD Level;
299   DWORD Flags;
300 } CSRSS_SHUTDOWN_PARAMETERS, *PCSRSS_SHUTDOWN_PARAMETERS;
301
302 typedef struct
303 {
304   HANDLE ConsoleHandle;
305   DWORD Length;
306   INPUT_RECORD* InputRecord;
307 } CSRSS_PEEK_CONSOLE_INPUT_REQUEST, *PCSRSS_PEEK_CONSOLE_INPUT_REQUEST;
308
309 typedef struct
310 {
311   DWORD Length;
312 } CSRSS_PEEK_CONSOLE_INPUT_REPLY, *PCSRSS_PEEK_CONSOLE_INPUT_REPLY;
313
314
315 #define CSRSS_MAX_WRITE_CONSOLE_REQUEST       \
316       (MAX_MESSAGE_DATA - sizeof(ULONG) - sizeof(CSRSS_WRITE_CONSOLE_REQUEST))
317
318 #define CSRSS_MAX_SET_TITLE_REQUEST           (MAX_MESSAGE_DATA - sizeof( HANDLE ) - sizeof( DWORD ) - sizeof( ULONG ) - sizeof( LPC_MESSAGE_HEADER ))
319
320 #define CSRSS_MAX_WRITE_CONSOLE_OUTPUT_CHAR   (MAX_MESSAGE_DATA - sizeof( ULONG ) - sizeof( CSRSS_WRITE_CONSOLE_OUTPUT_CHAR_REQUEST ))
321
322 #define CSRSS_MAX_WRITE_CONSOLE_OUTPUT_ATTRIB   ((MAX_MESSAGE_DATA - sizeof( ULONG ) - sizeof( CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB_REQUEST )) / 2)
323
324 #define CSRSS_MAX_READ_CONSOLE_REQUEST        (MAX_MESSAGE_DATA - sizeof( ULONG ) - sizeof( CSRSS_READ_CONSOLE_REQUEST ))
325
326 #define CSRSS_MAX_READ_CONSOLE_OUTPUT_CHAR    (MAX_MESSAGE_DATA - sizeof(ULONG) - sizeof(HANDLE) - sizeof(DWORD) - sizeof(CSRSS_READ_CONSOLE_OUTPUT_CHAR_REQUEST))
327
328 #define CSRSS_MAX_READ_CONSOLE_OUTPUT_ATTRIB  (MAX_MESSAGE_DATA - sizeof(ULONG) - sizeof(HANDLE) - sizeof(DWORD) - sizeof(CSRSS_READ_CONSOLE_OUTPUT_ATTRIB_REQUEST))
329
330 // FIXME: it should be 80. Is this a limit due to LPC msg size?
331 #define CSRSS_MAX_TITLE_LENGTH          50
332
333 #define CSRSS_CREATE_PROCESS                (0x0)
334 #define CSRSS_TERMINATE_PROCESS             (0x1)
335 #define CSRSS_WRITE_CONSOLE                 (0x2)
336 #define CSRSS_READ_CONSOLE                  (0x3)
337 #define CSRSS_ALLOC_CONSOLE                 (0x4)
338 #define CSRSS_FREE_CONSOLE                  (0x5)
339 #define CSRSS_CONNECT_PROCESS               (0x6)
340 #define CSRSS_SCREEN_BUFFER_INFO            (0x7)
341 #define CSRSS_SET_CURSOR                    (0x8)
342 #define CSRSS_FILL_OUTPUT                   (0x9)
343 #define CSRSS_READ_INPUT                    (0xA)
344 #define CSRSS_WRITE_CONSOLE_OUTPUT_CHAR     (0xB)
345 #define CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB   (0xC)
346 #define CSRSS_FILL_OUTPUT_ATTRIB            (0xD)
347 #define CSRSS_GET_CURSOR_INFO               (0xE)
348 #define CSRSS_SET_CURSOR_INFO               (0xF)
349 #define CSRSS_SET_ATTRIB                    (0x10)
350 #define CSRSS_GET_MODE                      (0x11)
351 #define CSRSS_SET_MODE                      (0x12)
352 #define CSRSS_CREATE_SCREEN_BUFFER          (0x13)
353 #define CSRSS_SET_SCREEN_BUFFER             (0x14)
354 #define CSRSS_SET_TITLE                     (0x15)
355 #define CSRSS_GET_TITLE                     (0x16)
356 #define CSRSS_WRITE_CONSOLE_OUTPUT          (0x17)
357 #define CSRSS_FLUSH_INPUT_BUFFER            (0x18)
358 #define CSRSS_SCROLL_CONSOLE_SCREEN_BUFFER  (0x19)
359 #define CSRSS_READ_CONSOLE_OUTPUT_CHAR      (0x1A)
360 #define CSRSS_READ_CONSOLE_OUTPUT_ATTRIB    (0x1B)
361 #define CSRSS_GET_NUM_INPUT_EVENTS          (0x1C)
362 #define CSRSS_REGISTER_SERVICES_PROCESS     (0x1D)
363 #define CSRSS_EXIT_REACTOS                  (0x1E)
364 #define CSRSS_GET_SHUTDOWN_PARAMETERS       (0x1F)
365 #define CSRSS_SET_SHUTDOWN_PARAMETERS       (0x20)
366 #define CSRSS_PEEK_CONSOLE_INPUT            (0x21)
367
368
369 /* Keep in sync with definition below. */
370 #define CSRSS_REQUEST_HEADER_SIZE (sizeof(LPC_MESSAGE_HEADER) + sizeof(ULONG))
371
372 typedef struct
373 {
374   LPC_MESSAGE_HEADER Header;
375   ULONG Type;
376   union
377   {
378     CSRSS_CREATE_PROCESS_REQUEST CreateProcessRequest;
379     CSRSS_CONNECT_PROCESS_REQUEST ConnectRequest;
380     CSRSS_WRITE_CONSOLE_REQUEST WriteConsoleRequest;
381     CSRSS_READ_CONSOLE_REQUEST ReadConsoleRequest;
382     CSRSS_SCREEN_BUFFER_INFO_REQUEST ScreenBufferInfoRequest;
383     CSRSS_SET_CURSOR_REQUEST SetCursorRequest;
384     CSRSS_FILL_OUTPUT_REQUEST FillOutputRequest;
385     CSRSS_READ_INPUT_REQUEST ReadInputRequest;
386     CSRSS_WRITE_CONSOLE_OUTPUT_CHAR_REQUEST WriteConsoleOutputCharRequest;
387     CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB_REQUEST WriteConsoleOutputAttribRequest;
388     CSRSS_FILL_OUTPUT_ATTRIB_REQUEST FillOutputAttribRequest;
389     CSRSS_SET_CURSOR_INFO_REQUEST SetCursorInfoRequest;
390     CSRSS_GET_CURSOR_INFO_REQUEST GetCursorInfoRequest;
391     CSRSS_SET_ATTRIB_REQUEST SetAttribRequest;
392     CSRSS_SET_CONSOLE_MODE_REQUEST SetConsoleModeRequest;
393     CSRSS_GET_CONSOLE_MODE_REQUEST GetConsoleModeRequest;
394     CSRSS_CREATE_SCREEN_BUFFER_REQUEST CreateScreenBufferRequest;
395     CSRSS_SET_ACTIVE_SCREEN_BUFFER_REQUEST SetActiveScreenBufferRequest;
396     CSRSS_SET_TITLE_REQUEST SetTitleRequest;
397     CSRSS_GET_TITLE_REQUEST GetTitleRequest;
398     CSRSS_WRITE_CONSOLE_OUTPUT_REQUEST WriteConsoleOutputRequest;
399     CSRSS_FLUSH_INPUT_BUFFER_REQUEST FlushInputBufferRequest;
400     CSRSS_SCROLL_CONSOLE_SCREEN_BUFFER_REQUEST 
401     ScrollConsoleScreenBufferRequest;
402     CSRSS_READ_CONSOLE_OUTPUT_CHAR_REQUEST ReadConsoleOutputCharRequest;
403     CSRSS_READ_CONSOLE_OUTPUT_ATTRIB_REQUEST ReadConsoleOutputAttribRequest;
404     CSRSS_GET_NUM_INPUT_EVENTS_REQUEST GetNumInputEventsRequest;
405     CSRSS_REGISTER_SERVICES_PROCESS_REQUEST RegisterServicesProcessRequest;
406     CSRSS_EXIT_REACTOS_REQUEST ExitReactosRequest;
407     CSRSS_SHUTDOWN_PARAMETERS SetShutdownParametersRequest;
408     CSRSS_PEEK_CONSOLE_INPUT_REQUEST PeekConsoleInputRequest;
409   } Data;
410 } CSRSS_API_REQUEST, *PCSRSS_API_REQUEST;
411
412 typedef struct
413 {
414   LPC_MESSAGE_HEADER Header;
415   NTSTATUS Status;
416   union
417   {
418     CSRSS_CREATE_PROCESS_REPLY CreateProcessReply;
419     CSRSS_CONNECT_PROCESS_REPLY ConnectReply;
420     CSRSS_WRITE_CONSOLE_REPLY WriteConsoleReply;
421     CSRSS_READ_CONSOLE_REPLY ReadConsoleReply;
422     CSRSS_ALLOC_CONSOLE_REPLY AllocConsoleReply;
423     CSRSS_SCREEN_BUFFER_INFO_REPLY ScreenBufferInfoReply;
424     CSRSS_READ_INPUT_REPLY ReadInputReply;
425     CSRSS_WRITE_CONSOLE_OUTPUT_CHAR_REPLY WriteConsoleOutputCharReply;
426     CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB_REPLY WriteConsoleOutputAttribReply;
427     CSRSS_GET_CURSOR_INFO_REPLY GetCursorInfoReply;
428     CSRSS_GET_CONSOLE_MODE_REPLY GetConsoleModeReply;
429     CSRSS_CREATE_SCREEN_BUFFER_REPLY CreateScreenBufferReply;
430     CSRSS_GET_TITLE_REPLY GetTitleReply;
431     CSRSS_WRITE_CONSOLE_OUTPUT_REPLY WriteConsoleOutputReply;
432     CSRSS_READ_CONSOLE_OUTPUT_CHAR_REPLY ReadConsoleOutputCharReply;
433     CSRSS_READ_CONSOLE_OUTPUT_ATTRIB_REPLY ReadConsoleOutputAttribReply;
434     CSRSS_GET_NUM_INPUT_EVENTS_REPLY GetNumInputEventsReply;
435     CSRSS_SHUTDOWN_PARAMETERS GetShutdownParametersReply;
436     CSRSS_PEEK_CONSOLE_INPUT_REPLY PeekConsoleInputReply;
437   } Data;
438 } CSRSS_API_REPLY, *PCSRSS_API_REPLY;
439
440 #endif /* __INCLUDE_CSRSS_CSRSS_H */