cscg24-guacamole

CSCG 2024 Challenge 'Guacamole Mashup'
git clone https://git.sinitax.com/sinitax/cscg24-guacamole
Log | Files | Refs | sfeed.txt

rail.h (18743B)


      1/**
      2 * FreeRDP: A Remote Desktop Protocol Implementation
      3 * Remote Applications Integrated Locally (RAIL)
      4 *
      5 * Copyright 2011 Marc-Andre Moreau <marcandre.moreau@gmail.com>
      6 * Copyright 2011 Roman Barabanov <romanbarabanov@gmail.com>
      7 *
      8 * Licensed under the Apache License, Version 2.0 (the "License");
      9 * you may not use this file except in compliance with the License.
     10 * You may obtain a copy of the License at
     11 *
     12 *     http://www.apache.org/licenses/LICENSE-2.0
     13 *
     14 * Unless required by applicable law or agreed to in writing, software
     15 * distributed under the License is distributed on an "AS IS" BASIS,
     16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     17 * See the License for the specific language governing permissions and
     18 * limitations under the License.
     19 */
     20
     21#ifndef FREERDP_RAIL_GLOBAL_H
     22#define FREERDP_RAIL_GLOBAL_H
     23
     24#include <winpr/wnd.h>
     25#include <winpr/windows.h>
     26
     27#include <freerdp/types.h>
     28
     29#define RAIL_SVC_CHANNEL_NAME "rail"
     30
     31#if !defined(DEFINE_NO_DEPRECATED)
     32/* DEPRECATED: RAIL PDU flags use the spec conformant naming with TS_ prefix */
     33#define RAIL_EXEC_FLAG_EXPAND_WORKINGDIRECTORY 0x0001
     34#define RAIL_EXEC_FLAG_TRANSLATE_FILES 0x0002
     35#define RAIL_EXEC_FLAG_FILE 0x0004
     36#define RAIL_EXEC_FLAG_EXPAND_ARGUMENTS 0x0008
     37#endif
     38
     39/* RAIL PDU flags */
     40#define TS_RAIL_EXEC_FLAG_EXPAND_WORKINGDIRECTORY 0x0001
     41#define TS_RAIL_EXEC_FLAG_TRANSLATE_FILES 0x0002
     42#define TS_RAIL_EXEC_FLAG_FILE 0x0004
     43#define TS_RAIL_EXEC_FLAG_EXPAND_ARGUMENTS 0x0008
     44#define TS_RAIL_EXEC_FLAG_APP_USER_MODEL_ID 0x0010
     45
     46/* Notification Icon Balloon Tooltip */
     47#define NIIF_NONE 0x00000000
     48#define NIIF_INFO 0x00000001
     49#define NIIF_WARNING 0x00000002
     50#define NIIF_ERROR 0x00000003
     51#define NIIF_NOSOUND 0x00000010
     52#define NIIF_LARGE_ICON 0x00000020
     53
     54/* Client Execute PDU Flags */
     55#define RAIL_EXEC_FLAG_EXPAND_WORKING_DIRECTORY 0x0001
     56#define RAIL_EXEC_FLAG_TRANSLATE_FILES 0x0002
     57#define RAIL_EXEC_FLAG_FILE 0x0004
     58#define RAIL_EXEC_FLAG_EXPAND_ARGUMENTS 0x0008
     59#define RAIL_EXEC_FLAG_APP_USER_MODEL_ID 0x0010
     60
     61/* Server Execute Result PDU */
     62#define RAIL_EXEC_S_OK 0x0000
     63#define RAIL_EXEC_E_HOOK_NOT_LOADED 0x0001
     64#define RAIL_EXEC_E_DECODE_FAILED 0x0002
     65#define RAIL_EXEC_E_NOT_IN_ALLOWLIST 0x0003
     66#define RAIL_EXEC_E_FILE_NOT_FOUND 0x0005
     67#define RAIL_EXEC_E_FAIL 0x0006
     68#define RAIL_EXEC_E_SESSION_LOCKED 0x0007
     69
     70/* DEPRECATED: Server System Parameters Update PDU
     71 * use the spec conformant naming scheme from winpr/windows.h
     72 */
     73#define SPI_SET_SCREEN_SAVE_ACTIVE 0x00000011
     74#define SPI_SET_SCREEN_SAVE_SECURE 0x00000077
     75
     76/*Bit mask values for SPI_ parameters*/
     77enum SPI_MASK
     78{
     79	SPI_MASK_SET_DRAG_FULL_WINDOWS = 0x00000001,
     80	SPI_MASK_SET_KEYBOARD_CUES = 0x00000002,
     81	SPI_MASK_SET_KEYBOARD_PREF = 0x00000004,
     82	SPI_MASK_SET_MOUSE_BUTTON_SWAP = 0x00000008,
     83	SPI_MASK_SET_WORK_AREA = 0x00000010,
     84	SPI_MASK_DISPLAY_CHANGE = 0x00000020,
     85	SPI_MASK_TASKBAR_POS = 0x00000040,
     86	SPI_MASK_SET_HIGH_CONTRAST = 0x00000080,
     87	SPI_MASK_SET_SCREEN_SAVE_ACTIVE = 0x00000100,
     88	SPI_MASK_SET_SET_SCREEN_SAVE_SECURE = 0x00000200,
     89	SPI_MASK_SET_CARET_WIDTH = 0x00000400,
     90	SPI_MASK_SET_STICKY_KEYS = 0x00000800,
     91	SPI_MASK_SET_TOGGLE_KEYS = 0x00001000,
     92	SPI_MASK_SET_FILTER_KEYS = 0x00002000,
     93};
     94
     95/* Client System Parameters Update PDU
     96 * some are defined in winuser.h (winpr/windows.h wrapper)
     97 */
     98#define SPI_SET_DRAG_FULL_WINDOWS 0x00000025
     99#define SPI_SET_KEYBOARD_CUES 0x0000100B
    100#define SPI_SET_KEYBOARD_PREF 0x00000045
    101#define SPI_SET_MOUSE_BUTTON_SWAP 0x00000021
    102#define SPI_SET_WORK_AREA 0x0000002F
    103#define SPI_DISPLAY_CHANGE 0x0000F001
    104#define SPI_TASKBAR_POS 0x0000F000
    105#define SPI_SET_HIGH_CONTRAST 0x00000043
    106
    107/* Client System Command PDU */
    108#define SC_SIZE 0xF000
    109#define SC_MOVE 0xF010
    110#define SC_MINIMIZE 0xF020
    111#define SC_MAXIMIZE 0xF030
    112#define SC_CLOSE 0xF060
    113#define SC_KEYMENU 0xF100
    114#define SC_RESTORE 0xF120
    115#define SC_DEFAULT 0xF160
    116
    117/* Client Notify Event PDU */
    118#ifndef _WIN32
    119#define NIN_SELECT 0x00000400
    120#define NIN_KEYSELECT 0x00000401
    121#define NIN_BALLOONSHOW 0x00000402
    122#define NIN_BALLOONHIDE 0x00000403
    123#define NIN_BALLOONTIMEOUT 0x00000404
    124#define NIN_BALLOONUSERCLICK 0x00000405
    125#else
    126#include <shellapi.h>
    127#endif
    128
    129#if !defined(DEFINE_NO_DEPRECATED)
    130/* DEPRECATED: Client Information PDU
    131 * use the spec conformant naming scheme TS_ below
    132 */
    133#define RAIL_CLIENTSTATUS_ALLOWLOCALMOVESIZE 0x00000001
    134#define RAIL_CLIENTSTATUS_AUTORECONNECT 0x00000002
    135#endif
    136
    137/* Client Information PDU */
    138typedef enum
    139{
    140	TS_RAIL_CLIENTSTATUS_ALLOWLOCALMOVESIZE = 0x00000001,
    141	TS_RAIL_CLIENTSTATUS_AUTORECONNECT = 0x00000002,
    142	TS_RAIL_CLIENTSTATUS_ZORDER_SYNC = 0x00000004,
    143	TS_RAIL_CLIENTSTATUS_WINDOW_RESIZE_MARGIN_SUPPORTED = 0x00000010,
    144	TS_RAIL_CLIENTSTATUS_HIGH_DPI_ICONS_SUPPORTED = 0x00000020,
    145	TS_RAIL_CLIENTSTATUS_APPBAR_REMOTING_SUPPORTED = 0x00000040,
    146	TS_RAIL_CLIENTSTATUS_POWER_DISPLAY_REQUEST_SUPPORTED = 0x00000080,
    147	TS_RAIL_CLIENTSTATUS_GET_APPID_RESPONSE_EX_SUPPORTED = 0x00000100,
    148	TS_RAIL_CLIENTSTATUS_BIDIRECTIONAL_CLOAK_SUPPORTED = 0x00000200,
    149	TS_RAIL_CLIENTSTATUS_SUPPRESS_ICON_ORDERS = 0x00000400
    150} CLIENT_INFO_PDU;
    151
    152/* Server Move/Size Start PDU */
    153#define RAIL_WMSZ_LEFT 0x0001
    154#define RAIL_WMSZ_RIGHT 0x0002
    155#define RAIL_WMSZ_TOP 0x0003
    156#define RAIL_WMSZ_TOPLEFT 0x0004
    157#define RAIL_WMSZ_TOPRIGHT 0x0005
    158#define RAIL_WMSZ_BOTTOM 0x0006
    159#define RAIL_WMSZ_BOTTOMLEFT 0x0007
    160#define RAIL_WMSZ_BOTTOMRIGHT 0x0008
    161#define RAIL_WMSZ_MOVE 0x0009
    162#define RAIL_WMSZ_KEYMOVE 0x000A
    163#define RAIL_WMSZ_KEYSIZE 0x000B
    164
    165/* Language Bar Information PDU */
    166#define TF_SFT_SHOWNORMAL 0x00000001
    167#define TF_SFT_DOCK 0x00000002
    168#define TF_SFT_MINIMIZED 0x00000004
    169#define TF_SFT_HIDDEN 0x00000008
    170#define TF_SFT_NOTRANSPARENCY 0x00000010
    171#define TF_SFT_LOWTRANSPARENCY 0x00000020
    172#define TF_SFT_HIGHTRANSPARENCY 0x00000040
    173#define TF_SFT_LABELS 0x00000080
    174#define TF_SFT_NOLABELS 0x00000100
    175#define TF_SFT_EXTRAICONSONMINIMIZED 0x00000200
    176#define TF_SFT_NOEXTRAICONSONMINIMIZED 0x00000400
    177#define TF_SFT_DESKBAND 0x00000800
    178
    179#if !defined(DEFINE_NO_DEPRECATED)
    180/* DEPRECATED: Extended Handshake Flags
    181 * use the spec conformant naming scheme TS_ below
    182 */
    183#define RAIL_ORDER_HANDSHAKEEX_FLAGS_HIDEF 0x00000001
    184#define RAIL_ORDER_HANDSHAKE_EX_FLAGS_EXTENDED_SPI_SUPPORTED 0x00000002
    185#define RAIL_ORDER_HANDSHAKE_EX_FLAGS_SNAP_ARRANGE_SUPPORTED 0x00000004
    186#endif
    187
    188/* Extended Handshake Flags */
    189typedef enum
    190{
    191	TS_RAIL_ORDER_HANDSHAKEEX_FLAGS_HIDEF = 0x00000001,
    192	TS_RAIL_ORDER_HANDSHAKE_EX_FLAGS_EXTENDED_SPI_SUPPORTED = 0x00000002,
    193	TS_RAIL_ORDER_HANDSHAKE_EX_FLAGS_SNAP_ARRANGE_SUPPORTED = 0x00000004,
    194	TS_RAIL_ORDER_HANDSHAKE_EX_FLAGS_TEXT_SCALE_SUPPORTED = 0x00000008,
    195	TS_RAIL_ORDER_HANDSHAKE_EX_FLAGS_CARET_BLINK_SUPPORTED = 0x00000010,
    196	TS_RAIL_ORDER_HANDSHAKE_EX_FLAGS_EXTENDED_SPI_2_SUPPORTED = 0x00000020
    197} EXTENDED_HANDSHAKE_FLAGS;
    198/* Language Profile Information Flags */
    199#define TF_PROFILETYPE_INPUTPROCESSOR 0x00000001
    200#define TF_PROFILETYPE_KEYBOARDLAYOUT 0x00000002
    201
    202/* LanguageProfileCLSID and ProfileGUID */
    203#ifndef _WIN32
    204#define GUID_NULL                                                                  \
    205	{                                                                              \
    206		0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 \
    207	}
    208#else
    209#include <cguid.h>
    210#endif
    211#define GUID_MSIME_JPN                                                             \
    212	{                                                                              \
    213		0x03B5835F, 0xF03C, 0x411B, 0x9C, 0xE2, 0xAA, 0x23, 0xE1, 0x17, 0x1E, 0x36 \
    214	}
    215#define GUID_MSIME_KOR                                                             \
    216	{                                                                              \
    217		0xA028AE76, 0x01B1, 0x46C2, 0x99, 0xC4, 0xAC, 0xD9, 0x85, 0x8A, 0xE0, 0x02 \
    218	}
    219#define GUID_CHSIME                                                                \
    220	{                                                                              \
    221		0x81D4E9C9, 0x1D3B, 0x41BC, 0x9E, 0x6C, 0x4B, 0x40, 0xBF, 0x79, 0xE3, 0x5E \
    222	}
    223#define GUID_CHTIME                                                                \
    224	{                                                                              \
    225		0x531FDEBF, 0x9B4C, 0x4A43, 0xA2, 0xAA, 0x96, 0x0E, 0x8F, 0xCD, 0xC7, 0x32 \
    226	}
    227#define GUID_PROFILE_NEWPHONETIC                                                   \
    228	{                                                                              \
    229		0xB2F9C502, 0x1742, 0x11D4, 0x97, 0x90, 0x00, 0x80, 0xC8, 0x82, 0x68, 0x7E \
    230	}
    231#define GUID_PROFILE_CHANGJIE                                                      \
    232	{                                                                              \
    233		0x4BDF9F03, 0xC7D3, 0x11D4, 0xB2, 0xAB, 0x00, 0x80, 0xC8, 0x82, 0x68, 0x7E \
    234	}
    235#define GUID_PROFILE_QUICK                                                         \
    236	{                                                                              \
    237		0x6024B45F, 0x5C54, 0x11D4, 0xB9, 0x21, 0x00, 0x80, 0xC8, 0x82, 0x68, 0x7E \
    238	}
    239#define GUID_PROFILE_CANTONESE                                                     \
    240	{                                                                              \
    241		0x0AEC109C, 0x7E96, 0x11D4, 0xB2, 0xEF, 0x00, 0x80, 0xC8, 0x82, 0x68, 0x7E \
    242	}
    243#define GUID_PROFILE_PINYIN                                                        \
    244	{                                                                              \
    245		0xF3BA9077, 0x6C7E, 0x11D4, 0x97, 0xFA, 0x00, 0x80, 0xC8, 0x82, 0x68, 0x7E \
    246	}
    247#define GUID_PROFILE_SIMPLEFAST                                                    \
    248	{                                                                              \
    249		0xFA550B04, 0x5AD7, 0x411F, 0xA5, 0xAC, 0xCA, 0x03, 0x8E, 0xC5, 0x15, 0xD7 \
    250	}
    251#define GUID_GUID_PROFILE_MSIME_JPN                                                \
    252	{                                                                              \
    253		0xA76C93D9, 0x5523, 0x4E90, 0xAA, 0xFA, 0x4D, 0xB1, 0x12, 0xF9, 0xAC, 0x76 \
    254	}
    255#define GUID_PROFILE_MSIME_KOR                                                     \
    256	{                                                                              \
    257		0xB5FE1F02, 0xD5F2, 0x4445, 0x9C, 0x03, 0xC5, 0x68, 0xF2, 0x3C, 0x99, 0xA1 \
    258	}
    259
    260/* ImeState */
    261#define IME_STATE_CLOSED 0x00000000
    262#define IME_STATE_OPEN 0x00000001
    263
    264/* ImeConvMode */
    265#ifndef _IME_CMODES_
    266#define IME_CMODE_NATIVE 0x00000001
    267#define IME_CMODE_KATAKANA 0x00000002
    268#define IME_CMODE_FULLSHAPE 0x00000008
    269#define IME_CMODE_ROMAN 0x00000010
    270#define IME_CMODE_CHARCODE 0x00000020
    271#define IME_CMODE_HANJACONVERT 0x00000040
    272#define IME_CMODE_SOFTKBD 0x00000080
    273#define IME_CMODE_NOCONVERSION 0x00000100
    274#define IME_CMODE_EUDC 0x00000200
    275#define IME_CMODE_SYMBOL 0x00000400
    276#define IME_CMODE_FIXED 0x00000800
    277#endif
    278
    279/* ImeSentenceMode */
    280#ifndef _IMM_
    281#define IME_SMODE_NONE 0x00000000
    282#define IME_SMODE_PLURALCASE 0x00000001
    283#define IME_SMODE_SINGLECONVERT 0x00000002
    284#define IME_SMODE_AUTOMATIC 0x00000004
    285#define IME_SMODE_PHRASEPREDICT 0x00000008
    286#define IME_SMODE_CONVERSATION 0x00000010
    287#endif
    288
    289/* KANAMode */
    290#define KANA_MODE_OFF 0x00000000
    291#define KANA_MODE_ON 0x00000001
    292
    293/* Taskbar */
    294#define RAIL_TASKBAR_MSG_TAB_REGISTER 0x00000001
    295#define RAIL_TASKBAR_MSG_TAB_UNREGISTER 0x00000002
    296#define RAIL_TASKBAR_MSG_TAB_ORDER 0x00000003
    297#define RAIL_TASKBAR_MSG_TAB_ACTIVE 0x00000004
    298#define RAIL_TASKBAR_MSG_TAB_PROPERTIES 0x00000005
    299
    300/* Taskbar body */
    301#define RAIL_TASKBAR_MSG_TAB_REGISTER 0x00000001
    302#define RAIL_TASKBAR_MSG_TAB_UNREGISTER 0x00000002
    303#define RAIL_TASKBAR_MSG_TAB_ORDER 0x00000003
    304#define RAIL_TASKBAR_MSG_TAB_ACTIVE 0x00000004
    305#define RAIL_TASKBAR_MSG_TAB_PROPERTIES 0x00000005
    306
    307struct _RAIL_UNICODE_STRING
    308{
    309	UINT16 length;
    310	BYTE* string;
    311};
    312typedef struct _RAIL_UNICODE_STRING RAIL_UNICODE_STRING;
    313
    314struct _RAIL_HIGH_CONTRAST
    315{
    316	UINT32 flags;
    317	UINT32 colorSchemeLength;
    318	RAIL_UNICODE_STRING colorScheme;
    319};
    320typedef struct _RAIL_HIGH_CONTRAST RAIL_HIGH_CONTRAST;
    321
    322/* RAIL Orders */
    323
    324struct _RAIL_HANDSHAKE_ORDER
    325{
    326	UINT32 buildNumber;
    327};
    328typedef struct _RAIL_HANDSHAKE_ORDER RAIL_HANDSHAKE_ORDER;
    329
    330struct _RAIL_HANDSHAKE_EX_ORDER
    331{
    332	UINT32 buildNumber;
    333	UINT32 railHandshakeFlags;
    334};
    335typedef struct _RAIL_HANDSHAKE_EX_ORDER RAIL_HANDSHAKE_EX_ORDER;
    336
    337struct _RAIL_CLIENT_STATUS_ORDER
    338{
    339	UINT32 flags;
    340};
    341typedef struct _RAIL_CLIENT_STATUS_ORDER RAIL_CLIENT_STATUS_ORDER;
    342
    343struct _RAIL_EXEC_ORDER
    344{
    345	UINT16 flags;
    346	char* RemoteApplicationProgram;
    347	char* RemoteApplicationWorkingDir;
    348	char* RemoteApplicationArguments;
    349};
    350typedef struct _RAIL_EXEC_ORDER RAIL_EXEC_ORDER;
    351
    352struct _RAIL_EXEC_RESULT_ORDER
    353{
    354	UINT16 flags;
    355	UINT16 execResult;
    356	UINT32 rawResult;
    357	RAIL_UNICODE_STRING exeOrFile;
    358};
    359typedef struct _RAIL_EXEC_RESULT_ORDER RAIL_EXEC_RESULT_ORDER;
    360
    361struct _TS_FILTERKEYS
    362{
    363	UINT32 Flags;
    364	UINT32 WaitTime;
    365	UINT32 DelayTime;
    366	UINT32 RepeatTime;
    367	UINT32 BounceTime;
    368};
    369typedef struct _TS_FILTERKEYS TS_FILTERKEYS;
    370
    371struct _RAIL_SYSPARAM_ORDER
    372{
    373	UINT32 param;
    374	UINT32 params;
    375	BOOL dragFullWindows;
    376	BOOL keyboardCues;
    377	BOOL keyboardPref;
    378	BOOL mouseButtonSwap;
    379	RECTANGLE_16 workArea;
    380	RECTANGLE_16 displayChange;
    381	RECTANGLE_16 taskbarPos;
    382	RAIL_HIGH_CONTRAST highContrast;
    383	UINT32 caretWidth;
    384	UINT32 stickyKeys;
    385	UINT32 toggleKeys;
    386	TS_FILTERKEYS filterKeys;
    387	BOOL setScreenSaveActive;
    388	BOOL setScreenSaveSecure;
    389};
    390typedef struct _RAIL_SYSPARAM_ORDER RAIL_SYSPARAM_ORDER;
    391
    392struct _RAIL_ACTIVATE_ORDER
    393{
    394	UINT32 windowId;
    395	BOOL enabled;
    396};
    397typedef struct _RAIL_ACTIVATE_ORDER RAIL_ACTIVATE_ORDER;
    398
    399struct _RAIL_SYSMENU_ORDER
    400{
    401	UINT32 windowId;
    402	INT16 left;
    403	INT16 top;
    404};
    405typedef struct _RAIL_SYSMENU_ORDER RAIL_SYSMENU_ORDER;
    406
    407struct _RAIL_SYSCOMMAND_ORDER
    408{
    409	UINT32 windowId;
    410	UINT16 command;
    411};
    412typedef struct _RAIL_SYSCOMMAND_ORDER RAIL_SYSCOMMAND_ORDER;
    413
    414struct _RAIL_NOTIFY_EVENT_ORDER
    415{
    416	UINT32 windowId;
    417	UINT32 notifyIconId;
    418	UINT32 message;
    419};
    420typedef struct _RAIL_NOTIFY_EVENT_ORDER RAIL_NOTIFY_EVENT_ORDER;
    421
    422struct _RAIL_MINMAXINFO_ORDER
    423{
    424	UINT32 windowId;
    425	INT16 maxWidth;
    426	INT16 maxHeight;
    427	INT16 maxPosX;
    428	INT16 maxPosY;
    429	INT16 minTrackWidth;
    430	INT16 minTrackHeight;
    431	INT16 maxTrackWidth;
    432	INT16 maxTrackHeight;
    433};
    434typedef struct _RAIL_MINMAXINFO_ORDER RAIL_MINMAXINFO_ORDER;
    435
    436struct _RAIL_LOCALMOVESIZE_ORDER
    437{
    438	UINT32 windowId;
    439	BOOL isMoveSizeStart;
    440	UINT16 moveSizeType;
    441	INT16 posX;
    442	INT16 posY;
    443};
    444typedef struct _RAIL_LOCALMOVESIZE_ORDER RAIL_LOCALMOVESIZE_ORDER;
    445
    446struct _RAIL_WINDOWMOVE_ORDER
    447{
    448	UINT32 windowId;
    449	INT16 left;
    450	INT16 top;
    451	INT16 right;
    452	INT16 bottom;
    453};
    454typedef struct _RAIL_WINDOWMOVE_ORDER RAIL_WINDOW_MOVE_ORDER;
    455
    456struct _RAIL_GET_APPID_REQ_ORDER
    457{
    458	UINT32 windowId;
    459};
    460typedef struct _RAIL_GET_APPID_REQ_ORDER RAIL_GET_APPID_REQ_ORDER;
    461
    462struct _RAIL_GET_APPID_RESP_ORDER
    463{
    464	UINT32 windowId;
    465	WCHAR applicationId[260];
    466};
    467typedef struct _RAIL_GET_APPID_RESP_ORDER RAIL_GET_APPID_RESP_ORDER;
    468
    469struct _RAIL_LANGBAR_INFO_ORDER
    470{
    471	UINT32 languageBarStatus;
    472};
    473typedef struct _RAIL_LANGBAR_INFO_ORDER RAIL_LANGBAR_INFO_ORDER;
    474
    475struct _RAIL_COMPARTMENT_INFO_ORDER
    476{
    477	UINT32 ImeState;
    478	UINT32 ImeConvMode;
    479	UINT32 ImeSentenceMode;
    480	UINT32 KanaMode;
    481};
    482typedef struct _RAIL_COMPARTMENT_INFO_ORDER RAIL_COMPARTMENT_INFO_ORDER;
    483
    484struct _RAIL_ZORDER_SYNC
    485{
    486	UINT32 windowIdMarker;
    487};
    488typedef struct _RAIL_ZORDER_SYNC RAIL_ZORDER_SYNC;
    489
    490struct _RAIL_CLOAK
    491{
    492	UINT32 windowId;
    493	BOOL cloak;
    494};
    495typedef struct _RAIL_CLOAK RAIL_CLOAK;
    496
    497struct _RAIL_POWER_DISPLAY_REQUEST
    498{
    499	UINT32 active;
    500};
    501typedef struct _RAIL_POWER_DISPLAY_REQUEST RAIL_POWER_DISPLAY_REQUEST;
    502
    503struct _RAIL_TASKBAR_INFO_ORDER
    504{
    505	UINT32 TaskbarMessage;
    506	UINT32 WindowIdTab;
    507	UINT32 Body;
    508};
    509typedef struct _RAIL_TASKBAR_INFO_ORDER RAIL_TASKBAR_INFO_ORDER;
    510
    511struct _RAIL_LANGUAGEIME_INFO_ORDER
    512{
    513	UINT32 ProfileType;
    514	UINT32 LanguageID;
    515	GUID LanguageProfileCLSID;
    516	GUID ProfileGUID;
    517	UINT32 KeyboardLayout;
    518};
    519typedef struct _RAIL_LANGUAGEIME_INFO_ORDER RAIL_LANGUAGEIME_INFO_ORDER;
    520
    521struct _RAIL_SNAP_ARRANGE
    522{
    523	UINT32 windowId;
    524	INT16 left;
    525	INT16 top;
    526	INT16 right;
    527	INT16 bottom;
    528};
    529typedef struct _RAIL_SNAP_ARRANGE RAIL_SNAP_ARRANGE;
    530
    531struct _RAIL_GET_APPID_RESP_EX
    532{
    533	UINT32 windowID;
    534	WCHAR applicationID[520 / sizeof(WCHAR)];
    535	UINT32 processId;
    536	WCHAR processImageName[520 / sizeof(WCHAR)];
    537};
    538typedef struct _RAIL_GET_APPID_RESP_EX RAIL_GET_APPID_RESP_EX;
    539
    540#if !defined(DEFINE_NO_DEPRECATED)
    541/* DEPRECATED: RAIL Constants
    542 * use the spec conformant naming scheme TS_ below
    543 */
    544
    545#define RDP_RAIL_ORDER_EXEC 0x0001
    546#define RDP_RAIL_ORDER_ACTIVATE 0x0002
    547#define RDP_RAIL_ORDER_SYSPARAM 0x0003
    548#define RDP_RAIL_ORDER_SYSCOMMAND 0x0004
    549#define RDP_RAIL_ORDER_HANDSHAKE 0x0005
    550#define RDP_RAIL_ORDER_NOTIFY_EVENT 0x0006
    551#define RDP_RAIL_ORDER_WINDOWMOVE 0x0008
    552#define RDP_RAIL_ORDER_LOCALMOVESIZE 0x0009
    553#define RDP_RAIL_ORDER_MINMAXINFO 0x000A
    554#define RDP_RAIL_ORDER_CLIENTSTATUS 0x000B
    555#define RDP_RAIL_ORDER_SYSMENU 0x000C
    556#define RDP_RAIL_ORDER_LANGBARINFO 0x000D
    557#define RDP_RAIL_ORDER_EXEC_RESULT 0x0080
    558#define RDP_RAIL_ORDER_GET_APPID_REQ 0x000E
    559#define RDP_RAIL_ORDER_GET_APPID_RESP 0x000F
    560#define RDP_RAIL_ORDER_LANGUAGEIMEINFO 0x0011
    561#define RDP_RAIL_ORDER_COMPARTMENTINFO 0x0012
    562#define RDP_RAIL_ORDER_HANDSHAKE_EX 0x0013
    563#define RDP_RAIL_ORDER_ZORDER_SYNC 0x0014
    564#define RDP_RAIL_ORDER_CLOAK 0x0015
    565#define RDP_RAIL_ORDER_POWER_DISPLAY_REQUEST 0x0016
    566#define RDP_RAIL_ORDER_SNAP_ARRANGE 0x0017
    567#define RDP_RAIL_ORDER_GET_APPID_RESP_EX 0x0018
    568#endif
    569
    570/* RAIL Constants */
    571
    572typedef enum
    573{
    574	TS_RAIL_ORDER_EXEC = 0x0001,
    575	TS_RAIL_ORDER_ACTIVATE = 0x0002,
    576	TS_RAIL_ORDER_SYSPARAM = 0x0003,
    577	TS_RAIL_ORDER_SYSCOMMAND = 0x0004,
    578	TS_RAIL_ORDER_HANDSHAKE = 0x0005,
    579	TS_RAIL_ORDER_NOTIFY_EVENT = 0x0006,
    580	TS_RAIL_ORDER_WINDOWMOVE = 0x0008,
    581	TS_RAIL_ORDER_LOCALMOVESIZE = 0x0009,
    582	TS_RAIL_ORDER_MINMAXINFO = 0x000A,
    583	TS_RAIL_ORDER_CLIENTSTATUS = 0x000B,
    584	TS_RAIL_ORDER_SYSMENU = 0x000C,
    585	TS_RAIL_ORDER_LANGBARINFO = 0x000D,
    586	TS_RAIL_ORDER_GET_APPID_REQ = 0x000E,
    587	TS_RAIL_ORDER_GET_APPID_RESP = 0x000F,
    588	TS_RAIL_ORDER_TASKBARINFO = 0x0010,
    589	TS_RAIL_ORDER_LANGUAGEIMEINFO = 0x0011,
    590	TS_RAIL_ORDER_COMPARTMENTINFO = 0x0012,
    591	TS_RAIL_ORDER_HANDSHAKE_EX = 0x0013,
    592	TS_RAIL_ORDER_ZORDER_SYNC = 0x0014,
    593	TS_RAIL_ORDER_CLOAK = 0x0015,
    594	TS_RAIL_ORDER_POWER_DISPLAY_REQUEST = 0x0016,
    595	TS_RAIL_ORDER_SNAP_ARRANGE = 0x0017,
    596	TS_RAIL_ORDER_GET_APPID_RESP_EX = 0x0018,
    597	TS_RAIL_ORDER_TEXTSCALEINFO = 0x0019,
    598	TS_RAIL_ORDER_CARETBLINKINFO = 0x001A,
    599	TS_RAIL_ORDER_EXEC_RESULT = 0x0080
    600} ORDER_TYPE;
    601
    602#ifdef __cplusplus
    603extern "C"
    604{
    605#endif
    606
    607	FREERDP_API BOOL rail_read_unicode_string(wStream* s, RAIL_UNICODE_STRING* unicode_string);
    608	FREERDP_API BOOL utf8_string_to_rail_string(const char* string,
    609	                                            RAIL_UNICODE_STRING* unicode_string);
    610
    611#ifdef __cplusplus
    612}
    613#endif
    614
    615#endif /* FREERDP_RAIL_GLOBAL_H */