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