1 /* packet-dcerpc-browser.c
2 * Routines for DCERPC Browser packet disassembly
3 * Copyright 2001, Ronnie Sahlberg
5 * $Id: packet-dcerpc-browser.c,v 1.8 2002/08/28 21:00:08 jmayer Exp $
7 * Ethereal - Network traffic analyzer
8 * By Gerald Combs <gerald@ethereal.com>
9 * Copyright 1998 Gerald Combs
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 /* The IDL file for this interface can be extracted by grepping for idl
35 #include <epan/packet.h>
36 #include "packet-dcerpc.h"
37 #include "packet-dcerpc-browser.h"
38 #include "packet-dcerpc-nt.h"
41 static int proto_dcerpc_browser = -1;
42 static int hf_browser_rc = -1;
43 static int hf_browser_unknown_long = -1;
44 static int hf_browser_unknown_hyper = -1;
45 static int hf_browser_unknown_bytes = -1;
46 static int hf_browser_unknown_string = -1;
49 static gint ett_dcerpc_browser = -1;
53 dissect_browser_long_pointer(tvbuff_t *tvb, int offset,
54 packet_info *pinfo, proto_tree *tree,
59 di=pinfo->private_data;
60 offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
68 IDL [ uuid(6bffd098-a112-3610-9833-012892020162),
70 IDL implicit_handle(handle_t rpc_binding)
71 IDL ] interface browser
75 static e_uuid_t uuid_dcerpc_browser = {
76 0x6bffd098, 0xa112, 0x3610,
77 { 0x98, 0x33, 0x01, 0x28, 0x92, 0x02, 0x01, 0x62 }
80 static guint16 ver_dcerpc_browser = 0;
86 IDL [size_is(element_7)] [unique] byte *element_8;
90 dissect_browser_TYPE_4_data(tvbuff_t *tvb, int offset,
91 packet_info *pinfo, proto_tree *tree,
97 di=pinfo->private_data;
98 if(di->conformant_run){
99 /* this call is to make ethereal eat the array header for the conformant run */
100 offset =dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, NULL);
104 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
105 hf_browser_unknown_long, &len);
107 proto_tree_add_item(tree, hf_browser_unknown_bytes, tvb, offset, len,
114 dissect_browser_TYPE_4(tvbuff_t *tvb, int offset,
115 packet_info *pinfo, proto_tree *tree,
118 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
119 hf_browser_unknown_long, NULL);
121 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
122 dissect_browser_TYPE_4_data, NDR_POINTER_UNIQUE,
123 "unknown TYPE_4", -1, -1);
132 IDL [size_is(element_5)] [unique] byte *element_6;
136 dissect_browser_TYPE_3_data(tvbuff_t *tvb, int offset,
137 packet_info *pinfo, proto_tree *tree,
143 di=pinfo->private_data;
144 if(di->conformant_run){
145 /* this call is to make ethereal eat the array header for the conformant run */
146 offset =dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, NULL);
151 /* this is really the length of the encoded data */
152 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
153 hf_browser_unknown_long, &len);
154 proto_tree_add_item(tree, hf_browser_unknown_bytes, tvb, offset, len,
161 dissect_browser_TYPE_3(tvbuff_t *tvb, int offset,
162 packet_info *pinfo, proto_tree *tree,
165 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
166 hf_browser_unknown_long, NULL);
168 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
169 dissect_browser_TYPE_3_data, NDR_POINTER_UNIQUE,
170 "unknown TYPE_3", -1, -1);
178 IDL typedef [switch_type(long)] union {
179 IDL [case(100)] [unique] TYPE_3 *element_3;
180 IDL [case(101)] [unique] TYPE_4 *element_4;
184 dissect_browser_TYPE_2(tvbuff_t *tvb, int offset,
185 packet_info *pinfo, proto_tree *tree,
190 /* this is really the union switch arm */
191 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
192 hf_browser_unknown_long, &level);
198 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
199 dissect_browser_TYPE_3, NDR_POINTER_UNIQUE,
200 "unknown TYPE_3", -1, -1);
203 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
204 dissect_browser_TYPE_4, NDR_POINTER_UNIQUE,
205 "unknown TYPE_4", -1, -1);
216 IDL TYPE_2 element_2;
220 dissect_browser_TYPE_1(tvbuff_t *tvb, int offset,
221 packet_info *pinfo, proto_tree *tree,
224 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
225 hf_browser_unknown_long, NULL);
227 offset = dissect_browser_TYPE_2(tvb, offset, pinfo, tree, drep);
235 IDL long Function_00(
236 IDL [in] [unique] [string] wchar_t *element_9,
237 IDL [in] [unique] [string] wchar_t *element_10,
238 IDL [in] [unique] [string] wchar_t *element_11,
239 IDL [in,out] [ref] TYPE_1 *element_12,
240 IDL [in] long element_13,
241 IDL [out] long element_14,
242 IDL [in] long element_15,
243 IDL [in] [unique] [string] wchar_t *element_16,
244 IDL [in,out] [unique] long *element_17
248 dissect_browser_UNKNOWN_00_rqst(tvbuff_t *tvb, int offset,
249 packet_info *pinfo, proto_tree *tree,
252 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
253 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
254 "unknown string", hf_browser_unknown_string, 0);
256 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
257 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
258 "unknown string", hf_browser_unknown_string, 0);
260 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
261 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
262 "unknown string", hf_browser_unknown_string, 0);
264 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
265 dissect_browser_TYPE_1, NDR_POINTER_REF,
266 "unknown TYPE_1", -1, 0);
268 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
269 hf_browser_unknown_long, NULL);
271 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
272 hf_browser_unknown_long, NULL);
274 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
275 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
276 "unknown string", hf_browser_unknown_string, 0);
278 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
279 dissect_browser_long_pointer, NDR_POINTER_UNIQUE,
280 "unknown long", hf_browser_unknown_long, 0);
285 dissect_browser_UNKNOWN_00_reply(tvbuff_t *tvb, int offset,
286 packet_info *pinfo, proto_tree *tree,
289 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
290 dissect_browser_TYPE_1, NDR_POINTER_REF,
291 "unknown TYPE_1", -1, 0);
293 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
294 hf_browser_unknown_long, NULL);
296 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
297 dissect_browser_long_pointer, NDR_POINTER_UNIQUE,
298 "unknown long", hf_browser_unknown_long, 0);
300 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
301 hf_browser_rc, NULL);
307 IDL long Function_01(
308 IDL [in] [unique] [string] wchar_t *element_18,
309 IDL [in] long element_19,
310 IDL [in] long element_20
314 dissect_browser_UNKNOWN_01_rqst(tvbuff_t *tvb, int offset,
315 packet_info *pinfo, proto_tree *tree,
318 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
319 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
320 "unknown string", hf_browser_unknown_string, 0);
322 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
323 hf_browser_unknown_long, NULL);
325 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
326 hf_browser_unknown_long, NULL);
331 dissect_browser_UNKNOWN_01_reply(tvbuff_t *tvb, int offset,
332 packet_info *pinfo, proto_tree *tree,
335 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
336 hf_browser_rc, NULL);
343 IDL long Function_02(
344 IDL [in] [unique] [string] wchar_t *element_21,
345 IDL [in,out] [ref] TYPE_1 *element_22,
346 IDL [out] long element_23
350 dissect_browser_UNKNOWN_02_rqst(tvbuff_t *tvb, int offset,
351 packet_info *pinfo, proto_tree *tree,
354 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
355 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
356 "unknown string", hf_browser_unknown_string, 0);
358 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
359 dissect_browser_TYPE_1, NDR_POINTER_REF,
360 "unknown TYPE_1", -1, 0);
365 dissect_browser_UNKNOWN_02_reply(tvbuff_t *tvb, int offset,
366 packet_info *pinfo, proto_tree *tree,
369 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
370 hf_browser_unknown_long, NULL);
372 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
373 hf_browser_rc, NULL);
380 IDL long Function_03(
381 IDL [in] [unique] [string] wchar_t *element_24
385 dissect_browser_UNKNOWN_03_rqst(tvbuff_t *tvb, int offset,
386 packet_info *pinfo, proto_tree *tree,
389 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
390 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
391 "unknown string", hf_browser_unknown_string, 0);
396 dissect_browser_UNKNOWN_03_reply(tvbuff_t *tvb, int offset,
397 packet_info *pinfo, proto_tree *tree,
400 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
401 hf_browser_rc, NULL);
408 IDL long Function_04(
409 IDL [in] [unique] [string] wchar_t *element_25,
410 IDL [in] [string] char element_26
414 dissect_browser_UNKNOWN_04_rqst(tvbuff_t *tvb, int offset,
415 packet_info *pinfo, proto_tree *tree,
418 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
419 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
420 "unknown string", hf_browser_unknown_string, 0);
422 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
423 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
424 "unknown string", hf_browser_unknown_string, 0);
429 dissect_browser_UNKNOWN_04_reply(tvbuff_t *tvb, int offset,
430 packet_info *pinfo, proto_tree *tree,
433 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
434 hf_browser_rc, NULL);
443 IDL TYPE_6 element_27;
444 IDL TYPE_6 element_28;
445 IDL TYPE_6 element_29;
461 IDL TYPE_6 element_45;
465 IDL hyper element_46;
469 dissect_browser_TYPE_5(tvbuff_t *tvb, int offset,
470 packet_info *pinfo, proto_tree *tree,
473 offset = dissect_ndr_uint64(tvb, offset, pinfo, tree, drep,
474 hf_browser_unknown_hyper, NULL);
476 offset = dissect_ndr_uint64(tvb, offset, pinfo, tree, drep,
477 hf_browser_unknown_hyper, NULL);
479 offset = dissect_ndr_uint64(tvb, offset, pinfo, tree, drep,
480 hf_browser_unknown_hyper, NULL);
482 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
483 hf_browser_unknown_long, NULL);
485 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
486 hf_browser_unknown_long, NULL);
488 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
489 hf_browser_unknown_long, NULL);
491 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
492 hf_browser_unknown_long, NULL);
494 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
495 hf_browser_unknown_long, NULL);
497 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
498 hf_browser_unknown_long, NULL);
500 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
501 hf_browser_unknown_long, NULL);
503 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
504 hf_browser_unknown_long, NULL);
506 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
507 hf_browser_unknown_long, NULL);
509 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
510 hf_browser_unknown_long, NULL);
512 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
513 hf_browser_unknown_long, NULL);
515 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
516 hf_browser_unknown_long, NULL);
518 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
519 hf_browser_unknown_long, NULL);
521 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
522 hf_browser_unknown_long, NULL);
524 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
525 hf_browser_unknown_long, NULL);
527 offset = dissect_ndr_uint64(tvb, offset, pinfo, tree, drep,
528 hf_browser_unknown_hyper, NULL);
535 IDL long Function_05(
536 IDL [in] [unique] [string] wchar_t *element_47,
537 IDL [out] [ref] TYPE_5 **element_48
541 dissect_browser_UNKNOWN_05_rqst(tvbuff_t *tvb, int offset,
542 packet_info *pinfo, proto_tree *tree,
545 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
546 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
547 "unknown string", hf_browser_unknown_string, 0);
552 dissect_browser_UNKNOWN_05_reply(tvbuff_t *tvb, int offset,
553 packet_info *pinfo, proto_tree *tree,
556 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
557 dissect_browser_TYPE_5, NDR_POINTER_UNIQUE,
558 "unknown TYPE_5", -1, 0);
560 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
561 hf_browser_rc, NULL);
568 IDL long Function_06(
569 IDL [in] [unique] [string] wchar_t *element_49
573 dissect_browser_UNKNOWN_06_rqst(tvbuff_t *tvb, int offset,
574 packet_info *pinfo, proto_tree *tree,
577 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
578 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
579 "unknown string", hf_browser_unknown_string, 0);
584 dissect_browser_UNKNOWN_06_reply(tvbuff_t *tvb, int offset,
585 packet_info *pinfo, proto_tree *tree,
588 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
589 hf_browser_rc, NULL);
596 IDL long Function_07(
597 IDL [in] [unique] [string] wchar_t *element_49
601 dissect_browser_UNKNOWN_07_rqst(tvbuff_t *tvb, int offset,
602 packet_info *pinfo, proto_tree *tree,
605 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
606 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
607 "unknown string", hf_browser_unknown_string, 0);
612 dissect_browser_UNKNOWN_07_reply(tvbuff_t *tvb, int offset,
613 packet_info *pinfo, proto_tree *tree,
616 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
617 hf_browser_rc, NULL);
625 IDL TYPE_6 element_59;
626 IDL TYPE_6 element_60;
627 IDL TYPE_6 element_61;
631 IDL TYPE_6 element_65;
644 dissect_browser_TYPE_11(tvbuff_t *tvb, int offset,
645 packet_info *pinfo, proto_tree *tree,
648 offset = dissect_ndr_uint64(tvb, offset, pinfo, tree, drep,
649 hf_browser_unknown_hyper, NULL);
651 offset = dissect_ndr_uint64(tvb, offset, pinfo, tree, drep,
652 hf_browser_unknown_hyper, NULL);
654 offset = dissect_ndr_uint64(tvb, offset, pinfo, tree, drep,
655 hf_browser_unknown_hyper, NULL);
657 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
658 hf_browser_unknown_long, NULL);
660 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
661 hf_browser_unknown_long, NULL);
663 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
664 hf_browser_unknown_long, NULL);
666 offset = dissect_ndr_uint64(tvb, offset, pinfo, tree, drep,
667 hf_browser_unknown_hyper, NULL);
669 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
670 hf_browser_unknown_long, NULL);
672 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
673 hf_browser_unknown_long, NULL);
675 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
676 hf_browser_unknown_long, NULL);
678 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
679 hf_browser_unknown_long, NULL);
681 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
682 hf_browser_unknown_long, NULL);
684 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
685 hf_browser_unknown_long, NULL);
687 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
688 hf_browser_unknown_long, NULL);
690 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
691 hf_browser_unknown_long, NULL);
693 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
694 hf_browser_unknown_long, NULL);
702 IDL [size_is(element_57)] [unique] TYPE_11 *element_58;
706 dissect_browser_TYPE_11_array(tvbuff_t *tvb, int offset,
707 packet_info *pinfo, proto_tree *tree,
710 offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep,
711 dissect_browser_TYPE_11);
717 dissect_browser_TYPE_10(tvbuff_t *tvb, int offset,
718 packet_info *pinfo, proto_tree *tree,
721 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
722 hf_browser_unknown_long, NULL);
724 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
725 dissect_browser_TYPE_11_array, NDR_POINTER_UNIQUE,
726 "unknown TYPE_11_ARRAY", -1, 0);
735 IDL [size_is(element_55)] [unique] byte *element_56;
739 dissect_browser_TYPE_9_data(tvbuff_t *tvb, int offset,
740 packet_info *pinfo, proto_tree *tree,
746 di=pinfo->private_data;
747 if(di->conformant_run){
748 /* this call is to make ethereal eat the array header for the conformant run */
749 offset =dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, NULL);
754 /* this is really the length of the encoded data */
755 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
756 hf_browser_unknown_long, &len);
758 proto_tree_add_item(tree, hf_browser_unknown_bytes, tvb, offset, len,
765 dissect_browser_TYPE_9(tvbuff_t *tvb, int offset,
766 packet_info *pinfo, proto_tree *tree,
769 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
770 hf_browser_unknown_long, NULL);
772 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
773 dissect_browser_TYPE_9_data, NDR_POINTER_UNIQUE,
774 "unknown TYPE_9", -1, -1);
781 IDL typedef [switch_type(long)] union {
782 IDL [case(100)] [unique] TYPE_9 *element_53;
783 IDL [case(101)] [unique] TYPE_10 *element_54;
787 dissect_browser_TYPE_8(tvbuff_t *tvb, int offset,
788 packet_info *pinfo, proto_tree *tree,
793 /* this is really the union switch arm */
794 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
795 hf_browser_unknown_long, &level);
801 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
802 dissect_browser_TYPE_9, NDR_POINTER_UNIQUE,
803 "unknown TYPE_9", -1, -1);
806 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
807 dissect_browser_TYPE_10, NDR_POINTER_UNIQUE,
808 "unknown TYPE_10", -1, -1);
819 IDL TYPE_8 element_52;
823 dissect_browser_TYPE_7(tvbuff_t *tvb, int offset,
824 packet_info *pinfo, proto_tree *tree,
827 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
828 hf_browser_unknown_long, NULL);
830 offset = dissect_browser_TYPE_8(tvb, offset, pinfo, tree, drep);
837 IDL long Function_08(
838 IDL [in] [unique] [string] wchar_t *element_75,
839 IDL [in] long element_76,
840 IDL [in,out] [ref] TYPE_7 *element_77
844 dissect_browser_UNKNOWN_08_rqst(tvbuff_t *tvb, int offset,
845 packet_info *pinfo, proto_tree *tree,
848 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
849 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
850 "unknown string", hf_browser_unknown_string, 0);
852 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
853 hf_browser_unknown_long, NULL);
855 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
856 dissect_browser_TYPE_7, NDR_POINTER_REF,
857 "unknown TYPE_7", -1, 0);
862 dissect_browser_UNKNOWN_08_reply(tvbuff_t *tvb, int offset,
863 packet_info *pinfo, proto_tree *tree,
866 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
867 dissect_browser_TYPE_7, NDR_POINTER_REF,
868 "unknown TYPE_7", -1, 0);
870 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
871 hf_browser_rc, NULL);
878 IDL long Function_09(
879 IDL [in] [unique] [string] wchar_t *element_78,
880 IDL [in] [ref] [string] wchar_t *element_79,
881 IDL [in] [unique] [string] wchar_t *element_80,
882 IDL [in] long element_81
886 dissect_browser_UNKNOWN_09_rqst(tvbuff_t *tvb, int offset,
887 packet_info *pinfo, proto_tree *tree,
890 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
891 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
892 "unknown string", hf_browser_unknown_string, 0);
894 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
895 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_REF,
896 "unknown string", hf_browser_unknown_string, 0);
898 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
899 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
900 "unknown string", hf_browser_unknown_string, 0);
902 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
903 hf_browser_unknown_long, NULL);
908 dissect_browser_UNKNOWN_09_reply(tvbuff_t *tvb, int offset,
909 packet_info *pinfo, proto_tree *tree,
912 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
913 hf_browser_rc, NULL);
924 IDL [size_is(element_82)] [unique] byte *element_83;
928 dissect_browser_TYPE_12_data(tvbuff_t *tvb, int offset,
929 packet_info *pinfo, proto_tree *tree,
935 di=pinfo->private_data;
936 if(di->conformant_run){
937 /* this call is to make ethereal eat the array header for the conformant run */
938 offset =dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, NULL);
943 /* this is really the length of the encoded data */
944 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
945 hf_browser_unknown_long, &len);
947 proto_tree_add_item(tree, hf_browser_unknown_bytes, tvb, offset, len,
954 dissect_browser_TYPE_12(tvbuff_t *tvb, int offset,
955 packet_info *pinfo, proto_tree *tree,
958 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
959 hf_browser_unknown_long, NULL);
961 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
962 dissect_browser_TYPE_12_data, NDR_POINTER_UNIQUE,
963 "unknown TYPE_12", -1, -1);
970 IDL long Function_0a(
971 IDL [in] [unique] [string] wchar_t *element_84,
972 IDL [in,out] [ref] TYPE_12 *element_85
976 dissect_browser_UNKNOWN_0a_rqst(tvbuff_t *tvb, int offset,
977 packet_info *pinfo, proto_tree *tree,
980 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
981 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
982 "unknown string", hf_browser_unknown_string, 0);
984 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
985 dissect_browser_TYPE_12, NDR_POINTER_REF,
986 "unknown TYPE_12", -1, 0);
991 dissect_browser_UNKNOWN_0a_reply(tvbuff_t *tvb, int offset,
992 packet_info *pinfo, proto_tree *tree,
995 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
996 dissect_browser_TYPE_12, NDR_POINTER_REF,
997 "unknown TYPE_12", -1, 0);
999 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
1000 hf_browser_rc, NULL);
1007 IDL long Function_0b(
1008 IDL [in] [unique] [string] wchar_t *element_86,
1009 IDL [in] [unique] [string] wchar_t *element_87,
1010 IDL [in] [unique] [string] wchar_t *element_88,
1011 IDL [in,out] [ref] TYPE_1 *element_89,
1012 IDL [in] long element_90,
1013 IDL [out] long element_91,
1014 IDL [in] long element_92,
1015 IDL [in] [unique] [string] wchar_t *element_93,
1016 IDL [in] [unique] [string] wchar_t *element_94
1020 dissect_browser_UNKNOWN_0b_rqst(tvbuff_t *tvb, int offset,
1021 packet_info *pinfo, proto_tree *tree,
1024 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
1025 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
1026 "unknown string", hf_browser_unknown_string, 0);
1028 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
1029 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
1030 "unknown string", hf_browser_unknown_string, 0);
1032 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
1033 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
1034 "unknown string", hf_browser_unknown_string, 0);
1036 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
1037 dissect_browser_TYPE_1, NDR_POINTER_REF,
1038 "unknown TYPE_1", -1, 0);
1040 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
1041 hf_browser_unknown_long, NULL);
1043 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
1044 hf_browser_unknown_long, NULL);
1046 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
1047 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
1048 "unknown string", hf_browser_unknown_string, 0);
1050 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
1051 dissect_ndr_nt_UNICODE_STRING_str, NDR_POINTER_UNIQUE,
1052 "unknown string", hf_browser_unknown_string, 0);
1057 dissect_browser_UNKNOWN_0b_reply(tvbuff_t *tvb, int offset,
1058 packet_info *pinfo, proto_tree *tree,
1061 offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep,
1062 dissect_browser_TYPE_1, NDR_POINTER_REF,
1063 "unknown TYPE_1", -1, 0);
1065 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
1066 hf_browser_unknown_long, NULL);
1068 offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
1069 hf_browser_rc, NULL);
1079 static dcerpc_sub_dissector dcerpc_browser_dissectors[] = {
1080 { BROWSER_UNKNOWN_00, "BROWSER_UNKNOWN_00",
1081 dissect_browser_UNKNOWN_00_rqst,
1082 dissect_browser_UNKNOWN_00_reply },
1083 { BROWSER_UNKNOWN_01, "BROWSER_UNKNOWN_01",
1084 dissect_browser_UNKNOWN_01_rqst,
1085 dissect_browser_UNKNOWN_01_reply },
1086 { BROWSER_UNKNOWN_02, "BROWSER_UNKNOWN_02",
1087 dissect_browser_UNKNOWN_02_rqst,
1088 dissect_browser_UNKNOWN_02_reply },
1089 { BROWSER_UNKNOWN_03, "BROWSER_UNKNOWN_03",
1090 dissect_browser_UNKNOWN_03_rqst,
1091 dissect_browser_UNKNOWN_03_reply },
1092 { BROWSER_UNKNOWN_04, "BROWSER_UNKNOWN_04",
1093 dissect_browser_UNKNOWN_04_rqst,
1094 dissect_browser_UNKNOWN_04_reply },
1095 { BROWSER_UNKNOWN_05, "BROWSER_UNKNOWN_05",
1096 dissect_browser_UNKNOWN_05_rqst,
1097 dissect_browser_UNKNOWN_05_reply },
1098 { BROWSER_UNKNOWN_06, "BROWSER_UNKNOWN_06",
1099 dissect_browser_UNKNOWN_06_rqst,
1100 dissect_browser_UNKNOWN_06_reply },
1101 { BROWSER_UNKNOWN_07, "BROWSER_UNKNOWN_07",
1102 dissect_browser_UNKNOWN_07_rqst,
1103 dissect_browser_UNKNOWN_07_reply },
1104 { BROWSER_UNKNOWN_08, "BROWSER_UNKNOWN_08",
1105 dissect_browser_UNKNOWN_08_rqst,
1106 dissect_browser_UNKNOWN_08_reply },
1107 { BROWSER_UNKNOWN_09, "BROWSER_UNKNOWN_09",
1108 dissect_browser_UNKNOWN_09_rqst,
1109 dissect_browser_UNKNOWN_09_reply },
1110 { BROWSER_UNKNOWN_0a, "BROWSER_UNKNOWN_0a",
1111 dissect_browser_UNKNOWN_0a_rqst,
1112 dissect_browser_UNKNOWN_0a_reply },
1113 { BROWSER_UNKNOWN_0b, "BROWSER_UNKNOWN_0b",
1114 dissect_browser_UNKNOWN_0b_rqst,
1115 dissect_browser_UNKNOWN_0b_reply },
1117 {0, NULL, NULL, NULL }
1121 proto_register_dcerpc_browser(void)
1123 static hf_register_info hf[] = {
1125 "Return code", "rpc_browser.rc", FT_UINT32, BASE_HEX,
1126 VALS(NT_errors), 0x0, "Browser return code", HFILL }},
1128 { &hf_browser_unknown_long, {
1129 "Unknown long", "rpc_browser.unknown.long", FT_UINT32, BASE_HEX,
1130 NULL, 0x0, "Unknown long. If you know what this is, contact ethereal developers.", HFILL }},
1132 { &hf_browser_unknown_hyper, {
1133 "Unknown hyper", "rpc_browser.unknown.hyper", FT_UINT64, BASE_HEX,
1134 NULL, 0x0, "Unknown hyper. If you know what this is, contact ethereal developers.", HFILL }},
1136 { &hf_browser_unknown_bytes, {
1137 "Unknown bytes", "rpc_browser.unknown.bytes", FT_BYTES, BASE_HEX,
1138 NULL, 0x0, "Unknown bytes. If you know what this is, contact ethereal developers.", HFILL }},
1140 { &hf_browser_unknown_string, {
1141 "Unknown string", "rpc_browser.unknown.string", FT_STRING, BASE_HEX,
1142 NULL, 0x0, "Unknown string. If you know what this is, contact ethereal developers.", HFILL }}
1145 static gint *ett[] = {
1149 proto_dcerpc_browser = proto_register_protocol(
1150 "RPC Browser", "RPC_BROWSER", "rpc_browser");
1152 proto_register_field_array(proto_dcerpc_browser, hf,
1154 proto_register_subtree_array(ett, array_length(ett));
1158 proto_reg_handoff_dcerpc_browser(void)
1160 /* Register protocol as dcerpc */
1162 dcerpc_init_uuid(proto_dcerpc_browser, ett_dcerpc_browser,
1163 &uuid_dcerpc_browser, ver_dcerpc_browser,
1164 dcerpc_browser_dissectors, -1);