[KERNEL32][CONSRV]
[reactos.git] / include / reactos / subsys / win / conmsg.h
index 6b0ee8e..0685357 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS Client/Server Runtime SubSystem
+ * PROJECT:         ReactOS Console Server DLL
  * FILE:            include/reactos/subsys/win/conmsg.h
  * PURPOSE:         Public definitions for communication
  *                  between Console API Clients and Servers
 #define CONSRV_SERVERDLL_INDEX      2
 #define CONSRV_FIRST_API_NUMBER     512
 
-// Windows 2k3 tables, adapted from http://j00ru.vexillium.org/csrss_list/api_list.html#Windows_2k3
-// plus a little bit of Windows 7. It is for testing purposes. After that I will add stubs.
-// Some names are also deduced from the subsystems/win32/csrss/csrsrv/server.c ones.
+// Windows Server 2003 table from http://j00ru.vexillium.org/csrss_list/api_list.html#Windows_2k3
 typedef enum _CONSRV_API_NUMBER
 {
-    // ConsolepOpenConsole = CONSRV_FIRST_API_NUMBER,
-    ConsolepGetConsoleInput = CONSRV_FIRST_API_NUMBER,
+    ConsolepOpenConsole = CONSRV_FIRST_API_NUMBER,
+    ConsolepGetConsoleInput,
     ConsolepWriteConsoleInput,
     ConsolepReadConsoleOutput,
     ConsolepWriteConsoleOutput,
-    // ConsolepReadConsoleOutputString,
-    // ConsolepWriteConsoleOutputString,
-    // ConsolepFillConsoleOutput,
+    ConsolepReadConsoleOutputString,
+    ConsolepWriteConsoleOutputString,
+    ConsolepFillConsoleOutput,
     ConsolepGetMode,
-    // ConsolepGetNumberOfFonts,
+    ConsolepGetNumberOfFonts,
     ConsolepGetNumberOfInputEvents,
     ConsolepGetScreenBufferInfo,
     ConsolepGetCursorInfo,
-    // ConsolepGetMouseInfo,
-    // ConsolepGetFontInfo,
-    // ConsolepGetFontSize,
-    // ConsolepGetCurrentFont,
+    ConsolepGetMouseInfo,
+    ConsolepGetFontInfo,
+    ConsolepGetFontSize,
+    ConsolepGetCurrentFont,
     ConsolepSetMode,
     ConsolepSetActiveScreenBuffer,
     ConsolepFlushInputBuffer,
-    // ConsolepGetLargestWindowSize,
+    ConsolepGetLargestWindowSize,
     ConsolepSetScreenBufferSize,
-    // ConsolepSetCursorPosition,
+    ConsolepSetCursorPosition,
     ConsolepSetCursorInfo,
-    // ConsolepSetWindowInfo,
+    ConsolepSetWindowInfo,
     ConsolepScrollScreenBuffer,
-    // ConsolepSetTextAttribute,
-    // ConsolepSetFont,
+    ConsolepSetTextAttribute,
+    ConsolepSetFont,
     ConsolepSetIcon,
     ConsolepReadConsole,
     ConsolepWriteConsole,
     ConsolepDuplicateHandle,
-    /**/ ConsolepGetHandleInformation /**/,
-    // ConsolepSetHandleInformation,
+    ConsolepGetHandleInformation,
+    ConsolepSetHandleInformation,
     ConsolepCloseHandle,
     ConsolepVerifyIoHandle,
-    ConsolepAlloc,
-    ConsolepFree,
+    ConsolepAlloc,                          // Not present in Win7
+    ConsolepFree,                           // Not present in Win7
     ConsolepGetTitle,
     ConsolepSetTitle,
     ConsolepCreateScreenBuffer,
-    // ConsolepInvalidateBitMapRect,
-    // ConsolepVDMOperation,
+    ConsolepInvalidateBitMapRect,
+    ConsolepVDMOperation,
     ConsolepSetCursor,
-    // ConsolepShowCursor,
-    // ConsolepMenuControl,
-    // ConsolepSetPalette,
-    // ConsolepSetDisplayMode,
-    // ConsolepRegisterVDM,
+    ConsolepShowCursor,
+    ConsolepMenuControl,
+    ConsolepSetPalette,
+    ConsolepSetDisplayMode,
+    ConsolepRegisterVDM,
     ConsolepGetHardwareState,
     ConsolepSetHardwareState,
-    // ConsolepGetDisplayMode,
+    ConsolepGetDisplayMode,
     ConsolepAddAlias,
     ConsolepGetAlias,
     ConsolepGetAliasesLength,
@@ -82,456 +80,731 @@ typedef enum _CONSRV_API_NUMBER
     ConsolepSetNumberOfCommands,
     ConsolepGetCommandHistoryLength,
     ConsolepGetCommandHistory,
-    // ConsolepSetCommandHistoryMode,
+    ConsolepSetCommandHistoryMode,          // Not present in Vista+
     ConsolepGetCP,
     ConsolepSetCP,
-    // ConsolepSetKeyShortcuts,
-    // ConsolepSetMenuClose,
-    // ConsolepNotifyLastClose,
+    ConsolepSetKeyShortcuts,
+    ConsolepSetMenuClose,
+    ConsolepNotifyLastClose,
     ConsolepGenerateCtrlEvent,
-    // ConsolepGetKeyboardLayoutName,
+    ConsolepGetKeyboardLayoutName,
     ConsolepGetConsoleWindow,
-    // ConsolepCharType,
-    // ConsolepSetLocalEUDC,
-    // ConsolepSetCursorMode,
-    // ConsolepGetCursorMode,
-    // ConsolepRegisterOS2,
-    // ConsolepSetOS2OemFormat,
-    // ConsolepGetNlsMode,
-    // ConsolepSetNlsMode,
-    // ConsolepRegisterConsoleIME,
-    // ConsolepUnregisterConsoleIME,
-    // ConsolepGetLangId,
-    // ConsolepAttach,
+    ConsolepCharType,
+    ConsolepSetLocalEUDC,
+    ConsolepSetCursorMode,
+    ConsolepGetCursorMode,
+    ConsolepRegisterOS2,
+    ConsolepSetOS2OemFormat,
+    ConsolepGetNlsMode,
+    ConsolepSetNlsMode,
+    ConsolepRegisterConsoleIME,             // Not present in Win7
+    ConsolepUnregisterConsoleIME,           // Not present in Win7
+    // ConsolepQueryConsoleIME,                // Added only in Vista and Win2k8, not present in Win7
+    ConsolepGetLangId,
+    ConsolepAttach,                         // Not present in Win7
     ConsolepGetSelectionInfo,
     ConsolepGetProcessList,
-    ConsolepGetHistory,
-    ConsolepSetHistory,
+
+    ConsolepGetHistory,                     // Added in Vista+
+    ConsolepSetHistory,                     // Added in Vista+
+    // ConsolepSetCurrentFont,                 // Added in Vista+
+    // ConsolepSetScreenBufferInfo,            // Added in Vista+
+    // ConsolepClientConnect,                  // Added in Win7
 
     ConsolepMaxApiNumber
 } CONSRV_API_NUMBER, *PCONSRV_API_NUMBER;
 
+//
+// See http://msdn.microsoft.com/en-us/library/windows/desktop/bb773359(v=vs.85).aspx
+//
+typedef struct _CONSOLE_PROPERTIES
+{
+    WORD wFillAttribute;
+    WORD wPopupFillAttribute;
+
+    //
+    // Not on MSDN, but show up in binary
+    //
+    WORD wShowWindow;
+    WORD wUnknown;
+
+    COORD dwScreenBufferSize;
+    COORD dwWindowSize;
+    COORD dwWindowOrigin;
+    DWORD nFont;
+    DWORD nInputBufferSize;
+    COORD dwFontSize;
+    UINT uFontFamily;
+    UINT uFontWeight;
+    WCHAR FaceName[LF_FACESIZE];
+    UINT uCursorSize;
+    BOOL bFullScreen;
+    BOOL bQuickEdit;
+    BOOL bInsertMode;
+    BOOL bAutoPosition;
+    UINT uHistoryBufferSize;
+    UINT uNumberOfHistoryBuffers;
+    BOOL bHistoryNoDup;
+    COLORREF ColorTable[16];
+
+    //NT_FE_CONSOLE_PROPS
+    UINT uCodePage;
+} CONSOLE_PROPERTIES;
+
+//
+// To minimize code changes, some fields were put here even though they really only belong in
+// CONSRV_API_CONNECTINFO. Do not change the ordering however, as it's required for Windows
+// compatibility.
+//
+typedef struct _CONSOLE_START_INFO
+{
+    INT IconIndex;
+    HICON IconHandle1;
+    HICON IconHandle2;
+    DWORD dwHotKey;
+    DWORD dwStartupFlags;
+    CONSOLE_PROPERTIES;
+
+    BOOLEAN ConsoleNeeded; // Used for GUI apps only.
+    LPTHREAD_START_ROUTINE CtrlDispatcher;
+    LPTHREAD_START_ROUTINE ImeDispatcher;
+    LPTHREAD_START_ROUTINE PropDispatcher;
+    ULONG TitleLength;
+    WCHAR ConsoleTitle[MAX_PATH + 1];   // Console title or full path to the startup shortcut
+    ULONG DesktopLength;
+    PWCHAR DesktopPath;
+    ULONG AppNameLength;
+    WCHAR AppPath[128];        // Full path of the launched app
+    ULONG IconPathLength;
+    WCHAR IconPath[MAX_PATH + 1];       // Path to the file containing the icon
+} CONSOLE_START_INFO, *PCONSOLE_START_INFO;
+
+typedef struct _CONSRV_API_CONNECTINFO
+{
+    HANDLE ConsoleHandle;
+    HANDLE InputWaitHandle;
+    HANDLE InputHandle;
+    HANDLE OutputHandle;
+    HANDLE ErrorHandle;
+    HANDLE Event1;
+    HANDLE Event2;
+    /* Adapted from CONSOLE_ALLOCCONSOLE */
+    CONSOLE_START_INFO ConsoleStartInfo;
+} CONSRV_API_CONNECTINFO, *PCONSRV_API_CONNECTINFO;
 
-#define CSR_API_MESSAGE_HEADER_SIZE(Type)       (FIELD_OFFSET(CSR_API_MESSAGE, Data) + sizeof(Type))
-#define CSRSS_MAX_WRITE_CONSOLE                 (LPC_MAX_DATA_LENGTH - CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE))
-#define CSRSS_MAX_WRITE_CONSOLE_OUTPUT_CHAR     (LPC_MAX_DATA_LENGTH - CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE_OUTPUT_CHAR))
-#define CSRSS_MAX_WRITE_CONSOLE_OUTPUT_ATTRIB   (LPC_MAX_DATA_LENGTH - CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB))
-#define CSRSS_MAX_READ_CONSOLE_OUTPUT_CHAR      (LPC_MAX_DATA_LENGTH - CSR_API_MESSAGE_HEADER_SIZE(CSRSS_READ_CONSOLE_OUTPUT_CHAR))
-#define CSRSS_MAX_READ_CONSOLE_OUTPUT_ATTRIB    (LPC_MAX_DATA_LENGTH - CSR_API_MESSAGE_HEADER_SIZE(CSRSS_READ_CONSOLE_OUTPUT_ATTRIB))
-
-#define CONSOLE_INPUT_MODE_VALID  (0x0f)
-#define CONSOLE_OUTPUT_MODE_VALID (0x03)
-
+#if defined(_M_IX86)
+C_ASSERT(sizeof(CONSRV_API_CONNECTINFO) == 0x638);
+#endif
 
 typedef struct
 {
-    USHORT nMaxIds;
-    PDWORD ProcessId;
-    ULONG nProcessIdsTotal;
-} CSRSS_GET_PROCESS_LIST, *PCSRSS_GET_PROCESS_LIST;
+    HANDLE ConsoleHandle;
+    ULONG  ProcessCount;
+    PDWORD ProcessIdsList;
+} CONSOLE_GETPROCESSLIST, *PCONSOLE_GETPROCESSLIST;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    BOOL Unicode;
-    ULONG NrCharactersToWrite;
-    ULONG NrCharactersWritten;
-    HANDLE UnpauseEvent;
-    BYTE Buffer[0];
-} CSRSS_WRITE_CONSOLE, *PCSRSS_WRITE_CONSOLE;
+    DWORD  CtrlEvent;
+    DWORD  ProcessGroupId;
+} CONSOLE_GENERATECTRLEVENT, *PCONSOLE_GENERATECTRLEVENT;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    BOOL Unicode;
-    WORD NrCharactersToRead;
-    WORD NrCharactersRead;
-    HANDLE EventHandle;
-    PVOID Buffer;
-    UNICODE_STRING ExeName;
-    DWORD CtrlWakeupMask;
-    DWORD ControlKeyState;
-} CSRSS_READ_CONSOLE, *PCSRSS_READ_CONSOLE;
+} CONSOLE_NOTIFYLASTCLOSE, *PCONSOLE_NOTIFYLASTCLOSE;
+
 
-typedef VOID (CALLBACK *PCONTROLDISPATCHER)(DWORD);
 
 typedef struct
 {
-    PCONTROLDISPATCHER CtrlDispatcher;
-    BOOLEAN ConsoleNeeded;
-    INT ShowCmd;
-    HANDLE Console;
-    HANDLE InputHandle;
+    HANDLE ConsoleHandle;
     HANDLE OutputHandle;
-} CSRSS_ALLOC_CONSOLE, *PCSRSS_ALLOC_CONSOLE;
+
+    CHAR  StaticBuffer[80];
+    PVOID Buffer; // BufPtr
+    ULONG NumBytes;
+
+    // On Windows, the client never uses this member
+    ULONG Reserved1;
+
+    BOOLEAN UsingStaticBuffer;
+    BOOLEAN Unicode;
+
+    // On Windows, the client never uses this member
+    CHAR Reserved2[6];
+} CONSOLE_WRITECONSOLE, *PCONSOLE_WRITECONSOLE;
 
 typedef struct
 {
-    ULONG Dummy;
-} CSRSS_FREE_CONSOLE, *PCSRSS_FREE_CONSOLE;
+    HANDLE ConsoleHandle;
+    HANDLE InputHandle;
+
+    USHORT ExeLength;
+
+    CHAR  StaticBuffer[80];
+    PVOID Buffer; // BufPtr
+    ULONG NumBytes;
+
+    ULONG CaptureBufferSize;
+
+    ULONG   InitialNumBytes;
+    ULONG   CtrlWakeupMask;
+    ULONG   ControlKeyState;
+    BOOLEAN Unicode;
+} CONSOLE_READCONSOLE, *PCONSOLE_READCONSOLE;
 
 typedef struct
 {
+    PCONSOLE_START_INFO ConsoleStartInfo;
+
     HANDLE ConsoleHandle;
-    CONSOLE_SCREEN_BUFFER_INFO Info;
-} CSRSS_SCREEN_BUFFER_INFO, *PCSRSS_SCREEN_BUFFER_INFO;
+    HANDLE InputHandle;
+    HANDLE OutputHandle;
+    HANDLE ErrorHandle;
+    HANDLE InputWaitHandle;
+    LPTHREAD_START_ROUTINE CtrlDispatcher;
+    LPTHREAD_START_ROUTINE PropDispatcher;
+} CONSOLE_ALLOCCONSOLE, *PCONSOLE_ALLOCCONSOLE;
 
 typedef struct
 {
+    DWORD ProcessId; // If ProcessId == ATTACH_PARENT_PROCESS == -1, then attach the current process to its parent process console.
     HANDLE ConsoleHandle;
-    COORD Position;
-} CSRSS_SET_CURSOR, *PCSRSS_SET_CURSOR;
+    HANDLE InputHandle;
+    HANDLE OutputHandle;
+    HANDLE ErrorHandle;
+    HANDLE InputWaitHandle;
+    LPTHREAD_START_ROUTINE CtrlDispatcher;
+    LPTHREAD_START_ROUTINE PropDispatcher;
+} CONSOLE_ATTACHCONSOLE, *PCONSOLE_ATTACHCONSOLE;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    BOOL Unicode;
-    union
-    {
-        CHAR AsciiChar;
-        WCHAR UnicodeChar;
-    } Char;
-    COORD Position;
-    WORD Length;
-    ULONG NrCharactersWritten;
-} CSRSS_FILL_OUTPUT, *PCSRSS_FILL_OUTPUT;
+} CONSOLE_FREECONSOLE, *PCONSOLE_FREECONSOLE;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    CHAR Attribute;
-    COORD Coord;
-    WORD Length;
-} CSRSS_FILL_OUTPUT_ATTRIB, *PCSRSS_FILL_OUTPUT_ATTRIB;
+    HANDLE OutputHandle;
+    COORD  ScreenBufferSize;
+    COORD  CursorPosition;
+    COORD  ViewOrigin;
+    WORD   Attributes;
+    COORD  ViewSize;
+    COORD  MaximumViewSize;
+} CONSOLE_GETSCREENBUFFERINFO, *PCONSOLE_GETSCREENBUFFERINFO;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    BOOL Unicode;
-    INPUT_RECORD Input;
-    BOOL MoreEvents;
-    HANDLE Event;
-} CSRSS_READ_INPUT, *PCSRSS_READ_INPUT;
+    HANDLE OutputHandle;
+    COORD  Position;
+} CONSOLE_SETCURSORPOSITION, *PCONSOLE_SETCURSORPOSITION;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    BOOL Unicode;
-    WORD Length;
-    COORD Coord;
-    COORD EndCoord;
-    ULONG NrCharactersWritten;
-    CHAR String[0];
-} CSRSS_WRITE_CONSOLE_OUTPUT_CHAR, *PCSRSS_WRITE_CONSOLE_OUTPUT_CHAR;
+    HANDLE OutputHandle;
+    BOOL   Show;
+    INT    RefCount;
+} CONSOLE_SHOWCURSOR, *PCONSOLE_SHOWCURSOR;
 
 typedef struct
 {
-    HANDLE ConsoleHandle;
-    WORD Length;
-    COORD Coord;
-    COORD EndCoord;
-    WORD Attribute[0];
-} CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB, *PCSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB;
+    HANDLE  ConsoleHandle;
+    HANDLE  OutputHandle;
+    HCURSOR CursorHandle;
+} CONSOLE_SETCURSOR, *PCONSOLE_SETCURSOR;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
+    HANDLE OutputHandle;
     CONSOLE_CURSOR_INFO Info;
-} CSRSS_GET_CURSOR_INFO, *PCSRSS_GET_CURSOR_INFO;
+/*
+    DWORD   Size;
+    BOOLEAN Visible;
+*/
+} CONSOLE_GETSETCURSORINFO, *PCONSOLE_GETSETCURSORINFO;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    CONSOLE_CURSOR_INFO Info;
-} CSRSS_SET_CURSOR_INFO, *PCSRSS_SET_CURSOR_INFO;
+    ULONG  NumButtons;
+} CONSOLE_GETMOUSEINFO, *PCONSOLE_GETMOUSEINFO;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    WORD Attrib;
-} CSRSS_SET_ATTRIB, *PCSRSS_SET_ATTRIB;
+    HANDLE OutputHandle;
+    WORD   Attributes;
+} CONSOLE_SETTEXTATTRIB, *PCONSOLE_SETTEXTATTRIB;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    DWORD Mode;
-} CSRSS_SET_CONSOLE_MODE, *PCSRSS_SET_CONSOLE_MODE;
+    HANDLE Handle;
+    DWORD  Mode;
+} CONSOLE_GETSETCONSOLEMODE, *PCONSOLE_GETSETCONSOLEMODE;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    DWORD ConsoleMode;
-} CSRSS_GET_CONSOLE_MODE, *PCSRSS_GET_CONSOLE_MODE;
+    DWORD  DisplayMode; // ModeFlags
+} CONSOLE_GETDISPLAYMODE, *PCONSOLE_GETDISPLAYMODE;
 
 typedef struct
 {
-    DWORD Access;
-    DWORD ShareMode;
-    BOOL Inheritable;
-    HANDLE OutputHandle;  /* handle to newly created screen buffer */
-} CSRSS_CREATE_SCREEN_BUFFER, *PCSRSS_CREATE_SCREEN_BUFFER;
+    HANDLE ConsoleHandle;
+    HANDLE OutputHandle;
+    DWORD  DisplayMode; // ModeFlags
+    COORD  NewSBDim;
+    HANDLE EventHandle;
+} CONSOLE_SETDISPLAYMODE, *PCONSOLE_SETDISPLAYMODE;
+
+/*
+ * Console hardware states.
+ */
+#define CONSOLE_HARDWARE_STATE_GDI_MANAGED 0
+#define CONSOLE_HARDWARE_STATE_DIRECT      1
 
 typedef struct
 {
-    HANDLE OutputHandle;  /* handle to screen buffer to switch to */
-} CSRSS_SET_SCREEN_BUFFER, *PCSRSS_SET_SCREEN_BUFFER;
+    HANDLE ConsoleHandle;
+    HANDLE OutputHandle;
+    DWORD  Flags;
+    DWORD  State;
+} CONSOLE_GETSETHWSTATE, *PCONSOLE_GETSETHWSTATE;
+
+
 
 typedef struct
 {
-    DWORD Length;
-    PWCHAR Title;
-} CSRSS_SET_TITLE, *PCSRSS_SET_TITLE;
+    HANDLE ConsoleHandle;
+    DWORD  DesiredAccess;
+    BOOL   InheritHandle;
+    DWORD  ShareMode;
+    /* Type of the screen buffer: CONSOLE_TEXTMODE_BUFFER or CONSOLE_GRAPHICS_BUFFER */
+    DWORD  ScreenBufferType;
+    /*
+     * This structure holds the initialization information
+     * for graphics screen buffers.
+     */
+    CONSOLE_GRAPHICS_BUFFER_INFO GraphicsBufferInfo;
+    HANDLE hMutex;
+    PVOID  lpBitMap;
+    HANDLE OutputHandle;     /* Handle to newly created screen buffer */
+} CONSOLE_CREATESCREENBUFFER, *PCONSOLE_CREATESCREENBUFFER;
 
 typedef struct
 {
-    DWORD Length;
-    PWCHAR Title;
-} CSRSS_GET_TITLE, *PCSRSS_GET_TITLE;
+    HANDLE ConsoleHandle;
+    HANDLE OutputHandle;  /* Handle to screen buffer to switch to */
+} CONSOLE_SETACTIVESCREENBUFFER, *PCONSOLE_SETACTIVESCREENBUFFER;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    BOOL Unicode;
-    COORD BufferSize;
-    COORD BufferCoord;
-    SMALL_RECT WriteRegion;
-    CHAR_INFO* CharInfo;
-} CSRSS_WRITE_CONSOLE_OUTPUT, *PCSRSS_WRITE_CONSOLE_OUTPUT;
+    HANDLE OutputHandle;
+    SMALL_RECT Region;
+} CONSOLE_INVALIDATEDIBITS, *PCONSOLE_INVALIDATEDIBITS;
 
 typedef struct
 {
-    HANDLE ConsoleInput;
-} CSRSS_FLUSH_INPUT_BUFFER, *PCSRSS_FLUSH_INPUT_BUFFER;
+    HANDLE   ConsoleHandle;
+    HANDLE   OutputHandle;
+    HPALETTE PaletteHandle;
+    UINT     Usage;
+} CONSOLE_SETPALETTE, *PCONSOLE_SETPALETTE;
+
+typedef struct
+{
+    HANDLE  ConsoleHandle;
+    ULONG   Length;
+    PVOID   Title;
+    BOOLEAN Unicode;
+} CONSOLE_GETSETCONSOLETITLE, *PCONSOLE_GETSETCONSOLETITLE;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    BOOL Unicode;
+    HANDLE InputHandle;
+} CONSOLE_FLUSHINPUTBUFFER, *PCONSOLE_FLUSHINPUTBUFFER;
+
+typedef struct
+{
+    HANDLE     ConsoleHandle;
+    HANDLE     OutputHandle;
     SMALL_RECT ScrollRectangle;
-    BOOLEAN UseClipRectangle;
     SMALL_RECT ClipRectangle;
-    COORD DestinationOrigin;
-    CHAR_INFO Fill;
-} CSRSS_SCROLL_CONSOLE_SCREEN_BUFFER, *PCSRSS_SCROLL_CONSOLE_SCREEN_BUFFER;
+    BOOL       UseClipRectangle;
+    COORD      DestinationOrigin;
+    CHAR_INFO  Fill;
+    BOOLEAN    Unicode;
+} CONSOLE_SCROLLSCREENBUFFER, *PCONSOLE_SCROLLSCREENBUFFER;
+
+
+/*
+ * An attribute or a character are instances of the same entity, namely
+ * a "code" (what would be called an (ANSI) escape sequence). Therefore
+ * encode them inside the same structure.
+ */
+typedef enum _CODE_TYPE
+{
+    CODE_ASCII      = 0x01,
+    CODE_UNICODE    = 0x02,
+    CODE_ATTRIBUTE  = 0x03
+} CODE_TYPE;
+
+typedef union _CODE_ELEMENT
+{
+    CHAR  AsciiChar;
+    WCHAR UnicodeChar;
+    WORD  Attribute;
+} CODE_ELEMENT;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    BOOL Unicode;
-    DWORD NumCharsToRead;
-    COORD ReadCoord;
-    COORD EndCoord;
-    DWORD CharsRead;
-    CHAR String[0];
-} CSRSS_READ_CONSOLE_OUTPUT_CHAR, *PCSRSS_READ_CONSOLE_OUTPUT_CHAR;
+    HANDLE OutputHandle;
+    COORD  Coord;
+
+    CODE_TYPE CodeType;
+    CHAR      CodeStaticBuffer[80]; // == 40 * sizeof(CODE_ELEMENT)
+    PVOID     pCode; // Either a pointer to a character or to an attribute.
+    // union
+    // {
+        // PVOID  pCode;
+        // PCHAR  AsciiChar;
+        // PWCHAR UnicodeChar;
+        // PWORD  Attribute;
+    // } pCode;    // Either a pointer to a character or to an attribute.
+
+    ULONG NumCodes;
+} CONSOLE_READOUTPUTCODE , *PCONSOLE_READOUTPUTCODE,
+  CONSOLE_WRITEOUTPUTCODE, *PCONSOLE_WRITEOUTPUTCODE;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    DWORD NumAttrsToRead;
-    COORD ReadCoord;
-    COORD EndCoord;
-    WORD Attribute[0];
-} CSRSS_READ_CONSOLE_OUTPUT_ATTRIB, *PCSRSS_READ_CONSOLE_OUTPUT_ATTRIB;
+    HANDLE OutputHandle;
+    COORD  WriteCoord;
+
+    CODE_TYPE    CodeType;
+    CODE_ELEMENT Code; // Either a character or an attribute.
 
+    ULONG NumCodes;
+} CONSOLE_FILLOUTPUTCODE, *PCONSOLE_FILLOUTPUTCODE;
 
 typedef struct
 {
-    HANDLE ConsoleHandle;
-    BOOL Unicode;
-    DWORD Length;
-    INPUT_RECORD* InputRecord;
-} CSRSS_PEEK_CONSOLE_INPUT, *PCSRSS_PEEK_CONSOLE_INPUT;
+    HANDLE        ConsoleHandle;
+    HANDLE        InputHandle;
+    INPUT_RECORD  RecordStaticBuffer[5];
+    PINPUT_RECORD RecordBufPtr;
+    ULONG         NumRecords;
+    WORD          Flags;
+    BOOLEAN       Unicode;
+} CONSOLE_GETINPUT, *PCONSOLE_GETINPUT;
+
+typedef struct
+{
+    HANDLE        ConsoleHandle;
+    HANDLE        InputHandle;
+    INPUT_RECORD  RecordStaticBuffer[5];
+    PINPUT_RECORD RecordBufPtr;
+    ULONG         NumRecords;
+    BOOLEAN       Unicode;
+    BOOLEAN       AppendToEnd;
+} CONSOLE_WRITEINPUT, *PCONSOLE_WRITEINPUT;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    BOOL Unicode;
-    COORD BufferSize;
-    COORD BufferCoord;
+    HANDLE OutputHandle;
+
+    CHAR_INFO  StaticBuffer;
+    PCHAR_INFO CharInfo;
+
     SMALL_RECT ReadRegion;
-    CHAR_INFO* CharInfo;
-} CSRSS_READ_CONSOLE_OUTPUT, *PCSRSS_READ_CONSOLE_OUTPUT;
+    BOOLEAN Unicode;
+} CONSOLE_READOUTPUT, *PCONSOLE_READOUTPUT;
+
+typedef struct
+{
+    HANDLE ConsoleHandle;
+    HANDLE OutputHandle;
+
+    CHAR_INFO  StaticBuffer;
+    PCHAR_INFO CharInfo;
+
+    SMALL_RECT WriteRegion;
+    BOOLEAN Unicode;
+
+    /*
+     * If we are going to write too large (>= 64 kB, size of the CSR heap)
+     * data buffers, we allocate a heap buffer in the process' memory, and
+     * CSR will read it via NtReadVirtualMemory.
+     */
+    BOOLEAN UseVirtualMemory;
+} CONSOLE_WRITEOUTPUT, *PCONSOLE_WRITEOUTPUT;
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    BOOL Unicode;
-    DWORD Length;
-    INPUT_RECORD* InputRecord;
-} CSRSS_WRITE_CONSOLE_INPUT, *PCSRSS_WRITE_CONSOLE_INPUT;
+    HANDLE InputHandle;
+    ULONG  NumberOfEvents;
+} CONSOLE_GETNUMINPUTEVENTS, *PCONSOLE_GETNUMINPUTEVENTS;
+
+
 
 typedef struct
 {
+    HANDLE ConsoleHandle;
     HANDLE Handle;
-} CSRSS_CLOSE_HANDLE, *PCSRSS_CLOSE_HANDLE;
+} CONSOLE_CLOSEHANDLE, *PCONSOLE_CLOSEHANDLE;
 
 typedef struct
 {
+    BOOL   IsValid;
+    HANDLE ConsoleHandle;
     HANDLE Handle;
-} CSRSS_VERIFY_HANDLE, *PCSRSS_VERIFY_HANDLE;
+} CONSOLE_VERIFYHANDLE, *PCONSOLE_VERIFYHANDLE;
+
+typedef struct
+{
+    HANDLE  ConsoleHandle;
+    HANDLE  SourceHandle;
+    DWORD   DesiredAccess;
+    BOOLEAN InheritHandle;
+    DWORD   Options;
+    HANDLE  TargetHandle;
+} CONSOLE_DUPLICATEHANDLE, *PCONSOLE_DUPLICATEHANDLE;
 
 typedef struct
 {
+    HANDLE ConsoleHandle;
     HANDLE Handle;
-    DWORD Access;
-    BOOL Inheritable;
-    DWORD Options;
-} CSRSS_DUPLICATE_HANDLE, *PCSRSS_DUPLICATE_HANDLE;
+    DWORD  Flags;
+} CONSOLE_GETHANDLEINFO, *PCONSOLE_GETHANDLEINFO;
 
 typedef struct
 {
-    DWORD Access;
-    BOOL Inheritable;
+    HANDLE ConsoleHandle;
     HANDLE Handle;
-    DWORD ShareMode;
-} CSRSS_GET_INPUT_HANDLE, *PCSRSS_GET_INPUT_HANDLE,
-  CSRSS_GET_OUTPUT_HANDLE, *PCSRSS_GET_OUTPUT_HANDLE;
+    DWORD  Mask;
+    DWORD  Flags;
+} CONSOLE_SETHANDLEINFO, *PCONSOLE_SETHANDLEINFO;
+
+/*
+ * Type of handles.
+ */
+typedef enum _CONSOLE_HANDLE_TYPE
+{
+    HANDLE_INPUT    = 0x01,
+    HANDLE_OUTPUT   = 0x02
+} CONSOLE_HANDLE_TYPE;
 
 typedef struct
 {
-    HANDLE InputWaitHandle;
-} CSRSS_GET_INPUT_WAIT_HANDLE, *PCSRSS_GET_INPUT_WAIT_HANDLE;
+    HANDLE ConsoleHandle;
+    CONSOLE_HANDLE_TYPE HandleType;
+    DWORD  DesiredAccess;
+    BOOL   InheritHandle;
+    DWORD  ShareMode;
+    HANDLE Handle;
+} CONSOLE_OPENCONSOLE, *PCONSOLE_OPENCONSOLE;
 
-#define CONSOLE_HARDWARE_STATE_GET 0
-#define CONSOLE_HARDWARE_STATE_SET 1
 
-#define CONSOLE_HARDWARE_STATE_GDI_MANAGED 0
-#define CONSOLE_HARDWARE_STATE_DIRECT      1
 
 typedef struct
 {
     HANDLE ConsoleHandle;
-    DWORD SetGet; /* 0=get; 1=set */
-    DWORD State;
-} CSRSS_SETGET_CONSOLE_HW_STATE, *PCSRSS_SETGET_CONSOLE_HW_STATE;
+    HANDLE OutputHandle;
+    COORD  Size;
+} CONSOLE_GETLARGESTWINDOWSIZE, *PCONSOLE_GETLARGESTWINDOWSIZE;
 
 typedef struct
 {
-    HWND   WindowHandle;
-} CSRSS_GET_CONSOLE_WINDOW, *PCSRSS_GET_CONSOLE_WINDOW;
+    HANDLE ConsoleHandle;
+    HANDLE OutputHandle;
+    DWORD  CmdIdLow;
+    DWORD  CmdIdHigh;
+    HMENU  MenuHandle;
+} CONSOLE_MENUCONTROL, *PCONSOLE_MENUCONTROL;
 
 typedef struct
 {
-    HICON  WindowIcon;
-} CSRSS_SET_CONSOLE_ICON, *PCSRSS_SET_CONSOLE_ICON;
+    HANDLE ConsoleHandle;
+    BOOL   Enable;
+} CONSOLE_SETMENUCLOSE, *PCONSOLE_SETMENUCLOSE;
 
 typedef struct
 {
-    ULONG SourceLength;
-    ULONG ExeLength;
-    ULONG TargetLength;
-} CSRSS_ADD_CONSOLE_ALIAS, *PCSRSS_ADD_CONSOLE_ALIAS;
+    HANDLE ConsoleHandle;
+    HANDLE OutputHandle;
+    BOOL   Absolute;
+    SMALL_RECT WindowRect; // New console window position in the screen-buffer frame (Absolute == TRUE)
+                           // or in the old window position frame (Absolute == FALSE).
+} CONSOLE_SETWINDOWINFO, *PCONSOLE_SETWINDOWINFO;
 
 typedef struct
 {
-    ULONG SourceLength;
-    ULONG ExeLength;
-    ULONG BytesWritten;
-    ULONG TargetBufferLength;
-    PVOID TargetBuffer;
-} CSRSS_GET_CONSOLE_ALIAS, *PCSRSS_GET_CONSOLE_ALIAS;
+    HANDLE ConsoleHandle;
+    HWND   WindowHandle;
+} CONSOLE_GETWINDOW, *PCONSOLE_GETWINDOW;
 
 typedef struct
 {
-    LPWSTR lpExeName;
-    DWORD BytesWritten;
-    DWORD AliasBufferLength;
-    LPWSTR AliasBuffer;
-} CSRSS_GET_ALL_CONSOLE_ALIASES, *PCSRSS_GET_ALL_CONSOLE_ALIASES;
+    HANDLE ConsoleHandle;
+    HICON  IconHandle;
+} CONSOLE_SETICON, *PCONSOLE_SETICON;
+
+
 
 typedef struct
 {
-    LPWSTR lpExeName;
-    DWORD Length;
-} CSRSS_GET_ALL_CONSOLE_ALIASES_LENGTH, *PCSRSS_GET_ALL_CONSOLE_ALIASES_LENGTH;
+    HANDLE  ConsoleHandle;
+    USHORT  SourceLength;
+    USHORT  TargetLength; // Also used for storing the number of bytes written.
+    USHORT  ExeLength;
+    PVOID   Source;
+    PVOID   Target;
+    PVOID   ExeName;
+    BOOLEAN Unicode;
+    BOOLEAN Unicode2;
+} CONSOLE_ADDGETALIAS, *PCONSOLE_ADDGETALIAS;
 
 typedef struct
 {
-    DWORD BytesWritten;
-    DWORD Length;
-    LPWSTR ExeNames;
-} CSRSS_GET_CONSOLE_ALIASES_EXES, *PCSRSS_GET_CONSOLE_ALIASES_EXES;
+    HANDLE  ConsoleHandle;
+    USHORT  ExeLength;
+    PVOID   ExeName;
+    BOOLEAN Unicode;
+    BOOLEAN Unicode2;
+    ULONG   AliasesBufferLength;
+    PVOID   AliasesBuffer;
+} CONSOLE_GETALLALIASES, *PCONSOLE_GETALLALIASES;
 
 typedef struct
 {
-    DWORD Length;
-} CSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH, *PCSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH;
+    HANDLE  ConsoleHandle;
+    USHORT  ExeLength;
+    PVOID   ExeName;
+    ULONG   Length;
+    BOOLEAN Unicode;
+    BOOLEAN Unicode2;
+} CONSOLE_GETALLALIASESLENGTH, *PCONSOLE_GETALLALIASESLENGTH;
 
 typedef struct
 {
-    DWORD Event;
-    DWORD ProcessGroup;
-} CSRSS_GENERATE_CTRL_EVENT, *PCSRSS_GENERATE_CTRL_EVENT;
+    HANDLE  ConsoleHandle;
+    ULONG   Length ; // ExeLength; // ExesLength
+    PVOID   ExeNames;
+    BOOLEAN Unicode;
+} CONSOLE_GETALIASESEXES, *PCONSOLE_GETALIASESEXES;
 
 typedef struct
 {
-    HANDLE ConsoleHandle;
-    DWORD NumInputEvents;
-} CSRSS_GET_NUM_INPUT_EVENTS, *PCSRSS_GET_NUM_INPUT_EVENTS;
+    HANDLE  ConsoleHandle;
+    ULONG   Length;
+    BOOLEAN Unicode;
+} CONSOLE_GETALIASESEXESLENGTH, *PCONSOLE_GETALIASESEXESLENGTH;
+
+
 
 typedef struct
 {
-    HANDLE OutputHandle;
-    COORD Size;
-} CSRSS_SET_SCREEN_BUFFER_SIZE, *PCSRSS_SET_SCREEN_BUFFER_SIZE;
+    HANDLE  ConsoleHandle;
+    ULONG   HistoryLength;
+    PVOID   History;
+    USHORT  ExeLength;
+    PVOID   ExeName;
+    BOOLEAN Unicode;
+    BOOLEAN Unicode2;
+} CONSOLE_GETCOMMANDHISTORY, *PCONSOLE_GETCOMMANDHISTORY;
 
 typedef struct
 {
-    CONSOLE_SELECTION_INFO Info;
-} CSRSS_GET_CONSOLE_SELECTION_INFO, *PCSRSS_GET_CONSOLE_SELECTION_INFO;
+    HANDLE  ConsoleHandle;
+    ULONG   HistoryLength;
+    USHORT  ExeLength;
+    PVOID   ExeName;
+    BOOLEAN Unicode;
+    BOOLEAN Unicode2;
+} CONSOLE_GETCOMMANDHISTORYLENGTH, *PCONSOLE_GETCOMMANDHISTORYLENGTH;
 
 typedef struct
 {
-    UNICODE_STRING ExeName;
-    DWORD Length;
-} CSRSS_GET_COMMAND_HISTORY_LENGTH, *PCSRSS_GET_COMMAND_HISTORY_LENGTH;
+    HANDLE  ConsoleHandle;
+    USHORT  ExeLength;
+    PVOID   ExeName;
+    BOOLEAN Unicode;
+    BOOLEAN Unicode2;
+} CONSOLE_EXPUNGECOMMANDHISTORY, *PCONSOLE_EXPUNGECOMMANDHISTORY;
 
 typedef struct
 {
-    UNICODE_STRING ExeName;
-    PWCHAR History;
-    DWORD Length;
-} CSRSS_GET_COMMAND_HISTORY, *PCSRSS_GET_COMMAND_HISTORY;
+    UINT HistoryBufferSize;
+    UINT NumberOfHistoryBuffers;
+    DWORD dwFlags;
+} CONSOLE_GETSETHISTORYINFO, *PCONSOLE_GETSETHISTORYINFO;
 
 typedef struct
 {
-  UNICODE_STRING ExeName;
-} CSRSS_EXPUNGE_COMMAND_HISTORY, *PCSRSS_EXPUNGE_COMMAND_HISTORY;
+    HANDLE  ConsoleHandle;
+    ULONG   NumCommands;
+    USHORT  ExeLength;
+    PVOID   ExeName;
+    BOOLEAN Unicode;
+    BOOLEAN Unicode2;
+} CONSOLE_SETHISTORYNUMBERCOMMANDS, *PCONSOLE_SETHISTORYNUMBERCOMMANDS;
 
 typedef struct
 {
-    UNICODE_STRING ExeName;
-    DWORD NumCommands;
-} CSRSS_SET_HISTORY_NUMBER_COMMANDS, *PCSRSS_SET_HISTORY_NUMBER_COMMANDS;
+    HANDLE ConsoleHandle;
+    ULONG  Mode;
+} CONSOLE_SETHISTORYMODE, *PCONSOLE_SETHISTORYMODE;
+
+
 
 typedef struct
 {
-    DWORD HistoryBufferSize;
-    DWORD NumberOfHistoryBuffers;
-    DWORD dwFlags;
-} CSRSS_GET_HISTORY_INFO, *PCSRSS_GET_HISTORY_INFO,
-  CSRSS_SET_HISTORY_INFO, *PCSRSS_SET_HISTORY_INFO;;
+    HANDLE ConsoleHandle;
+    HANDLE OutputHandle;
+    COORD  Size;
+} CONSOLE_SETSCREENBUFFERSIZE, *PCONSOLE_SETSCREENBUFFERSIZE;
 
 typedef struct
 {
-    UINT CodePage;
-} CSRSS_GET_CONSOLE_CP, *PCSRSS_GET_CONSOLE_CP;
+    HANDLE ConsoleHandle;
+    CONSOLE_SELECTION_INFO Info;
+} CONSOLE_GETSELECTIONINFO, *PCONSOLE_GETSELECTIONINFO;
 
 typedef struct
 {
-    UINT CodePage;
-} CSRSS_SET_CONSOLE_CP, *PCSRSS_SET_CONSOLE_CP;
+    HANDLE ConsoleHandle;
+    UINT   CodePage;
+    BOOL   OutputCP;    // TRUE : Output Code Page ; FALSE : Input Code Page
+} CONSOLE_GETINPUTOUTPUTCP, *PCONSOLE_GETINPUTOUTPUTCP;
 
 typedef struct
 {
-    UINT CodePage;
-} CSRSS_GET_CONSOLE_OUTPUT_CP, *PCSRSS_GET_CONSOLE_OUTPUT_CP;
+    HANDLE ConsoleHandle;
+    UINT   CodePage;
+    BOOL   OutputCP;    // TRUE : Output Code Page ; FALSE : Input Code Page
+    HANDLE EventHandle;
+} CONSOLE_SETINPUTOUTPUTCP, *PCONSOLE_SETINPUTOUTPUTCP;
 
 typedef struct
 {
-    UINT CodePage;
-} CSRSS_SET_CONSOLE_OUTPUT_CP, *PCSRSS_SET_CONSOLE_OUTPUT_CP;
+    HANDLE ConsoleHandle;
+    CHAR   LayoutBuffer[KL_NAMELENGTH * sizeof(WCHAR)]; // Can hold up to 9 wchars
+    BOOL   Ansi;
+} CONSOLE_GETKBDLAYOUTNAME, *PCONSOLE_GETKBDLAYOUTNAME;
 
 typedef struct _CONSOLE_API_MESSAGE
 {
@@ -539,71 +812,103 @@ typedef struct _CONSOLE_API_MESSAGE
 
     PCSR_CAPTURE_BUFFER CsrCaptureData;
     CSR_API_NUMBER ApiNumber;
-    ULONG Status; // ReturnValue; // NTSTATUS Status
+    NTSTATUS Status;
     ULONG Reserved;
     union
     {
-        CSRSS_WRITE_CONSOLE WriteConsoleRequest;
-        CSRSS_READ_CONSOLE ReadConsoleRequest;
-        CSRSS_ALLOC_CONSOLE AllocConsoleRequest;
-        CSRSS_FREE_CONSOLE FreeConsoleRequest;
-        CSRSS_SCREEN_BUFFER_INFO ScreenBufferInfoRequest;
-        CSRSS_SET_CURSOR SetCursorRequest;
-        CSRSS_FILL_OUTPUT FillOutputRequest;
-        CSRSS_FILL_OUTPUT_ATTRIB FillOutputAttribRequest;
-        CSRSS_READ_INPUT ReadInputRequest;
-        CSRSS_WRITE_CONSOLE_OUTPUT_CHAR WriteConsoleOutputCharRequest;
-        CSRSS_WRITE_CONSOLE_OUTPUT_ATTRIB WriteConsoleOutputAttribRequest;
-        CSRSS_GET_CURSOR_INFO GetCursorInfoRequest;
-        CSRSS_SET_CURSOR_INFO SetCursorInfoRequest;
-        CSRSS_SET_ATTRIB SetAttribRequest;
-        CSRSS_SET_CONSOLE_MODE SetConsoleModeRequest;
-        CSRSS_GET_CONSOLE_MODE GetConsoleModeRequest;
-        CSRSS_CREATE_SCREEN_BUFFER CreateScreenBufferRequest;
-        CSRSS_SET_SCREEN_BUFFER SetScreenBufferRequest;
-        CSRSS_SET_TITLE SetTitleRequest;
-        CSRSS_GET_TITLE GetTitleRequest;
-        CSRSS_WRITE_CONSOLE_OUTPUT WriteConsoleOutputRequest;
-        CSRSS_FLUSH_INPUT_BUFFER FlushInputBufferRequest;
-        CSRSS_SCROLL_CONSOLE_SCREEN_BUFFER ScrollConsoleScreenBufferRequest;
-        CSRSS_READ_CONSOLE_OUTPUT_CHAR ReadConsoleOutputCharRequest;
-        CSRSS_READ_CONSOLE_OUTPUT_ATTRIB ReadConsoleOutputAttribRequest;
-        CSRSS_PEEK_CONSOLE_INPUT PeekConsoleInputRequest;
-        CSRSS_READ_CONSOLE_OUTPUT ReadConsoleOutputRequest;
-        CSRSS_WRITE_CONSOLE_INPUT WriteConsoleInputRequest;
-        CSRSS_GET_INPUT_HANDLE GetInputHandleRequest;
-        CSRSS_GET_OUTPUT_HANDLE GetOutputHandleRequest;
-        CSRSS_CLOSE_HANDLE CloseHandleRequest;
-        CSRSS_VERIFY_HANDLE VerifyHandleRequest;
-        CSRSS_DUPLICATE_HANDLE DuplicateHandleRequest;
-        CSRSS_GET_INPUT_WAIT_HANDLE GetConsoleInputWaitHandle;
-        CSRSS_SETGET_CONSOLE_HW_STATE ConsoleHardwareStateRequest;
-        CSRSS_GET_CONSOLE_WINDOW GetConsoleWindowRequest;
-        CSRSS_SET_CONSOLE_ICON SetConsoleIconRequest;
-        CSRSS_ADD_CONSOLE_ALIAS AddConsoleAlias;
-        CSRSS_GET_CONSOLE_ALIAS GetConsoleAlias;
-        CSRSS_GET_ALL_CONSOLE_ALIASES GetAllConsoleAlias;
-        CSRSS_GET_ALL_CONSOLE_ALIASES_LENGTH GetAllConsoleAliasesLength;
-        CSRSS_GET_CONSOLE_ALIASES_EXES GetConsoleAliasesExes;
-        CSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH GetConsoleAliasesExesLength;
-        CSRSS_GENERATE_CTRL_EVENT GenerateCtrlEvent;
-        CSRSS_GET_NUM_INPUT_EVENTS GetNumInputEventsRequest;
-        CSRSS_SET_SCREEN_BUFFER_SIZE SetScreenBufferSize;
-        CSRSS_GET_CONSOLE_SELECTION_INFO GetConsoleSelectionInfo;
-        CSRSS_GET_COMMAND_HISTORY_LENGTH GetCommandHistoryLength;
-        CSRSS_GET_COMMAND_HISTORY GetCommandHistory;
-        CSRSS_EXPUNGE_COMMAND_HISTORY ExpungeCommandHistory;
-        CSRSS_SET_HISTORY_NUMBER_COMMANDS SetHistoryNumberCommands;
-        CSRSS_GET_HISTORY_INFO GetHistoryInfo;
-        CSRSS_SET_HISTORY_INFO SetHistoryInfo;
-        CSRSS_GET_CONSOLE_CP GetConsoleCodePage;
-        CSRSS_SET_CONSOLE_CP SetConsoleCodePage;
-        CSRSS_GET_CONSOLE_OUTPUT_CP GetConsoleOutputCodePage;
-        CSRSS_SET_CONSOLE_OUTPUT_CP SetConsoleOutputCodePage;
-        CSRSS_GET_PROCESS_LIST GetProcessListRequest;
+        /* Console initialization and uninitialization */
+        CONSOLE_ALLOCCONSOLE AllocConsoleRequest;
+        CONSOLE_ATTACHCONSOLE AttachConsoleRequest;
+        CONSOLE_FREECONSOLE FreeConsoleRequest;
+
+        /* Processes */
+        CONSOLE_GETPROCESSLIST GetProcessListRequest;
+        CONSOLE_GENERATECTRLEVENT GenerateCtrlEventRequest;
+        CONSOLE_NOTIFYLASTCLOSE NotifyLastCloseRequest;
+
+        /* Handles */
+        CONSOLE_OPENCONSOLE OpenConsoleRequest;
+        CONSOLE_CLOSEHANDLE CloseHandleRequest;
+        CONSOLE_VERIFYHANDLE VerifyHandleRequest;
+        CONSOLE_DUPLICATEHANDLE DuplicateHandleRequest;
+        CONSOLE_GETHANDLEINFO GetHandleInfoRequest;
+        CONSOLE_SETHANDLEINFO SetHandleInfoRequest;
+
+        /* Cursor & Mouse */
+        CONSOLE_SHOWCURSOR ShowCursorRequest;
+        CONSOLE_SETCURSOR SetCursorRequest;
+        CONSOLE_GETSETCURSORINFO CursorInfoRequest;
+        CONSOLE_SETCURSORPOSITION SetCursorPositionRequest;
+        CONSOLE_GETMOUSEINFO GetMouseInfoRequest;
+
+        /* Screen-buffer */
+        CONSOLE_CREATESCREENBUFFER CreateScreenBufferRequest;
+        CONSOLE_SETACTIVESCREENBUFFER SetScreenBufferRequest;
+        CONSOLE_GETSCREENBUFFERINFO ScreenBufferInfoRequest;
+        CONSOLE_SETSCREENBUFFERSIZE SetScreenBufferSizeRequest;
+        CONSOLE_SCROLLSCREENBUFFER ScrollScreenBufferRequest;
+
+        CONSOLE_GETSELECTIONINFO GetSelectionInfoRequest;
+        CONSOLE_FLUSHINPUTBUFFER FlushInputBufferRequest;
+
+        /* Console mode */
+        CONSOLE_GETSETCONSOLEMODE ConsoleModeRequest;
+        CONSOLE_GETDISPLAYMODE GetDisplayModeRequest;
+        CONSOLE_SETDISPLAYMODE SetDisplayModeRequest;
+        CONSOLE_GETSETHWSTATE HardwareStateRequest;
+
+        /* Console window */
+        CONSOLE_INVALIDATEDIBITS InvalidateDIBitsRequest;
+        CONSOLE_SETPALETTE SetPaletteRequest;
+        CONSOLE_GETSETCONSOLETITLE TitleRequest;
+        CONSOLE_GETLARGESTWINDOWSIZE GetLargestWindowSizeRequest;
+        CONSOLE_MENUCONTROL MenuControlRequest;
+        CONSOLE_SETMENUCLOSE SetMenuCloseRequest;
+        CONSOLE_SETWINDOWINFO SetWindowInfoRequest;
+        CONSOLE_GETWINDOW GetWindowRequest;
+        CONSOLE_SETICON SetIconRequest;
+
+        /* Read */
+        CONSOLE_READCONSOLE ReadConsoleRequest;         // SrvReadConsole / ReadConsole
+        CONSOLE_GETINPUT GetInputRequest;               // SrvGetConsoleInput / PeekConsoleInput & ReadConsoleInput
+        CONSOLE_READOUTPUT ReadOutputRequest;           // SrvReadConsoleOutput / ReadConsoleOutput
+        CONSOLE_READOUTPUTCODE ReadOutputCodeRequest;   // SrvReadConsoleOutputString / ReadConsoleOutputAttribute & ReadConsoleOutputCharacter
+        CONSOLE_GETNUMINPUTEVENTS GetNumInputEventsRequest;
+
+        /* Write */
+        CONSOLE_WRITECONSOLE WriteConsoleRequest;       // SrvWriteConsole / WriteConsole
+        CONSOLE_WRITEINPUT WriteInputRequest;
+        CONSOLE_WRITEOUTPUT WriteOutputRequest;
+        CONSOLE_WRITEOUTPUTCODE WriteOutputCodeRequest;
+
+        CONSOLE_FILLOUTPUTCODE FillOutputRequest;
+        CONSOLE_SETTEXTATTRIB SetTextAttribRequest;
+
+        /* Aliases */
+        CONSOLE_ADDGETALIAS ConsoleAliasRequest;
+        CONSOLE_GETALLALIASES GetAllAliasesRequest;
+        CONSOLE_GETALLALIASESLENGTH GetAllAliasesLengthRequest;
+        CONSOLE_GETALIASESEXES GetAliasesExesRequest;
+        CONSOLE_GETALIASESEXESLENGTH GetAliasesExesLengthRequest;
+
+        /* History */
+        CONSOLE_GETCOMMANDHISTORY GetCommandHistoryRequest;
+        CONSOLE_GETCOMMANDHISTORYLENGTH GetCommandHistoryLengthRequest;
+        CONSOLE_EXPUNGECOMMANDHISTORY ExpungeCommandHistoryRequest;
+        CONSOLE_GETSETHISTORYINFO HistoryInfoRequest;
+        CONSOLE_SETHISTORYNUMBERCOMMANDS SetHistoryNumberCommandsRequest;
+        CONSOLE_SETHISTORYMODE SetHistoryModeRequest;
+
+        /* Input and Output Code Pages; keyboard */
+        CONSOLE_GETINPUTOUTPUTCP GetConsoleCPRequest;
+        CONSOLE_SETINPUTOUTPUTCP SetConsoleCPRequest;
+        CONSOLE_GETKBDLAYOUTNAME GetKbdLayoutNameRequest;
     } Data;
 } CONSOLE_API_MESSAGE, *PCONSOLE_API_MESSAGE;
 
+// Check that a CONSOLE_API_MESSAGE can hold in a CSR_API_MESSAGE.
+CHECK_API_MSG_SIZE(CONSOLE_API_MESSAGE);
+
 #endif // _CONMSG_H
 
 /* EOF */