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