2
rdesktop: A Remote Desktop Protocol client.
3
Miscellaneous protocol constants
4
Copyright (C) Matthew Chapman 1999-2002
6
This program is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 2 of the License, or
9
(at your option) any later version.
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU General Public License for more details.
16
You should have received a copy of the GNU General Public License
17
along with this program; if not, write to the Free Software
18
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21
/* TCP port for Remote Desktop Protocol */
22
#define TCP_PORT_RDP 3389
27
ISO_PDU_CR = 0xE0, /* Connection Request */
28
ISO_PDU_CC = 0xD0, /* Connection Confirm */
29
ISO_PDU_DR = 0x80, /* Disconnect Request */
30
ISO_PDU_DT = 0xF0, /* Data */
31
ISO_PDU_ER = 0x70 /* Error */
37
MCS_EDRQ = 1, /* Erect Domain Request */
38
MCS_DPUM = 8, /* Disconnect Provider Ultimatum */
39
MCS_AURQ = 10, /* Attach User Request */
40
MCS_AUCF = 11, /* Attach User Confirm */
41
MCS_CJRQ = 14, /* Channel Join Request */
42
MCS_CJCF = 15, /* Channel Join Confirm */
43
MCS_SDRQ = 25, /* Send Data Request */
44
MCS_SDIN = 26 /* Send Data Indication */
47
#define MCS_CONNECT_INITIAL 0x7f65
48
#define MCS_CONNECT_RESPONSE 0x7f66
50
#define BER_TAG_BOOLEAN 1
51
#define BER_TAG_INTEGER 2
52
#define BER_TAG_OCTET_STRING 4
53
#define BER_TAG_RESULT 10
54
#define MCS_TAG_DOMAIN_PARAMS 0x30
56
#define MCS_GLOBAL_CHANNEL 1003
57
#define MCS_USERCHANNEL_BASE 1001
59
/* RDP secure transport constants */
60
#define SEC_RANDOM_SIZE 32
61
#define SEC_MODULUS_SIZE 64
62
#define SEC_PADDING_SIZE 8
63
#define SEC_EXPONENT_SIZE 4
65
#define SEC_CLIENT_RANDOM 0x0001
66
#define SEC_ENCRYPT 0x0008
67
#define SEC_LOGON_INFO 0x0040
68
#define SEC_LICENCE_NEG 0x0080
70
#define SEC_TAG_SRV_INFO 0x0c01
71
#define SEC_TAG_SRV_CRYPT 0x0c02
72
#define SEC_TAG_SRV_CHANNELS 0x0c03
74
#define SEC_TAG_CLI_INFO 0xc001
75
#define SEC_TAG_CLI_CRYPT 0xc002
76
#define SEC_TAG_CLI_CHANNELS 0xc003
77
#define SEC_TAG_CLI_4 0xc004
79
#define SEC_TAG_PUBKEY 0x0006
80
#define SEC_TAG_KEYSIG 0x0008
82
#define SEC_RSA_MAGIC 0x31415352 /* RSA1 */
84
/* RDP licensing constants */
85
#define LICENCE_TOKEN_SIZE 10
86
#define LICENCE_HWID_SIZE 20
87
#define LICENCE_SIGNATURE_SIZE 16
89
#define LICENCE_TAG_DEMAND 0x01
90
#define LICENCE_TAG_AUTHREQ 0x02
91
#define LICENCE_TAG_ISSUE 0x03
92
#define LICENCE_TAG_REISSUE 0x04
93
#define LICENCE_TAG_PRESENT 0x12
94
#define LICENCE_TAG_REQUEST 0x13
95
#define LICENCE_TAG_AUTHRESP 0x15
96
#define LICENCE_TAG_RESULT 0xff
98
#define LICENCE_TAG_USER 0x000f
99
#define LICENCE_TAG_HOST 0x0010
104
RDP_PDU_DEMAND_ACTIVE = 1,
105
RDP_PDU_CONFIRM_ACTIVE = 3,
106
RDP_PDU_DEACTIVATE = 6,
110
enum RDP_DATA_PDU_TYPE
112
RDP_DATA_PDU_UPDATE = 2,
113
RDP_DATA_PDU_CONTROL = 20,
114
RDP_DATA_PDU_POINTER = 27,
115
RDP_DATA_PDU_INPUT = 28,
116
RDP_DATA_PDU_SYNCHRONISE = 31,
117
RDP_DATA_PDU_BELL = 34,
118
RDP_DATA_PDU_LOGON = 38,
119
RDP_DATA_PDU_FONT2 = 39,
120
RDP_DATA_PDU_DISCONNECT = 47
123
enum RDP_CONTROL_PDU_TYPE
125
RDP_CTL_REQUEST_CONTROL = 1,
126
RDP_CTL_GRANT_CONTROL = 2,
128
RDP_CTL_COOPERATE = 4
131
enum RDP_UPDATE_PDU_TYPE
133
RDP_UPDATE_ORDERS = 0,
134
RDP_UPDATE_BITMAP = 1,
135
RDP_UPDATE_PALETTE = 2,
136
RDP_UPDATE_SYNCHRONIZE = 3
139
enum RDP_POINTER_PDU_TYPE
141
RDP_POINTER_SYSTEM = 1,
142
RDP_POINTER_MOVE = 3,
143
RDP_POINTER_COLOR = 6,
144
RDP_POINTER_CACHED = 7
147
enum RDP_SYSTEM_POINTER_TYPE
149
RDP_NULL_POINTER = 0,
150
RDP_DEFAULT_POINTER = 0x7F00
153
enum RDP_INPUT_DEVICE
155
RDP_INPUT_SYNCHRONIZE = 0,
156
RDP_INPUT_CODEPOINT = 1,
157
RDP_INPUT_VIRTKEY = 2,
158
RDP_INPUT_SCANCODE = 4,
159
RDP_INPUT_MOUSE = 0x8001
163
#define KBD_FLAG_RIGHT 0x0001
164
#define KBD_FLAG_EXT 0x0100
165
#define KBD_FLAG_QUIET 0x1000
166
#define KBD_FLAG_DOWN 0x4000
167
#define KBD_FLAG_UP 0x8000
169
/* These are for synchronization; not for keystrokes */
170
#define KBD_FLAG_SCROLL 0x0001
171
#define KBD_FLAG_NUMLOCK 0x0002
172
#define KBD_FLAG_CAPITAL 0x0004
175
#define RDP_KEYPRESS 0
176
#define RDP_KEYRELEASE (KBD_FLAG_DOWN | KBD_FLAG_UP)
178
#define MOUSE_FLAG_MOVE 0x0800
179
#define MOUSE_FLAG_BUTTON1 0x1000
180
#define MOUSE_FLAG_BUTTON2 0x2000
181
#define MOUSE_FLAG_BUTTON3 0x4000
182
#define MOUSE_FLAG_BUTTON4 0x0280
183
#define MOUSE_FLAG_BUTTON5 0x0380
184
#define MOUSE_FLAG_DOWN 0x8000
186
/* Raster operation masks */
187
#define ROP2_S(rop3) (rop3 & 0xf)
188
#define ROP2_P(rop3) ((rop3 & 0x3) | ((rop3 & 0x30) >> 2))
190
#define ROP2_COPY 0xc
193
#define ROP2_NXOR 0x9
196
#define MIX_TRANSPARENT 0
199
#define TEXT2_VERTICAL 0x04
200
#define TEXT2_IMPLICIT_X 0x20
202
/* RDP capabilities */
203
#define RDP_CAPSET_GENERAL 1 /* Maps to generalCapabilitySet in T.128 page 138 */
204
#define RDP_CAPLEN_GENERAL 0x18
205
#define OS_MAJOR_TYPE_UNIX 4
206
#define OS_MINOR_TYPE_XSERVER 7
208
#define RDP_CAPSET_BITMAP 2
209
#define RDP_CAPLEN_BITMAP 0x1C
211
#define RDP_CAPSET_ORDER 3
212
#define RDP_CAPLEN_ORDER 0x58
213
#define ORDER_CAP_NEGOTIATE 2
214
#define ORDER_CAP_NOSUPPORT 4
216
#define RDP_CAPSET_BMPCACHE 4
217
#define RDP_CAPLEN_BMPCACHE 0x28
219
#define RDP_CAPSET_CONTROL 5
220
#define RDP_CAPLEN_CONTROL 0x0C
222
#define RDP_CAPSET_ACTIVATE 7
223
#define RDP_CAPLEN_ACTIVATE 0x0C
225
#define RDP_CAPSET_POINTER 8
226
#define RDP_CAPLEN_POINTER 0x08
228
#define RDP_CAPSET_SHARE 9
229
#define RDP_CAPLEN_SHARE 0x08
231
#define RDP_CAPSET_COLCACHE 10
232
#define RDP_CAPLEN_COLCACHE 0x08
234
#define RDP_CAPSET_UNKNOWN 13
235
#define RDP_CAPLEN_UNKNOWN 0x9C
237
#define RDP_SOURCE "MSTSC"
240
#define RDP_LOGON_NORMAL 0x33
241
#define RDP_LOGON_AUTO 0x8
242
#define RDP_LOGON_BLOB 0x100
245
#define MapRightShiftMask (1<<0)
246
#define MapLeftShiftMask (1<<1)
247
#define MapShiftMask (MapRightShiftMask | MapLeftShiftMask)
249
#define MapRightAltMask (1<<2)
250
#define MapLeftAltMask (1<<3)
251
#define MapAltGrMask MapRightAltMask
253
#define MapRightCtrlMask (1<<4)
254
#define MapLeftCtrlMask (1<<5)
255
#define MapCtrlMask (MapRightCtrlMask | MapLeftCtrlMask)
257
#define MapRightWinMask (1<<6)
258
#define MapLeftWinMask (1<<7)
259
#define MapWinMask (MapRightWinMask | MapLeftWinMask)
261
#define MapNumLockMask (1<<8)
262
#define MapCapsLockMask (1<<9)
264
#define MapLocalStateMask (1<<10)
266
#define MapInhibitMask (1<<11)
268
#define MASK_ADD_BITS(var, mask) (var |= mask)
269
#define MASK_REMOVE_BITS(var, mask) (var &= ~mask)
270
#define MASK_HAS_BITS(var, mask) ((var & mask)>0)
271
#define MASK_CHANGE_BIT(var, mask, active) (var = ((var & ~mask) | (active ? mask : 0)))
273
/* Clipboard constants, "borrowed" from GCC system headers in
274
the w32 cross compiler */
278
#define CF_METAFILEPICT 3
285
#define CF_PENDATA 10
288
#define CF_UNICODETEXT 13
289
#define CF_ENHMETAFILE 14
293
#define CF_OWNERDISPLAY 128
294
#define CF_DSPTEXT 129
295
#define CF_DSPBITMAP 130
296
#define CF_DSPMETAFILEPICT 131
297
#define CF_DSPENHMETAFILE 142
298
#define CF_PRIVATEFIRST 512
299
#define CF_PRIVATELAST 767
300
#define CF_GDIOBJFIRST 768
301
#define CF_GDIOBJLAST 1023
303
/* Sound format constants */
304
#define WAVE_FORMAT_PCM 1
305
#define WAVE_FORMAT_ADPCM 2
306
#define WAVE_FORMAT_ALAW 6
307
#define WAVE_FORMAT_MULAW 7
309
/* Virtual channel options */
310
#define CHANNEL_OPTION_INITIALIZED 0x80000000
311
#define CHANNEL_OPTION_ENCRYPT_RDP 0x40000000
312
#define CHANNEL_OPTION_COMPRESS_RDP 0x00800000
313
#define CHANNEL_OPTION_SHOW_PROTOCOL 0x00200000
315
/* NT status codes for RDPDR */
316
#define STATUS_SUCCESS 0x00000000
317
#define STATUS_INVALID_PARAMETER 0xc000000d
318
#define STATUS_INVALID_DEVICE_REQUEST 0xc0000010
319
#define STATUS_ACCESS_DENIED 0xc0000022