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*/
77 enum 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 */
138 #define TS_RAIL_CLIENTSTATUS_ALLOWLOCALMOVESIZE 0x00000001
139 #define TS_RAIL_CLIENTSTATUS_AUTORECONNECT 0x00000002
140 #define TS_RAIL_CLIENTSTATUS_ZORDER_SYNC 0x00000004
141 #define TS_RAIL_CLIENTSTATUS_WINDOW_RESIZE_MARGIN_SUPPORTED 0x00000010
142 #define TS_RAIL_CLIENTSTATUS_HIGH_DPI_ICONS_SUPPORTED 0x00000020
143 #define TS_RAIL_CLIENTSTATUS_APPBAR_REMOTING_SUPPORTED 0x00000040
144 #define TS_RAIL_CLIENTSTATUS_POWER_DISPLAY_REQUEST_SUPPORTED 0x00000080
145 #define TS_RAIL_CLIENTSTATUS_BIDIRECTIONAL_CLOAK_SUPPORTED 0x00000200
146 
147 /* Server Move/Size Start PDU */
148 #define RAIL_WMSZ_LEFT 0x0001
149 #define RAIL_WMSZ_RIGHT 0x0002
150 #define RAIL_WMSZ_TOP 0x0003
151 #define RAIL_WMSZ_TOPLEFT 0x0004
152 #define RAIL_WMSZ_TOPRIGHT 0x0005
153 #define RAIL_WMSZ_BOTTOM 0x0006
154 #define RAIL_WMSZ_BOTTOMLEFT 0x0007
155 #define RAIL_WMSZ_BOTTOMRIGHT 0x0008
156 #define RAIL_WMSZ_MOVE 0x0009
157 #define RAIL_WMSZ_KEYMOVE 0x000A
158 #define RAIL_WMSZ_KEYSIZE 0x000B
159 
160 /* Language Bar Information PDU */
161 #define TF_SFT_SHOWNORMAL 0x00000001
162 #define TF_SFT_DOCK 0x00000002
163 #define TF_SFT_MINIMIZED 0x00000004
164 #define TF_SFT_HIDDEN 0x00000008
165 #define TF_SFT_NOTRANSPARENCY 0x00000010
166 #define TF_SFT_LOWTRANSPARENCY 0x00000020
167 #define TF_SFT_HIGHTRANSPARENCY 0x00000040
168 #define TF_SFT_LABELS 0x00000080
169 #define TF_SFT_NOLABELS 0x00000100
170 #define TF_SFT_EXTRAICONSONMINIMIZED 0x00000200
171 #define TF_SFT_NOEXTRAICONSONMINIMIZED 0x00000400
172 #define TF_SFT_DESKBAND 0x00000800
173 
174 #if !defined(DEFINE_NO_DEPRECATED)
175 /* DEPRECATED: Extended Handshake Flags
176  * use the spec conformant naming scheme TS_ below
177  */
178 #define RAIL_ORDER_HANDSHAKEEX_FLAGS_HIDEF 0x00000001
179 #define RAIL_ORDER_HANDSHAKE_EX_FLAGS_EXTENDED_SPI_SUPPORTED 0x00000002
180 #define RAIL_ORDER_HANDSHAKE_EX_FLAGS_SNAP_ARRANGE_SUPPORTED 0x00000004
181 #endif
182 
183 /* Extended Handshake Flags */
184 #define TS_RAIL_ORDER_HANDSHAKEEX_FLAGS_HIDEF 0x00000001
185 #define TS_RAIL_ORDER_HANDSHAKE_EX_FLAGS_EXTENDED_SPI_SUPPORTED 0x00000002
186 #define TS_RAIL_ORDER_HANDSHAKE_EX_FLAGS_SNAP_ARRANGE_SUPPORTED 0x00000004
187 
188 /* Language Profile Information Flags */
189 #define TF_PROFILETYPE_INPUTPROCESSOR 0x00000001
190 #define TF_PROFILETYPE_KEYBOARDLAYOUT 0x00000002
191 
192 /* LanguageProfileCLSID and ProfileGUID */
193 #ifndef _WIN32
194 #define GUID_NULL                                                                  \
195 	{                                                                              \
196 		0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 \
197 	}
198 #else
199 #include <cguid.h>
200 #endif
201 #define GUID_MSIME_JPN                                                             \
202 	{                                                                              \
203 		0x03B5835F, 0xF03C, 0x411B, 0x9C, 0xE2, 0xAA, 0x23, 0xE1, 0x17, 0x1E, 0x36 \
204 	}
205 #define GUID_MSIME_KOR                                                             \
206 	{                                                                              \
207 		0xA028AE76, 0x01B1, 0x46C2, 0x99, 0xC4, 0xAC, 0xD9, 0x85, 0x8A, 0xE0, 0x02 \
208 	}
209 #define GUID_CHSIME                                                                \
210 	{                                                                              \
211 		0x81D4E9C9, 0x1D3B, 0x41BC, 0x9E, 0x6C, 0x4B, 0x40, 0xBF, 0x79, 0xE3, 0x5E \
212 	}
213 #define GUID_CHTIME                                                                \
214 	{                                                                              \
215 		0x531FDEBF, 0x9B4C, 0x4A43, 0xA2, 0xAA, 0x96, 0x0E, 0x8F, 0xCD, 0xC7, 0x32 \
216 	}
217 #define GUID_PROFILE_NEWPHONETIC                                                   \
218 	{                                                                              \
219 		0xB2F9C502, 0x1742, 0x11D4, 0x97, 0x90, 0x00, 0x80, 0xC8, 0x82, 0x68, 0x7E \
220 	}
221 #define GUID_PROFILE_CHANGJIE                                                      \
222 	{                                                                              \
223 		0x4BDF9F03, 0xC7D3, 0x11D4, 0xB2, 0xAB, 0x00, 0x80, 0xC8, 0x82, 0x68, 0x7E \
224 	}
225 #define GUID_PROFILE_QUICK                                                         \
226 	{                                                                              \
227 		0x6024B45F, 0x5C54, 0x11D4, 0xB9, 0x21, 0x00, 0x80, 0xC8, 0x82, 0x68, 0x7E \
228 	}
229 #define GUID_PROFILE_CANTONESE                                                     \
230 	{                                                                              \
231 		0x0AEC109C, 0x7E96, 0x11D4, 0xB2, 0xEF, 0x00, 0x80, 0xC8, 0x82, 0x68, 0x7E \
232 	}
233 #define GUID_PROFILE_PINYIN                                                        \
234 	{                                                                              \
235 		0xF3BA9077, 0x6C7E, 0x11D4, 0x97, 0xFA, 0x00, 0x80, 0xC8, 0x82, 0x68, 0x7E \
236 	}
237 #define GUID_PROFILE_SIMPLEFAST                                                    \
238 	{                                                                              \
239 		0xFA550B04, 0x5AD7, 0x411F, 0xA5, 0xAC, 0xCA, 0x03, 0x8E, 0xC5, 0x15, 0xD7 \
240 	}
241 #define GUID_GUID_PROFILE_MSIME_JPN                                                \
242 	{                                                                              \
243 		0xA76C93D9, 0x5523, 0x4E90, 0xAA, 0xFA, 0x4D, 0xB1, 0x12, 0xF9, 0xAC, 0x76 \
244 	}
245 #define GUID_PROFILE_MSIME_KOR                                                     \
246 	{                                                                              \
247 		0xB5FE1F02, 0xD5F2, 0x4445, 0x9C, 0x03, 0xC5, 0x68, 0xF2, 0x3C, 0x99, 0xA1 \
248 	}
249 
250 /* ImeState */
251 #define IME_STATE_CLOSED 0x00000000
252 #define IME_STATE_OPEN 0x00000001
253 
254 /* ImeConvMode */
255 #ifndef _IME_CMODES_
256 #define IME_CMODE_NATIVE 0x00000001
257 #define IME_CMODE_KATAKANA 0x00000002
258 #define IME_CMODE_FULLSHAPE 0x00000008
259 #define IME_CMODE_ROMAN 0x00000010
260 #define IME_CMODE_CHARCODE 0x00000020
261 #define IME_CMODE_HANJACONVERT 0x00000040
262 #define IME_CMODE_SOFTKBD 0x00000080
263 #define IME_CMODE_NOCONVERSION 0x00000100
264 #define IME_CMODE_EUDC 0x00000200
265 #define IME_CMODE_SYMBOL 0x00000400
266 #define IME_CMODE_FIXED 0x00000800
267 #endif
268 
269 /* ImeSentenceMode */
270 #ifndef _IMM_
271 #define IME_SMODE_NONE 0x00000000
272 #define IME_SMODE_PLURALCASE 0x00000001
273 #define IME_SMODE_SINGLECONVERT 0x00000002
274 #define IME_SMODE_AUTOMATIC 0x00000004
275 #define IME_SMODE_PHRASEPREDICT 0x00000008
276 #define IME_SMODE_CONVERSATION 0x00000010
277 #endif
278 
279 /* KANAMode */
280 #define KANA_MODE_OFF 0x00000000
281 #define KANA_MODE_ON 0x00000001
282 
283 /* Taskbar */
284 #define RAIL_TASKBAR_MSG_TAB_REGISTER 0x00000001
285 #define RAIL_TASKBAR_MSG_TAB_UNREGISTER 0x00000002
286 #define RAIL_TASKBAR_MSG_TAB_ORDER 0x00000003
287 #define RAIL_TASKBAR_MSG_TAB_ACTIVE 0x00000004
288 #define RAIL_TASKBAR_MSG_TAB_PROPERTIES 0x00000005
289 
290 /* Taskbar body */
291 #define RAIL_TASKBAR_MSG_TAB_REGISTER 0x00000001
292 #define RAIL_TASKBAR_MSG_TAB_UNREGISTER 0x00000002
293 #define RAIL_TASKBAR_MSG_TAB_ORDER 0x00000003
294 #define RAIL_TASKBAR_MSG_TAB_ACTIVE 0x00000004
295 #define RAIL_TASKBAR_MSG_TAB_PROPERTIES 0x00000005
296 
297 struct _RAIL_UNICODE_STRING
298 {
299 	UINT16 length;
300 	BYTE* string;
301 };
302 typedef struct _RAIL_UNICODE_STRING RAIL_UNICODE_STRING;
303 
304 struct _RAIL_HIGH_CONTRAST
305 {
306 	UINT32 flags;
307 	UINT32 colorSchemeLength;
308 	RAIL_UNICODE_STRING colorScheme;
309 };
310 typedef struct _RAIL_HIGH_CONTRAST RAIL_HIGH_CONTRAST;
311 
312 /* RAIL Orders */
313 
314 struct _RAIL_HANDSHAKE_ORDER
315 {
316 	UINT32 buildNumber;
317 };
318 typedef struct _RAIL_HANDSHAKE_ORDER RAIL_HANDSHAKE_ORDER;
319 
320 struct _RAIL_HANDSHAKE_EX_ORDER
321 {
322 	UINT32 buildNumber;
323 	UINT32 railHandshakeFlags;
324 };
325 typedef struct _RAIL_HANDSHAKE_EX_ORDER RAIL_HANDSHAKE_EX_ORDER;
326 
327 struct _RAIL_CLIENT_STATUS_ORDER
328 {
329 	UINT32 flags;
330 };
331 typedef struct _RAIL_CLIENT_STATUS_ORDER RAIL_CLIENT_STATUS_ORDER;
332 
333 struct _RAIL_EXEC_ORDER
334 {
335 	UINT16 flags;
336 	char* RemoteApplicationProgram;
337 	char* RemoteApplicationWorkingDir;
338 	char* RemoteApplicationArguments;
339 };
340 typedef struct _RAIL_EXEC_ORDER RAIL_EXEC_ORDER;
341 
342 struct _RAIL_EXEC_RESULT_ORDER
343 {
344 	UINT16 flags;
345 	UINT16 execResult;
346 	UINT32 rawResult;
347 	RAIL_UNICODE_STRING exeOrFile;
348 };
349 typedef struct _RAIL_EXEC_RESULT_ORDER RAIL_EXEC_RESULT_ORDER;
350 
351 struct _TS_FILTERKEYS
352 {
353 	UINT32 Flags;
354 	UINT32 WaitTime;
355 	UINT32 DelayTime;
356 	UINT32 RepeatTime;
357 	UINT32 BounceTime;
358 };
359 typedef struct _TS_FILTERKEYS TS_FILTERKEYS;
360 
361 struct _RAIL_SYSPARAM_ORDER
362 {
363 	UINT32 param;
364 	UINT32 params;
365 	BOOL dragFullWindows;
366 	BOOL keyboardCues;
367 	BOOL keyboardPref;
368 	BOOL mouseButtonSwap;
369 	RECTANGLE_16 workArea;
370 	RECTANGLE_16 displayChange;
371 	RECTANGLE_16 taskbarPos;
372 	RAIL_HIGH_CONTRAST highContrast;
373 	UINT32 caretWidth;
374 	UINT32 stickyKeys;
375 	UINT32 toggleKeys;
376 	TS_FILTERKEYS filterKeys;
377 	BOOL setScreenSaveActive;
378 	BOOL setScreenSaveSecure;
379 };
380 typedef struct _RAIL_SYSPARAM_ORDER RAIL_SYSPARAM_ORDER;
381 
382 struct _RAIL_ACTIVATE_ORDER
383 {
384 	UINT32 windowId;
385 	BOOL enabled;
386 };
387 typedef struct _RAIL_ACTIVATE_ORDER RAIL_ACTIVATE_ORDER;
388 
389 struct _RAIL_SYSMENU_ORDER
390 {
391 	UINT32 windowId;
392 	INT16 left;
393 	INT16 top;
394 };
395 typedef struct _RAIL_SYSMENU_ORDER RAIL_SYSMENU_ORDER;
396 
397 struct _RAIL_SYSCOMMAND_ORDER
398 {
399 	UINT32 windowId;
400 	UINT16 command;
401 };
402 typedef struct _RAIL_SYSCOMMAND_ORDER RAIL_SYSCOMMAND_ORDER;
403 
404 struct _RAIL_NOTIFY_EVENT_ORDER
405 {
406 	UINT32 windowId;
407 	UINT32 notifyIconId;
408 	UINT32 message;
409 };
410 typedef struct _RAIL_NOTIFY_EVENT_ORDER RAIL_NOTIFY_EVENT_ORDER;
411 
412 struct _RAIL_MINMAXINFO_ORDER
413 {
414 	UINT32 windowId;
415 	INT16 maxWidth;
416 	INT16 maxHeight;
417 	INT16 maxPosX;
418 	INT16 maxPosY;
419 	INT16 minTrackWidth;
420 	INT16 minTrackHeight;
421 	INT16 maxTrackWidth;
422 	INT16 maxTrackHeight;
423 };
424 typedef struct _RAIL_MINMAXINFO_ORDER RAIL_MINMAXINFO_ORDER;
425 
426 struct _RAIL_LOCALMOVESIZE_ORDER
427 {
428 	UINT32 windowId;
429 	BOOL isMoveSizeStart;
430 	UINT16 moveSizeType;
431 	INT16 posX;
432 	INT16 posY;
433 };
434 typedef struct _RAIL_LOCALMOVESIZE_ORDER RAIL_LOCALMOVESIZE_ORDER;
435 
436 struct _RAIL_WINDOWMOVE_ORDER
437 {
438 	UINT32 windowId;
439 	INT16 left;
440 	INT16 top;
441 	INT16 right;
442 	INT16 bottom;
443 };
444 typedef struct _RAIL_WINDOWMOVE_ORDER RAIL_WINDOW_MOVE_ORDER;
445 
446 struct _RAIL_GET_APPID_REQ_ORDER
447 {
448 	UINT32 windowId;
449 };
450 typedef struct _RAIL_GET_APPID_REQ_ORDER RAIL_GET_APPID_REQ_ORDER;
451 
452 struct _RAIL_GET_APPID_RESP_ORDER
453 {
454 	UINT32 windowId;
455 	WCHAR applicationId[260];
456 };
457 typedef struct _RAIL_GET_APPID_RESP_ORDER RAIL_GET_APPID_RESP_ORDER;
458 
459 struct _RAIL_LANGBAR_INFO_ORDER
460 {
461 	UINT32 languageBarStatus;
462 };
463 typedef struct _RAIL_LANGBAR_INFO_ORDER RAIL_LANGBAR_INFO_ORDER;
464 
465 struct _RAIL_COMPARTMENT_INFO_ORDER
466 {
467 	UINT32 ImeState;
468 	UINT32 ImeConvMode;
469 	UINT32 ImeSentenceMode;
470 	UINT32 KanaMode;
471 };
472 typedef struct _RAIL_COMPARTMENT_INFO_ORDER RAIL_COMPARTMENT_INFO_ORDER;
473 
474 struct _RAIL_ZORDER_SYNC
475 {
476 	UINT32 windowIdMarker;
477 };
478 typedef struct _RAIL_ZORDER_SYNC RAIL_ZORDER_SYNC;
479 
480 struct _RAIL_CLOAK
481 {
482 	UINT32 windowId;
483 	BOOL cloak;
484 };
485 typedef struct _RAIL_CLOAK RAIL_CLOAK;
486 
487 struct _RAIL_POWER_DISPLAY_REQUEST
488 {
489 	UINT32 active;
490 };
491 typedef struct _RAIL_POWER_DISPLAY_REQUEST RAIL_POWER_DISPLAY_REQUEST;
492 
493 struct _RAIL_TASKBAR_INFO_ORDER
494 {
495 	UINT32 TaskbarMessage;
496 	UINT32 WindowIdTab;
497 	UINT32 Body;
498 };
499 typedef struct _RAIL_TASKBAR_INFO_ORDER RAIL_TASKBAR_INFO_ORDER;
500 
501 struct _RAIL_LANGUAGEIME_INFO_ORDER
502 {
503 	UINT32 ProfileType;
504 	UINT32 LanguageID;
505 	GUID LanguageProfileCLSID;
506 	GUID ProfileGUID;
507 	UINT32 KeyboardLayout;
508 };
509 typedef struct _RAIL_LANGUAGEIME_INFO_ORDER RAIL_LANGUAGEIME_INFO_ORDER;
510 
511 struct _RAIL_SNAP_ARRANGE
512 {
513 	UINT32 windowId;
514 	INT16 left;
515 	INT16 top;
516 	INT16 right;
517 	INT16 bottom;
518 };
519 typedef struct _RAIL_SNAP_ARRANGE RAIL_SNAP_ARRANGE;
520 
521 struct _RAIL_GET_APPID_RESP_EX
522 {
523 	UINT32 windowID;
524 	WCHAR applicationID[520 / sizeof(WCHAR)];
525 	UINT32 processId;
526 	WCHAR processImageName[520 / sizeof(WCHAR)];
527 };
528 typedef struct _RAIL_GET_APPID_RESP_EX RAIL_GET_APPID_RESP_EX;
529 
530 #if !defined(DEFINE_NO_DEPRECATED)
531 /* DEPRECATED: RAIL Constants
532  * use the spec conformant naming scheme TS_ below
533  */
534 
535 #define RDP_RAIL_ORDER_EXEC 0x0001
536 #define RDP_RAIL_ORDER_ACTIVATE 0x0002
537 #define RDP_RAIL_ORDER_SYSPARAM 0x0003
538 #define RDP_RAIL_ORDER_SYSCOMMAND 0x0004
539 #define RDP_RAIL_ORDER_HANDSHAKE 0x0005
540 #define RDP_RAIL_ORDER_NOTIFY_EVENT 0x0006
541 #define RDP_RAIL_ORDER_WINDOWMOVE 0x0008
542 #define RDP_RAIL_ORDER_LOCALMOVESIZE 0x0009
543 #define RDP_RAIL_ORDER_MINMAXINFO 0x000A
544 #define RDP_RAIL_ORDER_CLIENTSTATUS 0x000B
545 #define RDP_RAIL_ORDER_SYSMENU 0x000C
546 #define RDP_RAIL_ORDER_LANGBARINFO 0x000D
547 #define RDP_RAIL_ORDER_EXEC_RESULT 0x0080
548 #define RDP_RAIL_ORDER_GET_APPID_REQ 0x000E
549 #define RDP_RAIL_ORDER_GET_APPID_RESP 0x000F
550 #define RDP_RAIL_ORDER_LANGUAGEIMEINFO 0x0011
551 #define RDP_RAIL_ORDER_COMPARTMENTINFO 0x0012
552 #define RDP_RAIL_ORDER_HANDSHAKE_EX 0x0013
553 #define RDP_RAIL_ORDER_ZORDER_SYNC 0x0014
554 #define RDP_RAIL_ORDER_CLOAK 0x0015
555 #define RDP_RAIL_ORDER_POWER_DISPLAY_REQUEST 0x0016
556 #define RDP_RAIL_ORDER_SNAP_ARRANGE 0x0017
557 #define RDP_RAIL_ORDER_GET_APPID_RESP_EX 0x0018
558 #endif
559 
560 /* RAIL Constants */
561 
562 #define TS_RAIL_ORDER_EXEC 0x0001
563 #define TS_RAIL_ORDER_ACTIVATE 0x0002
564 #define TS_RAIL_ORDER_SYSPARAM 0x0003
565 #define TS_RAIL_ORDER_SYSCOMMAND 0x0004
566 #define TS_RAIL_ORDER_HANDSHAKE 0x0005
567 #define TS_RAIL_ORDER_NOTIFY_EVENT 0x0006
568 #define TS_RAIL_ORDER_WINDOWMOVE 0x0008
569 #define TS_RAIL_ORDER_LOCALMOVESIZE 0x0009
570 #define TS_RAIL_ORDER_MINMAXINFO 0x000A
571 #define TS_RAIL_ORDER_CLIENTSTATUS 0x000B
572 #define TS_RAIL_ORDER_SYSMENU 0x000C
573 #define TS_RAIL_ORDER_LANGBARINFO 0x000D
574 #define TS_RAIL_ORDER_GET_APPID_REQ 0x000E
575 #define TS_RAIL_ORDER_GET_APPID_RESP 0x000F
576 #define TS_RAIL_ORDER_TASKBARINFO 0x0010
577 #define TS_RAIL_ORDER_LANGUAGEIMEINFO 0x0011
578 #define TS_RAIL_ORDER_COMPARTMENTINFO 0x0012
579 #define TS_RAIL_ORDER_HANDSHAKE_EX 0x0013
580 #define TS_RAIL_ORDER_ZORDER_SYNC 0x0014
581 #define TS_RAIL_ORDER_CLOAK 0x0015
582 #define TS_RAIL_ORDER_POWER_DISPLAY_REQUEST 0x0016
583 #define TS_RAIL_ORDER_SNAP_ARRANGE 0x0017
584 #define TS_RAIL_ORDER_GET_APPID_RESP_EX 0x0018
585 #define TS_RAIL_ORDER_EXEC_RESULT 0x0080
586 
587 #ifdef __cplusplus
588 extern "C"
589 {
590 #endif
591 
592 	FREERDP_API BOOL rail_read_unicode_string(wStream* s, RAIL_UNICODE_STRING* unicode_string);
593 	FREERDP_API BOOL utf8_string_to_rail_string(const char* string,
594 	                                            RAIL_UNICODE_STRING* unicode_string);
595 
596 #ifdef __cplusplus
597 }
598 #endif
599 
600 #endif /* FREERDP_RAIL_GLOBAL_H */
601