text: /*++
  
  Copyright (c) Microsoft Corporation. All rights reserved.
  
  Module Name:
  
      conmsgl2.h
  
  Abstract:
  
      This include file defines the layer 2 message formats used to communicate
      between the client and server portions of the CONSOLE portion of the
      Windows subsystem.
  
  Author:
  
      Therese Stowell (thereses) 10-Nov-1990
  
  Revision History:
  
      Wedson Almeida Filho (wedsonaf) 23-May-2010
          Modified the messages for use with the console driver.
  
  --*/
  
  #pragma once
  
  typedef struct _CONSOLE_CREATESCREENBUFFER_MSG {
      IN ULONG Flags;
      IN ULONG BitmapInfoLength;
      IN ULONG Usage;
  } CONSOLE_CREATESCREENBUFFER_MSG, *PCONSOLE_CREATESCREENBUFFER_MSG;
  
  #define CONSOLE_ASCII             0x1
  #define CONSOLE_REAL_UNICODE      0x2
  #define CONSOLE_ATTRIBUTE         0x3
  #define CONSOLE_FALSE_UNICODE     0x4
  
  typedef struct _CONSOLE_FILLCONSOLEOUTPUT_MSG {
      IN COORD WriteCoord;
      IN ULONG ElementType;
      IN USHORT Element;
      IN OUT ULONG Length;
  } CONSOLE_FILLCONSOLEOUTPUT_MSG, *PCONSOLE_FILLCONSOLEOUTPUT_MSG;
  
  typedef struct _CONSOLE_CTRLEVENT_MSG {
      IN ULONG CtrlEvent;
      IN ULONG ProcessGroupId;
  } CONSOLE_CTRLEVENT_MSG, *PCONSOLE_CTRLEVENT_MSG;
  
  typedef struct _CONSOLE_SETCP_MSG {
      IN ULONG CodePage;
      IN BOOLEAN Output;
  } CONSOLE_SETCP_MSG, *PCONSOLE_SETCP_MSG;
  
  typedef struct _CONSOLE_GETCURSORINFO_MSG {
      OUT ULONG CursorSize;
      OUT BOOLEAN Visible;
  } CONSOLE_GETCURSORINFO_MSG, *PCONSOLE_GETCURSORINFO_MSG;
  
  typedef struct _CONSOLE_SETCURSORINFO_MSG {
      IN ULONG CursorSize;
      IN BOOLEAN Visible;
  } CONSOLE_SETCURSORINFO_MSG, *PCONSOLE_SETCURSORINFO_MSG;
  
  typedef struct _CONSOLE_SCREENBUFFERINFO_MSG {
      IN OUT COORD Size;
      IN OUT COORD CursorPosition;
      IN OUT COORD ScrollPosition;
      IN OUT USHORT Attributes;
      IN OUT COORD CurrentWindowSize;
      IN OUT COORD MaximumWindowSize;
      IN OUT USHORT PopupAttributes;
      IN OUT BOOLEAN FullscreenSupported;
      IN OUT COLORREF ColorTable[16];
  } CONSOLE_SCREENBUFFERINFO_MSG, *PCONSOLE_SCREENBUFFERINFO_MSG;
  
  typedef struct _CONSOLE_SETSCREENBUFFERSIZE_MSG {
      IN COORD Size;
  } CONSOLE_SETSCREENBUFFERSIZE_MSG, *PCONSOLE_SETSCREENBUFFERSIZE_MSG;
  
  typedef struct _CONSOLE_SETCURSORPOSITION_MSG {
      IN COORD CursorPosition;
  } CONSOLE_SETCURSORPOSITION_MSG, *PCONSOLE_SETCURSORPOSITION_MSG;
  
  typedef struct _CONSOLE_GETLARGESTWINDOWSIZE_MSG {
      OUT COORD Size;
  } CONSOLE_GETLARGESTWINDOWSIZE_MSG, *PCONSOLE_GETLARGESTWINDOWSIZE_MSG;
  
  typedef struct _CONSOLE_SCROLLSCREENBUFFER_MSG {
      IN SMALL_RECT ScrollRectangle;
      IN SMALL_RECT ClipRectangle;
      IN BOOLEAN Clip;
      IN BOOLEAN Unicode;
      IN COORD DestinationOrigin;
      IN CHAR_INFO Fill;
  } CONSOLE_SCROLLSCREENBUFFER_MSG, *PCONSOLE_SCROLLSCREENBUFFER_MSG;
  
  typedef struct _CONSOLE_SETTEXTATTRIBUTE_MSG {
      IN USHORT Attributes;
  } CONSOLE_SETTEXTATTRIBUTE_MSG, *PCONSOLE_SETTEXTATTRIBUTE_MSG;
  
  typedef struct _CONSOLE_SETWINDOWINFO_MSG {
      IN BOOLEAN Absolute;
      IN SMALL_RECT Window;
  } CONSOLE_SETWINDOWINFO_MSG, *PCONSOLE_SETWINDOWINFO_MSG;
  
  typedef struct _CONSOLE_READCONSOLEOUTPUTSTRING_MSG {
      IN COORD ReadCoord;
      IN ULONG StringType;
      OUT ULONG NumRecords;
  } CONSOLE_READCONSOLEOUTPUTSTRING_MSG, *PCONSOLE_READCONSOLEOUTPUTSTRING_MSG;
  
  typedef struct _CONSOLE_WRITECONSOLEINPUT_MSG {
      OUT ULONG NumRecords;
      IN BOOLEAN Unicode;
      IN BOOLEAN Append;
  } CONSOLE_WRITECONSOLEINPUT_MSG, *PCONSOLE_WRITECONSOLEINPUT_MSG;
  
  typedef struct _CONSOLE_WRITECONSOLEOUTPUTSTRING_MSG {
      IN COORD WriteCoord;
      IN ULONG StringType;
      OUT ULONG NumRecords;
  } CONSOLE_WRITECONSOLEOUTPUTSTRING_MSG, *PCONSOLE_WRITECONSOLEOUTPUTSTRING_MSG;
  
  typedef struct _CONSOLE_WRITECONSOLEOUTPUT_MSG {
      IN OUT SMALL_RECT CharRegion;
      IN BOOLEAN Unicode;
  } CONSOLE_WRITECONSOLEOUTPUT_MSG, *PCONSOLE_WRITECONSOLEOUTPUT_MSG;
  
  typedef struct _CONSOLE_READCONSOLEOUTPUT_MSG {
      IN OUT SMALL_RECT CharRegion;
      IN BOOLEAN Unicode;
  } CONSOLE_READCONSOLEOUTPUT_MSG, *PCONSOLE_READCONSOLEOUTPUT_MSG;
  
  typedef struct _CONSOLE_GETTITLE_MSG {
      OUT ULONG TitleLength;
      IN BOOLEAN Unicode;
      IN BOOLEAN Original;
  } CONSOLE_GETTITLE_MSG, *PCONSOLE_GETTITLE_MSG;
  
  typedef struct _CONSOLE_SETTITLE_MSG {
      IN BOOLEAN Unicode;
  } CONSOLE_SETTITLE_MSG, *PCONSOLE_SETTITLE_MSG;
  
  typedef enum _CONSOLE_API_NUMBER_L2 {
      ConsolepFillConsoleOutput = CONSOLE_FIRST_API_NUMBER(2),
      ConsolepGenerateCtrlEvent,
      ConsolepSetActiveScreenBuffer,
      ConsolepFlushInputBuffer,
      ConsolepSetCP,
      ConsolepGetCursorInfo,
      ConsolepSetCursorInfo,
      ConsolepGetScreenBufferInfo,
      ConsolepSetScreenBufferInfo,
      ConsolepSetScreenBufferSize,
      ConsolepSetCursorPosition,
      ConsolepGetLargestWindowSize,
      ConsolepScrollScreenBuffer,
      ConsolepSetTextAttribute,
      ConsolepSetWindowInfo,
      ConsolepReadConsoleOutputString,
      ConsolepWriteConsoleInput,
      ConsolepWriteConsoleOutput,
      ConsolepWriteConsoleOutputString,
      ConsolepReadConsoleOutput,
      ConsolepGetTitle,
      ConsolepSetTitle,
  } CONSOLE_API_NUMBER_L2, *PCONSOLE_API_NUMBER_L2;
  
  typedef union _CONSOLE_MSG_BODY_L2 {
      CONSOLE_CTRLEVENT_MSG GenerateConsoleCtrlEvent;
      CONSOLE_FILLCONSOLEOUTPUT_MSG FillConsoleOutput;
      CONSOLE_SETCP_MSG SetConsoleCP;
      CONSOLE_GETCURSORINFO_MSG GetConsoleCursorInfo;
      CONSOLE_SETCURSORINFO_MSG SetConsoleCursorInfo;
      CONSOLE_SCREENBUFFERINFO_MSG GetConsoleScreenBufferInfo;
      CONSOLE_SCREENBUFFERINFO_MSG SetConsoleScreenBufferInfo;
      CONSOLE_SETSCREENBUFFERSIZE_MSG SetConsoleScreenBufferSize;
      CONSOLE_SETCURSORPOSITION_MSG SetConsoleCursorPosition;
      CONSOLE_GETLARGESTWINDOWSIZE_MSG GetLargestConsoleWindowSize;
      CONSOLE_SCROLLSCREENBUFFER_MSG ScrollConsoleScreenBuffer;
      CONSOLE_SETTEXTATTRIBUTE_MSG SetConsoleTextAttribute;
      CONSOLE_SETWINDOWINFO_MSG SetConsoleWindowInfo;
      CONSOLE_READCONSOLEOUTPUTSTRING_MSG ReadConsoleOutputString;
      CONSOLE_WRITECONSOLEINPUT_MSG WriteConsoleInput;
      CONSOLE_WRITECONSOLEOUTPUTSTRING_MSG WriteConsoleOutputString;
      CONSOLE_WRITECONSOLEOUTPUT_MSG WriteConsoleOutput;
      CONSOLE_READCONSOLEOUTPUT_MSG ReadConsoleOutput;
      CONSOLE_SETTITLE_MSG SetConsoleTitle;
      CONSOLE_GETTITLE_MSG GetConsoleTitle;
  } CONSOLE_MSG_BODY_L2, *PCONSOLE_MSG_BODY_L2;
  
  #ifndef __cplusplus
  typedef struct _CONSOLE_MSG_L2 {
      CONSOLE_MSG_HEADER Header;
      union {
          CONSOLE_MSG_BODY_L2;
      } u;
  } CONSOLE_MSG_L2, *PCONSOLE_MSG_L2;
  #else
  typedef struct _CONSOLE_MSG_L2 :
      public CONSOLE_MSG_HEADER
  {
      CONSOLE_MSG_BODY_L2 u;
  } CONSOLE_MSG_L2, *PCONSOLE_MSG_L2;
  #endif // __cplusplus
  