1 /**
2  * FreeRDP: A Remote Desktop Protocol Implementation
3  * RDP Settings
4  *
5  * Copyright 2009-2011 Jay Sorg
6  * Copyright 2010-2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
7  * Copyright 2016 Armin Novak <armin.novak@gmail.com>
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *     http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  */
21 
22 #ifndef FREERDP_SETTINGS_H
23 #define FREERDP_SETTINGS_H
24 
25 #include <winpr/timezone.h>
26 
27 #include <freerdp/api.h>
28 #include <freerdp/types.h>
29 
30 /* RAIL Support Level */
31 #define RAIL_LEVEL_SUPPORTED 0x00000001
32 #define RAIL_LEVEL_DOCKED_LANGBAR_SUPPORTED 0x00000002
33 #define RAIL_LEVEL_SHELL_INTEGRATION_SUPPORTED 0x00000004
34 #define RAIL_LEVEL_LANGUAGE_IME_SYNC_SUPPORTED 0x00000008
35 #define RAIL_LEVEL_SERVER_TO_CLIENT_IME_SYNC_SUPPORTED 0x00000010
36 #define RAIL_LEVEL_HIDE_MINIMIZED_APPS_SUPPORTED 0x00000020
37 #define RAIL_LEVEL_WINDOW_CLOAKING_SUPPORTED 0x00000040
38 #define RAIL_LEVEL_HANDSHAKE_EX_SUPPORTED 0x00000080
39 
40 /* Performance Flags */
41 #define PERF_FLAG_NONE 0x00000000
42 #define PERF_DISABLE_WALLPAPER 0x00000001
43 #define PERF_DISABLE_FULLWINDOWDRAG 0x00000002
44 #define PERF_DISABLE_MENUANIMATIONS 0x00000004
45 #define PERF_DISABLE_THEMING 0x00000008
46 #define PERF_DISABLE_CURSOR_SHADOW 0x00000020
47 #define PERF_DISABLE_CURSORSETTINGS 0x00000040
48 #define PERF_ENABLE_FONT_SMOOTHING 0x00000080
49 #define PERF_ENABLE_DESKTOP_COMPOSITION 0x00000100
50 
51 /* Connection Types */
52 #define CONNECTION_TYPE_MODEM 0x01
53 #define CONNECTION_TYPE_BROADBAND_LOW 0x02
54 #define CONNECTION_TYPE_SATELLITE 0x03
55 #define CONNECTION_TYPE_BROADBAND_HIGH 0x04
56 #define CONNECTION_TYPE_WAN 0x05
57 #define CONNECTION_TYPE_LAN 0x06
58 #define CONNECTION_TYPE_AUTODETECT 0x07
59 
60 /* Client to Server (CS) data blocks */
61 #define CS_CORE 0xC001
62 #define CS_SECURITY 0xC002
63 #define CS_NET 0xC003
64 #define CS_CLUSTER 0xC004
65 #define CS_MONITOR 0xC005
66 #define CS_MCS_MSGCHANNEL 0xC006
67 #define CS_MONITOR_EX 0xC008
68 #define CS_MULTITRANSPORT 0xC00A
69 
70 /* Server to Client (SC) data blocks */
71 #define SC_CORE 0x0C01
72 #define SC_SECURITY 0x0C02
73 #define SC_NET 0x0C03
74 #define SC_MCS_MSGCHANNEL 0x0C04
75 #define SC_MULTITRANSPORT 0x0C08
76 
77 /* RDP versions, see
78  * [MS-RDPBCGR] 2.2.1.3.2 Client Core Data (TS_UD_CS_CORE)
79  * [MS-RDPBCGR] 2.2.1.4.2 Server Core Data (TS_UD_SC_CORE)
80  */
81 typedef enum
82 {
83 	RDP_VERSION_4 = 0x00080001,
84 	RDP_VERSION_5_PLUS = 0x00080004,
85 	RDP_VERSION_10_0 = 0x00080005,
86 	RDP_VERSION_10_1 = 0x00080006,
87 	RDP_VERSION_10_2 = 0x00080007,
88 	RDP_VERSION_10_3 = 0x00080008,
89 	RDP_VERSION_10_4 = 0x00080009,
90 	RDP_VERSION_10_5 = 0x0008000a,
91 	RDP_VERSION_10_6 = 0x0008000b,
92 	RDP_VERSION_10_7 = 0x0008000C
93 } RDP_VERSION;
94 
95 /* Color depth */
96 #define RNS_UD_COLOR_4BPP 0xCA00
97 #define RNS_UD_COLOR_8BPP 0xCA01
98 #define RNS_UD_COLOR_16BPP_555 0xCA02
99 #define RNS_UD_COLOR_16BPP_565 0xCA03
100 #define RNS_UD_COLOR_24BPP 0xCA04
101 
102 /* Secure Access Sequence */
103 #define RNS_UD_SAS_DEL 0xAA03
104 
105 /* Supported Color Depths */
106 #define RNS_UD_24BPP_SUPPORT 0x0001
107 #define RNS_UD_16BPP_SUPPORT 0x0002
108 #define RNS_UD_15BPP_SUPPORT 0x0004
109 #define RNS_UD_32BPP_SUPPORT 0x0008
110 
111 /* Audio Mode */
112 #define AUDIO_MODE_REDIRECT 0       /* Bring to this computer */
113 #define AUDIO_MODE_PLAY_ON_SERVER 1 /* Leave at remote computer */
114 #define AUDIO_MODE_NONE 2           /* Do not play */
115 
116 /* Early Capability Flags (Client to Server) */
117 #define RNS_UD_CS_SUPPORT_ERRINFO_PDU 0x0001
118 #define RNS_UD_CS_WANT_32BPP_SESSION 0x0002
119 #define RNS_UD_CS_SUPPORT_STATUSINFO_PDU 0x0004
120 #define RNS_UD_CS_STRONG_ASYMMETRIC_KEYS 0x0008
121 #define RNS_UD_CS_VALID_CONNECTION_TYPE 0x0020
122 #define RNS_UD_CS_SUPPORT_MONITOR_LAYOUT_PDU 0x0040
123 #if !defined(DEFINE_NO_DEPRECATED)
124 #define RNS_UD_CS_SUPPORT_NETWORK_AUTODETECT 0x0080 /* DEPRECATED: Compatibility define */
125 #endif
126 #define RNS_UD_CS_SUPPORT_NETCHAR_AUTODETECT 0x0080
127 #define RNS_UD_CS_SUPPORT_DYNVC_GFX_PROTOCOL 0x0100
128 #define RNS_UD_CS_SUPPORT_DYNAMIC_TIME_ZONE 0x0200
129 #define RNS_UD_CS_SUPPORT_HEARTBEAT_PDU 0x0400
130 
131 /* Early Capability Flags (Server to Client) */
132 #define RNS_UD_SC_EDGE_ACTIONS_SUPPORTED 0x00000001
133 #define RNS_UD_SC_DYNAMIC_DST_SUPPORTED 0x00000002
134 
135 /* Cluster Information Flags */
136 #define REDIRECTION_SUPPORTED 0x00000001
137 #define REDIRECTED_SESSIONID_FIELD_VALID 0x00000002
138 #define REDIRECTED_SMARTCARD 0x00000040
139 
140 #define REDIRECTION_VERSION1 0x00
141 #define REDIRECTION_VERSION2 0x01
142 #define REDIRECTION_VERSION3 0x02
143 #define REDIRECTION_VERSION4 0x03
144 #define REDIRECTION_VERSION5 0x04
145 #define REDIRECTION_VERSION6 0x05
146 
147 #define MONITOR_PRIMARY 0x00000001
148 
149 /* Encryption Methods */
150 #define ENCRYPTION_METHOD_NONE 0x00000000
151 #define ENCRYPTION_METHOD_40BIT 0x00000001
152 #define ENCRYPTION_METHOD_128BIT 0x00000002
153 #define ENCRYPTION_METHOD_56BIT 0x00000008
154 #define ENCRYPTION_METHOD_FIPS 0x00000010
155 
156 /* Encryption Levels */
157 #define ENCRYPTION_LEVEL_NONE 0x00000000
158 #define ENCRYPTION_LEVEL_LOW 0x00000001
159 #define ENCRYPTION_LEVEL_CLIENT_COMPATIBLE 0x00000002
160 #define ENCRYPTION_LEVEL_HIGH 0x00000003
161 #define ENCRYPTION_LEVEL_FIPS 0x00000004
162 
163 /* Multitransport Types */
164 #define TRANSPORT_TYPE_UDP_FECR 0x00000001
165 #define TRANSPORT_TYPE_UDP_FECL 0x00000004
166 #define TRANSPORT_TYPE_UDP_PREFERRED 0x00000100
167 
168 /* Static Virtual Channel Options */
169 #define CHANNEL_OPTION_INITIALIZED 0x80000000
170 #define CHANNEL_OPTION_ENCRYPT_RDP 0x40000000
171 #define CHANNEL_OPTION_ENCRYPT_SC 0x20000000
172 #define CHANNEL_OPTION_ENCRYPT_CS 0x10000000
173 #define CHANNEL_OPTION_PRI_HIGH 0x08000000
174 #define CHANNEL_OPTION_PRI_MED 0x04000000
175 #define CHANNEL_OPTION_PRI_LOW 0x02000000
176 #define CHANNEL_OPTION_COMPRESS_RDP 0x00800000
177 #define CHANNEL_OPTION_COMPRESS 0x00400000
178 #define CHANNEL_OPTION_SHOW_PROTOCOL 0x00200000
179 #define CHANNEL_REMOTE_CONTROL_PERSISTENT 0x00100000
180 
181 /* Auto Reconnect Version */
182 #define AUTO_RECONNECT_VERSION_1 0x00000001
183 
184 /* Cookie Lengths */
185 #define MSTSC_COOKIE_MAX_LENGTH 9
186 #define DEFAULT_COOKIE_MAX_LENGTH 0xFF
187 
188 /* Order Support */
189 #define NEG_DSTBLT_INDEX 0x00
190 #define NEG_PATBLT_INDEX 0x01
191 #define NEG_SCRBLT_INDEX 0x02
192 #define NEG_MEMBLT_INDEX 0x03
193 #define NEG_MEM3BLT_INDEX 0x04
194 #define NEG_ATEXTOUT_INDEX 0x05
195 #define NEG_AEXTTEXTOUT_INDEX 0x06 /* Must be ignored */
196 #define NEG_DRAWNINEGRID_INDEX 0x07 /* Must be ignored */
197 #define NEG_LINETO_INDEX 0x08
198 #define NEG_MULTI_DRAWNINEGRID_INDEX 0x09
199 #define NEG_OPAQUE_RECT_INDEX 0x0A /* Must be ignored */
200 #define NEG_SAVEBITMAP_INDEX 0x0B
201 #define NEG_WTEXTOUT_INDEX 0x0C  /* Must be ignored */
202 #define NEG_MEMBLT_V2_INDEX 0x0D /* Must be ignored */
203 #define NEG_MEM3BLT_V2_INDEX 0x0E /* Must be ignored */
204 #define NEG_MULTIDSTBLT_INDEX 0x0F
205 #define NEG_MULTIPATBLT_INDEX 0x10
206 #define NEG_MULTISCRBLT_INDEX 0x11
207 #define NEG_MULTIOPAQUERECT_INDEX 0x12
208 #define NEG_FAST_INDEX_INDEX 0x13
209 #define NEG_POLYGON_SC_INDEX 0x14
210 #define NEG_POLYGON_CB_INDEX 0x15
211 #define NEG_POLYLINE_INDEX 0x16
212 #define NEG_UNUSED23_INDEX 0x17 /* Must be ignored */
213 #define NEG_FAST_GLYPH_INDEX 0x18
214 #define NEG_ELLIPSE_SC_INDEX 0x19
215 #define NEG_ELLIPSE_CB_INDEX 0x1A
216 #define NEG_GLYPH_INDEX_INDEX 0x1B
217 #define NEG_GLYPH_WEXTTEXTOUT_INDEX 0x1C     /* Must be ignored */
218 #define NEG_GLYPH_WLONGTEXTOUT_INDEX 0x1D    /* Must be ignored */
219 #define NEG_GLYPH_WLONGEXTTEXTOUT_INDEX 0x1E /* Must be ignored */
220 #define NEG_UNUSED31_INDEX 0x1F              /* Must be ignored */
221 
222 /* Glyph Support Level */
223 #define GLYPH_SUPPORT_NONE 0x0000
224 #define GLYPH_SUPPORT_PARTIAL 0x0001
225 #define GLYPH_SUPPORT_FULL 0x0002
226 #define GLYPH_SUPPORT_ENCODE 0x0003
227 
228 /* Gateway Usage Method */
229 #define TSC_PROXY_MODE_NONE_DIRECT 0x0
230 #define TSC_PROXY_MODE_DIRECT 0x1
231 #define TSC_PROXY_MODE_DETECT 0x2
232 #define TSC_PROXY_MODE_DEFAULT 0x3
233 #define TSC_PROXY_MODE_NONE_DETECT 0x4
234 
235 /* Gateway Credentials Source */
236 #define TSC_PROXY_CREDS_MODE_USERPASS 0x0
237 #define TSC_PROXY_CREDS_MODE_SMARTCARD 0x1
238 #define TSC_PROXY_CREDS_MODE_ANY 0x2
239 
240 /* Redirection Flags */
241 #define LB_TARGET_NET_ADDRESS 0x00000001
242 #define LB_LOAD_BALANCE_INFO 0x00000002
243 #define LB_USERNAME 0x00000004
244 #define LB_DOMAIN 0x00000008
245 #define LB_PASSWORD 0x00000010
246 #define LB_DONTSTOREUSERNAME 0x00000020
247 #define LB_SMARTCARD_LOGON 0x00000040
248 #define LB_NOREDIRECT 0x00000080
249 #define LB_TARGET_FQDN 0x00000100
250 #define LB_TARGET_NETBIOS_NAME 0x00000200
251 #define LB_TARGET_NET_ADDRESSES 0x00000800
252 #define LB_CLIENT_TSV_URL 0x00001000
253 #define LB_SERVER_TSV_CAPABLE 0x00002000
254 
255 #define LB_PASSWORD_MAX_LENGTH 512
256 
257 /* Keyboard Hook */
258 #define KEYBOARD_HOOK_LOCAL 0
259 #define KEYBOARD_HOOK_REMOTE 1
260 #define KEYBOARD_HOOK_FULLSCREEN_ONLY 2
261 
262 struct _TARGET_NET_ADDRESS
263 {
264 	UINT32 Length;
265 	LPWSTR Address;
266 };
267 typedef struct _TARGET_NET_ADDRESS TARGET_NET_ADDRESS;
268 
269 /* Logon Error Info */
270 #define LOGON_MSG_DISCONNECT_REFUSED 0xFFFFFFF9
271 #define LOGON_MSG_NO_PERMISSION 0xFFFFFFFA
272 #define LOGON_MSG_BUMP_OPTIONS 0xFFFFFFFB
273 #define LOGON_MSG_RECONNECT_OPTIONS 0xFFFFFFFC
274 #define LOGON_MSG_SESSION_TERMINATE 0xFFFFFFFD
275 #define LOGON_MSG_SESSION_CONTINUE 0xFFFFFFFE
276 
277 #define LOGON_FAILED_BAD_PASSWORD 0x00000000
278 #define LOGON_FAILED_UPDATE_PASSWORD 0x00000001
279 #define LOGON_FAILED_OTHER 0x00000002
280 #define LOGON_WARNING 0x00000003
281 
282 /* Server Status Info */
283 #define STATUS_FINDING_DESTINATION 0x00000401
284 #define STATUS_LOADING_DESTINATION 0x00000402
285 #define STATUS_BRINGING_SESSION_ONLINE 0x00000403
286 #define STATUS_REDIRECTING_TO_DESTINATION 0x00000404
287 #define STATUS_VM_LOADING 0x00000501
288 #define STATUS_VM_WAKING 0x00000502
289 #define STATUS_VM_BOOTING 0x00000503
290 
291 /* Compression Flags */
292 #define PACKET_COMPR_TYPE_8K 0x00
293 #define PACKET_COMPR_TYPE_64K 0x01
294 #define PACKET_COMPR_TYPE_RDP6 0x02
295 #define PACKET_COMPR_TYPE_RDP61 0x03
296 #define PACKET_COMPR_TYPE_RDP8 0x04
297 
298 /* Desktop Rotation Flags */
299 #define ORIENTATION_LANDSCAPE 0
300 #define ORIENTATION_PORTRAIT 90
301 #define ORIENTATION_LANDSCAPE_FLIPPED 180
302 #define ORIENTATION_PORTRAIT_FLIPPED 270
303 
304 /* ARC_CS_PRIVATE_PACKET */
305 typedef struct
306 {
307 	UINT32 cbLen;
308 	UINT32 version;
309 	UINT32 logonId;
310 	BYTE securityVerifier[16];
311 } ARC_CS_PRIVATE_PACKET;
312 
313 /* ARC_SC_PRIVATE_PACKET */
314 typedef struct
315 {
316 	UINT32 cbLen;
317 	UINT32 version;
318 	UINT32 logonId;
319 	BYTE arcRandomBits[16];
320 } ARC_SC_PRIVATE_PACKET;
321 
322 /* Certificates */
323 
324 struct rdp_CertBlob
325 {
326 	UINT32 length;
327 	BYTE* data;
328 };
329 typedef struct rdp_CertBlob rdpCertBlob;
330 
331 struct rdp_X509CertChain
332 {
333 	UINT32 count;
334 	rdpCertBlob* array;
335 };
336 typedef struct rdp_X509CertChain rdpX509CertChain;
337 
338 struct rdp_CertInfo
339 {
340 	BYTE* Modulus;
341 	DWORD ModulusLength;
342 	BYTE exponent[4];
343 };
344 typedef struct rdp_CertInfo rdpCertInfo;
345 
346 struct rdp_certificate
347 {
348 	rdpCertInfo cert_info;
349 	rdpX509CertChain* x509_cert_chain;
350 };
351 typedef struct rdp_certificate rdpCertificate;
352 
353 struct rdp_rsa_key
354 {
355 	BYTE* Modulus;
356 	DWORD ModulusLength;
357 	BYTE* PrivateExponent;
358 	DWORD PrivateExponentLength;
359 	BYTE exponent[4];
360 };
361 typedef struct rdp_rsa_key rdpRsaKey;
362 
363 /* Channels */
364 
365 struct _ADDIN_ARGV
366 {
367 	int argc;
368 	char** argv;
369 };
370 typedef struct _ADDIN_ARGV ADDIN_ARGV;
371 
372 /* Extensions */
373 
374 struct rdp_ext_set
375 {
376 	char name[256]; /* plugin name or path */
377 	void* data;     /* plugin data */
378 };
379 
380 /* Bitmap Cache */
381 
382 struct _BITMAP_CACHE_CELL_INFO
383 {
384 	UINT16 numEntries;
385 	UINT16 maxSize;
386 };
387 typedef struct _BITMAP_CACHE_CELL_INFO BITMAP_CACHE_CELL_INFO;
388 
389 struct _BITMAP_CACHE_V2_CELL_INFO
390 {
391 	UINT32 numEntries;
392 	BOOL persistent;
393 };
394 typedef struct _BITMAP_CACHE_V2_CELL_INFO BITMAP_CACHE_V2_CELL_INFO;
395 
396 /* Glyph Cache */
397 
398 struct _GLYPH_CACHE_DEFINITION
399 {
400 	UINT16 cacheEntries;
401 	UINT16 cacheMaximumCellSize;
402 };
403 typedef struct _GLYPH_CACHE_DEFINITION GLYPH_CACHE_DEFINITION;
404 
405 /* Monitors */
406 
407 struct _MONITOR_DEF
408 {
409 	INT32 left;
410 	INT32 top;
411 	INT32 right;
412 	INT32 bottom;
413 	UINT32 flags;
414 };
415 typedef struct _MONITOR_DEF MONITOR_DEF;
416 
417 struct _MONITOR_ATTRIBUTES
418 {
419 	UINT32 physicalWidth;
420 	UINT32 physicalHeight;
421 	UINT32 orientation;
422 	UINT32 desktopScaleFactor;
423 	UINT32 deviceScaleFactor;
424 };
425 typedef struct _MONITOR_ATTRIBUTES MONITOR_ATTRIBUTES;
426 
427 struct rdp_monitor
428 {
429 	INT32 x;
430 	INT32 y;
431 	INT32 width;
432 	INT32 height;
433 	UINT32 is_primary;
434 	UINT32 orig_screen;
435 	MONITOR_ATTRIBUTES attributes;
436 };
437 typedef struct rdp_monitor rdpMonitor;
438 
439 /* Device Redirection */
440 
441 #define RDPDR_DTYP_SERIAL 0x00000001
442 #define RDPDR_DTYP_PARALLEL 0x00000002
443 #define RDPDR_DTYP_PRINT 0x00000004
444 #define RDPDR_DTYP_FILESYSTEM 0x00000008
445 #define RDPDR_DTYP_SMARTCARD 0x00000020
446 
447 struct _RDPDR_DEVICE
448 {
449 	UINT32 Id;
450 	UINT32 Type;
451 	char* Name;
452 };
453 typedef struct _RDPDR_DEVICE RDPDR_DEVICE;
454 
455 struct _RDPDR_DRIVE
456 {
457 	UINT32 Id;
458 	UINT32 Type;
459 	char* Name;
460 	char* Path;
461 	BOOL automount;
462 };
463 typedef struct _RDPDR_DRIVE RDPDR_DRIVE;
464 
465 struct _RDPDR_PRINTER
466 {
467 	UINT32 Id;
468 	UINT32 Type;
469 	char* Name;
470 	char* DriverName;
471 };
472 typedef struct _RDPDR_PRINTER RDPDR_PRINTER;
473 
474 struct _RDPDR_SMARTCARD
475 {
476 	UINT32 Id;
477 	UINT32 Type;
478 	char* Name;
479 };
480 typedef struct _RDPDR_SMARTCARD RDPDR_SMARTCARD;
481 
482 struct _RDPDR_SERIAL
483 {
484 	UINT32 Id;
485 	UINT32 Type;
486 	char* Name;
487 	char* Path;
488 	char* Driver;
489 	char* Permissive;
490 };
491 typedef struct _RDPDR_SERIAL RDPDR_SERIAL;
492 
493 struct _RDPDR_PARALLEL
494 {
495 	UINT32 Id;
496 	UINT32 Type;
497 	char* Name;
498 	char* Path;
499 };
500 typedef struct _RDPDR_PARALLEL RDPDR_PARALLEL;
501 
502 #define PROXY_TYPE_NONE 0
503 #define PROXY_TYPE_HTTP 1
504 #define PROXY_TYPE_SOCKS 2
505 #define PROXY_TYPE_IGNORE 0xFFFF
506 
507 /* Settings */
508 
509 #ifdef __GNUC__
510 #define ALIGN64 __attribute__((aligned(8)))
511 #else
512 #ifdef _WIN32
513 #define ALIGN64 __declspec(align(8))
514 #else
515 #define ALIGN64
516 #endif
517 #endif
518 
519 /**
520  * FreeRDP Settings Ids
521  * This is generated with a script parsing the rdpSettings data structure
522  */
523 
524 #define FreeRDP_instance (0)
525 #define FreeRDP_ServerMode (16)
526 #define FreeRDP_ShareId (17)
527 #define FreeRDP_PduSource (18)
528 #define FreeRDP_ServerPort (19)
529 #define FreeRDP_ServerHostname (20)
530 #define FreeRDP_Username (21)
531 #define FreeRDP_Password (22)
532 #define FreeRDP_Domain (23)
533 #define FreeRDP_PasswordHash (24)
534 #define FreeRDP_WaitForOutputBufferFlush (25)
535 #define FreeRDP_MaxTimeInCheckLoop (26)
536 #define FreeRDP_AcceptedCert (27)
537 #define FreeRDP_AcceptedCertLength (28)
538 #define FreeRDP_RdpVersion (128)
539 #define FreeRDP_DesktopWidth (129)
540 #define FreeRDP_DesktopHeight (130)
541 #define FreeRDP_ColorDepth (131)
542 #define FreeRDP_ConnectionType (132)
543 #define FreeRDP_ClientBuild (133)
544 #define FreeRDP_ClientHostname (134)
545 #define FreeRDP_ClientProductId (135)
546 #define FreeRDP_EarlyCapabilityFlags (136)
547 #define FreeRDP_NetworkAutoDetect (137)
548 #define FreeRDP_SupportAsymetricKeys (138)
549 #define FreeRDP_SupportErrorInfoPdu (139)
550 #define FreeRDP_SupportStatusInfoPdu (140)
551 #define FreeRDP_SupportMonitorLayoutPdu (141)
552 #define FreeRDP_SupportGraphicsPipeline (142)
553 #define FreeRDP_SupportDynamicTimeZone (143)
554 #define FreeRDP_SupportHeartbeatPdu (144)
555 #define FreeRDP_DesktopPhysicalWidth (145)
556 #define FreeRDP_DesktopPhysicalHeight (146)
557 #define FreeRDP_DesktopOrientation (147)
558 #define FreeRDP_DesktopScaleFactor (148)
559 #define FreeRDP_DeviceScaleFactor (149)
560 #define FreeRDP_UseRdpSecurityLayer (192)
561 #define FreeRDP_EncryptionMethods (193)
562 #define FreeRDP_ExtEncryptionMethods (194)
563 #define FreeRDP_EncryptionLevel (195)
564 #define FreeRDP_ServerRandom (196)
565 #define FreeRDP_ServerRandomLength (197)
566 #define FreeRDP_ServerCertificate (198)
567 #define FreeRDP_ServerCertificateLength (199)
568 #define FreeRDP_ClientRandom (200)
569 #define FreeRDP_ClientRandomLength (201)
570 #define FreeRDP_ChannelCount (256)
571 #define FreeRDP_ChannelDefArraySize (257)
572 #define FreeRDP_ChannelDefArray (258)
573 #define FreeRDP_ClusterInfoFlags (320)
574 #define FreeRDP_RedirectedSessionId (321)
575 #define FreeRDP_ConsoleSession (322)
576 #define FreeRDP_MonitorCount (384)
577 #define FreeRDP_MonitorDefArraySize (385)
578 #define FreeRDP_MonitorDefArray (386)
579 #define FreeRDP_SpanMonitors (387)
580 #define FreeRDP_UseMultimon (388)
581 #define FreeRDP_ForceMultimon (389)
582 #define FreeRDP_DesktopPosX (390)
583 #define FreeRDP_DesktopPosY (391)
584 #define FreeRDP_ListMonitors (392)
585 #define FreeRDP_MonitorIds (393)
586 #define FreeRDP_NumMonitorIds (394)
587 #define FreeRDP_MonitorLocalShiftX (395)
588 #define FreeRDP_MonitorLocalShiftY (396)
589 #define FreeRDP_HasMonitorAttributes (397)
590 #define FreeRDP_MultitransportFlags (512)
591 #define FreeRDP_SupportMultitransport (513)
592 #define FreeRDP_AlternateShell (640)
593 #define FreeRDP_ShellWorkingDirectory (641)
594 #define FreeRDP_AutoLogonEnabled (704)
595 #define FreeRDP_CompressionEnabled (705)
596 #define FreeRDP_DisableCtrlAltDel (706)
597 #define FreeRDP_EnableWindowsKey (707)
598 #define FreeRDP_MaximizeShell (708)
599 #define FreeRDP_LogonNotify (709)
600 #define FreeRDP_LogonErrors (710)
601 #define FreeRDP_MouseAttached (711)
602 #define FreeRDP_MouseHasWheel (712)
603 #define FreeRDP_RemoteConsoleAudio (713)
604 #define FreeRDP_AudioPlayback (714)
605 #define FreeRDP_AudioCapture (715)
606 #define FreeRDP_VideoDisable (716)
607 #define FreeRDP_PasswordIsSmartcardPin (717)
608 #define FreeRDP_UsingSavedCredentials (718)
609 #define FreeRDP_ForceEncryptedCsPdu (719)
610 #define FreeRDP_HiDefRemoteApp (720)
611 #define FreeRDP_CompressionLevel (721)
612 #define FreeRDP_IPv6Enabled (768)
613 #define FreeRDP_ClientAddress (769)
614 #define FreeRDP_ClientDir (770)
615 #define FreeRDP_AutoReconnectionEnabled (832)
616 #define FreeRDP_AutoReconnectMaxRetries (833)
617 #define FreeRDP_ClientAutoReconnectCookie (834)
618 #define FreeRDP_ServerAutoReconnectCookie (835)
619 #define FreeRDP_PrintReconnectCookie (836)
620 #define FreeRDP_ClientTimeZone (896)
621 #define FreeRDP_DynamicDSTTimeZoneKeyName (897)
622 #define FreeRDP_DynamicDaylightTimeDisabled (898)
623 #define FreeRDP_PerformanceFlags (960)
624 #define FreeRDP_AllowFontSmoothing (961)
625 #define FreeRDP_DisableWallpaper (962)
626 #define FreeRDP_DisableFullWindowDrag (963)
627 #define FreeRDP_DisableMenuAnims (964)
628 #define FreeRDP_DisableThemes (965)
629 #define FreeRDP_DisableCursorShadow (966)
630 #define FreeRDP_DisableCursorBlinking (967)
631 #define FreeRDP_AllowDesktopComposition (968)
632 #define FreeRDP_RemoteAssistanceMode (1024)
633 #define FreeRDP_RemoteAssistanceSessionId (1025)
634 #define FreeRDP_RemoteAssistancePassStub (1026)
635 #define FreeRDP_RemoteAssistancePassword (1027)
636 #define FreeRDP_RemoteAssistanceRCTicket (1028)
637 #define FreeRDP_EncomspVirtualChannel (1029)
638 #define FreeRDP_RemdeskVirtualChannel (1030)
639 #define FreeRDP_LyncRdpMode (1031)
640 #define FreeRDP_RemoteAssistanceRequestControl (1032)
641 #define FreeRDP_TlsSecurity (1088)
642 #define FreeRDP_NlaSecurity (1089)
643 #define FreeRDP_RdpSecurity (1090)
644 #define FreeRDP_ExtSecurity (1091)
645 #define FreeRDP_Authentication (1092)
646 #define FreeRDP_RequestedProtocols (1093)
647 #define FreeRDP_SelectedProtocol (1094)
648 #define FreeRDP_NegotiationFlags (1095)
649 #define FreeRDP_NegotiateSecurityLayer (1096)
650 #define FreeRDP_RestrictedAdminModeRequired (1097)
651 #define FreeRDP_AuthenticationServiceClass (1098)
652 #define FreeRDP_DisableCredentialsDelegation (1099)
653 #define FreeRDP_AuthenticationLevel (1100)
654 #define FreeRDP_AllowedTlsCiphers (1101)
655 #define FreeRDP_VmConnectMode (1102)
656 #define FreeRDP_NtlmSamFile (1103)
657 #define FreeRDP_FIPSMode (1104)
658 #define FreeRDP_TlsSecLevel (1105)
659 #define FreeRDP_MstscCookieMode (1152)
660 #define FreeRDP_CookieMaxLength (1153)
661 #define FreeRDP_PreconnectionId (1154)
662 #define FreeRDP_PreconnectionBlob (1155)
663 #define FreeRDP_SendPreconnectionPdu (1156)
664 #define FreeRDP_RedirectionFlags (1216)
665 #define FreeRDP_TargetNetAddress (1217)
666 #define FreeRDP_LoadBalanceInfo (1218)
667 #define FreeRDP_LoadBalanceInfoLength (1219)
668 #define FreeRDP_RedirectionUsername (1220)
669 #define FreeRDP_RedirectionDomain (1221)
670 #define FreeRDP_RedirectionPassword (1222)
671 #define FreeRDP_RedirectionPasswordLength (1223)
672 #define FreeRDP_RedirectionTargetFQDN (1224)
673 #define FreeRDP_RedirectionTargetNetBiosName (1225)
674 #define FreeRDP_RedirectionTsvUrl (1226)
675 #define FreeRDP_RedirectionTsvUrlLength (1227)
676 #define FreeRDP_TargetNetAddressCount (1228)
677 #define FreeRDP_TargetNetAddresses (1229)
678 #define FreeRDP_TargetNetPorts (1230)
679 #define FreeRDP_RedirectionAcceptedCert (1231)
680 #define FreeRDP_RedirectionAcceptedCertLength (1232)
681 #define FreeRDP_RedirectionPreferType (1233)
682 #define FreeRDP_Password51 (1280)
683 #define FreeRDP_Password51Length (1281)
684 #define FreeRDP_SmartcardLogon (1282)
685 #define FreeRDP_PromptForCredentials (1283)
686 #define FreeRDP_KerberosKdc (1344)
687 #define FreeRDP_KerberosRealm (1345)
688 #define FreeRDP_IgnoreCertificate (1408)
689 #define FreeRDP_CertificateName (1409)
690 #define FreeRDP_CertificateFile (1410)
691 #define FreeRDP_PrivateKeyFile (1411)
692 #define FreeRDP_RdpKeyFile (1412)
693 #define FreeRDP_RdpServerRsaKey (1413)
694 #define FreeRDP_RdpServerCertificate (1414)
695 #define FreeRDP_ExternalCertificateManagement (1415)
696 #define FreeRDP_CertificateContent (1416)
697 #define FreeRDP_PrivateKeyContent (1417)
698 #define FreeRDP_RdpKeyContent (1418)
699 #define FreeRDP_AutoAcceptCertificate (1419)
700 #define FreeRDP_AutoDenyCertificate (1420)
701 #define FreeRDP_CertificateAcceptedFingerprints (1421)
702 #define FreeRDP_Workarea (1536)
703 #define FreeRDP_Fullscreen (1537)
704 #define FreeRDP_PercentScreen (1538)
705 #define FreeRDP_GrabKeyboard (1539)
706 #define FreeRDP_Decorations (1540)
707 #define FreeRDP_MouseMotion (1541)
708 #define FreeRDP_WindowTitle (1542)
709 #define FreeRDP_ParentWindowId (1543)
710 #define FreeRDP_AsyncInput (1544)
711 #define FreeRDP_AsyncUpdate (1545)
712 #define FreeRDP_AsyncChannels (1546)
713 #define FreeRDP_ToggleFullscreen (1548)
714 #define FreeRDP_WmClass (1549)
715 #define FreeRDP_EmbeddedWindow (1550)
716 #define FreeRDP_SmartSizing (1551)
717 #define FreeRDP_XPan (1552)
718 #define FreeRDP_YPan (1553)
719 #define FreeRDP_SmartSizingWidth (1554)
720 #define FreeRDP_SmartSizingHeight (1555)
721 #define FreeRDP_PercentScreenUseWidth (1556)
722 #define FreeRDP_PercentScreenUseHeight (1557)
723 #define FreeRDP_DynamicResolutionUpdate (1558)
724 #define FreeRDP_SoftwareGdi (1601)
725 #define FreeRDP_LocalConnection (1602)
726 #define FreeRDP_AuthenticationOnly (1603)
727 #define FreeRDP_CredentialsFromStdin (1604)
728 #define FreeRDP_UnmapButtons (1605)
729 #define FreeRDP_OldLicenseBehaviour (1606)
730 #define FreeRDP_ComputerName (1664)
731 #define FreeRDP_ConnectionFile (1728)
732 #define FreeRDP_AssistanceFile (1729)
733 #define FreeRDP_HomePath (1792)
734 #define FreeRDP_ConfigPath (1793)
735 #define FreeRDP_CurrentPath (1794)
736 #define FreeRDP_DumpRemoteFx (1856)
737 #define FreeRDP_PlayRemoteFx (1857)
738 #define FreeRDP_DumpRemoteFxFile (1858)
739 #define FreeRDP_PlayRemoteFxFile (1859)
740 #define FreeRDP_GatewayUsageMethod (1984)
741 #define FreeRDP_GatewayPort (1985)
742 #define FreeRDP_GatewayHostname (1986)
743 #define FreeRDP_GatewayUsername (1987)
744 #define FreeRDP_GatewayPassword (1988)
745 #define FreeRDP_GatewayDomain (1989)
746 #define FreeRDP_GatewayCredentialsSource (1990)
747 #define FreeRDP_GatewayUseSameCredentials (1991)
748 #define FreeRDP_GatewayEnabled (1992)
749 #define FreeRDP_GatewayBypassLocal (1993)
750 #define FreeRDP_GatewayRpcTransport (1994)
751 #define FreeRDP_GatewayHttpTransport (1995)
752 #define FreeRDP_GatewayUdpTransport (1996)
753 #define FreeRDP_GatewayAccessToken (1997)
754 #define FreeRDP_GatewayAcceptedCert (1998)
755 #define FreeRDP_GatewayAcceptedCertLength (1999)
756 #define FreeRDP_GatewayHttpUseWebsockets (2000)
757 #define FreeRDP_ProxyType (2015)
758 #define FreeRDP_ProxyHostname (2016)
759 #define FreeRDP_ProxyPort (2017)
760 #define FreeRDP_ProxyUsername (2018)
761 #define FreeRDP_ProxyPassword (2019)
762 #define FreeRDP_RemoteApplicationMode (2112)
763 #define FreeRDP_RemoteApplicationName (2113)
764 #define FreeRDP_RemoteApplicationIcon (2114)
765 #define FreeRDP_RemoteApplicationProgram (2115)
766 #define FreeRDP_RemoteApplicationFile (2116)
767 #define FreeRDP_RemoteApplicationGuid (2117)
768 #define FreeRDP_RemoteApplicationCmdLine (2118)
769 #define FreeRDP_RemoteApplicationExpandCmdLine (2119)
770 #define FreeRDP_RemoteApplicationExpandWorkingDir (2120)
771 #define FreeRDP_DisableRemoteAppCapsCheck (2121)
772 #define FreeRDP_RemoteAppNumIconCaches (2122)
773 #define FreeRDP_RemoteAppNumIconCacheEntries (2123)
774 #define FreeRDP_RemoteAppLanguageBarSupported (2124)
775 #define FreeRDP_RemoteWndSupportLevel (2125)
776 #define FreeRDP_RemoteApplicationSupportLevel (2126)
777 #define FreeRDP_RemoteApplicationSupportMask (2127)
778 #define FreeRDP_RemoteApplicationWorkingDir (2128)
779 #define FreeRDP_ReceivedCapabilities (2240)
780 #define FreeRDP_ReceivedCapabilitiesSize (2241)
781 #define FreeRDP_OsMajorType (2304)
782 #define FreeRDP_OsMinorType (2305)
783 #define FreeRDP_RefreshRect (2306)
784 #define FreeRDP_SuppressOutput (2307)
785 #define FreeRDP_FastPathOutput (2308)
786 #define FreeRDP_SaltedChecksum (2309)
787 #define FreeRDP_LongCredentialsSupported (2310)
788 #define FreeRDP_NoBitmapCompressionHeader (2311)
789 #define FreeRDP_BitmapCompressionDisabled (2312)
790 #define FreeRDP_DesktopResize (2368)
791 #define FreeRDP_DrawAllowDynamicColorFidelity (2369)
792 #define FreeRDP_DrawAllowColorSubsampling (2370)
793 #define FreeRDP_DrawAllowSkipAlpha (2371)
794 #define FreeRDP_OrderSupport (2432)
795 #define FreeRDP_BitmapCacheV3Enabled (2433)
796 #define FreeRDP_AltSecFrameMarkerSupport (2434)
797 #define FreeRDP_AllowUnanouncedOrdersFromServer (2435)
798 #define FreeRDP_BitmapCacheEnabled (2497)
799 #define FreeRDP_BitmapCacheVersion (2498)
800 #define FreeRDP_AllowCacheWaitingList (2499)
801 #define FreeRDP_BitmapCachePersistEnabled (2500)
802 #define FreeRDP_BitmapCacheV2NumCells (2501)
803 #define FreeRDP_BitmapCacheV2CellInfo (2502)
804 #define FreeRDP_ColorPointerFlag (2560)
805 #define FreeRDP_PointerCacheSize (2561)
806 #define FreeRDP_KeyboardRemappingList (2622)
807 #define FreeRDP_KeyboardCodePage (2623)
808 #define FreeRDP_KeyboardLayout (2624)
809 #define FreeRDP_KeyboardType (2625)
810 #define FreeRDP_KeyboardSubType (2626)
811 #define FreeRDP_KeyboardFunctionKey (2627)
812 #define FreeRDP_ImeFileName (2628)
813 #define FreeRDP_UnicodeInput (2629)
814 #define FreeRDP_FastPathInput (2630)
815 #define FreeRDP_MultiTouchInput (2631)
816 #define FreeRDP_MultiTouchGestures (2632)
817 #define FreeRDP_KeyboardHook (2633)
818 #define FreeRDP_HasHorizontalWheel (2634)
819 #define FreeRDP_HasExtendedMouseEvent (2635)
820 #define FreeRDP_BrushSupportLevel (2688)
821 #define FreeRDP_GlyphSupportLevel (2752)
822 #define FreeRDP_GlyphCache (2753)
823 #define FreeRDP_FragCache (2754)
824 #define FreeRDP_OffscreenSupportLevel (2816)
825 #define FreeRDP_OffscreenCacheSize (2817)
826 #define FreeRDP_OffscreenCacheEntries (2818)
827 #define FreeRDP_VirtualChannelCompressionFlags (2880)
828 #define FreeRDP_VirtualChannelChunkSize (2881)
829 #define FreeRDP_SoundBeepsEnabled (2944)
830 #define FreeRDP_MultifragMaxRequestSize (3328)
831 #define FreeRDP_LargePointerFlag (3392)
832 #define FreeRDP_CompDeskSupportLevel (3456)
833 #define FreeRDP_SurfaceCommandsEnabled (3520)
834 #define FreeRDP_FrameMarkerCommandEnabled (3521)
835 #define FreeRDP_SurfaceFrameMarkerEnabled (3522)
836 #define FreeRDP_RemoteFxOnly (3648)
837 #define FreeRDP_RemoteFxCodec (3649)
838 #define FreeRDP_RemoteFxCodecId (3650)
839 #define FreeRDP_RemoteFxCodecMode (3651)
840 #define FreeRDP_RemoteFxImageCodec (3652)
841 #define FreeRDP_RemoteFxCaptureFlags (3653)
842 #define FreeRDP_NSCodec (3712)
843 #define FreeRDP_NSCodecId (3713)
844 #define FreeRDP_FrameAcknowledge (3714)
845 #define FreeRDP_NSCodecColorLossLevel (3715)
846 #define FreeRDP_NSCodecAllowSubsampling (3716)
847 #define FreeRDP_NSCodecAllowDynamicColorFidelity (3717)
848 #define FreeRDP_JpegCodec (3776)
849 #define FreeRDP_JpegCodecId (3777)
850 #define FreeRDP_JpegQuality (3778)
851 #define FreeRDP_GfxThinClient (3840)
852 #define FreeRDP_GfxSmallCache (3841)
853 #define FreeRDP_GfxProgressive (3842)
854 #define FreeRDP_GfxProgressiveV2 (3843)
855 #define FreeRDP_GfxH264 (3844)
856 #define FreeRDP_GfxAVC444 (3845)
857 #define FreeRDP_GfxSendQoeAck (3846)
858 #define FreeRDP_GfxAVC444v2 (3847)
859 #define FreeRDP_GfxCapsFilter (3848)
860 #define FreeRDP_BitmapCacheV3CodecId (3904)
861 #define FreeRDP_DrawNineGridEnabled (3968)
862 #define FreeRDP_DrawNineGridCacheSize (3969)
863 #define FreeRDP_DrawNineGridCacheEntries (3970)
864 #define FreeRDP_DrawGdiPlusEnabled (4032)
865 #define FreeRDP_DrawGdiPlusCacheEnabled (4033)
866 #define FreeRDP_DeviceRedirection (4160)
867 #define FreeRDP_DeviceCount (4161)
868 #define FreeRDP_DeviceArraySize (4162)
869 #define FreeRDP_DeviceArray (4163)
870 #define FreeRDP_RedirectDrives (4288)
871 #define FreeRDP_RedirectHomeDrive (4289)
872 #define FreeRDP_DrivesToRedirect (4290)
873 #define FreeRDP_RedirectSmartCards (4416)
874 #define FreeRDP_RedirectPrinters (4544)
875 #define FreeRDP_RedirectSerialPorts (4672)
876 #define FreeRDP_RedirectParallelPorts (4673)
877 #define FreeRDP_PreferIPv6OverIPv4 (4674)
878 #define FreeRDP_RedirectClipboard (4800)
879 #define FreeRDP_StaticChannelCount (4928)
880 #define FreeRDP_StaticChannelArraySize (4929)
881 #define FreeRDP_StaticChannelArray (4930)
882 #define FreeRDP_DynamicChannelCount (5056)
883 #define FreeRDP_DynamicChannelArraySize (5057)
884 #define FreeRDP_DynamicChannelArray (5058)
885 #define FreeRDP_SupportDynamicChannels (5059)
886 #define FreeRDP_SupportEchoChannel (5184)
887 #define FreeRDP_SupportDisplayControl (5185)
888 #define FreeRDP_SupportGeometryTracking (5186)
889 #define FreeRDP_SupportSSHAgentChannel (5187)
890 #define FreeRDP_SupportVideoOptimized (5188)
891 #define FreeRDP_RDP2TCPArgs (5189)
892 #define FreeRDP_TcpKeepAlive (5190)
893 #define FreeRDP_TcpKeepAliveRetries (5191)
894 #define FreeRDP_TcpKeepAliveDelay (5192)
895 #define FreeRDP_TcpKeepAliveInterval (5193)
896 #define FreeRDP_TcpAckTimeout (5194)
897 #define FreeRDP_TcpConnectTimeout (5197)
898 
899 /**
900  * FreeRDP Settings Data Structure
901  */
902 
903 #define FreeRDP_Settings_StableAPI_MAX 5312
904 struct rdp_settings
905 {
906 	/**
907 	 * WARNING: this data structure is carefully padded for ABI stability!
908 	 * Keeping this area clean is particularly challenging, so unless you are
909 	 * a trusted developer you should NOT take the liberty of adding your own
910 	 * options straight into the ABI stable zone. Instead, append them to the
911 	 * very end of this data structure, in the zone marked as ABI unstable.
912 	 */
913 
914 	ALIGN64 void* instance;    /* 0 */
915 	UINT64 padding001[16 - 1]; /* 1 */
916 
917 	/* Core Parameters */
918 	ALIGN64 BOOL ServerMode;               /* 16 */
919 	ALIGN64 UINT32 ShareId;                /* 17 */
920 	ALIGN64 UINT32 PduSource;              /* 18 */
921 	ALIGN64 UINT32 ServerPort;             /* 19 */
922 	ALIGN64 char* ServerHostname;          /* 20 */
923 	ALIGN64 char* Username;                /* 21 */
924 	ALIGN64 char* Password;                /* 22 */
925 	ALIGN64 char* Domain;                  /* 23 */
926 	ALIGN64 char* PasswordHash;            /* 24 */
927 	ALIGN64 BOOL WaitForOutputBufferFlush; /* 25 */
928 	ALIGN64 UINT32 MaxTimeInCheckLoop;     /* 26 */
929 	ALIGN64 char* AcceptedCert;            /* 27 */
930 	ALIGN64 UINT32 AcceptedCertLength;     /* 28 */
931 	UINT64 padding0064[64 - 29];           /* 29 */
932 	UINT64 padding0128[128 - 64];          /* 64 */
933 
934 	/**
935 	 * GCC User Data Blocks
936 	 */
937 
938 	/* Client/Server Core Data */
939 	ALIGN64 UINT32 RdpVersion;            /* 128 */
940 	ALIGN64 UINT32 DesktopWidth;          /* 129 */
941 	ALIGN64 UINT32 DesktopHeight;         /* 130 */
942 	ALIGN64 UINT32 ColorDepth;            /* 131 */
943 	ALIGN64 UINT32 ConnectionType;        /* 132 */
944 	ALIGN64 UINT32 ClientBuild;           /* 133 */
945 	ALIGN64 char* ClientHostname;         /* 134 */
946 	ALIGN64 char* ClientProductId;        /* 135 */
947 	ALIGN64 UINT32 EarlyCapabilityFlags;  /* 136 */
948 	ALIGN64 BOOL NetworkAutoDetect;       /* 137 */
949 	ALIGN64 BOOL SupportAsymetricKeys;    /* 138 */
950 	ALIGN64 BOOL SupportErrorInfoPdu;     /* 139 */
951 	ALIGN64 BOOL SupportStatusInfoPdu;    /* 140 */
952 	ALIGN64 BOOL SupportMonitorLayoutPdu; /* 141 */
953 	ALIGN64 BOOL SupportGraphicsPipeline; /* 142 */
954 	ALIGN64 BOOL SupportDynamicTimeZone;  /* 143 */
955 	ALIGN64 BOOL SupportHeartbeatPdu;     /* 144 */
956 	ALIGN64 UINT32 DesktopPhysicalWidth;  /* 145 */
957 	ALIGN64 UINT32 DesktopPhysicalHeight; /* 146 */
958 	ALIGN64 UINT16 DesktopOrientation;    /* 147 */
959 	ALIGN64 UINT32 DesktopScaleFactor;    /* 148 */
960 	ALIGN64 UINT32 DeviceScaleFactor;     /* 149 */
961 	UINT64 padding0192[192 - 150];        /* 150 */
962 
963 	/* Client/Server Security Data */
964 	ALIGN64 BOOL UseRdpSecurityLayer;       /* 192 */
965 	ALIGN64 UINT32 EncryptionMethods;       /* 193 */
966 	ALIGN64 UINT32 ExtEncryptionMethods;    /* 194 */
967 	ALIGN64 UINT32 EncryptionLevel;         /* 195 */
968 	ALIGN64 BYTE* ServerRandom;             /* 196 */
969 	ALIGN64 UINT32 ServerRandomLength;      /* 197 */
970 	ALIGN64 BYTE* ServerCertificate;        /* 198 */
971 	ALIGN64 UINT32 ServerCertificateLength; /* 199 */
972 	ALIGN64 BYTE* ClientRandom;             /* 200 */
973 	ALIGN64 UINT32 ClientRandomLength;      /* 201 */
974 	UINT64 padding0256[256 - 202];          /* 202 */
975 
976 	/* Client Network Data */
977 	ALIGN64 UINT32 ChannelCount;          /* 256 */
978 	ALIGN64 UINT32 ChannelDefArraySize;   /* 257 */
979 	ALIGN64 CHANNEL_DEF* ChannelDefArray; /* 258 */
980 	UINT64 padding0320[320 - 259];        /* 259 */
981 
982 	/* Client Cluster Data */
983 	ALIGN64 UINT32 ClusterInfoFlags;    /* 320 */
984 	ALIGN64 UINT32 RedirectedSessionId; /* 321 */
985 	ALIGN64 BOOL ConsoleSession;        /* 322 */
986 	UINT64 padding0384[384 - 323];      /* 323 */
987 
988 	/* Client Monitor Data */
989 	ALIGN64 UINT32 MonitorCount;         /*    384 */
990 	ALIGN64 UINT32 MonitorDefArraySize;  /*    385 */
991 	ALIGN64 rdpMonitor* MonitorDefArray; /*    386 */
992 	ALIGN64 BOOL SpanMonitors;           /*    387 */
993 	ALIGN64 BOOL UseMultimon;            /*    388 */
994 	ALIGN64 BOOL ForceMultimon;          /*    389 */
995 	ALIGN64 UINT32 DesktopPosX;          /*    390 */
996 	ALIGN64 UINT32 DesktopPosY;          /*    391 */
997 	ALIGN64 BOOL ListMonitors;           /*    392 */
998 	ALIGN64 UINT32* MonitorIds;          /*    393 */
999 	ALIGN64 UINT32 NumMonitorIds;        /*    394 */
1000 	ALIGN64 UINT32 MonitorLocalShiftX;   /*395 */
1001 	ALIGN64 UINT32 MonitorLocalShiftY;   /*    396 */
1002 	ALIGN64 BOOL HasMonitorAttributes;   /*    397 */
1003 	UINT64 padding0448[448 - 398];       /* 398 */
1004 
1005 	/* Client Message Channel Data */
1006 	UINT64 padding0512[512 - 448]; /* 448 */
1007 
1008 	/* Client Multitransport Channel Data */
1009 	ALIGN64 UINT32 MultitransportFlags; /* 512 */
1010 	ALIGN64 BOOL SupportMultitransport; /* 513 */
1011 	UINT64 padding0576[576 - 514];      /* 514 */
1012 	UINT64 padding0640[640 - 576];      /* 576 */
1013 
1014 	/*
1015 	 * Client Info
1016 	 */
1017 
1018 	/* Client Info (Shell) */
1019 	ALIGN64 char* AlternateShell;        /* 640 */
1020 	ALIGN64 char* ShellWorkingDirectory; /* 641 */
1021 	UINT64 padding0704[704 - 642];       /* 642 */
1022 
1023 	/* Client Info Flags */
1024 	ALIGN64 BOOL AutoLogonEnabled;       /* 704 */
1025 	ALIGN64 BOOL CompressionEnabled;     /* 705 */
1026 	ALIGN64 BOOL DisableCtrlAltDel;      /* 706 */
1027 	ALIGN64 BOOL EnableWindowsKey;       /* 707 */
1028 	ALIGN64 BOOL MaximizeShell;          /* 708 */
1029 	ALIGN64 BOOL LogonNotify;            /* 709 */
1030 	ALIGN64 BOOL LogonErrors;            /* 710 */
1031 	ALIGN64 BOOL MouseAttached;          /* 711 */
1032 	ALIGN64 BOOL MouseHasWheel;          /* 712 */
1033 	ALIGN64 BOOL RemoteConsoleAudio;     /* 713 */
1034 	ALIGN64 BOOL AudioPlayback;          /* 714 */
1035 	ALIGN64 BOOL AudioCapture;           /* 715 */
1036 	ALIGN64 BOOL VideoDisable;           /* 716 */
1037 	ALIGN64 BOOL PasswordIsSmartcardPin; /* 717 */
1038 	ALIGN64 BOOL UsingSavedCredentials;  /* 718 */
1039 	ALIGN64 BOOL ForceEncryptedCsPdu;    /* 719 */
1040 	ALIGN64 BOOL HiDefRemoteApp;         /* 720 */
1041 	ALIGN64 UINT32 CompressionLevel;     /* 721 */
1042 	UINT64 padding0768[768 - 722];       /* 722 */
1043 
1044 	/* Client Info (Extra) */
1045 	ALIGN64 BOOL IPv6Enabled;      /* 768 */
1046 	ALIGN64 char* ClientAddress;   /* 769 */
1047 	ALIGN64 char* ClientDir;       /* 770 */
1048 	UINT64 padding0832[832 - 771]; /* 771 */
1049 
1050 	/* Client Info (Auto Reconnection) */
1051 	ALIGN64 BOOL AutoReconnectionEnabled;                     /* 832 */
1052 	ALIGN64 UINT32 AutoReconnectMaxRetries;                   /* 833 */
1053 	ALIGN64 ARC_CS_PRIVATE_PACKET* ClientAutoReconnectCookie; /* 834 */
1054 	ALIGN64 ARC_SC_PRIVATE_PACKET* ServerAutoReconnectCookie; /* 835 */
1055 	ALIGN64 BOOL PrintReconnectCookie;                        /* 836 */
1056 	UINT64 padding0896[896 - 837];                            /* 837 */
1057 
1058 	/* Client Info (Time Zone) */
1059 	ALIGN64 TIME_ZONE_INFORMATION* ClientTimeZone; /* 896 */
1060 	ALIGN64 char* DynamicDSTTimeZoneKeyName;       /* 897 */
1061 	ALIGN64 BOOL DynamicDaylightTimeDisabled;      /* 898 */
1062 	UINT64 padding0960[960 - 899];                 /* 899 */
1063 
1064 	/* Client Info (Performance Flags) */
1065 	ALIGN64 UINT32 PerformanceFlags;      /* 960 */
1066 	ALIGN64 BOOL AllowFontSmoothing;      /* 961 */
1067 	ALIGN64 BOOL DisableWallpaper;        /* 962 */
1068 	ALIGN64 BOOL DisableFullWindowDrag;   /* 963 */
1069 	ALIGN64 BOOL DisableMenuAnims;        /* 964 */
1070 	ALIGN64 BOOL DisableThemes;           /* 965 */
1071 	ALIGN64 BOOL DisableCursorShadow;     /* 966 */
1072 	ALIGN64 BOOL DisableCursorBlinking;   /* 967 */
1073 	ALIGN64 BOOL AllowDesktopComposition; /* 968 */
1074 	UINT64 padding1024[1024 - 969];       /* 969 */
1075 
1076 	/* Remote Assistance */
1077 	ALIGN64 BOOL RemoteAssistanceMode;           /* 1024 */
1078 	ALIGN64 char* RemoteAssistanceSessionId;     /* 1025 */
1079 	ALIGN64 char* RemoteAssistancePassStub;      /* 1026 */
1080 	ALIGN64 char* RemoteAssistancePassword;      /* 1027 */
1081 	ALIGN64 char* RemoteAssistanceRCTicket;      /* 1028 */
1082 	ALIGN64 BOOL EncomspVirtualChannel;          /* 1029 */
1083 	ALIGN64 BOOL RemdeskVirtualChannel;          /* 1030 */
1084 	ALIGN64 BOOL LyncRdpMode;                    /* 1031 */
1085 	ALIGN64 BOOL RemoteAssistanceRequestControl; /* 1032 */
1086 	UINT64 padding1088[1088 - 1033];             /* 1033 */
1087 
1088 	/**
1089 	 * X.224 Connection Request/Confirm
1090 	 */
1091 
1092 	/* Protocol Security */
1093 	ALIGN64 BOOL TlsSecurity;                  /* 1088 */
1094 	ALIGN64 BOOL NlaSecurity;                  /* 1089 */
1095 	ALIGN64 BOOL RdpSecurity;                  /* 1090 */
1096 	ALIGN64 BOOL ExtSecurity;                  /* 1091 */
1097 	ALIGN64 BOOL Authentication;               /* 1092 */
1098 	ALIGN64 UINT32 RequestedProtocols;         /* 1093 */
1099 	ALIGN64 UINT32 SelectedProtocol;           /* 1094 */
1100 	ALIGN64 UINT32 NegotiationFlags;           /* 1095 */
1101 	ALIGN64 BOOL NegotiateSecurityLayer;       /* 1096 */
1102 	ALIGN64 BOOL RestrictedAdminModeRequired;  /* 1097 */
1103 	ALIGN64 char* AuthenticationServiceClass;  /* 1098 */
1104 	ALIGN64 BOOL DisableCredentialsDelegation; /* 1099 */
1105 	ALIGN64 UINT32 AuthenticationLevel;        /* 1100 */
1106 	ALIGN64 char* AllowedTlsCiphers;           /* 1101 */
1107 	ALIGN64 BOOL VmConnectMode;                /* 1102 */
1108 	ALIGN64 char* NtlmSamFile;                 /* 1103 */
1109 	ALIGN64 BOOL FIPSMode;                     /* 1104 */
1110 	ALIGN64 UINT32 TlsSecLevel;                /* 1105 */
1111 	UINT64 padding1152[1152 - 1106];           /* 1106 */
1112 
1113 	/* Connection Cookie */
1114 	ALIGN64 BOOL MstscCookieMode;      /* 1152 */
1115 	ALIGN64 UINT32 CookieMaxLength;    /* 1153 */
1116 	ALIGN64 UINT32 PreconnectionId;    /* 1154 */
1117 	ALIGN64 char* PreconnectionBlob;   /* 1155 */
1118 	ALIGN64 BOOL SendPreconnectionPdu; /* 1156 */
1119 	UINT64 padding1216[1216 - 1157];   /* 1157 */
1120 
1121 	/* Server Redirection */
1122 	ALIGN64 UINT32 RedirectionFlags;              /* 1216 */
1123 	ALIGN64 char* TargetNetAddress;               /* 1217 */
1124 	ALIGN64 BYTE* LoadBalanceInfo;                /* 1218 */
1125 	ALIGN64 UINT32 LoadBalanceInfoLength;         /* 1219 */
1126 	ALIGN64 char* RedirectionUsername;            /* 1220 */
1127 	ALIGN64 char* RedirectionDomain;              /* 1221 */
1128 	ALIGN64 BYTE* RedirectionPassword;            /* 1222 */
1129 	ALIGN64 UINT32 RedirectionPasswordLength;     /* 1223 */
1130 	ALIGN64 char* RedirectionTargetFQDN;          /* 1224 */
1131 	ALIGN64 char* RedirectionTargetNetBiosName;   /* 1225 */
1132 	ALIGN64 BYTE* RedirectionTsvUrl;              /* 1226 */
1133 	ALIGN64 UINT32 RedirectionTsvUrlLength;       /* 1227 */
1134 	ALIGN64 UINT32 TargetNetAddressCount;         /* 1228 */
1135 	ALIGN64 char** TargetNetAddresses;            /* 1229 */
1136 	ALIGN64 UINT32* TargetNetPorts;               /* 1230 */
1137 	ALIGN64 char* RedirectionAcceptedCert;        /* 1231 */
1138 	ALIGN64 UINT32 RedirectionAcceptedCertLength; /* 1232 */
1139 	ALIGN64 UINT32 RedirectionPreferType;         /* 1233 */
1140 	UINT64 padding1280[1280 - 1234];              /* 1234 */
1141 
1142 	/**
1143 	 * Security
1144 	 */
1145 
1146 	/* Credentials Cache */
1147 	ALIGN64 BYTE* Password51;          /* 1280 */
1148 	ALIGN64 UINT32 Password51Length;   /* 1281 */
1149 	ALIGN64 BOOL SmartcardLogon;       /* 1282 */
1150 	ALIGN64 BOOL PromptForCredentials; /* 1283 */
1151 	UINT64 padding1344[1344 - 1284];   /* 1284 */
1152 
1153 	/* Kerberos Authentication */
1154 	ALIGN64 char* KerberosKdc;       /* 1344 */
1155 	ALIGN64 char* KerberosRealm;     /* 1345 */
1156 	UINT64 padding1408[1408 - 1346]; /* 1346 */
1157 
1158 	/* Server Certificate */
1159 	ALIGN64 BOOL IgnoreCertificate;                /* 1408 */
1160 	ALIGN64 char* CertificateName;                 /* 1409 */
1161 	ALIGN64 char* CertificateFile;                 /* 1410 */
1162 	ALIGN64 char* PrivateKeyFile;                  /* 1411 */
1163 	ALIGN64 char* RdpKeyFile;                      /* 1412 */
1164 	ALIGN64 rdpRsaKey* RdpServerRsaKey;            /* 1413 */
1165 	ALIGN64 rdpCertificate* RdpServerCertificate;  /* 1414 */
1166 	ALIGN64 BOOL ExternalCertificateManagement;    /* 1415 */
1167 	ALIGN64 char* CertificateContent;              /* 1416 */
1168 	ALIGN64 char* PrivateKeyContent;               /* 1417 */
1169 	ALIGN64 char* RdpKeyContent;                   /* 1418 */
1170 	ALIGN64 BOOL AutoAcceptCertificate;            /* 1419 */
1171 	ALIGN64 BOOL AutoDenyCertificate;              /* 1420 */
1172 	ALIGN64 char* CertificateAcceptedFingerprints; /* 1421 */
1173 	UINT64 padding1472[1472 - 1422];               /* 1422 */
1174 	UINT64 padding1536[1536 - 1472];               /* 1472 */
1175 
1176 	/**
1177 	 * User Interface
1178 	 */
1179 
1180 	/* Window Settings */
1181 	ALIGN64 BOOL Workarea;                /* 1536 */
1182 	ALIGN64 BOOL Fullscreen;              /* 1537 */
1183 	ALIGN64 UINT32 PercentScreen;         /* 1538 */
1184 	ALIGN64 BOOL GrabKeyboard;            /* 1539 */
1185 	ALIGN64 BOOL Decorations;             /* 1540 */
1186 	ALIGN64 BOOL MouseMotion;             /* 1541 */
1187 	ALIGN64 char* WindowTitle;            /* 1542 */
1188 	ALIGN64 UINT64 ParentWindowId;        /* 1543 */
1189 	ALIGN64 BOOL AsyncInput;              /* 1544 */
1190 	ALIGN64 BOOL AsyncUpdate;             /* 1545 */
1191 	ALIGN64 BOOL AsyncChannels;           /* 1546 */
1192 	UINT64 padding1548[1548 - 1547];      /* 1547 */
1193 	ALIGN64 BOOL ToggleFullscreen;        /* 1548 */
1194 	ALIGN64 char* WmClass;                /* 1549 */
1195 	ALIGN64 BOOL EmbeddedWindow;          /* 1550 */
1196 	ALIGN64 BOOL SmartSizing;             /* 1551 */
1197 	ALIGN64 INT32 XPan;                   /* 1552 */
1198 	ALIGN64 INT32 YPan;                   /* 1553 */
1199 	ALIGN64 UINT32 SmartSizingWidth;      /* 1554 */
1200 	ALIGN64 UINT32 SmartSizingHeight;     /* 1555 */
1201 	ALIGN64 BOOL PercentScreenUseWidth;   /* 1556 */
1202 	ALIGN64 BOOL PercentScreenUseHeight;  /* 1557 */
1203 	ALIGN64 BOOL DynamicResolutionUpdate; /* 1558 */
1204 	UINT64 padding1601[1601 - 1559];      /* 1559 */
1205 
1206 	/* Miscellaneous */
1207 	ALIGN64 BOOL SoftwareGdi;          /* 1601 */
1208 	ALIGN64 BOOL LocalConnection;      /* 1602 */
1209 	ALIGN64 BOOL AuthenticationOnly;   /* 1603 */
1210 	ALIGN64 BOOL CredentialsFromStdin; /* 1604 */
1211 	ALIGN64 BOOL UnmapButtons;         /* 1605 */
1212 	ALIGN64 BOOL OldLicenseBehaviour;  /* 1606 */
1213 	UINT64 padding1664[1664 - 1607];   /* 1607 */
1214 
1215 	/* Names */
1216 	ALIGN64 char* ComputerName;      /* 1664 */
1217 	UINT64 padding1728[1728 - 1665]; /* 1665 */
1218 
1219 	/* Files */
1220 	ALIGN64 char* ConnectionFile;    /* 1728 */
1221 	ALIGN64 char* AssistanceFile;    /* 1729 */
1222 	UINT64 padding1792[1792 - 1730]; /* 1730 */
1223 
1224 	/* Paths */
1225 	ALIGN64 char* HomePath;          /* 1792 */
1226 	ALIGN64 char* ConfigPath;        /* 1793 */
1227 	ALIGN64 char* CurrentPath;       /* 1794 */
1228 	UINT64 padding1856[1856 - 1795]; /* 1795 */
1229 
1230 	/* Recording */
1231 	ALIGN64 BOOL DumpRemoteFx;       /* 1856 */
1232 	ALIGN64 BOOL PlayRemoteFx;       /* 1857 */
1233 	ALIGN64 char* DumpRemoteFxFile;  /* 1858 */
1234 	ALIGN64 char* PlayRemoteFxFile;  /* 1859 */
1235 	UINT64 padding1920[1920 - 1860]; /* 1860 */
1236 	UINT64 padding1984[1984 - 1920]; /* 1920 */
1237 
1238 	/**
1239 	 * Gateway
1240 	 */
1241 
1242 	/* Gateway */
1243 	ALIGN64 UINT32 GatewayUsageMethod;        /* 1984 */
1244 	ALIGN64 UINT32 GatewayPort;               /* 1985 */
1245 	ALIGN64 char* GatewayHostname;            /* 1986 */
1246 	ALIGN64 char* GatewayUsername;            /* 1987 */
1247 	ALIGN64 char* GatewayPassword;            /* 1988 */
1248 	ALIGN64 char* GatewayDomain;              /* 1989 */
1249 	ALIGN64 UINT32 GatewayCredentialsSource;  /* 1990 */
1250 	ALIGN64 BOOL GatewayUseSameCredentials;   /* 1991 */
1251 	ALIGN64 BOOL GatewayEnabled;              /* 1992 */
1252 	ALIGN64 BOOL GatewayBypassLocal;          /* 1993 */
1253 	ALIGN64 BOOL GatewayRpcTransport;         /* 1994 */
1254 	ALIGN64 BOOL GatewayHttpTransport;        /* 1995 */
1255 	ALIGN64 BOOL GatewayUdpTransport;         /* 1996 */
1256 	ALIGN64 char* GatewayAccessToken;         /* 1997 */
1257 	ALIGN64 char* GatewayAcceptedCert;        /* 1998 */
1258 	ALIGN64 UINT32 GatewayAcceptedCertLength; /* 1999 */
1259 	ALIGN64 BOOL GatewayHttpUseWebsockets;    /* 2000 */
1260 	UINT64 padding2015[2015 - 2001];          /* 2001 */
1261 
1262 	/* Proxy */
1263 	ALIGN64 UINT32 ProxyType;        /* 2015 */
1264 	ALIGN64 char* ProxyHostname;     /* 2016 */
1265 	ALIGN64 UINT16 ProxyPort;        /* 2017 */
1266 	ALIGN64 char* ProxyUsername;     /* 2018 */
1267 	ALIGN64 char* ProxyPassword;     /* 2019 */
1268 	UINT64 padding2112[2112 - 2020]; /* 2020 */
1269 
1270 	/**
1271 	 * RemoteApp
1272 	 */
1273 
1274 	/* RemoteApp */
1275 	ALIGN64 BOOL RemoteApplicationMode;               /* 2112 */
1276 	ALIGN64 char* RemoteApplicationName;              /* 2113 */
1277 	ALIGN64 char* RemoteApplicationIcon;              /* 2114 */
1278 	ALIGN64 char* RemoteApplicationProgram;           /* 2115 */
1279 	ALIGN64 char* RemoteApplicationFile;              /* 2116 */
1280 	ALIGN64 char* RemoteApplicationGuid;              /* 2117 */
1281 	ALIGN64 char* RemoteApplicationCmdLine;           /* 2118 */
1282 	ALIGN64 UINT32 RemoteApplicationExpandCmdLine;    /* 2119 */
1283 	ALIGN64 UINT32 RemoteApplicationExpandWorkingDir; /* 2120 */
1284 	ALIGN64 BOOL DisableRemoteAppCapsCheck;           /* 2121 */
1285 	ALIGN64 UINT32 RemoteAppNumIconCaches;            /* 2122 */
1286 	ALIGN64 UINT32 RemoteAppNumIconCacheEntries;      /* 2123 */
1287 	ALIGN64 BOOL RemoteAppLanguageBarSupported;       /* 2124 */
1288 	ALIGN64 UINT32 RemoteWndSupportLevel;             /* 2125 */
1289 	ALIGN64 UINT32 RemoteApplicationSupportLevel;     /* 2126 */
1290 	ALIGN64 UINT32 RemoteApplicationSupportMask;      /* 2127 */
1291 	ALIGN64 char* RemoteApplicationWorkingDir;        /* 2128 */
1292 	UINT64 padding2176[2176 - 2129];                  /* 2129 */
1293 	UINT64 padding2240[2240 - 2176];                  /* 2176 */
1294 
1295 	/**
1296 	 * Mandatory Capabilities
1297 	 */
1298 
1299 	/* Capabilities */
1300 	ALIGN64 BYTE* ReceivedCapabilities;      /* 2240 */
1301 	ALIGN64 UINT32 ReceivedCapabilitiesSize; /* 2241 */
1302 	UINT64 padding2304[2304 - 2242];         /* 2242 */
1303 
1304 	/* General Capabilities */
1305 	ALIGN64 UINT32 OsMajorType;             /* 2304 */
1306 	ALIGN64 UINT32 OsMinorType;             /* 2305 */
1307 	ALIGN64 BOOL RefreshRect;               /* 2306 */
1308 	ALIGN64 BOOL SuppressOutput;            /* 2307 */
1309 	ALIGN64 BOOL FastPathOutput;            /* 2308 */
1310 	ALIGN64 BOOL SaltedChecksum;            /* 2309 */
1311 	ALIGN64 BOOL LongCredentialsSupported;  /* 2310 */
1312 	ALIGN64 BOOL NoBitmapCompressionHeader; /* 2311 */
1313 	ALIGN64 BOOL BitmapCompressionDisabled; /* 2312 */
1314 	UINT64 padding2368[2368 - 2313];        /* 2313 */
1315 
1316 	/* Bitmap Capabilities */
1317 	ALIGN64 BOOL DesktopResize;                 /* 2368 */
1318 	ALIGN64 BOOL DrawAllowDynamicColorFidelity; /* 2369 */
1319 	ALIGN64 BOOL DrawAllowColorSubsampling;     /* 2370 */
1320 	ALIGN64 BOOL DrawAllowSkipAlpha;            /* 2371 */
1321 	UINT64 padding2432[2432 - 2372];            /* 2372 */
1322 
1323 	/* Order Capabilities */
1324 	ALIGN64 BYTE* OrderSupport;                   /* 2432 */
1325 	ALIGN64 BOOL BitmapCacheV3Enabled;            /* 2433 */
1326 	ALIGN64 BOOL AltSecFrameMarkerSupport;        /* 2434 */
1327 	ALIGN64 BOOL AllowUnanouncedOrdersFromServer; /* 2435 */
1328 	UINT64 padding2497[2497 - 2436];              /* 2436 */
1329 
1330 	/* Bitmap Cache Capabilities */
1331 	ALIGN64 BOOL BitmapCacheEnabled;                          /* 2497 */
1332 	ALIGN64 UINT32 BitmapCacheVersion;                        /* 2498 */
1333 	ALIGN64 BOOL AllowCacheWaitingList;                       /* 2499 */
1334 	ALIGN64 BOOL BitmapCachePersistEnabled;                   /* 2500 */
1335 	ALIGN64 UINT32 BitmapCacheV2NumCells;                     /* 2501 */
1336 	ALIGN64 BITMAP_CACHE_V2_CELL_INFO* BitmapCacheV2CellInfo; /* 2502 */
1337 	UINT64 padding2560[2560 - 2503];                          /* 2503 */
1338 
1339 	/* Pointer Capabilities */
1340 	ALIGN64 BOOL ColorPointerFlag;   /* 2560 */
1341 	ALIGN64 UINT32 PointerCacheSize; /* 2561 */
1342 	UINT64 padding2624[2622 - 2562]; /* 2562 */
1343 
1344 	/* Input Capabilities */
1345 	ALIGN64 char* KeyboardRemappingList; /* 2622 */
1346 	ALIGN64 UINT32 KeyboardCodePage;     /* 2623 */
1347 	ALIGN64 UINT32 KeyboardLayout;       /* 2624 */
1348 	ALIGN64 UINT32 KeyboardType;         /* 2625 */
1349 	ALIGN64 UINT32 KeyboardSubType;      /* 2626 */
1350 	ALIGN64 UINT32 KeyboardFunctionKey;  /* 2627 */
1351 	ALIGN64 char* ImeFileName;           /* 2628 */
1352 	ALIGN64 BOOL UnicodeInput;           /* 2629 */
1353 	ALIGN64 BOOL FastPathInput;          /* 2630 */
1354 	ALIGN64 BOOL MultiTouchInput;        /* 2631 */
1355 	ALIGN64 BOOL MultiTouchGestures;     /* 2632 */
1356 	ALIGN64 UINT32 KeyboardHook;         /* 2633 */
1357 	ALIGN64 BOOL HasHorizontalWheel;     /* 2634 */
1358 	ALIGN64 BOOL HasExtendedMouseEvent;  /* 2635 */
1359 	UINT64 padding2688[2688 - 2636];     /* 2636 */
1360 
1361 	/* Brush Capabilities */
1362 	ALIGN64 UINT32 BrushSupportLevel; /* 2688 */
1363 	UINT64 padding2752[2752 - 2689];  /* 2689 */
1364 
1365 	/* Glyph Cache Capabilities */
1366 	ALIGN64 UINT32 GlyphSupportLevel;           /* 2752 */
1367 	ALIGN64 GLYPH_CACHE_DEFINITION* GlyphCache; /* 2753 */
1368 	ALIGN64 GLYPH_CACHE_DEFINITION* FragCache;  /* 2754 */
1369 	UINT64 padding2816[2816 - 2755];            /* 2755 */
1370 
1371 	/* Offscreen Bitmap Cache */
1372 	ALIGN64 UINT32 OffscreenSupportLevel; /* 2816 */
1373 	ALIGN64 UINT32 OffscreenCacheSize;    /* 2817 */
1374 	ALIGN64 UINT32 OffscreenCacheEntries; /* 2818 */
1375 	UINT64 padding2880[2880 - 2819];      /* 2819 */
1376 
1377 	/* Virtual Channel Capabilities */
1378 	ALIGN64 UINT32 VirtualChannelCompressionFlags; /* 2880 */
1379 	ALIGN64 UINT32 VirtualChannelChunkSize;        /* 2881 */
1380 	UINT64 padding2944[2944 - 2882];               /* 2882 */
1381 
1382 	/* Sound Capabilities */
1383 	ALIGN64 BOOL SoundBeepsEnabled;  /* 2944 */
1384 	UINT64 padding3008[3008 - 2945]; /* 2945 */
1385 	UINT64 padding3072[3072 - 3008]; /* 3008 */
1386 
1387 	/**
1388 	 * Optional Capabilities
1389 	 */
1390 
1391 	/* Bitmap Cache Host Capabilities */
1392 	UINT64 padding3136[3136 - 3072]; /* 3072 */
1393 
1394 	/* Control Capabilities */
1395 	UINT64 padding3200[3200 - 3136]; /* 3136 */
1396 
1397 	/* Window Activation Capabilities */
1398 	UINT64 padding3264[3264 - 3200]; /* 3200 */
1399 
1400 	/* Font Capabilities */
1401 	UINT64 padding3328[3328 - 3264]; /* 3264 */
1402 
1403 	/* Multifragment Update Capabilities */
1404 	ALIGN64 UINT32 MultifragMaxRequestSize; /* 3328 */
1405 	UINT64 padding3392[3392 - 3329];        /* 3329 */
1406 
1407 	/* Large Pointer Update Capabilities */
1408 	ALIGN64 UINT32 LargePointerFlag; /* 3392 */
1409 	UINT64 padding3456[3456 - 3393]; /* 3393 */
1410 
1411 	/* Desktop Composition Capabilities */
1412 	ALIGN64 UINT32 CompDeskSupportLevel; /* 3456 */
1413 	UINT64 padding3520[3520 - 3457];     /* 3457 */
1414 
1415 	/* Surface Commands Capabilities */
1416 	ALIGN64 BOOL SurfaceCommandsEnabled;    /* 3520 */
1417 	ALIGN64 BOOL FrameMarkerCommandEnabled; /* 3521 */
1418 	ALIGN64 BOOL SurfaceFrameMarkerEnabled; /* 3522 */
1419 	UINT64 padding3584[3584 - 3523];        /* 3523 */
1420 	UINT64 padding3648[3648 - 3584];        /* 3584 */
1421 
1422 	/*
1423 	 * Bitmap Codecs Capabilities
1424 	 */
1425 
1426 	/* RemoteFX */
1427 	ALIGN64 BOOL RemoteFxOnly;           /* 3648 */
1428 	ALIGN64 BOOL RemoteFxCodec;          /* 3649 */
1429 	ALIGN64 UINT32 RemoteFxCodecId;      /* 3650 */
1430 	ALIGN64 UINT32 RemoteFxCodecMode;    /* 3651 */
1431 	ALIGN64 BOOL RemoteFxImageCodec;     /* 3652 */
1432 	ALIGN64 UINT32 RemoteFxCaptureFlags; /* 3653 */
1433 	UINT64 padding3712[3712 - 3654];     /* 3654 */
1434 
1435 	/* NSCodec */
1436 	ALIGN64 BOOL NSCodec;                          /* 3712 */
1437 	ALIGN64 UINT32 NSCodecId;                      /* 3713 */
1438 	ALIGN64 UINT32 FrameAcknowledge;               /* 3714 */
1439 	ALIGN64 UINT32 NSCodecColorLossLevel;          /* 3715 */
1440 	ALIGN64 BOOL NSCodecAllowSubsampling;          /* 3716 */
1441 	ALIGN64 BOOL NSCodecAllowDynamicColorFidelity; /* 3717 */
1442 	UINT64 padding3776[3776 - 3718];               /* 3718 */
1443 
1444 	/* JPEG */
1445 	ALIGN64 BOOL JpegCodec;          /* 3776 */
1446 	ALIGN64 UINT32 JpegCodecId;      /* 3777 */
1447 	ALIGN64 UINT32 JpegQuality;      /* 3778 */
1448 	UINT64 padding3840[3840 - 3779]; /* 3779 */
1449 
1450 	ALIGN64 BOOL GfxThinClient;      /* 3840 */
1451 	ALIGN64 BOOL GfxSmallCache;      /* 3841 */
1452 	ALIGN64 BOOL GfxProgressive;     /* 3842 */
1453 	ALIGN64 BOOL GfxProgressiveV2;   /* 3843 */
1454 	ALIGN64 BOOL GfxH264;            /* 3844 */
1455 	ALIGN64 BOOL GfxAVC444;          /* 3845 */
1456 	ALIGN64 BOOL GfxSendQoeAck;      /* 3846 */
1457 	ALIGN64 BOOL GfxAVC444v2;        /* 3847 */
1458 	ALIGN64 UINT32 GfxCapsFilter;    /* 3848 */
1459 	UINT64 padding3904[3904 - 3849]; /* 3849 */
1460 
1461 	/**
1462 	 * Caches
1463 	 */
1464 
1465 	/* Bitmap Cache V3 */
1466 	ALIGN64 UINT32 BitmapCacheV3CodecId; /* 3904 */
1467 	UINT64 padding3968[3968 - 3905];     /* 3905 */
1468 
1469 	/* Draw Nine Grid */
1470 	ALIGN64 BOOL DrawNineGridEnabled;        /* 3968 */
1471 	ALIGN64 UINT32 DrawNineGridCacheSize;    /* 3969 */
1472 	ALIGN64 UINT32 DrawNineGridCacheEntries; /* 3970 */
1473 	UINT64 padding4032[4032 - 3971];         /* 3971 */
1474 
1475 	/* Draw GDI+ */
1476 	ALIGN64 BOOL DrawGdiPlusEnabled;      /* 4032 */
1477 	ALIGN64 BOOL DrawGdiPlusCacheEnabled; /* 4033 */
1478 	UINT64 padding4096[4096 - 4034];      /* 4034 */
1479 	UINT64 padding4160[4160 - 4096];      /* 4096 */
1480 
1481 	/**
1482 	 * Device Redirection
1483 	 */
1484 
1485 	/* Device Redirection */
1486 	ALIGN64 BOOL DeviceRedirection;     /* 4160 */
1487 	ALIGN64 UINT32 DeviceCount;         /* 4161 */
1488 	ALIGN64 UINT32 DeviceArraySize;     /* 4162 */
1489 	ALIGN64 RDPDR_DEVICE** DeviceArray; /* 4163 */
1490 	UINT64 padding4288[4288 - 4164];    /* 4164 */
1491 
1492 	/* Drive Redirection */
1493 	ALIGN64 BOOL RedirectDrives;     /* 4288 */
1494 	ALIGN64 BOOL RedirectHomeDrive;  /* 4289 */
1495 	ALIGN64 char* DrivesToRedirect;  /* 4290 */
1496 	UINT64 padding4416[4416 - 4291]; /* 4291 */
1497 
1498 	/* Smartcard Redirection */
1499 	ALIGN64 BOOL RedirectSmartCards; /* 4416 */
1500 	UINT64 padding4544[4544 - 4417]; /* 4417 */
1501 
1502 	/* Printer Redirection */
1503 	ALIGN64 BOOL RedirectPrinters;   /* 4544 */
1504 	UINT64 padding4672[4672 - 4545]; /* 4545 */
1505 
1506 	/* Serial and Parallel Port Redirection */
1507 	ALIGN64 BOOL RedirectSerialPorts;   /* 4672 */
1508 	ALIGN64 BOOL RedirectParallelPorts; /* 4673 */
1509 	ALIGN64 BOOL PreferIPv6OverIPv4;    /* 4674 */
1510 	UINT64 padding4800[4800 - 4675];    /* 4675 */
1511 
1512 	/**
1513 	 * Other Redirection
1514 	 */
1515 
1516 	ALIGN64 BOOL RedirectClipboard;  /* 4800 */
1517 	UINT64 padding4928[4928 - 4801]; /* 4801 */
1518 
1519 	/**
1520 	 * Static Virtual Channels
1521 	 */
1522 
1523 	ALIGN64 UINT32 StaticChannelCount;       /* 4928 */
1524 	ALIGN64 UINT32 StaticChannelArraySize;   /* 4929 */
1525 	ALIGN64 ADDIN_ARGV** StaticChannelArray; /* 4930 */
1526 	UINT64 padding5056[5056 - 4931];         /* 4931 */
1527 
1528 	/**
1529 	 * Dynamic Virtual Channels
1530 	 */
1531 
1532 	ALIGN64 UINT32 DynamicChannelCount;       /* 5056 */
1533 	ALIGN64 UINT32 DynamicChannelArraySize;   /* 5057 */
1534 	ALIGN64 ADDIN_ARGV** DynamicChannelArray; /* 5058 */
1535 	ALIGN64 BOOL SupportDynamicChannels;      /* 5059 */
1536 	UINT64 padding5184[5184 - 5060];          /* 5060 */
1537 
1538 	ALIGN64 BOOL SupportEchoChannel;      /* 5184 */
1539 	ALIGN64 BOOL SupportDisplayControl;   /* 5185 */
1540 	ALIGN64 BOOL SupportGeometryTracking; /* 5186 */
1541 	ALIGN64 BOOL SupportSSHAgentChannel;  /* 5187 */
1542 	ALIGN64 BOOL SupportVideoOptimized;   /* 5188 */
1543 	ALIGN64 char* RDP2TCPArgs;            /* 5189 */
1544 	ALIGN64 BOOL TcpKeepAlive;            /* 5190 */
1545 	ALIGN64 UINT32 TcpKeepAliveRetries;   /* 5191 */
1546 	ALIGN64 UINT32 TcpKeepAliveDelay;     /* 5192 */
1547 	ALIGN64 UINT32 TcpKeepAliveInterval;  /* 5193 */
1548 	ALIGN64 UINT32 TcpAckTimeout;         /* 5194 */
1549 	UINT64 padding5197[5197 - 5195];      /* 5195 */
1550 	ALIGN64 UINT32 TcpConnectTimeout;     /* 5197 */
1551 	UINT64 padding5312[5312 - 5198];      /* 5198 */
1552 
1553 	/**
1554 	 * WARNING: End of ABI stable zone!
1555 	 *
1556 	 * The zone below this point is ABI unstable, and
1557 	 * is therefore potentially subject to ABI breakage.
1558 	 */
1559 
1560 	/*
1561 	 * Extensions
1562 	 */
1563 
1564 	/* Extensions */
1565 	ALIGN64 INT32 num_extensions;              /*  */
1566 	ALIGN64 struct rdp_ext_set extensions[16]; /*  */
1567 
1568 	ALIGN64 BYTE* SettingsModified; /* byte array marking fields that have been modified from their
1569 	                                   default value - currently UNUSED! */
1570 	ALIGN64 char* ActionScript;
1571 	ALIGN64 DWORD Floatbar;
1572 	ALIGN64 char* XSelectionAtom;
1573 };
1574 typedef struct rdp_settings rdpSettings;
1575 
1576 enum rdp_settings_type
1577 {
1578 	RDP_SETTINGS_TYPE_BOOL,
1579 	RDP_SETTINGS_TYPE_UINT16,
1580 	RDP_SETTINGS_TYPE_INT16,
1581 	RDP_SETTINGS_TYPE_UINT32,
1582 	RDP_SETTINGS_TYPE_INT32,
1583 	RDP_SETTINGS_TYPE_UINT64,
1584 	RDP_SETTINGS_TYPE_INT64,
1585 	RDP_SETTINGS_TYPE_STRING,
1586 	RDP_SETTINGS_TYPE_POINTER
1587 };
1588 
1589 #ifdef __cplusplus
1590 extern "C"
1591 {
1592 #endif
1593 
1594 /**
1595  * rdpSettings creation flags
1596  */
1597 #define FREERDP_SETTINGS_SERVER_MODE 0x00000001
1598 
1599 	FREERDP_API rdpSettings* freerdp_settings_new(DWORD flags);
1600 	FREERDP_API rdpSettings* freerdp_settings_clone(const rdpSettings* settings);
1601 	FREERDP_API BOOL freerdp_settings_copy(rdpSettings* dst, const rdpSettings* src);
1602 	FREERDP_API void freerdp_settings_free(rdpSettings* settings);
1603 
1604 	FREERDP_API int freerdp_addin_set_argument(ADDIN_ARGV* args, char* argument);
1605 	FREERDP_API int freerdp_addin_replace_argument(ADDIN_ARGV* args, char* previous,
1606 	                                               char* argument);
1607 	FREERDP_API int freerdp_addin_set_argument_value(ADDIN_ARGV* args, char* option, char* value);
1608 	FREERDP_API int freerdp_addin_replace_argument_value(ADDIN_ARGV* args, char* previous,
1609 	                                                     char* option, char* value);
1610 
1611 	FREERDP_API BOOL freerdp_device_collection_add(rdpSettings* settings, RDPDR_DEVICE* device);
1612 	FREERDP_API RDPDR_DEVICE* freerdp_device_collection_find(rdpSettings* settings,
1613 	                                                         const char* name);
1614 	FREERDP_API RDPDR_DEVICE* freerdp_device_collection_find_type(rdpSettings* settings,
1615 	                                                              UINT32 type);
1616 	FREERDP_API RDPDR_DEVICE* freerdp_device_clone(RDPDR_DEVICE* device);
1617 	FREERDP_API void freerdp_device_collection_free(rdpSettings* settings);
1618 
1619 	FREERDP_API BOOL freerdp_static_channel_collection_add(rdpSettings* settings,
1620 	                                                       ADDIN_ARGV* channel);
1621 	FREERDP_API ADDIN_ARGV* freerdp_static_channel_collection_find(rdpSettings* settings,
1622 	                                                               const char* name);
1623 	FREERDP_API ADDIN_ARGV* freerdp_static_channel_clone(ADDIN_ARGV* channel);
1624 	FREERDP_API void freerdp_static_channel_collection_free(rdpSettings* settings);
1625 
1626 	FREERDP_API BOOL freerdp_dynamic_channel_collection_add(rdpSettings* settings,
1627 	                                                        ADDIN_ARGV* channel);
1628 	FREERDP_API ADDIN_ARGV* freerdp_dynamic_channel_collection_find(rdpSettings* settings,
1629 	                                                                const char* name);
1630 	FREERDP_API ADDIN_ARGV* freerdp_dynamic_channel_clone(ADDIN_ARGV* channel);
1631 	FREERDP_API void freerdp_dynamic_channel_collection_free(rdpSettings* settings);
1632 
1633 	FREERDP_API void freerdp_target_net_addresses_free(rdpSettings* settings);
1634 
1635 	FREERDP_API void freerdp_performance_flags_make(rdpSettings* settings);
1636 	FREERDP_API void freerdp_performance_flags_split(rdpSettings* settings);
1637 
1638 	FREERDP_API BOOL freerdp_set_gateway_usage_method(rdpSettings* settings,
1639 	                                                  UINT32 GatewayUsageMethod);
1640 	FREERDP_API void freerdp_update_gateway_usage_method(rdpSettings* settings,
1641 	                                                     UINT32 GatewayEnabled,
1642 	                                                     UINT32 GatewayBypassLocal);
1643 
1644 #if !defined(DEFINE_NO_DEPRECATED)
1645 	/* DEPRECATED:
1646 	 * the functions freerdp_get_param_* and freerdp_set_param_* are deprecated.
1647 	 * use freerdp_settings_get_* and freerdp_settings_set_* as a replacement!
1648 	 */
1649 	FREERDP_API WINPR_DEPRECATED(BOOL freerdp_get_param_bool(const rdpSettings* settings, int id));
1650 	FREERDP_API WINPR_DEPRECATED(int freerdp_set_param_bool(rdpSettings* settings, int id,
1651 	                                                        BOOL param));
1652 
1653 	FREERDP_API WINPR_DEPRECATED(int freerdp_get_param_int(const rdpSettings* settings, int id));
1654 	FREERDP_API WINPR_DEPRECATED(int freerdp_set_param_int(rdpSettings* settings, int id,
1655 	                                                       int param));
1656 
1657 	FREERDP_API WINPR_DEPRECATED(UINT32 freerdp_get_param_uint32(const rdpSettings* settings,
1658 	                                                             int id));
1659 	FREERDP_API WINPR_DEPRECATED(int freerdp_set_param_uint32(rdpSettings* settings, int id,
1660 	                                                          UINT32 param));
1661 
1662 	FREERDP_API WINPR_DEPRECATED(UINT64 freerdp_get_param_uint64(const rdpSettings* settings,
1663 	                                                             int id));
1664 	FREERDP_API WINPR_DEPRECATED(int freerdp_set_param_uint64(rdpSettings* settings, int id,
1665 	                                                          UINT64 param));
1666 
1667 	FREERDP_API WINPR_DEPRECATED(char* freerdp_get_param_string(const rdpSettings* settings,
1668 	                                                            int id));
1669 	FREERDP_API WINPR_DEPRECATED(int freerdp_set_param_string(rdpSettings* settings, int id,
1670 	                                                          const char* param));
1671 #endif
1672 
1673 	FREERDP_API BOOL freerdp_settings_get_bool(const rdpSettings* settings, size_t id);
1674 	FREERDP_API BOOL freerdp_settings_set_bool(rdpSettings* settings, size_t id, BOOL param);
1675 
1676 	FREERDP_API INT16 freerdp_settings_get_int16(const rdpSettings* settings, size_t id);
1677 	FREERDP_API BOOL freerdp_settings_set_int16(rdpSettings* settings, size_t id, INT16 param);
1678 
1679 	FREERDP_API UINT16 freerdp_settings_get_uint16(const rdpSettings* settings, size_t id);
1680 	FREERDP_API BOOL freerdp_settings_set_uint16(rdpSettings* settings, size_t id, UINT16 param);
1681 
1682 	FREERDP_API INT32 freerdp_settings_get_int32(const rdpSettings* settings, size_t id);
1683 	FREERDP_API BOOL freerdp_settings_set_int32(rdpSettings* settings, size_t id, INT32 param);
1684 
1685 	FREERDP_API UINT32 freerdp_settings_get_uint32(const rdpSettings* settings, size_t id);
1686 	FREERDP_API BOOL freerdp_settings_set_uint32(rdpSettings* settings, size_t id, UINT32 param);
1687 
1688 	FREERDP_API INT64 freerdp_settings_get_int64(const rdpSettings* settings, size_t id);
1689 	FREERDP_API BOOL freerdp_settings_set_int64(rdpSettings* settings, size_t id, INT64 param);
1690 
1691 	FREERDP_API UINT64 freerdp_settings_get_uint64(const rdpSettings* settings, size_t id);
1692 	FREERDP_API BOOL freerdp_settings_set_uint64(rdpSettings* settings, size_t id, UINT64 param);
1693 
1694 	FREERDP_API const char* freerdp_settings_get_string(const rdpSettings* settings, size_t id);
1695 	FREERDP_API BOOL freerdp_settings_set_string(rdpSettings* settings, size_t id,
1696 	                                             const char* param);
1697 
1698 	FREERDP_API const void* freerdp_settings_get_pointer(const rdpSettings* settings, size_t id);
1699 
1700 	FREERDP_API BOOL freerdp_settings_set_value_for_name(rdpSettings* settings, const char* name,
1701 	                                                     const char* value);
1702 
1703 	FREERDP_API SSIZE_T freerdp_settings_get_key_for_name(const char* value);
1704 	FREERDP_API SSIZE_T freerdp_settings_get_type_for_name(const char* value);
1705 	FREERDP_API SSIZE_T freerdp_settings_get_type_for_key(size_t key);
1706 	FREERDP_API const char* freerdp_settings_get_name_for_key(size_t key);
1707 
1708 #ifdef __cplusplus
1709 }
1710 #endif
1711 
1712 #endif /* FREERDP_SETTINGS_H */
1713