/src/wireshark/epan/dissectors/packet-rdp_rail.c
Line | Count | Source |
1 | | /* packet-rdp_rail.c |
2 | | * Routines for the RAIL RDP channel |
3 | | * Copyright 2023, David Fort <contact@hardening-consulting.com> |
4 | | * |
5 | | * Wireshark - Network traffic analyzer |
6 | | * By Gerald Combs <gerald@wireshark.org> |
7 | | * Copyright 1998 Gerald Combs |
8 | | * |
9 | | * SPDX-License-Identifier: GPL-2.0-or-later |
10 | | */ |
11 | | |
12 | | /* |
13 | | * See: "[MS-RDPERP] " |
14 | | */ |
15 | | |
16 | | #include "config.h" |
17 | | |
18 | | #include <epan/packet.h> |
19 | | #include <epan/prefs.h> |
20 | | #include <epan/conversation.h> |
21 | | #include <epan/expert.h> |
22 | | |
23 | | #include "packet-rdpudp.h" |
24 | | |
25 | | void proto_register_rdp_rail(void); |
26 | | void proto_reg_handoff_rdp_rail(void); |
27 | | |
28 | | static int proto_rdp_rail; |
29 | | |
30 | | static int hf_rail_orderType; |
31 | | static int hf_rail_pduLength; |
32 | | |
33 | | static int hf_rail_caps_handshake_buildNumber; |
34 | | |
35 | | static int hf_rail_windowId; |
36 | | static int hf_rail_windowmove_left; |
37 | | static int hf_rail_windowmove_top; |
38 | | static int hf_rail_windowmove_right; |
39 | | static int hf_rail_windowmove_bottom; |
40 | | |
41 | | static int hf_rail_notify_iconId; |
42 | | static int hf_rail_notify_message; |
43 | | |
44 | | static int hf_rail_localmovesize_isMoveSizeStart; |
45 | | static int hf_rail_localmovesize_moveSizeType; |
46 | | static int hf_rail_localmovesize_posX; |
47 | | static int hf_rail_localmovesize_posY; |
48 | | |
49 | | static int hf_rail_minmaxinfo_maxwidth; |
50 | | static int hf_rail_minmaxinfo_maxheight; |
51 | | static int hf_rail_minmaxinfo_maxPosX; |
52 | | static int hf_rail_minmaxinfo_maxPosY; |
53 | | static int hf_rail_minmaxinfo_minTrackWidth; |
54 | | static int hf_rail_minmaxinfo_minTrackHeight; |
55 | | static int hf_rail_minmaxinfo_maxTrackWidth; |
56 | | static int hf_rail_minmaxinfo_maxTrackHeight; |
57 | | |
58 | | static int hf_rail_cloak_cloaked; |
59 | | |
60 | | static int hf_rail_handshake_flags; |
61 | | static int hf_rail_handshake_flags_hidef; |
62 | | static int hf_rail_handshake_flags_ex_spi; |
63 | | static int hf_rail_handshake_flags_snap; |
64 | | static int hf_rail_handshake_flags_textscale; |
65 | | static int hf_rail_handshake_flags_caretblink; |
66 | | static int hf_rail_handshake_flags_ex_spi2; |
67 | | |
68 | | static int hf_rail_cstatus_flags; |
69 | | static int hf_rail_cstatus_flags_allowlocalmove; |
70 | | static int hf_rail_cstatus_autoreconnect; |
71 | | static int hf_rail_cstatus_zorder_sync; |
72 | | static int hf_rail_cstatus_resize_margin; |
73 | | static int hf_rail_cstatus_hidpi_icons; |
74 | | static int hf_rail_cstatus_appbar_remoting; |
75 | | static int hf_rail_cstatus_powerdisplay; |
76 | | static int hf_rail_cstatus_bidir_cloak; |
77 | | static int hf_rail_cstatus_suppress_icon_border; |
78 | | |
79 | | static int hf_rail_activate_enabled; |
80 | | |
81 | | static int hf_rail_sysparam_server_params; |
82 | | static int hf_rail_sysparam_client_params; |
83 | | |
84 | | static int ett_rdp_rail; |
85 | | static int ett_rdp_rail_handshake_flags; |
86 | | static int ett_rdp_rail_clientstatus_flags; |
87 | | |
88 | | enum { |
89 | | TS_RAIL_ORDER_EXEC = 0x01, |
90 | | TS_RAIL_ORDER_ACTIVATE = 0x02, |
91 | | TS_RAIL_ORDER_SYSPARAM = 0x03, |
92 | | TS_RAIL_ORDER_SYSCOMMAND = 0x04, |
93 | | TS_RAIL_ORDER_HANDSHAKE = 0x05, |
94 | | TS_RAIL_ORDER_NOTIFY_EVENT = 0x06, |
95 | | TS_RAIL_ORDER_EXEC_RESULT_7 = 0x7, |
96 | | TS_RAIL_ORDER_WINDOWMOVE = 0x08, |
97 | | TS_RAIL_ORDER_LOCALMOVESIZE = 0x09, |
98 | | TS_RAIL_ORDER_MINMAXINFO = 0x0a, |
99 | | TS_RAIL_ORDER_CLIENTSTATUS = 0x0b, |
100 | | TS_RAIL_ORDER_SYSMENU = 0x0c, |
101 | | TS_RAIL_ORDER_LANGBARINFO = 0x0d, |
102 | | TS_RAIL_ORDER_EXEC_RESULT = 0x80, |
103 | | TS_RAIL_ORDER_GET_APPID_REQ = 0x0e, |
104 | | TS_RAIL_ORDER_GET_APPID_RESP = 0x0f, |
105 | | TS_RAIL_ORDER_TASKBARINFO = 0x10, |
106 | | TS_RAIL_ORDER_LANGUAGEIMEINFO = 0x11, |
107 | | TS_RAIL_ORDER_COMPARTMENTINFO = 0x12, |
108 | | TS_RAIL_ORDER_HANDSHAKE_EX = 0X13, |
109 | | TS_RAIL_ORDER_ZORDER_SYNC = 0x14, |
110 | | TS_RAIL_ORDER_CLOAK = 0x15, |
111 | | TS_RAIL_ORDER_POWER_DISPLAY_REQUEST = 0x16, |
112 | | TS_RAIL_ORDER_SNAP_ARRANGE = 0x17, |
113 | | TS_RAIL_ORDER_GET_APPID_RESP_EX = 0x18, |
114 | | TS_RAIL_ORDER_TEXTSCALEINFO = 0x19, |
115 | | TS_RAIL_ORDER_CARETBLINKINFO = 0x1a, |
116 | | |
117 | | TS_RAIL_ORDER_WINDOW_CREATE_BODY = 0x1b, |
118 | | TS_RAIL_ORDER_WINDOW_CHANGE_BODY = 0x1c, |
119 | | TS_RAIL_ORDER_WINDOW_GEOMETRY_BODY = 0x1d, |
120 | | TS_RAIL_ORDER_WINDOW_DELETE_BODY = 0x1e, |
121 | | TS_RAIL_ORDER_WINDOW_ICON_BODY = 0x1f, |
122 | | TS_RAIL_ORDER_WINDOW_CACHED_ICON = 0x20, |
123 | | TS_RAIL_ORDER_WINDOW_APPBAR_INFO_BODY = 0x21, |
124 | | TS_RAIL_ORDER_WINDOW_NOTIFY_ICON_BODY = 0x22, |
125 | | TS_RAIL_ORDER_WINDOW_NOTIFY_ICON_BODY_CHANGE = 0x23, |
126 | | TS_RAIL_ORDER_NOTIFY_ICON_DELETE = 0x25, |
127 | | TS_RAIL_ORDER_ZORDER_BODY = 0x26, |
128 | | TS_RAIL_ORDER_SYNC_STATE_BODY = 0x27, |
129 | | TS_RAIL_ORDER_28 = 0x28, |
130 | | TS_RAIL_ORDER_29 = 0x29, |
131 | | TS_RAIL_ORDER_2B = 0x2b, |
132 | | TS_RAIL_ORDER_2C = 0x2c, |
133 | | TS_RAIL_ORDER_2D = 0x2d, |
134 | | }; |
135 | | |
136 | | enum { |
137 | | SPI_SETSCREENSAVEACTIVE = 0x00000011, |
138 | | SPI_SETSCREENSAVESECURE = 0x00000077, |
139 | | |
140 | | SPI_SETDRAGFULLWINDOWS = 0x00000025, |
141 | | SPI_SETKEYBOARDCUES = 0x0000100B, |
142 | | SPI_SETKEYBOARDPREF = 0x00000045, |
143 | | SPI_SETWORKAREA = 0x0000002F, |
144 | | RAIL_SPI_DISPLAYCHANGE = 0x0000F001, |
145 | | SPI_SETMOUSEBUTTONSWAP = 0x00000021, |
146 | | RAIL_SPI_TASKBARPOS = 0x0000F000, |
147 | | SPI_SETHIGHCONTRAST = 0x00000043, |
148 | | SPI_SETCARETWIDTH = 0x00002007, |
149 | | SPI_SETSTICKYKEYS = 0x0000003B, |
150 | | SPI_SETTOGGLEKEYS = 0x00000035, |
151 | | SPI_SETFILTERKEYS = 0x00000033, |
152 | | RAIL_SPI_DISPLAY_ANIMATIONS_ENABLED = 0x0000F002, |
153 | | RAIL_SPI_DISPLAY_ADVANCED_EFFECTS_ENABLED = 0x0000F003, |
154 | | RAIL_SPI_DISPLAY_AUTO_HIDE_SCROLLBARS = 0x0000F004, |
155 | | RAIL_SPI_DISPLAY_MESSAGE_DURATION = 0x0000F005, |
156 | | RAIL_SPI_CLOSED_CAPTION_FONT_COLOR = 0x0000F006, |
157 | | RAIL_SPI_CLOSED_CAPTION_FONT_OPACITY = 0x0000F007, |
158 | | RAIL_SPI_CLOSED_CAPTION_FONT_SIZE = 0x0000F008, |
159 | | RAIL_SPI_CLOSED_CAPTION_FONT_STYLE = 0x0000F009, |
160 | | RAIL_SPI_CLOSED_CAPTION_FONT_EDGE_EFFECT = 0x0000F00A, |
161 | | RAIL_SPI_CLOSED_CAPTION_BACKGROUND_COLOR = 0x0000F00B, |
162 | | RAIL_SPI_CLOSED_CAPTION_BACKGROUND_OPACITY = 0x0000F00C, |
163 | | RAIL_SPI_CLOSED_CAPTION_REGION_COLOR = 0x0000F00D, |
164 | | RAIL_SPI_CLOSED_CAPTION_REGION_OPACITY = 0x0000F00E, |
165 | | }; |
166 | | |
167 | | static const value_string rdp_rail_order_vals[] = { |
168 | | { TS_RAIL_ORDER_EXEC, "Execute"}, |
169 | | { TS_RAIL_ORDER_ACTIVATE, "Activate"}, |
170 | | { TS_RAIL_ORDER_SYSPARAM, "Client system parameters"}, |
171 | | { TS_RAIL_ORDER_SYSCOMMAND, "System command"}, |
172 | | { TS_RAIL_ORDER_HANDSHAKE, "Handshake"}, |
173 | | { TS_RAIL_ORDER_NOTIFY_EVENT, "Notify event"}, |
174 | | { TS_RAIL_ORDER_EXEC_RESULT_7, "ExecResult 0x7"}, |
175 | | { TS_RAIL_ORDER_WINDOWMOVE, "Window move"}, |
176 | | { TS_RAIL_ORDER_LOCALMOVESIZE, "Local move size"}, |
177 | | { TS_RAIL_ORDER_MINMAXINFO, "MinMax info"}, |
178 | | { TS_RAIL_ORDER_CLIENTSTATUS, "Client status"}, |
179 | | { TS_RAIL_ORDER_SYSMENU, "System menu"}, |
180 | | { TS_RAIL_ORDER_LANGBARINFO, "Language bar info"}, |
181 | | { TS_RAIL_ORDER_EXEC_RESULT, "Exec result"}, |
182 | | { TS_RAIL_ORDER_GET_APPID_REQ, "Get appId request"}, |
183 | | { TS_RAIL_ORDER_GET_APPID_RESP, "Get appId response"}, |
184 | | { TS_RAIL_ORDER_TASKBARINFO, "Taskbar info"}, |
185 | | { TS_RAIL_ORDER_LANGUAGEIMEINFO, "Language IME info"}, |
186 | | { TS_RAIL_ORDER_COMPARTMENTINFO, "Compartment info"}, |
187 | | { TS_RAIL_ORDER_HANDSHAKE_EX, "HandshakeEx"}, |
188 | | { TS_RAIL_ORDER_ZORDER_SYNC, "Z-order sync"}, |
189 | | { TS_RAIL_ORDER_CLOAK, "Cloak"}, |
190 | | { TS_RAIL_ORDER_POWER_DISPLAY_REQUEST, "Power display request"}, |
191 | | { TS_RAIL_ORDER_SNAP_ARRANGE, "Snap arrange"}, |
192 | | { TS_RAIL_ORDER_GET_APPID_RESP_EX, "Get appId response"}, |
193 | | { TS_RAIL_ORDER_TEXTSCALEINFO, "Text scale info"}, |
194 | | { TS_RAIL_ORDER_CARETBLINKINFO, "Caret blink info"}, |
195 | | { TS_RAIL_ORDER_WINDOW_CREATE_BODY, "window create body" }, |
196 | | { TS_RAIL_ORDER_WINDOW_CHANGE_BODY, "window change body" }, |
197 | | { TS_RAIL_ORDER_WINDOW_GEOMETRY_BODY, "window body geometry" }, |
198 | | { TS_RAIL_ORDER_WINDOW_DELETE_BODY, "window delete body" }, |
199 | | { TS_RAIL_ORDER_WINDOW_ICON_BODY, "window icon body" }, |
200 | | { TS_RAIL_ORDER_WINDOW_CACHED_ICON, "window icon cached" }, |
201 | | { TS_RAIL_ORDER_WINDOW_APPBAR_INFO_BODY, "appbar info body" }, |
202 | | { TS_RAIL_ORDER_WINDOW_NOTIFY_ICON_BODY, "notify icon body" }, |
203 | | { TS_RAIL_ORDER_WINDOW_NOTIFY_ICON_BODY_CHANGE, "notify icon body change" }, |
204 | | { TS_RAIL_ORDER_NOTIFY_ICON_DELETE, "notify icon delete" }, |
205 | | { TS_RAIL_ORDER_ZORDER_BODY, "zorder" }, |
206 | | { TS_RAIL_ORDER_SYNC_STATE_BODY, "sync state" }, |
207 | | { TS_RAIL_ORDER_28, "order28" }, |
208 | | { TS_RAIL_ORDER_29, "order29" }, |
209 | | { TS_RAIL_ORDER_2B, "order2B" }, |
210 | | { TS_RAIL_ORDER_2C, "order2C" }, |
211 | | { TS_RAIL_ORDER_2D, "order2D" }, |
212 | | |
213 | | { 0x0, NULL}, |
214 | | }; |
215 | | |
216 | | static const value_string moveSizeStart_vals[] = { |
217 | | { 0x0001, "RAIL_WMSZ_LEFT" }, |
218 | | { 0x0002, "RAIL_WMSZ_RIGHT" }, |
219 | | { 0x0003, "RAIL_WMSZ_TOP" }, |
220 | | { 0x0004, "RAIL_WMSZ_TOPLEFT" }, |
221 | | { 0x0005, "RAIL_WMSZ_TOPRIGHT" }, |
222 | | { 0x0006, "RAIL_WMSZ_BOTTOM" }, |
223 | | { 0x0007, "RAIL_WMSZ_BOTTOMLEFT" }, |
224 | | { 0x0008, "RAIL_WMSZ_BOTTOMRIGHT" }, |
225 | | { 0x0009, "RAIL_WMSZ_MOVE" }, |
226 | | { 0x000A, "RAIL_WMSZ_KEYMOVE" }, |
227 | | { 0x000B, "RAIL_WMSZ_KEYSIZE" }, |
228 | | { 0x0, NULL}, |
229 | | }; |
230 | | |
231 | | static const value_string rdp_rail_notify_vals[] = { |
232 | | { 0x00000201, "WM_LBUTTONDOWN" }, |
233 | | { 0x00000202, "WM_LBUTTONUP" }, |
234 | | { 0x00000204, "WM_RBUTTONDOWN" }, |
235 | | { 0x00000205, "WM_RBUTTONUP" }, |
236 | | { 0x0000007B, "WM_CONTEXTMENU" }, |
237 | | { 0x00000203, "WM_LBUTTONDBLCLK" }, |
238 | | { 0x00000206, "WM_RBUTTONDBLCLK" }, |
239 | | { 0x00000400, "NIN_SELECT" }, |
240 | | { 0x00000401, "NIN_KEYSELECT" }, |
241 | | { 0x00000402, "NIN_BALLOONSHOW" }, |
242 | | { 0x00000403, "NIN_BALLOONHIDE" }, |
243 | | { 0x00000404, "NIN_BALLOONTIMEOUT" }, |
244 | | { 0x00000405, "NIN_BALLOONUSERCLICK" }, |
245 | | { 0x0, NULL}, |
246 | | }; |
247 | | |
248 | | static const value_string rdp_rail_server_system_params_vals[] = { |
249 | | { SPI_SETSCREENSAVEACTIVE, "SPI_SETSCREENSAVEACTIVE" }, |
250 | | { SPI_SETSCREENSAVESECURE, "SPI_SETSCREENSAVESECURE" }, |
251 | | { 0x0, NULL}, |
252 | | }; |
253 | | |
254 | | static const value_string rdp_rail_client_system_params_vals[] = { |
255 | | { SPI_SETDRAGFULLWINDOWS, "SPI_SETDRAGFULLWINDOWS" }, |
256 | | { SPI_SETKEYBOARDCUES, "SPI_SETKEYBOARDCUES" }, |
257 | | { SPI_SETKEYBOARDPREF, "SPI_SETKEYBOARDPREF" }, |
258 | | { SPI_SETWORKAREA, "SPI_SETWORKAREA" }, |
259 | | { RAIL_SPI_DISPLAYCHANGE, "RAIL_SPI_DISPLAYCHANGE" }, |
260 | | { SPI_SETMOUSEBUTTONSWAP, "SPI_SETMOUSEBUTTONSWAP" }, |
261 | | { RAIL_SPI_TASKBARPOS, "RAIL_SPI_TASKBARPOS" }, |
262 | | { SPI_SETHIGHCONTRAST, "SPI_SETHIGHCONTRAST" }, |
263 | | { SPI_SETCARETWIDTH, "SPI_SETCARETWIDTH" }, |
264 | | { SPI_SETSTICKYKEYS, "SPI_SETSTICKYKEYS" }, |
265 | | { SPI_SETTOGGLEKEYS, "SPI_SETTOGGLEKEYS" }, |
266 | | { SPI_SETFILTERKEYS, "SPI_SETFILTERKEYS" }, |
267 | | { RAIL_SPI_DISPLAY_ANIMATIONS_ENABLED, "RAIL_SPI_DISPLAY_ANIMATIONS_ENABLED" }, |
268 | | { RAIL_SPI_DISPLAY_ADVANCED_EFFECTS_ENABLED, "RAIL_SPI_DISPLAY_ADVANCED_EFFECTS_ENABLED" }, |
269 | | { RAIL_SPI_DISPLAY_AUTO_HIDE_SCROLLBARS, "RAIL_SPI_DISPLAY_AUTO_HIDE_SCROLLBARS" }, |
270 | | { RAIL_SPI_DISPLAY_MESSAGE_DURATION, "RAIL_SPI_DISPLAY_MESSAGE_DURATION" }, |
271 | | { RAIL_SPI_CLOSED_CAPTION_FONT_COLOR, "RAIL_SPI_CLOSED_CAPTION_FONT_COLOR" }, |
272 | | { RAIL_SPI_CLOSED_CAPTION_FONT_OPACITY, "RAIL_SPI_CLOSED_CAPTION_FONT_OPACITY" }, |
273 | | { RAIL_SPI_CLOSED_CAPTION_FONT_SIZE, "RAIL_SPI_CLOSED_CAPTION_FONT_SIZE" }, |
274 | | { RAIL_SPI_CLOSED_CAPTION_FONT_STYLE, "RAIL_SPI_CLOSED_CAPTION_FONT_STYLE" }, |
275 | | { RAIL_SPI_CLOSED_CAPTION_FONT_EDGE_EFFECT, "RAIL_SPI_CLOSED_CAPTION_FONT_EDGE_EFFECT" }, |
276 | | { RAIL_SPI_CLOSED_CAPTION_BACKGROUND_COLOR, "RAIL_SPI_CLOSED_CAPTION_BACKGROUND_COLOR" }, |
277 | | { RAIL_SPI_CLOSED_CAPTION_BACKGROUND_OPACITY, "RAIL_SPI_CLOSED_CAPTION_BACKGROUND_OPACITY" }, |
278 | | { RAIL_SPI_CLOSED_CAPTION_REGION_COLOR, "RAIL_SPI_CLOSED_CAPTION_REGION_COLOR" }, |
279 | | { RAIL_SPI_CLOSED_CAPTION_REGION_OPACITY, "RAIL_SPI_CLOSED_CAPTION_REGION_OPACITY" }, |
280 | | { 0x0, NULL}, |
281 | | }; |
282 | | |
283 | | |
284 | | static int |
285 | | dissect_rdp_rail(tvbuff_t *tvb _U_, packet_info *pinfo, proto_tree *parent_tree _U_, void *data _U_) |
286 | 0 | { |
287 | 0 | proto_item *item; |
288 | 0 | int nextOffset, offset = 0; |
289 | 0 | uint32_t cmdId = 0; |
290 | 0 | uint32_t pduLength; |
291 | 0 | proto_tree *tree; |
292 | 0 | uint32_t windowId; |
293 | 0 | bool packetToServer = rdp_isServerAddressTarget(pinfo); |
294 | |
|
295 | 0 | parent_tree = proto_tree_get_root(parent_tree); |
296 | 0 | col_set_str(pinfo->cinfo, COL_PROTOCOL, "RAIL"); |
297 | 0 | col_clear(pinfo->cinfo, COL_INFO); |
298 | |
|
299 | 0 | pduLength = tvb_get_uint16(tvb, offset + 2, ENC_LITTLE_ENDIAN); |
300 | 0 | item = proto_tree_add_item(parent_tree, proto_rdp_rail, tvb, offset, pduLength, ENC_NA); |
301 | 0 | tree = proto_item_add_subtree(item, ett_rdp_rail); |
302 | |
|
303 | 0 | proto_tree_add_item_ret_uint(tree, hf_rail_orderType, tvb, offset, 2, ENC_LITTLE_ENDIAN, &cmdId); |
304 | 0 | offset += 2; |
305 | |
|
306 | 0 | proto_tree_add_item(tree, hf_rail_pduLength, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
307 | 0 | offset += 2; |
308 | |
|
309 | 0 | nextOffset = offset + (pduLength - 4); |
310 | | |
311 | | /* packets that start with a windowId */ |
312 | 0 | switch (cmdId) { |
313 | 0 | case TS_RAIL_ORDER_ACTIVATE: |
314 | 0 | case TS_RAIL_ORDER_SYSMENU: |
315 | 0 | case TS_RAIL_ORDER_SYSCOMMAND: |
316 | 0 | case TS_RAIL_ORDER_NOTIFY_EVENT: |
317 | 0 | case TS_RAIL_ORDER_GET_APPID_REQ: |
318 | 0 | case TS_RAIL_ORDER_MINMAXINFO: |
319 | 0 | case TS_RAIL_ORDER_WINDOWMOVE: |
320 | 0 | case TS_RAIL_ORDER_LOCALMOVESIZE: |
321 | 0 | case TS_RAIL_ORDER_CLOAK: |
322 | 0 | case TS_RAIL_ORDER_SNAP_ARRANGE: |
323 | 0 | case TS_RAIL_ORDER_GET_APPID_RESP: |
324 | 0 | case TS_RAIL_ORDER_GET_APPID_RESP_EX: |
325 | 0 | case TS_RAIL_ORDER_ZORDER_SYNC: |
326 | 0 | case TS_RAIL_ORDER_WINDOW_CREATE_BODY: |
327 | 0 | case TS_RAIL_ORDER_WINDOW_CHANGE_BODY: |
328 | 0 | case TS_RAIL_ORDER_WINDOW_GEOMETRY_BODY: |
329 | 0 | case TS_RAIL_ORDER_WINDOW_ICON_BODY: |
330 | 0 | proto_tree_add_item_ret_uint(tree, hf_rail_windowId, tvb, offset, 4, ENC_LITTLE_ENDIAN, &windowId); |
331 | 0 | col_append_sep_fstr(pinfo->cinfo, COL_INFO, ",", "%s|windowId=0x%x", val_to_str_const(cmdId, rdp_rail_order_vals, "Unknown RAIL command"), |
332 | 0 | windowId); |
333 | 0 | offset += 4; |
334 | 0 | break; |
335 | 0 | case TS_RAIL_ORDER_SYSPARAM: |
336 | 0 | break; |
337 | 0 | default: |
338 | 0 | col_append_sep_str(pinfo->cinfo, COL_INFO, ",", val_to_str_const(cmdId, rdp_rail_order_vals, "Unknown RAIL command")); |
339 | 0 | break; |
340 | 0 | } |
341 | | |
342 | | |
343 | | /* do the rest of the parsing */ |
344 | 0 | switch (cmdId) { |
345 | 0 | case TS_RAIL_ORDER_EXEC: |
346 | 0 | break; |
347 | 0 | case TS_RAIL_ORDER_ACTIVATE: |
348 | 0 | proto_tree_add_item(tree, hf_rail_activate_enabled, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
349 | 0 | break; |
350 | 0 | case TS_RAIL_ORDER_SYSPARAM: |
351 | 0 | if (!packetToServer) { |
352 | 0 | uint32_t serverParam; |
353 | 0 | proto_tree_add_item_ret_uint(tree, hf_rail_sysparam_server_params, tvb, offset, 4, ENC_LITTLE_ENDIAN, &serverParam); |
354 | |
|
355 | 0 | col_append_sep_fstr(pinfo->cinfo, COL_INFO, ",", "Server system parameters %s", val_to_str_const(serverParam, rdp_rail_server_system_params_vals, "<unknown server param>")); |
356 | 0 | switch(serverParam) { |
357 | 0 | case SPI_SETSCREENSAVEACTIVE: |
358 | 0 | case SPI_SETSCREENSAVESECURE: |
359 | | /* TODO */ |
360 | 0 | break; |
361 | 0 | } |
362 | 0 | } else { |
363 | 0 | uint32_t clientParam; |
364 | |
|
365 | 0 | proto_tree_add_item_ret_uint(tree, hf_rail_sysparam_client_params, tvb, offset, 4, ENC_LITTLE_ENDIAN, &clientParam); |
366 | 0 | col_append_sep_fstr(pinfo->cinfo, COL_INFO, ",", "client system parameters %s", val_to_str_const(clientParam, rdp_rail_client_system_params_vals, "<unknown client param>")); |
367 | |
|
368 | 0 | switch(clientParam) { |
369 | 0 | case SPI_SETDRAGFULLWINDOWS: |
370 | 0 | case SPI_SETKEYBOARDCUES: |
371 | 0 | case SPI_SETKEYBOARDPREF: |
372 | 0 | case SPI_SETWORKAREA: |
373 | 0 | case RAIL_SPI_DISPLAYCHANGE: |
374 | 0 | case SPI_SETMOUSEBUTTONSWAP: |
375 | 0 | case RAIL_SPI_TASKBARPOS: |
376 | 0 | case SPI_SETHIGHCONTRAST: |
377 | 0 | case SPI_SETCARETWIDTH: |
378 | 0 | case SPI_SETSTICKYKEYS: |
379 | 0 | case SPI_SETTOGGLEKEYS: |
380 | 0 | case SPI_SETFILTERKEYS: |
381 | 0 | case RAIL_SPI_DISPLAY_ANIMATIONS_ENABLED: |
382 | 0 | case RAIL_SPI_DISPLAY_ADVANCED_EFFECTS_ENABLED: |
383 | 0 | case RAIL_SPI_DISPLAY_AUTO_HIDE_SCROLLBARS: |
384 | 0 | case RAIL_SPI_DISPLAY_MESSAGE_DURATION: |
385 | 0 | case RAIL_SPI_CLOSED_CAPTION_FONT_COLOR: |
386 | 0 | case RAIL_SPI_CLOSED_CAPTION_FONT_OPACITY: |
387 | 0 | case RAIL_SPI_CLOSED_CAPTION_FONT_SIZE: |
388 | 0 | case RAIL_SPI_CLOSED_CAPTION_FONT_STYLE: |
389 | 0 | case RAIL_SPI_CLOSED_CAPTION_FONT_EDGE_EFFECT: |
390 | 0 | case RAIL_SPI_CLOSED_CAPTION_BACKGROUND_COLOR: |
391 | 0 | case RAIL_SPI_CLOSED_CAPTION_BACKGROUND_OPACITY: |
392 | 0 | case RAIL_SPI_CLOSED_CAPTION_REGION_COLOR: |
393 | 0 | case RAIL_SPI_CLOSED_CAPTION_REGION_OPACITY: |
394 | | /* TODO */ |
395 | 0 | break; |
396 | 0 | } |
397 | 0 | } |
398 | 0 | break; |
399 | 0 | case TS_RAIL_ORDER_SYSCOMMAND: |
400 | 0 | break; |
401 | 0 | case TS_RAIL_ORDER_HANDSHAKE: |
402 | 0 | proto_tree_add_item(tree, hf_rail_caps_handshake_buildNumber, tvb, offset, 4, ENC_LITTLE_ENDIAN); |
403 | 0 | break; |
404 | 0 | case TS_RAIL_ORDER_NOTIFY_EVENT: |
405 | 0 | proto_tree_add_item(tree, hf_rail_notify_iconId, tvb, offset, 4, ENC_LITTLE_ENDIAN); |
406 | 0 | offset += 4; |
407 | |
|
408 | 0 | proto_tree_add_item(tree, hf_rail_notify_message, tvb, offset, 4, ENC_LITTLE_ENDIAN); |
409 | 0 | break; |
410 | 0 | case TS_RAIL_ORDER_WINDOWMOVE: |
411 | 0 | proto_tree_add_item(tree, hf_rail_windowmove_left, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
412 | 0 | offset += 2; |
413 | 0 | proto_tree_add_item(tree, hf_rail_windowmove_top, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
414 | 0 | offset += 2; |
415 | 0 | proto_tree_add_item(tree, hf_rail_windowmove_right, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
416 | 0 | offset += 2; |
417 | 0 | proto_tree_add_item(tree, hf_rail_windowmove_bottom, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
418 | 0 | break; |
419 | 0 | case TS_RAIL_ORDER_LOCALMOVESIZE: |
420 | 0 | proto_tree_add_item(tree, hf_rail_localmovesize_isMoveSizeStart, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
421 | 0 | offset += 2; |
422 | 0 | proto_tree_add_item(tree, hf_rail_localmovesize_moveSizeType, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
423 | 0 | offset += 2; |
424 | 0 | proto_tree_add_item(tree, hf_rail_localmovesize_posX, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
425 | 0 | offset += 2; |
426 | 0 | proto_tree_add_item(tree, hf_rail_localmovesize_posY, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
427 | 0 | break; |
428 | 0 | case TS_RAIL_ORDER_MINMAXINFO: |
429 | 0 | proto_tree_add_item(tree, hf_rail_minmaxinfo_maxwidth, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
430 | 0 | offset += 2; |
431 | 0 | proto_tree_add_item(tree, hf_rail_minmaxinfo_maxheight, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
432 | 0 | offset += 2; |
433 | 0 | proto_tree_add_item(tree, hf_rail_minmaxinfo_maxPosX, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
434 | 0 | offset += 2; |
435 | 0 | proto_tree_add_item(tree, hf_rail_minmaxinfo_maxPosY, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
436 | 0 | offset += 2; |
437 | 0 | proto_tree_add_item(tree, hf_rail_minmaxinfo_minTrackWidth, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
438 | 0 | offset += 2; |
439 | 0 | proto_tree_add_item(tree, hf_rail_minmaxinfo_minTrackHeight, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
440 | 0 | offset += 2; |
441 | 0 | proto_tree_add_item(tree, hf_rail_minmaxinfo_maxTrackWidth, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
442 | 0 | offset += 2; |
443 | 0 | proto_tree_add_item(tree, hf_rail_minmaxinfo_maxTrackHeight, tvb, offset, 2, ENC_LITTLE_ENDIAN); |
444 | 0 | break; |
445 | 0 | case TS_RAIL_ORDER_CLIENTSTATUS: { |
446 | 0 | int *flags[] = { |
447 | 0 | &hf_rail_cstatus_flags_allowlocalmove, |
448 | 0 | &hf_rail_cstatus_autoreconnect, |
449 | 0 | &hf_rail_cstatus_zorder_sync, |
450 | 0 | &hf_rail_cstatus_resize_margin, |
451 | 0 | &hf_rail_cstatus_hidpi_icons, |
452 | 0 | &hf_rail_cstatus_appbar_remoting, |
453 | 0 | &hf_rail_cstatus_powerdisplay, |
454 | 0 | &hf_rail_cstatus_bidir_cloak, |
455 | 0 | &hf_rail_cstatus_suppress_icon_border, |
456 | 0 | NULL, |
457 | 0 | }; |
458 | |
|
459 | 0 | proto_tree_add_bitmask(tree, tvb, offset, hf_rail_cstatus_flags, ett_rdp_rail_clientstatus_flags, flags, ENC_LITTLE_ENDIAN); |
460 | 0 | break; |
461 | 0 | } |
462 | 0 | case TS_RAIL_ORDER_SYSMENU: |
463 | 0 | case TS_RAIL_ORDER_LANGBARINFO: |
464 | 0 | case TS_RAIL_ORDER_EXEC_RESULT: |
465 | 0 | case TS_RAIL_ORDER_GET_APPID_REQ: |
466 | 0 | case TS_RAIL_ORDER_GET_APPID_RESP: |
467 | 0 | case TS_RAIL_ORDER_TASKBARINFO: |
468 | 0 | case TS_RAIL_ORDER_LANGUAGEIMEINFO: |
469 | 0 | case TS_RAIL_ORDER_COMPARTMENTINFO: |
470 | 0 | break; |
471 | 0 | case TS_RAIL_ORDER_HANDSHAKE_EX: { |
472 | 0 | int *flags[] = { |
473 | 0 | &hf_rail_handshake_flags_hidef, |
474 | 0 | &hf_rail_handshake_flags_ex_spi, |
475 | 0 | &hf_rail_handshake_flags_snap, |
476 | 0 | &hf_rail_handshake_flags_textscale, |
477 | 0 | &hf_rail_handshake_flags_caretblink, |
478 | 0 | &hf_rail_handshake_flags_ex_spi2, |
479 | 0 | NULL, |
480 | 0 | }; |
481 | |
|
482 | 0 | proto_tree_add_item(tree, hf_rail_caps_handshake_buildNumber, tvb, offset, 4, ENC_LITTLE_ENDIAN); |
483 | 0 | offset += 4; |
484 | |
|
485 | 0 | proto_tree_add_bitmask(tree, tvb, offset, hf_rail_handshake_flags, ett_rdp_rail_handshake_flags, flags, ENC_LITTLE_ENDIAN); |
486 | 0 | break; |
487 | 0 | } |
488 | 0 | case TS_RAIL_ORDER_ZORDER_SYNC: |
489 | 0 | break; |
490 | 0 | case TS_RAIL_ORDER_CLOAK: |
491 | 0 | proto_tree_add_item(tree, hf_rail_cloak_cloaked, tvb, offset, 1, ENC_LITTLE_ENDIAN); |
492 | 0 | break; |
493 | 0 | case TS_RAIL_ORDER_POWER_DISPLAY_REQUEST: |
494 | 0 | case TS_RAIL_ORDER_SNAP_ARRANGE: |
495 | 0 | case TS_RAIL_ORDER_GET_APPID_RESP_EX: |
496 | 0 | case TS_RAIL_ORDER_TEXTSCALEINFO: |
497 | 0 | case TS_RAIL_ORDER_CARETBLINKINFO: |
498 | 0 | break; |
499 | 0 | case TS_RAIL_ORDER_ZORDER_BODY: |
500 | 0 | offset += 4 * 3; |
501 | 0 | proto_tree_add_item_ret_uint(tree, hf_rail_windowId, tvb, offset, 4, ENC_LITTLE_ENDIAN, &windowId); |
502 | 0 | col_append_fstr(pinfo->cinfo, COL_INFO, "|windowId=0x%x", windowId); |
503 | 0 | break; |
504 | 0 | default: |
505 | 0 | break; |
506 | 0 | } |
507 | | |
508 | 0 | offset = nextOffset; |
509 | 0 | return offset; |
510 | 0 | } |
511 | | |
512 | | |
513 | 15 | void proto_register_rdp_rail(void) { |
514 | 15 | static hf_register_info hf[] = { |
515 | 15 | { &hf_rail_orderType, |
516 | 15 | { "OrderType", "rdp_rail.ordertype", |
517 | 15 | FT_UINT16, BASE_HEX, VALS(rdp_rail_order_vals), 0x0, |
518 | 15 | NULL, HFILL } |
519 | 15 | }, |
520 | 15 | { &hf_rail_pduLength, |
521 | 15 | { "OrderLength", "rdp_rail.orderlength", |
522 | 15 | FT_UINT32, BASE_DEC, NULL, 0x0, |
523 | 15 | NULL, HFILL } |
524 | 15 | }, |
525 | 15 | { &hf_rail_caps_handshake_buildNumber, |
526 | 15 | { "Build number", "rdp_rail.handshake.buildNumber", |
527 | 15 | FT_UINT32, BASE_HEX, NULL, 0x0, |
528 | 15 | NULL, HFILL } |
529 | 15 | }, |
530 | 15 | { &hf_rail_windowId, |
531 | 15 | { "WindowId", "rdp_rail.windowid", |
532 | 15 | FT_UINT32, BASE_HEX, NULL, 0x0, |
533 | 15 | NULL, HFILL } |
534 | 15 | }, |
535 | 15 | { &hf_rail_windowmove_left, |
536 | 15 | { "Left", "rdp_rail.windowmove.left", |
537 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
538 | 15 | NULL, HFILL } |
539 | 15 | }, |
540 | 15 | { &hf_rail_windowmove_top, |
541 | 15 | { "Top", "rdp_rail.windowmove.top", |
542 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
543 | 15 | NULL, HFILL } |
544 | 15 | }, |
545 | 15 | { &hf_rail_windowmove_right, |
546 | 15 | { "Right", "rdp_rail.windowmove.right", |
547 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
548 | 15 | NULL, HFILL } |
549 | 15 | }, |
550 | 15 | { &hf_rail_windowmove_bottom, |
551 | 15 | { "Bottom", "rdp_rail.windowmove.bottom", |
552 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
553 | 15 | NULL, HFILL } |
554 | 15 | }, |
555 | 15 | { &hf_rail_localmovesize_isMoveSizeStart, |
556 | 15 | { "IsMoveSizeStart", "rdp_rail.localmovesize.ismovesizestart", |
557 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
558 | 15 | NULL, HFILL } |
559 | 15 | }, |
560 | 15 | { &hf_rail_localmovesize_moveSizeType, |
561 | 15 | { "Move size type", "rdp_rail.localmovesize.movesizetype", |
562 | 15 | FT_UINT16, BASE_DEC, VALS(moveSizeStart_vals), 0x0, |
563 | 15 | NULL, HFILL } |
564 | 15 | }, |
565 | 15 | { &hf_rail_localmovesize_posX, |
566 | 15 | { "PosX", "rdp_rail.localmovesize.posx", |
567 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
568 | 15 | NULL, HFILL } |
569 | 15 | }, |
570 | 15 | { &hf_rail_localmovesize_posY, |
571 | 15 | { "PosY", "rdp_rail.localmovesize.posy", |
572 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
573 | 15 | NULL, HFILL } |
574 | 15 | }, |
575 | 15 | { &hf_rail_minmaxinfo_maxwidth, |
576 | 15 | { "Max width", "rdp_rail.minmaxinfo.maxwidth", |
577 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
578 | 15 | NULL, HFILL } |
579 | 15 | }, |
580 | 15 | { &hf_rail_minmaxinfo_maxheight, |
581 | 15 | { "Max height", "rdp_rail.minmaxinfo.maxheight", |
582 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
583 | 15 | NULL, HFILL } |
584 | 15 | }, |
585 | 15 | { &hf_rail_minmaxinfo_maxPosX, |
586 | 15 | { "Max posX", "rdp_rail.minmaxinfo.maxposx", |
587 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
588 | 15 | NULL, HFILL } |
589 | 15 | }, |
590 | 15 | { &hf_rail_minmaxinfo_maxPosY, |
591 | 15 | { "Max posY", "rdp_rail.minmaxinfo.maxposy", |
592 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
593 | 15 | NULL, HFILL } |
594 | 15 | }, |
595 | 15 | { &hf_rail_minmaxinfo_minTrackWidth, |
596 | 15 | { "Min track width", "rdp_rail.minmaxinfo.mintrackwidth", |
597 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
598 | 15 | NULL, HFILL } |
599 | 15 | }, |
600 | 15 | { &hf_rail_minmaxinfo_minTrackHeight, |
601 | 15 | { "Min track height", "rdp_rail.minmaxinfo.mintrackheight", |
602 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
603 | 15 | NULL, HFILL } |
604 | 15 | }, |
605 | 15 | { &hf_rail_minmaxinfo_maxTrackWidth, |
606 | 15 | { "Max track width", "rdp_rail.minmaxinfo.maxtrackwidth", |
607 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
608 | 15 | NULL, HFILL } |
609 | 15 | }, |
610 | 15 | { &hf_rail_minmaxinfo_maxTrackHeight, |
611 | 15 | { "Max track height", "rdp_rail.minmaxinfo.maxtrackheight", |
612 | 15 | FT_UINT16, BASE_DEC, NULL, 0x0, |
613 | 15 | NULL, HFILL } |
614 | 15 | }, |
615 | 15 | { &hf_rail_cloak_cloaked, |
616 | 15 | { "Cloaked", "rdp_rail.cloak.cloaked", |
617 | 15 | FT_UINT8, BASE_DEC, NULL, 0x0, |
618 | 15 | NULL, HFILL } |
619 | 15 | }, |
620 | | |
621 | 15 | { &hf_rail_handshake_flags, |
622 | 15 | { "Flags", "rdp_rail.handshakeflags", |
623 | 15 | FT_UINT32, BASE_HEX, NULL, 0, |
624 | 15 | NULL, HFILL }}, |
625 | 15 | { &hf_rail_handshake_flags_hidef, |
626 | 15 | { "HIDEF", "rdp_rail.handshakeflags.hidef", |
627 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000001, |
628 | 15 | NULL, HFILL }}, |
629 | 15 | { &hf_rail_handshake_flags_ex_spi, |
630 | 15 | { "EXTENDED_SPI_SUPPORTED", "rdp_rail.handshakeflags.exspi", |
631 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000002, |
632 | 15 | NULL, HFILL }}, |
633 | 15 | { &hf_rail_handshake_flags_snap, |
634 | 15 | { "SNAP_ARRANGE_SUPPORTED", "rdp_rail.handshakeflags.snap", |
635 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000004, |
636 | 15 | NULL, HFILL }}, |
637 | 15 | { &hf_rail_handshake_flags_textscale, |
638 | 15 | { "TEXT_SCALE_SUPPORTED", "rdp_rail.handshakeflags.textscale", |
639 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000008, |
640 | 15 | NULL, HFILL }}, |
641 | 15 | { &hf_rail_handshake_flags_caretblink, |
642 | 15 | { "CARET_BLINK_SUPPORTED", "rdp_rail.handshakeflags.caretblink", |
643 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000010, |
644 | 15 | NULL, HFILL }}, |
645 | 15 | { &hf_rail_handshake_flags_ex_spi2, |
646 | 15 | { "EXTENDED_SPI_2_SUPPORTED", "rdp_rail.handshakeflags.exspi2", |
647 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000020, |
648 | 15 | NULL, HFILL }}, |
649 | | |
650 | 15 | { &hf_rail_cstatus_flags, |
651 | 15 | { "Flags", "rdp_rail.clientstatus.flags", |
652 | 15 | FT_UINT32, BASE_HEX, NULL, 0x0, |
653 | 15 | NULL, HFILL }}, |
654 | 15 | { &hf_rail_cstatus_flags_allowlocalmove, |
655 | 15 | { "ALLOWLOCALMOVESIZE", "rdp_rail.clientstatus.allowlocalmove", |
656 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000001, |
657 | 15 | NULL, HFILL }}, |
658 | 15 | { &hf_rail_cstatus_autoreconnect, |
659 | 15 | { "AUTORECONNECT", "rdp_rail.clientstatus.autoreconnect", |
660 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000002, |
661 | 15 | NULL, HFILL }}, |
662 | 15 | { &hf_rail_cstatus_zorder_sync, |
663 | 15 | { "ZORDER_SYNC", "rdp_rail.clientstatus.zordersync", |
664 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000004, |
665 | 15 | NULL, HFILL }}, |
666 | 15 | { &hf_rail_cstatus_resize_margin, |
667 | 15 | { "WINDOW_RESIZE_MARGIN_SUPPORTED", "rdp_rail.clientstatus.resizemargin", |
668 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000010, |
669 | 15 | NULL, HFILL }}, |
670 | 15 | { &hf_rail_cstatus_hidpi_icons, |
671 | 15 | { "HIGH_DPI_ICONS_SUPPORTED", "rdp_rail.clientstatus.highdpiicons", |
672 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000020, |
673 | 15 | NULL, HFILL }}, |
674 | 15 | { &hf_rail_cstatus_appbar_remoting, |
675 | 15 | { "APPBAR_REMOTING_SUPPORTED", "rdp_rail.clientstatus.appbarremoting", |
676 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000040, |
677 | 15 | NULL, HFILL }}, |
678 | 15 | { &hf_rail_cstatus_powerdisplay, |
679 | 15 | { "POWER_DISPLAY_REQUEST_SUPPORTED", "rdp_rail.clientstatus.powerdisplay", |
680 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000080, |
681 | 15 | NULL, HFILL }}, |
682 | 15 | { &hf_rail_cstatus_bidir_cloak, |
683 | 15 | { "BIDIRECTIONAL_CLOAK_SUPPORTED", "rdp_rail.clientstatus.bidircloak", |
684 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000200, |
685 | 15 | NULL, HFILL }}, |
686 | 15 | { &hf_rail_cstatus_suppress_icon_border, |
687 | 15 | { "SUPPRESS_ICON_ORDERS", "rdp_rail.clientstatus.suppressiconborder", |
688 | 15 | FT_UINT32, BASE_HEX, NULL, 0x00000400, |
689 | 15 | NULL, HFILL }}, |
690 | 15 | { &hf_rail_activate_enabled, |
691 | 15 | { "Enabled", "rdp_rail.activate.enabled", |
692 | 15 | FT_UINT8, BASE_DEC, NULL, 0x0, |
693 | 15 | NULL, HFILL }}, |
694 | | |
695 | 15 | { &hf_rail_notify_iconId, |
696 | 15 | { "IconId", "rdp_rail.notify.iconid", |
697 | 15 | FT_UINT32, BASE_HEX, NULL, 0x0, |
698 | 15 | NULL, HFILL }}, |
699 | 15 | { &hf_rail_notify_message, |
700 | 15 | { "Message", "rdp_rail.notify.message", |
701 | 15 | FT_UINT32, BASE_HEX, VALS(rdp_rail_notify_vals), 0x0, |
702 | 15 | NULL, HFILL }}, |
703 | | |
704 | 15 | { &hf_rail_sysparam_server_params, |
705 | 15 | { "SystemParameter", "rdp_rail.sysparam.serverparameter", |
706 | 15 | FT_UINT32, BASE_HEX, VALS(rdp_rail_server_system_params_vals), 0x0, |
707 | 15 | NULL, HFILL }}, |
708 | | |
709 | 15 | { &hf_rail_sysparam_client_params, |
710 | 15 | { "SystemParameter", "rdp_rail.sysparam.clientparameter", |
711 | 15 | FT_UINT32, BASE_HEX, VALS(rdp_rail_client_system_params_vals), 0x0, |
712 | 15 | NULL, HFILL }}, |
713 | | |
714 | | |
715 | 15 | }; |
716 | | |
717 | 15 | static int *ett[] = { |
718 | 15 | &ett_rdp_rail, |
719 | 15 | &ett_rdp_rail_handshake_flags, |
720 | 15 | &ett_rdp_rail_clientstatus_flags, |
721 | 15 | }; |
722 | | |
723 | 15 | proto_rdp_rail = proto_register_protocol("RDP Program virtual channel Protocol", "RAIL", "rdp_rail"); |
724 | | |
725 | | /* Register fields and subtrees */ |
726 | 15 | proto_register_field_array(proto_rdp_rail, hf, array_length(hf)); |
727 | 15 | proto_register_subtree_array(ett, array_length(ett)); |
728 | | |
729 | 15 | register_dissector("rdp_rail", dissect_rdp_rail, proto_rdp_rail); |
730 | 15 | } |
731 | | |
732 | 15 | void proto_reg_handoff_rdp_rail(void) { |
733 | 15 | } |