Coverage Report

Created: 2026-01-02 06:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-mswsp.c
Line
Count
Source
1
/* packet-mswsp.c
2
 * Routines for Windows Search Protocol dissection
3
 * Copyright 2012, Gregor Beck <gregor.beck@sernet.de>
4
 * Copyright 2015, Noel Power <noel.power@suse.com>
5
 *
6
 * Wireshark - Network traffic analyzer
7
 * By Gerald Combs <gerald@wireshark.org>
8
 * Copyright 1998 Gerald Combs
9
 *
10
 * SPDX-License-Identifier: GPL-2.0-or-later
11
 */
12
13
# include "config.h"
14
15
#include <epan/packet.h>
16
#include <epan/expert.h>
17
#include <epan/proto_data.h>
18
#include <epan/exceptions.h>
19
#include <epan/to_str.h>
20
21
#include <wsutil/ws_roundup.h>
22
23
#include "packet-smb.h"
24
#include "packet-smb2.h"
25
#include "packet-dcom.h" /* HRESULT */
26
#include "packet-dcerpc-nt.h"
27
28
void proto_register_mswsp(void);
29
30
0
#define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x))
31
32
enum vType {
33
  VT_EMPTY       = 0x00,
34
  VT_NULL        = 0x01,
35
  VT_I2          = 0x02,
36
  VT_I4          = 0x03,
37
  VT_R4          = 0x04,
38
  VT_R8          = 0x05,
39
  VT_CY          = 0x06,
40
  VT_DATE        = 0x07,
41
  VT_BSTR        = 0x08,
42
  VT_ERROR       = 0x0a,
43
  VT_BOOL        = 0x0b,
44
  VT_VARIANT     = 0x0c,
45
  VT_DECIMAL     = 0x0e,
46
  VT_I1          = 0x10,
47
  VT_UI1         = 0x11,
48
  VT_UI2         = 0x12,
49
  VT_UI4         = 0x13,
50
  VT_I8          = 0x14,
51
  VT_UI8         = 0x15,
52
  VT_INT         = 0x16,
53
  VT_UINT        = 0x17,
54
  VT_LPSTR       = 0x1e,
55
  VT_LPWSTR      = 0x1f,
56
  VT_COMPRESSED_LPWSTR = 0x23,
57
  VT_FILETIME    = 0x40,
58
  VT_BLOB        = 0x41,
59
  VT_BLOB_OBJECT = 0x46,
60
  VT_CLSID       = 0x48,
61
  VT_VECTOR      = 0x1000,
62
  VT_ARRAY       = 0x2000
63
};
64
65
struct data_blob {
66
  uint8_t *data;
67
  uint32_t size;
68
};
69
70
struct data_str {
71
  const char *str;
72
  uint32_t len;
73
};
74
75
struct vt_decimal {
76
  uint32_t hi, lo, mid;
77
};
78
79
80
struct vt_vector {
81
  uint32_t len;
82
  union  {
83
    int8_t *vt_i1;
84
    uint8_t *vt_ui1;
85
    int16_t *vt_i2;
86
    uint16_t *vt_ui2, *vt_bool;
87
    int32_t *vt_i4;
88
    uint32_t *vt_ui4, *vt_error;
89
    int64_t *vt_i8, *vt_cy, *vt_filetime;
90
    uint64_t *vt_ui8;
91
    float *vt_r4;
92
    double *vt_r8, *vt_date;
93
    e_guid_t *vt_clsid;
94
    struct data_blob *vt_blob, *vt_blob_object;
95
    struct data_str *vt_lpstr, *vt_lpwstr, *vt_compressed_lpwstr, *vt_bstr;
96
  } u;
97
};
98
99
struct SAFEARRAYBOUNDS {
100
  uint32_t cElements, lLbound;
101
};
102
103
struct vt_array {
104
  struct vt_vector vData;
105
  uint16_t cDims, fFeature;
106
  uint32_t cbElements;
107
108
  struct SAFEARRAYBOUNDS *Rgsabound;
109
};
110
111
union vt_single
112
{
113
  int8_t vt_i1;
114
  uint8_t vt_ui1;
115
  int16_t vt_i2;
116
  uint16_t vt_ui2, vt_bool;
117
  int32_t vt_i4, vt_int;
118
  uint32_t vt_ui4, vt_uint, vt_error;
119
  int64_t vt_i8, vt_cy, vt_filetime;
120
  uint64_t vt_ui8;
121
  double vt_r8, vt_date;
122
  e_guid_t vt_clsid;
123
  float vt_r4;
124
  struct vt_decimal vt_decimal;
125
  struct data_blob vt_blob, vt_blob_object;
126
  struct data_str vt_lpstr, vt_lpwstr, vt_compressed_lpwstr, vt_bstr;
127
};
128
129
union vValue {
130
  union vt_single vt_single;
131
  struct vt_vector vt_vector;
132
  struct vt_array vt_array;
133
};
134
135
struct vtype_data {
136
  enum vType tag; /* base type, high bits cleared */
137
  const char *str;  /* string rep of base type */
138
  int size;        /* -1 for variable length */
139
  int (*tvb_get)(tvbuff_t*, packet_info*, int, void*);/* read StorageVariant */
140
  int (*tvb_get_value_only)(tvbuff_t*, packet_info*, int, int, void*);/*read StorageVariant value*/
141
  void (*strbuf_append)(wmem_strbuf_t*, void*);
142
};
143
144
/* 2.2.1.1 */
145
struct CBaseStorageVariant {
146
  uint16_t vType; /* value enum vType */
147
  uint16_t vData1;
148
  uint16_t vData2;
149
  union vValue vValue;
150
151
  struct vtype_data *type;
152
};
153
154
/*****************************************************/
155
156
157
enum rType {
158
  RTNone = 0,
159
  RTAnd,
160
  RTOr,
161
  RTNot,
162
  RTContent,
163
  RTProperty,
164
  RTProximity,
165
  RTVector,
166
  RTNatLanguage,
167
  RTScope,
168
  RTCoerce_Add,
169
  RTCoerce_Multiply,
170
  RTCoerce_Absolute,
171
  RTProb,
172
  RTFeedback,
173
  RTReldoc,
174
  RTReuseWhere = 0x11,
175
  RTInternalProp = 0x00fffffa,
176
  RTPhrase = 0x00fffffd
177
};
178
179
180
struct CRestriction;
181
182
enum relop {
183
  PRLT = 0,
184
  PRLE,
185
  PRGT,
186
  PRGE,
187
  PREQ,
188
  PRNE,
189
  PRRE,
190
  PRAllBits,
191
  PRSomeBits,
192
  PRAll = 0x100,
193
  PRAny = 0x200
194
};
195
196
enum PRSPEC_Kind {
197
  PRSPEC_LPWSTR = 0,
198
  PRSPEC_PROPID
199
};
200
201
/* 2.2.1.2 */
202
struct CFullPropSpec {
203
  e_guid_t guid;
204
  enum PRSPEC_Kind kind;
205
  union {
206
    uint32_t propid;
207
    const uint8_t *name;
208
  } u;
209
};
210
211
/* 2.2.1.7 */
212
struct CPropertyRestriction {
213
  uint32_t relop; /*with value enum relop*/
214
  struct CFullPropSpec property;
215
  struct CBaseStorageVariant prval;
216
  uint32_t lcid;
217
};
218
219
/* 2.2.1.6 */
220
struct CNodeRestriction {
221
  uint32_t cNode;
222
  struct CRestriction *paNode;
223
};
224
225
/* 2.2.1.17 */
226
struct CRestriction {
227
  enum rType ulType;
228
  uint32_t Weight;
229
  union {
230
    struct CNodeRestriction *RTAnd, *RTOr, *RTProximity, *RTPhrase;
231
    struct CRestriction *RTNot;
232
    struct CContentRestriction *RTContent;
233
    struct CPropertyRestriction *RTProperty;
234
    struct CVectorRestriction *RTVector;
235
    struct CNatLanguageRestriction *RTNatLanguage;
236
    struct CScopeRestriction *RTScope;
237
    struct CReuseWhere *RTReuseWhere;
238
    struct CInternalPropertyRestriction *RTInternalProp;
239
    struct CCoercionRestriction *RTCoerce_Add, *RTCoerce_Multiply, *RTCoerce_Absolute;
240
  } u;
241
};
242
243
244
/* 2.2.1.12 */
245
struct CCoercionRestriction {
246
  float value;
247
  struct CRestriction child;
248
};
249
250
/* 2.2.1.3 */
251
struct CContentRestriction {
252
  struct CFullPropSpec property;
253
  const uint8_t *phrase;
254
  uint32_t lcid;
255
  uint32_t method;
256
};
257
258
/* 2.2.1.8 */
259
struct CReuseWhere /*Restriction*/ {
260
  uint32_t whereId;
261
};
262
263
/* 2.2.1.5 */
264
struct CNatLanguageRestriction {
265
  struct CFullPropSpec property;
266
  const uint8_t *phrase;
267
  uint32_t lcid;
268
};
269
270
#define PROP_LENGTH 255
271
272
enum aggtype {
273
  DBAGGTTYPE_BYNONE = 0x0,
274
  DBAGGTTYPE_SUM,
275
  DBAGGTTYPE_MAX,
276
  DBAGGTTYPE_MIN,
277
  DBAGGTTYPE_AVG,
278
  DBAGGTTYPE_COUNT,
279
  DBAGGTTYPE_CHILDCOUNT,
280
  DBAGGTTYPE_BYFREQ,
281
  DBAGGTTYPE_FIRST,
282
  DBAGGTTYPE_DATERANGE,
283
  DBAGGTTYPE_REPRESENTATIVEOF,
284
  DBAGGTTYPE_EDITDISTANCE,
285
};
286
287
static const value_string DBAGGTTYPE[] = {
288
  {DBAGGTTYPE_BYNONE, "DBAGGTTYPE_BYNONE"},
289
  {DBAGGTTYPE_SUM, "DBAGGTTYPE_SUM"},
290
  {DBAGGTTYPE_MAX, "DBAGGTTYPE_MAX"},
291
  {DBAGGTTYPE_MIN, "DBAGGTTYPE_MIN"},
292
  {DBAGGTTYPE_AVG, "DBAGGTTYPE_AVG"},
293
  {DBAGGTTYPE_COUNT, "DBAGGTTYPE_COUNT"},
294
  {DBAGGTTYPE_CHILDCOUNT, "DBAGGTTYPE_CHILDCOUNT"},
295
  {DBAGGTTYPE_BYFREQ, "DBAGGTTYPE_BYFREQ"},
296
  {DBAGGTTYPE_FIRST, "DBAGGTTYPE_FIRST"},
297
  {DBAGGTTYPE_DATERANGE, "DBAGGTTYPE_DATERANGE"},
298
  {DBAGGTTYPE_REPRESENTATIVEOF, "DBAGGTTYPE_REPRESENTATIVEOF"},
299
  {DBAGGTTYPE_EDITDISTANCE, "DBAGGTTYPE_EDITDISTANCE"},
300
  {0, NULL}
301
};
302
303
/* 2.2.1.44 */
304
struct CTableColumn {
305
  /*struct CFullPropSpec propspec;*/
306
  uint32_t vtype;
307
  uint8_t aggregateused;
308
  uint8_t aggregatetype;
309
  uint8_t valueused;
310
  uint16_t valueoffset;
311
  uint16_t valuesize;
312
  uint8_t statusused;
313
  uint16_t statusoffset;
314
  uint8_t lengthused;
315
  uint16_t lengthoffset;
316
  char* name;
317
};
318
/* Minimum size in bytes on the wire CTableColumn can be */
319
0
#define MIN_CTABLECOL_SIZE 32
320
/* Maximum sane size in bytes on the wire CTableColumn can be. Arbitrary. */
321
0
#define MAX_CTABLECOL_SIZE 5000
322
323
/* 2.2.3.10 */
324
325
struct CPMSetBindingsIn {
326
  uint32_t hcursor;
327
  uint32_t brow;
328
  uint32_t bbindingdesc;
329
  uint32_t dummy;
330
  uint32_t ccolumns;
331
  struct CTableColumn *acolumns;
332
};
333
334
struct vector_or_array_64 {
335
  uint64_t count;
336
  uint64_t array_address;
337
};
338
339
struct vector_or_array_32 {
340
  uint32_t count;
341
  uint32_t array_address;
342
};
343
344
/* 2.2.1.42 */
345
struct CRowVariant {
346
  uint16_t vtype;
347
  uint16_t reserved1;
348
  uint32_t reserved2;
349
  union {
350
    uint8_t byte;
351
    uint16_t shortw;
352
    uint32_t longw;
353
    uint64_t hyperw;
354
    union {
355
        struct vector_or_array_64 i64;
356
        struct vector_or_array_32 i32;
357
    } array_vector;
358
  } content;
359
};
360
361
static int SMB1 = 1;
362
static int SMB2 = 2;
363
364
void proto_reg_handoff_mswsp(void);
365
366
static expert_field ei_mswsp_invalid_variant_type;
367
static expert_field ei_missing_msg_context;
368
static expert_field ei_mswsp_msg_cpmsetbinding_ccolumns;
369
370
static int proto_mswsp;
371
static int hf_mswsp_msg;
372
static int hf_mswsp_hdr;
373
static int hf_mswsp_hdr_msg;
374
static int hf_mswsp_hdr_status;
375
static int hf_mswsp_hdr_checksum;
376
static int hf_mswsp_hdr_reserved;
377
static int hf_mswsp_msg_Connect_Version;
378
static int hf_mswsp_msg_ConnectIn_ClientIsRemote;
379
static int hf_mswsp_msg_ConnectIn_Blob1;
380
static int hf_mswsp_msg_ConnectIn_MachineName;
381
static int hf_mswsp_msg_ConnectIn_UserName;
382
static int hf_mswsp_msg_ConnectIn_PropSets_num;
383
static int hf_mswsp_bool_options;
384
static int hf_mswsp_bool_options_cursor;
385
static int hf_mswsp_bool_options_async;
386
static int hf_mswsp_bool_options_firstrows;
387
static int hf_mswsp_bool_options_holdrows;
388
static int hf_mswsp_bool_options_chaptered;
389
static int hf_mswsp_bool_options_useci;
390
static int hf_mswsp_bool_options_defertrim;
391
static int hf_mswsp_bool_options_rowsetevents;
392
static int hf_mswsp_bool_options_dontcomputeexpensive;
393
static int hf_mswsp_guid_time_low;
394
static int hf_mswsp_guid_time_mid;
395
static int hf_mswsp_guid_time_high;
396
static int hf_mswsp_guid_time_clock_hi;
397
static int hf_mswsp_guid_time_clock_low;
398
static int hf_mswsp_guid_node;
399
static int hf_mswsp_lcid;
400
static int hf_mswsp_lcid_sortid;
401
static int hf_mswsp_lcid_langid;
402
static int hf_mswsp_cscort_column;
403
static int hf_mswsp_cscort_order;
404
static int hf_mswsp_cscort_individual;
405
static int hf_mswsp_cscortset_count;
406
static int hf_mswsp_ctablecolumn_vtype;
407
static int hf_mswsp_ctablecolumn_aggused;
408
static int hf_mswsp_ctablecolumn_aggtype;
409
static int hf_mswsp_ctablecolumn_valused;
410
static int hf_mswsp_ctablecolumn_valoffset;
411
static int hf_mswsp_ctablecolumn_valsize;
412
static int hf_mswsp_ctablecolumn_statused;
413
static int hf_mswsp_ctablecolumn_statoffset;
414
static int hf_mswsp_ctablecolumn_lenused;
415
static int hf_mswsp_ctablecolumn_lenoffset;
416
static int hf_mswsp_cfullpropspec_kind;
417
static int hf_mswsp_cfullpropspec_propid;
418
static int hf_mswsp_cfullpropspec_propname;
419
static int hf_mswsp_cproprestrict_relop;
420
static int hf_mswsp_ccoercerestrict_value;
421
static int hf_mswsp_ccontentrestrict_cc;
422
static int hf_mswsp_ccontentrestrict_phrase;
423
static int hf_mswsp_ccontentrestrict_method;
424
static int hf_mswsp_natlangrestrict_cc;
425
static int hf_mswsp_natlangrestrict_phrase;
426
static int hf_mswsp_crestrict_ultype;
427
static int hf_mswsp_crestrict_weight;
428
static int hf_mswsp_crestrictarray_count;
429
static int hf_mswsp_crestrictarray_present;
430
static int hf_mswsp_cnoderestrict_cnode;
431
static int hf_mswsp_cbasestorvariant_vtype;
432
static int hf_mswsp_cbasestorvariant_vvalue;
433
static int hf_mswsp_cbasestorvariant_vdata1;
434
static int hf_mswsp_cbasestorvariant_vdata2;
435
static int hf_mswsp_cbasestorvariant_num;
436
static int hf_mswsp_cbasestorvariant_cdims;
437
static int hf_mswsp_cbasestorvariant_ffeatures;
438
static int hf_mswsp_cbasestorvariant_cbelements;
439
static int hf_mswsp_cbasestorvariant_rgsabound;
440
static int hf_mswsp_cdbcolid_ekind;
441
static int hf_mswsp_cdbcolid_ulid;
442
static int hf_mswsp_cdbcolid_vstring;
443
static int hf_mswsp_cdbprop_id;
444
static int hf_mswsp_cdbprop_options;
445
static int hf_mswsp_cdbprop_status;
446
static int hf_mswsp_cdbpropset_cprops;
447
static int hf_mswsp_rangeboundry_ultype;
448
static int hf_mswsp_rangeboundry_labelpresent;
449
static int hf_mswsp_rangeboundry_cclabel;
450
static int hf_mswsp_rangeboundry_label;
451
static int hf_mswsp_crangecategspec_crange;
452
static int hf_mswsp_ccategspec_type;
453
static int hf_mswsp_caggregspec_type;
454
static int hf_mswsp_caggregspec_ccalias;
455
static int hf_mswsp_caggregspec_alias;
456
static int hf_mswsp_caggregspec_idcolumn;
457
static int hf_mswsp_caggregspec_ulmaxnumtoreturn;
458
static int hf_mswsp_caggregspec_idrepresentative;
459
static int hf_mswsp_caggregset_count;
460
static int hf_mswsp_caggregsortkey_order;
461
static int hf_mswsp_csortaggregset_count;
462
static int hf_mswsp_cingroupsortaggregset_type;
463
static int hf_mswsp_cingroupsortaggregsets_count;
464
static int hf_mswsp_categorizationspec_cmaxres;
465
static int hf_mswsp_crowsetprops_ulmaxopenrows;
466
static int hf_mswsp_crowsetprops_ulmemusage;
467
static int hf_mswsp_crowsetprops_cmaxresults;
468
static int hf_mswsp_crowsetprops_ccmdtimeout;
469
static int hf_mswsp_cpidmapper_count;
470
static int hf_mswsp_ccolumngroup_count;
471
static int hf_mswsp_ccolumngroup_grouppid;
472
static int hf_mswsp_ccolumngroup_pid;
473
static int hf_mswsp_ccolumngrouparray_count;
474
static int hf_mswsp_int32array_value;
475
static int hf_mswsp_crowseeknext_cskip;
476
static int hf_mswsp_crowseekat_bmkoffset;
477
static int hf_mswsp_crowseekat_skip;
478
static int hf_mswsp_crowseekat_hregion;
479
static int hf_mswsp_crowseekatratio_ulnumerator;
480
static int hf_mswsp_crowseekatratio_uldenominator;
481
static int hf_mswsp_crowseekatratio_hregion;
482
static int hf_mswsp_crowseekbybookmark_cbookmarks;
483
static int hf_mswsp_crowseekbybookmark_maxret;
484
static int hf_mswsp_crowvariantinfo_count64;
485
static int hf_mswsp_arrayvector_address64;
486
static int hf_mswsp_crowvariantinfo_count32;
487
static int hf_mswsp_arrayvector_address32;
488
static int hf_mswsp_rowvariant_item_address64;
489
static int hf_mswsp_rowvariant_item_address32;
490
static int hf_mswsp_rowvariant_item_value;
491
static int hf_mswsp_rowvariant_vtype;
492
static int hf_mswsp_rowvariant_reserved1;
493
static int hf_mswsp_rowvariant_reserved2;
494
static int hf_mswsp_ctablecolumn_status;
495
static int hf_mswsp_ctablecolumn_length;
496
static int hf_mswsp_msg_cpmcreatequery_size;
497
static int hf_mswsp_msg_cpmcreatequery_ccolumnsetpresent;
498
static int hf_mswsp_msg_cpmcreatequery_crestrictionpresent;
499
static int hf_mswsp_msg_cpmcreatequery_csortpresent;
500
static int hf_mswsp_msg_cpmcreatequery_ccategpresent;
501
static int hf_mswsp_msg_cpmcreatequery_ccateg_count;
502
static int hf_mswsp_msg_cpmcreatequery_trueseq;
503
static int hf_mswsp_msg_cpmcreatequery_workid;
504
static int hf_mswsp_msg_cpmcreatequery_cursors;
505
static int hf_mswsp_msg_cpmgetrows_hcursor;
506
static int hf_mswsp_msg_cpmgetrows_rowstotransfer;
507
static int hf_mswsp_msg_cpmgetrows_rowwidth;
508
static int hf_mswsp_msg_cpmgetrows_cbseek;
509
static int hf_mswsp_msg_cpmgetrows_cbreserved;
510
static int hf_mswsp_msg_cpmgetrows_cbreadbuffer;
511
static int hf_mswsp_msg_cpmgetrows_ulclientbase;
512
static int hf_mswsp_msg_cpmgetrows_fbwdfetch;
513
static int hf_mswsp_msg_cpmgetrows_etype;
514
static int hf_mswsp_msg_cpmgetrows_chapt;
515
static int hf_mswsp_msg_cpmgetrows_crowsreturned;
516
static int hf_mswsp_msg_cpmratiofinished_hcursor;
517
static int hf_mswsp_msg_cpmratiofinished_fquick;
518
static int hf_mswsp_msg_cpmratiofinished_ulnumerator;
519
static int hf_mswsp_msg_cpmratiofinished_uldenominator;
520
static int hf_mswsp_msg_cpmratiofinished_crows;
521
static int hf_mswsp_msg_cpmratiofinished_fnewrows;
522
static int hf_mswsp_msg_cpmcomparebmk_hcursor;
523
static int hf_mswsp_msg_cpmcomparebmk_chapt;
524
static int hf_mswsp_msg_cpmcomparebmk_bmkfirst;
525
static int hf_mswsp_msg_cpmcomparebmk_bmksecond;
526
static int hf_mswsp_msg_cpmcomparebmk_dwcomparison;
527
static int hf_mswsp_msg_cpmgetapproxpos_hcursor;
528
static int hf_mswsp_msg_cpmgetapproxpos_chapt;
529
static int hf_mswsp_msg_cpmgetapproxpos_bmk;
530
static int hf_mswsp_msg_cpmgetapproxpos_numerator;
531
static int hf_mswsp_msg_cpmgetapproxpos_denominator;
532
static int hf_mswsp_msg_cpmsetbinding_hcursor;
533
static int hf_mswsp_msg_cpmsetbinding_cbrow;
534
static int hf_mswsp_msg_cpmsetbinding_desc;
535
static int hf_mswsp_msg_cpmsetbinding_dummy;
536
static int hf_mswsp_msg_cpmsetbinding_ccolumns;
537
static int hf_mswsp_msg_cpmsetbinding_acolumns;
538
static int hf_mswsp_msg_cpmsendnotify_watchnotify;
539
static int hf_mswsp_msg_cpmgetquerystatus_hcursor;
540
static int hf_mswsp_msg_cpmgetquerystatus_qstatus;
541
static int hf_mswsp_msg_cpmcistate_cbstruct;
542
static int hf_mswsp_msg_cpmcistate_cwordlist;
543
static int hf_mswsp_msg_cpmcistate_cpersistindex;
544
static int hf_mswsp_msg_cpmcistate_cqueries;
545
static int hf_mswsp_msg_cpmcistate_cfreshtest;
546
static int hf_mswsp_msg_cpmcistate_dwmergeprogress;
547
static int hf_mswsp_msg_cpmcistate_estate;
548
static int hf_mswsp_msg_cpmcistate_cfiltereddocs;
549
static int hf_mswsp_msg_cpmcistate_ctotaldocs;
550
static int hf_mswsp_msg_cpmcistate_cpendingscans;
551
static int hf_mswsp_msg_cpmcistate_dwindexsize;
552
static int hf_mswsp_msg_cpmcistate_cuniquekeys;
553
static int hf_mswsp_msg_cpmcistate_csecqdocuments;
554
static int hf_mswsp_msg_cpmcistate_dwpropcachesize;
555
static int hf_mswsp_msg_cpmfetchvalue_wid;
556
static int hf_mswsp_msg_cpmfetchvalue_cbsofar;
557
static int hf_mswsp_msg_cpmfetchvalue_cbpropspec;
558
static int hf_mswsp_msg_cpmfetchvalue_cbchunk;
559
static int hf_mswsp_msg_cpmfetchvalue_cbvalue;
560
static int hf_mswsp_msg_cpmfetchvalue_fmoreexists;
561
static int hf_mswsp_msg_cpmfetchvalue_fvalueexists;
562
static int hf_mswsp_msg_cpmfetchvalue_vvalue;
563
static int hf_mswsp_msg_cpmquerystatusex_hcursor;
564
static int hf_mswsp_msg_cpmquerystatusex_bmk;
565
static int hf_mswsp_msg_cpmquerystatusex_qstatus;
566
static int hf_mswsp_msg_cpmquerystatusex_cfiltereddocs;
567
static int hf_mswsp_msg_cpmquerystatusex_cdocstofilter;
568
static int hf_mswsp_msg_cpmquerystatusex_dwratiodenom;
569
static int hf_mswsp_msg_cpmquerystatusex_dwrationumer;
570
static int hf_mswsp_msg_cpmquerystatusex_irowbmk;
571
static int hf_mswsp_msg_cpmquerystatusex_crowstotal;
572
static int hf_mswsp_msg_cpmquerystatusex_maxrank;
573
static int hf_mswsp_msg_cpmquerystatusex_cresultsfound;
574
static int hf_mswsp_msg_cpmquerystatusex_whereid;
575
static int hf_mswsp_msg_cpmrestartposition_hcursor;
576
static int hf_mswsp_msg_cpmrestartposition_chapt;
577
static int hf_mswsp_msg_cpmgetrowsetnotify_wid;
578
static int hf_mswsp_msg_cpmgetrowsetnotify_moreevents;
579
static int hf_mswsp_msg_cpmgetrowsetnotify_eventtype;
580
static int hf_mswsp_msg_cpmgetrowsetnotify_rowsetitemstate;
581
static int hf_mswsp_msg_cpmgetrowsetnotify_changeditemstate;
582
static int hf_mswsp_msg_cpmgetrowsetnotify_rowsetevent;
583
static int hf_mswsp_msg_cpmgetrowsetnotify_rowseteventdata1;
584
static int hf_mswsp_msg_cpmgetrowsetnotify_rowseteventdata2;
585
static int hf_mswsp_msg_cpmfindindices_cwids;
586
static int hf_mswsp_msg_cpmfindindices_cdepthprev;
587
static int hf_mswsp_msg_cpmfindindices_cdepthnext;
588
static int hf_mswsp_msg_cpmsetscopeprioritization_priority;
589
static int hf_mswsp_msg_cpmsetscopeprioritization_eventfreq;
590
static int hf_mswsp_msg_cpmsetscopestatisics_dwindexitems;
591
static int hf_mswsp_msg_cpmsetscopestatisics_dwoutstandingadds;
592
static int hf_mswsp_msg_cpmsetscopestatisics_dwoutstandingmodifies;
593
594
static int ett_mswsp;
595
static int ett_mswsp_hdr;
596
static int ett_mswsp_msg;
597
static int ett_mswsp_pad;
598
599
static int ett_mswsp_property_restriction;
600
static int ett_CRestrictionArray;
601
static int ett_CBaseStorageVariant;
602
static int ett_CBaseStorageVariant_Vector;
603
static int ett_CBaseStorageVariant_Array;
604
static int ett_CDbColId;
605
static int ett_GUID;
606
static int ett_CDbProp;
607
static int ett_CDbPropSet;
608
static int ett_CDbPropSet_Array;
609
static int ett_CRestriction;
610
static int ett_CNodeRestriction;
611
static int ett_CPropertyRestriction;
612
static int ett_CCoercionRestriction;
613
static int ett_CContentRestriction;
614
static int ett_RANGEBOUNDARY;
615
static int ett_CRangeCategSpec;
616
static int ett_CCategSpec;
617
static int ett_CAggregSpec;
618
static int ett_CAggregSet;
619
static int ett_CCategorizationSpec;
620
static int ett_CAggregSortKey;
621
static int ett_CSortAggregSet;
622
static int ett_CInGroupSortAggregSet;
623
static int ett_CInGroupSortAggregSets;
624
static int ett_CRowsetProperties;
625
static int ett_CFullPropSpec;
626
static int ett_CPidMapper;
627
static int ett_CSort;
628
static int ett_CSortSet;
629
static int ett_CNatLanguageRestriction;
630
static int ett_CColumnGroup;
631
static int ett_CColumnGroupArray;
632
static int ett_LCID;
633
static int ett_CTableColumn;
634
static int ett_Array;
635
static int ett_SeekDescription;
636
static int ett_CRowsSeekNext;
637
static int ett_CRowsSeekAt;
638
static int ett_CRowsSeekAtRatio;
639
static int ett_CRowsSeekByBookmark;
640
static int ett_GetRowsRow;
641
static int ett_GetRowsColumn;
642
static int ett_CRowVariant;
643
static int ett_CRowVariant_Vector;
644
static int ett_mswsp_bool_options;
645
static int ett_mswsp_uin32_array;
646
static int ett_mswsp_msg_padding;
647
static int ett_mswsp_msg_creusewhere;
648
649
static struct vtype_data *vType_get_type(uint16_t t);
650
651
/* conversation related data */
652
struct rows_data {
653
  uint32_t ulclientbase;
654
  uint32_t cbreserved;
655
};
656
657
658
struct message_data {
659
  uint32_t fid;
660
  unsigned frame;
661
  uint16_t msg_id;
662
  bool is_request;
663
  int smb_level;
664
  union {
665
    struct CPMSetBindingsIn bindingsin;/* CPMBindingIn request */
666
    struct rows_data rowsin; /*CPMGetRowsIn request*/
667
    uint32_t version; /*CPMConnectIn request/response */
668
  } content;
669
};
670
671
struct mswsp_ct {
672
  GSList *GSL_message_data;
673
};
674
675
static int msg_data_find(struct message_data *a, struct message_data *b)
676
0
{
677
0
  if (a->fid == b->fid
678
0
    && a->frame == b->frame
679
0
    && a->msg_id == b->msg_id
680
0
    && a->smb_level == b->smb_level
681
0
    && a->is_request == b->is_request) {
682
0
    return 0;
683
0
  }
684
0
  return 1;
685
0
}
686
static  smb_fid_info_t *find_fid_info(smb_info_t *si)
687
32
{
688
32
  smb_fid_info_t *fid_info = NULL;
689
32
  smb_transact_info_t *tri = (smb_transact_info_t *)((si->sip && (si->sip->extra_info_type == SMB_EI_TRI)) ? si->sip->extra_info : NULL);
690
32
  GSList *iter;
691
32
  uint32_t fid = 0;
692
693
32
  if (tri == NULL) {
694
    /* fallback to try search visited RWINFO (for AndX request/response) */
695
32
    if (si->sip && (si->sip->extra_info_type == SMB_EI_RWINFO)) {
696
31
      fid = si->sip->fid;
697
31
    }
698
32
  } else {
699
0
    fid = tri->fid;
700
0
  }
701
702
703
32
  if (!fid) {
704
4
    return NULL;
705
4
  }
706
47
  for (iter = si->ct->GSL_fid_info; iter; iter = iter->next) {
707
19
    smb_fid_info_t *info = (smb_fid_info_t *)iter->data;
708
19
    if ((info->tid == si->tid) && (info->fid == fid)) {
709
0
      fid_info = info;
710
0
      break;
711
0
    }
712
19
  }
713
28
  return fid_info;
714
32
}
715
716
static bool get_fid_and_frame(packet_info *pinfo, uint32_t *fid, unsigned *frame,
717
                void *data)
718
0
{
719
0
  bool result = true;
720
0
  int *p_smb_level = (int*)p_get_proto_data(wmem_file_scope(), pinfo, proto_mswsp, 0);
721
0
  if (!p_smb_level) {
722
0
    return false;
723
0
  }
724
0
  *frame = pinfo->num;
725
0
  if (*p_smb_level == SMB1) {
726
0
    smb_info_t *si = (smb_info_t*)data;
727
0
    smb_fid_info_t *info;
728
0
    info = find_fid_info(si);
729
0
    if (!info) {
730
0
      return false;
731
0
    }
732
0
    *fid = info->fid;
733
0
  } else {
734
0
    smb2_info_t *si2 = (smb2_info_t*)data;
735
0
    uint32_t    open_frame = 0, close_frame = 0;
736
0
    char       *fid_name = NULL;
737
0
    if (si2->saved) {
738
0
      dcerpc_fetch_polhnd_data(&si2->saved->policy_hnd, &fid_name, NULL, &open_frame, &close_frame, pinfo->num);
739
0
      *fid = open_frame;
740
0
    } else {
741
0
      result = false;
742
0
    }
743
0
  }
744
0
  return result;
745
0
}
746
747
static struct message_data *find_or_create_message_data(struct mswsp_ct *conv_data, packet_info *pinfo, uint16_t msg_id, bool is_request, void *data)
748
0
{
749
0
  struct message_data to_find;
750
0
  struct message_data* msg_data = NULL;
751
0
  GSList *result = NULL;
752
0
  int *p_smb_level = (int*)p_get_proto_data(wmem_file_scope(), pinfo, proto_mswsp, 0);
753
0
  to_find.is_request = is_request;
754
0
  to_find.msg_id = msg_id;
755
0
  to_find.smb_level = *p_smb_level;
756
0
  if (!get_fid_and_frame(pinfo, &to_find.fid, &to_find.frame, data) || !conv_data) {
757
0
    return msg_data;
758
0
  }
759
0
  result = g_slist_find_custom(conv_data->GSL_message_data,
760
0
                 &to_find, (GCompareFunc)msg_data_find);
761
0
  if (!result) {
762
0
    msg_data = wmem_new(wmem_file_scope(), struct message_data);
763
0
    *msg_data = to_find;
764
0
    conv_data->GSL_message_data = g_slist_prepend(conv_data->GSL_message_data, msg_data);
765
0
  } else {
766
0
    msg_data = (struct message_data*)result->data;
767
0
  }
768
0
  return msg_data;
769
0
}
770
771
static struct mswsp_ct *get_create_converstation_data(packet_info *pinfo)
772
0
{
773
0
  struct mswsp_ct *ct = NULL;
774
0
  conversation_t *conversation;
775
776
0
  conversation = find_or_create_conversation(pinfo);
777
0
  if (!conversation) {
778
0
    return NULL;
779
0
  }
780
0
  ct = (struct mswsp_ct*)conversation_get_proto_data(conversation, proto_mswsp);
781
0
  if (!ct) {
782
0
    ct = wmem_new(wmem_file_scope(), struct mswsp_ct);
783
0
    ct->GSL_message_data = NULL;
784
0
    conversation_add_proto_data(conversation, proto_mswsp, ct);
785
0
  }
786
787
0
  return ct;
788
0
}
789
790
static struct message_data *
791
find_matching_request_by_fid(struct mswsp_ct *ct, packet_info *pinfo, uint32_t msg, bool in, void *private_data)
792
0
{
793
0
  uint32_t fid = 0;
794
0
  unsigned frame = 0;
795
0
  GSList *iter;
796
0
  int *p_smb_level = (int*)p_get_proto_data(wmem_file_scope(), pinfo, proto_mswsp, 0);
797
798
0
  struct message_data *result = NULL;
799
0
  get_fid_and_frame(pinfo, &fid, &frame, private_data);
800
0
  for (iter = ct->GSL_message_data; iter; iter = iter->next) {
801
0
    struct message_data* data = (struct message_data*)iter->data;
802
0
    if (data->frame < frame && data->fid == fid && data->is_request == in
803
0
      && data->msg_id == msg && data->smb_level == *p_smb_level) {
804
0
      result = data;
805
0
      break;
806
0
    }
807
0
  }
808
0
  return result;
809
0
}
810
811
static struct CPMSetBindingsIn *
812
find_binding_msg_data(struct mswsp_ct *ct, packet_info *pinfo, void *private_data)
813
0
{
814
0
  struct CPMSetBindingsIn *result = NULL;
815
0
  struct message_data *data = find_matching_request_by_fid(ct, pinfo, 0xD0, true, private_data);
816
0
  if (data) {
817
0
    result = &data->content.bindingsin;
818
0
  }
819
0
  return result;
820
0
}
821
822
static struct rows_data *
823
find_rowsin_msg_data(struct mswsp_ct *ct, packet_info *pinfo, void *private_data)
824
0
{
825
0
  struct rows_data *result = NULL;
826
0
  struct message_data *data = find_matching_request_by_fid(ct, pinfo, 0xCC, true, private_data);
827
0
  if (data) {
828
0
    result = &data->content.rowsin;
829
0
  }
830
0
  return result;
831
0
}
832
833
static bool is_64bit_mode(struct mswsp_ct *ct, packet_info *pinfo, bool *result, void *private_data)
834
0
{
835
0
  uint32_t client_ver = 0;
836
0
  uint32_t server_ver = 0;
837
0
  struct message_data *data = find_matching_request_by_fid(ct, pinfo, 0xC8,
838
0
                true, private_data);
839
0
  if (data) {
840
0
    client_ver = data->content.version;
841
0
    data = find_matching_request_by_fid(ct, pinfo, 0xC8, false, private_data);
842
0
    if (data) {
843
0
      server_ver = data->content.version;
844
0
      *result = (server_ver & 0xffff0000) && (client_ver & 0xffff0000);
845
0
      return true;
846
0
    }
847
0
  }
848
0
  return false;
849
0
}
850
851
#define eSequential     0x00000001
852
#define eLocateable     0x00000003
853
#define eScrollable     0x00000007
854
14
#define eAsynchronous     0x00000008
855
14
#define eFirstRows      0x00000080
856
14
#define eHoldRows     0x00000200
857
14
#define eChaptered      0x00000800
858
14
#define eUseCI        0x00001000
859
14
#define eDeferTrimming      0x00002000
860
14
#define eEnableRowsetEvents   0x00800000
861
14
#define eDoNotComputeExpensiveProps 0x00400000
862
863
static const value_string cursor_vals[] = {
864
  { eSequential, "eSequential" },
865
  { eLocateable, "eLocateable" },
866
  { eScrollable, "eScrollable" },
867
  { 0, NULL }
868
};
869
870
871
872
/******************************************************************************/
873
struct GuidPropertySet {
874
  e_guid_t guid;
875
  const char *def;
876
  const char *desc;
877
  const value_string *id_map;
878
};
879
880
/* 2.2.1.31.1 */
881
static const value_string DBPROPSET_FSCIFRMWRK_EXT_IDS[] = {
882
  {0x02, "DBPROP_CI_CATALOG_NAME"},
883
  {0x03, "DBPROP_CI_INCLUDE_SCOPES"},
884
  {0x04, "DBPROP_CI_SCOPE_FLAGS"},
885
  {0x07, "DBPROP_CI_QUERY_TYPE"},
886
  {0, NULL}
887
};
888
889
static const value_string DBPROPSET_QUERYEXT_IDS[] = {
890
  {0x02, "DBPROP_USECONTENTINDEX"},
891
  {0x03, "DBPROP_DEFERNONINDEXEDTRIMMING"},
892
  {0x04, "DBPROP_USEEXTENDEDDBTYPES"},
893
  {0x05, "DBPROP_IGNORENOISEONLYCLAUSES"},
894
  {0x06, "DBPROP_GENERICOPTIONS_STRING"},
895
  {0x07, "DBPROP_FIRSTROWS"},
896
  {0x08, "DBPROP_DEFERCATALOGVERIFICATION"},
897
  {0x0a, "DBPROP_GENERATEPARSETREE"},
898
  {0x0c, "DBPROP_FREETEXTANYTERM"},
899
  {0x0d, "DBPROP_FREETEXTUSESTEMMING"},
900
  {0x0e, "DBPROP_IGNORESBRI"},
901
  {0x10, "DBPROP_ENABLEROWSETEVENTS"},
902
  {0, NULL}
903
};
904
905
static const value_string DBPROPSET_CIFRMWRKCORE_EXT_IDS[] = {
906
  {0x02, "DBPROP_MACHINE"},
907
  {0x03, "DBPROP_CLIENT_CLSID"},
908
  {0, NULL}
909
};
910
911
static const value_string DBPROPSET_MSIDXS_ROWSETEXT_IDS[] = {
912
  {0x02, "MSIDXSPROP_ROWSETQUERYSTATUS"},
913
  {0x03, "MSIDXSPROP_COMMAND_LOCALE_STRING"},
914
  {0x04, "MSIDXSPROP_QUERY_RESTRICTION"},
915
  {0x05, "MSIDXSPROP_PARSE_TREE"},
916
  {0x06, "MSIDXSPROP_MAX_RANK"},
917
  {0x07, "MSIDXSPROP_RESULTS_FOUND"},
918
  {0, NULL}
919
};
920
921
/* 2.2.5.1 */
922
static const value_string QueryGuid_IDS[] = {
923
  {0x02, "RankVector"},
924
  {0x03, "System.Search.Rank"},
925
  {0x04, "System.Search.HitCount"},
926
  {0x05, "System.Search.EntryID"},
927
  {0x06, "All"},
928
  {0x08, "System.Search.ReverseFileName"},
929
  {0x09, "System.ItemURL"},
930
  {0x0a, "System.ContentUrl"},
931
  {0, NULL}
932
};
933
934
/* 2.2.5.2 */
935
static const value_string StorageGuid_IDS[] = {
936
  {0x02, "System.ItemFolderNameDisplay"},
937
  {0x03, "ClassId"},
938
  {0x04, "System.ItemTypeText"},
939
  {0x08, "FileIndex"},
940
  {0x09, "USN"},
941
  {0x0a, "System.ItemNameDisplay"},
942
  {0x0b, "Path"},
943
  {0x0c, "System.Size"},
944
  {0x0d, "System.FileAttributes"},
945
  {0x0e, "System.DateModified"},
946
  {0x0f, "System.DateCreated"},
947
  {0x10, "System.DateAccessed"},
948
  {0x12, "AllocSize"},
949
  {0x13, "System.Search.Contents"},
950
  {0x14, "ShortFilename"},
951
  {0x15, "System.FileFRN"},
952
  {0x16, "Scope"},
953
  {0, NULL}
954
};
955
956
static const value_string DocPropSetGuid_IDS[] = {
957
  {0x02, "System.Title"},
958
  {0x03, "System.Subject"},
959
  {0x04, "System.Author"},
960
  {0x05, "System.Keywords"},
961
  {0x06, "System.Comment"},
962
  {0x07, "DocTemplate"},
963
  {0x08, "System.Document.LastAuthor"},
964
  {0x09, "System.Document.RevisionNumber"},
965
  {0x0a, "System.Document.TotalEditTime"},
966
  {0x0b, "System.Document.DatePrinted"},
967
  {0x0c, "System.Document.DateCreated"},
968
  {0x0d, "System.Document.DateSaved"},
969
  {0x0e, "System.Document.PageCount"},
970
  {0x0f, "System.Document.WordCount"},
971
  {0x10, "System.Document.CharacterCount"},
972
  {0x11, "DocThumbnail"},
973
  {0x12, "System.ApplicationName"},
974
  {0, NULL}
975
};
976
977
static const value_string ShellDetails_IDS[] = {
978
  { 5, "System.ComputerName"},
979
  { 8, "System.ItemPathDisplayNarrow"},
980
  { 9, "PerceivedType"},
981
  {11, "System.ItemType"},
982
  {12, "FileCount"},
983
  {14, "TotalFileSize"},
984
  {24, "System.ParsingName"},
985
  {25, "System.SFGAOFlags"},
986
  {0, NULL}
987
};
988
989
static const value_string PropSet1_IDS[] = {
990
  {100, "System.ThumbnailCacheId"},
991
  {0, NULL}
992
};
993
994
static const value_string PropSet2_IDS[] = {
995
  {3, "System.Kind"},
996
  {0, NULL}
997
};
998
999
static const value_string MusicGuid_IDS[] = {
1000
  {0x2, "System.Music.Artist"},
1001
  {0x4, "System.Music.AlbumTitle"},
1002
  {0x5, "System.Media.Year"},
1003
  {0x7, "System.Music.TrackNumber"},
1004
  {0xb, "System.Music.Genre"},
1005
  {0xc, "System.Music.Lyrics"},
1006
  {0xd, "System.Music.AlbumArtist"},
1007
  {0x21, "System.Music.ContentGroupDescription"},
1008
  {0x22, "System.Music.InitialKey"},
1009
  {0x23, "System.Music.BeatsPerMinute"},
1010
  {0x24, "System.Music.Conductor"},
1011
  {0x25, "System.Music.PartOfSet"},
1012
  {0x26, "System.Media.SubTitle"},
1013
  {0x27, "System.Music.Mood"},
1014
  {0x64, "System.Music.AlbumID"},
1015
  {0, NULL}
1016
};
1017
1018
static const value_string PropSet3_IDS[] = {
1019
  { 2, "System.Message.BccAddress"},
1020
  { 3, "System.Message.BccName"},
1021
  { 4, "System.Message.CcAddress"},
1022
  { 5, "System.Message.CcName"},
1023
  { 6, "System.ItemFolderPathDisplay"},
1024
  { 7, "System.ItemPathDisplay"},
1025
  { 9, "System.Communication.AccountName"},
1026
  {10, "System.IsRead"},
1027
  {11, "System.Importance"},
1028
  {12, "System.FlagStatus"},
1029
  {13, "System.Message.FromAddress"},
1030
  {14, "System.Message.FromName"},
1031
  {15, "System.Message.Store"},
1032
  {16, "System.Message.ToAddress"},
1033
  {17, "System.Message.ToName"},
1034
  {18, "System.Contact.WebPage"},
1035
  {19, "System.Message.DateSent"},
1036
  {20, "System.Message.DateReceived"},
1037
  {21, "System.Message.AttachmentNames"},
1038
  {0, NULL}
1039
};
1040
1041
static const value_string PropSet4_IDS[] = {
1042
  {100, "System.ItemFolderPathDisplayNarrow"},
1043
  {0, NULL}
1044
};
1045
1046
static const value_string PropSet5_IDS[] = {
1047
  {100, "System.Contact.FullName"},
1048
  {0, NULL}
1049
};
1050
1051
static const value_string PropSet6_IDS[] = {
1052
  {100, "System.ItemAuthors"},
1053
  {0, NULL}
1054
};
1055
1056
static const value_string PropSet7_IDS[] = {
1057
  {2, "System.Shell.OmitFromView"},
1058
  {0, NULL}
1059
};
1060
1061
static const value_string PropSet8_IDS[] = {
1062
  {2, "System.Shell.SFGAOFlagsStrings"},
1063
  {3, "System.Link.TargetSFGAOFlagsStrings"},
1064
  {0, NULL}
1065
};
1066
1067
static const value_string PropSet9_IDS[] = {
1068
  {100, "System.ItemDate"},
1069
  {0, NULL}
1070
};
1071
1072
static const value_string PropSet10_IDS[] = {
1073
  { 5, "System.MIMEType"},
1074
  { 8, "System.Search.GatherTime"},
1075
  { 9, "System.Search.AccessCount"},
1076
  {11, "System.Search.LastIndexedTotalTime"},
1077
  {0, NULL}
1078
};
1079
1080
static const value_string PropSet11_IDS[] = {
1081
  {5, "System.Priority"},
1082
  {8, "System.Message.HasAttachments"},
1083
  {0, NULL}
1084
};
1085
1086
static const value_string DocCharacter_IDS[] = {
1087
  {2, "System.Search.Autosummary"},
1088
  {0, NULL}
1089
};
1090
1091
static const value_string PropSet12_IDS[] = {
1092
  {100, "System.IsDeleted"},
1093
  {0, NULL}
1094
};
1095
1096
static const value_string PropSet13_IDS[] = {
1097
  {100, "System.IsAttachment"},
1098
  {0, NULL}
1099
};
1100
1101
static const value_string PropSet14_IDS[] = {
1102
  {100, "System.Message.ConversationID"},
1103
  {101, "System.Message.ConversationIndex"},
1104
  {0, NULL}
1105
};
1106
1107
static const value_string DocPropSetGuid2_IDS[] = {
1108
  {0x02, "System.Category"},
1109
  {0x03, "System.Document.PresentationFormat"},
1110
  {0x04, "System.Document.ByteCount"},
1111
  {0x05, "System.Document.LineCount"},
1112
  {0x06, "System.Document.ParagraphCount"},
1113
  {0x07, "System.Document.SlideCount"},
1114
  {0x08, "DocNoteCount"},
1115
  {0x09, "System.Document.HiddenSlideCount"},
1116
  {0x0D, "DocPartTitles"},
1117
  {0x0E, "System.Document.Manager"},
1118
  {0x0F, "System.Company"},
1119
  {0x1A, "System.ContentType"},
1120
  {0x1B, "System.ContentStatus"},
1121
  {0x1C, "System.Language"},
1122
  {0x1D, "System.Document.Version"},
1123
  {0, NULL}
1124
};
1125
1126
static const value_string SystemContact_IDS[] = {
1127
  { 6, "System.Contact.JobTitle"},
1128
  { 7, "System.Contact.OfficeLocation"},
1129
  {20, "System.Contact.HomeTelephone"},
1130
  {25, "System.Contact.PrimaryTelephone"},
1131
  {35, "System.Contact.MobileTelephone"},
1132
  {47, "System.Contact.Birthday"},
1133
  {48, "System.Contact.PrimaryEmailAddress"},
1134
  {65, "System.Contact.HomeAddressCity"},
1135
  {69, "System.Contact.PersonalTitle"},
1136
  {71, "System.Contact.MiddleName"},
1137
  {73, "System.Contact.Suffix"},
1138
  {74, "System.Contact.NickName"},
1139
  {0, NULL}
1140
};
1141
1142
static const value_string PropSet15_IDS[] = {
1143
  {0x64, "System.Calendar.IsOnline"},
1144
  {0,NULL}
1145
};
1146
1147
static const value_string PropSet16_IDS[] = {
1148
  {0x64, "System.Contact.OtherAddressStreet"},
1149
  {0,NULL}
1150
};
1151
1152
static const value_string PropSet17_IDS[] = {
1153
  {0x2, "System.DRM.IsProtected"},
1154
  {0,NULL}
1155
};
1156
1157
static const value_string PropSet18_IDS[] = {
1158
  {0x64, "System.Calendar.OptionalAttendeeNames"},
1159
  {0,NULL}
1160
};
1161
1162
static const value_string PropSet19_IDS[] = {
1163
  {0x64, "System.Calendar.ShowTimeAs"},
1164
  {0,NULL}
1165
};
1166
1167
static const value_string PropSet20_IDS[] = {
1168
  {0x64, "System.ParentalRatingReason"},
1169
  {0,NULL}
1170
};
1171
1172
static const value_string PropSet21_IDS[] = {
1173
  {0x64, "System.Project"},
1174
  {0,NULL}
1175
};
1176
1177
static const value_string PropSet22_IDS[] = {
1178
  {0x64, "System.Contact.OtherAddressCountry"},
1179
  {0,NULL}
1180
};
1181
1182
static const value_string PropSet23_IDS[] = {
1183
  {0x9, "System.Status"},
1184
  {0,NULL}
1185
};
1186
1187
static const value_string PropSet24_IDS[] = {
1188
  {0x64, "System.DateArchived"},
1189
  {0,NULL}
1190
};
1191
1192
static const value_string PropSet25_IDS[] = {
1193
  {0x64, "System.Contact.CarTelephone"},
1194
  {0,NULL}
1195
};
1196
1197
static const value_string PropSet26_IDS[] = {
1198
  {0x64, "System.Calendar.ResponseStatus"},
1199
  {0,NULL}
1200
};
1201
1202
static const value_string PropSet27_IDS[] = {
1203
  {0x64, "System.Task.BillingInformation"},
1204
  {0,NULL}
1205
};
1206
1207
static const value_string PropSet28_IDS[] = {
1208
  {0x64, "System.Media.AverageLevel"},
1209
  {0,NULL}
1210
};
1211
1212
static const value_string PropSet29_IDS[] = {
1213
  {0x64, "System.Contact.SpouseName"},
1214
  {0,NULL}
1215
};
1216
1217
static const value_string PropSet30_IDS[] = {
1218
  {0x64, "System.Document.DocumentID"},
1219
  {0,NULL}
1220
};
1221
1222
static const value_string PropSet31_IDS[] = {
1223
  {0x64, "System.RecordedTV.NetworkAffiliation"},
1224
  {0,NULL}
1225
};
1226
1227
static const value_string PropSet32_IDS[] = {
1228
  {0x64, "System.PriorityText"},
1229
  {0,NULL}
1230
};
1231
1232
static const value_string PropSet33_IDS[] = {
1233
  {0x64, "System.Contact.Children"},
1234
  {0,NULL}
1235
};
1236
1237
static const value_string PropSet34_IDS[] = {
1238
  {0x64, "System.RecordedTV.RecordingTime"},
1239
  {0,NULL}
1240
};
1241
1242
static const value_string PropSet35_IDS[] = {
1243
  {0x64, "System.FlagColorText"},
1244
  {0,NULL}
1245
};
1246
1247
static const value_string PropSet36_IDS[] = {
1248
  {0x64, "System.Contact.OtherAddressPostalCode"},
1249
  {0,NULL}
1250
};
1251
1252
static const value_string PropSet37_IDS[] = {
1253
  {0x64, "System.Photo.SharpnessText"},
1254
  {0,NULL}
1255
};
1256
1257
static const value_string PropSet38_IDS[] = {
1258
  {0x64, "System.Contact.OtherAddress"},
1259
  {0,NULL}
1260
};
1261
1262
static const value_string PropSet40_IDS[] = {
1263
  {0x64, "System.Contact.BusinessAddress"},
1264
  {0,NULL}
1265
};
1266
1267
static const value_string PropSet41_IDS[] = {
1268
  {0x64, "System.IsIncomplete"},
1269
  {0,NULL}
1270
};
1271
1272
static const value_string PropSet42_IDS[] = {
1273
  {0x64, "System.Contact.EmailAddress2"},
1274
  {0,NULL}
1275
};
1276
1277
static const value_string PropSet43_IDS[] = {
1278
  {0x64, "System.Contact.BusinessTelephone"},
1279
  {0,NULL}
1280
};
1281
1282
static const value_string PropSet45_IDS[] = {
1283
  {0x64, "System.Image.CompressionText"},
1284
  {0,NULL}
1285
};
1286
1287
static const value_string PropSet46_IDS[] = {
1288
  {0x64, "System.Contact.HomeAddressState"},
1289
  {0,NULL}
1290
};
1291
1292
static const value_string PropSet47_IDS[] = {
1293
  {0x64, "System.Contact.EmailAddress3"},
1294
  {0,NULL}
1295
};
1296
1297
static const value_string PropSet48_IDS[] = {
1298
  {0x64, "System.Communication.FollowupIconIndex"},
1299
  {0,NULL}
1300
};
1301
1302
static const value_string PropSet49_IDS[] = {
1303
  {0x64, "System.Photo.TagViewAggregate"},
1304
  {0,NULL}
1305
};
1306
1307
static const value_string PropSet50_IDS[] = {
1308
  {0x64, "System.Search.Store"},
1309
  {0,NULL}
1310
};
1311
1312
static const value_string PropSet51_IDS[] = {
1313
  {0x64, "System.FileName"},
1314
  {0,NULL}
1315
};
1316
1317
static const value_string PropSet52_IDS[] = {
1318
  {0x64, "System.Contact.HomeAddressStreet"},
1319
  {0,NULL}
1320
};
1321
1322
static const value_string PropSet53_IDS[] = {
1323
  {0x64, "System.Contact.HomeAddressPostalCode"},
1324
  {0,NULL}
1325
};
1326
1327
static const value_string PropSet54_IDS[] = {
1328
  {0x64, "System.Contact.BusinessHomePage"},
1329
  {0,NULL}
1330
};
1331
1332
static const value_string PropSet55_IDS[] = {
1333
  {0x64, "System.Calendar.RequiredAttendeeNames"},
1334
  {0,NULL}
1335
};
1336
1337
static const value_string PropSet56_IDS[] = {
1338
  {0x64, "System.FlagColor"},
1339
  {0,NULL}
1340
};
1341
1342
static const value_string PropSet57_IDS[] = {
1343
  {0x64, "System.Message.ProofInProgress"},
1344
  {0,NULL}
1345
};
1346
1347
static const value_string PropSet58_IDS[] = {
1348
  {0x64, "System.Contact.PrimaryAddressPostOfficeBox"},
1349
  {0,NULL}
1350
};
1351
1352
static const value_string PropSet59_IDS[] = {
1353
  {0x64, "System.Calendar.IsRecurring"},
1354
  {0,NULL}
1355
};
1356
1357
static const value_string PropSet60_IDS[] = {
1358
  {0x64, "System.Contact.HomeAddress"},
1359
  {0,NULL}
1360
};
1361
1362
static const value_string PropSet61_IDS[] = {
1363
  {0x64, "System.Photo.MaxAperture"},
1364
  {0,NULL}
1365
};
1366
1367
static const value_string PropSet62_IDS[] = {
1368
  {0x64, "System.ItemParticipants"},
1369
  {0,NULL}
1370
};
1371
1372
static const value_string PropSet63_IDS[] = {
1373
  {0x64, "System.Media.DateReleased"},
1374
  {0,NULL}
1375
};
1376
1377
static const value_string PropSet64_IDS[] = {
1378
  {0x64, "System.Journal.Contacts"},
1379
  {0,NULL}
1380
};
1381
1382
static const value_string PropSet65_IDS[] = {
1383
  {0x64, "System.Calendar.Resources"},
1384
  {0,NULL}
1385
};
1386
1387
static const value_string PropSet66_IDS[] = {
1388
  {0x67, "System.Message.MessageClass"},
1389
  {0,NULL}
1390
};
1391
1392
static const value_string PropSet67_IDS[] = {
1393
  {0x9, "System.Rating"},
1394
  {0xb, "System.Copyright"},
1395
  {0xd, "System.Media.ClassPrimaryID"},
1396
  {0xe, "System.Media.ClassSecondaryID"},
1397
  {0xf, "System.Media.DVDID"},
1398
  {0x10, "System.Media.MCDI"},
1399
  {0x11, "System.Media.MetadataContentProvider"},
1400
  {0x12, "System.Media.ContentDistributor"},
1401
  {0x13, "System.Music.Composer"},
1402
  {0x14, "System.Video.Director"},
1403
  {0x15, "System.ParentalRating"},
1404
  {0x16, "System.Media.Producer"},
1405
  {0x17, "System.Media.Writer"},
1406
  {0x18, "System.Media.CollectionGroupID"},
1407
  {0x19, "System.Media.CollectionID"},
1408
  {0x1a, "System.Media.ContentID"},
1409
  {0x1b, "System.Media.CreatorApplication"},
1410
  {0x1c, "System.Media.CreatorApplicationVersion"},
1411
  {0x1e, "System.Media.Publisher"},
1412
  {0x1f, "System.Music.Period"},
1413
  {0x22, "System.Media.UserWebUrl"},
1414
  {0x23, "System.Media.UniqueFileIdentifier"},
1415
  {0x24, "System.Media.EncodedBy"},
1416
  {0x26, "System.Media.ProtectionType"},
1417
  {0x27, "System.Media.ProviderRating"},
1418
  {0x28, "System.Media.ProviderStyle"},
1419
  {0x29, "System.Media.UserNoAutoInfo"},
1420
  {0,NULL}
1421
};
1422
1423
static const value_string PropSet68_IDS[] = {
1424
  {0x64, "System.Calendar.OrganizerName"},
1425
  {0,NULL}
1426
};
1427
1428
static const value_string PropSet69_IDS[] = {
1429
  {0x64, "System.Photo.PeopleNames"},
1430
  {0,NULL}
1431
};
1432
1433
static const value_string PropSet70_IDS[] = {
1434
  {0x3, "System.Media.Duration"},
1435
  {0x4, "System.Audio.EncodingBitrate"},
1436
  {0x5, "System.Audio.SampleRate"},
1437
  {0x6, "System.Audio.SampleSize"},
1438
  {0x7, "System.Audio.ChannelCount"},
1439
  {0,NULL}
1440
};
1441
1442
static const value_string PropSet71_IDS[] = {
1443
  {0x64, "System.FileExtension"},
1444
  {0,NULL}
1445
};
1446
1447
static const value_string PropSet72_IDS[] = {
1448
  {0x103, "System.Image.Compression"},
1449
  {0x10f, "System.Photo.CameraManufacturer"},
1450
  {0x110, "System.Photo.CameraModel"},
1451
  {0x112, "System.Photo.Orientation"},
1452
  {0x131, "System.SoftwareUsed"},
1453
  {0x4748, "System.Photo.Event"},
1454
  {0x4752, "System.DateImported"},
1455
  {0x829a, "System.Photo.ExposureTime"},
1456
  {0x829d, "System.Photo.FNumber"},
1457
  {0x8822, "System.Photo.ExposureProgram"},
1458
  {0x8827, "System.Photo.ISOSpeed"},
1459
  {0x9003, "System.Photo.DateTaken"},
1460
  {0x9201, "System.Photo.ShutterSpeed"},
1461
  {0x9202, "System.Photo.Aperture"},
1462
  {0x9204, "System.Photo.ExposureBias"},
1463
  {0x9206, "System.Photo.SubjectDistance"},
1464
  {0x9207, "System.Photo.MeteringMode"},
1465
  {0x9208, "System.Photo.LightSource"},
1466
  {0x9209, "System.Photo.Flash"},
1467
  {0x920a, "System.Photo.FocalLength"},
1468
  {0,NULL}
1469
};
1470
1471
static const value_string PropSet73_IDS[] = {
1472
  {0x64, "System.Contact.TTYTDDTelephone"},
1473
  {0,NULL}
1474
};
1475
1476
static const value_string PropSet74_IDS[] = {
1477
  {0x64, "System.Photo.PhotometricInterpretationText"},
1478
  {0,NULL}
1479
};
1480
1481
static const value_string PropSet75_IDS[] = {
1482
  {0x64, "System.Calendar.OptionalAttendeeAddresses"},
1483
  {0,NULL}
1484
};
1485
1486
static const value_string PropSet76_IDS[] = {
1487
  {0x64, "System.Calendar.ReminderTime"},
1488
  {0,NULL}
1489
};
1490
1491
static const value_string PropSet77_IDS[] = {
1492
  {0x64, "System.Calendar.RequiredAttendeeAddresses"},
1493
  {0,NULL}
1494
};
1495
1496
static const value_string PropSet78_IDS[] = {
1497
  {0x64, "System.Calendar.OrganizerAddress"},
1498
  {0,NULL}
1499
};
1500
1501
static const value_string PropSet79_IDS[] = {
1502
  {0x2, "System.Link.TargetParsingPath"},
1503
  {0x8, "System.Link.TargetSFGAOFlags"},
1504
  {0,NULL}
1505
};
1506
1507
static const value_string PropSet80_IDS[] = {
1508
  {0x64, "System.Contact.Hobbies"},
1509
  {0,NULL}
1510
};
1511
1512
static const value_string PropSet81_IDS[] = {
1513
  {0x64, "System.Contact.HomeAddressPostOfficeBox"},
1514
  {0,NULL}
1515
};
1516
1517
static const value_string PropSet82_IDS[] = {
1518
  {0x64, "System.Contact.CompanyMainTelephone"},
1519
  {0,NULL}
1520
};
1521
1522
static const value_string PropSet83_IDS[] = {
1523
  {0x64, "System.IsFlagged"},
1524
  {0,NULL}
1525
};
1526
1527
static const value_string PropSet84_IDS[] = {
1528
  {0x64, "System.Contact.FirstName"},
1529
  {0,NULL}
1530
};
1531
1532
static const value_string PropSet85_IDS[] = {
1533
  {0xa, "System.IsEncrypted"},
1534
  {0,NULL}
1535
};
1536
1537
static const value_string PropSet86_IDS[] = {
1538
  {0x64, "System.Calendar.Duration"},
1539
  {0,NULL}
1540
};
1541
1542
static const value_string PropSet87_IDS[] = {
1543
  {0x64, "System.Contact.PrimaryAddressCity"},
1544
  {0,NULL}
1545
};
1546
1547
static const value_string PropSet88_IDS[] = {
1548
  {0x64, "System.Contact.OtherAddressPostOfficeBox"},
1549
  {0,NULL}
1550
};
1551
1552
static const value_string PropSet89_IDS[] = {
1553
  {0x64, "System.ProviderItemID"},
1554
  {0,NULL}
1555
};
1556
1557
static const value_string PropSet90_IDS[] = {
1558
  {0x64, "System.Contact.BusinessAddressCountry"},
1559
  {0,NULL}
1560
};
1561
1562
static const value_string PropSet91_IDS[] = {
1563
  {0x64, "System.Contact.EmailName"},
1564
  {0,NULL}
1565
};
1566
1567
static const value_string PropSet92_IDS[] = {
1568
  {0x64, "System.Photo.FocalLengthInFilm"},
1569
  {0,NULL}
1570
};
1571
1572
static const value_string PropSet93_IDS[] = {
1573
  {0x64, "System.Contact.IMAddress"},
1574
  {0,NULL}
1575
};
1576
1577
static const value_string PropSet94_IDS[] = {
1578
  {0x64, "System.DateAcquired"},
1579
  {0,NULL}
1580
};
1581
1582
static const value_string PropSet95_IDS[] = {
1583
  {0x64, "System.DateCompleted"},
1584
  {0,NULL}
1585
};
1586
1587
static const value_string PropSet96_IDS[] = {
1588
  {0x64, "System.ItemName"},
1589
  {0,NULL}
1590
};
1591
1592
static const value_string PropSet97_IDS[] = {
1593
  {0x64, "System.Contact.PrimaryAddressPostalCode"},
1594
  {0,NULL}
1595
};
1596
1597
static const value_string PropSet99_IDS[] = {
1598
  {0x64, "System.Document.ClientID"},
1599
  {0,NULL}
1600
};
1601
1602
static const value_string PropSet100_IDS[] = {
1603
  {0x64, "System.Photo.ExposureProgramText"},
1604
  {0,NULL}
1605
};
1606
1607
static const value_string PropSet101_IDS[] = {
1608
  {0x64, "System.Note.ColorText"},
1609
  {0,NULL}
1610
};
1611
1612
static const value_string PropSet102_IDS[] = {
1613
  {0x64, "System.Photo.MeteringModeText"},
1614
  {0,NULL}
1615
};
1616
1617
static const value_string PropSet103_IDS[] = {
1618
  {0x2, "System.Link.TargetExtension"},
1619
  {0,NULL}
1620
};
1621
1622
static const value_string PropSet104_IDS[] = {
1623
  {0x64, "System.Contact.BusinessAddressState"},
1624
  {0,NULL}
1625
};
1626
1627
static const value_string PropSet105_IDS[] = {
1628
  {0x64, "System.Photo.OrientationText"},
1629
  {0,NULL}
1630
};
1631
1632
static const value_string PropSet106_IDS[] = {
1633
  {0x64, "System.Contact.Label"},
1634
  {0,NULL}
1635
};
1636
1637
static const value_string PropSet107_IDS[] = {
1638
  {0x64, "System.Calendar.Location"},
1639
  {0,NULL}
1640
};
1641
1642
static const value_string PropSet108_IDS[] = {
1643
  {0x64, "System.Photo.SaturationText"},
1644
  {0,NULL}
1645
};
1646
1647
static const value_string PropSet109_IDS[] = {
1648
  {0x64, "System.Message.ToDoTitle"},
1649
  {0,NULL}
1650
};
1651
1652
static const value_string PropSet110_IDS[] = {
1653
  {0x64, "System.Contact.Anniversary"},
1654
  {0,NULL}
1655
};
1656
1657
static const value_string PropSet111_IDS[] = {
1658
  {0x64, "System.Contact.FileAsName"},
1659
  {0,NULL}
1660
};
1661
1662
static const value_string PropSet112_IDS[] = {
1663
  {0x64, "System.GPS.Date"},
1664
  {0,NULL}
1665
};
1666
1667
static const value_string PropSet113_IDS[] = {
1668
  {0x64, "System.IsFlaggedComplete"},
1669
  {0,NULL}
1670
};
1671
1672
static const value_string PropSet114_IDS[] = {
1673
  {0x2, "System.Contact.JA.CompanyNamePhonetic"},
1674
  {0x3, "System.Contact.JA.FirstNamePhonetic"},
1675
  {0x4, "System.Contact.JA.LastNamePhonetic"},
1676
  {0,NULL}
1677
};
1678
1679
static const value_string PropSet115_IDS[] = {
1680
  {0x64, "System.Communication.SecurityFlags"},
1681
  {0,NULL}
1682
};
1683
1684
static const value_string PropSet116_IDS[] = {
1685
  {0x64, "System.Identity"},
1686
  {0,NULL}
1687
};
1688
1689
static const value_string PropSet117_IDS[] = {
1690
  {0x64, "System.Contact.BusinessAddressPostOfficeBox"},
1691
  {0,NULL}
1692
};
1693
1694
static const value_string PropSet118_IDS[] = {
1695
  {0x64, "System.AcquisitionID"},
1696
  {0,NULL}
1697
};
1698
1699
static const value_string PropSet119_IDS[] = {
1700
  {0x64, "System.Contact.EmailAddresses"},
1701
  {0,NULL}
1702
};
1703
1704
static const value_string PropSet120_IDS[] = {
1705
  {0x64, "System.Communication.TaskStatus"},
1706
  {0,NULL}
1707
};
1708
1709
static const value_string PropSet121_IDS[] = {
1710
  {0x64, "System.Contact.LastName"},
1711
  {0,NULL}
1712
};
1713
1714
static const value_string PropSet122_IDS[] = {
1715
  {0x64, "System.Communication.DateItemExpires"},
1716
  {0,NULL}
1717
};
1718
1719
static const value_string PropSet123_IDS[] = {
1720
  {0x64, "System.ImportanceText"},
1721
  {0,NULL}
1722
};
1723
1724
static const value_string PropSet124_IDS[] = {
1725
  {0x64, "System.Search.ContainerHash"},
1726
  {0,NULL}
1727
};
1728
1729
static const value_string PropSet125_IDS[] = {
1730
  {0x64, "System.Contact.BusinessFaxNumber"},
1731
  {0,NULL}
1732
};
1733
1734
static const value_string PropSet126_IDS[] = {
1735
  {0x2, "System.Link.TargetUrl"},
1736
  {0x1a, "System.IconIndex"},
1737
  {0,NULL}
1738
};
1739
1740
static const value_string PropSet127_IDS[] = {
1741
  {0x64, "System.RecordedTV.StationName"},
1742
  {0,NULL}
1743
};
1744
1745
static const value_string PropSet128_IDS[] = {
1746
  {0x64, "System.Task.Owner"},
1747
  {0,NULL}
1748
};
1749
1750
static const value_string PropSet129_IDS[] = {
1751
  {0x64, "System.Photo.ProgramModeText"},
1752
  {0,NULL}
1753
};
1754
1755
static const value_string PropSet130_IDS[] = {
1756
  {0x64, "System.Contact.PrimaryAddressCountry"},
1757
  {0,NULL}
1758
};
1759
1760
static const value_string PropSet131_IDS[] = {
1761
  {0x64, "System.Note.Color"},
1762
  {0,NULL}
1763
};
1764
1765
static const value_string PropSet132_IDS[] = {
1766
  {0x64, "System.Contact.OtherAddressState"},
1767
  {0,NULL}
1768
};
1769
1770
static const value_string PropSet133_IDS[] = {
1771
  {0x64, "System.Message.AttachmentContents"},
1772
  {0,NULL}
1773
};
1774
1775
static const value_string PropSet134_IDS[] = {
1776
  {0x64, "System.Communication.TaskStatusText"},
1777
  {0,NULL}
1778
};
1779
1780
static const value_string PropSet135_IDS[] = {
1781
  {0x64, "System.Communication.HeaderItem"},
1782
  {0,NULL}
1783
};
1784
1785
static const value_string PropSet136_IDS[] = {
1786
  {0x64, "System.Contact.EmailAddress"},
1787
  {0,NULL}
1788
};
1789
1790
static const value_string PropSet137_IDS[] = {
1791
  {0x64, "System.Contact.Profession"},
1792
  {0,NULL}
1793
};
1794
1795
static const value_string PropSet138_IDS[] = {
1796
  {0x64, "System.Contact.BusinessAddressPostalCode"},
1797
  {0,NULL}
1798
};
1799
1800
static const value_string PropSet139_IDS[] = {
1801
  {0x64, "System.ItemNamePrefix"},
1802
  {0,NULL}
1803
};
1804
1805
static const value_string PropSet140_IDS[] = {
1806
  {0x64, "System.Photo.DigitalZoom"},
1807
  {0,NULL}
1808
};
1809
1810
static const value_string PropSet141_IDS[] = {
1811
  {0x64, "System.SourceItem"},
1812
  {0,NULL}
1813
};
1814
1815
static const value_string PropSet142_IDS[] = {
1816
  {0x64, "System.Photo.WhiteBalance"},
1817
  {0,NULL}
1818
};
1819
1820
static const value_string PropSet143_IDS[] = {
1821
  {0x64, "System.SensitivityText"},
1822
  {0,NULL}
1823
};
1824
1825
static const value_string PropSet144_IDS[] = {
1826
  {0x64, "System.Contact.Gender"},
1827
  {0x65, "System.Contact.GenderValue"},
1828
  {0,NULL}
1829
};
1830
1831
static const value_string PropSet145_IDS[] = {
1832
  {0x64, "System.Contact.OtherAddressCity"},
1833
  {0,NULL}
1834
};
1835
1836
static const value_string PropSet146_IDS[] = {
1837
  {0x64, "System.Music.DisplayArtist"},
1838
  {0,NULL}
1839
};
1840
1841
static const value_string PropSet147_IDS[] = {
1842
  {0x64, "System.Message.SenderAddress"},
1843
  {0,NULL}
1844
};
1845
1846
static const value_string PropSet148_IDS[] = {
1847
  {0x64, "System.Contact.PrimaryAddressState"},
1848
  {0,NULL}
1849
};
1850
1851
static const value_string PropSet149_IDS[] = {
1852
  {0x64, "System.Journal.EntryType"},
1853
  {0,NULL}
1854
};
1855
1856
static const value_string PropSet150_IDS[] = {
1857
  {0x64, "System.Contact.BusinessAddressStreet"},
1858
  {0,NULL}
1859
};
1860
1861
static const value_string PropSet151_IDS[] = {
1862
  {0x4, "System.FileOwner"},
1863
  {0,NULL}
1864
};
1865
1866
static const value_string PropSet152_IDS[] = {
1867
  {0x64, "System.Contact.HomeAddressCountry"},
1868
  {0,NULL}
1869
};
1870
1871
static const value_string PropSet153_IDS[] = {
1872
  {0x64, "System.Task.CompletionStatus"},
1873
  {0,NULL}
1874
};
1875
1876
static const value_string PropSet154_IDS[] = {
1877
  {0x10, "System.Software.DateLastUsed"},
1878
  {0,NULL}
1879
};
1880
1881
static const value_string PropSet155_IDS[] = {
1882
  {0x64, "System.Contact.Department"},
1883
  {0,NULL}
1884
};
1885
1886
static const value_string PropSet156_IDS[] = {
1887
  {0x64, "System.Calendar.ShowTimeAsText"},
1888
  {0,NULL}
1889
};
1890
1891
static const value_string PropSet157_IDS[] = {
1892
  {0x64, "System.Sensitivity"},
1893
  {0,NULL}
1894
};
1895
1896
static const value_string PropSet158_IDS[] = {
1897
  {0x64, "System.RecordedTV.OriginalBroadcastDate"},
1898
  {0,NULL}
1899
};
1900
1901
static const value_string PropSet159_IDS[] = {
1902
  {0x64, "System.Music.IsCompilation"},
1903
  {0,NULL}
1904
};
1905
1906
static const value_string PropSet160_IDS[] = {
1907
  {0x64, "System.DueDate"},
1908
  {0,NULL}
1909
};
1910
1911
static const value_string PropSet161_IDS[] = {
1912
  {0x3, "System.FileDescription"},
1913
  {0x6, "System.OriginalFileName"},
1914
  {0x7, "System.Software.ProductName"},
1915
  {0x8, "System.Software.ProductVersion"},
1916
  {0,NULL}
1917
};
1918
1919
static const value_string PropSet162_IDS[] = {
1920
  {0x64, "System.MileageInformation"},
1921
  {0,NULL}
1922
};
1923
1924
static const value_string PropSet163_IDS[] = {
1925
  {0x2, "System.RecordedTV.EpisodeName"},
1926
  {0x3, "System.RecordedTV.ProgramDescription"},
1927
  {0x5, "System.RecordedTV.StationCallSign"},
1928
  {0x7, "System.RecordedTV.ChannelNumber"},
1929
  {0xc, "System.RecordedTV.IsClosedCaptioningAvailable"},
1930
  {0xd, "System.RecordedTV.IsRepeatBroadcast"},
1931
  {0xe, "System.RecordedTV.IsSAP"},
1932
  {0xf, "System.RecordedTV.DateContentExpires"},
1933
  {0x10, "System.RecordedTV.IsATSCContent"},
1934
  {0x11, "System.RecordedTV.IsDTVContent"},
1935
  {0x12, "System.RecordedTV.IsHDContent"},
1936
  {0,NULL}
1937
};
1938
1939
static const value_string PropSet164_IDS[] = {
1940
  {0x64, "System.Audio.PeakValue"},
1941
  {0,NULL}
1942
};
1943
1944
static const value_string PropSet165_IDS[] = {
1945
  {0x64, "System.Contact.TelexNumber"},
1946
  {0,NULL}
1947
};
1948
1949
static const value_string PropSet166_IDS[] = {
1950
  {0x64, "System.Message.SenderName"},
1951
  {0,NULL}
1952
};
1953
1954
static const value_string PropSet167_IDS[] = {
1955
  {0x64, "System.Message.Flags"},
1956
  {0,NULL}
1957
};
1958
1959
static const value_string PropSet168_IDS[] = {
1960
  {0x64, "System.IsFolder"},
1961
  {0,NULL}
1962
};
1963
1964
static const value_string PropSet169_IDS[] = {
1965
  {0x64, "System.Contact.AssistantTelephone"},
1966
  {0,NULL}
1967
};
1968
1969
static const value_string PropSet170_IDS[] = {
1970
  {0x64, "System.KindText"},
1971
  {0,NULL}
1972
};
1973
1974
static const value_string PropSet171_IDS[] = {
1975
  {0x64, "System.Photo.ContrastText"},
1976
  {0,NULL}
1977
};
1978
1979
static const value_string PropSet172_IDS[] = {
1980
  {0x3, "System.Image.HorizontalSize"},
1981
  {0x4, "System.Image.VerticalSize"},
1982
  {0x5, "System.Image.HorizontalResolution"},
1983
  {0x6, "System.Image.VerticalResolution"},
1984
  {0x7, "System.Image.BitDepth"},
1985
  {0xc, "System.Media.FrameCount"},
1986
  {0xd, "System.Image.Dimensions"},
1987
  {0,NULL}
1988
};
1989
1990
static const value_string PropSet173_IDS[] = {
1991
  {0x64, "System.Message.IsFwdOrReply"},
1992
  {0,NULL}
1993
};
1994
1995
static const value_string PropSet174_IDS[] = {
1996
  {0x64, "System.Photo.WhiteBalanceText"},
1997
  {0,NULL}
1998
};
1999
2000
static const value_string PropSet175_IDS[] = {
2001
  {0x64, "System.Photo.GainControlText"},
2002
  {0,NULL}
2003
};
2004
2005
static const value_string PropSet176_IDS[] = {
2006
  {0x64, "System.Communication.PolicyTag"},
2007
  {0,NULL}
2008
};
2009
2010
static const value_string PropSet177_IDS[] = {
2011
  {0x64, "System.Contact.HomeFaxNumber"},
2012
  {0,NULL}
2013
};
2014
2015
static const value_string PropSet178_IDS[] = {
2016
  {0x64, "System.FlagStatusText"},
2017
  {0,NULL}
2018
};
2019
2020
static const value_string PropSet179_IDS[] = {
2021
  {0x64, "System.Contact.AssistantName"},
2022
  {0,NULL}
2023
};
2024
2025
static const value_string PropSet180_IDS[] = {
2026
  {0x64, "System.Message.ToDoFlags"},
2027
  {0,NULL}
2028
};
2029
2030
static const value_string PropSet181_IDS[] = {
2031
  {0x64, "System.RatingText"},
2032
  {0,NULL}
2033
};
2034
2035
static const value_string PropSet182_IDS[] = {
2036
  {0x64, "System.Document.Contributor"},
2037
  {0,NULL}
2038
};
2039
2040
static const value_string PropSet183_IDS[] = {
2041
  {0x64, "System.Contact.CallbackTelephone"},
2042
  {0,NULL}
2043
};
2044
2045
static const value_string PropSet184_IDS[] = {
2046
  {0x64, "System.EndDate"},
2047
  {0,NULL}
2048
};
2049
2050
static const value_string PropSet185_IDS[] = {
2051
  {0x64, "System.Media.DateEncoded"},
2052
  {0,NULL}
2053
};
2054
2055
static const value_string PropSet186_IDS[] = {
2056
  {0x64, "System.Photo.FlashText"},
2057
  {0,NULL}
2058
};
2059
2060
static const value_string PropSet187_IDS[] = {
2061
  {0x64, "System.Photo.FlashFired"},
2062
  {0,NULL}
2063
};
2064
2065
static const value_string PropSet188_IDS[] = {
2066
  {0x64, "System.Document.Division"},
2067
  {0,NULL}
2068
};
2069
2070
static const value_string PropSet189_IDS[] = {
2071
  {0x64, "System.Contact.PagerTelephone"},
2072
  {0,NULL}
2073
};
2074
2075
static const value_string PropSet190_IDS[] = {
2076
  {0x64, "System.Contact.BusinessAddressCity"},
2077
  {0,NULL}
2078
};
2079
2080
static const value_string PropSet191_IDS[] = {
2081
  {0x64, "System.Media.SubscriptionContentId"},
2082
  {0,NULL}
2083
};
2084
2085
static const value_string PropSet192_IDS[] = {
2086
  {0x64, "System.Contact.PrimaryAddressStreet"},
2087
  {0,NULL}
2088
};
2089
2090
static const value_string PropSet193_IDS[] = {
2091
  {0x64, "System.StartDate"},
2092
  {0,NULL}
2093
};
2094
2095
static const value_string PropSet194_IDS[] = {
2096
  {0x2, "System.Video.StreamName"},
2097
  {0x3, "System.Video.FrameWidth"},
2098
  {0x4, "System.Video.FrameHeight"},
2099
  {0x6, "System.Video.FrameRate"},
2100
  {0x8, "System.Video.EncodingBitrate"},
2101
  {0x9, "System.Video.SampleSize"},
2102
  {0xa, "System.Video.Compression"},
2103
  {0x2a, "System.Video.HorizontalAspectRatio"},
2104
  {0x2b, "System.Video.TotalBitrate"},
2105
  {0x2c, "System.Video.FourCC"},
2106
  {0x2d, "System.Video.VerticalAspectRatio"},
2107
  {0,NULL}
2108
};
2109
2110
static const value_string PropSet195_IDS[] = {
2111
  {0x64, "System.Contact.MailingAddress"},
2112
  {0,NULL}
2113
};
2114
2115
static const struct GuidPropertySet GuidPropertySet[] = {
2116
  { {0xa9bd1526, 0x6a80, 0x11d0, {0x8c, 0x9d, 0x00, 0x20, 0xaf, 0x1d, 0x74, 0x0e}},
2117
    "DBPROPSET_FSCIFRMWRK_EXT", "File system content index framework",
2118
    DBPROPSET_FSCIFRMWRK_EXT_IDS
2119
  },
2120
  { {0xa7ac77ed, 0xf8d7, 0x11ce, {0xa7, 0x98, 0x00, 0x20, 0xf8, 0x00, 0x80, 0x25}},
2121
    "DBPROPSET_QUERYEXT", "Query extension",
2122
    DBPROPSET_QUERYEXT_IDS
2123
  },
2124
  { {0xafafaca5, 0xb5d1, 0x11d0, {0x8c, 0x62, 0x00, 0xc0, 0x4f, 0xc2, 0xdb, 0x8d}},
2125
    "DBPROPSET_CIFRMWRKCORE_EXT", "Content index framework core",
2126
    DBPROPSET_CIFRMWRKCORE_EXT_IDS
2127
  },
2128
  { {0xAA6EE6B0, 0xE828, 0x11D0, {0xB2, 0x3E, 0x00, 0xAA, 0x00, 0x47, 0xFC, 0x01}},
2129
    "DBPROPSET_MSIDXS_ROWSETEXT", "???",
2130
    DBPROPSET_MSIDXS_ROWSETEXT_IDS
2131
  },
2132
  { {0xB725F130, 0x47ef, 0x101a, {0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC}},
2133
    "Storage", "Storage Property Set",
2134
    StorageGuid_IDS
2135
  },
2136
  { {0xF29F85E0, 0x4FF9, 0x1068, {0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9}},
2137
    "Document", "Document Property Set",
2138
    DocPropSetGuid_IDS
2139
  },
2140
  { {0x49691C90, 0x7E17, 0x101A, {0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9}},
2141
    "Query", "Query Property Set",
2142
    QueryGuid_IDS
2143
  },
2144
  { {0x28636AA6, 0x953D, 0x11D2, {0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0}},
2145
    "ShellDetails", "Shell Details Property Set",
2146
    ShellDetails_IDS
2147
  },
2148
  { {0x446D16B1, 0x8DAD, 0x4870, {0xA7, 0x48, 0x40, 0x2E, 0xA4, 0x3D, 0x78, 0x8C}},
2149
    "???", "Unspecified Property Set",
2150
    PropSet1_IDS
2151
  },
2152
  { {0x1E3EE840, 0xBC2B, 0x476C, {0x82, 0x37, 0x2A, 0xCD, 0x1A, 0x83, 0x9B, 0x22}},
2153
    "???", "Unspecified Property Set",
2154
    PropSet2_IDS
2155
  },
2156
  { {0x56A3372E, 0xCE9C, 0x11d2, {0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6}},
2157
    "Music", "Music Property Set",
2158
    MusicGuid_IDS
2159
  },
2160
  { {0xE3E0584C, 0xB788, 0x4A5A, {0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD}},
2161
    "???", "Unspecified Property Set",
2162
    PropSet3_IDS
2163
  },
2164
  { {0xDABD30ED, 0x0043, 0x4789, {0xA7, 0xF8, 0xD0, 0x13, 0xA4, 0x73, 0x66, 0x22}},
2165
    "???", "Unspecified Property Set",
2166
    PropSet4_IDS
2167
  },
2168
  { {0x635E9051, 0x50A5, 0x4BA2, {0xB9, 0xDB, 0x4E, 0xD0, 0x56, 0xC7, 0x72, 0x96}},
2169
    "???", "Unspecified Property Set",
2170
    PropSet5_IDS
2171
  },
2172
  { {0xD0A04F0A, 0x462A, 0x48A4, {0xBB, 0x2F, 0x37, 0x06, 0xE8, 0x8D, 0xBD, 0x7D}},
2173
    "???", "Unspecified Property Set",
2174
    PropSet6_IDS
2175
  },
2176
  { {0xDE35258C, 0xC695, 0x4CBC, {0xB9, 0x82, 0x38, 0xB0, 0xAD, 0x24, 0xCE, 0xD0}},
2177
    "???", "Unspecified Property Set",
2178
    PropSet7_IDS
2179
  },
2180
  { {0xD6942081, 0xD53B, 0x443D, {0xAD, 0x47, 0x5E, 0x05, 0x9D, 0x9C, 0xD2, 0x7A}},
2181
    "???", "Unspecified Property Set",
2182
    PropSet8_IDS
2183
  },
2184
  { {0xF7DB74B4, 0x4287, 0x4103, {0xAF, 0xBA, 0xF1, 0xB1, 0x3D, 0xCD, 0x75, 0xCF}},
2185
    "???", "Unspecified Property Set",
2186
    PropSet9_IDS
2187
  },
2188
  { {0x0B63E350, 0x9CCC, 0x11d0, {0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04}},
2189
    "???", "Unspecified Property Set",
2190
    PropSet10_IDS
2191
  },
2192
  { {0x9C1FCF74, 0x2D97, 0x41BA, {0xB4, 0xAE, 0xCB, 0x2E, 0x36, 0x61, 0xA6, 0xE4}},
2193
    "???", "Unspecified Property Set",
2194
    PropSet11_IDS
2195
  },
2196
  { {0x560C36C0, 0x503A, 0x11CF, {0xBA, 0xA1, 0x00, 0x00, 0x4C, 0x75, 0x2A, 0x9A}},
2197
    "DocCharacter", "Document characterization Property Set",
2198
    DocCharacter_IDS
2199
  },
2200
  { {0x5CDA5FC8, 0x33EE, 0x4FF3, {0x90, 0x94, 0xAE, 0x7B, 0xD8, 0x86, 0x8C, 0x4D}},
2201
    "???", "Unspecified Property Set",
2202
    PropSet12_IDS
2203
  },
2204
  { {0xF23F425C, 0x71A1, 0x4FA8, {0x92, 0x2F, 0x67, 0x8E, 0xA4, 0xA6, 0x04, 0x08}},
2205
    "???", "Unspecified Property Set",
2206
    PropSet13_IDS
2207
  },
2208
  { {0xDC8F80BD, 0xAF1E, 0x4289, {0x85, 0xB6, 0x3D, 0xFC, 0x1B, 0x49, 0x39, 0x92}},
2209
    "???", "Unspecified Property Set",
2210
    PropSet14_IDS
2211
  },
2212
  { {0xD5CDD502, 0x2E9C, 0x101B, {0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE}},
2213
    "DocPropSet2", "Document Property Set 2",
2214
    DocPropSetGuid2_IDS
2215
  },
2216
  { {0x176DC63C, 0x2688, 0x4E89, {0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9}},
2217
    "System.Contact", "System Contact Property Set",
2218
    SystemContact_IDS
2219
  },
2220
  { {0xBFEE9149, 0xE3E2, 0x49A7, {0xA8, 0x62, 0xC0, 0x59, 0x88, 0x14, 0x5C, 0xEC}},
2221
    "???","Unspecified Property Set",
2222
    PropSet15_IDS
2223
  },
2224
  { {0xFF962609, 0xB7D6, 0x4999, {0x86, 0x2D, 0x95, 0x18, 0x0D, 0x52, 0x9A, 0xEA}},
2225
    "???","Unspecified Property Set",
2226
    PropSet16_IDS
2227
  },
2228
  { {0xAEAC19E4, 0x89AE, 0x4508, {0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED}},
2229
    "???","Unspecified Property Set",
2230
    PropSet17_IDS
2231
  },
2232
  { {0x09429607, 0x582D, 0x437F, {0x84, 0xC3, 0xDE, 0x93, 0xA2, 0xB2, 0x4C, 0x3C}},
2233
    "???","Unspecified Property Set",
2234
    PropSet18_IDS
2235
  },
2236
  { {0x5BF396D4, 0x5EB2, 0x466F, {0xBD, 0xE9, 0x2F, 0xB3, 0xF2, 0x36, 0x1D, 0x6E}},
2237
    "???","Unspecified Property Set",
2238
    PropSet19_IDS
2239
  },
2240
  { {0x10984E0A, 0xF9F2, 0x4321, {0xB7, 0xEF, 0xBA, 0xF1, 0x95, 0xAF, 0x43, 0x19}},
2241
    "???","Unspecified Property Set",
2242
    PropSet20_IDS
2243
  },
2244
  { {0x39A7F922, 0x477C, 0x48DE, {0x8B, 0xC8, 0xB2, 0x84, 0x41, 0xE3, 0x42, 0xE3}},
2245
    "???","Unspecified Property Set",
2246
    PropSet21_IDS
2247
  },
2248
  { {0x8F167568, 0x0AAE, 0x4322, {0x8E, 0xD9, 0x60, 0x55, 0xB7, 0xB0, 0xE3, 0x98}},
2249
    "???","Unspecified Property Set",
2250
    PropSet22_IDS
2251
  },
2252
  { {0x000214A1, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}},
2253
    "???","Unspecified Property Set",
2254
    PropSet23_IDS
2255
  },
2256
  { {0x43F8D7B7, 0xA444, 0x4F87, {0x93, 0x83, 0x52, 0x27, 0x1C, 0x9B, 0x91, 0x5C}},
2257
    "???","Unspecified Property Set",
2258
    PropSet24_IDS
2259
  },
2260
  { {0x8FDC6DEA, 0xB929, 0x412B, {0xBA, 0x90, 0x39, 0x7A, 0x25, 0x74, 0x65, 0xFE}},
2261
    "???","Unspecified Property Set",
2262
    PropSet25_IDS
2263
  },
2264
  { {0x188C1F91, 0x3C40, 0x4132, {0x9E, 0xC5, 0xD8, 0xB0, 0x3B, 0x72, 0xA8, 0xA2}},
2265
    "???","Unspecified Property Set",
2266
    PropSet26_IDS
2267
  },
2268
  { {0xD37D52C6, 0x261C, 0x4303, {0x82, 0xB3, 0x08, 0xB9, 0x26, 0xAC, 0x6F, 0x12}},
2269
    "???","Unspecified Property Set",
2270
    PropSet27_IDS
2271
  },
2272
  { {0x09EDD5B6, 0xB301, 0x43C5, {0x99, 0x90, 0xD0, 0x03, 0x02, 0xEF, 0xFD, 0x46}},
2273
    "???","Unspecified Property Set",
2274
    PropSet28_IDS
2275
  },
2276
  { {0x9D2408B6, 0x3167, 0x422B, {0x82, 0xB0, 0xF5, 0x83, 0xB7, 0xA7, 0xCF, 0xE3}},
2277
    "???","Unspecified Property Set",
2278
    PropSet29_IDS
2279
  },
2280
  { {0xE08805C8, 0xE395, 0x40DF, {0x80, 0xD2, 0x54, 0xF0, 0xD6, 0xC4, 0x31, 0x54}},
2281
    "???","Unspecified Property Set",
2282
    PropSet30_IDS
2283
  },
2284
  { {0x2C53C813, 0xFB63, 0x4E22, {0xA1, 0xAB, 0x0B, 0x33, 0x1C, 0xA1, 0xE2, 0x73}},
2285
    "???","Unspecified Property Set",
2286
    PropSet31_IDS
2287
  },
2288
  { {0xD98BE98B, 0xB86B, 0x4095, {0xBF, 0x52, 0x9D, 0x23, 0xB2, 0xE0, 0xA7, 0x52}},
2289
    "???","Unspecified Property Set",
2290
    PropSet32_IDS
2291
  },
2292
  { {0xD4729704, 0x8EF1, 0x43EF, {0x90, 0x24, 0x2B, 0xD3, 0x81, 0x18, 0x7F, 0xD5}},
2293
    "???","Unspecified Property Set",
2294
    PropSet33_IDS
2295
  },
2296
  { {0xA5477F61, 0x7A82, 0x4ECA, {0x9D, 0xDE, 0x98, 0xB6, 0x9B, 0x24, 0x79, 0xB3}},
2297
    "???","Unspecified Property Set",
2298
    PropSet34_IDS
2299
  },
2300
  { {0x45EAE747, 0x8E2A, 0x40AE, {0x8C, 0xBF, 0xCA, 0x52, 0xAB, 0xA6, 0x15, 0x2A}},
2301
    "???","Unspecified Property Set",
2302
    PropSet35_IDS
2303
  },
2304
  { {0x95C656C1, 0x2ABF, 0x4148, {0x9E, 0xD3, 0x9E, 0xC6, 0x02, 0xE3, 0xB7, 0xCD}},
2305
    "???","Unspecified Property Set",
2306
    PropSet36_IDS
2307
  },
2308
  { {0x51EC3F47, 0xDD50, 0x421D, {0x87, 0x69, 0x33, 0x4F, 0x50, 0x42, 0x4B, 0x1E}},
2309
    "???","Unspecified Property Set",
2310
    PropSet37_IDS
2311
  },
2312
  { {0x508161FA, 0x313B, 0x43D5, {0x83, 0xA1, 0xC1, 0xAC, 0xCF, 0x68, 0x62, 0x2C}},
2313
    "???","Unspecified Property Set",
2314
    PropSet38_IDS
2315
  },
2316
  { {0x730FB6DD, 0xCF7C, 0x426B, {0xA0, 0x3F, 0xBD, 0x16, 0x6C, 0xC9, 0xEE, 0x24}},
2317
    "???","Unspecified Property Set",
2318
    PropSet40_IDS
2319
  },
2320
  { {0x346C8BD1, 0x2E6A, 0x4C45, {0x89, 0xA4, 0x61, 0xB7, 0x8E, 0x8E, 0x70, 0x0F}},
2321
    "???","Unspecified Property Set",
2322
    PropSet41_IDS
2323
  },
2324
  { {0x38965063, 0xEDC8, 0x4268, {0x84, 0x91, 0xB7, 0x72, 0x31, 0x72, 0xCF, 0x29}},
2325
    "???","Unspecified Property Set",
2326
    PropSet42_IDS
2327
  },
2328
  { {0x6A15E5A0, 0x0A1E, 0x4CD7, {0xBB, 0x8C, 0xD2, 0xF1, 0xB0, 0xC9, 0x29, 0xBC}},
2329
    "???","Unspecified Property Set",
2330
    PropSet43_IDS
2331
  },
2332
  { {0x3F08E66F, 0x2F44, 0x4BB9, {0xA6, 0x82, 0xAC, 0x35, 0xD2, 0x56, 0x23, 0x22}},
2333
    "???","Unspecified Property Set",
2334
    PropSet45_IDS
2335
  },
2336
  { {0xC89A23D0, 0x7D6D, 0x4EB8, {0x87, 0xD4, 0x77, 0x6A, 0x82, 0xD4, 0x93, 0xE5}},
2337
    "???","Unspecified Property Set",
2338
    PropSet46_IDS
2339
  },
2340
  { {0x644D37B4, 0xE1B3, 0x4BAD, {0xB0, 0x99, 0x7E, 0x7C, 0x04, 0x96, 0x6A, 0xCA}},
2341
    "???","Unspecified Property Set",
2342
    PropSet47_IDS
2343
  },
2344
  { {0x83A6347E, 0x6FE4, 0x4F40, {0xBA, 0x9C, 0xC4, 0x86, 0x52, 0x40, 0xD1, 0xF4}},
2345
    "???","Unspecified Property Set",
2346
    PropSet48_IDS
2347
  },
2348
  { {0xB812F15D, 0xC2D8, 0x4BBF, {0xBA, 0xCD, 0x79, 0x74, 0x43, 0x46, 0x11, 0x3F}},
2349
    "???","Unspecified Property Set",
2350
    PropSet49_IDS
2351
  },
2352
  { {0xA06992B3, 0x8CAF, 0x4ED7, {0xA5, 0x47, 0xB2, 0x59, 0xE3, 0x2A, 0xC9, 0xFC}},
2353
    "???","Unspecified Property Set",
2354
    PropSet50_IDS
2355
  },
2356
  { {0x41CF5AE0, 0xF75A, 0x4806, {0xBD, 0x87, 0x59, 0xC7, 0xD9, 0x24, 0x8E, 0xB9}},
2357
    "???","Unspecified Property Set",
2358
    PropSet51_IDS
2359
  },
2360
  { {0x0ADEF160, 0xDB3F, 0x4308, {0x9A, 0x21, 0x06, 0x23, 0x7B, 0x16, 0xFA, 0x2A}},
2361
    "???","Unspecified Property Set",
2362
    PropSet52_IDS
2363
  },
2364
  { {0x8AFCC170, 0x8A46, 0x4B53, {0x9E, 0xEE, 0x90, 0xBA, 0xE7, 0x15, 0x1E, 0x62}},
2365
    "???","Unspecified Property Set",
2366
    PropSet53_IDS
2367
  },
2368
  { {0x56310920, 0x2491, 0x4919, {0x99, 0xCE, 0xEA, 0xDB, 0x06, 0xFA, 0xFD, 0xB2}},
2369
    "???","Unspecified Property Set",
2370
    PropSet54_IDS
2371
  },
2372
  { {0xB33AF30B, 0xF552, 0x4584, {0x93, 0x6C, 0xCB, 0x93, 0xE5, 0xCD, 0xA2, 0x9F}},
2373
    "???","Unspecified Property Set",
2374
    PropSet55_IDS
2375
  },
2376
  { {0x67DF94DE, 0x0CA7, 0x4D6F, {0xB7, 0x92, 0x05, 0x3A, 0x3E, 0x4F, 0x03, 0xCF}},
2377
    "???","Unspecified Property Set",
2378
    PropSet56_IDS
2379
  },
2380
  { {0x9098F33C, 0x9A7D, 0x48A8, {0x8D, 0xE5, 0x2E, 0x12, 0x27, 0xA6, 0x4E, 0x91}},
2381
    "???","Unspecified Property Set",
2382
    PropSet57_IDS
2383
  },
2384
  { {0xDE5EF3C7, 0x46E1, 0x484E, {0x99, 0x99, 0x62, 0xC5, 0x30, 0x83, 0x94, 0xC1}},
2385
    "???","Unspecified Property Set",
2386
    PropSet58_IDS
2387
  },
2388
  { {0x315B9C8D, 0x80A9, 0x4EF9, {0xAE, 0x16, 0x8E, 0x74, 0x6D, 0xA5, 0x1D, 0x70}},
2389
    "???","Unspecified Property Set",
2390
    PropSet59_IDS
2391
  },
2392
  { {0x98F98354, 0x617A, 0x46B8, {0x85, 0x60, 0x5B, 0x1B, 0x64, 0xBF, 0x1F, 0x89}},
2393
    "???","Unspecified Property Set",
2394
    PropSet60_IDS
2395
  },
2396
  { {0x08F6D7C2, 0xE3F2, 0x44FC, {0xAF, 0x1E, 0x5A, 0xA5, 0xC8, 0x1A, 0x2D, 0x3E}},
2397
    "???","Unspecified Property Set",
2398
    PropSet61_IDS
2399
  },
2400
  { {0xD4D0AA16, 0x9948, 0x41A4, {0xAA, 0x85, 0xD9, 0x7F, 0xF9, 0x64, 0x69, 0x93}},
2401
    "???","Unspecified Property Set",
2402
    PropSet62_IDS
2403
  },
2404
  { {0xDE41CC29, 0x6971, 0x4290, {0xB4, 0x72, 0xF5, 0x9F, 0x2E, 0x2F, 0x31, 0xE2}},
2405
    "???","Unspecified Property Set",
2406
    PropSet63_IDS
2407
  },
2408
  { {0xDEA7C82C, 0x1D89, 0x4A66, {0x94, 0x27, 0xA4, 0xE3, 0xDE, 0xBA, 0xBC, 0xB1}},
2409
    "???","Unspecified Property Set",
2410
    PropSet64_IDS
2411
  },
2412
  { {0x00F58A38, 0xC54B, 0x4C40, {0x86, 0x96, 0x97, 0x23, 0x59, 0x80, 0xEA, 0xE1}},
2413
    "???","Unspecified Property Set",
2414
    PropSet65_IDS
2415
  },
2416
  { {0xCD9ED458, 0x08CE, 0x418F, {0xA7, 0x0E, 0xF9, 0x12, 0xC7, 0xBB, 0x9C, 0x5C}},
2417
    "???","Unspecified Property Set",
2418
    PropSet66_IDS
2419
  },
2420
  { {0x64440492, 0x4C8B, 0x11D1, {0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03}},
2421
    "???","Unspecified Property Set",
2422
    PropSet67_IDS
2423
  },
2424
  { {0xAAA660F9, 0x9865, 0x458E, {0xB4, 0x84, 0x01, 0xBC, 0x7F, 0xE3, 0x97, 0x3E}},
2425
    "???","Unspecified Property Set",
2426
    PropSet68_IDS
2427
  },
2428
  { {0xE8309B6E, 0x084C, 0x49B4, {0xB1, 0xFC, 0x90, 0xA8, 0x03, 0x31, 0xB6, 0x38}},
2429
    "???","Unspecified Property Set",
2430
    PropSet69_IDS
2431
  },
2432
  { {0x64440490, 0x4C8B, 0x11D1, {0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03}},
2433
    "???","Unspecified Property Set",
2434
    PropSet70_IDS
2435
  },
2436
  { {0xE4F10A3C, 0x49E6, 0x405D, {0x82, 0x88, 0xA2, 0x3B, 0xD4, 0xEE, 0xAA, 0x6C}},
2437
    "???","Unspecified Property Set",
2438
    PropSet71_IDS
2439
  },
2440
  { {0x14B81DA1, 0x0135, 0x4D31, {0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99}},
2441
    "???","Unspecified Property Set",
2442
    PropSet72_IDS
2443
  },
2444
  { {0xAAF16BAC, 0x2B55, 0x45E6, {0x9F, 0x6D, 0x41, 0x5E, 0xB9, 0x49, 0x10, 0xDF}},
2445
    "???","Unspecified Property Set",
2446
    PropSet73_IDS
2447
  },
2448
  { {0x821437D6, 0x9EAB, 0x4765, {0xA5, 0x89, 0x3B, 0x1C, 0xBB, 0xD2, 0x2A, 0x61}},
2449
    "???","Unspecified Property Set",
2450
    PropSet74_IDS
2451
  },
2452
  { {0xD55BAE5A, 0x3892, 0x417A, {0xA6, 0x49, 0xC6, 0xAC, 0x5A, 0xAA, 0xEA, 0xB3}},
2453
    "???","Unspecified Property Set",
2454
    PropSet75_IDS
2455
  },
2456
  { {0x72FC5BA4, 0x24F9, 0x4011, {0x9F, 0x3F, 0xAD, 0xD2, 0x7A, 0xFA, 0xD8, 0x18}},
2457
    "???","Unspecified Property Set",
2458
    PropSet76_IDS
2459
  },
2460
  { {0x0BA7D6C3, 0x568D, 0x4159, {0xAB, 0x91, 0x78, 0x1A, 0x91, 0xFB, 0x71, 0xE5}},
2461
    "???","Unspecified Property Set",
2462
    PropSet77_IDS
2463
  },
2464
  { {0x744C8242, 0x4DF5, 0x456C, {0xAB, 0x9E, 0x01, 0x4E, 0xFB, 0x90, 0x21, 0xE3}},
2465
    "???","Unspecified Property Set",
2466
    PropSet78_IDS
2467
  },
2468
  { {0xB9B4B3FC, 0x2B51, 0x4A42, {0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25}},
2469
    "???","Unspecified Property Set",
2470
    PropSet79_IDS
2471
  },
2472
  { {0x5DC2253F, 0x5E11, 0x4ADF, {0x9C, 0xFE, 0x91, 0x0D, 0xD0, 0x1E, 0x3E, 0x70}},
2473
    "???","Unspecified Property Set",
2474
    PropSet80_IDS
2475
  },
2476
  { {0x7B9F6399, 0x0A3F, 0x4B12, {0x89, 0xBD, 0x4A, 0xDC, 0x51, 0xC9, 0x18, 0xAF}},
2477
    "???","Unspecified Property Set",
2478
    PropSet81_IDS
2479
  },
2480
  { {0x8589E481, 0x6040, 0x473D, {0xB1, 0x71, 0x7F, 0xA8, 0x9C, 0x27, 0x08, 0xED}},
2481
    "???","Unspecified Property Set",
2482
    PropSet82_IDS
2483
  },
2484
  { {0x5DA84765, 0xE3FF, 0x4278, {0x86, 0xB0, 0xA2, 0x79, 0x67, 0xFB, 0xDD, 0x03}},
2485
    "???","Unspecified Property Set",
2486
    PropSet83_IDS
2487
  },
2488
  { {0x14977844, 0x6B49, 0x4AAD, {0xA7, 0x14, 0xA4, 0x51, 0x3B, 0xF6, 0x04, 0x60}},
2489
    "???","Unspecified Property Set",
2490
    PropSet84_IDS
2491
  },
2492
  { {0x90E5E14E, 0x648B, 0x4826, {0xB2, 0xAA, 0xAC, 0xAF, 0x79, 0x0E, 0x35, 0x13}},
2493
    "???","Unspecified Property Set",
2494
    PropSet85_IDS
2495
  },
2496
  { {0x293CA35A, 0x09AA, 0x4DD2, {0xB1, 0x80, 0x1F, 0xE2, 0x45, 0x72, 0x8A, 0x52}},
2497
    "???","Unspecified Property Set",
2498
    PropSet86_IDS
2499
  },
2500
  { {0xC8EA94F0, 0xA9E3, 0x4969, {0xA9, 0x4B, 0x9C, 0x62, 0xA9, 0x53, 0x24, 0xE0}},
2501
    "???","Unspecified Property Set",
2502
    PropSet87_IDS
2503
  },
2504
  { {0x8B26EA41, 0x058F, 0x43F6, {0xAE, 0xCC, 0x40, 0x35, 0x68, 0x1C, 0xE9, 0x77}},
2505
    "???","Unspecified Property Set",
2506
    PropSet88_IDS
2507
  },
2508
  { {0xF21D9941, 0x81F0, 0x471A, {0xAD, 0xEE, 0x4E, 0x74, 0xB4, 0x92, 0x17, 0xED}},
2509
    "???","Unspecified Property Set",
2510
    PropSet89_IDS
2511
  },
2512
  { {0xB0B87314, 0xFCF6, 0x4FEB, {0x8D, 0xFF, 0xA5, 0x0D, 0xA6, 0xAF, 0x56, 0x1C}},
2513
    "???","Unspecified Property Set",
2514
    PropSet90_IDS
2515
  },
2516
  { {0xCC6F4F24, 0x6083, 0x4BD4, {0x87, 0x54, 0x67, 0x4D, 0x0D, 0xE8, 0x7A, 0xB8}},
2517
    "???","Unspecified Property Set",
2518
    PropSet91_IDS
2519
  },
2520
  { {0xA0E74609, 0xB84D, 0x4F49, {0xB8, 0x60, 0x46, 0x2B, 0xD9, 0x97, 0x1F, 0x98}},
2521
    "???","Unspecified Property Set",
2522
    PropSet92_IDS
2523
  },
2524
  { {0xD68DBD8A, 0x3374, 0x4B81, {0x99, 0x72, 0x3E, 0xC3, 0x06, 0x82, 0xDB, 0x3D}},
2525
    "???","Unspecified Property Set",
2526
    PropSet93_IDS
2527
  },
2528
  { {0x2CBAA8F5, 0xD81F, 0x47CA, {0xB1, 0x7A, 0xF8, 0xD8, 0x22, 0x30, 0x01, 0x31}},
2529
    "???","Unspecified Property Set",
2530
    PropSet94_IDS
2531
  },
2532
  { {0x72FAB781, 0xACDA, 0x43E5, {0xB1, 0x55, 0xB2, 0x43, 0x4F, 0x85, 0xE6, 0x78}},
2533
    "???","Unspecified Property Set",
2534
    PropSet95_IDS
2535
  },
2536
  { {0x6B8DA074, 0x3B5C, 0x43BC, {0x88, 0x6F, 0x0A, 0x2C, 0xDC, 0xE0, 0x0B, 0x6F}},
2537
    "???","Unspecified Property Set",
2538
    PropSet96_IDS
2539
  },
2540
  { {0x18BBD425, 0xECFD, 0x46EF, {0xB6, 0x12, 0x7B, 0x4A, 0x60, 0x34, 0xED, 0xA0}},
2541
    "???","Unspecified Property Set",
2542
    PropSet97_IDS
2543
  },
2544
  { {0x276D7BB0, 0x5B34, 0x4FB0, {0xAA, 0x4B, 0x15, 0x8E, 0xD1, 0x2A, 0x18, 0x09}},
2545
    "???","Unspecified Property Set",
2546
    PropSet99_IDS
2547
  },
2548
  { {0xFEC690B7, 0x5F30, 0x4646, {0xAE, 0x47, 0x4C, 0xAA, 0xFB, 0xA8, 0x84, 0xA3}},
2549
    "???","Unspecified Property Set",
2550
    PropSet100_IDS
2551
  },
2552
  { {0x46B4E8DE, 0xCDB2, 0x440D, {0x88, 0x5C, 0x16, 0x58, 0xEB, 0x65, 0xB9, 0x14}},
2553
    "???","Unspecified Property Set",
2554
    PropSet101_IDS
2555
  },
2556
  { {0xF628FD8C, 0x7BA8, 0x465A, {0xA6, 0x5B, 0xC5, 0xAA, 0x79, 0x26, 0x3A, 0x9E}},
2557
    "???","Unspecified Property Set",
2558
    PropSet102_IDS
2559
  },
2560
  { {0x7A7D76F4, 0xB630, 0x4BD7, {0x95, 0xFF, 0x37, 0xCC, 0x51, 0xA9, 0x75, 0xC9}},
2561
    "???","Unspecified Property Set",
2562
    PropSet103_IDS
2563
  },
2564
  { {0x446F787F, 0x10C4, 0x41CB, {0xA6, 0xC4, 0x4D, 0x03, 0x43, 0x55, 0x15, 0x97}},
2565
    "???","Unspecified Property Set",
2566
    PropSet104_IDS
2567
  },
2568
  { {0xA9EA193C, 0xC511, 0x498A, {0xA0, 0x6B, 0x58, 0xE2, 0x77, 0x6D, 0xCC, 0x28}},
2569
    "???","Unspecified Property Set",
2570
    PropSet105_IDS
2571
  },
2572
  { {0x97B0AD89, 0xDF49, 0x49CC, {0x83, 0x4E, 0x66, 0x09, 0x74, 0xFD, 0x75, 0x5B}},
2573
    "???","Unspecified Property Set",
2574
    PropSet106_IDS
2575
  },
2576
  { {0xF6272D18, 0xCECC, 0x40B1, {0xB2, 0x6A, 0x39, 0x11, 0x71, 0x7A, 0xA7, 0xBD}},
2577
    "???","Unspecified Property Set",
2578
    PropSet107_IDS
2579
  },
2580
  { {0x61478C08, 0xB600, 0x4A84, {0xBB, 0xE4, 0xE9, 0x9C, 0x45, 0xF0, 0xA0, 0x72}},
2581
    "???","Unspecified Property Set",
2582
    PropSet108_IDS
2583
  },
2584
  { {0xBCCC8A3C, 0x8CEF, 0x42E5, {0x9B, 0x1C, 0xC6, 0x90, 0x79, 0x39, 0x8B, 0xC7}},
2585
    "???","Unspecified Property Set",
2586
    PropSet109_IDS
2587
  },
2588
  { {0x9AD5BADB, 0xCEA7, 0x4470, {0xA0, 0x3D, 0xB8, 0x4E, 0x51, 0xB9, 0x94, 0x9E}},
2589
    "???","Unspecified Property Set",
2590
    PropSet110_IDS
2591
  },
2592
  { {0xF1A24AA7, 0x9CA7, 0x40F6, {0x89, 0xEC, 0x97, 0xDE, 0xF9, 0xFF, 0xE8, 0xDB}},
2593
    "???","Unspecified Property Set",
2594
    PropSet111_IDS
2595
  },
2596
  { {0x3602C812, 0x0F3B, 0x45F0, {0x85, 0xAD, 0x60, 0x34, 0x68, 0xD6, 0x94, 0x23}},
2597
    "???","Unspecified Property Set",
2598
    PropSet112_IDS
2599
  },
2600
  { {0xA6F360D2, 0x55F9, 0x48DE, {0xB9, 0x09, 0x62, 0x0E, 0x09, 0x0A, 0x64, 0x7C}},
2601
    "???","Unspecified Property Set",
2602
    PropSet113_IDS
2603
  },
2604
  { {0x897B3694, 0xFE9E, 0x43E6, {0x80, 0x66, 0x26, 0x0F, 0x59, 0x0C, 0x01, 0x00}},
2605
    "???","Unspecified Property Set",
2606
    PropSet114_IDS
2607
  },
2608
  { {0x8619A4B6, 0x9F4D, 0x4429, {0x8C, 0x0F, 0xB9, 0x96, 0xCA, 0x59, 0xE3, 0x35}},
2609
    "???","Unspecified Property Set",
2610
    PropSet115_IDS
2611
  },
2612
  { {0xA26F4AFC, 0x7346, 0x4299, {0xBE, 0x47, 0xEB, 0x1A, 0xE6, 0x13, 0x13, 0x9F}},
2613
    "???","Unspecified Property Set",
2614
    PropSet116_IDS
2615
  },
2616
  { {0xBC4E71CE, 0x17F9, 0x48D5, {0xBE, 0xE9, 0x02, 0x1D, 0xF0, 0xEA, 0x54, 0x09}},
2617
    "???","Unspecified Property Set",
2618
    PropSet117_IDS
2619
  },
2620
  { {0x65A98875, 0x3C80, 0x40AB, {0xAB, 0xBC, 0xEF, 0xDA, 0xF7, 0x7D, 0xBE, 0xE2}},
2621
    "???","Unspecified Property Set",
2622
    PropSet118_IDS
2623
  },
2624
  { {0x84D8F337, 0x981D, 0x44B3, {0x96, 0x15, 0xC7, 0x59, 0x6D, 0xBA, 0x17, 0xE3}},
2625
    "???","Unspecified Property Set",
2626
    PropSet119_IDS
2627
  },
2628
  { {0xBE1A72C6, 0x9A1D, 0x46B7, {0xAF, 0xE7, 0xAF, 0xAF, 0x8C, 0xEF, 0x49, 0x99}},
2629
    "???","Unspecified Property Set",
2630
    PropSet120_IDS
2631
  },
2632
  { {0x8F367200, 0xC270, 0x457C, {0xB1, 0xD4, 0xE0, 0x7C, 0x5B, 0xCD, 0x90, 0xC7}},
2633
    "???","Unspecified Property Set",
2634
    PropSet121_IDS
2635
  },
2636
  { {0x428040AC, 0xA177, 0x4C8A, {0x97, 0x60, 0xF6, 0xF7, 0x61, 0x22, 0x7F, 0x9A}},
2637
    "???","Unspecified Property Set",
2638
    PropSet122_IDS
2639
  },
2640
  { {0xA3B29791, 0x7713, 0x4E1D, {0xBB, 0x40, 0x17, 0xDB, 0x85, 0xF0, 0x18, 0x31}},
2641
    "???","Unspecified Property Set",
2642
    PropSet123_IDS
2643
  },
2644
  { {0xBCEEE283, 0x35DF, 0x4D53, {0x82, 0x6A, 0xF3, 0x6A, 0x3E, 0xEF, 0xC6, 0xBE}},
2645
    "???","Unspecified Property Set",
2646
    PropSet124_IDS
2647
  },
2648
  { {0x91EFF6F3, 0x2E27, 0x42CA, {0x93, 0x3E, 0x7C, 0x99, 0x9F, 0xBE, 0x31, 0x0B}},
2649
    "???","Unspecified Property Set",
2650
    PropSet125_IDS
2651
  },
2652
  { {0x5CBF2787, 0x48CF, 0x4208, {0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94}},
2653
    "???","Unspecified Property Set",
2654
    PropSet126_IDS
2655
  },
2656
  { {0x1B5439E7, 0xEBA1, 0x4AF8, {0xBD, 0xD7, 0x7A, 0xF1, 0xD4, 0x54, 0x94, 0x93}},
2657
    "???","Unspecified Property Set",
2658
    PropSet127_IDS
2659
  },
2660
  { {0x08C7CC5F, 0x60F2, 0x4494, {0xAD, 0x75, 0x55, 0xE3, 0xE0, 0xB5, 0xAD, 0xD0}},
2661
    "???","Unspecified Property Set",
2662
    PropSet128_IDS
2663
  },
2664
  { {0x7FE3AA27, 0x2648, 0x42F3, {0x89, 0xB0, 0x45, 0x4E, 0x5C, 0xB1, 0x50, 0xC3}},
2665
    "???","Unspecified Property Set",
2666
    PropSet129_IDS
2667
  },
2668
  { {0xE53D799D, 0x0F3F, 0x466E, {0xB2, 0xFF, 0x74, 0x63, 0x4A, 0x3C, 0xB7, 0xA4}},
2669
    "???","Unspecified Property Set",
2670
    PropSet130_IDS
2671
  },
2672
  { {0x4776CAFA, 0xBCE4, 0x4CB1, {0xA2, 0x3E, 0x26, 0x5E, 0x76, 0xD8, 0xEB, 0x11}},
2673
    "???","Unspecified Property Set",
2674
    PropSet131_IDS
2675
  },
2676
  { {0x71B377D6, 0xE570, 0x425F, {0xA1, 0x70, 0x80, 0x9F, 0xAE, 0x73, 0xE5, 0x4E}},
2677
    "???","Unspecified Property Set",
2678
    PropSet132_IDS
2679
  },
2680
  { {0x3143BF7C, 0x80A8, 0x4854, {0x88, 0x80, 0xE2, 0xE4, 0x01, 0x89, 0xBD, 0xD0}},
2681
    "???","Unspecified Property Set",
2682
    PropSet133_IDS
2683
  },
2684
  { {0xA6744477, 0xC237, 0x475B, {0xA0, 0x75, 0x54, 0xF3, 0x44, 0x98, 0x29, 0x2A}},
2685
    "???","Unspecified Property Set",
2686
    PropSet134_IDS
2687
  },
2688
  { {0xC9C34F84, 0x2241, 0x4401, {0xB6, 0x07, 0xBD, 0x20, 0xED, 0x75, 0xAE, 0x7F}},
2689
    "???","Unspecified Property Set",
2690
    PropSet135_IDS
2691
  },
2692
  { {0xF8FA7FA3, 0xD12B, 0x4785, {0x8A, 0x4E, 0x69, 0x1A, 0x94, 0xF7, 0xA3, 0xE7}},
2693
    "???","Unspecified Property Set",
2694
    PropSet136_IDS
2695
  },
2696
  { {0x7268AF55, 0x1CE4, 0x4F6E, {0xA4, 0x1F, 0xB6, 0xE4, 0xEF, 0x10, 0xE4, 0xA9}},
2697
    "???","Unspecified Property Set",
2698
    PropSet137_IDS
2699
  },
2700
  { {0xE1D4A09E, 0xD758, 0x4CD1, {0xB6, 0xEC, 0x34, 0xA8, 0xB5, 0xA7, 0x3F, 0x80}},
2701
    "???","Unspecified Property Set",
2702
    PropSet138_IDS
2703
  },
2704
  { {0xD7313FF1, 0xA77A, 0x401C, {0x8C, 0x99, 0x3D, 0xBD, 0xD6, 0x8A, 0xDD, 0x36}},
2705
    "???","Unspecified Property Set",
2706
    PropSet139_IDS
2707
  },
2708
  { {0xF85BF840, 0xA925, 0x4BC2, {0xB0, 0xC4, 0x8E, 0x36, 0xB5, 0x98, 0x67, 0x9E}},
2709
    "???","Unspecified Property Set",
2710
    PropSet140_IDS
2711
  },
2712
  { {0x668CDFA5, 0x7A1B, 0x4323, {0xAE, 0x4B, 0xE5, 0x27, 0x39, 0x3A, 0x1D, 0x81}},
2713
    "???","Unspecified Property Set",
2714
    PropSet141_IDS
2715
  },
2716
  { {0xEE3D3D8A, 0x5381, 0x4CFA, {0xB1, 0x3B, 0xAA, 0xF6, 0x6B, 0x5F, 0x4E, 0xC9}},
2717
    "???","Unspecified Property Set",
2718
    PropSet142_IDS
2719
  },
2720
  { {0xD0C7F054, 0x3F72, 0x4725, {0x85, 0x27, 0x12, 0x9A, 0x57, 0x7C, 0xB2, 0x69}},
2721
    "???","Unspecified Property Set",
2722
    PropSet143_IDS
2723
  },
2724
  { {0x3C8CEE58, 0xD4F0, 0x4CF9, {0xB7, 0x56, 0x4E, 0x5D, 0x24, 0x44, 0x7B, 0xCD}},
2725
    "???","Unspecified Property Set",
2726
    PropSet144_IDS
2727
  },
2728
  { {0x6E682923, 0x7F7B, 0x4F0C, {0xA3, 0x37, 0xCF, 0xCA, 0x29, 0x66, 0x87, 0xBF}},
2729
    "???","Unspecified Property Set",
2730
    PropSet145_IDS
2731
  },
2732
  { {0xFD122953, 0xFA93, 0x4EF7, {0x92, 0xC3, 0x04, 0xC9, 0x46, 0xB2, 0xF7, 0xC8}},
2733
    "???","Unspecified Property Set",
2734
    PropSet146_IDS
2735
  },
2736
  { {0x0BE1C8E7, 0x1981, 0x4676, {0xAE, 0x14, 0xFD, 0xD7, 0x8F, 0x05, 0xA6, 0xE7}},
2737
    "???","Unspecified Property Set",
2738
    PropSet147_IDS
2739
  },
2740
  { {0xF1176DFE, 0x7138, 0x4640, {0x8B, 0x4C, 0xAE, 0x37, 0x5D, 0xC7, 0x0A, 0x6D}},
2741
    "???","Unspecified Property Set",
2742
    PropSet148_IDS
2743
  },
2744
  { {0x95BEB1FC, 0x326D, 0x4644, {0xB3, 0x96, 0xCD, 0x3E, 0xD9, 0x0E, 0x6D, 0xDF}},
2745
    "???","Unspecified Property Set",
2746
    PropSet149_IDS
2747
  },
2748
  { {0xDDD1460F, 0xC0BF, 0x4553, {0x8C, 0xE4, 0x10, 0x43, 0x3C, 0x90, 0x8F, 0xB0}},
2749
    "???","Unspecified Property Set",
2750
    PropSet150_IDS
2751
  },
2752
  { {0x9B174B34, 0x40FF, 0x11D2, {0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71}},
2753
    "???","Unspecified Property Set",
2754
    PropSet151_IDS
2755
  },
2756
  { {0x08A65AA1, 0xF4C9, 0x43DD, {0x9D, 0xDF, 0xA3, 0x3D, 0x8E, 0x7E, 0xAD, 0x85}},
2757
    "???","Unspecified Property Set",
2758
    PropSet152_IDS
2759
  },
2760
  { {0x084D8A0A, 0xE6D5, 0x40DE, {0xBF, 0x1F, 0xC8, 0x82, 0x0E, 0x7C, 0x87, 0x7C}},
2761
    "???","Unspecified Property Set",
2762
    PropSet153_IDS
2763
  },
2764
  { {0x841E4F90, 0xFF59, 0x4D16, {0x89, 0x47, 0xE8, 0x1B, 0xBF, 0xFA, 0xB3, 0x6D}},
2765
    "???","Unspecified Property Set",
2766
    PropSet154_IDS
2767
  },
2768
  { {0xFC9F7306, 0xFF8F, 0x4D49, {0x9F, 0xB6, 0x3F, 0xFE, 0x5C, 0x09, 0x51, 0xEC}},
2769
    "???","Unspecified Property Set",
2770
    PropSet155_IDS
2771
  },
2772
  { {0x53DA57CF, 0x62C0, 0x45C4, {0x81, 0xDE, 0x76, 0x10, 0xBC, 0xEF, 0xD7, 0xF5}},
2773
    "???","Unspecified Property Set",
2774
    PropSet156_IDS
2775
  },
2776
  { {0xF8D3F6AC, 0x4874, 0x42CB, {0xBE, 0x59, 0xAB, 0x45, 0x4B, 0x30, 0x71, 0x6A}},
2777
    "???","Unspecified Property Set",
2778
    PropSet157_IDS
2779
  },
2780
  { {0x4684FE97, 0x8765, 0x4842, {0x9C, 0x13, 0xF0, 0x06, 0x44, 0x7B, 0x17, 0x8C}},
2781
    "???","Unspecified Property Set",
2782
    PropSet158_IDS
2783
  },
2784
  { {0xC449D5CB, 0x9EA4, 0x4809, {0x82, 0xE8, 0xAF, 0x9D, 0x59, 0xDE, 0xD6, 0xD1}},
2785
    "???","Unspecified Property Set",
2786
    PropSet159_IDS
2787
  },
2788
  { {0x3F8472B5, 0xE0AF, 0x4DB2, {0x80, 0x71, 0xC5, 0x3F, 0xE7, 0x6A, 0xE7, 0xCE}},
2789
    "???","Unspecified Property Set",
2790
    PropSet160_IDS
2791
  },
2792
  { {0x0CEF7D53, 0xFA64, 0x11D1, {0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE}},
2793
    "???","Unspecified Property Set",
2794
    PropSet161_IDS
2795
  },
2796
  { {0xFDF84370, 0x031A, 0x4ADD, {0x9E, 0x91, 0x0D, 0x77, 0x5F, 0x1C, 0x66, 0x05}},
2797
    "???","Unspecified Property Set",
2798
    PropSet162_IDS
2799
  },
2800
  { {0x6D748DE2, 0x8D38, 0x4CC3, {0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57}},
2801
    "???","Unspecified Property Set",
2802
    PropSet163_IDS
2803
  },
2804
  { {0x2579E5D0, 0x1116, 0x4084, {0xBD, 0x9A, 0x9B, 0x4F, 0x7C, 0xB4, 0xDF, 0x5E}},
2805
    "???","Unspecified Property Set",
2806
    PropSet164_IDS
2807
  },
2808
  { {0xC554493C, 0xC1F7, 0x40C1, {0xA7, 0x6C, 0xEF, 0x8C, 0x06, 0x14, 0x00, 0x3E}},
2809
    "???","Unspecified Property Set",
2810
    PropSet165_IDS
2811
  },
2812
  { {0x0DA41CFA, 0xD224, 0x4A18, {0xAE, 0x2F, 0x59, 0x61, 0x58, 0xDB, 0x4B, 0x3A}},
2813
    "???","Unspecified Property Set",
2814
    PropSet166_IDS
2815
  },
2816
  { {0xA82D9EE7, 0xCA67, 0x4312, {0x96, 0x5E, 0x22, 0x6B, 0xCE, 0xA8, 0x50, 0x23}},
2817
    "???","Unspecified Property Set",
2818
    PropSet167_IDS
2819
  },
2820
  { {0x09329B74, 0x40A3, 0x4C68, {0xBF, 0x07, 0xAF, 0x9A, 0x57, 0x2F, 0x60, 0x7C}},
2821
    "???","Unspecified Property Set",
2822
    PropSet168_IDS
2823
  },
2824
  { {0x9A93244D, 0xA7AD, 0x4FF8, {0x9B, 0x99, 0x45, 0xEE, 0x4C, 0xC0, 0x9A, 0xF6}},
2825
    "???","Unspecified Property Set",
2826
    PropSet169_IDS
2827
  },
2828
  { {0xF04BEF95, 0xC585, 0x4197, {0xA2, 0xB7, 0xDF, 0x46, 0xFD, 0xC9, 0xEE, 0x6D}},
2829
    "???","Unspecified Property Set",
2830
    PropSet170_IDS
2831
  },
2832
  { {0x59DDE9F2, 0x5253, 0x40EA, {0x9A, 0x8B, 0x47, 0x9E, 0x96, 0xC6, 0x24, 0x9A}},
2833
    "???","Unspecified Property Set",
2834
    PropSet171_IDS
2835
  },
2836
  { {0x6444048F, 0x4C8B, 0x11D1, {0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03}},
2837
    "???","Unspecified Property Set",
2838
    PropSet172_IDS
2839
  },
2840
  { {0x9A9BC088, 0x4F6D, 0x469E, {0x99, 0x19, 0xE7, 0x05, 0x41, 0x20, 0x40, 0xF9}},
2841
    "???","Unspecified Property Set",
2842
    PropSet173_IDS
2843
  },
2844
  { {0x6336B95E, 0xC7A7, 0x426D, {0x86, 0xFD, 0x7A, 0xE3, 0xD3, 0x9C, 0x84, 0xB4}},
2845
    "???","Unspecified Property Set",
2846
    PropSet174_IDS
2847
  },
2848
  { {0xC06238B2, 0x0BF9, 0x4279, {0xA7, 0x23, 0x25, 0x85, 0x67, 0x15, 0xCB, 0x9D}},
2849
    "???","Unspecified Property Set",
2850
    PropSet175_IDS
2851
  },
2852
  { {0xEC0B4191, 0xAB0B, 0x4C66, {0x90, 0xB6, 0xC6, 0x63, 0x7C, 0xDE, 0xBB, 0xAB}},
2853
    "???","Unspecified Property Set",
2854
    PropSet176_IDS
2855
  },
2856
  { {0x660E04D6, 0x81AB, 0x4977, {0xA0, 0x9F, 0x82, 0x31, 0x31, 0x13, 0xAB, 0x26}},
2857
    "???","Unspecified Property Set",
2858
    PropSet177_IDS
2859
  },
2860
  { {0xDC54FD2E, 0x189D, 0x4871, {0xAA, 0x01, 0x08, 0xC2, 0xF5, 0x7A, 0x4A, 0xBC}},
2861
    "???","Unspecified Property Set",
2862
    PropSet178_IDS
2863
  },
2864
  { {0xCD102C9C, 0x5540, 0x4A88, {0xA6, 0xF6, 0x64, 0xE4, 0x98, 0x1C, 0x8C, 0xD1}},
2865
    "???","Unspecified Property Set",
2866
    PropSet179_IDS
2867
  },
2868
  { {0x1F856A9F, 0x6900, 0x4ABA, {0x95, 0x05, 0x2D, 0x5F, 0x1B, 0x4D, 0x66, 0xCB}},
2869
    "???","Unspecified Property Set",
2870
    PropSet180_IDS
2871
  },
2872
  { {0x90197CA7, 0xFD8F, 0x4E8C, {0x9D, 0xA3, 0xB5, 0x7E, 0x1E, 0x60, 0x92, 0x95}},
2873
    "???","Unspecified Property Set",
2874
    PropSet181_IDS
2875
  },
2876
  { {0xF334115E, 0xDA1B, 0x4509, {0x9B, 0x3D, 0x11, 0x95, 0x04, 0xDC, 0x7A, 0xBB}},
2877
    "???","Unspecified Property Set",
2878
    PropSet182_IDS
2879
  },
2880
  { {0xBF53D1C3, 0x49E0, 0x4F7F, {0x85, 0x67, 0x5A, 0x82, 0x1D, 0x8A, 0xC5, 0x42}},
2881
    "???","Unspecified Property Set",
2882
    PropSet183_IDS
2883
  },
2884
  { {0xC75FAA05, 0x96FD, 0x49E7, {0x9C, 0xB4, 0x9F, 0x60, 0x10, 0x82, 0xD5, 0x53}},
2885
    "???","Unspecified Property Set",
2886
    PropSet184_IDS
2887
  },
2888
  { {0x2E4B640D, 0x5019, 0x46D8, {0x88, 0x81, 0x55, 0x41, 0x4C, 0xC5, 0xCA, 0xA0}},
2889
    "???","Unspecified Property Set",
2890
    PropSet185_IDS
2891
  },
2892
  { {0x6B8B68F6, 0x200B, 0x47EA, {0x8D, 0x25, 0xD8, 0x05, 0x0F, 0x57, 0x33, 0x9F}},
2893
    "???","Unspecified Property Set",
2894
    PropSet186_IDS
2895
  },
2896
  { {0x2D152B40, 0xCA39, 0x40DB, {0xB2, 0xCC, 0x57, 0x37, 0x25, 0xB2, 0xFE, 0xC5}},
2897
    "???","Unspecified Property Set",
2898
    PropSet187_IDS
2899
  },
2900
  { {0x1E005EE6, 0xBF27, 0x428B, {0xB0, 0x1C, 0x79, 0x67, 0x6A, 0xCD, 0x28, 0x70}},
2901
    "???","Unspecified Property Set",
2902
    PropSet188_IDS
2903
  },
2904
  { {0xD6304E01, 0xF8F5, 0x4F45, {0x8B, 0x15, 0xD0, 0x24, 0xA6, 0x29, 0x67, 0x89}},
2905
    "???","Unspecified Property Set",
2906
    PropSet189_IDS
2907
  },
2908
  { {0x402B5934, 0xEC5A, 0x48C3, {0x93, 0xE6, 0x85, 0xE8, 0x6A, 0x2D, 0x93, 0x4E}},
2909
    "???","Unspecified Property Set",
2910
    PropSet190_IDS
2911
  },
2912
  { {0x9AEBAE7A, 0x9644, 0x487D, {0xA9, 0x2C, 0x65, 0x75, 0x85, 0xED, 0x75, 0x1A}},
2913
    "???","Unspecified Property Set",
2914
    PropSet191_IDS
2915
  },
2916
  { {0x63C25B20, 0x96BE, 0x488F, {0x87, 0x88, 0xC0, 0x9C, 0x40, 0x7A, 0xD8, 0x12}},
2917
    "???","Unspecified Property Set",
2918
    PropSet192_IDS
2919
  },
2920
  { {0x48FD6EC8, 0x8A12, 0x4CDF, {0xA0, 0x3E, 0x4E, 0xC5, 0xA5, 0x11, 0xED, 0xDE}},
2921
    "???","Unspecified Property Set",
2922
    PropSet193_IDS
2923
  },
2924
  { {0x64440491, 0x4C8B, 0x11D1, {0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03}},
2925
    "???","Unspecified Property Set",
2926
    PropSet194_IDS
2927
  },
2928
  { {0xC0AC206A, 0x827E, 0x4650, {0x95, 0xAE, 0x77, 0xE2, 0xBB, 0x74, 0xFC, 0xC9}},
2929
    "???","Unspecified Property Set",
2930
    PropSet195_IDS
2931
  }
2932
};
2933
2934
static const value_string version_vals[] = {
2935
  {0x00000102, "Windows Vista or 2008"},
2936
  {0x00000109, "Windows XP or 2003 with Windows Search 4.0"},
2937
  {0x00000700, "Windows 7 or 2008 R2"},
2938
  {0x00010102, "Windows Vista or 2008 (64 bit)"},
2939
  {0x00010109, "Windows XP or 2003 with Windows Search 4.0 (64 bit)"},
2940
  {0x00010700, "Windows 7 or 2008 R2 (64 bit)"},
2941
  {0, NULL}
2942
};
2943
2944
static const struct GuidPropertySet *GuidPropertySet_find_guid(const e_guid_t *guid)
2945
0
{
2946
0
  unsigned i;
2947
0
  for (i=0; i<array_length(GuidPropertySet); i++) {
2948
0
    if (guid_cmp(&GuidPropertySet[i].guid, guid) == 0) {
2949
0
      return &GuidPropertySet[i];
2950
0
    }
2951
0
  }
2952
0
  return NULL;
2953
0
}
2954
2955
static char* get_name_from_fullpropspec(struct CFullPropSpec *v, wmem_allocator_t* allocator)
2956
0
{
2957
0
  const struct GuidPropertySet *pset = GuidPropertySet_find_guid(&v->guid);
2958
0
  const char *id_str, *guid_str;
2959
0
  id_str = pset ? try_val_to_str(v->u.propid, pset->id_map) : NULL;
2960
2961
0
  if (id_str)
2962
0
    return wmem_strdup(allocator, id_str);
2963
2964
0
  guid_str = guids_get_guid_name(&v->guid, allocator);
2965
0
  if (guid_str) {
2966
0
    guid_str = wmem_strdup_printf(allocator, "\"%s\"", guid_str);
2967
0
  } else {
2968
0
    guid_str = wmem_strdup_printf(allocator, "{%s}", guid_to_str(allocator, &v->guid));
2969
0
  }
2970
0
  if (v->kind == PRSPEC_LPWSTR)
2971
0
    return wmem_strdup_printf(allocator, "%s \"%s\"", guid_str, v->u.name);
2972
0
  if (v->kind == PRSPEC_PROPID)
2973
0
    return wmem_strdup_printf(allocator, "%s 0x%08x", guid_str, v->u.propid);
2974
2975
0
  return wmem_strdup_printf(allocator, "%s <INVALID>", guid_str);
2976
0
}
2977
2978
/******************************************************************************/
2979
static int parse_uin32_array(tvbuff_t *tvb, int offset, proto_tree *tree, uint32_t count, const char *txt)
2980
0
{
2981
0
  uint32_t v, i;
2982
0
  proto_item *item;
2983
2984
0
  proto_tree_add_subtree(tree, tvb, offset, count * 4, ett_mswsp_uin32_array, &item, txt);
2985
0
  proto_item_append_text(item, " count %u [", count);
2986
0
  for (i=0; i<count; i++) {
2987
0
    v = tvb_get_letohl(tvb, offset);
2988
0
    offset += 4;
2989
0
    if (i>0) {
2990
0
      proto_item_append_text(item, ",%u", v);
2991
0
    } else {
2992
0
      proto_item_append_text(item, "%u", v);
2993
0
    }
2994
0
  }
2995
0
  proto_item_append_text(item, "]");
2996
0
  return offset;
2997
0
}
2998
2999
static int parse_padding(tvbuff_t *tvb, int offset, int alignment, proto_tree *pad_tree, const char * txt)
3000
0
{
3001
0
  if (offset % alignment) {
3002
0
    const int padding = alignment - (offset % alignment);
3003
0
    proto_item *ti;
3004
0
    proto_tree_add_subtree(pad_tree, tvb, offset, padding, ett_mswsp_msg_padding, &ti, txt);
3005
3006
0
    proto_item_append_text(ti, " (%d)", padding);
3007
0
    offset += padding;
3008
0
  }
3009
0
  return offset;
3010
0
}
3011
3012
static int parse_guid(tvbuff_t *tvb, wmem_allocator_t* allocator, int offset, proto_tree *tree, e_guid_t *guid, const char *text)
3013
0
{
3014
0
  const char *guid_str, *name, *bytes;
3015
0
  proto_tree *tr;
3016
3017
0
  tvb_get_letohguid(tvb, offset, guid);
3018
0
  guid_str =  guid_to_str(allocator, guid);
3019
0
  name = guids_get_guid_name(guid, allocator);
3020
3021
0
  tr = proto_tree_add_subtree_format(tree, tvb, offset, 16, ett_GUID, NULL, "%s: %s {%s}", text, name ? name : "", guid_str);
3022
3023
3024
0
  proto_tree_add_item(tr, hf_mswsp_guid_time_low, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3025
0
  offset += 4;
3026
0
  proto_tree_add_item(tr, hf_mswsp_guid_time_mid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3027
0
  offset += 2;
3028
0
  proto_tree_add_item(tr, hf_mswsp_guid_time_high, tvb, offset, 2, ENC_LITTLE_ENDIAN);
3029
0
  offset += 2;
3030
0
  proto_tree_add_item(tr, hf_mswsp_guid_time_clock_hi, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3031
0
  offset += 1;
3032
0
  proto_tree_add_item(tr, hf_mswsp_guid_time_clock_low, tvb, offset, 1, ENC_LITTLE_ENDIAN);
3033
0
  offset += 1;
3034
0
  bytes = bytes_to_str_punct(allocator, &guid->data4[2], 6, ':');
3035
0
  proto_tree_add_string(tr, hf_mswsp_guid_node, tvb, offset, 6, bytes);
3036
3037
0
  offset += 6;
3038
3039
0
  return offset;
3040
0
}
3041
3042
/* Language Code ID - MS-LCID section 2.2 "LCID Structure":
3043
 *
3044
 *  https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/63d3d639-7fd2-4afb-abbe-0d5b5551eef8
3045
 */
3046
static int parse_lcid(tvbuff_t *tvb, int offset, proto_tree *parent_tree, const char *text)
3047
0
{
3048
0
  proto_item *item;
3049
0
  proto_tree *tree;
3050
0
  uint32_t lcid;
3051
3052
0
  lcid = tvb_get_letohl(tvb, offset);
3053
0
  item = proto_tree_add_uint_format(parent_tree, hf_mswsp_lcid, tvb, offset, 4, lcid, "%s: 0x%x", text, lcid);
3054
0
  tree = proto_item_add_subtree(item, ett_LCID);
3055
3056
0
  proto_tree_add_uint(tree, hf_mswsp_lcid_langid, tvb, offset + 2, 2, lcid);
3057
0
  proto_tree_add_uint(tree, hf_mswsp_lcid_sortid, tvb, offset + 1, 1, (lcid >> 16) & 0xF);
3058
0
  offset += 4;
3059
0
  return offset;
3060
0
}
3061
3062
/*****************************************************************************************/
3063
// Forward declarations because of circular dependencies
3064
3065
/* 2.2.1.1 CBaseStorageVariant */
3066
static int parse_CBaseStorageVariant(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, struct CBaseStorageVariant *value, const char *text);
3067
3068
/* 2.2.1.2 CFullPropSpec */
3069
static int parse_CFullPropSpec(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree *tree, proto_tree *pad_tree, struct CFullPropSpec *v, const char *txt);
3070
3071
/* 2.2.1.6 CNodeRestriction */
3072
static int parse_CNodeRestriction(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree, proto_tree *pad_tree, struct CNodeRestriction *v, const char* txt);
3073
3074
/* 2.2.1.17 CRestriction */
3075
static int parse_CRestriction(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, struct CRestriction *v, const char *txt);
3076
3077
/*
3078
TODO:
3079
2.2.1.4 CInternalPropertyRestriction
3080
2.2.1.9 CScopeRestriction
3081
2.2.1.11 CVectorRestriction
3082
2.2.1.13 CRelDocRestriction
3083
2.2.1.14 CProbRestriction
3084
2.2.1.15 CFeedbackRestriction
3085
2.2.1.19 CCategorizationSet
3086
2.2.1.45 SERIALIZEDPROPERTYVALUE
3087
2.2.1.46 CCompletionCategSp
3088
*/
3089
3090
static int parse_CSort(tvbuff_t *tvb, int offset, proto_tree *parent_tree, proto_tree *pad_tree _U_, const char *txt)
3091
0
{
3092
0
  proto_item *item;
3093
0
  proto_tree *tree;
3094
3095
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CSort, &item, txt);
3096
3097
0
  proto_tree_add_item(tree, hf_mswsp_cscort_column, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3098
0
  offset += 4;
3099
3100
0
  proto_tree_add_item(tree, hf_mswsp_cscort_order, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3101
0
  offset += 4;
3102
3103
0
  proto_tree_add_item(tree, hf_mswsp_cscort_individual, tvb, offset, 4, ENC_LITTLE_ENDIAN);
3104
0
  offset += 4;
3105
3106
0
  offset = parse_lcid(tvb, offset, tree, "lcid");
3107
3108
0
  proto_item_set_end(item, tvb, offset);
3109
0
  return offset;
3110
0
}
3111
3112
static int parse_CSortSet(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
3113
0
{
3114
0
  uint32_t count, i;
3115
3116
0
  proto_item *item;
3117
0
  proto_tree *tree;
3118
3119
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CSortSet, &item, txt);
3120
3121
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_cscortset_count, tvb, offset, 4, ENC_LITTLE_ENDIAN, &count);
3122
0
  offset += 4;
3123
3124
0
  for (i=0; i<count; i++) {
3125
0
    offset = parse_padding(tvb, offset, 4, tree, wmem_strdup_printf(pinfo->pool, "padding_sortArray[%u]", i));
3126
0
    offset = parse_CSort(tvb, offset, tree, pad_tree, wmem_strdup_printf(pinfo->pool, "sortArray[%u]", i));
3127
0
  }
3128
3129
0
  proto_item_set_end(item, tvb, offset);
3130
0
  return offset;
3131
0
}
3132
3133
static int parse_CTableColumn(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, struct CTableColumn *col, const char *txt)
3134
0
{
3135
3136
3137
0
  proto_item *item, *ti_type;
3138
0
  proto_tree *tree;
3139
0
  struct vtype_data *type;
3140
0
  enum vType vtype_val = VT_EMPTY;
3141
0
  enum vType vtype_valhi = VT_EMPTY;
3142
0
  struct CFullPropSpec v;
3143
0
  uint8_t used;
3144
3145
0
  const char *modifier = "";
3146
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CTableColumn, &item, txt);
3147
3148
0
  offset = parse_CFullPropSpec(tvb, pinfo, offset, tree, pad_tree, &v, "PropSpec");
3149
0
  col->name = get_name_from_fullpropspec(&v, pinfo->pool);
3150
0
  col->vtype = tvb_get_letohl(tvb, offset);
3151
0
  vtype_val = (enum vType)col->vtype;
3152
0
  vtype_valhi = (enum vType)(col->vtype & 0xFF00);
3153
0
  if (vtype_valhi) {
3154
0
    if (vtype_valhi == VT_VECTOR) {
3155
0
      modifier = "|VT_VECTOR";
3156
0
    } else if (vtype_valhi == VT_ARRAY) {
3157
0
      modifier = "|VT_ARRAY";
3158
0
    } else {
3159
0
      modifier = "|(Unknown, possibly error)";
3160
0
    }
3161
0
  }
3162
0
  type = vType_get_type(vtype_val);
3163
0
  if (type == NULL) {
3164
    /*
3165
     * Not a valid type.
3166
     */
3167
0
    ti_type = proto_tree_add_string(tree, hf_mswsp_ctablecolumn_vtype, tvb, offset, 4, "Unknown CTableColumn type");
3168
0
    expert_add_info(pinfo, ti_type, &ei_mswsp_invalid_variant_type);
3169
0
  } else
3170
0
    proto_tree_add_string_format_value(tree, hf_mswsp_ctablecolumn_vtype, tvb, offset, 4, type->str, "%s%s", type->str, modifier);
3171
0
  offset += 4;
3172
3173
0
  used = tvb_get_uint8(tvb, offset);
3174
0
  col->aggregateused = used;
3175
0
  proto_tree_add_uint(tree, hf_mswsp_ctablecolumn_aggused, tvb, offset, 1, used);
3176
0
  offset += 1;
3177
3178
0
  if (used) {
3179
0
    col->aggregatetype = tvb_get_uint8(tvb, offset);
3180
0
    proto_tree_add_string(tree, hf_mswsp_ctablecolumn_aggtype, tvb, offset, 1, val_to_str(pinfo->pool, col->aggregatetype, DBAGGTTYPE, "(Unknown: 0x%x)"));
3181
0
    offset += 1;
3182
0
  }
3183
0
  col->valueused = tvb_get_uint8(tvb, offset);
3184
0
  used = col->valueused;
3185
0
  proto_tree_add_uint(tree, hf_mswsp_ctablecolumn_valused, tvb, offset, 1, used);
3186
0
  offset += 1;
3187
3188
0
  if (used) {
3189
0
    offset = parse_padding(tvb, offset, 2, pad_tree, "padding_Value");
3190
3191
0
    col->valueoffset = tvb_get_letohs(tvb, offset);
3192
0
    proto_tree_add_uint(tree, hf_mswsp_ctablecolumn_valoffset, tvb, offset, 2,  col->valueoffset);
3193
0
    offset += 2;
3194
3195
0
    col->valuesize = tvb_get_letohs(tvb, offset);
3196
0
    proto_tree_add_uint(tree, hf_mswsp_ctablecolumn_valsize, tvb, offset, 2, col->valuesize);
3197
0
    offset += 2;
3198
0
  }
3199
3200
0
  used = tvb_get_uint8(tvb, offset);
3201
0
  col->statusused = used;
3202
0
  proto_tree_add_uint(tree, hf_mswsp_ctablecolumn_statused, tvb, offset, 1, used);
3203
0
  offset += 1;
3204
3205
0
  if (used) {
3206
0
    offset = parse_padding(tvb, offset, 2, pad_tree, "padding_Status");
3207
3208
0
    col->statusoffset = tvb_get_letohs(tvb, offset);
3209
0
    proto_tree_add_uint(tree, hf_mswsp_ctablecolumn_statoffset, tvb, offset, 2, col->statusoffset);
3210
0
    offset += 2;
3211
0
  }
3212
3213
0
  used = tvb_get_uint8(tvb, offset);
3214
0
  proto_tree_add_uint(tree, hf_mswsp_ctablecolumn_lenused, tvb, offset, 1, used);
3215
0
  col->lengthused = used;
3216
0
  offset += 1;
3217
3218
0
  if (used) {
3219
0
    offset = parse_padding(tvb, offset, 2, pad_tree, "padding_Length");
3220
3221
0
    col->lengthoffset = tvb_get_letohs(tvb, offset);
3222
0
    proto_tree_add_uint(tree, hf_mswsp_ctablecolumn_lenoffset, tvb, offset, 2, col->lengthoffset);
3223
0
    offset += 2;
3224
0
  }
3225
3226
0
  proto_item_set_end(item, tvb, offset);
3227
0
  return offset;
3228
0
}
3229
3230
static const value_string KIND_vals[] = {
3231
  {PRSPEC_LPWSTR, "PRSPEC_LPWSTR"},
3232
  {PRSPEC_PROPID, "PRSPEC_PROPID"},
3233
  {0, NULL}
3234
};
3235
3236
static int parse_CFullPropSpec(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, struct CFullPropSpec *v, const char *txt)
3237
0
{
3238
0
  const struct GuidPropertySet *pset;
3239
0
  const char *id_str, *guid_str;
3240
3241
0
  proto_item *item;
3242
0
  proto_tree *tree;
3243
3244
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CFullPropSpec, &item, txt);
3245
3246
0
  offset = parse_padding(tvb, offset, 8, pad_tree, "paddingPropSet");
3247
3248
0
  offset = parse_guid(tvb, pinfo->pool, offset, tree, &v->guid, "GUID");
3249
0
  pset = GuidPropertySet_find_guid(&v->guid);
3250
3251
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_cfullpropspec_kind, tvb, offset, 4, ENC_LITTLE_ENDIAN, (uint32_t*)&v->kind);
3252
0
  offset += 4;
3253
3254
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_cfullpropspec_propid, tvb, offset, 4, ENC_LITTLE_ENDIAN, &v->u.propid);
3255
0
  offset += 4;
3256
3257
0
  if (v->kind == PRSPEC_LPWSTR) {
3258
0
    int len = 2*v->u.propid;
3259
0
    proto_tree_add_item_ret_string(tree, hf_mswsp_cfullpropspec_propname, tvb, offset, len, ENC_LITTLE_ENDIAN | ENC_UCS_2, pinfo->pool, &v->u.name);
3260
0
    offset += len;
3261
0
  }
3262
3263
0
  id_str = pset ? try_val_to_str(v->u.propid, pset->id_map) : NULL;
3264
3265
0
  if (id_str) {
3266
0
    proto_item_append_text(item, ": %s", id_str);
3267
0
  } else {
3268
0
    guid_str = guids_get_guid_name(&v->guid, pinfo->pool);
3269
0
    if (guid_str) {
3270
0
      proto_item_append_text(item, ": \"%s\"", guid_str);
3271
0
    } else {
3272
0
      guid_str = guid_to_str(pinfo->pool, &v->guid);
3273
0
      proto_item_append_text(item, ": {%s}", guid_str);
3274
0
    }
3275
3276
0
    if (v->kind == PRSPEC_LPWSTR) {
3277
0
      proto_item_append_text(item, " \"%s\"", v->u.name);
3278
0
    } else if (v->kind == PRSPEC_PROPID) {
3279
0
      proto_item_append_text(item, " 0x%08x", v->u.propid);
3280
0
    } else {
3281
0
      proto_item_append_text(item, " <INVALID>");
3282
0
    }
3283
0
  }
3284
3285
0
  proto_item_set_end(item, tvb, offset);
3286
0
  return offset;
3287
0
}
3288
3289
3290
3291
static const value_string PR_VALS[] = {
3292
  {PRLT, "PRLT"},
3293
  {PRLE, "PRLE"},
3294
  {PRGT, "PRGT"},
3295
  {PRGE, "PRGE"},
3296
  {PREQ, "PREQ"},
3297
  {PRNE, "PRNE"},
3298
  {PRRE, "PRRE"},
3299
  {PRAllBits, "PRAllBits"},
3300
  {PRSomeBits, "PRSomeBits"},
3301
  {PRAll, "PRAll"},
3302
  {PRAny, "PRAny"},
3303
  {0, NULL}
3304
};
3305
3306
static int parse_relop(tvbuff_t *tvb, packet_info* pinfo, int offset,  proto_tree *tree, uint32_t *relop, const char **str)
3307
0
{
3308
0
  const char *str1 = NULL, *str2 = NULL;
3309
0
  uint32_t tmp = tvb_get_letohl(tvb, offset);
3310
0
  uint32_t modifier = (tmp & 0xF00);
3311
0
  DISSECTOR_ASSERT((tmp & 0xf) < PRSomeBits +1);
3312
3313
0
  switch(tmp & 0xf) {
3314
0
    case PRLT:
3315
0
      *relop = PRLT;
3316
0
      break;
3317
0
    case PRLE:
3318
0
      *relop = PRLE;
3319
0
      break;
3320
0
    case PRGT:
3321
0
      *relop = PRGT;
3322
0
      break;
3323
0
    case PRGE:
3324
0
      *relop = PRGE;
3325
0
      break;
3326
0
    case PREQ:
3327
0
      *relop = PREQ;
3328
0
      break;
3329
0
    case PRNE:
3330
0
      *relop = PRNE;
3331
0
      break;
3332
0
    case PRRE:
3333
0
      *relop = PRRE;
3334
0
      break;
3335
0
    case PRAllBits:
3336
0
      *relop = PRAllBits;
3337
0
      break;
3338
0
    case PRSomeBits:
3339
0
      *relop = PRSomeBits;
3340
0
      break;
3341
0
    default:
3342
0
      break;
3343
0
  }
3344
3345
0
  str2 = val_to_str(pinfo->pool, *relop, PR_VALS, "0x%04x");
3346
3347
0
  if (modifier) {
3348
0
    switch (modifier) {
3349
0
      case PRAll:
3350
0
        *relop = *relop | PRAll;
3351
0
        break;
3352
0
      case PRAny:
3353
0
        *relop |= PRAny;
3354
0
        break;
3355
0
      default:
3356
0
        DISSECTOR_ASSERT(false);
3357
0
        break;
3358
0
    }
3359
0
    str1 = try_val_to_str((modifier), PR_VALS);
3360
0
    if (str1) {
3361
0
      str1 = wmem_strdup_printf(pinfo->pool, "%s | ", str1);
3362
0
      str2 = wmem_strdup_printf(pinfo->pool, "%s%s", str1, str2);
3363
0
    }
3364
0
  }
3365
0
  proto_tree_add_string_format_value(tree, hf_mswsp_cproprestrict_relop, tvb, offset, 4, str2, "%s (0x%04x)", str2[0]=='\0' ? "" : str2, *relop);
3366
3367
0
  if (str) {
3368
0
    *str = str2;
3369
0
  }
3370
0
  return offset + 4;
3371
0
}
3372
static int parse_CPropertyRestriction(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, struct CPropertyRestriction *v, const char *txt)
3373
0
{
3374
0
  proto_tree *tree;
3375
0
  proto_item *item;
3376
0
  const char *str = NULL;
3377
3378
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CPropertyRestriction, &item, txt);
3379
3380
0
  offset = parse_relop(tvb, pinfo, offset, tree, &v->relop, &str);
3381
0
  proto_item_append_text(item, " Op: %s", str);
3382
3383
0
  offset = parse_CFullPropSpec(tvb, pinfo, offset, tree, pad_tree, &v->property, "Property");
3384
3385
0
  offset = parse_CBaseStorageVariant(tvb, pinfo, offset, tree, pad_tree, &v->prval, "prval");
3386
3387
0
  offset = parse_padding(tvb, offset, 4, pad_tree, "padding_lcid");
3388
3389
0
  v->lcid = tvb_get_letohl(tvb, offset);
3390
0
  offset = parse_lcid(tvb, offset, tree, "lcid");
3391
3392
0
  proto_item_set_end(item, tvb, offset);
3393
3394
0
  return offset;
3395
0
}
3396
3397
// NOLINTNEXTLINE(misc-no-recursion)
3398
static int parse_CCoercionRestriction(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, struct CCoercionRestriction *v, const char *txt)
3399
0
{
3400
0
  proto_tree *tree;
3401
0
  proto_item *item;
3402
3403
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CCoercionRestriction, &item, txt);
3404
3405
0
  v->value = tvb_get_letohieee_float(tvb, offset);
3406
0
  proto_tree_add_float(tree, hf_mswsp_ccoercerestrict_value, tvb, offset, 4, v->value);
3407
3408
0
  offset += 4;
3409
3410
0
  offset = parse_CRestriction(tvb, pinfo, offset, tree, pad_tree, &v->child, "child");
3411
3412
0
  proto_item_set_end(item, tvb, offset);
3413
0
  return offset;
3414
0
}
3415
3416
static int parse_CContentRestriction(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, struct CContentRestriction *v, const char *txt)
3417
0
{
3418
0
  proto_tree *tree;
3419
0
  proto_item *item;
3420
0
  uint32_t cc;
3421
3422
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CContentRestriction, &item, txt);
3423
3424
0
  offset = parse_CFullPropSpec(tvb, pinfo, offset, tree, pad_tree, &v->property, "Property");
3425
3426
0
  offset = parse_padding(tvb, offset, 4, pad_tree, "Padding1");
3427
3428
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_ccontentrestrict_cc, tvb, offset, 4, ENC_LITTLE_ENDIAN, &cc);
3429
0
  offset += 4;
3430
3431
0
  proto_tree_add_item_ret_string(tree, hf_mswsp_ccontentrestrict_phrase, tvb, offset, 2*cc, ENC_LITTLE_ENDIAN | ENC_UCS_2, pinfo->pool, &v->phrase);
3432
0
  offset += 2*cc;
3433
3434
0
  offset = parse_padding(tvb, offset, 4, pad_tree, "Padding2");
3435
3436
0
  v->lcid = tvb_get_letohl(tvb, offset);
3437
0
  offset = parse_lcid(tvb, offset, tree, "lcid");
3438
3439
0
  v->method = tvb_get_letohl(tvb, offset);
3440
0
  proto_tree_add_uint(tree, hf_mswsp_ccontentrestrict_method, tvb, offset, 4, v->method);
3441
0
  offset += 4;
3442
3443
0
  proto_item_set_end(item, tvb, offset);
3444
0
  return offset;
3445
0
}
3446
3447
static int parse_CNatLanguageRestriction(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, struct CNatLanguageRestriction *v, const char *txt)
3448
0
{
3449
0
  proto_tree *tree;
3450
0
  proto_item *item;
3451
0
  uint32_t cc;
3452
3453
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CNatLanguageRestriction, &item, txt);
3454
3455
0
  offset = parse_CFullPropSpec(tvb, pinfo, offset, tree, pad_tree, &v->property, "Property");
3456
3457
0
  offset = parse_padding(tvb, offset, 4, pad_tree, "padding_cc");
3458
3459
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_natlangrestrict_cc, tvb, offset, 4, ENC_LITTLE_ENDIAN, &cc);
3460
0
  offset += 4;
3461
3462
0
  proto_tree_add_item_ret_string(tree, hf_mswsp_natlangrestrict_phrase, tvb, offset, 2*cc, ENC_LITTLE_ENDIAN | ENC_UCS_2, pinfo->pool, &v->phrase);
3463
0
  offset += 2*cc;
3464
3465
0
  offset = parse_padding(tvb, offset, 4, pad_tree, "padding_lcid");
3466
3467
0
  v->lcid = tvb_get_letohl(tvb, offset);
3468
0
  offset = parse_lcid(tvb, offset, tree, "lcid");
3469
3470
0
  proto_item_set_end(item, tvb, offset);
3471
0
  return offset;
3472
0
}
3473
3474
3475
static int parse_CReuseWhere(tvbuff_t *tvb, int offset, proto_tree *parent_tree, proto_tree *pad_tree _U_, struct CReuseWhere *v, const char *txt)
3476
0
{
3477
0
  proto_item *item;
3478
3479
0
  proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_mswsp_msg_creusewhere, &item, txt);
3480
0
  v->whereId = tvb_get_letohl(tvb, offset);
3481
0
  offset += 4;
3482
3483
0
  proto_item_append_text(item, " Id: %u", v->whereId);
3484
3485
0
  proto_item_set_end(item, tvb, offset);
3486
0
  return offset;
3487
0
}
3488
3489
static const value_string RT_VALS[] =  {
3490
  {RTNone, "RTNone"},
3491
  {RTAnd, "RTAnd"},
3492
  {RTOr, "RTOr"},
3493
  {RTNot, "RTNot"},
3494
  {RTContent, "RTContent"},
3495
  {RTProperty, "RTProperty"},
3496
  {RTProximity, "RTProximity"},
3497
  {RTVector, ""},
3498
  {RTNatLanguage, "RTNatLanguage"},
3499
  {RTScope, "RTScope"},
3500
  {RTCoerce_Add, "RTCoerce_Add"},
3501
  {RTCoerce_Multiply, "RTCoerce_Multiply"},
3502
  {RTCoerce_Absolute, "RTCoerce_Absolute"},
3503
  {RTProb, "RTProb"},
3504
  {RTFeedback, "RTFeedback"},
3505
  {RTReldoc, "RTReldoc"},
3506
  {RTReuseWhere, "RTReuseWhere"},
3507
  {RTInternalProp, "RTInternalProp"},
3508
  {RTPhrase, "RTInternalProp"},
3509
  {0, NULL}
3510
};
3511
3512
static int parse_rType(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree *tree, enum rType *rtype, const char **str)
3513
0
{
3514
0
  const char *txt = NULL;
3515
0
  uint32_t type = tvb_get_letohl(tvb, offset);
3516
0
  switch(type) {
3517
0
    case RTNone:
3518
0
      *rtype = RTNone;
3519
0
      break;
3520
0
    case RTAnd:
3521
0
      *rtype = RTAnd;
3522
0
      break;
3523
0
    case RTOr:
3524
0
      *rtype = RTOr;
3525
0
      break;
3526
0
    case RTNot:
3527
0
      *rtype = RTNot;
3528
0
      break;
3529
0
    case RTContent:
3530
0
      *rtype = RTContent;
3531
0
      break;
3532
0
    case RTProperty:
3533
0
      *rtype = RTProperty;
3534
0
      break;
3535
0
    case RTProximity:
3536
0
      *rtype = RTProximity;
3537
0
      break;
3538
0
    case RTVector:
3539
0
      *rtype = RTVector;
3540
0
      break;
3541
0
    case RTNatLanguage:
3542
0
      *rtype = RTNatLanguage;
3543
0
      break;
3544
0
    case RTScope:
3545
0
      *rtype = RTScope;
3546
0
      break;
3547
0
    case RTCoerce_Add:
3548
0
      *rtype = RTCoerce_Add;
3549
0
      break;
3550
0
    case RTCoerce_Multiply:
3551
0
      *rtype = RTCoerce_Multiply;
3552
0
      break;
3553
0
    case RTCoerce_Absolute:
3554
0
      *rtype = RTCoerce_Absolute;
3555
0
      break;
3556
0
    case RTProb:
3557
0
      *rtype = RTProb;
3558
0
      break;
3559
0
    case RTFeedback:
3560
0
      *rtype = RTFeedback;
3561
0
      break;
3562
0
    case RTReldoc:
3563
0
      *rtype = RTReldoc;
3564
0
      break;
3565
0
    case RTReuseWhere:
3566
0
      *rtype = RTReuseWhere;
3567
0
      break;
3568
0
    case RTInternalProp:
3569
0
      *rtype = RTInternalProp;
3570
0
      break;
3571
0
    default:
3572
0
      DISSECTOR_ASSERT(false);
3573
0
      break;
3574
0
  }
3575
0
  txt = val_to_str(pinfo->pool, *rtype, RT_VALS, "0x%.8x");
3576
0
  proto_tree_add_string_format_value(tree, hf_mswsp_crestrict_ultype, tvb, offset, 4, txt, "%s (0x%.8x)",  txt[0] == '0' ? "" : txt, *rtype);
3577
0
  if (str) {
3578
0
    *str = txt;
3579
0
  }
3580
0
  return offset + 4;
3581
0
}
3582
3583
// NOLINTNEXTLINE(misc-no-recursion)
3584
static int parse_CRestriction(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, struct CRestriction *v, const char *txt)
3585
0
{
3586
0
  proto_tree *tree;
3587
0
  proto_item *item;
3588
0
  const char *str;
3589
3590
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CRestriction, &item, txt);
3591
3592
0
  offset = parse_rType(tvb, pinfo, offset, tree, &v->ulType, &str);
3593
0
  proto_item_append_text(item, " Type: %s", str);
3594
3595
0
  v->Weight = tvb_get_letohl(tvb, offset);
3596
0
  proto_tree_add_uint(tree, hf_mswsp_crestrict_weight, tvb, offset, 4, v->Weight);
3597
0
  offset += 4;
3598
3599
0
  increment_dissection_depth(pinfo);
3600
0
  switch(v->ulType) {
3601
0
  case RTNone:
3602
0
    break;
3603
0
  case RTAnd:
3604
0
  case RTOr:
3605
0
  case RTProximity:
3606
0
  case RTPhrase: {
3607
0
    v->u.RTAnd = wmem_new(pinfo->pool, struct CNodeRestriction);
3608
0
    offset = parse_CNodeRestriction(tvb, pinfo, offset, tree, pad_tree, v->u.RTAnd, "CNodeRestriction");
3609
0
    break;
3610
0
  }
3611
0
  case RTNot: {
3612
0
    v->u.RTNot = wmem_new(pinfo->pool, struct CRestriction);
3613
0
    offset = parse_CRestriction(tvb, pinfo, offset, tree, pad_tree,
3614
0
                  v->u.RTNot, "CRestriction");
3615
0
    break;
3616
0
  }
3617
0
  case RTProperty: {
3618
0
    v->u.RTProperty = wmem_new(pinfo->pool, struct CPropertyRestriction);
3619
0
    offset = parse_CPropertyRestriction(tvb, pinfo, offset, tree, pad_tree,
3620
0
                      v->u.RTProperty, "CPropertyRestriction");
3621
0
    break;
3622
0
  }
3623
0
  case RTCoerce_Add:
3624
0
  case RTCoerce_Multiply:
3625
0
  case RTCoerce_Absolute: {
3626
0
    v->u.RTCoerce_Add = wmem_new(pinfo->pool, struct CCoercionRestriction);
3627
0
    offset = parse_CCoercionRestriction(tvb, pinfo, offset, tree, pad_tree,
3628
0
                      v->u.RTCoerce_Add, "CCoercionRestriction");
3629
0
    break;
3630
0
  }
3631
0
  case RTContent: {
3632
0
    v->u.RTContent = wmem_new(pinfo->pool, struct CContentRestriction);
3633
0
    offset = parse_CContentRestriction(tvb, pinfo, offset, tree, pad_tree,
3634
0
                       v->u.RTContent, "CContentRestriction");
3635
0
    break;
3636
0
  }
3637
0
  case RTReuseWhere: {
3638
0
    v->u.RTReuseWhere = wmem_new(pinfo->pool, struct CReuseWhere);
3639
0
    offset = parse_CReuseWhere(tvb, offset, tree, pad_tree,
3640
0
                   v->u.RTReuseWhere, "CReuseWhere");
3641
0
    break;
3642
0
  }
3643
0
  case RTNatLanguage: {
3644
0
    v->u.RTNatLanguage = wmem_new(pinfo->pool, struct CNatLanguageRestriction);
3645
0
    offset = parse_CNatLanguageRestriction(tvb, pinfo, offset, tree, pad_tree,
3646
0
                         v->u.RTNatLanguage, "CNatLanguageRestriction");
3647
0
    break;
3648
0
  }
3649
0
  default:
3650
0
    proto_item_append_text(item, " Not supported!");
3651
0
  }
3652
0
  decrement_dissection_depth(pinfo);
3653
3654
0
  proto_item_set_end(item, tvb, offset);
3655
0
  return offset;
3656
0
}
3657
3658
static int parse_CRestrictionArray(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
3659
0
{
3660
0
  uint32_t present, count;
3661
3662
0
  proto_tree *tree;
3663
0
  proto_item *item;
3664
3665
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CRestrictionArray, &item, txt);
3666
3667
0
  pad_tree = tree;
3668
3669
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_crestrictarray_count, tvb, offset, 1, ENC_LITTLE_ENDIAN, &count);
3670
0
  offset += 1;
3671
3672
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_crestrictarray_present, tvb, offset, 1, ENC_LITTLE_ENDIAN, &present);
3673
0
  offset += 1;
3674
3675
0
  if (present) {
3676
0
    unsigned i;
3677
0
    offset = parse_padding(tvb, offset, 4, pad_tree, "paddingCRestrictionPresent");
3678
3679
0
    for (i=0; i<count; i++) {
3680
0
      struct CRestriction r;
3681
0
      offset = parse_CRestriction(tvb, pinfo, offset, tree, pad_tree, &r, wmem_strdup_printf(pinfo->pool, "Restriction[%d]", i));
3682
0
    }
3683
0
  }
3684
0
  proto_item_set_end(item, tvb, offset);
3685
0
  return offset;
3686
0
}
3687
3688
// NOLINTNEXTLINE(misc-no-recursion)
3689
static int parse_CNodeRestriction(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, struct CNodeRestriction *v, const char* txt)
3690
0
{
3691
0
  proto_tree *tree;
3692
0
  proto_item *item;
3693
0
  unsigned i;
3694
3695
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CNodeRestriction, &item, txt);
3696
3697
0
  v->cNode = tvb_get_letohl(tvb, offset);
3698
0
  proto_tree_add_uint(tree, hf_mswsp_cnoderestrict_cnode, tvb, offset, 4, v->cNode);
3699
0
  offset += 4;
3700
3701
0
  for (i=0; i<v->cNode; i++) {
3702
0
    struct CRestriction r;
3703
0
    ZERO_STRUCT(r);
3704
0
    offset = parse_CRestriction(tvb, pinfo, offset, tree, pad_tree, &r, wmem_strdup_printf(pinfo->pool, "paNode[%u]", i));
3705
0
    offset = parse_padding(tvb, offset, 4, tree, wmem_strdup_printf(pinfo->pool, "padding_paNode[%u]", i)); /*at begin or end of loop ????*/
3706
3707
0
  }
3708
3709
0
  proto_item_set_end(item, tvb, offset);
3710
0
  return offset;
3711
0
}
3712
3713
3714
/*****************************************************************************************/
3715
3716
static int vvalue_tvb_get0(tvbuff_t *tvb _U_, packet_info* pinfo _U_, int offset _U_, void *val _U_)
3717
0
{
3718
0
  return 0;
3719
0
}
3720
3721
static int vvalue_tvb_get1(tvbuff_t *tvb, packet_info* pinfo _U_, int offset, void *val)
3722
0
{
3723
0
  uint8_t *ui1 = (uint8_t*)val;
3724
0
  *ui1 = tvb_get_uint8(tvb, offset);
3725
0
  return 1;
3726
0
}
3727
3728
static int vvalue_tvb_get2(tvbuff_t *tvb, packet_info* pinfo _U_, int offset, void *val)
3729
0
{
3730
0
  uint16_t *ui2 = (uint16_t*)val;
3731
0
  *ui2 = tvb_get_letohs(tvb, offset);
3732
0
  return 2;
3733
0
}
3734
3735
static int vvalue_tvb_get4(tvbuff_t *tvb, packet_info* pinfo _U_, int offset, void *val)
3736
0
{
3737
0
  uint32_t *ui4 = (uint32_t*)val;
3738
0
  *ui4 = tvb_get_letohl(tvb, offset);
3739
0
  return 4;
3740
0
}
3741
3742
static int vvalue_tvb_get8(tvbuff_t *tvb, packet_info* pinfo _U_, int offset, void *val)
3743
0
{
3744
0
  uint64_t *ui8 = (uint64_t*)val;
3745
0
  *ui8 = tvb_get_letoh64(tvb, offset);
3746
0
  return 8;
3747
0
}
3748
3749
static int vvalue_tvb_blob(tvbuff_t *tvb, packet_info* pinfo, int offset, void *val)
3750
0
{
3751
0
  struct data_blob *blob = (struct data_blob*)val;
3752
0
  uint32_t len = tvb_get_letohl(tvb, offset);
3753
3754
0
  blob->size = len;
3755
0
  blob->data = (uint8_t*)tvb_memdup(pinfo->pool, tvb, offset + 4, len);
3756
3757
0
  return 4 + len;
3758
0
}
3759
3760
static int vvalue_tvb_lpstr(tvbuff_t *tvb, packet_info* pinfo, int offset, void *val)
3761
0
{
3762
0
  struct data_str *str = (struct data_str*)val;
3763
0
  unsigned len;
3764
3765
0
  str->len = tvb_get_letohl(tvb, offset);
3766
0
  str->str = (char*)tvb_get_stringz_enc(pinfo->pool, tvb, offset + 4, &len,
3767
0
                   ENC_ASCII|ENC_LITTLE_ENDIAN);
3768
  /* XXX test str->len == len */
3769
0
  return 4 + len;
3770
0
}
3771
3772
static int vvalue_tvb_lpwstr_len(tvbuff_t *tvb, packet_info* pinfo, int offset, int length, void *val)
3773
0
{
3774
0
  struct data_str *str = (struct data_str*)val;
3775
0
  const char *ptr;
3776
0
  int len;
3777
3778
0
  if (length == 0) {
3779
    /* we don't know the length */
3780
0
    ptr = (char*)tvb_get_stringz_enc(pinfo->pool, tvb, offset, (unsigned*)&len,
3781
0
                  ENC_UTF_16|ENC_LITTLE_ENDIAN);
3782
0
  } else {
3783
0
    ptr = (char*)tvb_get_string_enc(pinfo->pool, tvb, offset, length,
3784
0
                  ENC_UTF_16|ENC_LITTLE_ENDIAN);
3785
0
    len = length;
3786
0
  }
3787
0
  str->str = ptr;
3788
0
  return len;
3789
0
}
3790
3791
static int vvalue_tvb_lpwstr(tvbuff_t *tvb, packet_info* pinfo, int offset, void *val)
3792
0
{
3793
0
  struct data_str *str = (struct data_str*)val;
3794
3795
0
  str->len = tvb_get_letohl(tvb, offset);
3796
3797
0
  return 4 + vvalue_tvb_lpwstr_len(tvb, pinfo, offset + 4, 0, val);
3798
0
}
3799
3800
/* Maximum sane vector size. Arbitrary. */
3801
0
#define MAX_VT_VECTOR_SIZE 5000
3802
static int vvalue_tvb_vector_internal(tvbuff_t *tvb, packet_info* pinfo, int offset, struct vt_vector *val, struct vtype_data *type, unsigned num)
3803
0
{
3804
0
  const int offset_in = offset;
3805
0
  const bool varsize = (type->size == -1);
3806
0
  const unsigned elsize = varsize ? (unsigned)sizeof(struct data_blob) : (unsigned)type->size;
3807
0
  uint8_t *data;
3808
0
  int len;
3809
0
  unsigned i;
3810
3811
  /*
3812
   * Make sure we actually *have* the data we're going to fetch
3813
   * here, before making a possibly-doomed attempt to allocate
3814
   * memory for it.
3815
   *
3816
   * First, check for sane values.
3817
   */
3818
0
  if (num > MAX_VT_VECTOR_SIZE) {
3819
0
    THROW(ReportedBoundsError);
3820
0
  }
3821
3822
  /*
3823
   * No huge numbers from the wire; now make sure we at least have that data.
3824
   */
3825
0
  tvb_ensure_bytes_exist(tvb, offset, elsize * num);
3826
3827
  /*
3828
   * OK, it exists; allocate a buffer into which to fetch it.
3829
   */
3830
0
  data = (uint8_t*)wmem_alloc(pinfo->pool, elsize * num);
3831
3832
0
  val->len = num;
3833
0
  val->u.vt_ui1 = data;
3834
0
  DISSECTOR_ASSERT((void*)&val->u == ((void*)&val->u.vt_ui1));
3835
3836
0
  for (i=0; i<num; i++) {
3837
0
    DISSECTOR_ASSERT_HINT(type->tvb_get != 0,
3838
0
              "type that we don't know yet how to handle, please submit a bug with trace");
3839
0
    len = type->tvb_get(tvb, pinfo, offset, data);
3840
0
    data += elsize;
3841
0
    offset += len;
3842
0
    if (varsize) {
3843
      /* at begin or end of loop ??? */
3844
0
      offset = WS_ROUNDUP_4(offset);
3845
0
    }
3846
0
  }
3847
0
  return offset - offset_in;
3848
0
}
3849
3850
static int vvalue_tvb_vector(tvbuff_t *tvb, packet_info* pinfo, int offset, struct vt_vector *val, struct vtype_data *type)
3851
0
{
3852
0
  const unsigned num = tvb_get_letohl(tvb, offset);
3853
0
  return 4 + vvalue_tvb_vector_internal(tvb, pinfo, offset+4, val, type, num);
3854
0
}
3855
3856
static void vvalue_strbuf_append_null(wmem_strbuf_t *strbuf _U_, void *ptr _U_)
3857
0
{}
3858
3859
static void vvalue_strbuf_append_i1(wmem_strbuf_t *strbuf, void *ptr)
3860
0
{
3861
0
  int8_t i1 = *(int8_t*)ptr;
3862
0
  wmem_strbuf_append_printf(strbuf, "%d", (int)i1);
3863
0
}
3864
3865
static void vvalue_strbuf_append_i2(wmem_strbuf_t *strbuf, void *ptr)
3866
0
{
3867
0
  int16_t i2 = *(int16_t*)ptr;
3868
0
  wmem_strbuf_append_printf(strbuf, "%d", (int)i2);
3869
0
}
3870
3871
static void vvalue_strbuf_append_i4(wmem_strbuf_t *strbuf, void *ptr)
3872
0
{
3873
0
  int32_t i4 = *(int32_t*)ptr;
3874
0
  wmem_strbuf_append_printf(strbuf, "%d", i4);
3875
0
}
3876
3877
static void vvalue_strbuf_append_i8(wmem_strbuf_t *strbuf, void *ptr)
3878
0
{
3879
0
  int64_t i8 = *(int64_t*)ptr;
3880
0
  wmem_strbuf_append_printf(strbuf, "%" PRId64, i8);
3881
0
}
3882
3883
static void vvalue_strbuf_append_ui1(wmem_strbuf_t *strbuf, void *ptr)
3884
0
{
3885
0
  uint8_t ui1 = *(uint8_t*)ptr;
3886
0
  wmem_strbuf_append_printf(strbuf, "%u", (unsigned)ui1);
3887
0
}
3888
3889
static void vvalue_strbuf_append_ui2(wmem_strbuf_t *strbuf, void *ptr)
3890
0
{
3891
0
  uint16_t ui2 = *(uint16_t*)ptr;
3892
0
  wmem_strbuf_append_printf(strbuf, "%u", (unsigned)ui2);
3893
0
}
3894
3895
static void vvalue_strbuf_append_ui4(wmem_strbuf_t *strbuf, void *ptr)
3896
0
{
3897
0
  uint32_t ui4 = *(uint32_t*)ptr;
3898
0
  wmem_strbuf_append_printf(strbuf, "%d", ui4);
3899
0
}
3900
3901
static void vvalue_strbuf_append_ui8(wmem_strbuf_t *strbuf, void *ptr)
3902
0
{
3903
0
  uint64_t ui8 = *(uint64_t*)ptr;
3904
0
  wmem_strbuf_append_printf(strbuf, "%" PRIu64, ui8);
3905
0
}
3906
3907
static void vvalue_strbuf_append_r4(wmem_strbuf_t *strbuf, void *ptr)
3908
0
{
3909
0
  float r4 = *(float*)ptr;
3910
0
  wmem_strbuf_append_printf(strbuf, "%g", (double)r4);
3911
0
}
3912
3913
static void vvalue_strbuf_append_r8(wmem_strbuf_t *strbuf, void *ptr)
3914
0
{
3915
0
  double r8 = *(double*)ptr;
3916
0
  wmem_strbuf_append_printf(strbuf, "%g", r8);
3917
0
}
3918
3919
static void vvalue_strbuf_append_str(wmem_strbuf_t *strbuf, void *ptr)
3920
0
{
3921
0
  struct data_str *str = (struct data_str*)ptr;
3922
0
  wmem_strbuf_append_printf(strbuf, "\"%s\"", str->str);
3923
0
}
3924
3925
static void vvalue_strbuf_append_blob(wmem_strbuf_t *strbuf, void *ptr)
3926
0
{
3927
0
  struct data_blob *blob = (struct data_blob*)ptr;
3928
0
  wmem_strbuf_append_printf(strbuf, "size: %d", (int)blob->size);
3929
0
}
3930
3931
static void vvalue_strbuf_append_bool(wmem_strbuf_t *strbuf, void *ptr)
3932
0
{
3933
0
  uint16_t val = *(unsigned*)ptr;
3934
0
  switch (val) {
3935
0
  case 0:
3936
0
    wmem_strbuf_append(strbuf, "False");
3937
0
    break;
3938
0
  case 0xffff:
3939
0
    wmem_strbuf_append(strbuf, "True");
3940
0
    break;
3941
0
  default:
3942
0
    wmem_strbuf_append_printf(strbuf, "Invalid (0x%4x)", val);
3943
0
  }
3944
0
}
3945
3946
static void vvalue_strbuf_append_vector(wmem_strbuf_t *strbuf, struct vt_vector val, struct vtype_data *type)
3947
0
{
3948
0
  const int elsize = (type->size == -1) ? (int)sizeof(struct data_blob) : type->size;
3949
0
  unsigned i;
3950
0
  uint8_t *data = val.u.vt_ui1;
3951
0
  wmem_strbuf_append_c(strbuf, '[');
3952
0
  for (i=0; i<val.len; i++) {
3953
0
    if (i>0) {
3954
0
      wmem_strbuf_append_c(strbuf, ',');
3955
0
    }
3956
0
    type->strbuf_append(strbuf, data);
3957
0
    data += elsize;
3958
0
  }
3959
0
  wmem_strbuf_append_c(strbuf, ']');
3960
0
}
3961
3962
static struct vtype_data VT_TYPE[] = {
3963
  {VT_EMPTY,             "VT_EMPTY",              0, vvalue_tvb_get0, NULL, vvalue_strbuf_append_null},
3964
  {VT_NULL,              "VT_NULL",               0, vvalue_tvb_get0, NULL, vvalue_strbuf_append_null},
3965
  {VT_I2,                "VT_I2",                 2, vvalue_tvb_get2, NULL, vvalue_strbuf_append_i2},
3966
  {VT_I4,                "VT_I4",                 4, vvalue_tvb_get4, NULL, vvalue_strbuf_append_i4},
3967
  {VT_R4,                "VT_R4",                 4, vvalue_tvb_get4, NULL, vvalue_strbuf_append_r4},
3968
  {VT_R8,                "VT_R8",                 8, vvalue_tvb_get8, NULL, vvalue_strbuf_append_r8},
3969
  {VT_CY,                "VT_CY",                 8, vvalue_tvb_get8, NULL, vvalue_strbuf_append_i8},
3970
  {VT_DATE,              "VT_DATE",               8, vvalue_tvb_get8, NULL, vvalue_strbuf_append_r8},
3971
  {VT_BSTR,              "VT_BSTR",              -1, vvalue_tvb_lpwstr, vvalue_tvb_lpwstr_len, vvalue_strbuf_append_str},
3972
  {VT_ERROR,             "VT_ERROR",              4, vvalue_tvb_get4, NULL, vvalue_strbuf_append_ui4},
3973
  {VT_BOOL,              "VT_BOOL",               2, vvalue_tvb_get2, NULL, vvalue_strbuf_append_bool},
3974
  {VT_VARIANT,           "VT_VARIANT",           -1, NULL, NULL, NULL},
3975
  {VT_DECIMAL,           "VT_DECIMAL",           16, NULL, NULL, NULL},
3976
  {VT_I1,                "VT_I1",                 1, vvalue_tvb_get1, NULL, vvalue_strbuf_append_i1},
3977
  {VT_UI1,               "VT_UI1",                1, vvalue_tvb_get1, NULL, vvalue_strbuf_append_ui1},
3978
  {VT_UI2,               "VT_UI2",                2, vvalue_tvb_get2, NULL, vvalue_strbuf_append_ui2},
3979
  {VT_UI4,               "VT_UI4",                4, vvalue_tvb_get4, NULL, vvalue_strbuf_append_ui4},
3980
  {VT_I8,                "VT_I8",                 8, vvalue_tvb_get8, NULL, vvalue_strbuf_append_i8},
3981
  {VT_UI8,               "VT_UI8",                8, vvalue_tvb_get8, NULL, vvalue_strbuf_append_ui8},
3982
  {VT_INT,               "VT_INT",                4, vvalue_tvb_get4, NULL, vvalue_strbuf_append_i4},
3983
  {VT_UINT,              "VT_UINT",               4, vvalue_tvb_get4, NULL, vvalue_strbuf_append_ui4},
3984
  {VT_LPSTR,             "VT_LPSTR",             -1, vvalue_tvb_lpstr, NULL, vvalue_strbuf_append_str},
3985
  {VT_LPWSTR,            "VT_LPWSTR",            -1, vvalue_tvb_lpwstr, vvalue_tvb_lpwstr_len, vvalue_strbuf_append_str},
3986
  {VT_COMPRESSED_LPWSTR, "VT_COMPRESSED_LPWSTR", -1, NULL, NULL, vvalue_strbuf_append_str},
3987
  {VT_FILETIME,          "VT_FILETIME",           8, vvalue_tvb_get8, NULL, vvalue_strbuf_append_i8},
3988
  {VT_BLOB,              "VT_BLOB",              -1, vvalue_tvb_blob, NULL, vvalue_strbuf_append_blob},
3989
  {VT_BLOB_OBJECT,       "VT_BLOB_OBJECT",       -1, vvalue_tvb_blob, NULL, vvalue_strbuf_append_blob},
3990
  {VT_CLSID,             "VT_CLSID",             16, NULL, NULL, NULL}
3991
};
3992
3993
static struct vtype_data *vType_get_type(uint16_t t)
3994
0
{
3995
0
  unsigned i;
3996
0
  t = (t & 0xFF);
3997
0
  for (i=0; i<array_length(VT_TYPE); i++) {
3998
0
    if (t == VT_TYPE[i].tag) {
3999
0
      return &VT_TYPE[i];
4000
0
    }
4001
0
  }
4002
0
  return NULL;
4003
0
}
4004
4005
static const char *str_CBaseStorageVariant(struct CBaseStorageVariant *value, bool print_type, wmem_allocator_t* allocator)
4006
0
{
4007
4008
0
  wmem_strbuf_t *strbuf = wmem_strbuf_new(allocator, "");
4009
0
  if (value == NULL) {
4010
0
    return "<NULL>";
4011
0
  }
4012
4013
0
  if (value->type == NULL) {
4014
0
    return "<??""?>";
4015
0
  }
4016
4017
0
  if (print_type) {
4018
0
    wmem_strbuf_append(strbuf, value->type->str);
4019
4020
0
    if (value->vType & 0xFF00) {
4021
0
      wmem_strbuf_append_printf(strbuf, "[%d]", value->vValue.vt_vector.len);
4022
0
    }
4023
0
    wmem_strbuf_append(strbuf, ": ");
4024
0
  }
4025
4026
0
  switch (value->vType & 0xFF00) {
4027
0
  case 0:
4028
0
    value->type->strbuf_append(strbuf, &value->vValue);
4029
0
    break;
4030
0
  case VT_ARRAY:
4031
0
    vvalue_strbuf_append_vector(strbuf, value->vValue.vt_array.vData, value->type);
4032
0
    break;
4033
0
  case VT_VECTOR:
4034
0
    vvalue_strbuf_append_vector(strbuf, value->vValue.vt_vector, value->type);
4035
0
    break;
4036
0
  default:
4037
0
    wmem_strbuf_append(strbuf, "Invalid");
4038
0
  }
4039
4040
0
  return wmem_strbuf_get_str(strbuf);
4041
0
}
4042
4043
static int parse_CBaseStorageVariant(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree _U_, struct CBaseStorageVariant *value, const char *text)
4044
0
{
4045
0
  int i, len;
4046
0
  proto_item *ti, *ti_type, *ti_val;
4047
0
  proto_tree *tree, *tr;
4048
0
  enum vType highType;
4049
4050
0
  ZERO_STRUCT(*value);
4051
4052
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CBaseStorageVariant, &ti, text);
4053
4054
0
  value->vType = tvb_get_letohs(tvb, offset);
4055
0
  value->type = vType_get_type(value->vType & 0xFF);
4056
0
  if (value->type == NULL) {
4057
    /*
4058
     * Not a valid type.
4059
     */
4060
0
    ti_type = proto_tree_add_string(tree, hf_mswsp_cbasestorvariant_vtype, tvb, offset, 2, "Unknown CBaseStorageVariant type");
4061
0
    expert_add_info(pinfo, ti_type, &ei_mswsp_invalid_variant_type);
4062
4063
0
    THROW_MESSAGE(ReportedBoundsError, "Unknown CBaseStorageVariant type");
4064
0
    return offset;
4065
0
  }
4066
4067
0
  ti_type = proto_tree_add_string(tree, hf_mswsp_cbasestorvariant_vtype, tvb, offset, 2, value->type->str);
4068
0
  offset += 2;
4069
4070
0
  value->vData1 = tvb_get_uint8(tvb, offset);
4071
0
  proto_tree_add_uint(tree, hf_mswsp_cbasestorvariant_vdata1, tvb, offset, 1, value->vData1);
4072
0
  offset += 1;
4073
4074
0
  value->vData2 = tvb_get_uint8(tvb, offset);
4075
0
  proto_tree_add_uint(tree, hf_mswsp_cbasestorvariant_vdata2, tvb, offset, 1, value->vData2);
4076
0
  offset += 1;
4077
4078
0
  highType = (enum vType)(value->vType & 0xFF00);
4079
4080
0
  ti_val = proto_tree_add_string(tree, hf_mswsp_cbasestorvariant_vvalue, tvb, offset, 0, "");
4081
4082
0
  switch (highType) {
4083
0
  case VT_EMPTY:
4084
0
    DISSECTOR_ASSERT_HINT(value->type->tvb_get != 0,
4085
0
              "type that we don't know yet how to handle, please submit a bug with trace");
4086
0
    len = value->type->tvb_get(tvb, pinfo, offset, &value->vValue.vt_single);
4087
0
    offset += len;
4088
0
    break;
4089
0
  case VT_VECTOR:
4090
0
    proto_item_append_text(ti_type, "|VT_VECTOR");
4091
0
    tr = proto_item_add_subtree(ti_val, ett_CBaseStorageVariant_Vector);
4092
4093
0
    len = vvalue_tvb_vector(tvb, pinfo, offset, &value->vValue.vt_vector, value->type);
4094
0
    proto_tree_add_uint(tr, hf_mswsp_cbasestorvariant_num, tvb, offset, 4, value->vValue.vt_vector.len);
4095
0
    offset += len;
4096
0
    break;
4097
0
  case VT_ARRAY: {
4098
0
    uint16_t cDims, fFeatures;
4099
0
    uint32_t cbElements, cElements, lLbound;
4100
0
    int num = 1;
4101
4102
0
    proto_item_append_text(ti_type, "|VT_ARRAY");
4103
0
    tr = proto_item_add_subtree(ti_val, ett_CBaseStorageVariant_Array);
4104
4105
0
    cDims = tvb_get_letohs(tvb, offset);
4106
0
    proto_tree_add_uint(tr, hf_mswsp_cbasestorvariant_cdims, tvb, offset, 2, cDims);
4107
0
    offset += 2;
4108
4109
0
    fFeatures = tvb_get_letohs(tvb, offset);
4110
0
    proto_tree_add_uint(tr, hf_mswsp_cbasestorvariant_ffeatures, tvb, offset, 2, fFeatures);
4111
0
    offset += 2;
4112
4113
0
    cbElements = tvb_get_letohl(tvb, offset);
4114
0
    proto_tree_add_uint(tr, hf_mswsp_cbasestorvariant_cbelements, tvb, offset, 4, cbElements);
4115
0
    offset += 4;
4116
0
    for (i=0; i<cDims; i++) {
4117
0
      cElements = tvb_get_letohl(tvb, offset);
4118
0
      lLbound =  tvb_get_letohl(tvb, offset + 4);
4119
0
      proto_tree_add_string_format(tr, hf_mswsp_cbasestorvariant_rgsabound, tvb, offset, 8, "", "Rgsabound[%d]: (%d:%d)", i, cElements, lLbound);
4120
0
      offset += 8;
4121
0
      num *= cElements;
4122
0
    }
4123
4124
0
    len = vvalue_tvb_vector_internal(tvb, pinfo, offset, &value->vValue.vt_array.vData, value->type, num);
4125
0
    offset += len;
4126
0
    break;
4127
0
  }
4128
0
  default:
4129
0
    proto_item_append_text(ti_type, "|0x%x", highType);
4130
0
  }
4131
0
  proto_item_set_end(ti, tvb, offset);
4132
0
  proto_item_set_end(ti_val, tvb, offset);
4133
4134
0
  proto_item_append_text(ti_val, " %s", str_CBaseStorageVariant(value, false, pinfo->pool));
4135
0
  proto_item_append_text(ti, " %s", str_CBaseStorageVariant(value, true, pinfo->pool));
4136
4137
0
  return offset;
4138
0
}
4139
4140
enum {
4141
  DBKIND_GUID_NAME = 0,
4142
  DBKIND_GUID_PROPID = 1
4143
};
4144
4145
static int parse_CDbColId(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *text)
4146
0
{
4147
0
  uint32_t eKind, ulId;
4148
0
  e_guid_t guid;
4149
0
  const char *str;
4150
0
  static const char *KIND[] = {"DBKIND_GUID_NAME", "DBKIND_GUID_PROPID"};
4151
4152
0
  proto_item *tree_item;
4153
0
  proto_tree *tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CDbColId, &tree_item, text);
4154
4155
0
  eKind = tvb_get_letohl(tvb, offset);
4156
0
  str = (eKind < 2 ? KIND[eKind] : "???");
4157
0
  proto_tree_add_string_format_value(tree, hf_mswsp_cdbcolid_ekind, tvb, offset, 4,  str, "%s (%u)", str, eKind);
4158
0
  offset += 4;
4159
4160
0
  offset = parse_padding(tvb, offset, 8, pad_tree, "paddingGuidAlign");
4161
4162
0
  offset = parse_guid(tvb, pinfo->pool, offset, tree, &guid, "GUID");
4163
4164
0
  ulId = tvb_get_letohl(tvb, offset);
4165
0
  proto_tree_add_uint(tree, hf_mswsp_cdbcolid_ulid, tvb, offset, 4, ulId);
4166
0
  offset += 4;
4167
4168
0
  if (eKind == DBKIND_GUID_NAME) {
4169
0
    char *name;
4170
0
    int len = ulId;
4171
0
    name = (char*)tvb_get_string_enc(pinfo->pool, tvb, offset, len, ENC_LITTLE_ENDIAN | ENC_UCS_2);
4172
0
    proto_item_append_text(tree_item, " \"%s\"", name);
4173
0
    proto_tree_add_string_format_value(tree, hf_mswsp_cdbcolid_vstring, tvb, offset, len, name, "\"%s\"", name);
4174
0
    offset += len;
4175
0
  } else if (eKind == DBKIND_GUID_PROPID) {
4176
0
    proto_item_append_text(tree_item, " %08x", ulId);
4177
0
  } else {
4178
0
    proto_item_append_text(tree_item, "<INVALID>");
4179
0
  }
4180
4181
0
  proto_item_set_end(tree_item, tvb, offset);
4182
4183
0
  return offset;
4184
0
}
4185
4186
static int parse_CDbProp(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const struct GuidPropertySet *propset, const char *txt)
4187
0
{
4188
0
  static const value_string EMPTY_VS[] = {{0, NULL}};
4189
0
  const value_string *vs = (propset && propset->id_map) ? propset->id_map : EMPTY_VS;
4190
0
  uint32_t id, opt, status;
4191
0
  struct CBaseStorageVariant value;
4192
0
  proto_item *item;
4193
0
  proto_tree *tree;
4194
0
  const char *str;
4195
4196
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CDbProp, &item, txt);
4197
4198
0
  id = tvb_get_letohl(tvb, offset);
4199
0
  str = val_to_str(pinfo->pool, id, vs, "0x%08x");
4200
0
  proto_tree_add_string_format_value(tree, hf_mswsp_cdbprop_id, tvb, offset, 4, str, "%s (0x%08x)", (str[0] == '0' ? "" : str), id);
4201
0
  offset += 4;
4202
0
  proto_item_append_text(item, " Id: %s", str);
4203
4204
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_cdbprop_options, tvb, offset, 4, ENC_LITTLE_ENDIAN, &opt);
4205
0
  offset += 4;
4206
4207
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_cdbprop_status, tvb, offset, 4, ENC_LITTLE_ENDIAN, &status);
4208
0
  offset += 4;
4209
4210
0
  offset = parse_CDbColId(tvb, pinfo, offset, tree, pad_tree, "colid");
4211
4212
0
  offset = parse_CBaseStorageVariant(tvb, pinfo, offset, tree, pad_tree, &value, "vValue");
4213
4214
0
  str = str_CBaseStorageVariant(&value, true, pinfo->pool);
4215
0
  proto_item_append_text(item, " %s", str);
4216
0
  proto_item_set_end(item, tvb, offset);
4217
4218
0
  return offset;
4219
0
}
4220
4221
static int parse_CDbPropSet(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
4222
0
{
4223
0
  int i, num;
4224
0
  e_guid_t guid;
4225
0
  const struct GuidPropertySet *pset;
4226
0
  proto_item *item;
4227
0
  proto_tree *tree;
4228
4229
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CDbPropSet, &item, txt);
4230
4231
0
  offset = parse_guid(tvb, pinfo->pool, offset, tree, &guid, "guidPropertySet");
4232
4233
0
  pset = GuidPropertySet_find_guid(&guid);
4234
4235
0
  if (pset) {
4236
0
    proto_item_append_text(item, " \"%s\" (%s)", pset->desc, pset->def);
4237
0
  } else {
4238
0
    const char *guid_str = guid_to_str(pinfo->pool, &guid);
4239
0
    proto_item_append_text(item, " {%s}", guid_str);
4240
0
  }
4241
4242
0
  offset = parse_padding(tvb, offset, 4, pad_tree, "guidPropertySet");
4243
4244
0
  num = tvb_get_letohl(tvb, offset);
4245
0
  proto_tree_add_uint(tree, hf_mswsp_cdbpropset_cprops, tvb, offset, 4,  num);
4246
0
  offset += 4;
4247
0
  proto_item_append_text(item, " Num: %d", num);
4248
4249
0
  for (i = 0; i<num; i++) {
4250
0
    offset = parse_padding(tvb, offset, 4, pad_tree, wmem_strdup_printf(pinfo->pool, "aProp[%d]", i));
4251
0
    offset = parse_CDbProp(tvb, pinfo, offset, tree, pad_tree, pset, wmem_strdup_printf(pinfo->pool, "aProp[%d]", i));
4252
0
  }
4253
4254
0
  proto_item_set_end(item, tvb, offset);
4255
0
  return offset;
4256
0
}
4257
4258
static int parse_PropertySetArray(tvbuff_t *tvb, packet_info *pinfo, int offset, int size_offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
4259
0
{
4260
0
  const int offset_in = offset;
4261
0
  uint32_t size, num;
4262
0
  int i;
4263
0
  proto_tree *tree;
4264
0
  proto_item *item;
4265
4266
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CDbPropSet_Array, &item, txt);
4267
4268
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_msg_ConnectIn_Blob1, tvb,
4269
0
            size_offset, 4, ENC_LITTLE_ENDIAN, &size);
4270
4271
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_msg_ConnectIn_PropSets_num, tvb,
4272
0
            offset, 4, ENC_LITTLE_ENDIAN, &num);
4273
0
  offset += 4;
4274
4275
0
  for (i = 0; i < (int)num; i++) {
4276
0
    offset = parse_CDbPropSet(tvb, pinfo, offset, tree, pad_tree, wmem_strdup_printf(pinfo->pool, "PropertySet[%d]", i));
4277
0
  }
4278
4279
0
  proto_item_set_end(item, tvb, offset);
4280
0
  DISSECTOR_ASSERT(offset - offset_in == (int)size);
4281
0
  return offset;
4282
0
}
4283
4284
static int parse_CColumnSet(tvbuff_t *tvb, int offset, proto_tree *tree, const char *txt)
4285
0
{
4286
0
  uint32_t count, v, i;
4287
0
  proto_item *item;
4288
4289
0
  count = tvb_get_letohl(tvb, offset);
4290
0
  offset += 4;
4291
0
  proto_tree_add_subtree(tree, tvb, offset, count * 4, ett_mswsp_uin32_array, &item, txt);
4292
0
  proto_item_append_text(item, " Count %u [", count);
4293
4294
0
  for (i=0; i<count; i++) {
4295
0
    v = tvb_get_letohl(tvb, offset);
4296
0
    offset += 4;
4297
0
    if (i>0) {
4298
0
      proto_item_append_text(item, ",%u", v);
4299
0
    } else {
4300
0
      proto_item_append_text(item, "%u", v);
4301
0
    }
4302
0
  }
4303
0
  proto_item_append_text(item, "]");
4304
0
  return offset;
4305
0
}
4306
4307
/* 2.2.1.23 RANGEBOUNDARY */
4308
static int parse_RANGEBOUNDARY(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
4309
0
{
4310
0
  uint32_t ulType;
4311
0
  uint8_t labelPresent;
4312
0
  proto_item *item;
4313
0
  proto_tree *tree;
4314
0
  struct CBaseStorageVariant prval;
4315
4316
0
  tree =proto_tree_add_subtree (parent_tree, tvb, offset, 0, ett_RANGEBOUNDARY, &item, txt);
4317
4318
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_rangeboundry_ultype, tvb, offset, 4, ENC_LITTLE_ENDIAN, &ulType);
4319
0
  proto_item_append_text(item, ": Type 0x%08x", ulType);
4320
0
  offset += 4;
4321
4322
0
  ZERO_STRUCT(prval);
4323
0
  offset = parse_CBaseStorageVariant(tvb, pinfo, offset, tree, pad_tree, &prval, "prVal");
4324
4325
0
  labelPresent = tvb_get_uint8(tvb, offset);
4326
0
  proto_tree_add_item(tree, hf_mswsp_rangeboundry_labelpresent, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4327
0
  offset += 1;
4328
4329
0
  if (labelPresent) {
4330
0
    uint32_t ccLabel;
4331
0
    const uint8_t* label;
4332
0
    offset = parse_padding(tvb, offset, 4, pad_tree, "paddingLabelPresent");
4333
4334
0
    proto_tree_add_item_ret_uint(tree, hf_mswsp_rangeboundry_cclabel, tvb, offset, 4, ENC_LITTLE_ENDIAN, &ccLabel);
4335
0
    offset += 4;
4336
4337
0
    proto_tree_add_item_ret_string(tree, hf_mswsp_rangeboundry_label, tvb, offset, 2*ccLabel, ENC_LITTLE_ENDIAN | ENC_UCS_2, pinfo->pool, &label);
4338
0
    proto_item_append_text(item, " Label: \"%s\"", label);
4339
0
    offset += 2*ccLabel;
4340
0
  }
4341
4342
0
  proto_item_append_text(item, " Val: %s", str_CBaseStorageVariant(&prval, true, pinfo->pool));
4343
4344
0
  proto_item_set_end(item, tvb, offset);
4345
0
  return offset;
4346
0
}
4347
4348
4349
/* 2.2.1.22 CRangeCategSpec */
4350
static int parse_CRangeCategSpec(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
4351
0
{
4352
0
  proto_item *item;
4353
0
  proto_tree *tree;
4354
0
  unsigned i;
4355
0
  uint32_t cRange;
4356
4357
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CRangeCategSpec, &item, txt);
4358
4359
0
  offset = parse_lcid(tvb, offset, tree, "lcid");
4360
4361
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_crangecategspec_crange, tvb, offset, 4, ENC_LITTLE_ENDIAN, &cRange);
4362
0
  offset += 4;
4363
4364
0
  for (i=0; i<cRange; i++) {
4365
0
    offset = parse_RANGEBOUNDARY(tvb, pinfo, offset, tree, pad_tree, wmem_strdup_printf(pinfo->pool, "aRangeBegin[%u]", i));
4366
4367
0
  }
4368
4369
0
  proto_item_set_end(item, tvb, offset);
4370
0
  return offset;
4371
0
}
4372
4373
/* 2.2.1.21 CCategSpec */
4374
static int parse_CCategSpec(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
4375
0
{
4376
0
  proto_item *item;
4377
0
  proto_tree *tree;
4378
0
  uint32_t type;
4379
4380
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CCategSpec, &item, txt);
4381
4382
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_ccategspec_type, tvb, offset, 4, ENC_LITTLE_ENDIAN, &type);
4383
0
  proto_item_append_text(item, " Type %u", type);
4384
0
  offset += 4;
4385
4386
0
  offset = parse_CSort(tvb, offset, tree, pad_tree, "CSort");
4387
4388
  /*
4389
   * A CRangeCategSpec structure specifying the range values.
4390
   * This field MUST be omitted if _ulCategType is set to
4391
   * CATEGORIZE_UNIQUE e.g. '0' otherwise it MUST be present.
4392
   */
4393
0
  if (type != 0) {
4394
0
    offset = parse_CRangeCategSpec(tvb, pinfo, offset, tree, pad_tree, "CRangeCategSpec");
4395
0
  }
4396
4397
0
  proto_item_set_end(item, tvb, offset);
4398
0
  return offset;
4399
0
}
4400
4401
/* 2.2.1.25 CAggregSpec */
4402
static int parse_CAggregSpec(tvbuff_t *tvb, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
4403
0
{
4404
0
  proto_item *item;
4405
0
  proto_tree *tree;
4406
0
  uint32_t type, ccAlias, idColumn;
4407
4408
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CAggregSpec, &item, txt);
4409
4410
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_caggregspec_type, tvb, offset, 1, ENC_LITTLE_ENDIAN, &type);
4411
0
  offset += 1;
4412
4413
0
  offset = parse_padding(tvb, offset, 4, pad_tree, "padding");
4414
4415
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_caggregspec_ccalias, tvb, offset, 4, ENC_LITTLE_ENDIAN, &ccAlias);
4416
0
  offset += 4;
4417
4418
0
  proto_tree_add_item(tree, hf_mswsp_caggregspec_alias, tvb, offset, 2*ccAlias, ENC_LITTLE_ENDIAN | ENC_UCS_2);
4419
0
  offset += 2*ccAlias;
4420
4421
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_caggregspec_idcolumn, tvb, offset, 4, ENC_LITTLE_ENDIAN, &idColumn);
4422
0
  offset += 4;
4423
0
  if (type == DBAGGTTYPE_REPRESENTATIVEOF
4424
0
      || type == DBAGGTTYPE_BYFREQ
4425
0
      || type == DBAGGTTYPE_FIRST) {
4426
0
    proto_tree_add_uint(tree,
4427
0
            hf_mswsp_caggregspec_ulmaxnumtoreturn,
4428
0
            tvb, offset, 4, idColumn);
4429
0
    offset += 4;
4430
0
    if (type == DBAGGTTYPE_REPRESENTATIVEOF) {
4431
0
      proto_tree_add_uint(tree,
4432
0
            hf_mswsp_caggregspec_idrepresentative,
4433
0
            tvb, offset, 4, idColumn);
4434
0
    }
4435
0
  }
4436
  /* Optional ???
4437
     ulMaxNumToReturn, idRepresentative;
4438
  */
4439
4440
0
  proto_item_set_end(item, tvb, offset);
4441
0
  return offset;
4442
0
}
4443
4444
/* 2.2.1.24 CAggregSet */
4445
static int parse_CAggregSet(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
4446
0
{
4447
0
  uint32_t cCount, i;
4448
0
  proto_item *item;
4449
0
  proto_tree *tree;
4450
4451
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CAggregSet, &item, txt);
4452
4453
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_caggregset_count, tvb, offset, 4, ENC_LITTLE_ENDIAN, &cCount);
4454
0
  offset += 4;
4455
4456
0
  for (i=0; i<cCount; i++) {
4457
    /* 2.2.1.25 CAggregSpec */
4458
0
    offset = parse_CAggregSpec(tvb, offset, tree, pad_tree, wmem_strdup_printf(pinfo->pool, "AggregSpecs[%u]", i));
4459
0
  }
4460
4461
0
  proto_item_set_end(item, tvb, offset);
4462
0
  return offset;
4463
0
}
4464
4465
/* 2.2.1.27 CAggregSortKey */
4466
static int parse_CAggregSortKey(tvbuff_t *tvb, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
4467
0
{
4468
0
  uint32_t order;
4469
0
  proto_item *item;
4470
0
  proto_tree *tree;
4471
4472
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CAggregSortKey, &item, txt);
4473
4474
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_caggregsortkey_order, tvb, offset, 4, ENC_LITTLE_ENDIAN, &order);
4475
0
  offset += 4;
4476
4477
0
  offset = parse_CAggregSpec(tvb, offset, tree, pad_tree, "ColumnSpec");
4478
4479
0
  proto_item_set_end(item, tvb, offset);
4480
0
  return offset;
4481
0
}
4482
4483
4484
/* 2.2.1.26 CSortAggregSet */
4485
static int parse_CSortAggregSet(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
4486
0
{
4487
0
  uint32_t cCount, i;
4488
0
  proto_item *item;
4489
0
  proto_tree *tree;
4490
4491
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CSortAggregSet, &item, txt);
4492
4493
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_csortaggregset_count, tvb, offset, 4, ENC_LITTLE_ENDIAN, &cCount);
4494
0
  offset += 4;
4495
4496
0
  for (i=0; i<cCount; i++) {
4497
    /* 2.2.1.27 CAggregSortKey */
4498
0
    offset = parse_CAggregSortKey(tvb, offset, tree, pad_tree, wmem_strdup_printf(pinfo->pool, "SortKeys[%u]", i));
4499
0
  }
4500
4501
0
  proto_item_set_end(item, tvb, offset);
4502
0
  return offset;
4503
0
}
4504
4505
enum CInGroupSortAggregSet_type {
4506
  GroupIdDefault = 0x00, /* The default for all ranges. */
4507
  GroupIdMinValue = 0x01, /*The first range in the parent's group.*/
4508
  GroupIdNull = 0x02, /*The last range in the parent's group.*/
4509
  GroupIdValue = 0x03
4510
};
4511
4512
static int parse_CInGroupSortAggregSet_type(tvbuff_t *tvb, int offset, proto_tree *tree, enum CInGroupSortAggregSet_type *type)
4513
0
{
4514
0
  uint8_t tmp = tvb_get_uint8(tvb, offset);
4515
0
  switch(tmp) {
4516
0
    case GroupIdDefault:
4517
0
      *type = GroupIdDefault;
4518
0
      break;
4519
0
    case GroupIdMinValue:
4520
0
      *type = GroupIdMinValue;
4521
0
      break;
4522
0
    case GroupIdNull:
4523
0
      *type = GroupIdNull;
4524
0
      break;
4525
0
    case GroupIdValue:
4526
0
      *type = GroupIdValue;
4527
0
      break;
4528
0
    default:
4529
0
      DISSECTOR_ASSERT(false);
4530
0
      break;
4531
0
  }
4532
0
  proto_tree_add_uint(tree, hf_mswsp_cingroupsortaggregset_type, tvb, offset, 1, *type);
4533
0
  return offset + 1;
4534
0
}
4535
4536
/* 2.2.1.29 CInGroupSortAggregSet */
4537
static int parse_CInGroupSortAggregSet(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
4538
0
{
4539
0
  proto_item *item;
4540
0
  proto_tree *tree;
4541
0
  enum CInGroupSortAggregSet_type type;
4542
4543
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CInGroupSortAggregSet, &item, txt);
4544
4545
0
  offset = parse_CInGroupSortAggregSet_type(tvb, offset, tree, &type);
4546
0
  offset = parse_padding(tvb, offset, 4, pad_tree, "CInGroupSortAggregSet");
4547
4548
0
  if (type == GroupIdValue) {
4549
0
    struct CBaseStorageVariant id;
4550
0
    offset = parse_CBaseStorageVariant(tvb, pinfo, offset, tree, pad_tree, &id, "inGroupId");
4551
0
  }
4552
4553
0
  offset = parse_CSortSet(tvb, pinfo, offset, tree, pad_tree, "SortSet");
4554
4555
0
  proto_item_set_end(item, tvb, offset);
4556
0
  return offset;
4557
0
}
4558
4559
4560
/* 2.2.1.28 CInGroupSortAggregSets */
4561
static int parse_CInGroupSortAggregSets(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
4562
0
{
4563
0
  uint32_t cCount, i;
4564
0
  proto_item *item;
4565
0
  proto_tree *tree;
4566
4567
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CInGroupSortAggregSets, &item, txt);
4568
4569
0
  cCount = tvb_get_letohl(tvb, offset);
4570
0
  proto_tree_add_uint(tree, hf_mswsp_cingroupsortaggregsets_count, tvb, offset, 4, cCount);
4571
0
  offset += 4;
4572
4573
0
  for (i=0; i<cCount; i++) {
4574
    /* 2.2.1.29 CInGroupSortAggregSet */
4575
0
    offset = parse_CInGroupSortAggregSet(tvb, pinfo, offset, tree, pad_tree, wmem_strdup_printf(pinfo->pool, "SortSets[%u]", i));
4576
0
  }
4577
4578
0
  proto_item_set_end(item, tvb, offset);
4579
0
  return offset;
4580
0
}
4581
4582
/* 2.2.1.20 CCategorizationSpec */
4583
static int parse_CCategorizationSpec(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
4584
0
{
4585
0
  proto_item *item;
4586
0
  proto_tree *tree;
4587
4588
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CCategorizationSpec, &item, txt);
4589
4590
  /* 2.2.1.18  CColumnSet */
4591
0
  offset = parse_CColumnSet(tvb, offset, tree, "csColumns");
4592
4593
  /* 2.2.1.21 CCategSpec */
4594
0
  offset = parse_CCategSpec(tvb, pinfo, offset, tree, pad_tree, "Spec");
4595
4596
  /* 2.2.1.24 CAggregSet */
4597
0
  offset = parse_CAggregSet(tvb, pinfo, offset, tree, pad_tree, "AggregSet");
4598
4599
  /* 2.2.1.26 CSortAggregSet */
4600
0
  offset = parse_CSortAggregSet(tvb, pinfo, offset, tree, pad_tree, "SortAggregSet");
4601
4602
  /* 2.2.1.28 CInGroupSortAggregSets */
4603
0
  offset = parse_CInGroupSortAggregSets(tvb, pinfo, offset, tree, pad_tree, "InGroupSortAggregSets");
4604
4605
0
  proto_tree_add_item(tree, hf_mswsp_categorizationspec_cmaxres, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4606
0
  offset += 4;
4607
4608
0
  proto_item_set_end(item, tvb, offset);
4609
0
  return offset;
4610
0
}
4611
4612
static int * const mswsp_bool_options[] = {
4613
  &hf_mswsp_bool_options_cursor,
4614
  &hf_mswsp_bool_options_async,
4615
  &hf_mswsp_bool_options_firstrows,
4616
  &hf_mswsp_bool_options_holdrows,
4617
  &hf_mswsp_bool_options_chaptered,
4618
  &hf_mswsp_bool_options_useci,
4619
  &hf_mswsp_bool_options_defertrim,
4620
  &hf_mswsp_bool_options_rowsetevents,
4621
  &hf_mswsp_bool_options_dontcomputeexpensive,
4622
  NULL
4623
};
4624
4625
static int parse_CRowsetProperties(tvbuff_t *tvb, int offset, proto_tree *parent_tree, proto_tree *pad_tree _U_, const char *txt)
4626
0
{
4627
0
  proto_item *item;
4628
0
  proto_tree *tree;
4629
4630
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CRowsetProperties, &item, txt);
4631
4632
0
  proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_mswsp_bool_options, ett_mswsp_bool_options, mswsp_bool_options, ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
4633
0
  offset += 4;
4634
4635
0
  proto_tree_add_item(tree, hf_mswsp_crowsetprops_ulmaxopenrows, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4636
0
  offset += 4;
4637
4638
0
  proto_tree_add_item(tree, hf_mswsp_crowsetprops_ulmemusage, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4639
0
  offset += 4;
4640
4641
0
  proto_tree_add_item(tree, hf_mswsp_crowsetprops_cmaxresults, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4642
0
  offset += 4;
4643
4644
0
  proto_tree_add_item(tree, hf_mswsp_crowsetprops_ccmdtimeout, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4645
0
  offset += 4;
4646
4647
0
  proto_item_set_end(item, tvb, offset);
4648
0
  return offset;
4649
0
}
4650
4651
static int parse_CPidMapper(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
4652
0
{
4653
0
  proto_item *item;
4654
0
  proto_tree *tree;
4655
0
  uint32_t count, i;
4656
4657
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CPidMapper, &item, txt);
4658
4659
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_cpidmapper_count, tvb, offset, 4, ENC_LITTLE_ENDIAN, &count);
4660
0
  offset += 4;
4661
4662
0
  offset = parse_padding(tvb, offset, 8, pad_tree, "CPidMapper_PropSpec");
4663
4664
0
  for (i=0; i<count; i++) {
4665
0
    struct CFullPropSpec v;
4666
0
    ZERO_STRUCT(v);
4667
    /*at begin or end of loop???*/
4668
0
    offset = parse_padding(tvb, offset, 4, pad_tree,
4669
0
      wmem_strdup_printf(pinfo->pool, "CPidMapper_PropSpec[%u]", i));
4670
0
    offset = parse_CFullPropSpec(tvb, pinfo, offset, tree, pad_tree, &v,
4671
0
      wmem_strdup_printf(pinfo->pool, "PropSpec[%u]", i));
4672
0
  }
4673
4674
0
  proto_item_set_end(item, tvb, offset);
4675
0
  return offset;
4676
0
}
4677
4678
/* 2.2.1.35 CColumnGroup */
4679
static int parse_CColumnGroup(tvbuff_t *tvb, int offset, proto_tree *parent_tree, proto_tree *pad_tree _U_, const char *txt)
4680
0
{
4681
0
  proto_tree *tree;
4682
0
  proto_item *item, *ti;
4683
0
  uint32_t count, groupPid, i;
4684
4685
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CColumnGroup, &item, txt);
4686
4687
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_ccolumngroup_count, tvb, offset, 4, ENC_LITTLE_ENDIAN, &count);
4688
0
  offset += 4;
4689
4690
0
  ti = proto_tree_add_item_ret_uint(tree, hf_mswsp_ccolumngroup_grouppid, tvb, offset, 4, ENC_LITTLE_ENDIAN, &groupPid);
4691
0
  if ((0xFFFF0000 & groupPid) == 0x7FFF0000) {
4692
0
    proto_item_append_text(ti, " Idx: %u", groupPid & 0xFFFF);
4693
0
  } else {
4694
0
    proto_item_append_text(ti, "<Invalid>");
4695
0
  }
4696
0
  offset += 4;
4697
4698
0
  for (i=0; i<count; i++) {
4699
    /* 2.2.1.36 SProperty */
4700
0
    uint32_t pid, weight;
4701
0
    pid = tvb_get_letohl(tvb, offset);
4702
0
    weight = tvb_get_letohl(tvb, offset + 4);
4703
0
    proto_tree_add_uint_format(tree, hf_mswsp_ccolumngroup_pid, tvb, offset, 8, pid, "Props[%u]: pid: %u weight: %u", i, pid, weight);
4704
0
    offset += 8;
4705
0
  }
4706
4707
0
  proto_item_set_end(item, tvb, offset);
4708
0
  return offset;
4709
0
}
4710
4711
/* 2.2.1.34 CColumnGroupArray */
4712
static int parse_CColumnGroupArray(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree *parent_tree, proto_tree *pad_tree, const char *txt)
4713
0
{
4714
0
  proto_tree *tree;
4715
0
  proto_item *item;
4716
0
  uint32_t count, i;
4717
4718
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CColumnGroupArray, &item, txt);
4719
4720
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_ccolumngrouparray_count, tvb, offset, 4, ENC_LITTLE_ENDIAN, &count);
4721
0
  offset += 4;
4722
4723
0
  for (i=0; i<count; i++) {
4724
0
    offset = parse_padding(tvb, offset, 4, pad_tree, wmem_strdup_printf(pinfo->pool, "aGroupArray[%u]", i));
4725
0
    offset = parse_CColumnGroup(tvb, offset, tree, pad_tree, wmem_strdup_printf(pinfo->pool, "aGroupArray[%u]", i));
4726
0
  }
4727
4728
0
  proto_item_set_end(item, tvb, offset);
4729
0
  return offset;
4730
0
}
4731
4732
static int parse_UInt32Array(tvbuff_t *tvb, int offset, proto_tree *parent_tree, uint32_t count, const char *item_name, const char *txt)
4733
0
{
4734
0
  uint32_t v, i;
4735
0
  proto_tree *tree;
4736
0
  proto_item *item;
4737
4738
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_Array, &item, txt);
4739
4740
0
  for (i=0; i<count; i++) {
4741
0
    v = tvb_get_letohl(tvb, offset);
4742
0
    proto_tree_add_uint_format(tree, hf_mswsp_int32array_value, tvb, offset, 4, v, "%s[%u] = %u", item_name,i, v);
4743
0
    offset += 4;
4744
0
  }
4745
0
  proto_item_set_end(item, tvb, offset);
4746
0
  return offset;
4747
0
}
4748
4749
/* 2.2.1.40 CRowSeekNext */
4750
static int parse_CRowSeekNext(tvbuff_t *tvb, int offset, proto_tree *parent_tree, const char *txt)
4751
0
{
4752
0
  proto_tree *tree;
4753
0
  proto_item *item;
4754
4755
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CRowsSeekNext, &item, txt);
4756
4757
0
  proto_tree_add_item(tree, hf_mswsp_crowseeknext_cskip, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4758
0
  offset += 4;
4759
0
  proto_item_set_end(item, tvb, offset);
4760
0
  return offset;
4761
0
}
4762
4763
4764
/* 2.2.1.37 CRowSeekAt */
4765
static int parse_CRowSeekAt(tvbuff_t *tvb, int offset, proto_tree *parent_tree, const char *txt)
4766
0
{
4767
0
  proto_tree *tree;
4768
0
  proto_item *item;
4769
4770
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CRowsSeekAt, &item, txt);
4771
4772
0
  proto_tree_add_item(tree, hf_mswsp_crowseekat_bmkoffset, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4773
0
  offset += 4;
4774
4775
0
  proto_tree_add_item(tree, hf_mswsp_crowseekat_skip, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4776
0
  offset += 4;
4777
4778
0
  proto_tree_add_item(tree, hf_mswsp_crowseekat_hregion, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4779
0
  offset += 4;
4780
4781
0
  proto_item_set_end(item, tvb, offset);
4782
0
  return offset;
4783
0
}
4784
4785
/* 2.2.1.38 CRowSeekAtRatio */
4786
static int parse_CRowSeekAtRatio(tvbuff_t *tvb, int offset, proto_tree *parent_tree, const char *txt)
4787
0
{
4788
0
  proto_tree *tree;
4789
0
  proto_item *item;
4790
4791
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CRowsSeekAtRatio, &item, txt);
4792
4793
0
  proto_tree_add_item(tree, hf_mswsp_crowseekatratio_ulnumerator, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4794
0
  offset += 4;
4795
4796
0
  proto_tree_add_item(tree, hf_mswsp_crowseekatratio_uldenominator, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4797
0
  offset += 4;
4798
4799
0
  proto_tree_add_item(tree, hf_mswsp_crowseekatratio_hregion, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4800
0
  offset += 4;
4801
4802
0
  proto_item_set_end(item, tvb, offset);
4803
0
  return offset;
4804
0
}
4805
4806
/* 2.2.1.39 CRowSeekByBookmark */
4807
static int parse_CRowSeekByBookmark(tvbuff_t *tvb, int offset, proto_tree *parent_tree, const char *txt)
4808
0
{
4809
0
  proto_tree *tree;
4810
0
  proto_item *item;
4811
0
  uint32_t num;
4812
4813
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CRowsSeekByBookmark, &item, txt);
4814
4815
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_crowseekbybookmark_cbookmarks, tvb, offset, 4, ENC_LITTLE_ENDIAN, &num);
4816
0
  offset += 4;
4817
4818
0
  offset = parse_UInt32Array(tvb, offset, tree, num, "abookmark", "abookmarks");
4819
4820
0
  proto_tree_add_item_ret_uint(tree, hf_mswsp_crowseekbybookmark_maxret, tvb, offset, 4, ENC_LITTLE_ENDIAN, &num);
4821
0
  offset += 4;
4822
4823
0
  offset = parse_UInt32Array(tvb, offset, tree, num, "ascret", "ascret");
4824
4825
0
  proto_item_set_end(item, tvb, offset);
4826
0
  return offset;
4827
0
}
4828
4829
static int get_fixed_vtype_dataize(enum vType vtype)
4830
0
{
4831
0
  struct vtype_data *vt_type = vType_get_type(vtype);
4832
0
  if (vt_type) {
4833
0
    return vt_type->size;
4834
0
  }
4835
0
  return -1;
4836
0
}
4837
4838
static int parse_CRowVariantArrayInfo(tvbuff_t *tvb, int offset, proto_tree *tree, bool is_64bit, struct CRowVariant *variant)
4839
0
{
4840
0
  if (is_64bit) {
4841
0
    variant->content.array_vector.i64.count =
4842
0
          tvb_get_letoh64(tvb, offset);
4843
0
    proto_tree_add_uint64(tree, hf_mswsp_crowvariantinfo_count64, tvb, offset, 8, variant->content.array_vector.i64.count);
4844
0
    offset += 8;
4845
0
    variant->content.array_vector.i64.array_address = tvb_get_letoh64(tvb, offset);
4846
0
    proto_tree_add_uint64(tree, hf_mswsp_arrayvector_address64, tvb, offset, 8, variant->content.array_vector.i64.array_address);
4847
0
    offset += 8;
4848
4849
0
  } else {
4850
0
    variant->content.array_vector.i32.count =
4851
0
          tvb_get_letohl(tvb, offset);
4852
0
    proto_tree_add_uint(tree, hf_mswsp_crowvariantinfo_count32, tvb, offset, 4, variant->content.array_vector.i32.count );
4853
0
    offset += 4;
4854
0
    variant->content.array_vector.i32.array_address = tvb_get_letohl(tvb, offset);
4855
0
    proto_tree_add_uint(tree, hf_mswsp_arrayvector_address32, tvb, offset, 4, variant->content.array_vector.i32.array_address);
4856
0
    offset += 4;
4857
0
  }
4858
0
  return offset;
4859
0
}
4860
4861
static int parse_VariantColVector(tvbuff_t *tvb, packet_info* pinfo, int offset, proto_tree *tree, uint64_t base_address, bool is_64bit, struct CRowVariant *variant, struct vtype_data *vt_list_type)
4862
0
{
4863
0
  uint32_t i = 0;
4864
0
  uint64_t count = 0;
4865
0
  int buf_offset = 0;
4866
0
  proto_tree *sub_tree;
4867
0
  wmem_strbuf_t *strbuf;
4868
4869
0
  offset = parse_CRowVariantArrayInfo(tvb, offset, tree, is_64bit, variant);
4870
0
  if (is_64bit) {
4871
0
    buf_offset =
4872
0
      (int)(variant->content.array_vector.i64.array_address - base_address);
4873
0
    count = variant->content.array_vector.i64.count;
4874
0
  } else {
4875
0
    buf_offset =
4876
0
      (int)(variant->content.array_vector.i32.array_address - base_address);
4877
0
    count = variant->content.array_vector.i32.count;
4878
0
  }
4879
0
  sub_tree = proto_tree_add_subtree(tree, tvb, buf_offset, 0, ett_CRowVariant_Vector, NULL, "values");
4880
0
  for (i = 0; i < count; i++) {
4881
0
    uint64_t item_address = 0;
4882
0
    int address_of_address = 0;
4883
0
    int size;
4884
0
    union vt_single value;
4885
0
    int len;
4886
0
    if (is_64bit) {
4887
0
      size = 8;
4888
0
      address_of_address = buf_offset + (i * size);
4889
0
      item_address = tvb_get_letoh64(tvb, address_of_address);
4890
0
      proto_tree_add_uint64_format(sub_tree, hf_mswsp_rowvariant_item_address64, tvb, address_of_address, size, item_address, "address[%d] 0x%" PRIx64, i, item_address);
4891
0
    } else {
4892
0
      size = 4;
4893
0
      item_address = tvb_get_letohl(tvb, buf_offset + (i * size));
4894
0
      proto_tree_add_uint_format(sub_tree, hf_mswsp_rowvariant_item_address32, tvb, address_of_address, size, (uint32_t)item_address, "address[%d] 0x%x", i, (uint32_t)item_address);
4895
0
    }
4896
0
    strbuf = wmem_strbuf_new(pinfo->pool, "");
4897
0
    if (vt_list_type->size == -1) {
4898
      /* dynamic type */
4899
0
      DISSECTOR_ASSERT_HINT(vt_list_type->tvb_get_value_only != 0,
4900
0
                  "appears this is a vector of dynamic types that we don't know yet how to handle, please submit a bug with trace");
4901
0
      len = vt_list_type->tvb_get_value_only(tvb, pinfo, (int)(item_address - base_address), 0, &value);
4902
0
      vt_list_type->strbuf_append(strbuf, &value);
4903
0
    } else {
4904
      /*
4905
       * assume non dynamic size types are stored directly.
4906
       * Note: not test as not seen in the wild.
4907
       */
4908
0
      len = vt_list_type->size;
4909
0
      DISSECTOR_ASSERT_HINT(vt_list_type->tvb_get != 0,
4910
0
                "appears this is a vector of fixed types that we don't know yet how to handle, please submit a bug with trace");
4911
4912
0
      vt_list_type->tvb_get(tvb, pinfo, (int)(item_address - base_address), &value);
4913
0
      vt_list_type->strbuf_append(strbuf, &value);
4914
0
    }
4915
0
    proto_tree_add_string(sub_tree, hf_mswsp_rowvariant_item_value, tvb, (int)(item_address - base_address), len, wmem_strbuf_get_str(strbuf));
4916
0
  }
4917
0
  return offset;
4918
0
}
4919
4920
static int parse_VariantCol(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *parent_tree, uint64_t base_address, uint32_t length _U_, bool is_64bit, struct CRowVariant *variant, const char *txt)
4921
0
{
4922
0
  proto_tree *tree;
4923
0
  proto_item *item, *ti_type;
4924
4925
0
  struct vtype_data *vt_type;
4926
0
  const char *modifier = "";
4927
0
  int size;
4928
0
  uint16_t vtype_high;
4929
4930
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_CRowVariant, &item, txt);
4931
4932
0
  variant->vtype = tvb_get_letohs(tvb, offset);
4933
0
  vt_type = vType_get_type((enum vType)variant->vtype);
4934
0
  vtype_high = (variant->vtype & 0xFF00);
4935
0
  if (vtype_high) {
4936
0
    if (vtype_high == VT_VECTOR) {
4937
0
      modifier = "|VT_VECTOR";
4938
0
    } else if (vtype_high == VT_ARRAY) {
4939
0
      modifier = "|VT_ARRAY";
4940
0
    } else {
4941
0
      modifier = "|Unknown, possibly error";
4942
0
    }
4943
0
  }
4944
4945
0
  if (vt_type == NULL) {
4946
    /*
4947
     * Not a valid type.
4948
     */
4949
0
    ti_type = proto_tree_add_string(tree, hf_mswsp_ctablecolumn_vtype, tvb, offset, 4, "Unknown variant column type");
4950
0
    expert_add_info(pinfo, ti_type, &ei_mswsp_invalid_variant_type);
4951
4952
0
    THROW_FORMATTED(ReportedBoundsError, "Unknown variant column type%s", modifier);
4953
0
    return offset;
4954
0
  }
4955
0
  proto_tree_add_string_format_value(tree, hf_mswsp_rowvariant_vtype, tvb, offset, 2, vt_type->str, "%s%s", vt_type->str, modifier);
4956
0
  offset += 2;
4957
4958
0
  proto_tree_add_item(tree, hf_mswsp_rowvariant_reserved1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4959
0
  variant->reserved1 = tvb_get_letohs(tvb, offset);
4960
4961
0
  offset += 2;
4962
0
  proto_tree_add_item(tree, hf_mswsp_rowvariant_reserved2, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4963
0
  variant->reserved2 = tvb_get_letohl(tvb, offset);
4964
0
  offset += 4;
4965
4966
0
  size = get_fixed_vtype_dataize((enum vType)(variant->vtype & 0x00FF));
4967
4968
0
  if (vtype_high == VT_VECTOR || vtype_high == VT_ARRAY) {
4969
0
    offset = parse_VariantColVector(tvb, pinfo, offset, tree, base_address,
4970
0
                    is_64bit, variant, vt_type);
4971
0
  } else {
4972
0
    wmem_strbuf_t *strbuf = wmem_strbuf_new(pinfo->pool, "");
4973
0
    if (size != -1) {
4974
      /* single fixed size value type */
4975
0
      const char* desc = vt_type->str;
4976
4977
0
      DISSECTOR_ASSERT_HINT(vt_type->tvb_get != 0,
4978
0
                "appears fixed type that we don't know yet how to handle, please submit a bug with trace");
4979
0
      vt_type->tvb_get(tvb, pinfo, offset, &variant->content);
4980
0
      vt_type->strbuf_append(strbuf, &variant->content);
4981
0
      proto_tree_add_string_format_value(tree, hf_mswsp_rowvariant_item_value, tvb, offset, size, desc, "%s: %s", desc, wmem_strbuf_get_str(strbuf));
4982
0
    } else {
4983
0
      int64_t value_address;
4984
0
      int buf_offset = offset;
4985
0
      int len;
4986
0
      union vt_single non_fixed_size_val;
4987
0
      DISSECTOR_ASSERT_HINT(vt_type->tvb_get_value_only != 0, "appears this is a dynamic type that we don't know yet how to handle, please submit a bug with network trace");
4988
0
      if (is_64bit) {
4989
0
        variant->content.hyperw = tvb_get_letoh64(tvb, offset);
4990
0
        offset += 8;
4991
0
        value_address = variant->content.hyperw;
4992
0
        proto_tree_add_uint64(tree, hf_mswsp_rowvariant_item_address64, tvb, buf_offset, 8, value_address);
4993
0
      } else {
4994
0
        variant->content.longw = tvb_get_letohl(tvb, offset);
4995
0
        offset += 4;
4996
0
        value_address = variant->content.longw;
4997
0
        proto_tree_add_uint(tree, hf_mswsp_rowvariant_item_address32, tvb, buf_offset, 4, (uint32_t)value_address);
4998
0
      }
4999
5000
0
      len = vt_type->tvb_get_value_only(tvb, pinfo, (int)(value_address - base_address), 0, &non_fixed_size_val);
5001
0
      vt_type->strbuf_append(strbuf, &non_fixed_size_val);
5002
0
      proto_tree_add_string(tree, hf_mswsp_rowvariant_item_value, tvb, (int)(value_address - base_address), len, wmem_strbuf_get_str(strbuf));
5003
0
    }
5004
0
  }
5005
5006
0
  return offset;
5007
0
}
5008
5009
static const value_string STATUS[] = {
5010
  {0, "StoreStatusOk"},
5011
  {1, "StoreStatusDeferred"},
5012
  {2, "StoreStatusNull"},
5013
  {0, NULL}
5014
};
5015
5016
static int parse_RowsBufferCol(tvbuff_t *tvb, packet_info *pinfo, int offset, uint32_t row, uint32_t col, struct CPMSetBindingsIn *bindingsin, struct rows_data *rowsin, bool b_is_64bit, proto_tree *parent_tree, const char *txt)
5017
0
{
5018
0
  proto_tree *tree;
5019
0
  proto_item *item;
5020
0
  uint32_t buf_start = offset;
5021
0
  uint32_t buf_offset = buf_start + (row * bindingsin->brow);
5022
0
  struct CTableColumn *pcol = &bindingsin->acolumns[col];
5023
5024
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_GetRowsColumn, &item, txt);
5025
0
  proto_item_append_text(item, " (%s)", pcol->name);
5026
0
  if (pcol->statusused) {
5027
0
    int tmp_offset = buf_offset + pcol->statusoffset;
5028
0
    proto_tree_add_item(tree, hf_mswsp_ctablecolumn_status, tvb, tmp_offset, 1, ENC_NA);
5029
0
  }
5030
0
  if (pcol->lengthused) {
5031
0
    int tmp_offset = buf_offset + pcol->lengthoffset;
5032
0
    proto_tree_add_item(tree, hf_mswsp_ctablecolumn_length, tvb, tmp_offset, 1, ENC_LITTLE_ENDIAN);
5033
0
  }
5034
0
  if (pcol->valueused) {
5035
0
    int tmp_offset = buf_offset + pcol->valueoffset;
5036
0
    struct CRowVariant variant;
5037
0
    uint32_t len = pcol->valuesize;
5038
0
    uint64_t base_address = rowsin->ulclientbase;/*( + rowsin->cbreserved;*/
5039
0
    ZERO_STRUCT(variant);
5040
5041
0
    if (pcol->lengthused) {
5042
0
      len = tvb_get_letohs(tvb, buf_offset + pcol->lengthoffset) - pcol->valuesize;
5043
0
    }
5044
0
    if (pcol->vtype == VT_VARIANT) {
5045
0
      parse_VariantCol(tvb, pinfo, tmp_offset, tree, base_address, len, b_is_64bit, &variant, "CRowVariant");
5046
0
    }
5047
0
  }
5048
0
  return offset;
5049
0
}
5050
5051
static int parse_RowsBuffer(tvbuff_t *tvb, packet_info *pinfo, int offset, uint32_t num_rows, struct CPMSetBindingsIn *bindingsin, struct rows_data *rowsin, bool is64bit, proto_tree *parent_tree, const char *txt)
5052
0
{
5053
0
  proto_tree *tree;
5054
0
  proto_item *item;
5055
0
  uint32_t num;
5056
5057
0
  tree = proto_tree_add_subtree(parent_tree, tvb, offset, 0, ett_GetRowsRow, &item, txt);
5058
5059
0
  for (num = 0; num < num_rows; ++num) {
5060
0
    uint32_t col;
5061
0
    proto_tree *row_tree;
5062
0
    row_tree = proto_tree_add_subtree_format(tree, tvb, offset, 0, ett_GetRowsRow, NULL, "Row[%d]", num);
5063
0
    for (col = 0; col < bindingsin->ccolumns; col++) {
5064
0
      parse_RowsBufferCol(tvb, pinfo, offset, num, col, bindingsin, rowsin, is64bit, row_tree, wmem_strdup_printf(pinfo->pool, "Col[%d]", col));
5065
0
    }
5066
0
  }
5067
0
  return offset;
5068
0
}
5069
/* Code to actually dissect the packets */
5070
5071
static int dissect_CPMConnect(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *private_data)
5072
0
{
5073
0
  proto_item *ti;
5074
0
  proto_tree *tree;
5075
0
  int offset = 16;
5076
0
  unsigned len;
5077
0
  uint32_t version;
5078
0
  struct message_data *data = NULL;
5079
0
  struct mswsp_ct *ct = NULL;
5080
5081
0
  ti = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, -1, ENC_NA);
5082
0
  tree = proto_item_add_subtree(ti, ett_mswsp_msg);
5083
0
  proto_item_set_text(ti, "CPMConnect%s", in ? "In" : "Out");
5084
0
  col_append_str(pinfo->cinfo, COL_INFO, "Connect");
5085
5086
0
  ti = proto_tree_add_item_ret_uint(tree, hf_mswsp_msg_Connect_Version, tvb,
5087
0
               offset, 4, ENC_LITTLE_ENDIAN, &version);
5088
5089
0
  ct = get_create_converstation_data(pinfo);
5090
5091
0
  if (ct) {
5092
0
    data = find_or_create_message_data(ct, pinfo, 0xC8, in, private_data);
5093
0
    if (data) {
5094
0
      data->content.version = version;
5095
0
    }
5096
0
  }
5097
0
  offset += 4;
5098
5099
0
  if (in) {
5100
0
    uint32_t blob_size1_off, blob_size2_off;
5101
0
    proto_tree *pad_tree;
5102
5103
0
    pad_tree = proto_tree_add_subtree(tree, tvb, offset, 0, ett_mswsp_pad, &ti, "Padding");
5104
5105
0
    proto_tree_add_item(tree, hf_mswsp_msg_ConnectIn_ClientIsRemote, tvb,
5106
0
              offset, 4, ENC_LITTLE_ENDIAN);
5107
0
    offset += 4;
5108
5109
    /* _cbBlob1 */
5110
0
    blob_size1_off = offset;
5111
0
    offset += 4;
5112
5113
0
    offset = parse_padding(tvb, offset, 8, pad_tree, "_paddingcbBlob2");
5114
5115
    /* _cbBlob2 */
5116
0
    blob_size2_off = offset;
5117
0
    offset += 4;
5118
5119
0
    offset = parse_padding(tvb, offset, 16, pad_tree, "_padding");
5120
5121
0
    len = tvb_unicode_strsize(tvb, offset);
5122
0
    proto_tree_add_item(tree, hf_mswsp_msg_ConnectIn_MachineName, tvb,
5123
0
                 offset, len, ENC_LITTLE_ENDIAN | ENC_UCS_2);
5124
0
    offset += len;
5125
5126
0
    len = tvb_unicode_strsize(tvb, offset);
5127
0
    ti = proto_tree_add_item(tree, hf_mswsp_msg_ConnectIn_UserName, tvb,
5128
0
                 offset, len, ENC_LITTLE_ENDIAN | ENC_UCS_2);
5129
0
    offset += len;
5130
5131
0
    offset = parse_padding(tvb, offset, 8, pad_tree, "_paddingcPropSets");
5132
5133
0
    offset = parse_PropertySetArray(tvb, pinfo, offset, blob_size1_off, tree, pad_tree, "PropSets");
5134
5135
0
    offset = parse_padding(tvb, offset, 8, pad_tree, "paddingExtPropset");
5136
5137
0
    offset = parse_PropertySetArray(tvb, pinfo, offset, blob_size2_off, tree, pad_tree, "ExtPropset");
5138
5139
0
    offset = parse_padding(tvb, offset, 8, pad_tree, "???");
5140
5141
0
    DISSECTOR_ASSERT(offset == (int)tvb_reported_length(tvb));
5142
5143
    /* make "Padding" the last item */
5144
0
    proto_tree_move_item(tree, ti, proto_tree_get_parent(pad_tree));
5145
0
  } else {
5146
5147
0
  }
5148
0
  return tvb_reported_length(tvb);
5149
0
}
5150
5151
static int dissect_CPMDisconnect(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U_, bool in _U_, void *data _U_)
5152
0
{
5153
0
  col_append_str(pinfo->cinfo, COL_INFO, "Disconnect");
5154
0
  return tvb_reported_length(tvb);
5155
0
}
5156
5157
static int dissect_CPMCreateQuery(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *data _U_)
5158
0
{
5159
0
  int offset = 16;
5160
0
  proto_item *item;
5161
0
  proto_tree *tree;
5162
5163
0
  item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, -1, ENC_NA);
5164
0
  tree = proto_item_add_subtree(item, ett_mswsp_msg);
5165
5166
0
  proto_item_set_text(item, "CPMCreateQuery%s", in ? "In" : "Out");
5167
0
  col_append_str(pinfo->cinfo, COL_INFO, "CreateQuery");
5168
5169
0
  if (in) {
5170
0
    proto_item *ti;
5171
0
    proto_tree *pad_tree = proto_tree_add_subtree(tree, tvb, offset, 0, ett_mswsp_pad, &ti, "Padding");
5172
0
    uint8_t CColumnSetPresent, CRestrictionPresent, CSortSetPresent, CCategorizationSetPresent;
5173
0
    uint32_t size = tvb_get_letohl(tvb, offset);
5174
0
    proto_tree_add_uint(tree, hf_mswsp_msg_cpmcreatequery_size, tvb, offset, 4, size);
5175
0
    offset += 4;
5176
5177
0
    CColumnSetPresent = tvb_get_uint8(tvb, offset);
5178
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcreatequery_ccolumnsetpresent, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5179
0
    offset += 1;
5180
5181
0
    if (CColumnSetPresent) {
5182
0
      offset = parse_padding(tvb, offset, 4, pad_tree, "paddingCColumnSetPresent");
5183
0
      offset = parse_padding(tvb, offset, 4, pad_tree, "paddingCColumnSetPresent");
5184
0
      offset = parse_CColumnSet(tvb, offset, tree, "CColumnSet");
5185
0
    }
5186
5187
0
    CRestrictionPresent = tvb_get_uint8(tvb, offset);
5188
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcreatequery_crestrictionpresent, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5189
0
    offset += 1;
5190
5191
0
    if (CRestrictionPresent) {
5192
0
      offset = parse_CRestrictionArray(tvb, pinfo, offset, tree, pad_tree, "RestrictionArray");
5193
0
    }
5194
5195
0
    CSortSetPresent = tvb_get_uint8(tvb, offset);
5196
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcreatequery_csortpresent, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5197
0
    offset += 1;
5198
5199
0
    if (CSortSetPresent) {
5200
0
      offset = parse_padding(tvb, offset, 4, tree, "paddingCSortSetPresent");
5201
0
      offset = parse_CInGroupSortAggregSets(tvb, pinfo, offset, tree, pad_tree, "GroupSortAggregSets");
5202
5203
0
    }
5204
5205
0
    CCategorizationSetPresent = tvb_get_uint8(tvb, offset);
5206
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcreatequery_ccategpresent, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5207
0
    offset += 1;
5208
5209
0
    if (CCategorizationSetPresent) {
5210
0
      uint32_t count, i;
5211
0
      offset = parse_padding(tvb, offset, 4, pad_tree, "paddingCCategorizationSetPresent");
5212
      /* 2.2.1.19 CCategorizationSet */
5213
0
      count = tvb_get_letohl(tvb, offset);
5214
0
      proto_tree_add_uint(tree, hf_mswsp_msg_cpmcreatequery_ccateg_count, tvb, offset, 4, count);
5215
0
      offset += 4;
5216
0
      for (i=0; i<count; i++) {
5217
0
        offset = parse_CCategorizationSpec(tvb, pinfo, offset, tree, pad_tree, wmem_strdup_printf(pinfo->pool, "categories[%u]", i));
5218
0
      }
5219
0
    }
5220
5221
0
    offset = parse_padding(tvb, offset, 4, tree, "XXXX");
5222
5223
0
    offset = parse_CRowsetProperties(tvb, offset, tree, pad_tree, "RowSetProperties");
5224
5225
0
    offset = parse_CPidMapper(tvb, pinfo, offset, tree, pad_tree, "PidMapper");
5226
5227
0
    parse_CColumnGroupArray(tvb, pinfo, offset, tree, pad_tree, "GroupArray");
5228
0
  } else { /* out */
5229
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcreatequery_trueseq, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5230
0
    offset += 4;
5231
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcreatequery_workid, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5232
0
    offset += 4;
5233
    /*
5234
         * #FIXME Cursors is an array of uint32 where the size of the array is
5235
         * determined by categories in the CategorizationSet in the CPMQuery
5236
         * request message.
5237
         */
5238
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcreatequery_cursors, tvb, offset, -1, ENC_NA);
5239
0
  }
5240
5241
0
  return tvb_reported_length(tvb);
5242
0
}
5243
5244
static int dissect_CPMFreeCursor(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U_, bool in _U_, void *data _U_)
5245
0
{
5246
0
  col_append_str(pinfo->cinfo, COL_INFO, "FreeCursor");
5247
0
  return tvb_reported_length(tvb);
5248
0
}
5249
5250
static int dissect_CPMGetRows(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *private_data)
5251
0
{
5252
0
  struct mswsp_ct *ct = NULL;
5253
0
  int offset = 16;
5254
0
  proto_item *item;
5255
0
  proto_tree *tree;
5256
0
  proto_tree *seek_tree;
5257
0
  uint32_t eType = 0;
5258
5259
0
  item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, in ? 0 : -1, ENC_NA);
5260
0
  tree = proto_item_add_subtree(item, ett_mswsp_msg);
5261
5262
0
  proto_item_set_text(item, "GetRows%s", in ? "In" : "Out");
5263
0
  col_append_str(pinfo->cinfo, COL_INFO, "GetRows");
5264
5265
0
  ct = get_create_converstation_data(pinfo);
5266
0
  if (in) {
5267
    /* 2.2.3.11 */
5268
0
    struct message_data *data = NULL;
5269
5270
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrows_hcursor, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5271
0
    offset += 4;
5272
5273
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrows_rowstotransfer, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5274
0
    offset += 4;
5275
5276
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrows_rowwidth, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5277
0
    offset += 4;
5278
5279
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrows_cbseek, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5280
0
    offset += 4;
5281
5282
0
    data = find_or_create_message_data(ct, pinfo, 0xCC, in, private_data);
5283
0
    if (data) {
5284
0
      data->content.rowsin.cbreserved = tvb_get_letohl(tvb, offset);
5285
0
    }
5286
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrows_cbreserved, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5287
0
    offset += 4;
5288
5289
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrows_cbreadbuffer, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5290
0
    offset += 4;
5291
5292
0
    if (data) {
5293
0
      data->content.rowsin.ulclientbase = tvb_get_letohl(tvb, offset);
5294
0
    }
5295
5296
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrows_ulclientbase, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5297
0
    offset += 4;
5298
5299
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrows_fbwdfetch, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5300
0
    offset += 4;
5301
5302
0
    eType = tvb_get_letohl(tvb, offset);
5303
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrows_etype, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5304
0
    offset += 4;
5305
5306
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrows_chapt, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5307
0
    offset += 4;
5308
5309
0
    seek_tree = proto_tree_add_subtree(tree, tvb, offset, 0, ett_SeekDescription, NULL, "SeekDescription");
5310
0
    switch (eType) {
5311
0
    case 0: /* eRowSeekNone */
5312
0
      break;
5313
0
    case 1: /* eRowSeekNext */
5314
0
      parse_CRowSeekNext(tvb, offset, seek_tree, "CRowSeekNext");
5315
0
      break;
5316
0
    case 2: /* eRowSeekAt */
5317
0
      parse_CRowSeekAt(tvb, offset, seek_tree, "CRowSeekAt");
5318
5319
0
      break;
5320
0
    case 3: /* eRowSeekAtRatio */
5321
0
      parse_CRowSeekAtRatio(tvb, offset, seek_tree, "CRowSeekAtRatio");
5322
0
      break;
5323
0
    case 4: /* eRowSeekByBookmark */
5324
0
      parse_CRowSeekByBookmark(tvb, offset, seek_tree, "CRowSeekByRatio");
5325
0
      break;
5326
0
    default: /*error*/
5327
0
      break;
5328
0
    }
5329
0
  } else {
5330
    /* 2.2.3.12 */
5331
    /*
5332
     * GetRows response needs information from GetRow & SetBindings
5333
     * requests
5334
     */
5335
    /* find the preceding SetBinding data */
5336
0
    uint32_t num_rows = 0;
5337
0
    proto_item *ti;
5338
0
    proto_tree *pad_tree = proto_tree_add_subtree(tree, tvb, offset, 0, ett_mswsp_pad, &ti, "Padding");
5339
0
    struct CPMSetBindingsIn *bindingsin = find_binding_msg_data(ct, pinfo,
5340
0
                        private_data);
5341
0
    struct rows_data *rowsin = find_rowsin_msg_data(ct, pinfo, private_data);
5342
0
    bool b_64bit_mode = false;
5343
0
    bool b_has_arch = is_64bit_mode(ct, pinfo, &b_64bit_mode, private_data);
5344
0
    num_rows = tvb_get_letohl(tvb, offset);
5345
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrows_crowsreturned, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5346
0
    offset += 4;
5347
5348
0
    eType = tvb_get_letohl(tvb, offset);
5349
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrows_etype, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5350
0
    offset += 4;
5351
5352
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrows_chapt, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5353
0
    offset += 4;
5354
5355
0
    seek_tree = proto_tree_add_subtree(tree, tvb, offset, 0, ett_SeekDescription, NULL, "SeekDescription");
5356
0
    switch (eType) {
5357
0
    case 0: /* eRowSeekNone */
5358
0
      break;
5359
0
    case 1: /* eRowSeekNext */
5360
0
      parse_CRowSeekNext(tvb, offset, seek_tree, "CRowSeekNext");
5361
0
      break;
5362
0
    case 2: /* eRowSeekAt */
5363
0
      parse_CRowSeekAt(tvb, offset, seek_tree, "CRowSeekAt");
5364
5365
0
      break;
5366
0
    case 3: /* eRowSeekAtRatio */
5367
0
      parse_CRowSeekAtRatio(tvb, offset, seek_tree, "CRowSeekAtRatio");
5368
0
      break;
5369
0
    case 4: /* eRowSeekByBookmark */
5370
0
      parse_CRowSeekByBookmark(tvb, offset, seek_tree, "CRowSeekByRatio");
5371
0
      break;
5372
0
    default: /*error*/
5373
0
      break;
5374
0
    }
5375
5376
0
    if (b_has_arch && bindingsin && rowsin) {
5377
0
      offset = parse_padding(tvb, offset, rowsin->cbreserved, pad_tree,
5378
0
                   "paddingRows");
5379
0
      parse_RowsBuffer(tvb, pinfo, offset, num_rows, bindingsin, rowsin, b_64bit_mode, tree, "Rows");
5380
0
    } else {
5381
0
      int nbytes = tvb_reported_length_remaining(tvb, offset);
5382
0
      proto_tree_add_expert_format(tree, pinfo, &ei_missing_msg_context, tvb, offset, nbytes, "Undissected %d bytes (due to missing preceding msg(s))", nbytes);
5383
0
    }
5384
0
  }
5385
5386
0
  return tvb_reported_length(tvb);
5387
5388
0
}
5389
5390
static int dissect_CPMRatioFinished(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *data _U_)
5391
0
{
5392
0
  int offset = 16;
5393
0
  proto_item *item;
5394
0
  proto_tree *tree;
5395
0
  col_append_str(pinfo->cinfo, COL_INFO, "RatioFinished");
5396
0
  item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, -1, ENC_NA);
5397
0
  tree = proto_item_add_subtree(item, ett_mswsp_msg);
5398
0
  proto_item_set_text(item, "RationFinished%s", in ? "In" : "Out");
5399
0
  if (in) {
5400
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmratiofinished_hcursor, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5401
0
    offset += 4;
5402
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmratiofinished_fquick, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5403
0
  } else {
5404
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmratiofinished_ulnumerator, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5405
0
    offset += 4;
5406
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmratiofinished_uldenominator, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5407
0
    offset += 4;
5408
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmratiofinished_crows, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5409
0
    offset += 4;
5410
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmratiofinished_fnewrows, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5411
0
  }
5412
5413
0
  return tvb_reported_length(tvb);
5414
0
}
5415
5416
static int dissect_CPMCompareBmk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *data _U_)
5417
0
{
5418
0
  int offset = 16;
5419
0
  proto_item *item;
5420
0
  proto_tree *tree;
5421
5422
0
  item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, in ? 0 : -1, ENC_NA);
5423
0
  tree = proto_item_add_subtree(item, ett_mswsp_msg);
5424
5425
0
  proto_item_set_text(item, "CompareBmk%s", in ? "In" : "Out");
5426
0
  col_append_str(pinfo->cinfo, COL_INFO, "CompareBmk");
5427
0
  if (in) {
5428
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcomparebmk_hcursor, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5429
0
    offset += 4;
5430
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcomparebmk_chapt, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5431
0
    offset += 4;
5432
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcomparebmk_bmkfirst, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5433
0
    offset += 4;
5434
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcomparebmk_bmksecond, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5435
0
  } else {
5436
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcomparebmk_dwcomparison, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5437
0
  }
5438
0
  return tvb_reported_length(tvb);
5439
0
}
5440
5441
static int dissect_CPMGetApproximatePosition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *data _U_)
5442
0
{
5443
0
  int offset = 16;
5444
0
  proto_item *item;
5445
0
  proto_tree *tree;
5446
5447
0
  item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, in ? 0 : -1, ENC_NA);
5448
0
  tree = proto_item_add_subtree(item, ett_mswsp_msg);
5449
5450
0
  proto_item_set_text(item, "GetApproximatePosition%s", in ? "In" : "Out");
5451
0
  col_append_str(pinfo->cinfo, COL_INFO, "GetApproximatePosition");
5452
0
  if (in) {
5453
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetapproxpos_hcursor, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5454
0
    offset += 4;
5455
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetapproxpos_chapt, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5456
0
    offset += 4;
5457
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetapproxpos_bmk, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5458
0
  } else {
5459
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetapproxpos_numerator, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5460
0
    offset += 4;
5461
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetapproxpos_denominator, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5462
0
  }
5463
0
  return tvb_reported_length(tvb);
5464
0
}
5465
5466
/* 2.2.3.10 */
5467
static int dissect_CPMSetBindings(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *private_data)
5468
0
{
5469
0
  int offset = 16;
5470
0
  struct CPMSetBindingsIn request;
5471
5472
0
  col_append_str(pinfo->cinfo, COL_INFO, "SetBindings");
5473
0
  if (in) {
5474
5475
0
    struct mswsp_ct *ct = NULL;
5476
0
    struct message_data *data = NULL;
5477
0
    proto_item *ti;
5478
0
    proto_tree *tree, *pad_tree;
5479
0
    uint32_t size, num, n;
5480
0
    int64_t column_size;
5481
5482
0
    ti = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, -1, ENC_NA);
5483
0
    tree = proto_item_add_subtree(ti, ett_mswsp_msg);
5484
5485
0
    proto_item_set_text(ti, "SetBindingsIn");
5486
5487
0
    pad_tree = proto_tree_add_subtree(tree, tvb, offset, 0, ett_mswsp_pad, &ti, "Padding");
5488
5489
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmsetbinding_hcursor, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5490
0
    request.hcursor = tvb_get_letohl(tvb, offset);
5491
0
    offset += 4;
5492
0
    request.brow = tvb_get_letohl(tvb, offset);
5493
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmsetbinding_cbrow, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5494
0
    offset += 4;
5495
5496
0
    size = tvb_get_letohl(tvb, offset);
5497
0
    request.bbindingdesc = size;
5498
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmsetbinding_desc, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5499
0
    offset += 4;
5500
5501
0
    request.dummy = tvb_get_letohl(tvb, offset);
5502
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmsetbinding_dummy, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5503
0
    offset += 4;
5504
5505
0
    num = tvb_get_letohl(tvb, offset);
5506
0
    request.ccolumns = num;
5507
0
    ti = proto_tree_add_item(tree, hf_mswsp_msg_cpmsetbinding_ccolumns, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5508
0
    offset += 4;
5509
5510
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmsetbinding_acolumns, tvb, offset, size-4, ENC_NA);
5511
5512
    /* Sanity check size value */
5513
0
    column_size = num*MIN_CTABLECOL_SIZE;
5514
0
    if (num > MAX_CTABLECOL_SIZE || column_size > tvb_reported_length_remaining(tvb, offset))
5515
0
    {
5516
0
      expert_add_info(pinfo, ti, &ei_mswsp_msg_cpmsetbinding_ccolumns);
5517
0
      return tvb_reported_length(tvb);
5518
0
    }
5519
5520
0
    ct = get_create_converstation_data(pinfo);
5521
5522
0
    request.acolumns = (struct CTableColumn*)wmem_alloc(wmem_file_scope(),
5523
0
               sizeof(struct CTableColumn) * num);
5524
0
    for (n=0; n<num; n++) {
5525
0
      offset = parse_padding(tvb, offset, 4, pad_tree, wmem_strdup_printf(pinfo->pool, "padding_aColumns[%u]", n));
5526
0
      offset = parse_CTableColumn(tvb, pinfo, offset, tree, pad_tree, &request.acolumns[n], wmem_strdup_printf(pinfo->pool, "aColumns[%u]", n));
5527
0
    }
5528
0
    data = find_or_create_message_data(ct, pinfo,0xD0,in, private_data);
5529
0
    if (data) {
5530
0
      data->content.bindingsin = request;
5531
0
    }
5532
5533
0
  } else { /* server only returns status with header */
5534
0
  }
5535
5536
0
  return tvb_reported_length(tvb);
5537
0
}
5538
5539
static int dissect_CPMGetNotify(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U_, bool in _U_, void *data _U_)
5540
0
{
5541
0
  col_append_str(pinfo->cinfo, COL_INFO, "GetNotify");
5542
0
  return tvb_reported_length(tvb);
5543
0
}
5544
5545
static int dissect_CPMSendNotifyOut(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in _U_, void *data _U_)
5546
0
{
5547
0
  int offset = 16;
5548
0
  proto_item *item;
5549
0
  proto_tree *tree;
5550
5551
0
  col_append_str(pinfo->cinfo, COL_INFO, "SendNotify");
5552
0
  item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, -1, ENC_NA);
5553
0
  tree = proto_item_add_subtree(item, ett_mswsp_msg);
5554
0
  proto_item_set_text(item, "GetSendNotifyOut");
5555
0
  proto_tree_add_item(tree, hf_mswsp_msg_cpmsendnotify_watchnotify, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5556
0
  return tvb_reported_length(tvb);
5557
0
}
5558
5559
static int dissect_CPMGetQueryStatus(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *data _U_)
5560
0
{
5561
0
  int offset = 16;
5562
0
  proto_item *item;
5563
0
  proto_tree *tree;
5564
5565
0
  item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, -1, ENC_NA);
5566
0
  tree = proto_item_add_subtree(item, ett_mswsp_msg);
5567
5568
0
  proto_item_set_text(item, "GetQueryStatus%s", in ? "In" : "Out");
5569
0
  col_append_str(pinfo->cinfo, COL_INFO, "GetQueryStatus");
5570
5571
0
  if (in) {
5572
    /* 2.2.3.7 */
5573
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetquerystatus_hcursor, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5574
0
  } else {
5575
    /* 2.2.3.7 */
5576
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetquerystatus_qstatus, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5577
0
  }
5578
5579
0
  return tvb_reported_length(tvb);
5580
0
}
5581
5582
static int dissect_CPMCiState(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *data _U_)
5583
0
{
5584
0
  int offset = 16;
5585
0
  proto_item *item;
5586
0
  proto_tree *tree;
5587
5588
0
  col_append_str(pinfo->cinfo, COL_INFO, "CiState");
5589
5590
0
  if (!in) {
5591
0
    item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, -1, ENC_NA);
5592
0
    tree = proto_item_add_subtree(item, ett_mswsp_msg);
5593
0
    proto_item_set_text(item, "CiStateOut");
5594
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_cbstruct, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5595
0
    offset += 4;
5596
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_cwordlist, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5597
0
    offset += 4;
5598
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_cpersistindex, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5599
0
    offset += 4;
5600
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_cqueries, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5601
0
    offset += 4;
5602
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_cfreshtest, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5603
0
    offset += 4;
5604
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_cfreshtest, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5605
0
    offset += 4;
5606
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_dwmergeprogress, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5607
0
    offset += 4;
5608
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_estate, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5609
0
    offset += 4;
5610
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_cfiltereddocs, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5611
0
    offset += 4;
5612
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_ctotaldocs, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5613
0
    offset += 4;
5614
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_cpendingscans, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5615
0
    offset += 4;
5616
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_dwindexsize, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5617
0
    offset += 4;
5618
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_cuniquekeys, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5619
0
    offset += 4;
5620
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_csecqdocuments, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5621
0
    offset += 4;
5622
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmcistate_dwpropcachesize, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5623
0
  }
5624
0
  return tvb_reported_length(tvb);
5625
0
}
5626
5627
static int dissect_CPMFetchValue(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *data _U_)
5628
0
{
5629
0
  int offset = 16;
5630
0
  proto_item *item;
5631
0
  proto_tree *tree, *pad_tree;
5632
0
  col_append_str(pinfo->cinfo, COL_INFO, "FetchValue");
5633
5634
0
  item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, -1, ENC_NA);
5635
0
  tree = proto_tree_add_subtree_format(parent_tree, tvb, offset, 0, ett_mswsp_msg, &item, "FetchValue%s", in ? "In" : "Out");
5636
0
  pad_tree = proto_tree_add_subtree(tree, tvb, offset, 0, ett_mswsp_pad, NULL, "Padding");
5637
0
  if (in) {
5638
0
    struct CFullPropSpec prop;
5639
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmfetchvalue_wid, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5640
0
    offset += 4;
5641
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmfetchvalue_cbsofar, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5642
0
    offset += 4;
5643
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmfetchvalue_cbpropspec, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5644
0
    offset += 4;
5645
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmfetchvalue_cbchunk, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5646
0
    offset += 4;
5647
0
    offset = parse_CFullPropSpec(tvb, pinfo, offset, tree, pad_tree, &prop,
5648
0
                   "PropSpec");
5649
0
    parse_padding(tvb, offset, 4, pad_tree,"_padding");
5650
0
  } else {
5651
0
    uint32_t cbValue = tvb_get_letohl(tvb, offset);
5652
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmfetchvalue_cbvalue, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5653
0
    offset += 4;
5654
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmfetchvalue_fmoreexists, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5655
0
    offset += 4;
5656
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmfetchvalue_fvalueexists, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5657
0
    offset += 4;
5658
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmfetchvalue_vvalue, tvb, offset, cbValue, ENC_NA);
5659
0
  }
5660
0
  return tvb_reported_length(tvb);
5661
0
}
5662
5663
static int dissect_CPMGetQueryStatusEx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *data _U_)
5664
0
{
5665
0
  int offset = 16;
5666
0
  proto_item *item;
5667
0
  proto_tree *tree;
5668
5669
0
  item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, -1, ENC_NA);
5670
0
  tree = proto_item_add_subtree(item, ett_mswsp_msg);
5671
5672
0
  proto_item_set_text(item, "GetQueryStatusEx%s", in ? "In" : "Out");
5673
0
  col_append_str(pinfo->cinfo, COL_INFO, "GetQueryStatusEx");
5674
5675
0
  if (in) {
5676
    /* 2.2.3.8 */
5677
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmquerystatusex_hcursor, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5678
0
    offset += 4;
5679
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmquerystatusex_bmk, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5680
0
  } else {
5681
    /* 2.2.3.9 */
5682
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmquerystatusex_qstatus, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5683
0
    offset += 4;
5684
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmquerystatusex_cfiltereddocs, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5685
0
    offset += 4;
5686
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmquerystatusex_cdocstofilter, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5687
0
    offset += 4;
5688
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmquerystatusex_dwratiodenom, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5689
0
    offset += 4;
5690
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmquerystatusex_dwrationumer, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5691
0
    offset += 4;
5692
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmquerystatusex_irowbmk, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5693
0
    offset += 4;
5694
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmquerystatusex_crowstotal, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5695
0
    offset += 4;
5696
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmquerystatusex_maxrank, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5697
0
    offset += 4;
5698
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmquerystatusex_cresultsfound, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5699
0
    offset += 4;
5700
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmquerystatusex_whereid, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5701
0
  }
5702
0
  return tvb_reported_length(tvb);
5703
0
}
5704
5705
static int dissect_CPMRestartPosition(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *data _U_)
5706
0
{
5707
0
  int offset = 16;
5708
0
  proto_item *item;
5709
0
  proto_tree *tree;
5710
5711
0
  col_append_str(pinfo->cinfo, COL_INFO, "CPMRestartPosition");
5712
5713
0
  if (in) {
5714
0
    item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, -1, ENC_NA);
5715
0
    tree = proto_item_add_subtree(item, ett_mswsp_msg);
5716
0
    proto_item_set_text(item, "CPMRestartPosition");
5717
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmrestartposition_hcursor, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5718
0
    offset += 4;
5719
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmrestartposition_chapt, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5720
0
  }
5721
5722
0
  col_append_str(pinfo->cinfo, COL_INFO, "RestartPosition");
5723
0
  return tvb_reported_length(tvb);
5724
0
}
5725
5726
static int dissect_CPMSetCatState(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree _U_, bool in _U_, void *data _U_)
5727
0
{
5728
0
  col_append_str(pinfo->cinfo, COL_INFO, "SetCatState");
5729
0
  return tvb_reported_length(tvb);
5730
0
}
5731
5732
static int dissect_CPMGetRowsetNotify(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *data _U_)
5733
0
{
5734
0
  int offset = 16;
5735
0
  proto_item *item;
5736
0
  proto_tree *tree;
5737
0
  col_append_str(pinfo->cinfo, COL_INFO, "GetRowsetNotify");
5738
0
  if (!in) {
5739
0
    item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, -1, ENC_NA);
5740
0
    tree = proto_item_add_subtree(item, ett_mswsp_msg);
5741
0
    proto_item_set_text(item, "GetRowsetNotifyOut");
5742
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrowsetnotify_wid, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5743
0
    offset += 4;
5744
5745
    /* moveevents */
5746
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrowsetnotify_moreevents, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5747
    /*  eventType */
5748
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrowsetnotify_eventtype, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5749
0
    offset += 1;
5750
5751
    /* rowSetItemState */
5752
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrowsetnotify_rowsetitemstate, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5753
0
    offset += 1;
5754
5755
    /* changedItemState */
5756
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrowsetnotify_changeditemstate, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5757
0
    offset += 1;
5758
5759
    /* rowSetEvent */
5760
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrowsetnotify_rowsetevent, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5761
0
    offset += 1;
5762
5763
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrowsetnotify_rowseteventdata1, tvb, offset, 8, ENC_LITTLE_ENDIAN);
5764
0
    offset += 8;
5765
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmgetrowsetnotify_rowseteventdata2, tvb, offset, 8, ENC_LITTLE_ENDIAN);
5766
    /* it seems there is an extra unknown 8 bytes following */
5767
0
  }
5768
0
  return tvb_reported_length(tvb);
5769
0
}
5770
5771
static int dissect_CPMFindIndices(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *data _U_)
5772
0
{
5773
0
  int offset = 16;
5774
0
  proto_item *item;
5775
0
  proto_tree *tree;
5776
0
  col_append_str(pinfo->cinfo, COL_INFO, "FindIndices");
5777
0
  item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, -1, ENC_NA);
5778
0
  tree = proto_item_add_subtree(item, ett_mswsp_msg);
5779
0
  proto_item_set_text(item, "FindIndices%s", in ? "In" : "Out");
5780
5781
0
  if (in) {
5782
0
    uint32_t cWids;
5783
0
    uint32_t cDepthPrev;
5784
0
    cWids = tvb_get_letohl(tvb, offset);
5785
0
    proto_tree_add_uint(tree, hf_mswsp_msg_cpmfindindices_cwids, tvb, offset, 4, cWids);
5786
0
    offset += 4;
5787
0
    cDepthPrev = tvb_get_letohl(tvb, offset);
5788
0
    proto_tree_add_uint(tree, hf_mswsp_msg_cpmfindindices_cdepthprev, tvb, offset, 4, cDepthPrev);
5789
0
    offset += 4;
5790
0
    offset = parse_uin32_array(tvb, offset, tree, cWids, "pwids");
5791
0
    parse_uin32_array(tvb, offset, tree, cDepthPrev, "prgiRowPrev");
5792
0
  } else {
5793
0
    uint32_t cDepthNext;
5794
0
    cDepthNext = tvb_get_letohl(tvb, offset);
5795
0
    proto_tree_add_uint(tree, hf_mswsp_msg_cpmfindindices_cdepthnext, tvb, offset, 4, cDepthNext);
5796
0
    offset += 4;
5797
0
    parse_uin32_array(tvb, offset, tree, cDepthNext, "prgiRowNext");
5798
0
  }
5799
0
  return tvb_reported_length(tvb);
5800
0
}
5801
5802
static int dissect_CPMSetScopePrioritization(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *data _U_)
5803
0
{
5804
0
  int offset = 16;
5805
0
  proto_item *item;
5806
0
  proto_tree *tree;
5807
5808
0
  col_append_str(pinfo->cinfo, COL_INFO, "SetScopePrioritization");
5809
5810
0
  if (in) {
5811
0
    item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, -1, ENC_NA);
5812
0
    tree = proto_item_add_subtree(item, ett_mswsp_msg);
5813
0
    proto_item_set_text(item, "SetScopePrioritizationIn");
5814
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmsetscopeprioritization_priority, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5815
0
    offset += 4;
5816
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmsetscopeprioritization_eventfreq, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5817
0
  }
5818
0
  return tvb_reported_length(tvb);
5819
0
}
5820
5821
static int dissect_CPMGetScopeStatistics(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, bool in, void *data _U_)
5822
0
{
5823
5824
0
  int offset = 16;
5825
0
  proto_item *item;
5826
0
  proto_tree *tree;
5827
5828
0
  item = proto_tree_add_item(parent_tree, hf_mswsp_msg, tvb, offset, in ? 0 : -1, ENC_NA);
5829
0
  tree = proto_item_add_subtree(item, ett_mswsp_msg);
5830
5831
0
  proto_item_set_text(item, "GetScopeStatistics%s", in ? "In" : "Out");
5832
0
  col_append_str(pinfo->cinfo, COL_INFO, "GetScopeStatistics");
5833
5834
0
  if (in) {
5835
    /* 2.2.3.33 */
5836
0
  } else {
5837
    /* 2.2.3.34 */
5838
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmsetscopestatisics_dwindexitems, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5839
0
    offset += 4;
5840
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmsetscopestatisics_dwoutstandingadds, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5841
0
    offset += 4;
5842
0
    proto_tree_add_item(tree, hf_mswsp_msg_cpmsetscopestatisics_dwoutstandingmodifies, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5843
0
  }
5844
5845
0
  return tvb_reported_length(tvb);
5846
0
}
5847
5848
5849
static const value_string msg_ids[] = {
5850
  {0x000000C8, "CPMConnect"},                /* In/Out */
5851
  {0x000000C9, "CPMDisconnect"},
5852
  {0x000000CA, "CPMCreateQuery"},            /* In/Out */
5853
  {0x000000CB, "CPMFreeCursor"},             /* In/Out */
5854
  {0x000000CC, "CPMGetRows"},                /* In/Out */
5855
  {0x000000CD, "CPMRatioFinished"},          /* In/Out */
5856
  {0x000000CE, "CPMCompareBmk"},             /* In/Out */
5857
  {0x000000CF, "CPMGetApproximatePosition"}, /* In/Out */
5858
  {0x000000D0, "CPMSetBindingsIn"},
5859
  {0x000000D1, "CPMGetNotify"},
5860
  {0x000000D2, "CPMSendNotifyOut"},
5861
  {0x000000D7, "CPMGetQueryStatusIn"},       /* In/Out */
5862
  {0x000000D9, "CPMCiStateInOut"},
5863
  {0x000000E4, "CPMFetchValue"},             /* In/Out */
5864
  {0x000000E7, "CPMGetQueryStatusEx"},       /* In/Out */
5865
  {0x000000E8, "CPMRestartPositionIn"},
5866
  {0x000000EC, "CPMSetCatStateIn"},          /* (not supported) */
5867
  {0x000000F1, "CPMGetRowsetNotify"},        /* In/Out */
5868
  {0x000000F2, "CPMFindIndices"},            /* In/Out */
5869
  {0x000000F3, "CPMSetScopePrioritization"}, /* In/Out */
5870
  {0x000000F4, "CPMGetScopeStatistics"},     /* In/Out */
5871
  {0, NULL}
5872
};
5873
5874
5875
static int
5876
dissect_mswsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, bool in, void *data)
5877
0
{
5878
0
  proto_tree *mswsp_tree = NULL;
5879
0
  proto_tree *hdr_tree;
5880
0
  proto_item *ti, *hti;
5881
0
  uint32_t msg;
5882
0
  uint32_t status;
5883
5884
5885
0
  if (tvb_reported_length(tvb) < 16) {
5886
0
    return 0;
5887
0
  }
5888
5889
  /* col_set_str(pinfo->cinfo, COL_PROTOCOL, "MS-WSP"); */
5890
0
  col_append_str(pinfo->cinfo, COL_PROTOCOL, " WSP");
5891
  /*    col_clear(pinfo->cinfo, COL_INFO); */
5892
5893
0
  col_set_str(pinfo->cinfo, COL_INFO, "WSP ");
5894
0
  col_append_str(pinfo->cinfo, COL_INFO, in ? "Request: " : "Response: ");
5895
5896
0
  ti = proto_tree_add_item(tree, proto_mswsp, tvb, 0, -1, ENC_NA);
5897
0
  mswsp_tree = proto_item_add_subtree(ti, ett_mswsp);
5898
5899
0
  hti = proto_tree_add_item(mswsp_tree, hf_mswsp_hdr, tvb, 0, 16, ENC_NA);
5900
0
  hdr_tree = proto_item_add_subtree(hti, ett_mswsp_hdr);
5901
5902
0
  proto_tree_add_item_ret_uint(hdr_tree, hf_mswsp_hdr_msg, tvb,
5903
0
            0, 4, ENC_LITTLE_ENDIAN, &msg);
5904
0
  proto_item_append_text(hti, " %s", val_to_str(pinfo->pool, msg, VALS(msg_ids),
5905
0
               "(Unknown: 0x%x)"));
5906
5907
0
  proto_tree_add_item_ret_uint(hdr_tree, hf_mswsp_hdr_status, tvb,
5908
0
            4, 4, ENC_LITTLE_ENDIAN, &status);
5909
0
  if (!in || status != 0) {
5910
0
    proto_item_append_text(hti, " %s",
5911
0
                 val_to_str(pinfo->pool, status, VALS(dcom_hresult_vals),
5912
0
                      "(Unknown: 0x%x)"));
5913
0
  }
5914
5915
0
  proto_tree_add_checksum(hdr_tree, tvb, 8, hf_mswsp_hdr_checksum, -1, NULL, pinfo, 0, ENC_LITTLE_ENDIAN, PROTO_CHECKSUM_NO_FLAGS);
5916
  /* todo: validate checksum */
5917
5918
0
  proto_tree_add_item(hdr_tree, hf_mswsp_hdr_reserved, tvb,
5919
0
            12, 4, ENC_LITTLE_ENDIAN);
5920
5921
5922
0
  switch(msg) {
5923
0
  case 0xC8:
5924
0
    dissect_CPMConnect(tvb, pinfo, tree, in, data);
5925
0
    break;
5926
0
  case 0xC9:
5927
0
    dissect_CPMDisconnect(tvb, pinfo, tree, in, data);
5928
0
    break;
5929
0
  case 0xCA:
5930
0
    dissect_CPMCreateQuery(tvb, pinfo, tree, in, data);
5931
0
    break;
5932
0
  case 0xCB:
5933
0
    dissect_CPMFreeCursor(tvb, pinfo, tree, in, data);
5934
0
    break;
5935
0
  case 0xCC:
5936
0
    dissect_CPMGetRows(tvb, pinfo, tree, in, data);
5937
0
    break;
5938
0
  case 0xCD:
5939
0
    dissect_CPMRatioFinished(tvb, pinfo, tree, in, data);
5940
0
    break;
5941
0
  case 0xCE:
5942
0
    dissect_CPMCompareBmk(tvb, pinfo, tree, in, data);
5943
0
    break;
5944
0
  case 0xCF:
5945
0
    dissect_CPMGetApproximatePosition(tvb, pinfo, tree, in, data);
5946
0
    break;
5947
0
  case 0xD0:
5948
0
    dissect_CPMSetBindings(tvb, pinfo, tree, in, data);
5949
0
    break;
5950
0
  case 0xD1:
5951
0
    dissect_CPMGetNotify(tvb, pinfo, tree, in, data);
5952
0
    break;
5953
0
  case 0xD2:
5954
0
    dissect_CPMSendNotifyOut(tvb, pinfo, tree, in, data);
5955
0
    break;
5956
0
  case  0xD7:
5957
0
    dissect_CPMGetQueryStatus(tvb, pinfo, tree, in, data);
5958
0
    break;
5959
0
  case  0xD9:
5960
0
    dissect_CPMCiState(tvb, pinfo, tree, in, data);
5961
0
    break;
5962
0
  case  0xE4:
5963
0
    dissect_CPMFetchValue(tvb, pinfo, tree, in, data);
5964
0
    break;
5965
0
  case  0xE7:
5966
0
    dissect_CPMGetQueryStatusEx(tvb, pinfo, tree, in, data);
5967
0
    break;
5968
0
  case  0xE8:
5969
0
    dissect_CPMRestartPosition(tvb, pinfo, tree, in, data);
5970
0
    break;
5971
0
  case  0xEC:
5972
0
     dissect_CPMSetCatState(tvb, pinfo, tree, in, data);
5973
0
    break;
5974
0
  case  0xF1:
5975
0
    dissect_CPMGetRowsetNotify(tvb, pinfo, tree, in, data);
5976
0
    break;
5977
0
  case  0xF2:
5978
0
    dissect_CPMFindIndices(tvb, pinfo, tree, in, data);
5979
0
    break;
5980
0
  case  0xF3:
5981
0
    dissect_CPMSetScopePrioritization(tvb, pinfo, tree, in, data);
5982
0
    break;
5983
0
  case  0xF4:
5984
0
    dissect_CPMGetScopeStatistics(tvb, pinfo, tree, in, data);
5985
0
    break;
5986
0
  default:
5987
0
    return 0;
5988
0
  }
5989
5990
  /* Return the amount of data this dissector was able to dissect */
5991
0
  return tvb_reported_length(tvb);
5992
0
}
5993
5994
5995
void
5996
proto_register_mswsp(void)
5997
14
{
5998
14
  expert_module_t* expert_mswsp = NULL;
5999
14
  static hf_register_info hf[] = {
6000
14
    {
6001
14
      &hf_mswsp_hdr,
6002
14
      {
6003
14
        "Header", "mswsp.hdr",
6004
14
        FT_NONE, BASE_NONE, NULL, 0,
6005
14
        "Message header", HFILL
6006
14
      }
6007
14
    },
6008
14
    {
6009
14
      &hf_mswsp_hdr_msg,
6010
14
      {
6011
14
        "Msg id", "mswsp.hdr.id",
6012
14
        FT_UINT32, BASE_HEX, VALS(msg_ids), 0,
6013
14
        "Message id", HFILL
6014
14
      }
6015
14
    },
6016
14
    {
6017
14
      &hf_mswsp_hdr_status,
6018
14
      {
6019
14
        "Status", "mswsp.hdr.status",
6020
14
        FT_UINT32, BASE_HEX, VALS(dcom_hresult_vals), 0,
6021
14
        "Message Status", HFILL
6022
14
      }
6023
14
    },
6024
14
    {
6025
14
      &hf_mswsp_hdr_checksum,
6026
14
      {
6027
14
        "checksum", "mswsp.hdr.checksum",
6028
14
        FT_UINT32, BASE_HEX, NULL, 0,
6029
14
        "Message Checksum", HFILL
6030
14
      }
6031
14
    },
6032
14
    {
6033
14
      &hf_mswsp_hdr_reserved,
6034
14
      {
6035
14
        "Reserved", "mswsp.hdr.reserved",
6036
14
        FT_UINT32, BASE_HEX, NULL, 0,
6037
14
        "Reserved bytes", HFILL
6038
14
      }
6039
14
    },
6040
14
    {
6041
14
      &hf_mswsp_msg,
6042
14
      {
6043
14
        "msg", "mswsp.msg",
6044
14
        FT_NONE, BASE_NONE, NULL, 0,
6045
14
        "Message", HFILL
6046
14
      }
6047
14
    },
6048
14
    {
6049
14
      &hf_mswsp_msg_Connect_Version,
6050
14
      {
6051
14
        "Version", "mswsp.Connect.version",
6052
14
        FT_UINT32, BASE_HEX, VALS(version_vals), 0,
6053
14
        "OS Version", HFILL
6054
14
      }
6055
14
    },
6056
14
    {
6057
14
      &hf_mswsp_msg_ConnectIn_ClientIsRemote,
6058
14
      {
6059
14
        "Remote", "mswsp.ConnectIn.isRemote",
6060
14
        FT_BOOLEAN, BASE_NONE, NULL, 0,
6061
14
        "Client is remote",HFILL
6062
14
      }
6063
14
    },
6064
14
    {
6065
14
      &hf_mswsp_msg_ConnectIn_Blob1,
6066
14
      {
6067
14
        "Size", "mswsp.ConnectIn.propset.size",
6068
14
        FT_UINT32, BASE_DEC, NULL, 0,
6069
14
        "Size of PropSet fields",HFILL
6070
14
      }
6071
14
    },
6072
14
    {
6073
14
      &hf_mswsp_msg_ConnectIn_MachineName,
6074
14
      {
6075
14
        "Remote machine", "mswsp.ConnectIn.machine",
6076
14
        FT_STRINGZ, BASE_NONE, NULL, 0,
6077
14
        "Name of remote machine",HFILL
6078
14
      }
6079
14
    },
6080
14
    {
6081
14
      &hf_mswsp_msg_ConnectIn_UserName,
6082
14
      {
6083
14
        "User", "mswsp.ConnectIn.user",
6084
14
        FT_STRINGZ, BASE_NONE, NULL, 0,
6085
14
        "Name of remote user",HFILL
6086
14
      }
6087
14
    },
6088
14
    {
6089
14
      &hf_mswsp_msg_ConnectIn_PropSets_num,
6090
14
      {
6091
14
        "Num", "mswsp.ConnectIn.propset.num",
6092
14
        FT_UINT32, BASE_DEC, NULL, 0,
6093
14
        "Number of Property Sets", HFILL
6094
14
      }
6095
14
    },
6096
14
    {
6097
14
      &hf_mswsp_bool_options,
6098
14
      {
6099
14
        "uBooleanOptions", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions",
6100
14
        FT_UINT32, BASE_HEX, NULL, 0, "Boolean options", HFILL
6101
14
      }
6102
14
    },
6103
14
    {
6104
14
      &hf_mswsp_bool_options_cursor,
6105
14
      {
6106
14
        "Cursor", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.cursor", FT_UINT32,
6107
14
        BASE_HEX, VALS(cursor_vals), 0x00000007, "Cursor Type", HFILL
6108
14
      }
6109
14
    },
6110
14
    {
6111
14
      &hf_mswsp_bool_options_async,
6112
14
      {
6113
14
        "eAsynchronous", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.eAsynchronous",
6114
14
        FT_BOOLEAN, 32, NULL, eAsynchronous, "The client will not wait for execution completion", HFILL
6115
14
      }
6116
14
    },
6117
14
    {
6118
14
      &hf_mswsp_bool_options_firstrows,
6119
14
      {
6120
14
        "eFirstRows", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.eFirstRows",
6121
14
        FT_BOOLEAN, 32, NULL, eFirstRows, "Return the first rows encountered, not the best matches.", HFILL
6122
14
      }
6123
14
    },
6124
14
    {
6125
14
      &hf_mswsp_bool_options_holdrows,
6126
14
      {
6127
14
        "eHoldRows", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.eHoldRows",
6128
14
        FT_BOOLEAN, 32, NULL, eHoldRows, "The server MUST NOT discard rows until the client is done with a query.", HFILL
6129
14
      }
6130
14
    },
6131
14
    {
6132
14
      &hf_mswsp_bool_options_chaptered,
6133
14
      {
6134
14
        "eChaptered", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.eChaptered",
6135
14
        FT_BOOLEAN, 32, NULL, eChaptered, "The rowset supports chapters.", HFILL
6136
14
      }
6137
14
    },
6138
14
    {
6139
14
      &hf_mswsp_bool_options_useci,
6140
14
      {
6141
14
        "eUseCI", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.eUseCI",
6142
14
        FT_BOOLEAN, 32, NULL, eUseCI, "Use the inverted index to evaluate content restrictions even if it is out of date.", HFILL
6143
14
      }
6144
14
    },
6145
14
    {
6146
14
      &hf_mswsp_bool_options_defertrim,
6147
14
      {
6148
14
        "eDeferTrimming", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.eDeferTrimming",
6149
14
        FT_BOOLEAN, 32, NULL, eDeferTrimming, "Defer Non-indexed trimming operations like scoping or security checking which can be expensive.", HFILL
6150
14
      }
6151
14
    },
6152
14
    {
6153
14
      &hf_mswsp_bool_options_rowsetevents,
6154
14
      {
6155
14
        "eEnableRowsetEvents", "mswsp.RowSetProperties.CPMCreateQuery.uBooleanOptions.eEnableRowsetEvents",
6156
14
        FT_BOOLEAN, 32, NULL, eEnableRowsetEvents, "Enables storage of rowset events on the server side.", HFILL
6157
14
      }
6158
14
    },
6159
14
    {
6160
14
      &hf_mswsp_bool_options_dontcomputeexpensive,
6161
14
      {
6162
14
        "eDoNotComputeExpensiveProps", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.eDoNotComputeExpensiveProps",
6163
14
        FT_BOOLEAN, 32, NULL, eDoNotComputeExpensiveProps, "Prevents computation of expensive properties.", HFILL
6164
14
      }
6165
14
    },
6166
14
    {
6167
14
      &hf_mswsp_guid_time_low,
6168
14
      {
6169
14
        "time-low", "mswsp.guid.time_low",
6170
14
        FT_UINT32, BASE_HEX, NULL, 0, "time low value", HFILL
6171
14
      }
6172
14
    },
6173
14
    {
6174
14
      &hf_mswsp_guid_time_mid,
6175
14
      {
6176
14
        "time-mid", "mswsp.guid.time_mid",
6177
14
        FT_UINT16, BASE_HEX, NULL, 0, "time mid value", HFILL
6178
14
      }
6179
14
    },
6180
14
    {
6181
14
      &hf_mswsp_guid_time_high,
6182
14
      {
6183
14
        "time-high", "mswsp.guid.time_high",
6184
14
        FT_UINT16, BASE_HEX, NULL, 0, "time high value", HFILL
6185
14
      }
6186
14
    },
6187
14
    {
6188
14
      &hf_mswsp_guid_time_clock_hi,
6189
14
      {
6190
14
        "clock_seq_hi_and_reserved", "mswsp.guid.time_clock_high",
6191
14
        FT_UINT8, BASE_HEX, NULL, 0, "time clock high value", HFILL
6192
14
      }
6193
14
    },
6194
14
    {
6195
14
      &hf_mswsp_guid_time_clock_low,
6196
14
      {
6197
14
        "clock_seq_low", "mswsp.guid.time_clock_low",
6198
14
        FT_UINT8, BASE_HEX, NULL, 0, "time clock high low", HFILL
6199
14
      }
6200
14
    },
6201
14
    {
6202
14
      &hf_mswsp_guid_node,
6203
14
      {
6204
14
        "node", "mswsp.guid.node",
6205
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6206
14
      }
6207
14
    },
6208
14
    {
6209
14
      &hf_mswsp_lcid,
6210
14
      {
6211
14
        "lcid", "mswsp.lcid",
6212
14
        FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
6213
14
      }
6214
14
    },
6215
14
    {
6216
14
      &hf_mswsp_lcid_sortid,
6217
14
      {
6218
14
        "Sort ID", "mswsp.lcid.sortid",
6219
14
        FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6220
14
      }
6221
14
    },
6222
14
    {
6223
14
      &hf_mswsp_lcid_langid,
6224
14
      {
6225
14
        "Language ID", "mswsp.lcid.langid",
6226
14
        FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6227
14
      }
6228
14
    },
6229
14
    {
6230
14
      &hf_mswsp_cscort_column,
6231
14
      {
6232
14
        "column", "mswsp.csort.column",
6233
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6234
14
      }
6235
14
    },
6236
14
    {
6237
14
      &hf_mswsp_cscort_order,
6238
14
      {
6239
14
        "order", "mswsp.csort.order",
6240
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6241
14
      }
6242
14
    },
6243
14
    {
6244
14
      &hf_mswsp_cscort_individual,
6245
14
      {
6246
14
        "individual", "mswsp.csort.individual",
6247
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6248
14
      }
6249
14
    },
6250
14
    {
6251
14
      &hf_mswsp_cscortset_count,
6252
14
      {
6253
14
        "count", "mswsp.csortset.count",
6254
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6255
14
      }
6256
14
    },
6257
14
    {
6258
14
      &hf_mswsp_ctablecolumn_vtype,
6259
14
      {
6260
14
        "vType", "mswsp.ctablecolumn.vtype",
6261
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6262
14
      }
6263
14
    },
6264
14
    {
6265
14
      &hf_mswsp_ctablecolumn_aggused,
6266
14
      {
6267
14
        "AggregateUsed", "mswsp.ctablecolumn.aggused",
6268
14
        FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6269
14
      }
6270
14
    },
6271
14
    {
6272
14
      &hf_mswsp_ctablecolumn_aggtype,
6273
14
      {
6274
14
        "AggregateType", "mswsp.ctablecolumn.aggtype",
6275
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6276
14
      }
6277
14
    },
6278
14
    {
6279
14
      &hf_mswsp_ctablecolumn_valused,
6280
14
      {
6281
14
        "ValueUsed", "mswsp.ctablecolumn.valused",
6282
14
        FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6283
14
      }
6284
14
    },
6285
14
    {
6286
14
      &hf_mswsp_ctablecolumn_valoffset,
6287
14
      {
6288
14
        "ValueOffset", "mswsp.ctablecolumn.valoffset",
6289
14
        FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6290
14
      }
6291
14
    },
6292
14
    {
6293
14
      &hf_mswsp_ctablecolumn_valsize,
6294
14
      {
6295
14
        "ValueSize", "mswsp.ctablecolumn.valsize",
6296
14
        FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6297
14
      }
6298
14
    },
6299
14
    {
6300
14
      &hf_mswsp_ctablecolumn_statused,
6301
14
      {
6302
14
        "StatusUsed", "mswsp.ctablecolumn.statused",
6303
14
        FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6304
14
      }
6305
14
    },
6306
14
    {
6307
14
      &hf_mswsp_ctablecolumn_statoffset,
6308
14
      {
6309
14
        "StatusOffset", "mswsp.ctablecolumn.statoffset",
6310
14
        FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6311
14
      }
6312
14
    },
6313
14
    {
6314
14
      &hf_mswsp_ctablecolumn_lenused,
6315
14
      {
6316
14
        "LengthUsed", "mswsp.ctablecolumn.lenused",
6317
14
        FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6318
14
      }
6319
14
    },
6320
14
    {
6321
14
      &hf_mswsp_ctablecolumn_lenoffset,
6322
14
      {
6323
14
        "LengthOffset", "mswsp.ctablecolumn.lenoffset",
6324
14
        FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6325
14
      }
6326
14
    },
6327
14
    {
6328
14
      &hf_mswsp_cfullpropspec_kind,
6329
14
      {
6330
14
        "ulKind", "mswsp.cfullpropspec.kind",
6331
14
        FT_UINT32, BASE_DEC, VALS(KIND_vals), 0, NULL, HFILL
6332
14
      }
6333
14
    },
6334
14
    {
6335
14
      &hf_mswsp_cfullpropspec_propid,
6336
14
      {
6337
14
        "propid", "mswsp.cfullpropspec.propid",
6338
14
        FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
6339
14
      }
6340
14
    },
6341
14
    {
6342
14
      &hf_mswsp_cfullpropspec_propname,
6343
14
      {
6344
14
        "propname", "mswsp.cfullpropspec.propname",
6345
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6346
14
      }
6347
14
    },
6348
14
    {
6349
14
      &hf_mswsp_cproprestrict_relop,
6350
14
      {
6351
14
        "relop", "mswsp.cproprestrict.relop",
6352
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6353
14
      }
6354
14
    },
6355
14
    {
6356
14
      &hf_mswsp_ccoercerestrict_value,
6357
14
      {
6358
14
        "value", "mswsp.ccoercerestrict.value",
6359
14
        FT_FLOAT, BASE_NONE, NULL, 0, NULL, HFILL
6360
14
      }
6361
14
    },
6362
14
    {
6363
14
      &hf_mswsp_ccontentrestrict_cc,
6364
14
      {
6365
14
        "cc", "mswsp.ccontentrestrict.cc",
6366
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6367
14
      }
6368
14
    },
6369
14
    {
6370
14
      &hf_mswsp_ccontentrestrict_phrase,
6371
14
      {
6372
14
        "phrase", "mswsp.ccontentrestrict.phrase",
6373
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6374
14
      }
6375
14
    },
6376
14
    {
6377
14
      &hf_mswsp_ccontentrestrict_method,
6378
14
      {
6379
14
        "method", "mswsp.ccontentrestrict.method",
6380
14
        FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
6381
14
      }
6382
14
    },
6383
14
    {
6384
14
      &hf_mswsp_natlangrestrict_cc,
6385
14
      {
6386
14
        "cc", "mswsp.ccontentrestrict.cc",
6387
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6388
14
      }
6389
14
    },
6390
14
    {
6391
14
      &hf_mswsp_natlangrestrict_phrase,
6392
14
      {
6393
14
        "phrase", "mswsp.ccontentrestrict.phrase",
6394
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6395
14
      }
6396
14
    },
6397
14
    {
6398
14
      &hf_mswsp_crestrict_ultype,
6399
14
      {
6400
14
        "ulType", "mswsp.crestrict.ultype",
6401
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6402
14
      }
6403
14
    },
6404
14
    {
6405
14
      &hf_mswsp_crestrict_weight,
6406
14
      {
6407
14
        "Weight", "mswsp.crestrict.weight",
6408
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6409
14
      }
6410
14
    },
6411
14
    {
6412
14
      &hf_mswsp_crestrictarray_count,
6413
14
      {
6414
14
        "count", "mswsp.crestrictarray.count",
6415
14
        FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6416
14
      }
6417
14
    },
6418
14
    {
6419
14
      &hf_mswsp_crestrictarray_present,
6420
14
      {
6421
14
        "present", "mswsp.crestrictarray.present",
6422
14
        FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6423
14
      }
6424
14
    },
6425
14
    {
6426
14
      &hf_mswsp_cnoderestrict_cnode,
6427
14
      {
6428
14
        "Weight", "mswsp.cnoderestrict.cnode",
6429
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6430
14
      }
6431
14
    },
6432
14
    {
6433
14
      &hf_mswsp_cbasestorvariant_vtype,
6434
14
      {
6435
14
        "vType", "mswsp.cbasestorvariant.vtype",
6436
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6437
14
      }
6438
14
    },
6439
14
    {
6440
14
      &hf_mswsp_cbasestorvariant_vvalue,
6441
14
      {
6442
14
        "vValue", "mswsp.cbasestorvariant.vvalue",
6443
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6444
14
      }
6445
14
    },
6446
14
    {
6447
14
      &hf_mswsp_cbasestorvariant_vdata1,
6448
14
      {
6449
14
        "vData1", "mswsp.cbasestorvariant.vdata1",
6450
14
        FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6451
14
      }
6452
14
    },
6453
14
    {
6454
14
      &hf_mswsp_cbasestorvariant_vdata2,
6455
14
      {
6456
14
        "vData2", "mswsp.cbasestorvariant.vdata2",
6457
14
        FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6458
14
      }
6459
14
    },
6460
14
    {
6461
14
      &hf_mswsp_cbasestorvariant_num,
6462
14
      {
6463
14
        "num", "mswsp.cbasestorvariant.num",
6464
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6465
14
      }
6466
14
    },
6467
14
    {
6468
14
      &hf_mswsp_cbasestorvariant_cdims,
6469
14
      {
6470
14
        "cDims", "mswsp.cbasestorvariant.cdims",
6471
14
        FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
6472
14
      }
6473
14
    },
6474
14
    {
6475
14
      &hf_mswsp_cbasestorvariant_ffeatures,
6476
14
      {
6477
14
        "fFeatures", "mswsp.cbasestorvariant.ffeatures",
6478
14
        FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL
6479
14
      }
6480
14
    },
6481
14
    {
6482
14
      &hf_mswsp_cbasestorvariant_cbelements,
6483
14
      {
6484
14
        "cbElements", "mswsp.cbasestorvariant.cbelements",
6485
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6486
14
      }
6487
14
    },
6488
14
    {
6489
14
      &hf_mswsp_cbasestorvariant_rgsabound,
6490
14
      {
6491
14
        "Rgsabound", "mswsp.cbasestorvariant.rgsabound",
6492
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6493
14
      }
6494
14
    },
6495
14
    {
6496
14
      &hf_mswsp_cdbcolid_ekind,
6497
14
      {
6498
14
        "eKind", "mswsp.cdbcolid.ekind",
6499
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6500
14
      }
6501
14
    },
6502
14
    {
6503
14
      &hf_mswsp_cdbcolid_ulid,
6504
14
      {
6505
14
        "ulId", "mswsp.cdbcolid.ulid",
6506
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6507
14
      }
6508
14
    },
6509
14
    {
6510
14
      &hf_mswsp_cdbcolid_vstring,
6511
14
      {
6512
14
        "vString", "mswsp.cdbcolid.vstring",
6513
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6514
14
      }
6515
14
    },
6516
14
    {
6517
14
      &hf_mswsp_cdbprop_id,
6518
14
      {
6519
14
        "Id", "mswsp.cdbprop.id",
6520
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6521
14
      }
6522
14
    },
6523
14
    {
6524
14
      &hf_mswsp_cdbprop_options,
6525
14
      {
6526
14
        "Options", "mswsp.cdbprop.options",
6527
14
        FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
6528
14
      }
6529
14
    },
6530
14
    {
6531
14
      &hf_mswsp_cdbprop_status,
6532
14
      {
6533
14
        "Status", "mswsp.cdbprop.status",
6534
14
        FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
6535
14
      }
6536
14
    },
6537
14
    {
6538
14
      &hf_mswsp_cdbpropset_cprops,
6539
14
      {
6540
14
        "cProperties", "mswsp.cdbpropset.cprops",
6541
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6542
14
      }
6543
14
    },
6544
14
    {
6545
14
      &hf_mswsp_rangeboundry_ultype,
6546
14
      {
6547
14
        "ulType", "mswsp.rangeboundry.ultype",
6548
14
        FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
6549
14
      }
6550
14
    },
6551
14
    {
6552
14
      &hf_mswsp_rangeboundry_labelpresent,
6553
14
      {
6554
14
        "labelPresent", "mswsp.rangeboundry.labelpresent",
6555
14
        FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL
6556
14
      }
6557
14
    },
6558
14
    {
6559
14
      &hf_mswsp_rangeboundry_cclabel,
6560
14
      {
6561
14
        "ccLabel", "mswsp.rangeboundry.cclabel",
6562
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6563
14
      }
6564
14
    },
6565
14
    {
6566
14
      &hf_mswsp_rangeboundry_label,
6567
14
      {
6568
14
        "Label", "mswsp.rangeboundry.label",
6569
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6570
14
      }
6571
14
    },
6572
14
    {
6573
14
      &hf_mswsp_crangecategspec_crange,
6574
14
      {
6575
14
        "cRange", "mswsp.crangecategspec.crange",
6576
14
        FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
6577
14
      }
6578
14
    },
6579
14
    {
6580
14
      &hf_mswsp_ccategspec_type,
6581
14
      {
6582
14
        "type", "mswsp.ccategspec.type",
6583
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6584
14
      }
6585
14
    },
6586
14
    {
6587
14
      &hf_mswsp_caggregspec_type,
6588
14
      {
6589
14
        "type", "mswsp.caggregspec.type",
6590
14
        FT_UINT8, BASE_DEC, VALS(DBAGGTTYPE), 0, NULL, HFILL
6591
14
      }
6592
14
    },
6593
14
    {
6594
14
      &hf_mswsp_caggregspec_ccalias,
6595
14
      {
6596
14
        "ccAlias", "mswsp.caggregspec.ccalias",
6597
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6598
14
      }
6599
14
    },
6600
14
    {
6601
14
      &hf_mswsp_caggregspec_alias,
6602
14
      {
6603
14
        "Alias", "mswsp.caggregspec.alias",
6604
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6605
14
      }
6606
14
    },
6607
14
    {
6608
14
      &hf_mswsp_caggregspec_idcolumn,
6609
14
      {
6610
14
        "idColumn", "mswsp.caggregspec.idcolumn",
6611
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6612
14
      }
6613
14
    },
6614
14
    {
6615
14
      &hf_mswsp_caggregspec_ulmaxnumtoreturn,
6616
14
      {
6617
14
        "ulMaxNumToReturn",
6618
14
        "mswsp.caggregspec.ulmaxnumtoreturn",
6619
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6620
14
      }
6621
14
    },
6622
14
    {
6623
14
      &hf_mswsp_caggregspec_idrepresentative,
6624
14
      {
6625
14
        "idRepresentative",
6626
14
        "mswsp.caggregspec.idrepresentative",
6627
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6628
14
      }
6629
14
    },
6630
14
    {
6631
14
      &hf_mswsp_caggregset_count,
6632
14
      {
6633
14
        "count", "mswsp.caggregset.count",
6634
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6635
14
      }
6636
14
    },
6637
14
    {
6638
14
      &hf_mswsp_caggregsortkey_order,
6639
14
      {
6640
14
        "order", "mswsp.caggregsortkey.order",
6641
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6642
14
      }
6643
14
    },
6644
14
    {
6645
14
      &hf_mswsp_csortaggregset_count,
6646
14
      {
6647
14
        "count", "mswsp.csortaggregset.count",
6648
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6649
14
      }
6650
14
    },
6651
14
    {
6652
14
      &hf_mswsp_cingroupsortaggregset_type,
6653
14
      {
6654
14
        "Type", "mswsp.cingroupsortaggregset.type",
6655
14
        FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL
6656
14
      }
6657
14
    },
6658
14
    {
6659
14
      &hf_mswsp_cingroupsortaggregsets_count,
6660
14
      {
6661
14
        "count", "mswsp.cingroupsortaggregsets.count",
6662
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6663
14
      }
6664
14
    },
6665
14
    {
6666
14
      &hf_mswsp_categorizationspec_cmaxres,
6667
14
      {
6668
14
        "cMaxResults", "mswsp.categorizationspec.cmaxres",
6669
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6670
14
      }
6671
14
    },
6672
14
    {
6673
14
      &hf_mswsp_crowsetprops_ulmaxopenrows,
6674
14
      {
6675
14
        "ulMaxOpenRows (ignored)", "mswsp.crowsetprops.ulmaxopenrows",
6676
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6677
14
      }
6678
14
    },
6679
14
    {
6680
14
      &hf_mswsp_crowsetprops_ulmemusage,
6681
14
      {
6682
14
        "ulMemUsage (ignored)", "mswsp.crowsetprops.ulmemusage",
6683
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6684
14
      }
6685
14
    },
6686
14
    {
6687
14
      &hf_mswsp_crowsetprops_cmaxresults,
6688
14
      {
6689
14
        "cMaxResults", "mswsp.crowsetprops.cmaxresults",
6690
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6691
14
      }
6692
14
    },
6693
14
    {
6694
14
      &hf_mswsp_crowsetprops_ccmdtimeout,
6695
14
      {
6696
14
        "cCmdTimeout", "mswsp.crowsetprops.ccmdtimeout",
6697
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6698
14
      }
6699
14
    },
6700
14
    {
6701
14
      &hf_mswsp_cpidmapper_count,
6702
14
      {
6703
14
        "count", "mswsp.cpidmapper.count",
6704
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6705
14
      }
6706
14
    },
6707
14
    {
6708
14
      &hf_mswsp_ccolumngroup_count,
6709
14
      {
6710
14
        "count", "mswsp.ccolumngroup.count",
6711
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6712
14
      }
6713
14
    },
6714
14
    {
6715
14
      &hf_mswsp_ccolumngroup_grouppid,
6716
14
      {
6717
14
        "groupPid", "mswsp.ccolumngroup.grouppid",
6718
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6719
14
      }
6720
14
    },
6721
14
    {
6722
14
      &hf_mswsp_ccolumngroup_pid,
6723
14
      {
6724
14
        "pid", "mswsp.ccolumngroup.pid",
6725
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6726
14
      }
6727
14
    },
6728
14
    {
6729
14
      &hf_mswsp_ccolumngrouparray_count,
6730
14
      {
6731
14
        "count", "mswsp.ccolumngrouparray.count",
6732
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6733
14
      }
6734
14
    },
6735
14
    {
6736
14
      &hf_mswsp_int32array_value,
6737
14
      {
6738
14
        "value", "mswsp.int32array.value",
6739
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6740
14
      }
6741
14
    },
6742
14
    {
6743
14
      &hf_mswsp_crowseeknext_cskip,
6744
14
      {
6745
14
        "cskip", "mswsp.crowseeknext.cskip",
6746
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6747
14
      }
6748
14
    },
6749
14
    {
6750
14
      &hf_mswsp_crowseekat_bmkoffset,
6751
14
      {
6752
14
        "bmkoffset", "mswsp.crowseekat.bmkoffset",
6753
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6754
14
      }
6755
14
    },
6756
14
    {
6757
14
      &hf_mswsp_crowseekat_skip,
6758
14
      {
6759
14
        "skip", "mswsp.crowseekat.skip",
6760
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6761
14
      }
6762
14
    },
6763
14
    {
6764
14
      &hf_mswsp_crowseekat_hregion,
6765
14
      {
6766
14
        "hregion", "mswsp.crowseekat.hregion",
6767
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6768
14
      }
6769
14
    },
6770
14
    {
6771
14
      &hf_mswsp_crowseekatratio_ulnumerator,
6772
14
      {
6773
14
        "ulnumerator", "mswsp.crowseekatratio.ulnumerator",
6774
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6775
14
      }
6776
14
    },
6777
14
    {
6778
14
      &hf_mswsp_crowseekatratio_uldenominator,
6779
14
      {
6780
14
        "uldenominator", "mswsp.crowseekatratio.uldenominator",
6781
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6782
14
      }
6783
14
    },
6784
14
    {
6785
14
      &hf_mswsp_crowseekatratio_hregion,
6786
14
      {
6787
14
        "hregion", "mswsp.crowseekatratio.hregion",
6788
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6789
14
      }
6790
14
    },
6791
14
    {
6792
14
      &hf_mswsp_crowseekbybookmark_cbookmarks,
6793
14
      {
6794
14
        "cbookmarks", "mswsp.crowseekbybookmark.cbookmarks",
6795
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6796
14
      }
6797
14
    },
6798
14
    {
6799
14
      &hf_mswsp_crowseekbybookmark_maxret,
6800
14
      {
6801
14
        "maxret", "mswsp.crowseekbybookmark.maxret",
6802
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6803
14
      }
6804
14
    },
6805
14
    {
6806
14
      &hf_mswsp_crowvariantinfo_count64,
6807
14
      {
6808
14
        "count", "mswsp.crowvariantinfo.count64",
6809
14
        FT_UINT64, BASE_DEC, NULL, 0, NULL, HFILL
6810
14
      }
6811
14
    },
6812
14
    {
6813
14
      &hf_mswsp_arrayvector_address64,
6814
14
      {
6815
14
        "address of array", "mswsp.arrayvector.address64",
6816
14
        FT_UINT64, BASE_HEX, NULL, 0, NULL, HFILL
6817
14
      }
6818
14
    },
6819
14
    {
6820
14
      &hf_mswsp_crowvariantinfo_count32,
6821
14
      {
6822
14
        "count", "mswsp.crowvariantinfo.count32",
6823
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6824
14
      }
6825
14
    },
6826
14
    {
6827
14
      &hf_mswsp_arrayvector_address32,
6828
14
      {
6829
14
        "address of array", "mswsp.arrayvector.address",
6830
14
        FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
6831
14
      }
6832
14
    },
6833
14
    {
6834
14
      &hf_mswsp_rowvariant_item_address64,
6835
14
      {
6836
14
        "address", "mswsp.rowvariant.item.address64",
6837
14
        FT_UINT64, BASE_HEX, NULL, 0, NULL, HFILL
6838
14
      }
6839
14
    },
6840
14
    {
6841
14
      &hf_mswsp_rowvariant_item_address32,
6842
14
      {
6843
14
        "address", "mswsp.rowvariant.item.address32",
6844
14
        FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
6845
14
      }
6846
14
    },
6847
14
    {
6848
14
      &hf_mswsp_rowvariant_item_value,
6849
14
      {
6850
14
        "value", "mswsp.rowvariant.item.value",
6851
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6852
14
      }
6853
14
    },
6854
14
    {
6855
14
      &hf_mswsp_rowvariant_vtype,
6856
14
      {
6857
14
        "vtype", "mswsp.rowvariant.vtype",
6858
14
        FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL
6859
14
      }
6860
14
    },
6861
14
    {
6862
14
      &hf_mswsp_rowvariant_reserved1,
6863
14
      {
6864
14
        "reserved1", "mswsp.rowvariant.reserved1",
6865
14
        FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL
6866
14
      }
6867
14
    },
6868
14
    {
6869
14
      &hf_mswsp_rowvariant_reserved2,
6870
14
      {
6871
14
        "reserved2", "mswsp.rowvariant.reserved2",
6872
14
        FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
6873
14
      }
6874
14
    },
6875
14
    {
6876
14
      &hf_mswsp_ctablecolumn_status,
6877
14
      {
6878
14
        "status", "mswsp.ctablecolumn.name",
6879
14
        FT_UINT8, BASE_HEX, VALS(STATUS), 0, NULL, HFILL
6880
14
      }
6881
14
    },
6882
14
    {
6883
14
      &hf_mswsp_ctablecolumn_length,
6884
14
      {
6885
14
        "length", "mswsp.ctablecolumn.length",
6886
14
        FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
6887
14
      }
6888
14
    },
6889
14
    {
6890
14
      &hf_mswsp_msg_cpmcreatequery_size,
6891
14
      {
6892
14
        "size", "mswsp.cpmcreatequery.size",
6893
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6894
14
      }
6895
14
    },
6896
14
    {
6897
14
      &hf_mswsp_msg_cpmcreatequery_ccolumnsetpresent,
6898
14
      {
6899
14
        "CColumnSetPresent", "mswsp.cpmcreatequery.ccolumnsetpresent",
6900
14
        FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL
6901
14
      }
6902
14
    },
6903
14
    {
6904
14
      &hf_mswsp_msg_cpmcreatequery_crestrictionpresent,
6905
14
      {
6906
14
        "CRestrictionPresent", "mswsp.cpmcreatequery.crestrictionpresent",
6907
14
        FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL
6908
14
      }
6909
14
    },
6910
14
    {
6911
14
      &hf_mswsp_msg_cpmcreatequery_csortpresent,
6912
14
      {
6913
14
        "CSortPresent", "mswsp.cpmcreatequery.csortpresent",
6914
14
        FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL
6915
14
      }
6916
14
    },
6917
14
    {
6918
14
      &hf_mswsp_msg_cpmcreatequery_ccategpresent,
6919
14
      {
6920
14
        "CCategorizationSetPresent", "mswsp.cpmcreatequery.ccategpresent",
6921
14
        FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL
6922
14
      }
6923
14
    },
6924
14
    {
6925
14
      &hf_mswsp_msg_cpmcreatequery_ccateg_count,
6926
14
      {
6927
14
        "count", "mswsp.cpmcreatequery.ccateg.count",
6928
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6929
14
      }
6930
14
    },
6931
14
    {
6932
14
      &hf_mswsp_msg_cpmcreatequery_trueseq,
6933
14
      {
6934
14
        "TrueSequential", "mswsp.cpmcreatequery.trueseq",
6935
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6936
14
      }
6937
14
    },
6938
14
    {
6939
14
      &hf_mswsp_msg_cpmcreatequery_workid,
6940
14
      {
6941
14
        "WorkId", "mswsp.cpmcreatequery.workid",
6942
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6943
14
      }
6944
14
    },
6945
14
    {
6946
14
      &hf_mswsp_msg_cpmcreatequery_cursors,
6947
14
      {
6948
14
        "Cursors", "mswsp.cpmcreatequery.cursors",
6949
14
        FT_BYTES, SEP_SPACE, NULL, 0, NULL, HFILL
6950
14
      }
6951
14
    },
6952
14
    {
6953
14
      &hf_mswsp_msg_cpmgetrows_hcursor,
6954
14
      {
6955
14
        "hCursor", "mswsp.msg.cpmgetrows.hcursor",
6956
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6957
14
      }
6958
14
    },
6959
14
    {
6960
14
      &hf_mswsp_msg_cpmgetrows_rowstotransfer,
6961
14
      {
6962
14
        "cRowsToTransfer", "mswsp.msg.cpmgetrows.rowstotransfer",
6963
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6964
14
      }
6965
14
    },
6966
14
    {
6967
14
      &hf_mswsp_msg_cpmgetrows_rowwidth,
6968
14
      {
6969
14
        "cbRowWidth", "mswsp.msg.cpmgetrows.rowswidth",
6970
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6971
14
      }
6972
14
    },
6973
14
    {
6974
14
      &hf_mswsp_msg_cpmgetrows_cbseek,
6975
14
      {
6976
14
        "cbSeek", "mswsp.msg.cpmgetrows.cbseek",
6977
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6978
14
      }
6979
14
    },
6980
14
    {
6981
14
      &hf_mswsp_msg_cpmgetrows_cbreserved,
6982
14
      {
6983
14
        "cbReserved", "mswsp.msg.cpmgetrows.cbreserved",
6984
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6985
14
      }
6986
14
    },
6987
14
    {
6988
14
      &hf_mswsp_msg_cpmgetrows_cbreadbuffer,
6989
14
      {
6990
14
        "cbReadBuffer", "mswsp.msg.cpmgetrows.cbreadbuffer",
6991
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
6992
14
      }
6993
14
    },
6994
14
    {
6995
14
      &hf_mswsp_msg_cpmgetrows_ulclientbase,
6996
14
      {
6997
14
        "ulClientBase", "mswsp.msg.cpmgetrows.ulclientbase",
6998
14
        FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
6999
14
      }
7000
14
    },
7001
14
    {
7002
14
      &hf_mswsp_msg_cpmgetrows_fbwdfetch,
7003
14
      {
7004
14
        "fBwdFetch", "mswsp.msg.cpmgetrows.fbwdfetch",
7005
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7006
14
      }
7007
14
    },
7008
14
    {
7009
14
      &hf_mswsp_msg_cpmgetrows_etype,
7010
14
      {
7011
14
        "eType", "mswsp.msg.cpmgetrows.etype",
7012
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7013
14
      }
7014
14
    },
7015
14
    {
7016
14
      &hf_mswsp_msg_cpmgetrows_chapt,
7017
14
      {
7018
14
        "chapt", "mswsp.msg.cpmgetrows.chapt",
7019
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7020
14
      }
7021
14
    },
7022
14
    {
7023
14
      &hf_mswsp_msg_cpmgetrows_crowsreturned,
7024
14
      {
7025
14
        "cRowsReturned", "mswsp.msg.cpmgetrows.crowsreturned",
7026
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7027
14
      }
7028
14
    },
7029
14
    {
7030
14
      &hf_mswsp_msg_cpmratiofinished_hcursor,
7031
14
      {
7032
14
        "hCursor", "mswsp.msg.cpmratiofinished_hcursor",
7033
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7034
14
      }
7035
14
    },
7036
14
    {
7037
14
      &hf_mswsp_msg_cpmratiofinished_fquick,
7038
14
      {
7039
14
        "fQuick", "mswsp.msg.cpmratiofinished_fquick",
7040
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7041
14
      }
7042
14
    },
7043
14
    {
7044
14
      &hf_mswsp_msg_cpmratiofinished_ulnumerator,
7045
14
      {
7046
14
        "ulNumerator", "mswsp.msg.cpmratiofinished_ulnumerator",
7047
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7048
14
      }
7049
14
    },
7050
14
    {
7051
14
      &hf_mswsp_msg_cpmratiofinished_uldenominator,
7052
14
      {
7053
14
        "ulDenominator", "mswsp.msg.cpmratiofinished_uldenominator",
7054
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7055
14
      }
7056
14
    },
7057
14
    {
7058
14
      &hf_mswsp_msg_cpmratiofinished_crows,
7059
14
      {
7060
14
        "cRows", "mswsp.msg.cpmratiofinished_crows",
7061
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7062
14
      }
7063
14
    },
7064
14
    {
7065
14
      &hf_mswsp_msg_cpmratiofinished_fnewrows,
7066
14
      {
7067
14
        "fNewRows", "mswsp.msg.cpmratiofinished_fnewrows",
7068
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7069
14
      }
7070
14
    },
7071
14
    {
7072
14
      &hf_mswsp_msg_cpmcomparebmk_hcursor,
7073
14
      {
7074
14
        "hCursor", "mswsp.msg.cpmcomparebmk.hcursor",
7075
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7076
14
      }
7077
14
    },
7078
14
    {
7079
14
      &hf_mswsp_msg_cpmcomparebmk_chapt,
7080
14
      {
7081
14
        "chapt", "mswsp.msg.cpmcomparebmk.chapt",
7082
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7083
14
      }
7084
14
    },
7085
14
    {
7086
14
      &hf_mswsp_msg_cpmcomparebmk_bmkfirst,
7087
14
      {
7088
14
        "bmkFirst", "mswsp.msg.cpmcomparebmk.bmkfirst",
7089
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7090
14
      }
7091
14
    },
7092
14
    {
7093
14
      &hf_mswsp_msg_cpmcomparebmk_bmksecond,
7094
14
      {
7095
14
        "bmkSecond", "mswsp.msg.cpmcomparebmk.bmksecond",
7096
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7097
14
      }
7098
14
    },
7099
14
    {
7100
14
      &hf_mswsp_msg_cpmcomparebmk_dwcomparison,
7101
14
      {
7102
14
        "dwComparison", "mswsp.msg.cpmcomparebmk.dwcomparison",
7103
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7104
14
      }
7105
14
    },
7106
14
    {
7107
14
      &hf_mswsp_msg_cpmgetapproxpos_hcursor,
7108
14
      {
7109
14
        "hCursor", "mswsp.msg.cpmgetapproxpos.hcursor",
7110
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7111
14
      }
7112
14
    },
7113
14
    {
7114
14
      &hf_mswsp_msg_cpmgetapproxpos_chapt,
7115
14
      {
7116
14
        "chapt", "mswsp.msg.cpmgetapproxpos.chapt",
7117
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7118
14
      }
7119
14
    },
7120
14
    {
7121
14
      &hf_mswsp_msg_cpmgetapproxpos_bmk,
7122
14
      {
7123
14
        "bmk", "mswsp.msg.cpmgetapproxpos.bmk",
7124
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7125
14
      }
7126
14
    },
7127
14
    {
7128
14
      &hf_mswsp_msg_cpmgetapproxpos_numerator,
7129
14
      {
7130
14
        "numerator", "mswsp.msg.cpmgetapproxpos.numerator",
7131
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7132
14
      }
7133
14
    },
7134
14
    {
7135
14
      &hf_mswsp_msg_cpmgetapproxpos_denominator,
7136
14
      {
7137
14
        "denominator", "mswsp.msg.cpmgetapproxpos.denominator",
7138
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7139
14
      }
7140
14
    },
7141
14
    {
7142
14
      &hf_mswsp_msg_cpmsetbinding_hcursor,
7143
14
      {
7144
14
        "hCursor", "mswsp.msg.cpmsetbinding.hcursor",
7145
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7146
14
      }
7147
14
    },
7148
14
    {
7149
14
      &hf_mswsp_msg_cpmsetbinding_cbrow,
7150
14
      {
7151
14
        "cBrow", "mswsp.msg.cpmsetbinding.cbrow",
7152
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7153
14
      }
7154
14
    },
7155
14
    {
7156
14
      &hf_mswsp_msg_cpmsetbinding_desc,
7157
14
      {
7158
14
        "cbBindingDesc", "mswsp.msg.cpmsetbinding.desc",
7159
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7160
14
      }
7161
14
    },
7162
14
    {
7163
14
      &hf_mswsp_msg_cpmsetbinding_dummy,
7164
14
      {
7165
14
        "dummy", "mswsp.msg.cpmsetbinding.dummy",
7166
14
        FT_UINT32, BASE_HEX, NULL, 0, NULL, HFILL
7167
14
      }
7168
14
    },
7169
14
    {
7170
14
      &hf_mswsp_msg_cpmsetbinding_ccolumns,
7171
14
      {
7172
14
        "cColumns", "mswsp.msg.cpmsetbinding.ccolumns",
7173
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7174
14
      }
7175
14
    },
7176
14
    {
7177
14
      &hf_mswsp_msg_cpmsetbinding_acolumns,
7178
14
      {
7179
14
        "aColumns", "mswsp.msg.cpmsetbinding.acolumns",
7180
14
        FT_BYTES, SEP_DOT, NULL, 0, NULL, HFILL
7181
14
      }
7182
14
    },
7183
14
    {
7184
14
      &hf_mswsp_msg_cpmsendnotify_watchnotify,
7185
14
      {
7186
14
        "watchNotify", "mswsp.msg.cpmsendnotify.watchnotify",
7187
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7188
14
      }
7189
14
    },
7190
14
    {
7191
14
      &hf_mswsp_msg_cpmgetquerystatus_hcursor,
7192
14
      {
7193
14
        "hCursor", "mswsp.msg.cpmquerystatus.hcursor",
7194
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7195
14
      }
7196
14
    },
7197
14
    {
7198
14
      &hf_mswsp_msg_cpmgetquerystatus_qstatus,
7199
14
      {
7200
14
        "QStatus", "mswsp.msg.cpmquerystatus.qstatus",
7201
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7202
14
      }
7203
14
    },
7204
14
    {
7205
14
      &hf_mswsp_msg_cpmcistate_cbstruct,
7206
14
      {
7207
14
        "cbStruct", "mswsp.msg.cpmcistate.cbstruct",
7208
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7209
14
      }
7210
14
    },
7211
14
    {
7212
14
      &hf_mswsp_msg_cpmcistate_cwordlist,
7213
14
      {
7214
14
        "cbWordList", "mswsp.msg.cpmcistate.cbwordlist",
7215
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7216
14
      }
7217
14
    },
7218
14
    {
7219
14
      &hf_mswsp_msg_cpmcistate_cpersistindex,
7220
14
      {
7221
14
        "cbPersistentIndex", "mswsp.msg.cpmcistate.cbpersistindex",
7222
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7223
14
      }
7224
14
    },
7225
14
    {
7226
14
      &hf_mswsp_msg_cpmcistate_cqueries,
7227
14
      {
7228
14
        "cQueries", "mswsp.msg.cpmcistate.cqueries",
7229
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7230
14
      }
7231
14
    },
7232
14
    {
7233
14
      &hf_mswsp_msg_cpmcistate_cfreshtest,
7234
14
      {
7235
14
        "cFreshTest", "mswsp.msg.cpmcistate.cfreshtest",
7236
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7237
14
      }
7238
14
    },
7239
14
    {
7240
14
      &hf_mswsp_msg_cpmcistate_dwmergeprogress,
7241
14
      {
7242
14
        "dwMergeProgress", "mswsp.msg.cpmcistate.dwmergeprogress",
7243
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7244
14
      }
7245
14
    },
7246
14
    {
7247
14
      &hf_mswsp_msg_cpmcistate_estate,
7248
14
      {
7249
14
        "eState", "mswsp.msg.cpmcistate.estate",
7250
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7251
14
      }
7252
14
    },
7253
14
    {
7254
14
      &hf_mswsp_msg_cpmcistate_cfiltereddocs,
7255
14
      {
7256
14
        "cFilteredDocuments", "mswsp.msg.cpmcistate.cfiltereddocs",
7257
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7258
14
      }
7259
14
    },
7260
14
    {
7261
14
      &hf_mswsp_msg_cpmcistate_ctotaldocs,
7262
14
      {
7263
14
        "cTotalDocuments", "mswsp.msg.cpmcistate.ctotaldocs",
7264
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7265
14
      }
7266
14
    },
7267
14
    {
7268
14
      &hf_mswsp_msg_cpmcistate_cpendingscans,
7269
14
      {
7270
14
        "cPendingScans", "mswsp.msg.cpmcistate.cpendingscans",
7271
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7272
14
      }
7273
14
    },
7274
14
    {
7275
14
      &hf_mswsp_msg_cpmcistate_dwindexsize,
7276
14
      {
7277
14
        "dwIndexSize", "mswsp.msg.cpmcistate.dwindexsize",
7278
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7279
14
      }
7280
14
    },
7281
14
    {
7282
14
      &hf_mswsp_msg_cpmcistate_cuniquekeys,
7283
14
      {
7284
14
        "cUniqueKeys", "mswsp.msg.cpmcistate.cuniquekeys",
7285
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7286
14
      }
7287
14
    },
7288
14
    {
7289
14
      &hf_mswsp_msg_cpmcistate_csecqdocuments,
7290
14
      {
7291
14
        "cSecQDocuments", "mswsp.msg.cpmcistate.csecqdocuments",
7292
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7293
14
      }
7294
14
    },
7295
14
    {
7296
14
      &hf_mswsp_msg_cpmcistate_dwpropcachesize,
7297
14
      {
7298
14
        "dwPropCacheSize", "mswsp.msg.cpmcistate.dwpropcachesize",
7299
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7300
14
      }
7301
14
    },
7302
14
    {
7303
14
      &hf_mswsp_msg_cpmfetchvalue_wid,
7304
14
      {
7305
14
        "wid", "mswsp.msg.cpmfetchvalue.wid",
7306
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7307
14
      }
7308
14
    },
7309
14
    {
7310
14
      &hf_mswsp_msg_cpmfetchvalue_cbsofar,
7311
14
      {
7312
14
        "cbSoFar", "mswsp.msg.cpmfetchvalue.cbsofar",
7313
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7314
14
      }
7315
14
    },
7316
14
    {
7317
14
      &hf_mswsp_msg_cpmfetchvalue_cbpropspec,
7318
14
      {
7319
14
        "cbPropSpec", "mswsp.msg.cpmfetchvalue.cbpropspec",
7320
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7321
14
      }
7322
14
    },
7323
14
    {
7324
14
      &hf_mswsp_msg_cpmfetchvalue_cbchunk,
7325
14
      {
7326
14
        "cbChunk", "mswsp.msg.cpmfetchvalue.chunk",
7327
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7328
14
      }
7329
14
    },
7330
14
    {
7331
14
      &hf_mswsp_msg_cpmfetchvalue_cbvalue,
7332
14
      {
7333
14
        "cbValue", "mswsp.msg.cpmfetchvalue.cbvalue",
7334
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7335
14
      }
7336
14
    },
7337
14
    {
7338
14
      &hf_mswsp_msg_cpmfetchvalue_fmoreexists,
7339
14
      {
7340
14
        "fMoreExists", "mswsp.msg.cpmfetchvalue.fmoreexists",
7341
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7342
14
      }
7343
14
    },
7344
14
    {
7345
14
      &hf_mswsp_msg_cpmfetchvalue_fvalueexists,
7346
14
      {
7347
14
        "fValueExists", "mswsp.msg.cpmfetchvalue.fvalueexists",
7348
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7349
14
      }
7350
14
    },
7351
14
    {
7352
14
      &hf_mswsp_msg_cpmfetchvalue_vvalue,
7353
14
      {
7354
14
        "vvalue", "mswsp.msg.cpmfetchvalue.vvalue",
7355
14
        FT_BYTES, SEP_SPACE, NULL, 0, NULL, HFILL
7356
14
      }
7357
14
    },
7358
14
    {
7359
14
      &hf_mswsp_msg_cpmquerystatusex_qstatus,
7360
14
      {
7361
14
        "qStatus", "mswsp.msg.cpmquerystatusex.qstatus",
7362
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7363
14
      }
7364
14
    },
7365
14
    {
7366
14
      &hf_mswsp_msg_cpmquerystatusex_hcursor,
7367
14
      {
7368
14
        "hCursor", "mswsp.msg.cpmquerystatusex.hcursor",
7369
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7370
14
      }
7371
14
    },
7372
14
    {
7373
14
      &hf_mswsp_msg_cpmquerystatusex_bmk,
7374
14
      {
7375
14
        "bmk", "mswsp.msg.cpmquerystatusex.bmk",
7376
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7377
14
      }
7378
14
    },
7379
14
    {
7380
14
      &hf_mswsp_msg_cpmquerystatusex_cfiltereddocs,
7381
14
      {
7382
14
        "cFilteredDocuments", "mswsp.msg.cpmquerystatusex.cfiltereddocs",
7383
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7384
14
      }
7385
14
    },
7386
14
    {
7387
14
      &hf_mswsp_msg_cpmquerystatusex_cdocstofilter,
7388
14
      {
7389
14
        "cDocumentsToFilter", "mswsp.msg.cpmquerystatusex.cdocstofilter",
7390
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7391
14
      }
7392
14
    },
7393
14
    {
7394
14
      &hf_mswsp_msg_cpmquerystatusex_dwratiodenom,
7395
14
      {
7396
14
        "dwRatioFinishedDenominator", "mswsp.msg.cpmquerystatusex.dwratiodenom",
7397
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7398
14
      }
7399
14
    },
7400
14
    {
7401
14
      &hf_mswsp_msg_cpmquerystatusex_dwrationumer,
7402
14
      {
7403
14
        "dwRatioFinishedNumerator", "mswsp.msg.cpmquerystatusex.dwrationumer",
7404
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7405
14
      }
7406
14
    },
7407
14
    {
7408
14
      &hf_mswsp_msg_cpmquerystatusex_irowbmk,
7409
14
      {
7410
14
        "iRowBmk", "mswsp.msg.cpmquerystatusex.irowbmk",
7411
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7412
14
      }
7413
14
    },
7414
14
    {
7415
14
      &hf_mswsp_msg_cpmquerystatusex_crowstotal,
7416
14
      {
7417
14
        "cRowsTotal", "mswsp.msg.cpmquerystatusex.crowstotal",
7418
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7419
14
      }
7420
14
    },
7421
14
    {
7422
14
      &hf_mswsp_msg_cpmquerystatusex_maxrank,
7423
14
      {
7424
14
        "maxRank", "mswsp.msg.cpmquerystatusex.maxrank",
7425
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7426
14
      }
7427
14
    },
7428
14
    {
7429
14
      &hf_mswsp_msg_cpmquerystatusex_cresultsfound,
7430
14
      {
7431
14
        "cResultsFound", "mswsp.msg.cpmquerystatusex.cresultsfound",
7432
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7433
14
      }
7434
14
    },
7435
14
    {
7436
14
      &hf_mswsp_msg_cpmquerystatusex_whereid,
7437
14
      {
7438
14
        "whereId", "mswsp.msg.cpmquerystatusex.whereid",
7439
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7440
14
      }
7441
14
    },
7442
14
    {
7443
14
      &hf_mswsp_msg_cpmrestartposition_hcursor,
7444
14
      {
7445
14
        "hCursor", "mswsp.msg.cpmrestartposition.hcursor",
7446
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7447
14
      }
7448
14
    },
7449
14
    {
7450
14
      &hf_mswsp_msg_cpmrestartposition_chapt,
7451
14
      {
7452
14
        "chapt", "mswsp.msg.cpmrestartposition.chapt",
7453
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7454
14
      }
7455
14
    },
7456
14
    {
7457
14
      &hf_mswsp_msg_cpmgetrowsetnotify_wid,
7458
14
      {
7459
14
        "wid", "mswsp.msg.cpmgetrowsetnotify.wid",
7460
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7461
14
      }
7462
14
    },
7463
14
    {
7464
14
      &hf_mswsp_msg_cpmgetrowsetnotify_moreevents,
7465
14
      {
7466
14
        "moreEvents", "mswsp.msg.cpmgetrowsetnotify.moreevents",
7467
14
        FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL
7468
14
      }
7469
14
    },
7470
14
    {
7471
14
      &hf_mswsp_msg_cpmgetrowsetnotify_eventtype,
7472
14
      {
7473
14
        "eventType", "mswsp.msg.cpmgetrowsetnotify.eventType",
7474
14
        FT_UINT8, BASE_DEC, NULL, 0xFE, NULL, HFILL
7475
14
      }
7476
14
    },
7477
14
    {
7478
14
      &hf_mswsp_msg_cpmgetrowsetnotify_rowsetitemstate,
7479
14
      {
7480
14
        "rowSetItemState", "mswsp.msg.cpmgetrowsetnotify.rowsetitemstate",
7481
14
        FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
7482
14
      }
7483
14
    },
7484
14
    {
7485
14
      &hf_mswsp_msg_cpmgetrowsetnotify_changeditemstate,
7486
14
      {
7487
14
        "changedItemState", "mswsp.msg.cpmgetrowsetnotify.changeditemState",
7488
14
        FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
7489
14
      }
7490
14
    },
7491
14
    {
7492
14
      &hf_mswsp_msg_cpmgetrowsetnotify_rowsetevent,
7493
14
      {
7494
14
        "rowSetEvent", "mswsp.msg.cpmgetrowsetnotify.rowsetevent",
7495
14
        FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL
7496
14
      }
7497
14
    },
7498
14
    {
7499
14
      &hf_mswsp_msg_cpmgetrowsetnotify_rowseteventdata1,
7500
14
      {
7501
14
        "rowSetEventdata1", "mswsp.msg.cpmgetrowsetnotify.rowseteventdata1",
7502
14
        FT_UINT64, BASE_HEX, NULL, 0, NULL, HFILL
7503
14
      }
7504
14
    },
7505
14
    {
7506
14
      &hf_mswsp_msg_cpmgetrowsetnotify_rowseteventdata2,
7507
14
      {
7508
14
        "rowSetEventdata2", "mswsp.msg.cpmgetrowsetnotify.rowseteventdata2",
7509
14
        FT_UINT64, BASE_HEX, NULL, 0, NULL, HFILL
7510
14
      }
7511
14
    },
7512
14
    {
7513
14
      &hf_mswsp_msg_cpmfindindices_cwids,
7514
14
      {
7515
14
        "cWids", "mswsp.msg.cpmfindindices.cwids",
7516
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7517
14
      }
7518
14
    },
7519
14
    {
7520
14
      &hf_mswsp_msg_cpmfindindices_cdepthprev,
7521
14
      {
7522
14
        "cDepthPrev", "mswsp.msg.cpmfindindices.cdepthprev",
7523
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7524
14
      }
7525
14
    },
7526
14
    {
7527
14
      &hf_mswsp_msg_cpmfindindices_cdepthnext,
7528
14
      {
7529
14
        "cDepthNext", "mswsp.msg.cpmfindindices.cdepthnext",
7530
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7531
14
      }
7532
14
    },
7533
14
    {
7534
14
      &hf_mswsp_msg_cpmsetscopeprioritization_priority,
7535
14
      {
7536
14
        "priority", "mswsp.msg.cpmsetscopeprioritization.priority",
7537
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7538
14
      }
7539
14
    },
7540
14
    {
7541
14
      &hf_mswsp_msg_cpmsetscopeprioritization_eventfreq,
7542
14
      {
7543
14
        "eventFrequency", "mswsp.msg.cpmsetscopeprioritization.eventfreq",
7544
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7545
14
      }
7546
14
    },
7547
14
    {
7548
14
      &hf_mswsp_msg_cpmsetscopestatisics_dwindexitems,
7549
14
      {
7550
14
        "dwIndexedItems", "mswsp.msg.cpmsetscopestatistics.dwindexitems",
7551
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7552
14
      }
7553
14
    },
7554
14
    {
7555
14
      &hf_mswsp_msg_cpmsetscopestatisics_dwoutstandingadds,
7556
14
      {
7557
14
        "dwOutstandingAdds", "mswsp.msg.cpmsetscopestatistics.dwoutstandingadds",
7558
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7559
14
      }
7560
14
    },
7561
14
    {
7562
14
      &hf_mswsp_msg_cpmsetscopestatisics_dwoutstandingmodifies,
7563
14
      {
7564
14
        "dwOutstandingModifies", "mswsp.msg.cpmsetscopestatistics.dwoutstandingmodifies",
7565
14
        FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL
7566
14
      }
7567
14
    }
7568
14
  };
7569
7570
14
  static int *ett[] = {
7571
14
    &ett_mswsp,
7572
14
    &ett_mswsp_hdr,
7573
14
    &ett_mswsp_msg,
7574
14
    &ett_mswsp_pad,
7575
14
    &ett_mswsp_property_restriction,
7576
14
    &ett_CRestrictionArray,
7577
14
    &ett_CBaseStorageVariant,
7578
14
    &ett_CBaseStorageVariant_Vector,
7579
14
    &ett_CBaseStorageVariant_Array,
7580
14
    &ett_CDbColId,
7581
14
    &ett_GUID,
7582
14
    &ett_CDbProp,
7583
14
    &ett_CDbPropSet,
7584
14
    &ett_CDbPropSet_Array,
7585
14
    &ett_CRestriction,
7586
14
    &ett_CNodeRestriction,
7587
14
    &ett_CPropertyRestriction,
7588
14
    &ett_CCoercionRestriction,
7589
14
    &ett_CContentRestriction,
7590
14
    &ett_RANGEBOUNDARY,
7591
14
    &ett_CRangeCategSpec,
7592
14
    &ett_CCategSpec,
7593
14
    &ett_CAggregSpec,
7594
14
    &ett_CAggregSet,
7595
14
    &ett_CCategorizationSpec,
7596
14
    &ett_CAggregSortKey,
7597
14
    &ett_CSortAggregSet,
7598
14
    &ett_CInGroupSortAggregSet,
7599
14
    &ett_CInGroupSortAggregSets,
7600
14
    &ett_CRowsetProperties,
7601
14
    &ett_CFullPropSpec,
7602
14
    &ett_CPidMapper,
7603
14
    &ett_CSort,
7604
14
    &ett_CSortSet,
7605
14
    &ett_CNatLanguageRestriction,
7606
14
    &ett_CColumnGroup,
7607
14
    &ett_CColumnGroupArray,
7608
14
    &ett_LCID,
7609
14
    &ett_CTableColumn,
7610
14
    &ett_Array,
7611
14
    &ett_SeekDescription,
7612
14
    &ett_CRowsSeekNext,
7613
14
    &ett_CRowsSeekAt,
7614
14
    &ett_CRowsSeekAtRatio,
7615
14
    &ett_CRowsSeekByBookmark,
7616
14
    &ett_GetRowsRow,
7617
14
    &ett_GetRowsColumn,
7618
14
    &ett_CRowVariant,
7619
14
    &ett_CRowVariant_Vector,
7620
14
    &ett_mswsp_bool_options,
7621
14
    &ett_mswsp_uin32_array,
7622
14
    &ett_mswsp_msg_padding,
7623
14
    &ett_mswsp_msg_creusewhere
7624
14
  };
7625
7626
14
  static ei_register_info ei[] = {
7627
14
    { &ei_mswsp_invalid_variant_type, { "mswsp.invalid_variant_type", PI_PROTOCOL, PI_ERROR, "Invalid variant type", EXPFILL }},
7628
14
    { &ei_missing_msg_context, { "mswsp.msg.cpmgetrows.missing_msg_context", PI_SEQUENCE, PI_WARN, "previous messages needed for context not captured", EXPFILL }},
7629
14
    { &ei_mswsp_msg_cpmsetbinding_ccolumns, { "mswsp.msg.cpmsetbinding.ccolumns.invalid", PI_PROTOCOL, PI_WARN, "Invalid number of cColumns for packet", EXPFILL }}
7630
14
  };
7631
14
  int i;
7632
7633
14
  proto_mswsp = proto_register_protocol("Windows Search Protocol", "MS-WSP", "mswsp");
7634
7635
14
  proto_register_field_array(proto_mswsp, hf, array_length(hf));
7636
14
  proto_register_subtree_array(ett, array_length(ett));
7637
14
  expert_mswsp = expert_register_protocol(proto_mswsp);
7638
14
  expert_register_field_array(expert_mswsp, ei, array_length(ei));
7639
2.87k
  for (i=0; i<(int)array_length(GuidPropertySet); i++) {
7640
2.85k
    guids_add_guid(&GuidPropertySet[i].guid, GuidPropertySet[i].def);
7641
2.85k
  }
7642
14
}
7643
7644
static int dissect_mswsp_smb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7645
32
{
7646
32
  smb_info_t *si = (smb_info_t*)data;
7647
32
  bool in = si->request;
7648
7649
32
  smb_fid_info_t *fid_info = NULL;
7650
32
  fid_info = find_fid_info(si);
7651
7652
32
  if (!fid_info || !fid_info->fsi || !fid_info->fsi->filename) {
7653
32
    return 0;
7654
32
  }
7655
7656
7657
0
  if (g_ascii_strcasecmp(fid_info->fsi->filename, "\\MsFteWds") != 0) {
7658
0
    return 0;
7659
0
  }
7660
0
  p_add_proto_data(wmem_file_scope(), pinfo, proto_mswsp, 0, (void*)&SMB1);
7661
0
  return dissect_mswsp(tvb, pinfo, tree, in, data);
7662
0
}
7663
7664
static bool
7665
dissect_mswsp_smb_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
7666
32
{
7667
32
    return dissect_mswsp_smb(tvb, pinfo, tree, data) > 0;
7668
32
}
7669
7670
static int dissect_mswsp_smb2(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7671
0
{
7672
0
  smb2_info_t *si = (smb2_info_t*)data;
7673
0
  bool in;
7674
0
  char* fid_name = NULL;
7675
0
  uint32_t    open_frame = 0, close_frame = 0;
7676
7677
0
  if (!si) {
7678
0
    return 0;
7679
0
  }
7680
7681
0
  if (si->saved) {
7682
0
    dcerpc_fetch_polhnd_data(&si->saved->policy_hnd, &fid_name, NULL, &open_frame, &close_frame, pinfo->num);
7683
0
  }
7684
7685
0
  if (!fid_name || g_ascii_strcasecmp(fid_name, "File: MsFteWds") != 0) {
7686
0
    return 0;
7687
0
  }
7688
7689
0
  in = !(si->flags & SMB2_FLAGS_RESPONSE);
7690
0
  p_add_proto_data(wmem_file_scope(), pinfo, proto_mswsp, 0, (void*)&SMB2);
7691
0
  return dissect_mswsp(tvb, pinfo, tree, in, data);
7692
0
}
7693
7694
static bool
7695
dissect_mswsp_smb2_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
7696
0
{
7697
0
    return dissect_mswsp_smb2(tvb, pinfo, tree, data) > 0;
7698
0
}
7699
7700
void
7701
proto_reg_handoff_mswsp(void)
7702
14
{
7703
14
  heur_dissector_add("smb_transact", dissect_mswsp_smb_heur, "WSP over SMB1", "smb1_wsp", proto_mswsp, HEURISTIC_ENABLE);
7704
14
  heur_dissector_add("smb2_pipe_subdissectors", dissect_mswsp_smb2_heur, "WSP over SMB2", "smb2_wsp", proto_mswsp, HEURISTIC_ENABLE);
7705
14
}
7706
7707
7708
/*
7709
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
7710
 *
7711
 * Local variables:
7712
 * c-basic-offset: 4
7713
 * tab-width: 8
7714
 * indent-tabs-mode: t
7715
 * End:
7716
 *
7717
 * vi: set shiftwidth=4 tabstop=8 noexpandtab:
7718
 * :indentSize=4:tabSize=8:noTabs=false:
7719
 */