regen pidl all: rm epan/dissectors/pidl/*-stamp; pushd epan/dissectors/pidl/ && make...
[wireshark-sm.git] / epan / dissectors / packet-dcerpc-mdssvc.c
blobc9b8dac872c07cb80d655de300712be3685e1744
1 /* DO NOT EDIT
2 This file was automatically generated by Pidl
3 from mdssvc.idl and mdssvc.cnf.
5 Pidl is a perl based IDL compiler for DCE/RPC idl files.
6 It is maintained by the Samba team, not the Wireshark team.
7 Instructions on how to download and install Pidl can be
8 found at https://wiki.wireshark.org/Pidl
9 */
12 #include "config.h"
13 #include <string.h>
14 #include <wsutil/array.h>
15 #include <epan/packet.h>
16 #include <epan/tfs.h>
18 #include "packet-dcerpc.h"
19 #include "packet-dcerpc-nt.h"
20 #include "packet-windows-common.h"
21 #include "packet-dcerpc-mdssvc.h"
22 void proto_register_dcerpc_mdssvc(void);
23 void proto_reg_handoff_dcerpc_mdssvc(void);
25 /* Ett declarations */
26 static int ett_dcerpc_mdssvc;
27 static int ett_mdssvc_mdssvc_blob;
30 /* Header field declarations */
31 static int hf_mdssvc_mdssvc_blob_length;
32 static int hf_mdssvc_mdssvc_blob_size;
33 static int hf_mdssvc_mdssvc_blob_spotlight_blob;
34 static int hf_mdssvc_mdssvc_close_device_id;
35 static int hf_mdssvc_mdssvc_close_in_handle;
36 static int hf_mdssvc_mdssvc_close_out_handle;
37 static int hf_mdssvc_mdssvc_close_status;
38 static int hf_mdssvc_mdssvc_close_unkn1;
39 static int hf_mdssvc_mdssvc_close_unkn2;
40 static int hf_mdssvc_mdssvc_close_unkn3;
41 static int hf_mdssvc_mdssvc_cmd_device_id;
42 static int hf_mdssvc_mdssvc_cmd_flags;
43 static int hf_mdssvc_mdssvc_cmd_fragment;
44 static int hf_mdssvc_mdssvc_cmd_handle;
45 static int hf_mdssvc_mdssvc_cmd_max_fragment_size1;
46 static int hf_mdssvc_mdssvc_cmd_max_fragment_size2;
47 static int hf_mdssvc_mdssvc_cmd_request_blob;
48 static int hf_mdssvc_mdssvc_cmd_response_blob;
49 static int hf_mdssvc_mdssvc_cmd_unkn1;
50 static int hf_mdssvc_mdssvc_cmd_unkn3;
51 static int hf_mdssvc_mdssvc_cmd_unkn4;
52 static int hf_mdssvc_mdssvc_cmd_unkn5;
53 static int hf_mdssvc_mdssvc_cmd_unkn6;
54 static int hf_mdssvc_mdssvc_cmd_unkn7;
55 static int hf_mdssvc_mdssvc_cmd_unkn8;
56 static int hf_mdssvc_mdssvc_cmd_unkn9;
57 static int hf_mdssvc_mdssvc_open_device_id;
58 static int hf_mdssvc_mdssvc_open_handle;
59 static int hf_mdssvc_mdssvc_open_share_mount_path;
60 static int hf_mdssvc_mdssvc_open_share_name;
61 static int hf_mdssvc_mdssvc_open_share_path;
62 static int hf_mdssvc_mdssvc_open_unkn2;
63 static int hf_mdssvc_mdssvc_open_unkn3;
64 static int hf_mdssvc_mdssvc_unknown1_device_id;
65 static int hf_mdssvc_mdssvc_unknown1_flags;
66 static int hf_mdssvc_mdssvc_unknown1_gid;
67 static int hf_mdssvc_mdssvc_unknown1_handle;
68 static int hf_mdssvc_mdssvc_unknown1_status;
69 static int hf_mdssvc_mdssvc_unknown1_uid;
70 static int hf_mdssvc_mdssvc_unknown1_unkn1;
71 static int hf_mdssvc_mdssvc_unknown1_unkn3;
72 static int hf_mdssvc_mdssvc_unknown1_unkn4;
73 static int hf_mdssvc_mdssvc_unknown1_unkn7;
74 static int hf_mdssvc_opnum;
76 static int proto_dcerpc_mdssvc;
77 /* Version information */
80 static e_guid_t uuid_dcerpc_mdssvc = {
81 0x885d85fb, 0xc754, 0x4062,
82 { 0xa0, 0xe7, 0x68, 0x72, 0xce, 0x00, 0x64, 0xf4 }
84 static uint16_t ver_dcerpc_mdssvc = 2;
86 static int mdssvc_dissect_element_blob_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
87 static int mdssvc_dissect_element_blob_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
88 static int mdssvc_dissect_element_blob_spotlight_blob(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
89 static int mdssvc_dissect_element_open_device_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
90 static int mdssvc_dissect_element_open_device_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
91 static int mdssvc_dissect_element_open_unkn2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
92 static int mdssvc_dissect_element_open_unkn2_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
93 static int mdssvc_dissect_element_open_unkn3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
94 static int mdssvc_dissect_element_open_unkn3_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
95 static int mdssvc_dissect_element_open_share_mount_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
96 static int mdssvc_dissect_element_open_share_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
97 static int mdssvc_dissect_element_open_share_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
98 static int mdssvc_dissect_element_open_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
99 static int mdssvc_dissect_element_open_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
100 static int mdssvc_dissect_element_unknown1_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
101 static int mdssvc_dissect_element_unknown1_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
102 static int mdssvc_dissect_element_unknown1_unkn1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
103 static int mdssvc_dissect_element_unknown1_device_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
104 static int mdssvc_dissect_element_unknown1_unkn3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
105 static int mdssvc_dissect_element_unknown1_unkn4(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
106 static int mdssvc_dissect_element_unknown1_uid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
107 static int mdssvc_dissect_element_unknown1_gid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
108 static int mdssvc_dissect_element_unknown1_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
109 static int mdssvc_dissect_element_unknown1_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
110 static int mdssvc_dissect_element_unknown1_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
111 static int mdssvc_dissect_element_unknown1_flags_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
112 static int mdssvc_dissect_element_unknown1_unkn7(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
113 static int mdssvc_dissect_element_unknown1_unkn7_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
114 static int mdssvc_dissect_element_cmd_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
115 static int mdssvc_dissect_element_cmd_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
116 static int mdssvc_dissect_element_cmd_unkn1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
117 static int mdssvc_dissect_element_cmd_device_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
118 static int mdssvc_dissect_element_cmd_unkn3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
119 static int mdssvc_dissect_element_cmd_unkn4(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
120 static int mdssvc_dissect_element_cmd_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
121 static int mdssvc_dissect_element_cmd_request_blob(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
122 static int mdssvc_dissect_element_cmd_unkn5(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
123 static int mdssvc_dissect_element_cmd_max_fragment_size1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
124 static int mdssvc_dissect_element_cmd_unkn6(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
125 static int mdssvc_dissect_element_cmd_max_fragment_size2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
126 static int mdssvc_dissect_element_cmd_unkn7(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
127 static int mdssvc_dissect_element_cmd_unkn8(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
128 static int mdssvc_dissect_element_cmd_fragment(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
129 static int mdssvc_dissect_element_cmd_fragment_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
130 static int mdssvc_dissect_element_cmd_response_blob(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
131 static int mdssvc_dissect_element_cmd_response_blob_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
132 static int mdssvc_dissect_element_cmd_unkn9(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
133 static int mdssvc_dissect_element_cmd_unkn9_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
134 static int mdssvc_dissect_element_close_in_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
135 static int mdssvc_dissect_element_close_in_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
136 static int mdssvc_dissect_element_close_unkn1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
137 static int mdssvc_dissect_element_close_device_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
138 static int mdssvc_dissect_element_close_unkn2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
139 static int mdssvc_dissect_element_close_unkn3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
140 static int mdssvc_dissect_element_close_out_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
141 static int mdssvc_dissect_element_close_out_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
142 static int mdssvc_dissect_element_close_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
143 static int mdssvc_dissect_element_close_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_);
144 static int
145 mdssvc_dissect_element_blob_spotlight_blob(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, uint8_t *drep _U_)
147 tvbuff_t *spotlight_tvb;
148 dissector_handle_t spotlight_handle;
149 if (di->conformant_run) {
150 return offset;
152 spotlight_handle = find_dissector("afp_spotlight");
153 if (spotlight_handle)
155 spotlight_tvb = tvb_new_subset_remaining(tvb, offset + 16);
156 return (offset + 16 + call_dissector(spotlight_handle, spotlight_tvb, pinfo, tree));
158 return offset;
162 /* IDL: struct { */
163 /* IDL: uint32 length; */
164 /* IDL: uint32 size; */
165 /* IDL: [length_is(length)] [size_is(size)] [unique(1)] uint8 *spotlight_blob; */
166 /* IDL: } */
168 static int
169 mdssvc_dissect_element_blob_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
171 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_blob_length, 0);
173 return offset;
176 static int
177 mdssvc_dissect_element_blob_size(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
179 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_blob_size, 0);
181 return offset;
185 mdssvc_dissect_struct_blob(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_, int hf_index _U_, uint32_t param _U_)
187 proto_item *item = NULL;
188 proto_tree *tree = NULL;
189 int old_offset;
191 ALIGN_TO_5_BYTES;
193 old_offset = offset;
195 if (parent_tree) {
196 item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA);
197 tree = proto_item_add_subtree(item, ett_mdssvc_mdssvc_blob);
200 offset = mdssvc_dissect_element_blob_length(tvb, offset, pinfo, tree, di, drep);
202 offset = mdssvc_dissect_element_blob_size(tvb, offset, pinfo, tree, di, drep);
204 offset = mdssvc_dissect_element_blob_spotlight_blob(tvb, offset, pinfo, tree, di, drep);
207 proto_item_set_len(item, offset-old_offset);
210 if (di->call_data->flags & DCERPC_IS_NDR64) {
211 ALIGN_TO_5_BYTES;
214 return offset;
217 static int
218 mdssvc_dissect_element_open_device_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
220 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_open_device_id_, NDR_POINTER_REF, "Pointer to Device Id (uint32)",hf_mdssvc_mdssvc_open_device_id);
222 return offset;
225 static int
226 mdssvc_dissect_element_open_device_id_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
228 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_open_device_id, 0);
230 return offset;
233 static int
234 mdssvc_dissect_element_open_unkn2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
236 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_open_unkn2_, NDR_POINTER_REF, "Pointer to Unkn2 (uint32)",hf_mdssvc_mdssvc_open_unkn2);
238 return offset;
241 static int
242 mdssvc_dissect_element_open_unkn2_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
244 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_open_unkn2, 0);
246 return offset;
249 static int
250 mdssvc_dissect_element_open_unkn3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
252 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_open_unkn3_, NDR_POINTER_REF, "Pointer to Unkn3 (uint32)",hf_mdssvc_mdssvc_open_unkn3);
254 return offset;
257 static int
258 mdssvc_dissect_element_open_unkn3_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
260 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_open_unkn3, 0);
262 return offset;
265 static int
266 mdssvc_dissect_element_open_share_mount_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
268 char *data = NULL;
269 struct ndr_generic_array nga = { .is_conformant = false, };
271 offset = dissect_ndr_conformant_array_hdr(tvb, offset, pinfo, tree, di, drep, &nga);
273 offset = dissect_ndr_varying_array_hdr(tvb, offset, pinfo, tree, di, drep, &nga);
274 offset = dissect_ndr_generic_array_string(tvb, offset, pinfo, tree, di, drep, sizeof(uint8_t), hf_mdssvc_mdssvc_open_share_mount_path, false, &nga, &data);
275 proto_item_append_text(tree, ": %s", data);
277 return offset;
280 static int
281 mdssvc_dissect_element_open_share_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
283 char *data = NULL;
284 struct ndr_generic_array nga = { .is_conformant = false, };
286 offset = dissect_ndr_conformant_array_hdr(tvb, offset, pinfo, tree, di, drep, &nga);
288 offset = dissect_ndr_varying_array_hdr(tvb, offset, pinfo, tree, di, drep, &nga);
289 offset = dissect_ndr_generic_array_string(tvb, offset, pinfo, tree, di, drep, sizeof(uint8_t), hf_mdssvc_mdssvc_open_share_name, false, &nga, &data);
290 proto_item_append_text(tree, ": %s", data);
292 return offset;
295 static int
296 mdssvc_dissect_element_open_share_path(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
298 char *data = NULL;
299 struct ndr_generic_array nga = { .is_conformant = false, };
301 offset = dissect_ndr_conformant_array_hdr(tvb, offset, pinfo, tree, di, drep, &nga);
303 offset = dissect_ndr_varying_array_hdr(tvb, offset, pinfo, tree, di, drep, &nga);
304 offset = dissect_ndr_generic_array_string(tvb, offset, pinfo, tree, di, drep, sizeof(uint8_t), hf_mdssvc_mdssvc_open_share_path, false, &nga, &data);
305 proto_item_append_text(tree, ": %s", data);
307 return offset;
310 static int
311 mdssvc_dissect_element_open_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
313 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_open_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_mdssvc_mdssvc_open_handle);
315 return offset;
318 static int
319 mdssvc_dissect_element_open_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
321 offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_open_handle, 0);
323 return offset;
326 /* IDL: void mdssvc_open( */
327 /* IDL: [in] [out] [ref] uint32 *device_id, */
328 /* IDL: [in] [out] [ref] uint32 *unkn2, */
329 /* IDL: [in] [out] [ref] uint32 *unkn3, */
330 /* IDL: [charset(UTF8)] [in] [size_is(1025)] uint8 share_mount_path[*], */
331 /* IDL: [charset(UTF8)] [in] [size_is(1025)] uint8 share_name[*], */
332 /* IDL: [charset(UTF8)] [out] [size_is(1025)] uint8 share_path[*], */
333 /* IDL: [out] [ref] policy_handle *handle */
334 /* IDL: ); */
336 static int
337 mdssvc_dissect_open_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
339 di->dcerpc_procedure_name="open";
340 offset = mdssvc_dissect_element_open_device_id(tvb, offset, pinfo, tree, di, drep);
341 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
343 offset = mdssvc_dissect_element_open_unkn2(tvb, offset, pinfo, tree, di, drep);
344 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
346 offset = mdssvc_dissect_element_open_unkn3(tvb, offset, pinfo, tree, di, drep);
347 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
349 offset = mdssvc_dissect_element_open_share_path(tvb, offset, pinfo, tree, di, drep);
350 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
352 offset = mdssvc_dissect_element_open_handle(tvb, offset, pinfo, tree, di, drep);
353 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
355 return offset;
358 static int
359 mdssvc_dissect_open_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
361 di->dcerpc_procedure_name="open";
362 offset = mdssvc_dissect_element_open_device_id(tvb, offset, pinfo, tree, di, drep);
363 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
364 offset = mdssvc_dissect_element_open_unkn2(tvb, offset, pinfo, tree, di, drep);
365 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
366 offset = mdssvc_dissect_element_open_unkn3(tvb, offset, pinfo, tree, di, drep);
367 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
368 offset = mdssvc_dissect_element_open_share_mount_path(tvb, offset, pinfo, tree, di, drep);
369 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
370 offset = mdssvc_dissect_element_open_share_name(tvb, offset, pinfo, tree, di, drep);
371 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
372 return offset;
375 static int
376 mdssvc_dissect_element_unknown1_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
378 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_unknown1_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_mdssvc_mdssvc_unknown1_handle);
380 return offset;
383 static int
384 mdssvc_dissect_element_unknown1_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
386 offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_unknown1_handle, 0);
388 return offset;
391 static int
392 mdssvc_dissect_element_unknown1_unkn1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
394 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_unknown1_unkn1, 0);
396 return offset;
399 static int
400 mdssvc_dissect_element_unknown1_device_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
402 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_unknown1_device_id, 0);
404 return offset;
407 static int
408 mdssvc_dissect_element_unknown1_unkn3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
410 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_unknown1_unkn3, 0);
412 return offset;
415 static int
416 mdssvc_dissect_element_unknown1_unkn4(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
418 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_unknown1_unkn4, 0);
420 return offset;
423 static int
424 mdssvc_dissect_element_unknown1_uid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
426 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_unknown1_uid, 0);
428 return offset;
431 static int
432 mdssvc_dissect_element_unknown1_gid(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
434 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_unknown1_gid, 0);
436 return offset;
439 static int
440 mdssvc_dissect_element_unknown1_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
442 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_unknown1_status_, NDR_POINTER_REF, "Pointer to Status (uint32)",hf_mdssvc_mdssvc_unknown1_status);
444 return offset;
447 static int
448 mdssvc_dissect_element_unknown1_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
450 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_unknown1_status, 0);
452 return offset;
455 static int
456 mdssvc_dissect_element_unknown1_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
458 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_unknown1_flags_, NDR_POINTER_REF, "Pointer to Flags (uint32)",hf_mdssvc_mdssvc_unknown1_flags);
460 return offset;
463 static int
464 mdssvc_dissect_element_unknown1_flags_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
466 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_unknown1_flags, 0);
468 return offset;
471 static int
472 mdssvc_dissect_element_unknown1_unkn7(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
474 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_unknown1_unkn7_, NDR_POINTER_REF, "Pointer to Unkn7 (uint32)",hf_mdssvc_mdssvc_unknown1_unkn7);
476 return offset;
479 static int
480 mdssvc_dissect_element_unknown1_unkn7_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
482 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_unknown1_unkn7, 0);
484 return offset;
487 /* IDL: void mdssvc_unknown1( */
488 /* IDL: [in] [ref] policy_handle *handle, */
489 /* IDL: [in] uint32 unkn1, */
490 /* IDL: [in] uint32 device_id, */
491 /* IDL: [in] uint32 unkn3, */
492 /* IDL: [in] uint32 unkn4, */
493 /* IDL: [in] uint32 uid, */
494 /* IDL: [in] uint32 gid, */
495 /* IDL: [out] [ref] uint32 *status, */
496 /* IDL: [out] [ref] uint32 *flags, */
497 /* IDL: [out] [ref] uint32 *unkn7 */
498 /* IDL: ); */
500 static int
501 mdssvc_dissect_unknown1_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
503 di->dcerpc_procedure_name="unknown1";
504 offset = mdssvc_dissect_element_unknown1_status(tvb, offset, pinfo, tree, di, drep);
505 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
507 offset = mdssvc_dissect_element_unknown1_flags(tvb, offset, pinfo, tree, di, drep);
508 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
510 offset = mdssvc_dissect_element_unknown1_unkn7(tvb, offset, pinfo, tree, di, drep);
511 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
513 return offset;
516 static int
517 mdssvc_dissect_unknown1_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
519 di->dcerpc_procedure_name="unknown1";
520 offset = mdssvc_dissect_element_unknown1_handle(tvb, offset, pinfo, tree, di, drep);
521 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
522 offset = mdssvc_dissect_element_unknown1_unkn1(tvb, offset, pinfo, tree, di, drep);
523 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
524 offset = mdssvc_dissect_element_unknown1_device_id(tvb, offset, pinfo, tree, di, drep);
525 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
526 offset = mdssvc_dissect_element_unknown1_unkn3(tvb, offset, pinfo, tree, di, drep);
527 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
528 offset = mdssvc_dissect_element_unknown1_unkn4(tvb, offset, pinfo, tree, di, drep);
529 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
530 offset = mdssvc_dissect_element_unknown1_uid(tvb, offset, pinfo, tree, di, drep);
531 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
532 offset = mdssvc_dissect_element_unknown1_gid(tvb, offset, pinfo, tree, di, drep);
533 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
534 return offset;
537 static int
538 mdssvc_dissect_element_cmd_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
540 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_cmd_handle_, NDR_POINTER_REF, "Pointer to Handle (policy_handle)",hf_mdssvc_mdssvc_cmd_handle);
542 return offset;
545 static int
546 mdssvc_dissect_element_cmd_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
548 offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_cmd_handle, 0);
550 return offset;
553 static int
554 mdssvc_dissect_element_cmd_unkn1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
556 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_cmd_unkn1, 0);
558 return offset;
561 static int
562 mdssvc_dissect_element_cmd_device_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
564 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_cmd_device_id, 0);
566 return offset;
569 static int
570 mdssvc_dissect_element_cmd_unkn3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
572 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_cmd_unkn3, 0);
574 return offset;
577 static int
578 mdssvc_dissect_element_cmd_unkn4(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
580 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_cmd_unkn4, 0);
582 return offset;
585 static int
586 mdssvc_dissect_element_cmd_flags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
588 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_cmd_flags, 0);
590 return offset;
593 static int
594 mdssvc_dissect_element_cmd_request_blob(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
596 offset = mdssvc_dissect_struct_blob(tvb,offset,pinfo,tree,di,drep,hf_mdssvc_mdssvc_cmd_request_blob,0);
598 return offset;
601 static int
602 mdssvc_dissect_element_cmd_unkn5(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
604 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_cmd_unkn5, 0);
606 return offset;
609 static int
610 mdssvc_dissect_element_cmd_max_fragment_size1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
612 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_cmd_max_fragment_size1, 0);
614 return offset;
617 static int
618 mdssvc_dissect_element_cmd_unkn6(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
620 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_cmd_unkn6, 0);
622 return offset;
625 static int
626 mdssvc_dissect_element_cmd_max_fragment_size2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
628 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_cmd_max_fragment_size2, 0);
630 return offset;
633 static int
634 mdssvc_dissect_element_cmd_unkn7(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
636 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_cmd_unkn7, 0);
638 return offset;
641 static int
642 mdssvc_dissect_element_cmd_unkn8(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
644 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_cmd_unkn8, 0);
646 return offset;
649 static int
650 mdssvc_dissect_element_cmd_fragment(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
652 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_cmd_fragment_, NDR_POINTER_REF, "Pointer to Fragment (uint32)",hf_mdssvc_mdssvc_cmd_fragment);
654 return offset;
657 static int
658 mdssvc_dissect_element_cmd_fragment_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
660 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_cmd_fragment, 0);
662 return offset;
665 static int
666 mdssvc_dissect_element_cmd_response_blob(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
668 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_cmd_response_blob_, NDR_POINTER_REF, "Pointer to Response Blob (mdssvc_blob)",hf_mdssvc_mdssvc_cmd_response_blob);
670 return offset;
673 static int
674 mdssvc_dissect_element_cmd_response_blob_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
676 offset = mdssvc_dissect_struct_blob(tvb,offset,pinfo,tree,di,drep,hf_mdssvc_mdssvc_cmd_response_blob,0);
678 return offset;
681 static int
682 mdssvc_dissect_element_cmd_unkn9(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
684 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_cmd_unkn9_, NDR_POINTER_REF, "Pointer to Unkn9 (uint32)",hf_mdssvc_mdssvc_cmd_unkn9);
686 return offset;
689 static int
690 mdssvc_dissect_element_cmd_unkn9_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
692 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_cmd_unkn9, 0);
694 return offset;
697 /* IDL: void mdssvc_cmd( */
698 /* IDL: [in] [ref] policy_handle *handle, */
699 /* IDL: [in] uint32 unkn1, */
700 /* IDL: [in] uint32 device_id, */
701 /* IDL: [in] uint32 unkn3, */
702 /* IDL: [in] uint32 unkn4, */
703 /* IDL: [in] uint32 flags, */
704 /* IDL: [in] mdssvc_blob request_blob, */
705 /* IDL: [in] uint32 unkn5, */
706 /* IDL: [in] uint32 max_fragment_size1, */
707 /* IDL: [in] uint32 unkn6, */
708 /* IDL: [in] uint32 max_fragment_size2, */
709 /* IDL: [in] uint32 unkn7, */
710 /* IDL: [in] uint32 unkn8, */
711 /* IDL: [out] [ref] uint32 *fragment, */
712 /* IDL: [out] [ref] mdssvc_blob *response_blob, */
713 /* IDL: [out] [ref] uint32 *unkn9 */
714 /* IDL: ); */
716 static int
717 mdssvc_dissect_cmd_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
719 di->dcerpc_procedure_name="cmd";
720 offset = mdssvc_dissect_element_cmd_fragment(tvb, offset, pinfo, tree, di, drep);
721 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
723 offset = mdssvc_dissect_element_cmd_response_blob(tvb, offset, pinfo, tree, di, drep);
724 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
726 offset = mdssvc_dissect_element_cmd_unkn9(tvb, offset, pinfo, tree, di, drep);
727 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
729 return offset;
732 static int
733 mdssvc_dissect_cmd_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
735 di->dcerpc_procedure_name="cmd";
736 offset = mdssvc_dissect_element_cmd_handle(tvb, offset, pinfo, tree, di, drep);
737 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
738 offset = mdssvc_dissect_element_cmd_unkn1(tvb, offset, pinfo, tree, di, drep);
739 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
740 offset = mdssvc_dissect_element_cmd_device_id(tvb, offset, pinfo, tree, di, drep);
741 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
742 offset = mdssvc_dissect_element_cmd_unkn3(tvb, offset, pinfo, tree, di, drep);
743 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
744 offset = mdssvc_dissect_element_cmd_unkn4(tvb, offset, pinfo, tree, di, drep);
745 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
746 offset = mdssvc_dissect_element_cmd_flags(tvb, offset, pinfo, tree, di, drep);
747 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
748 offset = mdssvc_dissect_element_cmd_request_blob(tvb, offset, pinfo, tree, di, drep);
749 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
750 offset = mdssvc_dissect_element_cmd_unkn5(tvb, offset, pinfo, tree, di, drep);
751 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
752 offset = mdssvc_dissect_element_cmd_max_fragment_size1(tvb, offset, pinfo, tree, di, drep);
753 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
754 offset = mdssvc_dissect_element_cmd_unkn6(tvb, offset, pinfo, tree, di, drep);
755 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
756 offset = mdssvc_dissect_element_cmd_max_fragment_size2(tvb, offset, pinfo, tree, di, drep);
757 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
758 offset = mdssvc_dissect_element_cmd_unkn7(tvb, offset, pinfo, tree, di, drep);
759 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
760 offset = mdssvc_dissect_element_cmd_unkn8(tvb, offset, pinfo, tree, di, drep);
761 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
762 return offset;
765 static int
766 mdssvc_dissect_element_close_in_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
768 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_close_in_handle_, NDR_POINTER_REF, "Pointer to In Handle (policy_handle)",hf_mdssvc_mdssvc_close_in_handle);
770 return offset;
773 static int
774 mdssvc_dissect_element_close_in_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
776 offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_close_in_handle, 0);
778 return offset;
781 static int
782 mdssvc_dissect_element_close_unkn1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
784 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_close_unkn1, 0);
786 return offset;
789 static int
790 mdssvc_dissect_element_close_device_id(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
792 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_close_device_id, 0);
794 return offset;
797 static int
798 mdssvc_dissect_element_close_unkn2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
800 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_close_unkn2, 0);
802 return offset;
805 static int
806 mdssvc_dissect_element_close_unkn3(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
808 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_close_unkn3, 0);
810 return offset;
813 static int
814 mdssvc_dissect_element_close_out_handle(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
816 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_close_out_handle_, NDR_POINTER_REF, "Pointer to Out Handle (policy_handle)",hf_mdssvc_mdssvc_close_out_handle);
818 return offset;
821 static int
822 mdssvc_dissect_element_close_out_handle_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
824 offset = PIDL_dissect_policy_hnd(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_close_out_handle, 0);
826 return offset;
829 static int
830 mdssvc_dissect_element_close_status(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
832 offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, mdssvc_dissect_element_close_status_, NDR_POINTER_REF, "Pointer to Status (uint32)",hf_mdssvc_mdssvc_close_status);
834 return offset;
837 static int
838 mdssvc_dissect_element_close_status_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
840 offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_mdssvc_mdssvc_close_status, 0);
842 return offset;
845 /* IDL: void mdssvc_close( */
846 /* IDL: [in] [ref] policy_handle *in_handle, */
847 /* IDL: [in] uint32 unkn1, */
848 /* IDL: [in] uint32 device_id, */
849 /* IDL: [in] uint32 unkn2, */
850 /* IDL: [in] uint32 unkn3, */
851 /* IDL: [out] [ref] policy_handle *out_handle, */
852 /* IDL: [out] [ref] uint32 *status */
853 /* IDL: ); */
855 static int
856 mdssvc_dissect_close_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
858 di->dcerpc_procedure_name="close";
859 offset = mdssvc_dissect_element_close_out_handle(tvb, offset, pinfo, tree, di, drep);
860 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
862 offset = mdssvc_dissect_element_close_status(tvb, offset, pinfo, tree, di, drep);
863 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
865 return offset;
868 static int
869 mdssvc_dissect_close_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, uint8_t *drep _U_)
871 di->dcerpc_procedure_name="close";
872 offset = mdssvc_dissect_element_close_in_handle(tvb, offset, pinfo, tree, di, drep);
873 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
874 offset = mdssvc_dissect_element_close_unkn1(tvb, offset, pinfo, tree, di, drep);
875 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
876 offset = mdssvc_dissect_element_close_device_id(tvb, offset, pinfo, tree, di, drep);
877 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
878 offset = mdssvc_dissect_element_close_unkn2(tvb, offset, pinfo, tree, di, drep);
879 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
880 offset = mdssvc_dissect_element_close_unkn3(tvb, offset, pinfo, tree, di, drep);
881 offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep);
882 return offset;
886 static const dcerpc_sub_dissector mdssvc_dissectors[] = {
887 { 0, "open",
888 mdssvc_dissect_open_request, mdssvc_dissect_open_response},
889 { 1, "unknown1",
890 mdssvc_dissect_unknown1_request, mdssvc_dissect_unknown1_response},
891 { 2, "cmd",
892 mdssvc_dissect_cmd_request, mdssvc_dissect_cmd_response},
893 { 3, "close",
894 mdssvc_dissect_close_request, mdssvc_dissect_close_response},
895 { 0, NULL, NULL, NULL }
898 void proto_register_dcerpc_mdssvc(void)
900 static hf_register_info hf[] = {
901 { &hf_mdssvc_mdssvc_blob_length,
902 { "Length", "mdssvc.mdssvc_blob.length", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
903 { &hf_mdssvc_mdssvc_blob_size,
904 { "Size", "mdssvc.mdssvc_blob.size", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
905 { &hf_mdssvc_mdssvc_blob_spotlight_blob,
906 { "Spotlight Blob", "mdssvc.mdssvc_blob.spotlight_blob", FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL }},
907 { &hf_mdssvc_mdssvc_close_device_id,
908 { "Device Id", "mdssvc.mdssvc_close.device_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
909 { &hf_mdssvc_mdssvc_close_in_handle,
910 { "In Handle", "mdssvc.mdssvc_close.in_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
911 { &hf_mdssvc_mdssvc_close_out_handle,
912 { "Out Handle", "mdssvc.mdssvc_close.out_handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
913 { &hf_mdssvc_mdssvc_close_status,
914 { "Status", "mdssvc.mdssvc_close.status", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
915 { &hf_mdssvc_mdssvc_close_unkn1,
916 { "Unkn1", "mdssvc.mdssvc_close.unkn1", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
917 { &hf_mdssvc_mdssvc_close_unkn2,
918 { "Unkn2", "mdssvc.mdssvc_close.unkn2", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
919 { &hf_mdssvc_mdssvc_close_unkn3,
920 { "Unkn3", "mdssvc.mdssvc_close.unkn3", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
921 { &hf_mdssvc_mdssvc_cmd_device_id,
922 { "Device Id", "mdssvc.mdssvc_cmd.device_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
923 { &hf_mdssvc_mdssvc_cmd_flags,
924 { "Flags", "mdssvc.mdssvc_cmd.flags", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
925 { &hf_mdssvc_mdssvc_cmd_fragment,
926 { "Fragment", "mdssvc.mdssvc_cmd.fragment", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
927 { &hf_mdssvc_mdssvc_cmd_handle,
928 { "Handle", "mdssvc.mdssvc_cmd.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
929 { &hf_mdssvc_mdssvc_cmd_max_fragment_size1,
930 { "Max Fragment Size1", "mdssvc.mdssvc_cmd.max_fragment_size1", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
931 { &hf_mdssvc_mdssvc_cmd_max_fragment_size2,
932 { "Max Fragment Size2", "mdssvc.mdssvc_cmd.max_fragment_size2", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
933 { &hf_mdssvc_mdssvc_cmd_request_blob,
934 { "Request Blob", "mdssvc.mdssvc_cmd.request_blob", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
935 { &hf_mdssvc_mdssvc_cmd_response_blob,
936 { "Response Blob", "mdssvc.mdssvc_cmd.response_blob", FT_NONE, BASE_NONE, NULL, 0, NULL, HFILL }},
937 { &hf_mdssvc_mdssvc_cmd_unkn1,
938 { "Unkn1", "mdssvc.mdssvc_cmd.unkn1", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
939 { &hf_mdssvc_mdssvc_cmd_unkn3,
940 { "Unkn3", "mdssvc.mdssvc_cmd.unkn3", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
941 { &hf_mdssvc_mdssvc_cmd_unkn4,
942 { "Unkn4", "mdssvc.mdssvc_cmd.unkn4", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
943 { &hf_mdssvc_mdssvc_cmd_unkn5,
944 { "Unkn5", "mdssvc.mdssvc_cmd.unkn5", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
945 { &hf_mdssvc_mdssvc_cmd_unkn6,
946 { "Unkn6", "mdssvc.mdssvc_cmd.unkn6", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
947 { &hf_mdssvc_mdssvc_cmd_unkn7,
948 { "Unkn7", "mdssvc.mdssvc_cmd.unkn7", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
949 { &hf_mdssvc_mdssvc_cmd_unkn8,
950 { "Unkn8", "mdssvc.mdssvc_cmd.unkn8", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
951 { &hf_mdssvc_mdssvc_cmd_unkn9,
952 { "Unkn9", "mdssvc.mdssvc_cmd.unkn9", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
953 { &hf_mdssvc_mdssvc_open_device_id,
954 { "Device Id", "mdssvc.mdssvc_open.device_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
955 { &hf_mdssvc_mdssvc_open_handle,
956 { "Handle", "mdssvc.mdssvc_open.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
957 { &hf_mdssvc_mdssvc_open_share_mount_path,
958 { "Share Mount Path", "mdssvc.mdssvc_open.share_mount_path", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
959 { &hf_mdssvc_mdssvc_open_share_name,
960 { "Share Name", "mdssvc.mdssvc_open.share_name", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
961 { &hf_mdssvc_mdssvc_open_share_path,
962 { "Share Path", "mdssvc.mdssvc_open.share_path", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }},
963 { &hf_mdssvc_mdssvc_open_unkn2,
964 { "Unkn2", "mdssvc.mdssvc_open.unkn2", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
965 { &hf_mdssvc_mdssvc_open_unkn3,
966 { "Unkn3", "mdssvc.mdssvc_open.unkn3", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
967 { &hf_mdssvc_mdssvc_unknown1_device_id,
968 { "Device Id", "mdssvc.mdssvc_unknown1.device_id", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
969 { &hf_mdssvc_mdssvc_unknown1_flags,
970 { "Flags", "mdssvc.mdssvc_unknown1.flags", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
971 { &hf_mdssvc_mdssvc_unknown1_gid,
972 { "Gid", "mdssvc.mdssvc_unknown1.gid", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
973 { &hf_mdssvc_mdssvc_unknown1_handle,
974 { "Handle", "mdssvc.mdssvc_unknown1.handle", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL }},
975 { &hf_mdssvc_mdssvc_unknown1_status,
976 { "Status", "mdssvc.mdssvc_unknown1.status", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
977 { &hf_mdssvc_mdssvc_unknown1_uid,
978 { "Uid", "mdssvc.mdssvc_unknown1.uid", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
979 { &hf_mdssvc_mdssvc_unknown1_unkn1,
980 { "Unkn1", "mdssvc.mdssvc_unknown1.unkn1", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
981 { &hf_mdssvc_mdssvc_unknown1_unkn3,
982 { "Unkn3", "mdssvc.mdssvc_unknown1.unkn3", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
983 { &hf_mdssvc_mdssvc_unknown1_unkn4,
984 { "Unkn4", "mdssvc.mdssvc_unknown1.unkn4", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
985 { &hf_mdssvc_mdssvc_unknown1_unkn7,
986 { "Unkn7", "mdssvc.mdssvc_unknown1.unkn7", FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL }},
987 { &hf_mdssvc_opnum,
988 { "Operation", "mdssvc.opnum", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL }},
992 static int *ett[] = {
993 &ett_dcerpc_mdssvc,
994 &ett_mdssvc_mdssvc_blob,
997 proto_dcerpc_mdssvc = proto_register_protocol("Spotlight metadata search service", "MDSSVC", "mdssvc");
998 proto_register_field_array(proto_dcerpc_mdssvc, hf, array_length (hf));
999 proto_register_subtree_array(ett, array_length(ett));
1002 void proto_reg_handoff_dcerpc_mdssvc(void)
1004 dcerpc_init_uuid(proto_dcerpc_mdssvc, ett_dcerpc_mdssvc,
1005 &uuid_dcerpc_mdssvc, ver_dcerpc_mdssvc,
1006 mdssvc_dissectors, hf_mdssvc_opnum);