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>
6 * Wireshark - Network traffic analyzer
7 * By Gerald Combs <gerald@wireshark.org>
8 * Copyright 1998 Gerald Combs
10 * SPDX-License-Identifier: GPL-2.0-or-later
15 #include <epan/packet.h>
16 #include <epan/expert.h>
17 #include <epan/proto_data.h>
18 #include <epan/exceptions.h>
20 #include "packet-smb.h"
21 #include "packet-smb2.h"
22 #include "packet-dcom.h" /* HRESULT */
24 #include "packet-dcerpc-nt.h"
26 void proto_register_mswsp(void);
28 #define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x))
54 VT_COMPRESSED_LPWSTR
= 0x23,
57 VT_BLOB_OBJECT
= 0x46,
84 uint16_t *vt_ui2
, *vt_bool
;
86 uint32_t *vt_ui4
, *vt_error
;
87 int64_t *vt_i8
, *vt_cy
, *vt_filetime
;
90 double *vt_r8
, *vt_date
;
92 struct data_blob
*vt_blob
, *vt_blob_object
;
93 struct data_str
*vt_lpstr
, *vt_lpwstr
, *vt_compressed_lpwstr
, *vt_bstr
;
97 struct SAFEARRAYBOUNDS
{
98 uint32_t cElements
, lLbound
;
102 struct vt_vector vData
;
103 uint16_t cDims
, fFeature
;
106 struct SAFEARRAYBOUNDS
*Rgsabound
;
114 uint16_t vt_ui2
, vt_bool
;
115 int32_t vt_i4
, vt_int
;
116 uint32_t vt_ui4
, vt_uint
, vt_error
;
117 int64_t vt_i8
, vt_cy
, vt_filetime
;
119 double vt_r8
, vt_date
;
122 struct vt_decimal vt_decimal
;
123 struct data_blob vt_blob
, vt_blob_object
;
124 struct data_str vt_lpstr
, vt_lpwstr
, vt_compressed_lpwstr
, vt_bstr
;
128 union vt_single vt_single
;
129 struct vt_vector vt_vector
;
130 struct vt_array vt_array
;
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*);
143 struct CBaseStorageVariant
{
144 uint16_t vType
; /* value enum vType */
149 struct vtype_data
*type
;
152 /*****************************************************/
173 RTInternalProp
= 0x00fffffa,
174 RTPhrase
= 0x00fffffd
200 struct CFullPropSpec
{
202 enum PRSPEC_Kind kind
;
210 struct CPropertyRestriction
{
211 uint32_t relop
; /*with value enum relop*/
212 struct CFullPropSpec property
;
213 struct CBaseStorageVariant prval
;
218 struct CNodeRestriction
{
220 struct CRestriction
*paNode
;
224 struct CRestriction
{
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
;
243 struct CCoercionRestriction
{
245 struct CRestriction child
;
249 struct CContentRestriction
{
250 struct CFullPropSpec property
;
251 const uint8_t *phrase
;
257 struct CReuseWhere
/*Restriction*/ {
262 struct CNatLanguageRestriction
{
263 struct CFullPropSpec property
;
264 const uint8_t *phrase
;
268 #define PROP_LENGTH 255
271 DBAGGTTYPE_BYNONE
= 0x0,
277 DBAGGTTYPE_CHILDCOUNT
,
280 DBAGGTTYPE_DATERANGE
,
281 DBAGGTTYPE_REPRESENTATIVEOF
,
282 DBAGGTTYPE_EDITDISTANCE
,
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"},
302 struct CTableColumn
{
303 /*struct CFullPropSpec propspec;*/
305 uint8_t aggregateused
;
306 uint8_t aggregatetype
;
308 uint16_t valueoffset
;
311 uint16_t statusoffset
;
313 uint16_t lengthoffset
;
314 char name
[PROP_LENGTH
];
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
323 struct CPMSetBindingsIn
{
326 uint32_t bbindingdesc
;
329 struct CTableColumn
*acolumns
;
332 struct vector_or_array_64
{
334 uint64_t array_address
;
337 struct vector_or_array_32
{
339 uint32_t array_address
;
353 struct vector_or_array_64 i64
;
354 struct vector_or_array_32 i32
;
362 void proto_reg_handoff_mswsp(void);
364 static expert_field ei_mswsp_invalid_variant_type
;
365 static expert_field ei_missing_msg_context
;
366 static expert_field ei_mswsp_msg_cpmsetbinding_ccolumns
;
368 static int proto_mswsp
;
369 static int hf_mswsp_msg
;
370 static int hf_mswsp_hdr
;
371 static int hf_mswsp_hdr_msg
;
372 static int hf_mswsp_hdr_status
;
373 static int hf_mswsp_hdr_checksum
;
374 static int hf_mswsp_hdr_reserved
;
375 static int hf_mswsp_msg_Connect_Version
;
376 static int hf_mswsp_msg_ConnectIn_ClientIsRemote
;
377 static int hf_mswsp_msg_ConnectIn_Blob1
;
378 static int hf_mswsp_msg_ConnectIn_MachineName
;
379 static int hf_mswsp_msg_ConnectIn_UserName
;
380 static int hf_mswsp_msg_ConnectIn_PropSets_num
;
381 static int hf_mswsp_bool_options
;
382 static int hf_mswsp_bool_options_cursor
;
383 static int hf_mswsp_bool_options_async
;
384 static int hf_mswsp_bool_options_firstrows
;
385 static int hf_mswsp_bool_options_holdrows
;
386 static int hf_mswsp_bool_options_chaptered
;
387 static int hf_mswsp_bool_options_useci
;
388 static int hf_mswsp_bool_options_defertrim
;
389 static int hf_mswsp_bool_options_rowsetevents
;
390 static int hf_mswsp_bool_options_dontcomputeexpensive
;
391 static int hf_mswsp_guid_time_low
;
392 static int hf_mswsp_guid_time_mid
;
393 static int hf_mswsp_guid_time_high
;
394 static int hf_mswsp_guid_time_clock_hi
;
395 static int hf_mswsp_guid_time_clock_low
;
396 static int hf_mswsp_guid_node
;
397 static int hf_mswsp_lcid
;
398 static int hf_mswsp_lcid_sortid
;
399 static int hf_mswsp_lcid_langid
;
400 static int hf_mswsp_cscort_column
;
401 static int hf_mswsp_cscort_order
;
402 static int hf_mswsp_cscort_individual
;
403 static int hf_mswsp_cscortset_count
;
404 static int hf_mswsp_ctablecolumn_vtype
;
405 static int hf_mswsp_ctablecolumn_aggused
;
406 static int hf_mswsp_ctablecolumn_aggtype
;
407 static int hf_mswsp_ctablecolumn_valused
;
408 static int hf_mswsp_ctablecolumn_valoffset
;
409 static int hf_mswsp_ctablecolumn_valsize
;
410 static int hf_mswsp_ctablecolumn_statused
;
411 static int hf_mswsp_ctablecolumn_statoffset
;
412 static int hf_mswsp_ctablecolumn_lenused
;
413 static int hf_mswsp_ctablecolumn_lenoffset
;
414 static int hf_mswsp_cfullpropspec_kind
;
415 static int hf_mswsp_cfullpropspec_propid
;
416 static int hf_mswsp_cfullpropspec_propname
;
417 static int hf_mswsp_cproprestrict_relop
;
418 static int hf_mswsp_ccoercerestrict_value
;
419 static int hf_mswsp_ccontentrestrict_cc
;
420 static int hf_mswsp_ccontentrestrict_phrase
;
421 static int hf_mswsp_ccontentrestrict_method
;
422 static int hf_mswsp_natlangrestrict_cc
;
423 static int hf_mswsp_natlangrestrict_phrase
;
424 static int hf_mswsp_crestrict_ultype
;
425 static int hf_mswsp_crestrict_weight
;
426 static int hf_mswsp_crestrictarray_count
;
427 static int hf_mswsp_crestrictarray_present
;
428 static int hf_mswsp_cnoderestrict_cnode
;
429 static int hf_mswsp_cbasestorvariant_vtype
;
430 static int hf_mswsp_cbasestorvariant_vvalue
;
431 static int hf_mswsp_cbasestorvariant_vdata1
;
432 static int hf_mswsp_cbasestorvariant_vdata2
;
433 static int hf_mswsp_cbasestorvariant_num
;
434 static int hf_mswsp_cbasestorvariant_cdims
;
435 static int hf_mswsp_cbasestorvariant_ffeatures
;
436 static int hf_mswsp_cbasestorvariant_cbelements
;
437 static int hf_mswsp_cbasestorvariant_rgsabound
;
438 static int hf_mswsp_cdbcolid_ekind
;
439 static int hf_mswsp_cdbcolid_ulid
;
440 static int hf_mswsp_cdbcolid_vstring
;
441 static int hf_mswsp_cdbprop_id
;
442 static int hf_mswsp_cdbprop_options
;
443 static int hf_mswsp_cdbprop_status
;
444 static int hf_mswsp_cdbpropset_cprops
;
445 static int hf_mswsp_rangeboundry_ultype
;
446 static int hf_mswsp_rangeboundry_labelpresent
;
447 static int hf_mswsp_rangeboundry_cclabel
;
448 static int hf_mswsp_rangeboundry_label
;
449 static int hf_mswsp_crangecategspec_crange
;
450 static int hf_mswsp_ccategspec_type
;
451 static int hf_mswsp_caggregspec_type
;
452 static int hf_mswsp_caggregspec_ccalias
;
453 static int hf_mswsp_caggregspec_alias
;
454 static int hf_mswsp_caggregspec_idcolumn
;
455 static int hf_mswsp_caggregspec_ulmaxnumtoreturn
;
456 static int hf_mswsp_caggregspec_idrepresentative
;
457 static int hf_mswsp_caggregset_count
;
458 static int hf_mswsp_caggregsortkey_order
;
459 static int hf_mswsp_csortaggregset_count
;
460 static int hf_mswsp_cingroupsortaggregset_type
;
461 static int hf_mswsp_cingroupsortaggregsets_count
;
462 static int hf_mswsp_categorizationspec_cmaxres
;
463 static int hf_mswsp_crowsetprops_ulmaxopenrows
;
464 static int hf_mswsp_crowsetprops_ulmemusage
;
465 static int hf_mswsp_crowsetprops_cmaxresults
;
466 static int hf_mswsp_crowsetprops_ccmdtimeout
;
467 static int hf_mswsp_cpidmapper_count
;
468 static int hf_mswsp_ccolumngroup_count
;
469 static int hf_mswsp_ccolumngroup_grouppid
;
470 static int hf_mswsp_ccolumngroup_pid
;
471 static int hf_mswsp_ccolumngrouparray_count
;
472 static int hf_mswsp_int32array_value
;
473 static int hf_mswsp_crowseeknext_cskip
;
474 static int hf_mswsp_crowseekat_bmkoffset
;
475 static int hf_mswsp_crowseekat_skip
;
476 static int hf_mswsp_crowseekat_hregion
;
477 static int hf_mswsp_crowseekatratio_ulnumerator
;
478 static int hf_mswsp_crowseekatratio_uldenominator
;
479 static int hf_mswsp_crowseekatratio_hregion
;
480 static int hf_mswsp_crowseekbybookmark_cbookmarks
;
481 static int hf_mswsp_crowseekbybookmark_maxret
;
482 static int hf_mswsp_crowvariantinfo_count64
;
483 static int hf_mswsp_arrayvector_address64
;
484 static int hf_mswsp_crowvariantinfo_count32
;
485 static int hf_mswsp_arrayvector_address32
;
486 static int hf_mswsp_rowvariant_item_address64
;
487 static int hf_mswsp_rowvariant_item_address32
;
488 static int hf_mswsp_rowvariant_item_value
;
489 static int hf_mswsp_rowvariant_vtype
;
490 static int hf_mswsp_rowvariant_reserved1
;
491 static int hf_mswsp_rowvariant_reserved2
;
492 static int hf_mswsp_ctablecolumn_status
;
493 static int hf_mswsp_ctablecolumn_length
;
494 static int hf_mswsp_msg_cpmcreatequery_size
;
495 static int hf_mswsp_msg_cpmcreatequery_ccolumnsetpresent
;
496 static int hf_mswsp_msg_cpmcreatequery_crestrictionpresent
;
497 static int hf_mswsp_msg_cpmcreatequery_csortpresent
;
498 static int hf_mswsp_msg_cpmcreatequery_ccategpresent
;
499 static int hf_mswsp_msg_cpmcreatequery_ccateg_count
;
500 static int hf_mswsp_msg_cpmcreatequery_trueseq
;
501 static int hf_mswsp_msg_cpmcreatequery_workid
;
502 static int hf_mswsp_msg_cpmcreatequery_cursors
;
503 static int hf_mswsp_msg_cpmgetrows_hcursor
;
504 static int hf_mswsp_msg_cpmgetrows_rowstotransfer
;
505 static int hf_mswsp_msg_cpmgetrows_rowwidth
;
506 static int hf_mswsp_msg_cpmgetrows_cbseek
;
507 static int hf_mswsp_msg_cpmgetrows_cbreserved
;
508 static int hf_mswsp_msg_cpmgetrows_cbreadbuffer
;
509 static int hf_mswsp_msg_cpmgetrows_ulclientbase
;
510 static int hf_mswsp_msg_cpmgetrows_fbwdfetch
;
511 static int hf_mswsp_msg_cpmgetrows_etype
;
512 static int hf_mswsp_msg_cpmgetrows_chapt
;
513 static int hf_mswsp_msg_cpmgetrows_crowsreturned
;
514 static int hf_mswsp_msg_cpmratiofinished_hcursor
;
515 static int hf_mswsp_msg_cpmratiofinished_fquick
;
516 static int hf_mswsp_msg_cpmratiofinished_ulnumerator
;
517 static int hf_mswsp_msg_cpmratiofinished_uldenominator
;
518 static int hf_mswsp_msg_cpmratiofinished_crows
;
519 static int hf_mswsp_msg_cpmratiofinished_fnewrows
;
520 static int hf_mswsp_msg_cpmcomparebmk_hcursor
;
521 static int hf_mswsp_msg_cpmcomparebmk_chapt
;
522 static int hf_mswsp_msg_cpmcomparebmk_bmkfirst
;
523 static int hf_mswsp_msg_cpmcomparebmk_bmksecond
;
524 static int hf_mswsp_msg_cpmcomparebmk_dwcomparison
;
525 static int hf_mswsp_msg_cpmgetapproxpos_hcursor
;
526 static int hf_mswsp_msg_cpmgetapproxpos_chapt
;
527 static int hf_mswsp_msg_cpmgetapproxpos_bmk
;
528 static int hf_mswsp_msg_cpmgetapproxpos_numerator
;
529 static int hf_mswsp_msg_cpmgetapproxpos_denominator
;
530 static int hf_mswsp_msg_cpmsetbinding_hcursor
;
531 static int hf_mswsp_msg_cpmsetbinding_cbrow
;
532 static int hf_mswsp_msg_cpmsetbinding_desc
;
533 static int hf_mswsp_msg_cpmsetbinding_dummy
;
534 static int hf_mswsp_msg_cpmsetbinding_ccolumns
;
535 static int hf_mswsp_msg_cpmsetbinding_acolumns
;
536 static int hf_mswsp_msg_cpmsendnotify_watchnotify
;
537 static int hf_mswsp_msg_cpmgetquerystatus_hcursor
;
538 static int hf_mswsp_msg_cpmgetquerystatus_qstatus
;
539 static int hf_mswsp_msg_cpmcistate_cbstruct
;
540 static int hf_mswsp_msg_cpmcistate_cwordlist
;
541 static int hf_mswsp_msg_cpmcistate_cpersistindex
;
542 static int hf_mswsp_msg_cpmcistate_cqueries
;
543 static int hf_mswsp_msg_cpmcistate_cfreshtest
;
544 static int hf_mswsp_msg_cpmcistate_dwmergeprogress
;
545 static int hf_mswsp_msg_cpmcistate_estate
;
546 static int hf_mswsp_msg_cpmcistate_cfiltereddocs
;
547 static int hf_mswsp_msg_cpmcistate_ctotaldocs
;
548 static int hf_mswsp_msg_cpmcistate_cpendingscans
;
549 static int hf_mswsp_msg_cpmcistate_dwindexsize
;
550 static int hf_mswsp_msg_cpmcistate_cuniquekeys
;
551 static int hf_mswsp_msg_cpmcistate_csecqdocuments
;
552 static int hf_mswsp_msg_cpmcistate_dwpropcachesize
;
553 static int hf_mswsp_msg_cpmfetchvalue_wid
;
554 static int hf_mswsp_msg_cpmfetchvalue_cbsofar
;
555 static int hf_mswsp_msg_cpmfetchvalue_cbpropspec
;
556 static int hf_mswsp_msg_cpmfetchvalue_cbchunk
;
557 static int hf_mswsp_msg_cpmfetchvalue_cbvalue
;
558 static int hf_mswsp_msg_cpmfetchvalue_fmoreexists
;
559 static int hf_mswsp_msg_cpmfetchvalue_fvalueexists
;
560 static int hf_mswsp_msg_cpmfetchvalue_vvalue
;
561 static int hf_mswsp_msg_cpmquerystatusex_hcursor
;
562 static int hf_mswsp_msg_cpmquerystatusex_bmk
;
563 static int hf_mswsp_msg_cpmquerystatusex_qstatus
;
564 static int hf_mswsp_msg_cpmquerystatusex_cfiltereddocs
;
565 static int hf_mswsp_msg_cpmquerystatusex_cdocstofilter
;
566 static int hf_mswsp_msg_cpmquerystatusex_dwratiodenom
;
567 static int hf_mswsp_msg_cpmquerystatusex_dwrationumer
;
568 static int hf_mswsp_msg_cpmquerystatusex_irowbmk
;
569 static int hf_mswsp_msg_cpmquerystatusex_crowstotal
;
570 static int hf_mswsp_msg_cpmquerystatusex_maxrank
;
571 static int hf_mswsp_msg_cpmquerystatusex_cresultsfound
;
572 static int hf_mswsp_msg_cpmquerystatusex_whereid
;
573 static int hf_mswsp_msg_cpmrestartposition_hcursor
;
574 static int hf_mswsp_msg_cpmrestartposition_chapt
;
575 static int hf_mswsp_msg_cpmgetrowsetnotify_wid
;
576 static int hf_mswsp_msg_cpmgetrowsetnotify_moreevents
;
577 static int hf_mswsp_msg_cpmgetrowsetnotify_eventtype
;
578 static int hf_mswsp_msg_cpmgetrowsetnotify_rowsetitemstate
;
579 static int hf_mswsp_msg_cpmgetrowsetnotify_changeditemstate
;
580 static int hf_mswsp_msg_cpmgetrowsetnotify_rowsetevent
;
581 static int hf_mswsp_msg_cpmgetrowsetnotify_rowseteventdata1
;
582 static int hf_mswsp_msg_cpmgetrowsetnotify_rowseteventdata2
;
583 static int hf_mswsp_msg_cpmfindindices_cwids
;
584 static int hf_mswsp_msg_cpmfindindices_cdepthprev
;
585 static int hf_mswsp_msg_cpmfindindices_cdepthnext
;
586 static int hf_mswsp_msg_cpmsetscopeprioritization_priority
;
587 static int hf_mswsp_msg_cpmsetscopeprioritization_eventfreq
;
588 static int hf_mswsp_msg_cpmsetscopestatisics_dwindexitems
;
589 static int hf_mswsp_msg_cpmsetscopestatisics_dwoutstandingadds
;
590 static int hf_mswsp_msg_cpmsetscopestatisics_dwoutstandingmodifies
;
592 static int ett_mswsp
;
593 static int ett_mswsp_hdr
;
594 static int ett_mswsp_msg
;
595 static int ett_mswsp_pad
;
597 static int ett_mswsp_property_restriction
;
598 static int ett_CRestrictionArray
;
599 static int ett_CBaseStorageVariant
;
600 static int ett_CBaseStorageVariant_Vector
;
601 static int ett_CBaseStorageVariant_Array
;
602 static int ett_CDbColId
;
604 static int ett_CDbProp
;
605 static int ett_CDbPropSet
;
606 static int ett_CDbPropSet_Array
;
607 static int ett_CRestriction
;
608 static int ett_CNodeRestriction
;
609 static int ett_CPropertyRestriction
;
610 static int ett_CCoercionRestriction
;
611 static int ett_CContentRestriction
;
612 static int ett_RANGEBOUNDARY
;
613 static int ett_CRangeCategSpec
;
614 static int ett_CCategSpec
;
615 static int ett_CAggregSpec
;
616 static int ett_CAggregSet
;
617 static int ett_CCategorizationSpec
;
618 static int ett_CAggregSortKey
;
619 static int ett_CSortAggregSet
;
620 static int ett_CInGroupSortAggregSet
;
621 static int ett_CInGroupSortAggregSets
;
622 static int ett_CRowsetProperties
;
623 static int ett_CFullPropSpec
;
624 static int ett_CPidMapper
;
625 static int ett_CSort
;
626 static int ett_CSortSet
;
627 static int ett_CNatLanguageRestriction
;
628 static int ett_CColumnGroup
;
629 static int ett_CColumnGroupArray
;
631 static int ett_CTableColumn
;
632 static int ett_Array
;
633 static int ett_SeekDescription
;
634 static int ett_CRowsSeekNext
;
635 static int ett_CRowsSeekAt
;
636 static int ett_CRowsSeekAtRatio
;
637 static int ett_CRowsSeekByBookmark
;
638 static int ett_GetRowsRow
;
639 static int ett_GetRowsColumn
;
640 static int ett_CRowVariant
;
641 static int ett_CRowVariant_Vector
;
642 static int ett_mswsp_bool_options
;
643 static int ett_mswsp_uin32_array
;
644 static int ett_mswsp_msg_padding
;
645 static int ett_mswsp_msg_creusewhere
;
647 static struct vtype_data
*vType_get_type(uint16_t t
);
649 /* conversation related data */
651 uint32_t ulclientbase
;
656 struct message_data
{
663 struct CPMSetBindingsIn bindingsin
;/* CPMBindingIn request */
664 struct rows_data rowsin
; /*CPMGetRowsIn request*/
665 uint32_t version
; /*CPMConnectIn request/response */
670 GSList
*GSL_message_data
;
673 static int msg_data_find(struct message_data
*a
, struct message_data
*b
)
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
) {
684 static smb_fid_info_t
*find_fid_info(smb_info_t
*si
)
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
);
692 /* fallback to try search visited RWINFO (for AndX request/response) */
693 if (si
->sip
&& (si
->sip
->extra_info_type
== SMB_EI_RWINFO
)) {
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
)) {
714 static bool get_fid_and_frame(packet_info
*pinfo
, uint32_t *fid
, unsigned *frame
,
718 int *p_smb_level
= (int*)p_get_proto_data(wmem_file_scope(), pinfo
, proto_mswsp
, 0);
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
);
732 smb2_info_t
*si2
= (smb2_info_t
*)data
;
733 uint32_t open_frame
= 0, close_frame
= 0;
734 char *fid_name
= NULL
;
736 dcerpc_fetch_polhnd_data(&si2
->saved
->policy_hnd
, &fid_name
, NULL
, &open_frame
, &close_frame
, pinfo
->num
);
745 static struct message_data
*find_or_create_message_data(struct mswsp_ct
*conv_data
, packet_info
*pinfo
, uint16_t msg_id
, bool is_request
, void *data
)
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
) {
757 result
= g_slist_find_custom(conv_data
->GSL_message_data
,
758 &to_find
, (GCompareFunc
)msg_data_find
);
760 msg_data
= wmem_new(wmem_file_scope(), struct message_data
);
762 conv_data
->GSL_message_data
= g_slist_prepend(conv_data
->GSL_message_data
, msg_data
);
764 msg_data
= (struct message_data
*)result
->data
;
769 static struct mswsp_ct
*get_create_converstation_data(packet_info
*pinfo
)
771 struct mswsp_ct
*ct
= NULL
;
772 conversation_t
*conversation
;
774 conversation
= find_or_create_conversation(pinfo
);
778 ct
= (struct mswsp_ct
*)conversation_get_proto_data(conversation
, proto_mswsp
);
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
);
788 static struct message_data
*
789 find_matching_request_by_fid(struct mswsp_ct
*ct
, packet_info
*pinfo
, uint32_t msg
, bool in
, void *private_data
)
794 int *p_smb_level
= (int*)p_get_proto_data(wmem_file_scope(), pinfo
, proto_mswsp
, 0);
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
) {
809 static struct CPMSetBindingsIn
*
810 find_binding_msg_data(struct mswsp_ct
*ct
, packet_info
*pinfo
, void *private_data
)
812 struct CPMSetBindingsIn
*result
= NULL
;
813 struct message_data
*data
= find_matching_request_by_fid(ct
, pinfo
, 0xD0, true, private_data
);
815 result
= &data
->content
.bindingsin
;
820 static struct rows_data
*
821 find_rowsin_msg_data(struct mswsp_ct
*ct
, packet_info
*pinfo
, void *private_data
)
823 struct rows_data
*result
= NULL
;
824 struct message_data
*data
= find_matching_request_by_fid(ct
, pinfo
, 0xCC, true, private_data
);
826 result
= &data
->content
.rowsin
;
831 static bool is_64bit_mode(struct mswsp_ct
*ct
, packet_info
*pinfo
, bool *result
, void *private_data
)
833 uint32_t client_ver
= 0;
834 uint32_t server_ver
= 0;
835 struct message_data
*data
= find_matching_request_by_fid(ct
, pinfo
, 0xC8,
838 client_ver
= data
->content
.version
;
839 data
= find_matching_request_by_fid(ct
, pinfo
, 0xC8, false, private_data
);
841 server_ver
= data
->content
.version
;
842 *result
= (server_ver
& 0xffff0000) && (client_ver
& 0xffff0000);
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
861 static const value_string cursor_vals
[] = {
862 { eSequential
, "eSequential" },
863 { eLocateable
, "eLocateable" },
864 { eScrollable
, "eScrollable" },
870 /******************************************************************************/
871 struct GuidPropertySet
{
875 const value_string
*id_map
;
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"},
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"},
903 static const value_string DBPROPSET_CIFRMWRKCORE_EXT_IDS
[] = {
904 {0x02, "DBPROP_MACHINE"},
905 {0x03, "DBPROP_CLIENT_CLSID"},
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"},
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"},
926 {0x08, "System.Search.ReverseFileName"},
927 {0x09, "System.ItemURL"},
928 {0x0a, "System.ContentUrl"},
933 static const value_string StorageGuid_IDS
[] = {
934 {0x02, "System.ItemFolderNameDisplay"},
936 {0x04, "System.ItemTypeText"},
939 {0x0a, "System.ItemNameDisplay"},
941 {0x0c, "System.Size"},
942 {0x0d, "System.FileAttributes"},
943 {0x0e, "System.DateModified"},
944 {0x0f, "System.DateCreated"},
945 {0x10, "System.DateAccessed"},
947 {0x13, "System.Search.Contents"},
948 {0x14, "ShortFilename"},
949 {0x15, "System.FileFRN"},
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"},
975 static const value_string ShellDetails_IDS
[] = {
976 { 5, "System.ComputerName"},
977 { 8, "System.ItemPathDisplayNarrow"},
978 { 9, "PerceivedType"},
979 {11, "System.ItemType"},
981 {14, "TotalFileSize"},
982 {24, "System.ParsingName"},
983 {25, "System.SFGAOFlags"},
987 static const value_string PropSet1_IDS
[] = {
988 {100, "System.ThumbnailCacheId"},
992 static const value_string PropSet2_IDS
[] = {
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"},
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"},
1039 static const value_string PropSet4_IDS
[] = {
1040 {100, "System.ItemFolderPathDisplayNarrow"},
1044 static const value_string PropSet5_IDS
[] = {
1045 {100, "System.Contact.FullName"},
1049 static const value_string PropSet6_IDS
[] = {
1050 {100, "System.ItemAuthors"},
1054 static const value_string PropSet7_IDS
[] = {
1055 {2, "System.Shell.OmitFromView"},
1059 static const value_string PropSet8_IDS
[] = {
1060 {2, "System.Shell.SFGAOFlagsStrings"},
1061 {3, "System.Link.TargetSFGAOFlagsStrings"},
1065 static const value_string PropSet9_IDS
[] = {
1066 {100, "System.ItemDate"},
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"},
1078 static const value_string PropSet11_IDS
[] = {
1079 {5, "System.Priority"},
1080 {8, "System.Message.HasAttachments"},
1084 static const value_string DocCharacter_IDS
[] = {
1085 {2, "System.Search.Autosummary"},
1089 static const value_string PropSet12_IDS
[] = {
1090 {100, "System.IsDeleted"},
1094 static const value_string PropSet13_IDS
[] = {
1095 {100, "System.IsAttachment"},
1099 static const value_string PropSet14_IDS
[] = {
1100 {100, "System.Message.ConversationID"},
1101 {101, "System.Message.ConversationIndex"},
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"},
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"},
1140 static const value_string PropSet15_IDS
[] = {
1141 {0x64, "System.Calendar.IsOnline"},
1145 static const value_string PropSet16_IDS
[] = {
1146 {0x64, "System.Contact.OtherAddressStreet"},
1150 static const value_string PropSet17_IDS
[] = {
1151 {0x2, "System.DRM.IsProtected"},
1155 static const value_string PropSet18_IDS
[] = {
1156 {0x64, "System.Calendar.OptionalAttendeeNames"},
1160 static const value_string PropSet19_IDS
[] = {
1161 {0x64, "System.Calendar.ShowTimeAs"},
1165 static const value_string PropSet20_IDS
[] = {
1166 {0x64, "System.ParentalRatingReason"},
1170 static const value_string PropSet21_IDS
[] = {
1171 {0x64, "System.Project"},
1175 static const value_string PropSet22_IDS
[] = {
1176 {0x64, "System.Contact.OtherAddressCountry"},
1180 static const value_string PropSet23_IDS
[] = {
1181 {0x9, "System.Status"},
1185 static const value_string PropSet24_IDS
[] = {
1186 {0x64, "System.DateArchived"},
1190 static const value_string PropSet25_IDS
[] = {
1191 {0x64, "System.Contact.CarTelephone"},
1195 static const value_string PropSet26_IDS
[] = {
1196 {0x64, "System.Calendar.ResponseStatus"},
1200 static const value_string PropSet27_IDS
[] = {
1201 {0x64, "System.Task.BillingInformation"},
1205 static const value_string PropSet28_IDS
[] = {
1206 {0x64, "System.Media.AverageLevel"},
1210 static const value_string PropSet29_IDS
[] = {
1211 {0x64, "System.Contact.SpouseName"},
1215 static const value_string PropSet30_IDS
[] = {
1216 {0x64, "System.Document.DocumentID"},
1220 static const value_string PropSet31_IDS
[] = {
1221 {0x64, "System.RecordedTV.NetworkAffiliation"},
1225 static const value_string PropSet32_IDS
[] = {
1226 {0x64, "System.PriorityText"},
1230 static const value_string PropSet33_IDS
[] = {
1231 {0x64, "System.Contact.Children"},
1235 static const value_string PropSet34_IDS
[] = {
1236 {0x64, "System.RecordedTV.RecordingTime"},
1240 static const value_string PropSet35_IDS
[] = {
1241 {0x64, "System.FlagColorText"},
1245 static const value_string PropSet36_IDS
[] = {
1246 {0x64, "System.Contact.OtherAddressPostalCode"},
1250 static const value_string PropSet37_IDS
[] = {
1251 {0x64, "System.Photo.SharpnessText"},
1255 static const value_string PropSet38_IDS
[] = {
1256 {0x64, "System.Contact.OtherAddress"},
1260 static const value_string PropSet40_IDS
[] = {
1261 {0x64, "System.Contact.BusinessAddress"},
1265 static const value_string PropSet41_IDS
[] = {
1266 {0x64, "System.IsIncomplete"},
1270 static const value_string PropSet42_IDS
[] = {
1271 {0x64, "System.Contact.EmailAddress2"},
1275 static const value_string PropSet43_IDS
[] = {
1276 {0x64, "System.Contact.BusinessTelephone"},
1280 static const value_string PropSet45_IDS
[] = {
1281 {0x64, "System.Image.CompressionText"},
1285 static const value_string PropSet46_IDS
[] = {
1286 {0x64, "System.Contact.HomeAddressState"},
1290 static const value_string PropSet47_IDS
[] = {
1291 {0x64, "System.Contact.EmailAddress3"},
1295 static const value_string PropSet48_IDS
[] = {
1296 {0x64, "System.Communication.FollowupIconIndex"},
1300 static const value_string PropSet49_IDS
[] = {
1301 {0x64, "System.Photo.TagViewAggregate"},
1305 static const value_string PropSet50_IDS
[] = {
1306 {0x64, "System.Search.Store"},
1310 static const value_string PropSet51_IDS
[] = {
1311 {0x64, "System.FileName"},
1315 static const value_string PropSet52_IDS
[] = {
1316 {0x64, "System.Contact.HomeAddressStreet"},
1320 static const value_string PropSet53_IDS
[] = {
1321 {0x64, "System.Contact.HomeAddressPostalCode"},
1325 static const value_string PropSet54_IDS
[] = {
1326 {0x64, "System.Contact.BusinessHomePage"},
1330 static const value_string PropSet55_IDS
[] = {
1331 {0x64, "System.Calendar.RequiredAttendeeNames"},
1335 static const value_string PropSet56_IDS
[] = {
1336 {0x64, "System.FlagColor"},
1340 static const value_string PropSet57_IDS
[] = {
1341 {0x64, "System.Message.ProofInProgress"},
1345 static const value_string PropSet58_IDS
[] = {
1346 {0x64, "System.Contact.PrimaryAddressPostOfficeBox"},
1350 static const value_string PropSet59_IDS
[] = {
1351 {0x64, "System.Calendar.IsRecurring"},
1355 static const value_string PropSet60_IDS
[] = {
1356 {0x64, "System.Contact.HomeAddress"},
1360 static const value_string PropSet61_IDS
[] = {
1361 {0x64, "System.Photo.MaxAperture"},
1365 static const value_string PropSet62_IDS
[] = {
1366 {0x64, "System.ItemParticipants"},
1370 static const value_string PropSet63_IDS
[] = {
1371 {0x64, "System.Media.DateReleased"},
1375 static const value_string PropSet64_IDS
[] = {
1376 {0x64, "System.Journal.Contacts"},
1380 static const value_string PropSet65_IDS
[] = {
1381 {0x64, "System.Calendar.Resources"},
1385 static const value_string PropSet66_IDS
[] = {
1386 {0x67, "System.Message.MessageClass"},
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"},
1421 static const value_string PropSet68_IDS
[] = {
1422 {0x64, "System.Calendar.OrganizerName"},
1426 static const value_string PropSet69_IDS
[] = {
1427 {0x64, "System.Photo.PeopleNames"},
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"},
1440 static const value_string PropSet71_IDS
[] = {
1441 {0x64, "System.FileExtension"},
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"},
1469 static const value_string PropSet73_IDS
[] = {
1470 {0x64, "System.Contact.TTYTDDTelephone"},
1474 static const value_string PropSet74_IDS
[] = {
1475 {0x64, "System.Photo.PhotometricInterpretationText"},
1479 static const value_string PropSet75_IDS
[] = {
1480 {0x64, "System.Calendar.OptionalAttendeeAddresses"},
1484 static const value_string PropSet76_IDS
[] = {
1485 {0x64, "System.Calendar.ReminderTime"},
1489 static const value_string PropSet77_IDS
[] = {
1490 {0x64, "System.Calendar.RequiredAttendeeAddresses"},
1494 static const value_string PropSet78_IDS
[] = {
1495 {0x64, "System.Calendar.OrganizerAddress"},
1499 static const value_string PropSet79_IDS
[] = {
1500 {0x2, "System.Link.TargetParsingPath"},
1501 {0x8, "System.Link.TargetSFGAOFlags"},
1505 static const value_string PropSet80_IDS
[] = {
1506 {0x64, "System.Contact.Hobbies"},
1510 static const value_string PropSet81_IDS
[] = {
1511 {0x64, "System.Contact.HomeAddressPostOfficeBox"},
1515 static const value_string PropSet82_IDS
[] = {
1516 {0x64, "System.Contact.CompanyMainTelephone"},
1520 static const value_string PropSet83_IDS
[] = {
1521 {0x64, "System.IsFlagged"},
1525 static const value_string PropSet84_IDS
[] = {
1526 {0x64, "System.Contact.FirstName"},
1530 static const value_string PropSet85_IDS
[] = {
1531 {0xa, "System.IsEncrypted"},
1535 static const value_string PropSet86_IDS
[] = {
1536 {0x64, "System.Calendar.Duration"},
1540 static const value_string PropSet87_IDS
[] = {
1541 {0x64, "System.Contact.PrimaryAddressCity"},
1545 static const value_string PropSet88_IDS
[] = {
1546 {0x64, "System.Contact.OtherAddressPostOfficeBox"},
1550 static const value_string PropSet89_IDS
[] = {
1551 {0x64, "System.ProviderItemID"},
1555 static const value_string PropSet90_IDS
[] = {
1556 {0x64, "System.Contact.BusinessAddressCountry"},
1560 static const value_string PropSet91_IDS
[] = {
1561 {0x64, "System.Contact.EmailName"},
1565 static const value_string PropSet92_IDS
[] = {
1566 {0x64, "System.Photo.FocalLengthInFilm"},
1570 static const value_string PropSet93_IDS
[] = {
1571 {0x64, "System.Contact.IMAddress"},
1575 static const value_string PropSet94_IDS
[] = {
1576 {0x64, "System.DateAcquired"},
1580 static const value_string PropSet95_IDS
[] = {
1581 {0x64, "System.DateCompleted"},
1585 static const value_string PropSet96_IDS
[] = {
1586 {0x64, "System.ItemName"},
1590 static const value_string PropSet97_IDS
[] = {
1591 {0x64, "System.Contact.PrimaryAddressPostalCode"},
1595 static const value_string PropSet99_IDS
[] = {
1596 {0x64, "System.Document.ClientID"},
1600 static const value_string PropSet100_IDS
[] = {
1601 {0x64, "System.Photo.ExposureProgramText"},
1605 static const value_string PropSet101_IDS
[] = {
1606 {0x64, "System.Note.ColorText"},
1610 static const value_string PropSet102_IDS
[] = {
1611 {0x64, "System.Photo.MeteringModeText"},
1615 static const value_string PropSet103_IDS
[] = {
1616 {0x2, "System.Link.TargetExtension"},
1620 static const value_string PropSet104_IDS
[] = {
1621 {0x64, "System.Contact.BusinessAddressState"},
1625 static const value_string PropSet105_IDS
[] = {
1626 {0x64, "System.Photo.OrientationText"},
1630 static const value_string PropSet106_IDS
[] = {
1631 {0x64, "System.Contact.Label"},
1635 static const value_string PropSet107_IDS
[] = {
1636 {0x64, "System.Calendar.Location"},
1640 static const value_string PropSet108_IDS
[] = {
1641 {0x64, "System.Photo.SaturationText"},
1645 static const value_string PropSet109_IDS
[] = {
1646 {0x64, "System.Message.ToDoTitle"},
1650 static const value_string PropSet110_IDS
[] = {
1651 {0x64, "System.Contact.Anniversary"},
1655 static const value_string PropSet111_IDS
[] = {
1656 {0x64, "System.Contact.FileAsName"},
1660 static const value_string PropSet112_IDS
[] = {
1661 {0x64, "System.GPS.Date"},
1665 static const value_string PropSet113_IDS
[] = {
1666 {0x64, "System.IsFlaggedComplete"},
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"},
1677 static const value_string PropSet115_IDS
[] = {
1678 {0x64, "System.Communication.SecurityFlags"},
1682 static const value_string PropSet116_IDS
[] = {
1683 {0x64, "System.Identity"},
1687 static const value_string PropSet117_IDS
[] = {
1688 {0x64, "System.Contact.BusinessAddressPostOfficeBox"},
1692 static const value_string PropSet118_IDS
[] = {
1693 {0x64, "System.AcquisitionID"},
1697 static const value_string PropSet119_IDS
[] = {
1698 {0x64, "System.Contact.EmailAddresses"},
1702 static const value_string PropSet120_IDS
[] = {
1703 {0x64, "System.Communication.TaskStatus"},
1707 static const value_string PropSet121_IDS
[] = {
1708 {0x64, "System.Contact.LastName"},
1712 static const value_string PropSet122_IDS
[] = {
1713 {0x64, "System.Communication.DateItemExpires"},
1717 static const value_string PropSet123_IDS
[] = {
1718 {0x64, "System.ImportanceText"},
1722 static const value_string PropSet124_IDS
[] = {
1723 {0x64, "System.Search.ContainerHash"},
1727 static const value_string PropSet125_IDS
[] = {
1728 {0x64, "System.Contact.BusinessFaxNumber"},
1732 static const value_string PropSet126_IDS
[] = {
1733 {0x2, "System.Link.TargetUrl"},
1734 {0x1a, "System.IconIndex"},
1738 static const value_string PropSet127_IDS
[] = {
1739 {0x64, "System.RecordedTV.StationName"},
1743 static const value_string PropSet128_IDS
[] = {
1744 {0x64, "System.Task.Owner"},
1748 static const value_string PropSet129_IDS
[] = {
1749 {0x64, "System.Photo.ProgramModeText"},
1753 static const value_string PropSet130_IDS
[] = {
1754 {0x64, "System.Contact.PrimaryAddressCountry"},
1758 static const value_string PropSet131_IDS
[] = {
1759 {0x64, "System.Note.Color"},
1763 static const value_string PropSet132_IDS
[] = {
1764 {0x64, "System.Contact.OtherAddressState"},
1768 static const value_string PropSet133_IDS
[] = {
1769 {0x64, "System.Message.AttachmentContents"},
1773 static const value_string PropSet134_IDS
[] = {
1774 {0x64, "System.Communication.TaskStatusText"},
1778 static const value_string PropSet135_IDS
[] = {
1779 {0x64, "System.Communication.HeaderItem"},
1783 static const value_string PropSet136_IDS
[] = {
1784 {0x64, "System.Contact.EmailAddress"},
1788 static const value_string PropSet137_IDS
[] = {
1789 {0x64, "System.Contact.Profession"},
1793 static const value_string PropSet138_IDS
[] = {
1794 {0x64, "System.Contact.BusinessAddressPostalCode"},
1798 static const value_string PropSet139_IDS
[] = {
1799 {0x64, "System.ItemNamePrefix"},
1803 static const value_string PropSet140_IDS
[] = {
1804 {0x64, "System.Photo.DigitalZoom"},
1808 static const value_string PropSet141_IDS
[] = {
1809 {0x64, "System.SourceItem"},
1813 static const value_string PropSet142_IDS
[] = {
1814 {0x64, "System.Photo.WhiteBalance"},
1818 static const value_string PropSet143_IDS
[] = {
1819 {0x64, "System.SensitivityText"},
1823 static const value_string PropSet144_IDS
[] = {
1824 {0x64, "System.Contact.Gender"},
1825 {0x65, "System.Contact.GenderValue"},
1829 static const value_string PropSet145_IDS
[] = {
1830 {0x64, "System.Contact.OtherAddressCity"},
1834 static const value_string PropSet146_IDS
[] = {
1835 {0x64, "System.Music.DisplayArtist"},
1839 static const value_string PropSet147_IDS
[] = {
1840 {0x64, "System.Message.SenderAddress"},
1844 static const value_string PropSet148_IDS
[] = {
1845 {0x64, "System.Contact.PrimaryAddressState"},
1849 static const value_string PropSet149_IDS
[] = {
1850 {0x64, "System.Journal.EntryType"},
1854 static const value_string PropSet150_IDS
[] = {
1855 {0x64, "System.Contact.BusinessAddressStreet"},
1859 static const value_string PropSet151_IDS
[] = {
1860 {0x4, "System.FileOwner"},
1864 static const value_string PropSet152_IDS
[] = {
1865 {0x64, "System.Contact.HomeAddressCountry"},
1869 static const value_string PropSet153_IDS
[] = {
1870 {0x64, "System.Task.CompletionStatus"},
1874 static const value_string PropSet154_IDS
[] = {
1875 {0x10, "System.Software.DateLastUsed"},
1879 static const value_string PropSet155_IDS
[] = {
1880 {0x64, "System.Contact.Department"},
1884 static const value_string PropSet156_IDS
[] = {
1885 {0x64, "System.Calendar.ShowTimeAsText"},
1889 static const value_string PropSet157_IDS
[] = {
1890 {0x64, "System.Sensitivity"},
1894 static const value_string PropSet158_IDS
[] = {
1895 {0x64, "System.RecordedTV.OriginalBroadcastDate"},
1899 static const value_string PropSet159_IDS
[] = {
1900 {0x64, "System.Music.IsCompilation"},
1904 static const value_string PropSet160_IDS
[] = {
1905 {0x64, "System.DueDate"},
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"},
1917 static const value_string PropSet162_IDS
[] = {
1918 {0x64, "System.MileageInformation"},
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"},
1937 static const value_string PropSet164_IDS
[] = {
1938 {0x64, "System.Audio.PeakValue"},
1942 static const value_string PropSet165_IDS
[] = {
1943 {0x64, "System.Contact.TelexNumber"},
1947 static const value_string PropSet166_IDS
[] = {
1948 {0x64, "System.Message.SenderName"},
1952 static const value_string PropSet167_IDS
[] = {
1953 {0x64, "System.Message.Flags"},
1957 static const value_string PropSet168_IDS
[] = {
1958 {0x64, "System.IsFolder"},
1962 static const value_string PropSet169_IDS
[] = {
1963 {0x64, "System.Contact.AssistantTelephone"},
1967 static const value_string PropSet170_IDS
[] = {
1968 {0x64, "System.KindText"},
1972 static const value_string PropSet171_IDS
[] = {
1973 {0x64, "System.Photo.ContrastText"},
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"},
1988 static const value_string PropSet173_IDS
[] = {
1989 {0x64, "System.Message.IsFwdOrReply"},
1993 static const value_string PropSet174_IDS
[] = {
1994 {0x64, "System.Photo.WhiteBalanceText"},
1998 static const value_string PropSet175_IDS
[] = {
1999 {0x64, "System.Photo.GainControlText"},
2003 static const value_string PropSet176_IDS
[] = {
2004 {0x64, "System.Communication.PolicyTag"},
2008 static const value_string PropSet177_IDS
[] = {
2009 {0x64, "System.Contact.HomeFaxNumber"},
2013 static const value_string PropSet178_IDS
[] = {
2014 {0x64, "System.FlagStatusText"},
2018 static const value_string PropSet179_IDS
[] = {
2019 {0x64, "System.Contact.AssistantName"},
2023 static const value_string PropSet180_IDS
[] = {
2024 {0x64, "System.Message.ToDoFlags"},
2028 static const value_string PropSet181_IDS
[] = {
2029 {0x64, "System.RatingText"},
2033 static const value_string PropSet182_IDS
[] = {
2034 {0x64, "System.Document.Contributor"},
2038 static const value_string PropSet183_IDS
[] = {
2039 {0x64, "System.Contact.CallbackTelephone"},
2043 static const value_string PropSet184_IDS
[] = {
2044 {0x64, "System.EndDate"},
2048 static const value_string PropSet185_IDS
[] = {
2049 {0x64, "System.Media.DateEncoded"},
2053 static const value_string PropSet186_IDS
[] = {
2054 {0x64, "System.Photo.FlashText"},
2058 static const value_string PropSet187_IDS
[] = {
2059 {0x64, "System.Photo.FlashFired"},
2063 static const value_string PropSet188_IDS
[] = {
2064 {0x64, "System.Document.Division"},
2068 static const value_string PropSet189_IDS
[] = {
2069 {0x64, "System.Contact.PagerTelephone"},
2073 static const value_string PropSet190_IDS
[] = {
2074 {0x64, "System.Contact.BusinessAddressCity"},
2078 static const value_string PropSet191_IDS
[] = {
2079 {0x64, "System.Media.SubscriptionContentId"},
2083 static const value_string PropSet192_IDS
[] = {
2084 {0x64, "System.Contact.PrimaryAddressStreet"},
2088 static const value_string PropSet193_IDS
[] = {
2089 {0x64, "System.StartDate"},
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"},
2108 static const value_string PropSet195_IDS
[] = {
2109 {0x64, "System.Contact.MailingAddress"},
2113 static const 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
2118 { {0xa7ac77ed, 0xf8d7, 0x11ce, {0xa7, 0x98, 0x00, 0x20, 0xf8, 0x00, 0x80, 0x25}},
2119 "DBPROPSET_QUERYEXT", "Query extension",
2120 DBPROPSET_QUERYEXT_IDS
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
2126 { {0xAA6EE6B0, 0xE828, 0x11D0, {0xB2, 0x3E, 0x00, 0xAA, 0x00, 0x47, 0xFC, 0x01}},
2127 "DBPROPSET_MSIDXS_ROWSETEXT", "???",
2128 DBPROPSET_MSIDXS_ROWSETEXT_IDS
2130 { {0xB725F130, 0x47ef, 0x101a, {0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC}},
2131 "Storage", "Storage Property Set",
2134 { {0xF29F85E0, 0x4FF9, 0x1068, {0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9}},
2135 "Document", "Document Property Set",
2138 { {0x49691C90, 0x7E17, 0x101A, {0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9}},
2139 "Query", "Query Property Set",
2142 { {0x28636AA6, 0x953D, 0x11D2, {0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0}},
2143 "ShellDetails", "Shell Details Property Set",
2146 { {0x446D16B1, 0x8DAD, 0x4870, {0xA7, 0x48, 0x40, 0x2E, 0xA4, 0x3D, 0x78, 0x8C}},
2147 "???", "Unspecified Property Set",
2150 { {0x1E3EE840, 0xBC2B, 0x476C, {0x82, 0x37, 0x2A, 0xCD, 0x1A, 0x83, 0x9B, 0x22}},
2151 "???", "Unspecified Property Set",
2154 { {0x56A3372E, 0xCE9C, 0x11d2, {0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6}},
2155 "Music", "Music Property Set",
2158 { {0xE3E0584C, 0xB788, 0x4A5A, {0xBB, 0x20, 0x7F, 0x5A, 0x44, 0xC9, 0xAC, 0xDD}},
2159 "???", "Unspecified Property Set",
2162 { {0xDABD30ED, 0x0043, 0x4789, {0xA7, 0xF8, 0xD0, 0x13, 0xA4, 0x73, 0x66, 0x22}},
2163 "???", "Unspecified Property Set",
2166 { {0x635E9051, 0x50A5, 0x4BA2, {0xB9, 0xDB, 0x4E, 0xD0, 0x56, 0xC7, 0x72, 0x96}},
2167 "???", "Unspecified Property Set",
2170 { {0xD0A04F0A, 0x462A, 0x48A4, {0xBB, 0x2F, 0x37, 0x06, 0xE8, 0x8D, 0xBD, 0x7D}},
2171 "???", "Unspecified Property Set",
2174 { {0xDE35258C, 0xC695, 0x4CBC, {0xB9, 0x82, 0x38, 0xB0, 0xAD, 0x24, 0xCE, 0xD0}},
2175 "???", "Unspecified Property Set",
2178 { {0xD6942081, 0xD53B, 0x443D, {0xAD, 0x47, 0x5E, 0x05, 0x9D, 0x9C, 0xD2, 0x7A}},
2179 "???", "Unspecified Property Set",
2182 { {0xF7DB74B4, 0x4287, 0x4103, {0xAF, 0xBA, 0xF1, 0xB1, 0x3D, 0xCD, 0x75, 0xCF}},
2183 "???", "Unspecified Property Set",
2186 { {0x0B63E350, 0x9CCC, 0x11d0, {0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04}},
2187 "???", "Unspecified Property Set",
2190 { {0x9C1FCF74, 0x2D97, 0x41BA, {0xB4, 0xAE, 0xCB, 0x2E, 0x36, 0x61, 0xA6, 0xE4}},
2191 "???", "Unspecified Property Set",
2194 { {0x560C36C0, 0x503A, 0x11CF, {0xBA, 0xA1, 0x00, 0x00, 0x4C, 0x75, 0x2A, 0x9A}},
2195 "DocCharacter", "Document characterization Property Set",
2198 { {0x5CDA5FC8, 0x33EE, 0x4FF3, {0x90, 0x94, 0xAE, 0x7B, 0xD8, 0x86, 0x8C, 0x4D}},
2199 "???", "Unspecified Property Set",
2202 { {0xF23F425C, 0x71A1, 0x4FA8, {0x92, 0x2F, 0x67, 0x8E, 0xA4, 0xA6, 0x04, 0x08}},
2203 "???", "Unspecified Property Set",
2206 { {0xDC8F80BD, 0xAF1E, 0x4289, {0x85, 0xB6, 0x3D, 0xFC, 0x1B, 0x49, 0x39, 0x92}},
2207 "???", "Unspecified Property Set",
2210 { {0xD5CDD502, 0x2E9C, 0x101B, {0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE}},
2211 "DocPropSet2", "Document Property Set 2",
2214 { {0x176DC63C, 0x2688, 0x4E89, {0x81, 0x43, 0xA3, 0x47, 0x80, 0x0F, 0x25, 0xE9}},
2215 "System.Contact", "System Contact Property Set",
2218 { {0xBFEE9149, 0xE3E2, 0x49A7, {0xA8, 0x62, 0xC0, 0x59, 0x88, 0x14, 0x5C, 0xEC}},
2219 "???","Unspecified Property Set",
2222 { {0xFF962609, 0xB7D6, 0x4999, {0x86, 0x2D, 0x95, 0x18, 0x0D, 0x52, 0x9A, 0xEA}},
2223 "???","Unspecified Property Set",
2226 { {0xAEAC19E4, 0x89AE, 0x4508, {0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED}},
2227 "???","Unspecified Property Set",
2230 { {0x09429607, 0x582D, 0x437F, {0x84, 0xC3, 0xDE, 0x93, 0xA2, 0xB2, 0x4C, 0x3C}},
2231 "???","Unspecified Property Set",
2234 { {0x5BF396D4, 0x5EB2, 0x466F, {0xBD, 0xE9, 0x2F, 0xB3, 0xF2, 0x36, 0x1D, 0x6E}},
2235 "???","Unspecified Property Set",
2238 { {0x10984E0A, 0xF9F2, 0x4321, {0xB7, 0xEF, 0xBA, 0xF1, 0x95, 0xAF, 0x43, 0x19}},
2239 "???","Unspecified Property Set",
2242 { {0x39A7F922, 0x477C, 0x48DE, {0x8B, 0xC8, 0xB2, 0x84, 0x41, 0xE3, 0x42, 0xE3}},
2243 "???","Unspecified Property Set",
2246 { {0x8F167568, 0x0AAE, 0x4322, {0x8E, 0xD9, 0x60, 0x55, 0xB7, 0xB0, 0xE3, 0x98}},
2247 "???","Unspecified Property Set",
2250 { {0x000214A1, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}},
2251 "???","Unspecified Property Set",
2254 { {0x43F8D7B7, 0xA444, 0x4F87, {0x93, 0x83, 0x52, 0x27, 0x1C, 0x9B, 0x91, 0x5C}},
2255 "???","Unspecified Property Set",
2258 { {0x8FDC6DEA, 0xB929, 0x412B, {0xBA, 0x90, 0x39, 0x7A, 0x25, 0x74, 0x65, 0xFE}},
2259 "???","Unspecified Property Set",
2262 { {0x188C1F91, 0x3C40, 0x4132, {0x9E, 0xC5, 0xD8, 0xB0, 0x3B, 0x72, 0xA8, 0xA2}},
2263 "???","Unspecified Property Set",
2266 { {0xD37D52C6, 0x261C, 0x4303, {0x82, 0xB3, 0x08, 0xB9, 0x26, 0xAC, 0x6F, 0x12}},
2267 "???","Unspecified Property Set",
2270 { {0x09EDD5B6, 0xB301, 0x43C5, {0x99, 0x90, 0xD0, 0x03, 0x02, 0xEF, 0xFD, 0x46}},
2271 "???","Unspecified Property Set",
2274 { {0x9D2408B6, 0x3167, 0x422B, {0x82, 0xB0, 0xF5, 0x83, 0xB7, 0xA7, 0xCF, 0xE3}},
2275 "???","Unspecified Property Set",
2278 { {0xE08805C8, 0xE395, 0x40DF, {0x80, 0xD2, 0x54, 0xF0, 0xD6, 0xC4, 0x31, 0x54}},
2279 "???","Unspecified Property Set",
2282 { {0x2C53C813, 0xFB63, 0x4E22, {0xA1, 0xAB, 0x0B, 0x33, 0x1C, 0xA1, 0xE2, 0x73}},
2283 "???","Unspecified Property Set",
2286 { {0xD98BE98B, 0xB86B, 0x4095, {0xBF, 0x52, 0x9D, 0x23, 0xB2, 0xE0, 0xA7, 0x52}},
2287 "???","Unspecified Property Set",
2290 { {0xD4729704, 0x8EF1, 0x43EF, {0x90, 0x24, 0x2B, 0xD3, 0x81, 0x18, 0x7F, 0xD5}},
2291 "???","Unspecified Property Set",
2294 { {0xA5477F61, 0x7A82, 0x4ECA, {0x9D, 0xDE, 0x98, 0xB6, 0x9B, 0x24, 0x79, 0xB3}},
2295 "???","Unspecified Property Set",
2298 { {0x45EAE747, 0x8E2A, 0x40AE, {0x8C, 0xBF, 0xCA, 0x52, 0xAB, 0xA6, 0x15, 0x2A}},
2299 "???","Unspecified Property Set",
2302 { {0x95C656C1, 0x2ABF, 0x4148, {0x9E, 0xD3, 0x9E, 0xC6, 0x02, 0xE3, 0xB7, 0xCD}},
2303 "???","Unspecified Property Set",
2306 { {0x51EC3F47, 0xDD50, 0x421D, {0x87, 0x69, 0x33, 0x4F, 0x50, 0x42, 0x4B, 0x1E}},
2307 "???","Unspecified Property Set",
2310 { {0x508161FA, 0x313B, 0x43D5, {0x83, 0xA1, 0xC1, 0xAC, 0xCF, 0x68, 0x62, 0x2C}},
2311 "???","Unspecified Property Set",
2314 { {0x730FB6DD, 0xCF7C, 0x426B, {0xA0, 0x3F, 0xBD, 0x16, 0x6C, 0xC9, 0xEE, 0x24}},
2315 "???","Unspecified Property Set",
2318 { {0x346C8BD1, 0x2E6A, 0x4C45, {0x89, 0xA4, 0x61, 0xB7, 0x8E, 0x8E, 0x70, 0x0F}},
2319 "???","Unspecified Property Set",
2322 { {0x38965063, 0xEDC8, 0x4268, {0x84, 0x91, 0xB7, 0x72, 0x31, 0x72, 0xCF, 0x29}},
2323 "???","Unspecified Property Set",
2326 { {0x6A15E5A0, 0x0A1E, 0x4CD7, {0xBB, 0x8C, 0xD2, 0xF1, 0xB0, 0xC9, 0x29, 0xBC}},
2327 "???","Unspecified Property Set",
2330 { {0x3F08E66F, 0x2F44, 0x4BB9, {0xA6, 0x82, 0xAC, 0x35, 0xD2, 0x56, 0x23, 0x22}},
2331 "???","Unspecified Property Set",
2334 { {0xC89A23D0, 0x7D6D, 0x4EB8, {0x87, 0xD4, 0x77, 0x6A, 0x82, 0xD4, 0x93, 0xE5}},
2335 "???","Unspecified Property Set",
2338 { {0x644D37B4, 0xE1B3, 0x4BAD, {0xB0, 0x99, 0x7E, 0x7C, 0x04, 0x96, 0x6A, 0xCA}},
2339 "???","Unspecified Property Set",
2342 { {0x83A6347E, 0x6FE4, 0x4F40, {0xBA, 0x9C, 0xC4, 0x86, 0x52, 0x40, 0xD1, 0xF4}},
2343 "???","Unspecified Property Set",
2346 { {0xB812F15D, 0xC2D8, 0x4BBF, {0xBA, 0xCD, 0x79, 0x74, 0x43, 0x46, 0x11, 0x3F}},
2347 "???","Unspecified Property Set",
2350 { {0xA06992B3, 0x8CAF, 0x4ED7, {0xA5, 0x47, 0xB2, 0x59, 0xE3, 0x2A, 0xC9, 0xFC}},
2351 "???","Unspecified Property Set",
2354 { {0x41CF5AE0, 0xF75A, 0x4806, {0xBD, 0x87, 0x59, 0xC7, 0xD9, 0x24, 0x8E, 0xB9}},
2355 "???","Unspecified Property Set",
2358 { {0x0ADEF160, 0xDB3F, 0x4308, {0x9A, 0x21, 0x06, 0x23, 0x7B, 0x16, 0xFA, 0x2A}},
2359 "???","Unspecified Property Set",
2362 { {0x8AFCC170, 0x8A46, 0x4B53, {0x9E, 0xEE, 0x90, 0xBA, 0xE7, 0x15, 0x1E, 0x62}},
2363 "???","Unspecified Property Set",
2366 { {0x56310920, 0x2491, 0x4919, {0x99, 0xCE, 0xEA, 0xDB, 0x06, 0xFA, 0xFD, 0xB2}},
2367 "???","Unspecified Property Set",
2370 { {0xB33AF30B, 0xF552, 0x4584, {0x93, 0x6C, 0xCB, 0x93, 0xE5, 0xCD, 0xA2, 0x9F}},
2371 "???","Unspecified Property Set",
2374 { {0x67DF94DE, 0x0CA7, 0x4D6F, {0xB7, 0x92, 0x05, 0x3A, 0x3E, 0x4F, 0x03, 0xCF}},
2375 "???","Unspecified Property Set",
2378 { {0x9098F33C, 0x9A7D, 0x48A8, {0x8D, 0xE5, 0x2E, 0x12, 0x27, 0xA6, 0x4E, 0x91}},
2379 "???","Unspecified Property Set",
2382 { {0xDE5EF3C7, 0x46E1, 0x484E, {0x99, 0x99, 0x62, 0xC5, 0x30, 0x83, 0x94, 0xC1}},
2383 "???","Unspecified Property Set",
2386 { {0x315B9C8D, 0x80A9, 0x4EF9, {0xAE, 0x16, 0x8E, 0x74, 0x6D, 0xA5, 0x1D, 0x70}},
2387 "???","Unspecified Property Set",
2390 { {0x98F98354, 0x617A, 0x46B8, {0x85, 0x60, 0x5B, 0x1B, 0x64, 0xBF, 0x1F, 0x89}},
2391 "???","Unspecified Property Set",
2394 { {0x08F6D7C2, 0xE3F2, 0x44FC, {0xAF, 0x1E, 0x5A, 0xA5, 0xC8, 0x1A, 0x2D, 0x3E}},
2395 "???","Unspecified Property Set",
2398 { {0xD4D0AA16, 0x9948, 0x41A4, {0xAA, 0x85, 0xD9, 0x7F, 0xF9, 0x64, 0x69, 0x93}},
2399 "???","Unspecified Property Set",
2402 { {0xDE41CC29, 0x6971, 0x4290, {0xB4, 0x72, 0xF5, 0x9F, 0x2E, 0x2F, 0x31, 0xE2}},
2403 "???","Unspecified Property Set",
2406 { {0xDEA7C82C, 0x1D89, 0x4A66, {0x94, 0x27, 0xA4, 0xE3, 0xDE, 0xBA, 0xBC, 0xB1}},
2407 "???","Unspecified Property Set",
2410 { {0x00F58A38, 0xC54B, 0x4C40, {0x86, 0x96, 0x97, 0x23, 0x59, 0x80, 0xEA, 0xE1}},
2411 "???","Unspecified Property Set",
2414 { {0xCD9ED458, 0x08CE, 0x418F, {0xA7, 0x0E, 0xF9, 0x12, 0xC7, 0xBB, 0x9C, 0x5C}},
2415 "???","Unspecified Property Set",
2418 { {0x64440492, 0x4C8B, 0x11D1, {0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03}},
2419 "???","Unspecified Property Set",
2422 { {0xAAA660F9, 0x9865, 0x458E, {0xB4, 0x84, 0x01, 0xBC, 0x7F, 0xE3, 0x97, 0x3E}},
2423 "???","Unspecified Property Set",
2426 { {0xE8309B6E, 0x084C, 0x49B4, {0xB1, 0xFC, 0x90, 0xA8, 0x03, 0x31, 0xB6, 0x38}},
2427 "???","Unspecified Property Set",
2430 { {0x64440490, 0x4C8B, 0x11D1, {0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03}},
2431 "???","Unspecified Property Set",
2434 { {0xE4F10A3C, 0x49E6, 0x405D, {0x82, 0x88, 0xA2, 0x3B, 0xD4, 0xEE, 0xAA, 0x6C}},
2435 "???","Unspecified Property Set",
2438 { {0x14B81DA1, 0x0135, 0x4D31, {0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99}},
2439 "???","Unspecified Property Set",
2442 { {0xAAF16BAC, 0x2B55, 0x45E6, {0x9F, 0x6D, 0x41, 0x5E, 0xB9, 0x49, 0x10, 0xDF}},
2443 "???","Unspecified Property Set",
2446 { {0x821437D6, 0x9EAB, 0x4765, {0xA5, 0x89, 0x3B, 0x1C, 0xBB, 0xD2, 0x2A, 0x61}},
2447 "???","Unspecified Property Set",
2450 { {0xD55BAE5A, 0x3892, 0x417A, {0xA6, 0x49, 0xC6, 0xAC, 0x5A, 0xAA, 0xEA, 0xB3}},
2451 "???","Unspecified Property Set",
2454 { {0x72FC5BA4, 0x24F9, 0x4011, {0x9F, 0x3F, 0xAD, 0xD2, 0x7A, 0xFA, 0xD8, 0x18}},
2455 "???","Unspecified Property Set",
2458 { {0x0BA7D6C3, 0x568D, 0x4159, {0xAB, 0x91, 0x78, 0x1A, 0x91, 0xFB, 0x71, 0xE5}},
2459 "???","Unspecified Property Set",
2462 { {0x744C8242, 0x4DF5, 0x456C, {0xAB, 0x9E, 0x01, 0x4E, 0xFB, 0x90, 0x21, 0xE3}},
2463 "???","Unspecified Property Set",
2466 { {0xB9B4B3FC, 0x2B51, 0x4A42, {0xB5, 0xD8, 0x32, 0x41, 0x46, 0xAF, 0xCF, 0x25}},
2467 "???","Unspecified Property Set",
2470 { {0x5DC2253F, 0x5E11, 0x4ADF, {0x9C, 0xFE, 0x91, 0x0D, 0xD0, 0x1E, 0x3E, 0x70}},
2471 "???","Unspecified Property Set",
2474 { {0x7B9F6399, 0x0A3F, 0x4B12, {0x89, 0xBD, 0x4A, 0xDC, 0x51, 0xC9, 0x18, 0xAF}},
2475 "???","Unspecified Property Set",
2478 { {0x8589E481, 0x6040, 0x473D, {0xB1, 0x71, 0x7F, 0xA8, 0x9C, 0x27, 0x08, 0xED}},
2479 "???","Unspecified Property Set",
2482 { {0x5DA84765, 0xE3FF, 0x4278, {0x86, 0xB0, 0xA2, 0x79, 0x67, 0xFB, 0xDD, 0x03}},
2483 "???","Unspecified Property Set",
2486 { {0x14977844, 0x6B49, 0x4AAD, {0xA7, 0x14, 0xA4, 0x51, 0x3B, 0xF6, 0x04, 0x60}},
2487 "???","Unspecified Property Set",
2490 { {0x90E5E14E, 0x648B, 0x4826, {0xB2, 0xAA, 0xAC, 0xAF, 0x79, 0x0E, 0x35, 0x13}},
2491 "???","Unspecified Property Set",
2494 { {0x293CA35A, 0x09AA, 0x4DD2, {0xB1, 0x80, 0x1F, 0xE2, 0x45, 0x72, 0x8A, 0x52}},
2495 "???","Unspecified Property Set",
2498 { {0xC8EA94F0, 0xA9E3, 0x4969, {0xA9, 0x4B, 0x9C, 0x62, 0xA9, 0x53, 0x24, 0xE0}},
2499 "???","Unspecified Property Set",
2502 { {0x8B26EA41, 0x058F, 0x43F6, {0xAE, 0xCC, 0x40, 0x35, 0x68, 0x1C, 0xE9, 0x77}},
2503 "???","Unspecified Property Set",
2506 { {0xF21D9941, 0x81F0, 0x471A, {0xAD, 0xEE, 0x4E, 0x74, 0xB4, 0x92, 0x17, 0xED}},
2507 "???","Unspecified Property Set",
2510 { {0xB0B87314, 0xFCF6, 0x4FEB, {0x8D, 0xFF, 0xA5, 0x0D, 0xA6, 0xAF, 0x56, 0x1C}},
2511 "???","Unspecified Property Set",
2514 { {0xCC6F4F24, 0x6083, 0x4BD4, {0x87, 0x54, 0x67, 0x4D, 0x0D, 0xE8, 0x7A, 0xB8}},
2515 "???","Unspecified Property Set",
2518 { {0xA0E74609, 0xB84D, 0x4F49, {0xB8, 0x60, 0x46, 0x2B, 0xD9, 0x97, 0x1F, 0x98}},
2519 "???","Unspecified Property Set",
2522 { {0xD68DBD8A, 0x3374, 0x4B81, {0x99, 0x72, 0x3E, 0xC3, 0x06, 0x82, 0xDB, 0x3D}},
2523 "???","Unspecified Property Set",
2526 { {0x2CBAA8F5, 0xD81F, 0x47CA, {0xB1, 0x7A, 0xF8, 0xD8, 0x22, 0x30, 0x01, 0x31}},
2527 "???","Unspecified Property Set",
2530 { {0x72FAB781, 0xACDA, 0x43E5, {0xB1, 0x55, 0xB2, 0x43, 0x4F, 0x85, 0xE6, 0x78}},
2531 "???","Unspecified Property Set",
2534 { {0x6B8DA074, 0x3B5C, 0x43BC, {0x88, 0x6F, 0x0A, 0x2C, 0xDC, 0xE0, 0x0B, 0x6F}},
2535 "???","Unspecified Property Set",
2538 { {0x18BBD425, 0xECFD, 0x46EF, {0xB6, 0x12, 0x7B, 0x4A, 0x60, 0x34, 0xED, 0xA0}},
2539 "???","Unspecified Property Set",
2542 { {0x276D7BB0, 0x5B34, 0x4FB0, {0xAA, 0x4B, 0x15, 0x8E, 0xD1, 0x2A, 0x18, 0x09}},
2543 "???","Unspecified Property Set",
2546 { {0xFEC690B7, 0x5F30, 0x4646, {0xAE, 0x47, 0x4C, 0xAA, 0xFB, 0xA8, 0x84, 0xA3}},
2547 "???","Unspecified Property Set",
2550 { {0x46B4E8DE, 0xCDB2, 0x440D, {0x88, 0x5C, 0x16, 0x58, 0xEB, 0x65, 0xB9, 0x14}},
2551 "???","Unspecified Property Set",
2554 { {0xF628FD8C, 0x7BA8, 0x465A, {0xA6, 0x5B, 0xC5, 0xAA, 0x79, 0x26, 0x3A, 0x9E}},
2555 "???","Unspecified Property Set",
2558 { {0x7A7D76F4, 0xB630, 0x4BD7, {0x95, 0xFF, 0x37, 0xCC, 0x51, 0xA9, 0x75, 0xC9}},
2559 "???","Unspecified Property Set",
2562 { {0x446F787F, 0x10C4, 0x41CB, {0xA6, 0xC4, 0x4D, 0x03, 0x43, 0x55, 0x15, 0x97}},
2563 "???","Unspecified Property Set",
2566 { {0xA9EA193C, 0xC511, 0x498A, {0xA0, 0x6B, 0x58, 0xE2, 0x77, 0x6D, 0xCC, 0x28}},
2567 "???","Unspecified Property Set",
2570 { {0x97B0AD89, 0xDF49, 0x49CC, {0x83, 0x4E, 0x66, 0x09, 0x74, 0xFD, 0x75, 0x5B}},
2571 "???","Unspecified Property Set",
2574 { {0xF6272D18, 0xCECC, 0x40B1, {0xB2, 0x6A, 0x39, 0x11, 0x71, 0x7A, 0xA7, 0xBD}},
2575 "???","Unspecified Property Set",
2578 { {0x61478C08, 0xB600, 0x4A84, {0xBB, 0xE4, 0xE9, 0x9C, 0x45, 0xF0, 0xA0, 0x72}},
2579 "???","Unspecified Property Set",
2582 { {0xBCCC8A3C, 0x8CEF, 0x42E5, {0x9B, 0x1C, 0xC6, 0x90, 0x79, 0x39, 0x8B, 0xC7}},
2583 "???","Unspecified Property Set",
2586 { {0x9AD5BADB, 0xCEA7, 0x4470, {0xA0, 0x3D, 0xB8, 0x4E, 0x51, 0xB9, 0x94, 0x9E}},
2587 "???","Unspecified Property Set",
2590 { {0xF1A24AA7, 0x9CA7, 0x40F6, {0x89, 0xEC, 0x97, 0xDE, 0xF9, 0xFF, 0xE8, 0xDB}},
2591 "???","Unspecified Property Set",
2594 { {0x3602C812, 0x0F3B, 0x45F0, {0x85, 0xAD, 0x60, 0x34, 0x68, 0xD6, 0x94, 0x23}},
2595 "???","Unspecified Property Set",
2598 { {0xA6F360D2, 0x55F9, 0x48DE, {0xB9, 0x09, 0x62, 0x0E, 0x09, 0x0A, 0x64, 0x7C}},
2599 "???","Unspecified Property Set",
2602 { {0x897B3694, 0xFE9E, 0x43E6, {0x80, 0x66, 0x26, 0x0F, 0x59, 0x0C, 0x01, 0x00}},
2603 "???","Unspecified Property Set",
2606 { {0x8619A4B6, 0x9F4D, 0x4429, {0x8C, 0x0F, 0xB9, 0x96, 0xCA, 0x59, 0xE3, 0x35}},
2607 "???","Unspecified Property Set",
2610 { {0xA26F4AFC, 0x7346, 0x4299, {0xBE, 0x47, 0xEB, 0x1A, 0xE6, 0x13, 0x13, 0x9F}},
2611 "???","Unspecified Property Set",
2614 { {0xBC4E71CE, 0x17F9, 0x48D5, {0xBE, 0xE9, 0x02, 0x1D, 0xF0, 0xEA, 0x54, 0x09}},
2615 "???","Unspecified Property Set",
2618 { {0x65A98875, 0x3C80, 0x40AB, {0xAB, 0xBC, 0xEF, 0xDA, 0xF7, 0x7D, 0xBE, 0xE2}},
2619 "???","Unspecified Property Set",
2622 { {0x84D8F337, 0x981D, 0x44B3, {0x96, 0x15, 0xC7, 0x59, 0x6D, 0xBA, 0x17, 0xE3}},
2623 "???","Unspecified Property Set",
2626 { {0xBE1A72C6, 0x9A1D, 0x46B7, {0xAF, 0xE7, 0xAF, 0xAF, 0x8C, 0xEF, 0x49, 0x99}},
2627 "???","Unspecified Property Set",
2630 { {0x8F367200, 0xC270, 0x457C, {0xB1, 0xD4, 0xE0, 0x7C, 0x5B, 0xCD, 0x90, 0xC7}},
2631 "???","Unspecified Property Set",
2634 { {0x428040AC, 0xA177, 0x4C8A, {0x97, 0x60, 0xF6, 0xF7, 0x61, 0x22, 0x7F, 0x9A}},
2635 "???","Unspecified Property Set",
2638 { {0xA3B29791, 0x7713, 0x4E1D, {0xBB, 0x40, 0x17, 0xDB, 0x85, 0xF0, 0x18, 0x31}},
2639 "???","Unspecified Property Set",
2642 { {0xBCEEE283, 0x35DF, 0x4D53, {0x82, 0x6A, 0xF3, 0x6A, 0x3E, 0xEF, 0xC6, 0xBE}},
2643 "???","Unspecified Property Set",
2646 { {0x91EFF6F3, 0x2E27, 0x42CA, {0x93, 0x3E, 0x7C, 0x99, 0x9F, 0xBE, 0x31, 0x0B}},
2647 "???","Unspecified Property Set",
2650 { {0x5CBF2787, 0x48CF, 0x4208, {0xB9, 0x0E, 0xEE, 0x5E, 0x5D, 0x42, 0x02, 0x94}},
2651 "???","Unspecified Property Set",
2654 { {0x1B5439E7, 0xEBA1, 0x4AF8, {0xBD, 0xD7, 0x7A, 0xF1, 0xD4, 0x54, 0x94, 0x93}},
2655 "???","Unspecified Property Set",
2658 { {0x08C7CC5F, 0x60F2, 0x4494, {0xAD, 0x75, 0x55, 0xE3, 0xE0, 0xB5, 0xAD, 0xD0}},
2659 "???","Unspecified Property Set",
2662 { {0x7FE3AA27, 0x2648, 0x42F3, {0x89, 0xB0, 0x45, 0x4E, 0x5C, 0xB1, 0x50, 0xC3}},
2663 "???","Unspecified Property Set",
2666 { {0xE53D799D, 0x0F3F, 0x466E, {0xB2, 0xFF, 0x74, 0x63, 0x4A, 0x3C, 0xB7, 0xA4}},
2667 "???","Unspecified Property Set",
2670 { {0x4776CAFA, 0xBCE4, 0x4CB1, {0xA2, 0x3E, 0x26, 0x5E, 0x76, 0xD8, 0xEB, 0x11}},
2671 "???","Unspecified Property Set",
2674 { {0x71B377D6, 0xE570, 0x425F, {0xA1, 0x70, 0x80, 0x9F, 0xAE, 0x73, 0xE5, 0x4E}},
2675 "???","Unspecified Property Set",
2678 { {0x3143BF7C, 0x80A8, 0x4854, {0x88, 0x80, 0xE2, 0xE4, 0x01, 0x89, 0xBD, 0xD0}},
2679 "???","Unspecified Property Set",
2682 { {0xA6744477, 0xC237, 0x475B, {0xA0, 0x75, 0x54, 0xF3, 0x44, 0x98, 0x29, 0x2A}},
2683 "???","Unspecified Property Set",
2686 { {0xC9C34F84, 0x2241, 0x4401, {0xB6, 0x07, 0xBD, 0x20, 0xED, 0x75, 0xAE, 0x7F}},
2687 "???","Unspecified Property Set",
2690 { {0xF8FA7FA3, 0xD12B, 0x4785, {0x8A, 0x4E, 0x69, 0x1A, 0x94, 0xF7, 0xA3, 0xE7}},
2691 "???","Unspecified Property Set",
2694 { {0x7268AF55, 0x1CE4, 0x4F6E, {0xA4, 0x1F, 0xB6, 0xE4, 0xEF, 0x10, 0xE4, 0xA9}},
2695 "???","Unspecified Property Set",
2698 { {0xE1D4A09E, 0xD758, 0x4CD1, {0xB6, 0xEC, 0x34, 0xA8, 0xB5, 0xA7, 0x3F, 0x80}},
2699 "???","Unspecified Property Set",
2702 { {0xD7313FF1, 0xA77A, 0x401C, {0x8C, 0x99, 0x3D, 0xBD, 0xD6, 0x8A, 0xDD, 0x36}},
2703 "???","Unspecified Property Set",
2706 { {0xF85BF840, 0xA925, 0x4BC2, {0xB0, 0xC4, 0x8E, 0x36, 0xB5, 0x98, 0x67, 0x9E}},
2707 "???","Unspecified Property Set",
2710 { {0x668CDFA5, 0x7A1B, 0x4323, {0xAE, 0x4B, 0xE5, 0x27, 0x39, 0x3A, 0x1D, 0x81}},
2711 "???","Unspecified Property Set",
2714 { {0xEE3D3D8A, 0x5381, 0x4CFA, {0xB1, 0x3B, 0xAA, 0xF6, 0x6B, 0x5F, 0x4E, 0xC9}},
2715 "???","Unspecified Property Set",
2718 { {0xD0C7F054, 0x3F72, 0x4725, {0x85, 0x27, 0x12, 0x9A, 0x57, 0x7C, 0xB2, 0x69}},
2719 "???","Unspecified Property Set",
2722 { {0x3C8CEE58, 0xD4F0, 0x4CF9, {0xB7, 0x56, 0x4E, 0x5D, 0x24, 0x44, 0x7B, 0xCD}},
2723 "???","Unspecified Property Set",
2726 { {0x6E682923, 0x7F7B, 0x4F0C, {0xA3, 0x37, 0xCF, 0xCA, 0x29, 0x66, 0x87, 0xBF}},
2727 "???","Unspecified Property Set",
2730 { {0xFD122953, 0xFA93, 0x4EF7, {0x92, 0xC3, 0x04, 0xC9, 0x46, 0xB2, 0xF7, 0xC8}},
2731 "???","Unspecified Property Set",
2734 { {0x0BE1C8E7, 0x1981, 0x4676, {0xAE, 0x14, 0xFD, 0xD7, 0x8F, 0x05, 0xA6, 0xE7}},
2735 "???","Unspecified Property Set",
2738 { {0xF1176DFE, 0x7138, 0x4640, {0x8B, 0x4C, 0xAE, 0x37, 0x5D, 0xC7, 0x0A, 0x6D}},
2739 "???","Unspecified Property Set",
2742 { {0x95BEB1FC, 0x326D, 0x4644, {0xB3, 0x96, 0xCD, 0x3E, 0xD9, 0x0E, 0x6D, 0xDF}},
2743 "???","Unspecified Property Set",
2746 { {0xDDD1460F, 0xC0BF, 0x4553, {0x8C, 0xE4, 0x10, 0x43, 0x3C, 0x90, 0x8F, 0xB0}},
2747 "???","Unspecified Property Set",
2750 { {0x9B174B34, 0x40FF, 0x11D2, {0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71}},
2751 "???","Unspecified Property Set",
2754 { {0x08A65AA1, 0xF4C9, 0x43DD, {0x9D, 0xDF, 0xA3, 0x3D, 0x8E, 0x7E, 0xAD, 0x85}},
2755 "???","Unspecified Property Set",
2758 { {0x084D8A0A, 0xE6D5, 0x40DE, {0xBF, 0x1F, 0xC8, 0x82, 0x0E, 0x7C, 0x87, 0x7C}},
2759 "???","Unspecified Property Set",
2762 { {0x841E4F90, 0xFF59, 0x4D16, {0x89, 0x47, 0xE8, 0x1B, 0xBF, 0xFA, 0xB3, 0x6D}},
2763 "???","Unspecified Property Set",
2766 { {0xFC9F7306, 0xFF8F, 0x4D49, {0x9F, 0xB6, 0x3F, 0xFE, 0x5C, 0x09, 0x51, 0xEC}},
2767 "???","Unspecified Property Set",
2770 { {0x53DA57CF, 0x62C0, 0x45C4, {0x81, 0xDE, 0x76, 0x10, 0xBC, 0xEF, 0xD7, 0xF5}},
2771 "???","Unspecified Property Set",
2774 { {0xF8D3F6AC, 0x4874, 0x42CB, {0xBE, 0x59, 0xAB, 0x45, 0x4B, 0x30, 0x71, 0x6A}},
2775 "???","Unspecified Property Set",
2778 { {0x4684FE97, 0x8765, 0x4842, {0x9C, 0x13, 0xF0, 0x06, 0x44, 0x7B, 0x17, 0x8C}},
2779 "???","Unspecified Property Set",
2782 { {0xC449D5CB, 0x9EA4, 0x4809, {0x82, 0xE8, 0xAF, 0x9D, 0x59, 0xDE, 0xD6, 0xD1}},
2783 "???","Unspecified Property Set",
2786 { {0x3F8472B5, 0xE0AF, 0x4DB2, {0x80, 0x71, 0xC5, 0x3F, 0xE7, 0x6A, 0xE7, 0xCE}},
2787 "???","Unspecified Property Set",
2790 { {0x0CEF7D53, 0xFA64, 0x11D1, {0xA2, 0x03, 0x00, 0x00, 0xF8, 0x1F, 0xED, 0xEE}},
2791 "???","Unspecified Property Set",
2794 { {0xFDF84370, 0x031A, 0x4ADD, {0x9E, 0x91, 0x0D, 0x77, 0x5F, 0x1C, 0x66, 0x05}},
2795 "???","Unspecified Property Set",
2798 { {0x6D748DE2, 0x8D38, 0x4CC3, {0xAC, 0x60, 0xF0, 0x09, 0xB0, 0x57, 0xC5, 0x57}},
2799 "???","Unspecified Property Set",
2802 { {0x2579E5D0, 0x1116, 0x4084, {0xBD, 0x9A, 0x9B, 0x4F, 0x7C, 0xB4, 0xDF, 0x5E}},
2803 "???","Unspecified Property Set",
2806 { {0xC554493C, 0xC1F7, 0x40C1, {0xA7, 0x6C, 0xEF, 0x8C, 0x06, 0x14, 0x00, 0x3E}},
2807 "???","Unspecified Property Set",
2810 { {0x0DA41CFA, 0xD224, 0x4A18, {0xAE, 0x2F, 0x59, 0x61, 0x58, 0xDB, 0x4B, 0x3A}},
2811 "???","Unspecified Property Set",
2814 { {0xA82D9EE7, 0xCA67, 0x4312, {0x96, 0x5E, 0x22, 0x6B, 0xCE, 0xA8, 0x50, 0x23}},
2815 "???","Unspecified Property Set",
2818 { {0x09329B74, 0x40A3, 0x4C68, {0xBF, 0x07, 0xAF, 0x9A, 0x57, 0x2F, 0x60, 0x7C}},
2819 "???","Unspecified Property Set",
2822 { {0x9A93244D, 0xA7AD, 0x4FF8, {0x9B, 0x99, 0x45, 0xEE, 0x4C, 0xC0, 0x9A, 0xF6}},
2823 "???","Unspecified Property Set",
2826 { {0xF04BEF95, 0xC585, 0x4197, {0xA2, 0xB7, 0xDF, 0x46, 0xFD, 0xC9, 0xEE, 0x6D}},
2827 "???","Unspecified Property Set",
2830 { {0x59DDE9F2, 0x5253, 0x40EA, {0x9A, 0x8B, 0x47, 0x9E, 0x96, 0xC6, 0x24, 0x9A}},
2831 "???","Unspecified Property Set",
2834 { {0x6444048F, 0x4C8B, 0x11D1, {0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03}},
2835 "???","Unspecified Property Set",
2838 { {0x9A9BC088, 0x4F6D, 0x469E, {0x99, 0x19, 0xE7, 0x05, 0x41, 0x20, 0x40, 0xF9}},
2839 "???","Unspecified Property Set",
2842 { {0x6336B95E, 0xC7A7, 0x426D, {0x86, 0xFD, 0x7A, 0xE3, 0xD3, 0x9C, 0x84, 0xB4}},
2843 "???","Unspecified Property Set",
2846 { {0xC06238B2, 0x0BF9, 0x4279, {0xA7, 0x23, 0x25, 0x85, 0x67, 0x15, 0xCB, 0x9D}},
2847 "???","Unspecified Property Set",
2850 { {0xEC0B4191, 0xAB0B, 0x4C66, {0x90, 0xB6, 0xC6, 0x63, 0x7C, 0xDE, 0xBB, 0xAB}},
2851 "???","Unspecified Property Set",
2854 { {0x660E04D6, 0x81AB, 0x4977, {0xA0, 0x9F, 0x82, 0x31, 0x31, 0x13, 0xAB, 0x26}},
2855 "???","Unspecified Property Set",
2858 { {0xDC54FD2E, 0x189D, 0x4871, {0xAA, 0x01, 0x08, 0xC2, 0xF5, 0x7A, 0x4A, 0xBC}},
2859 "???","Unspecified Property Set",
2862 { {0xCD102C9C, 0x5540, 0x4A88, {0xA6, 0xF6, 0x64, 0xE4, 0x98, 0x1C, 0x8C, 0xD1}},
2863 "???","Unspecified Property Set",
2866 { {0x1F856A9F, 0x6900, 0x4ABA, {0x95, 0x05, 0x2D, 0x5F, 0x1B, 0x4D, 0x66, 0xCB}},
2867 "???","Unspecified Property Set",
2870 { {0x90197CA7, 0xFD8F, 0x4E8C, {0x9D, 0xA3, 0xB5, 0x7E, 0x1E, 0x60, 0x92, 0x95}},
2871 "???","Unspecified Property Set",
2874 { {0xF334115E, 0xDA1B, 0x4509, {0x9B, 0x3D, 0x11, 0x95, 0x04, 0xDC, 0x7A, 0xBB}},
2875 "???","Unspecified Property Set",
2878 { {0xBF53D1C3, 0x49E0, 0x4F7F, {0x85, 0x67, 0x5A, 0x82, 0x1D, 0x8A, 0xC5, 0x42}},
2879 "???","Unspecified Property Set",
2882 { {0xC75FAA05, 0x96FD, 0x49E7, {0x9C, 0xB4, 0x9F, 0x60, 0x10, 0x82, 0xD5, 0x53}},
2883 "???","Unspecified Property Set",
2886 { {0x2E4B640D, 0x5019, 0x46D8, {0x88, 0x81, 0x55, 0x41, 0x4C, 0xC5, 0xCA, 0xA0}},
2887 "???","Unspecified Property Set",
2890 { {0x6B8B68F6, 0x200B, 0x47EA, {0x8D, 0x25, 0xD8, 0x05, 0x0F, 0x57, 0x33, 0x9F}},
2891 "???","Unspecified Property Set",
2894 { {0x2D152B40, 0xCA39, 0x40DB, {0xB2, 0xCC, 0x57, 0x37, 0x25, 0xB2, 0xFE, 0xC5}},
2895 "???","Unspecified Property Set",
2898 { {0x1E005EE6, 0xBF27, 0x428B, {0xB0, 0x1C, 0x79, 0x67, 0x6A, 0xCD, 0x28, 0x70}},
2899 "???","Unspecified Property Set",
2902 { {0xD6304E01, 0xF8F5, 0x4F45, {0x8B, 0x15, 0xD0, 0x24, 0xA6, 0x29, 0x67, 0x89}},
2903 "???","Unspecified Property Set",
2906 { {0x402B5934, 0xEC5A, 0x48C3, {0x93, 0xE6, 0x85, 0xE8, 0x6A, 0x2D, 0x93, 0x4E}},
2907 "???","Unspecified Property Set",
2910 { {0x9AEBAE7A, 0x9644, 0x487D, {0xA9, 0x2C, 0x65, 0x75, 0x85, 0xED, 0x75, 0x1A}},
2911 "???","Unspecified Property Set",
2914 { {0x63C25B20, 0x96BE, 0x488F, {0x87, 0x88, 0xC0, 0x9C, 0x40, 0x7A, 0xD8, 0x12}},
2915 "???","Unspecified Property Set",
2918 { {0x48FD6EC8, 0x8A12, 0x4CDF, {0xA0, 0x3E, 0x4E, 0xC5, 0xA5, 0x11, 0xED, 0xDE}},
2919 "???","Unspecified Property Set",
2922 { {0x64440491, 0x4C8B, 0x11D1, {0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03}},
2923 "???","Unspecified Property Set",
2926 { {0xC0AC206A, 0x827E, 0x4650, {0x95, 0xAE, 0x77, 0xE2, 0xBB, 0x74, 0xFC, 0xC9}},
2927 "???","Unspecified Property Set",
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)"},
2942 static const struct GuidPropertySet
*GuidPropertySet_find_guid(const e_guid_t
*guid
)
2945 for (i
=0; i
<array_length(GuidPropertySet
); i
++) {
2946 if (guid_cmp(&GuidPropertySet
[i
].guid
, guid
) == 0) {
2947 return &GuidPropertySet
[i
];
2953 static void get_name_from_fullpropspec(struct CFullPropSpec
*v
, char *out
, int bufsize
)
2955 const struct GuidPropertySet
*pset
= GuidPropertySet_find_guid(&v
->guid
);
2956 const char *id_str
, *guid_str
;
2958 id_str
= pset
? try_val_to_str(v
->u
.propid
, pset
->id_map
) : NULL
;
2961 snprintf(dest
, bufsize
, "%s", id_str
);
2963 guid_str
= guids_get_guid_name(&v
->guid
, wmem_packet_scope());
2965 snprintf(dest
, bufsize
, "\"%s\"", guid_str
);
2967 guid_str
= guid_to_str(wmem_packet_scope(), &v
->guid
);
2968 snprintf(dest
, bufsize
, "{%s}", guid_str
);
2970 if (v
->kind
== PRSPEC_LPWSTR
) {
2971 snprintf(dest
, bufsize
, "%s \"%s\"", guid_str
, v
->u
.name
);
2972 } else if (v
->kind
== PRSPEC_PROPID
) {
2973 snprintf(dest
, bufsize
, "%s 0x%08x", guid_str
, v
->u
.propid
);
2975 char *str
= ws_strdup_printf("%s <INVALID>", dest
);
2976 g_strlcpy(dest
, str
, bufsize
);
2982 /******************************************************************************/
2983 static int parse_uin32_array(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
, uint32_t count
, const char *fmt
, ...)
2991 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
2993 proto_tree_add_subtree(tree
, tvb
, offset
, count
* 4, ett_mswsp_uin32_array
, &item
, txt
);
2994 proto_item_append_text(item
, " count %u [", count
);
2995 for (i
=0; i
<count
; i
++) {
2996 v
= tvb_get_letohl(tvb
, offset
);
2999 proto_item_append_text(item
, ",%u", v
);
3001 proto_item_append_text(item
, "%u", v
);
3004 proto_item_append_text(item
, "]");
3008 static int parse_padding(tvbuff_t
*tvb
, int offset
, int alignment
, proto_tree
*pad_tree
, const char *fmt
, ...)
3010 if (offset
% alignment
) {
3011 const int padding
= alignment
- (offset
% alignment
);
3016 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
3017 proto_tree_add_subtree(pad_tree
, tvb
, offset
, padding
, ett_mswsp_msg_padding
, &ti
, txt
);
3020 proto_item_append_text(ti
, " (%d)", padding
);
3023 DISSECTOR_ASSERT((offset
% alignment
) == 0);
3027 static int parse_guid(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
, e_guid_t
*guid
, const char *text
)
3029 const char *guid_str
, *name
, *bytes
;
3032 tvb_get_letohguid(tvb
, offset
, guid
);
3033 guid_str
= guid_to_str(wmem_packet_scope(), guid
);
3034 name
= guids_get_guid_name(guid
, wmem_packet_scope());
3036 tr
= proto_tree_add_subtree_format(tree
, tvb
, offset
, 16, ett_GUID
, NULL
, "%s: %s {%s}", text
, name
? name
: "", guid_str
);
3039 proto_tree_add_item(tr
, hf_mswsp_guid_time_low
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
3041 proto_tree_add_item(tr
, hf_mswsp_guid_time_mid
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
3043 proto_tree_add_item(tr
, hf_mswsp_guid_time_high
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
3045 proto_tree_add_item(tr
, hf_mswsp_guid_time_clock_hi
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
3047 proto_tree_add_item(tr
, hf_mswsp_guid_time_clock_low
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
3049 bytes
= bytes_to_str_punct(wmem_packet_scope(), &guid
->data4
[2], 6, ':');
3050 proto_tree_add_string(tr
, hf_mswsp_guid_node
, tvb
, offset
, 6, bytes
);
3057 /* Language Code ID - MS-LCID section 2.2 "LCID Structure":
3059 * https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/63d3d639-7fd2-4afb-abbe-0d5b5551eef8
3061 static int parse_lcid(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, const char *text
)
3067 lcid
= tvb_get_letohl(tvb
, offset
);
3068 item
= proto_tree_add_uint_format(parent_tree
, hf_mswsp_lcid
, tvb
, offset
, 4, lcid
, "%s: 0x%x", text
, lcid
);
3069 tree
= proto_item_add_subtree(item
, ett_LCID
);
3071 proto_tree_add_uint(tree
, hf_mswsp_lcid_langid
, tvb
, offset
+ 2, 2, lcid
);
3072 proto_tree_add_uint(tree
, hf_mswsp_lcid_sortid
, tvb
, offset
+ 1, 1, (lcid
>> 16) & 0xF);
3077 /*****************************************************************************************/
3078 /* 2.2.1.1 CBaseStorageVariant */
3079 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
);
3081 /* 2.2.1.2 CFullPropSpec */
3082 static int parse_CFullPropSpec(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
, proto_tree
*pad_tree
, struct CFullPropSpec
*v
, const char *fmt
, ...);
3084 /* 2.2.1.3 CContentRestriction */
3085 static int parse_CContentRestriction(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, struct CContentRestriction
*v
, const char *fmt
, ...);
3087 /* 2.2.1.5 CNatLanguageRestriction */
3088 static int parse_CNatLanguageRestriction(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, struct CNatLanguageRestriction
*v
, const char *fmt
, ...);
3090 /* 2.2.1.6 CNodeRestriction */
3091 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
, ...);
3093 /* 2.2.1.7 CPropertyRestriction */
3094 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
, ...);
3096 /* 2.2.1.8 CReuseWhere */
3097 static int parse_CReuseWhere(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree _U_
, struct CReuseWhere
*v
, const char *fmt
, ...);
3099 /* 2.2.1.10 CSort */
3100 static int parse_CSort(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree _U_
, const char *fmt
, ...);
3102 /* 2.2.1.12 CCoercionRestriction */
3103 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
, ...);
3104 /* 2.2.1.16 CRestrictionArray */
3105 static int parse_CRestrictionArray(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3107 /* 2.2.1.17 CRestriction */
3108 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
, ...);
3110 /* 2.2.1.18 CColumnSet */
3111 static int parse_CColumnSet(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
, const char *fmt
, ...);
3113 /* 2.2.1.20 CCategorizationSpec */
3114 static int parse_CCategorizationSpec(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3116 /* 2.2.1.21 CCategSpec */
3117 static int parse_CCategSpec(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3119 /* 2.2.1.22 CRangeCategSpec */
3120 static int parse_CRangeCategSpec(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3122 /* 2.2.1.23 RANGEBOUNDARY */
3123 static int parse_RANGEBOUNDARY(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3125 /* 2.2.1.24 CAggregSet */
3126 static int parse_CAggregSet(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3128 /* 2.2.1.25 CAggregSpec */
3129 static int parse_CAggregSpec(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3131 /* 2.2.1.26 CSortAggregSet */
3132 static int parse_CSortAggregSet(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3134 /* 2.2.1.27 CAggregSortKey */
3135 static int parse_CAggregSortKey(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3137 /* 2.2.1.28 CInGroupSortAggregSets */
3138 static int parse_CInGroupSortAggregSets(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3140 /* 2.2.1.29 CInGroupSortAggregSet */
3141 static int parse_CInGroupSortAggregSet(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3143 /* 2.2.1.30 CDbColId */
3144 static int parse_CDbColId(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *text
);
3146 /* 2.2.1.31 CDbProp */
3147 static int parse_CDbProp(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const struct GuidPropertySet
*propset
, const char *fmt
, ...);
3149 /* 2.2.1.32 CDbPropSet */
3150 static int parse_CDbPropSet(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3152 /* 2.2.1.33 CPidMapper */
3153 static int parse_CPidMapper(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3155 /* 2.2.1.34 CColumnGroupArray */
3156 static int parse_CColumnGroupArray(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3158 /* 2.2.1.35 CColumnGroup */
3159 static int parse_CColumnGroup(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3161 /* 2.2.1.41 CRowsetProperties */
3162 static int parse_CRowsetProperties(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3164 /* 2.2.1.43 CSortSet */
3165 static int parse_CSortSet(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...);
3167 /* 2.2.1.44 CTableColumn */
3168 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
, ...);
3172 2.2.1.4 CInternalPropertyRestriction
3173 2.2.1.9 CScopeRestriction
3174 2.2.1.11 CVectorRestriction
3175 2.2.1.13 CRelDocRestriction
3176 2.2.1.14 CProbRestriction
3177 2.2.1.15 CFeedbackRestriction
3178 2.2.1.19 CCategorizationSet
3179 2.2.1.45 SERIALIZEDPROPERTYVALUE
3180 2.2.1.46 CCompletionCategSp
3183 static int parse_CSort(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree _U_
, const char *fmt
, ...)
3185 uint32_t col
, ord
, ind
;
3193 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
3195 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CSort
, &item
, txt
);
3197 col
= tvb_get_letohl(tvb
, offset
);
3198 proto_tree_add_uint(tree
, hf_mswsp_cscort_column
, tvb
, offset
, 4, col
);
3201 ord
= tvb_get_letohl(tvb
, offset
);
3202 proto_tree_add_uint(tree
, hf_mswsp_cscort_order
, tvb
, offset
, 4, ord
);
3205 ind
= tvb_get_letohl(tvb
, offset
);
3206 proto_tree_add_uint(tree
, hf_mswsp_cscort_individual
, tvb
, offset
, 4, ind
);
3209 offset
= parse_lcid(tvb
, offset
, tree
, "lcid");
3211 proto_item_set_end(item
, tvb
, offset
);
3215 static int parse_CSortSet(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
3225 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
3227 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CSortSet
, &item
, txt
);
3229 count
= tvb_get_letohl(tvb
, offset
);
3230 proto_tree_add_uint(tree
, hf_mswsp_cscortset_count
, tvb
, offset
, 4, count
);
3233 for (i
=0; i
<count
; i
++) {
3234 offset
= parse_padding(tvb
, offset
, 4, tree
, "padding_sortArray[%u]", i
);
3235 offset
= parse_CSort(tvb
, offset
, tree
, pad_tree
, "sortArray[%u]", i
);
3238 proto_item_set_end(item
, tvb
, offset
);
3242 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
, ...)
3246 proto_item
*item
, *ti_type
;
3249 struct vtype_data
*type
;
3250 enum vType vtype_val
= VT_EMPTY
;
3251 enum vType vtype_valhi
= VT_EMPTY
;
3252 struct CFullPropSpec v
;
3256 const char *modifier
= "";
3258 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
3260 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CTableColumn
, &item
, txt
);
3262 offset
= parse_CFullPropSpec(tvb
, offset
, tree
, pad_tree
, &v
, "PropSpec");
3263 get_name_from_fullpropspec(&v
, col
->name
, PROP_LENGTH
);
3264 col
->vtype
= tvb_get_letohl(tvb
, offset
);
3265 vtype_val
= (enum vType
)col
->vtype
;
3266 vtype_valhi
= (enum vType
)(col
->vtype
& 0xFF00);
3268 if (vtype_valhi
== VT_VECTOR
) {
3269 modifier
= "|VT_VECTOR";
3270 } else if (vtype_valhi
== VT_ARRAY
) {
3271 modifier
= "|VT_ARRAY";
3273 modifier
= "|(Unknown, possibly error)";
3276 type
= vType_get_type(vtype_val
);
3281 ti_type
= proto_tree_add_string(tree
, hf_mswsp_ctablecolumn_vtype
, tvb
, offset
, 4, "Unknown CTableColumn type");
3282 expert_add_info(pinfo
, ti_type
, &ei_mswsp_invalid_variant_type
);
3284 proto_tree_add_string_format_value(tree
, hf_mswsp_ctablecolumn_vtype
, tvb
, offset
, 4, type
->str
, "%s%s", type
->str
, modifier
);
3287 used
= tvb_get_uint8(tvb
, offset
);
3288 col
->aggregateused
= used
;
3289 proto_tree_add_uint(tree
, hf_mswsp_ctablecolumn_aggused
, tvb
, offset
, 1, used
);
3293 col
->aggregatetype
= tvb_get_uint8(tvb
, offset
);
3294 proto_tree_add_string(tree
, hf_mswsp_ctablecolumn_aggtype
, tvb
, offset
, 1, val_to_str(col
->aggregatetype
, DBAGGTTYPE
, "(Unknown: 0x%x)"));
3297 col
->valueused
= tvb_get_uint8(tvb
, offset
);
3298 used
= col
->valueused
;
3299 proto_tree_add_uint(tree
, hf_mswsp_ctablecolumn_valused
, tvb
, offset
, 1, used
);
3303 offset
= parse_padding(tvb
, offset
, 2, pad_tree
, "padding_Value");
3305 col
->valueoffset
= tvb_get_letohs(tvb
, offset
);
3306 proto_tree_add_uint(tree
, hf_mswsp_ctablecolumn_valoffset
, tvb
, offset
, 2, col
->valueoffset
);
3309 col
->valuesize
= tvb_get_letohs(tvb
, offset
);
3310 proto_tree_add_uint(tree
, hf_mswsp_ctablecolumn_valsize
, tvb
, offset
, 2, col
->valuesize
);
3314 used
= tvb_get_uint8(tvb
, offset
);
3315 col
->statusused
= used
;
3316 proto_tree_add_uint(tree
, hf_mswsp_ctablecolumn_statused
, tvb
, offset
, 1, used
);
3320 offset
= parse_padding(tvb
, offset
, 2, pad_tree
, "padding_Status");
3322 col
->statusoffset
= tvb_get_letohs(tvb
, offset
);
3323 proto_tree_add_uint(tree
, hf_mswsp_ctablecolumn_statoffset
, tvb
, offset
, 2, col
->statusoffset
);
3327 used
= tvb_get_uint8(tvb
, offset
);
3328 proto_tree_add_uint(tree
, hf_mswsp_ctablecolumn_lenused
, tvb
, offset
, 1, used
);
3329 col
->lengthused
= used
;
3333 offset
= parse_padding(tvb
, offset
, 2, pad_tree
, "padding_Length");
3335 col
->lengthoffset
= tvb_get_letohs(tvb
, offset
);
3336 proto_tree_add_uint(tree
, hf_mswsp_ctablecolumn_lenoffset
, tvb
, offset
, 2, col
->lengthoffset
);
3340 proto_item_set_end(item
, tvb
, offset
);
3344 static int parse_PRSPEC_Kind(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
, enum PRSPEC_Kind
*prspec
)
3346 static const value_string KIND
[] = {
3347 {0, "PRSPEC_LPWSTR"},
3348 {1, "PRSPEC_PROPID"},
3352 int32_t kind
= tvb_get_letohl(tvb
, offset
);
3353 DISSECTOR_ASSERT(kind
< (PRSPEC_PROPID
+ 1));
3355 *prspec
= PRSPEC_PROPID
;
3357 *prspec
= PRSPEC_LPWSTR
;
3359 proto_tree_add_string(tree
, hf_mswsp_cfullpropspec_kind
, tvb
, offset
, 4, val_to_str(*prspec
, KIND
, "(Unknown: 0x%x)"));
3364 static int parse_CFullPropSpec(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, struct CFullPropSpec
*v
, const char *fmt
, ...)
3366 const struct GuidPropertySet
*pset
;
3367 const char *id_str
, *guid_str
, *txt
;
3374 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
3376 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CFullPropSpec
, &item
, txt
);
3378 offset
= parse_padding(tvb
, offset
, 8, pad_tree
, "paddingPropSet");
3380 offset
= parse_guid(tvb
, offset
, tree
, &v
->guid
, "GUID");
3381 pset
= GuidPropertySet_find_guid(&v
->guid
);
3383 offset
= parse_PRSPEC_Kind(tvb
, offset
, tree
, &v
->kind
);
3385 v
->u
.propid
= tvb_get_letohl(tvb
, offset
);
3386 proto_tree_add_uint(tree
, hf_mswsp_cfullpropspec_propid
, tvb
, offset
, 4, v
->u
.propid
);
3389 if (v
->kind
== PRSPEC_LPWSTR
) {
3390 int len
= 2*v
->u
.propid
;
3391 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
);
3395 id_str
= pset
? try_val_to_str(v
->u
.propid
, pset
->id_map
) : NULL
;
3398 proto_item_append_text(item
, ": %s", id_str
);
3400 guid_str
= guids_get_guid_name(&v
->guid
, wmem_packet_scope());
3402 proto_item_append_text(item
, ": \"%s\"", guid_str
);
3404 guid_str
= guid_to_str(wmem_packet_scope(), &v
->guid
);
3405 proto_item_append_text(item
, ": {%s}", guid_str
);
3408 if (v
->kind
== PRSPEC_LPWSTR
) {
3409 proto_item_append_text(item
, " \"%s\"", v
->u
.name
);
3410 } else if (v
->kind
== PRSPEC_PROPID
) {
3411 proto_item_append_text(item
, " 0x%08x", v
->u
.propid
);
3413 proto_item_append_text(item
, " <INVALID>");
3417 proto_item_set_end(item
, tvb
, offset
);
3423 static const value_string PR_VALS
[] = {
3431 {PRAllBits
, "PRAllBits"},
3432 {PRSomeBits
, "PRSomeBits"},
3438 static int parse_relop(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
, uint32_t *relop
, const char **str
)
3440 const char *str1
= NULL
, *str2
= NULL
;
3441 uint32_t tmp
= tvb_get_letohl(tvb
, offset
);
3442 uint32_t modifier
= (tmp
& 0xF00);
3443 DISSECTOR_ASSERT((tmp
& 0xf) < PRSomeBits
+1);
3471 *relop
= PRSomeBits
;
3477 str2
= val_to_str(*relop
, PR_VALS
, "0x%04x");
3482 *relop
= *relop
| PRAll
;
3488 DISSECTOR_ASSERT(false);
3491 str1
= try_val_to_str((modifier
), PR_VALS
);
3493 str1
= wmem_strdup_printf(wmem_packet_scope(), "%s | ", str1
);
3494 str2
= wmem_strdup_printf(wmem_packet_scope(), "%s%s", str1
, str2
);
3497 proto_tree_add_string_format_value(tree
, hf_mswsp_cproprestrict_relop
, tvb
, offset
, 4, str2
, "%s (0x%04x)", str2
[0]=='\0' ? "" : str2
, *relop
);
3504 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
, ...)
3508 const char *txt
, *str
= NULL
;
3512 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
3515 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CPropertyRestriction
, &item
, txt
);
3517 offset
= parse_relop(tvb
, offset
, tree
, &v
->relop
, &str
);
3518 proto_item_append_text(item
, " Op: %s", str
);
3520 offset
= parse_CFullPropSpec(tvb
, offset
, tree
, pad_tree
, &v
->property
, "Property");
3522 offset
= parse_CBaseStorageVariant(tvb
, pinfo
, offset
, tree
, pad_tree
, &v
->prval
, "prval");
3524 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "padding_lcid");
3526 v
->lcid
= tvb_get_letohl(tvb
, offset
);
3527 offset
= parse_lcid(tvb
, offset
, tree
, "lcid");
3529 proto_item_set_end(item
, tvb
, offset
);
3534 // NOLINTNEXTLINE(misc-no-recursion)
3535 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
, ...)
3543 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
3546 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CCoercionRestriction
, &item
, txt
);
3548 v
->value
= tvb_get_letohieee_float(tvb
, offset
);
3549 proto_tree_add_float(tree
, hf_mswsp_ccoercerestrict_value
, tvb
, offset
, 4, v
->value
);
3553 offset
= parse_CRestriction(tvb
, pinfo
, offset
, tree
, pad_tree
, &v
->child
, "child");
3555 proto_item_set_end(item
, tvb
, offset
);
3559 static int parse_CContentRestriction(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, struct CContentRestriction
*v
, const char *fmt
, ...)
3569 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
3572 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CContentRestriction
, &item
, txt
);
3574 offset
= parse_CFullPropSpec(tvb
, offset
, tree
, pad_tree
, &v
->property
, "Property");
3576 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "Padding1");
3578 cc
= tvb_get_letohl(tvb
, offset
);
3579 proto_tree_add_uint(tree
, hf_mswsp_ccontentrestrict_cc
, tvb
, offset
, 4, cc
);
3582 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
);
3585 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "Padding2");
3587 v
->lcid
= tvb_get_letohl(tvb
, offset
);
3588 offset
= parse_lcid(tvb
, offset
, tree
, "lcid");
3590 v
->method
= tvb_get_letohl(tvb
, offset
);
3591 proto_tree_add_uint(tree
, hf_mswsp_ccontentrestrict_method
, tvb
, offset
, 4, v
->method
);
3594 proto_item_set_end(item
, tvb
, offset
);
3598 int parse_CNatLanguageRestriction(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, struct CNatLanguageRestriction
*v
, const char *fmt
, ...)
3608 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
3611 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CNatLanguageRestriction
, &item
, txt
);
3613 offset
= parse_CFullPropSpec(tvb
, offset
, tree
, pad_tree
, &v
->property
, "Property");
3615 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "padding_cc");
3617 cc
= tvb_get_letohl(tvb
, offset
);
3618 proto_tree_add_uint(tree
, hf_mswsp_natlangrestrict_cc
, tvb
, offset
, 4, cc
);
3621 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
);
3624 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "padding_lcid");
3626 v
->lcid
= tvb_get_letohl(tvb
, offset
);
3627 offset
= parse_lcid(tvb
, offset
, tree
, "lcid");
3629 proto_item_set_end(item
, tvb
, offset
);
3634 static int parse_CReuseWhere(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree _U_
, struct CReuseWhere
*v
, const char *fmt
, ...)
3641 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
3644 proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_mswsp_msg_creusewhere
, &item
, txt
);
3645 v
->whereId
= tvb_get_letohl(tvb
, offset
);
3648 proto_item_append_text(item
, " Id: %u", v
->whereId
);
3650 proto_item_set_end(item
, tvb
, offset
);
3654 static const value_string RT_VALS
[] = {
3659 {RTContent
, "RTContent"},
3660 {RTProperty
, "RTProperty"},
3661 {RTProximity
, "RTProximity"},
3663 {RTNatLanguage
, "RTNatLanguage"},
3664 {RTScope
, "RTScope"},
3665 {RTCoerce_Add
, "RTCoerce_Add"},
3666 {RTCoerce_Multiply
, "RTCoerce_Multiply"},
3667 {RTCoerce_Absolute
, "RTCoerce_Absolute"},
3669 {RTFeedback
, "RTFeedback"},
3670 {RTReldoc
, "RTReldoc"},
3671 {RTReuseWhere
, "RTReuseWhere"},
3672 {RTInternalProp
, "RTInternalProp"},
3673 {RTPhrase
, "RTInternalProp"},
3677 #define EP_ALLOC(T) wmem_new(wmem_packet_scope(), T)
3679 static int parse_rType(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
, enum rType
*rtype
, const char **str
)
3681 const char *txt
= NULL
;
3682 uint32_t type
= tvb_get_letohl(tvb
, offset
);
3700 *rtype
= RTProperty
;
3703 *rtype
= RTProximity
;
3709 *rtype
= RTNatLanguage
;
3715 *rtype
= RTCoerce_Add
;
3717 case RTCoerce_Multiply
:
3718 *rtype
= RTCoerce_Multiply
;
3720 case RTCoerce_Absolute
:
3721 *rtype
= RTCoerce_Absolute
;
3727 *rtype
= RTFeedback
;
3733 *rtype
= RTReuseWhere
;
3735 case RTInternalProp
:
3736 *rtype
= RTInternalProp
;
3739 DISSECTOR_ASSERT(false);
3742 txt
= val_to_str(*rtype
, RT_VALS
, "0x%.8x");
3743 proto_tree_add_string_format_value(tree
, hf_mswsp_crestrict_ultype
, tvb
, offset
, 4, txt
, "%s (0x%.8x)", txt
[0] == '0' ? "" : txt
, *rtype
);
3750 // NOLINTNEXTLINE(misc-no-recursion)
3751 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
, ...)
3755 const char *str
, *txt
;
3759 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
3762 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CRestriction
, &item
, txt
);
3765 offset
= parse_rType(tvb
, offset
, tree
, &v
->ulType
, &str
);
3766 proto_item_append_text(item
, " Type: %s", str
);
3768 v
->Weight
= tvb_get_letohl(tvb
, offset
);
3769 proto_tree_add_uint(tree
, hf_mswsp_crestrict_weight
, tvb
, offset
, 4, v
->Weight
);
3772 increment_dissection_depth(pinfo
);
3780 v
->u
.RTAnd
= EP_ALLOC(struct CNodeRestriction
);
3781 offset
= parse_CNodeRestriction(tvb
, pinfo
, offset
, tree
, pad_tree
, v
->u
.RTAnd
, "CNodeRestriction");
3785 v
->u
.RTNot
= EP_ALLOC(struct CRestriction
);
3786 offset
= parse_CRestriction(tvb
, pinfo
, offset
, tree
, pad_tree
,
3787 v
->u
.RTNot
, "CRestriction");
3791 v
->u
.RTProperty
= EP_ALLOC(struct CPropertyRestriction
);
3792 offset
= parse_CPropertyRestriction(tvb
, pinfo
, offset
, tree
, pad_tree
,
3793 v
->u
.RTProperty
, "CPropertyRestriction");
3797 case RTCoerce_Multiply
:
3798 case RTCoerce_Absolute
: {
3799 v
->u
.RTCoerce_Add
= EP_ALLOC(struct CCoercionRestriction
);
3800 offset
= parse_CCoercionRestriction(tvb
, pinfo
, offset
, tree
, pad_tree
,
3801 v
->u
.RTCoerce_Add
, "CCoercionRestriction");
3805 v
->u
.RTContent
= EP_ALLOC(struct CContentRestriction
);
3806 offset
= parse_CContentRestriction(tvb
, offset
, tree
, pad_tree
,
3807 v
->u
.RTContent
, "CContentRestriction");
3810 case RTReuseWhere
: {
3811 v
->u
.RTReuseWhere
= EP_ALLOC(struct CReuseWhere
);
3812 offset
= parse_CReuseWhere(tvb
, offset
, tree
, pad_tree
,
3813 v
->u
.RTReuseWhere
, "CReuseWhere");
3816 case RTNatLanguage
: {
3817 v
->u
.RTNatLanguage
= EP_ALLOC(struct CNatLanguageRestriction
);
3818 offset
= parse_CNatLanguageRestriction(tvb
, offset
, tree
, pad_tree
,
3819 v
->u
.RTNatLanguage
, "CNatLanguageRestriction");
3823 proto_item_append_text(item
, " Not supported!");
3825 decrement_dissection_depth(pinfo
);
3827 proto_item_set_end(item
, tvb
, offset
);
3831 static int parse_CRestrictionArray(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
3833 uint8_t present
, count
;
3841 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
3843 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CRestrictionArray
, &item
, txt
);
3847 count
= tvb_get_uint8(tvb
, offset
);
3848 proto_tree_add_uint(tree
, hf_mswsp_crestrictarray_count
, tvb
, offset
, 1, count
);
3851 present
= tvb_get_uint8(tvb
, offset
);
3852 proto_tree_add_uint(tree
, hf_mswsp_crestrictarray_present
, tvb
, offset
, 1, present
);
3857 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "paddingCRestrictionPresent");
3859 for (i
=0; i
<count
; i
++) {
3860 struct CRestriction r
;
3861 offset
= parse_CRestriction(tvb
, pinfo
, offset
, tree
, pad_tree
, &r
, "Restriction[%d]", i
);
3864 proto_item_set_end(item
, tvb
, offset
);
3868 // NOLINTNEXTLINE(misc-no-recursion)
3869 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
, ...)
3878 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
3880 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CNodeRestriction
, &item
, txt
);
3882 v
->cNode
= tvb_get_letohl(tvb
, offset
);
3883 proto_tree_add_uint(tree
, hf_mswsp_cnoderestrict_cnode
, tvb
, offset
, 4, v
->cNode
);
3886 for (i
=0; i
<v
->cNode
; i
++) {
3887 struct CRestriction r
;
3889 offset
= parse_CRestriction(tvb
, pinfo
, offset
, tree
, pad_tree
, &r
, "paNode[%u]", i
);
3890 offset
= parse_padding(tvb
, offset
, 4, tree
, "padding_paNode[%u]", i
); /*at begin or end of loop ????*/
3894 proto_item_set_end(item
, tvb
, offset
);
3899 /*****************************************************************************************/
3901 static int vvalue_tvb_get0(tvbuff_t
*tvb _U_
, int offset _U_
, void *val _U_
)
3906 static int vvalue_tvb_get1(tvbuff_t
*tvb
, int offset
, void *val
)
3908 uint8_t *ui1
= (uint8_t*)val
;
3909 *ui1
= tvb_get_uint8(tvb
, offset
);
3913 static int vvalue_tvb_get2(tvbuff_t
*tvb
, int offset
, void *val
)
3915 uint16_t *ui2
= (uint16_t*)val
;
3916 *ui2
= tvb_get_letohs(tvb
, offset
);
3920 static int vvalue_tvb_get4(tvbuff_t
*tvb
, int offset
, void *val
)
3922 uint32_t *ui4
= (uint32_t*)val
;
3923 *ui4
= tvb_get_letohl(tvb
, offset
);
3927 static int vvalue_tvb_get8(tvbuff_t
*tvb
, int offset
, void *val
)
3929 uint64_t *ui8
= (uint64_t*)val
;
3930 *ui8
= tvb_get_letoh64(tvb
, offset
);
3934 static int vvalue_tvb_blob(tvbuff_t
*tvb
, int offset
, void *val
)
3936 struct data_blob
*blob
= (struct data_blob
*)val
;
3937 uint32_t len
= tvb_get_letohl(tvb
, offset
);
3940 blob
->data
= (uint8_t*)tvb_memdup(wmem_packet_scope(), tvb
, offset
+ 4, len
);
3945 static int vvalue_tvb_lpstr(tvbuff_t
*tvb
, int offset
, void *val
)
3947 struct data_str
*str
= (struct data_str
*)val
;
3950 str
->len
= tvb_get_letohl(tvb
, offset
);
3951 str
->str
= tvb_get_stringz_enc(wmem_packet_scope(), tvb
, offset
+ 4, &len
,
3952 ENC_ASCII
|ENC_LITTLE_ENDIAN
);
3953 /* XXX test str->len == len */
3957 static int vvalue_tvb_lpwstr_len(tvbuff_t
*tvb
, int offset
, int length
, void *val
)
3959 struct data_str
*str
= (struct data_str
*)val
;
3964 /* we don't know the length */
3965 ptr
= tvb_get_stringz_enc(wmem_packet_scope(), tvb
, offset
, &len
,
3966 ENC_UTF_16
|ENC_LITTLE_ENDIAN
);
3968 ptr
= tvb_get_string_enc(wmem_packet_scope(), tvb
, offset
, length
,
3969 ENC_UTF_16
|ENC_LITTLE_ENDIAN
);
3976 static int vvalue_tvb_lpwstr(tvbuff_t
*tvb
, int offset
, void *val
)
3978 struct data_str
*str
= (struct data_str
*)val
;
3980 str
->len
= tvb_get_letohl(tvb
, offset
);
3982 return 4 + vvalue_tvb_lpwstr_len(tvb
, offset
+ 4, 0, val
);
3985 /* Maximum sane vector size. Arbitrary. */
3986 #define MAX_VT_VECTOR_SIZE 5000
3987 static int vvalue_tvb_vector_internal(tvbuff_t
*tvb
, int offset
, struct vt_vector
*val
, struct vtype_data
*type
, unsigned num
)
3989 const int offset_in
= offset
;
3990 const bool varsize
= (type
->size
== -1);
3991 const unsigned elsize
= varsize
? (unsigned)sizeof(struct data_blob
) : (unsigned)type
->size
;
3997 * Make sure we actually *have* the data we're going to fetch
3998 * here, before making a possibly-doomed attempt to allocate
4001 * First, check for sane values.
4003 if (num
> MAX_VT_VECTOR_SIZE
) {
4004 THROW(ReportedBoundsError
);
4008 * No huge numbers from the wire; now make sure we at least have that data.
4010 tvb_ensure_bytes_exist(tvb
, offset
, elsize
* num
);
4013 * OK, it exists; allocate a buffer into which to fetch it.
4015 data
= (uint8_t*)wmem_alloc(wmem_packet_scope(), elsize
* num
);
4018 val
->u
.vt_ui1
= data
;
4019 DISSECTOR_ASSERT((void*)&val
->u
== ((void*)&val
->u
.vt_ui1
));
4021 for (i
=0; i
<num
; i
++) {
4022 DISSECTOR_ASSERT_HINT(type
->tvb_get
!= 0,
4023 "type that we don't know yet how to handle, please submit a bug with trace");
4024 len
= type
->tvb_get(tvb
, offset
, data
);
4027 if (varsize
&& (offset
% 4) ) { /* at begin or end of loop ??? */
4028 int padding
= 4 - (offset
% 4);
4032 return offset
- offset_in
;
4035 static int vvalue_tvb_vector(tvbuff_t
*tvb
, int offset
, struct vt_vector
*val
, struct vtype_data
*type
)
4037 const unsigned num
= tvb_get_letohl(tvb
, offset
);
4038 return 4 + vvalue_tvb_vector_internal(tvb
, offset
+4, val
, type
, num
);
4041 static void vvalue_strbuf_append_null(wmem_strbuf_t
*strbuf _U_
, void *ptr _U_
)
4044 static void vvalue_strbuf_append_i1(wmem_strbuf_t
*strbuf
, void *ptr
)
4046 int8_t i1
= *(int8_t*)ptr
;
4047 wmem_strbuf_append_printf(strbuf
, "%d", (int)i1
);
4050 static void vvalue_strbuf_append_i2(wmem_strbuf_t
*strbuf
, void *ptr
)
4052 int16_t i2
= *(int16_t*)ptr
;
4053 wmem_strbuf_append_printf(strbuf
, "%d", (int)i2
);
4056 static void vvalue_strbuf_append_i4(wmem_strbuf_t
*strbuf
, void *ptr
)
4058 int32_t i4
= *(int32_t*)ptr
;
4059 wmem_strbuf_append_printf(strbuf
, "%d", i4
);
4062 static void vvalue_strbuf_append_i8(wmem_strbuf_t
*strbuf
, void *ptr
)
4064 int64_t i8
= *(int64_t*)ptr
;
4065 wmem_strbuf_append_printf(strbuf
, "%" PRId64
, i8
);
4068 static void vvalue_strbuf_append_ui1(wmem_strbuf_t
*strbuf
, void *ptr
)
4070 uint8_t ui1
= *(uint8_t*)ptr
;
4071 wmem_strbuf_append_printf(strbuf
, "%u", (unsigned)ui1
);
4074 static void vvalue_strbuf_append_ui2(wmem_strbuf_t
*strbuf
, void *ptr
)
4076 uint16_t ui2
= *(uint16_t*)ptr
;
4077 wmem_strbuf_append_printf(strbuf
, "%u", (unsigned)ui2
);
4080 static void vvalue_strbuf_append_ui4(wmem_strbuf_t
*strbuf
, void *ptr
)
4082 uint32_t ui4
= *(uint32_t*)ptr
;
4083 wmem_strbuf_append_printf(strbuf
, "%d", ui4
);
4086 static void vvalue_strbuf_append_ui8(wmem_strbuf_t
*strbuf
, void *ptr
)
4088 uint64_t ui8
= *(uint64_t*)ptr
;
4089 wmem_strbuf_append_printf(strbuf
, "%" PRIu64
, ui8
);
4092 static void vvalue_strbuf_append_r4(wmem_strbuf_t
*strbuf
, void *ptr
)
4094 float r4
= *(float*)ptr
;
4095 wmem_strbuf_append_printf(strbuf
, "%g", (double)r4
);
4098 static void vvalue_strbuf_append_r8(wmem_strbuf_t
*strbuf
, void *ptr
)
4100 double r8
= *(double*)ptr
;
4101 wmem_strbuf_append_printf(strbuf
, "%g", r8
);
4104 static void vvalue_strbuf_append_str(wmem_strbuf_t
*strbuf
, void *ptr
)
4106 struct data_str
*str
= (struct data_str
*)ptr
;
4107 wmem_strbuf_append_printf(strbuf
, "\"%s\"", str
->str
);
4110 static void vvalue_strbuf_append_blob(wmem_strbuf_t
*strbuf
, void *ptr
)
4112 struct data_blob
*blob
= (struct data_blob
*)ptr
;
4113 wmem_strbuf_append_printf(strbuf
, "size: %d", (int)blob
->size
);
4116 static void vvalue_strbuf_append_bool(wmem_strbuf_t
*strbuf
, void *ptr
)
4118 uint16_t val
= *(unsigned*)ptr
;
4121 wmem_strbuf_append(strbuf
, "False");
4124 wmem_strbuf_append(strbuf
, "True");
4127 wmem_strbuf_append_printf(strbuf
, "Invalid (0x%4x)", val
);
4131 static void vvalue_strbuf_append_vector(wmem_strbuf_t
*strbuf
, struct vt_vector val
, struct vtype_data
*type
)
4133 const int elsize
= (type
->size
== -1) ? (int)sizeof(struct data_blob
) : type
->size
;
4135 uint8_t *data
= val
.u
.vt_ui1
;
4136 wmem_strbuf_append_c(strbuf
, '[');
4137 for (i
=0; i
<val
.len
; i
++) {
4139 wmem_strbuf_append_c(strbuf
, ',');
4141 type
->strbuf_append(strbuf
, data
);
4144 wmem_strbuf_append_c(strbuf
, ']');
4147 static struct vtype_data VT_TYPE
[] = {
4148 {VT_EMPTY
, "VT_EMPTY", 0, vvalue_tvb_get0
, NULL
, vvalue_strbuf_append_null
},
4149 {VT_NULL
, "VT_NULL", 0, vvalue_tvb_get0
, NULL
, vvalue_strbuf_append_null
},
4150 {VT_I2
, "VT_I2", 2, vvalue_tvb_get2
, NULL
, vvalue_strbuf_append_i2
},
4151 {VT_I4
, "VT_I4", 4, vvalue_tvb_get4
, NULL
, vvalue_strbuf_append_i4
},
4152 {VT_R4
, "VT_R4", 4, vvalue_tvb_get4
, NULL
, vvalue_strbuf_append_r4
},
4153 {VT_R8
, "VT_R8", 8, vvalue_tvb_get8
, NULL
, vvalue_strbuf_append_r8
},
4154 {VT_CY
, "VT_CY", 8, vvalue_tvb_get8
, NULL
, vvalue_strbuf_append_i8
},
4155 {VT_DATE
, "VT_DATE", 8, vvalue_tvb_get8
, NULL
, vvalue_strbuf_append_r8
},
4156 {VT_BSTR
, "VT_BSTR", -1, vvalue_tvb_lpwstr
, vvalue_tvb_lpwstr_len
, vvalue_strbuf_append_str
},
4157 {VT_ERROR
, "VT_ERROR", 4, vvalue_tvb_get4
, NULL
, vvalue_strbuf_append_ui4
},
4158 {VT_BOOL
, "VT_BOOL", 2, vvalue_tvb_get2
, NULL
, vvalue_strbuf_append_bool
},
4159 {VT_VARIANT
, "VT_VARIANT", -1, NULL
, NULL
, NULL
},
4160 {VT_DECIMAL
, "VT_DECIMAL", 16, NULL
, NULL
, NULL
},
4161 {VT_I1
, "VT_I1", 1, vvalue_tvb_get1
, NULL
, vvalue_strbuf_append_i1
},
4162 {VT_UI1
, "VT_UI1", 1, vvalue_tvb_get1
, NULL
, vvalue_strbuf_append_ui1
},
4163 {VT_UI2
, "VT_UI2", 2, vvalue_tvb_get2
, NULL
, vvalue_strbuf_append_ui2
},
4164 {VT_UI4
, "VT_UI4", 4, vvalue_tvb_get4
, NULL
, vvalue_strbuf_append_ui4
},
4165 {VT_I8
, "VT_I8", 8, vvalue_tvb_get8
, NULL
, vvalue_strbuf_append_i8
},
4166 {VT_UI8
, "VT_UI8", 8, vvalue_tvb_get8
, NULL
, vvalue_strbuf_append_ui8
},
4167 {VT_INT
, "VT_INT", 4, vvalue_tvb_get4
, NULL
, vvalue_strbuf_append_i4
},
4168 {VT_UINT
, "VT_UINT", 4, vvalue_tvb_get4
, NULL
, vvalue_strbuf_append_ui4
},
4169 {VT_LPSTR
, "VT_LPSTR", -1, vvalue_tvb_lpstr
, NULL
, vvalue_strbuf_append_str
},
4170 {VT_LPWSTR
, "VT_LPWSTR", -1, vvalue_tvb_lpwstr
, vvalue_tvb_lpwstr_len
, vvalue_strbuf_append_str
},
4171 {VT_COMPRESSED_LPWSTR
, "VT_COMPRESSED_LPWSTR", -1, NULL
, NULL
, vvalue_strbuf_append_str
},
4172 {VT_FILETIME
, "VT_FILETIME", 8, vvalue_tvb_get8
, NULL
, vvalue_strbuf_append_i8
},
4173 {VT_BLOB
, "VT_BLOB", -1, vvalue_tvb_blob
, NULL
, vvalue_strbuf_append_blob
},
4174 {VT_BLOB_OBJECT
, "VT_BLOB_OBJECT", -1, vvalue_tvb_blob
, NULL
, vvalue_strbuf_append_blob
},
4175 {VT_CLSID
, "VT_CLSID", 16, NULL
, NULL
, NULL
}
4178 static struct vtype_data
*vType_get_type(uint16_t t
)
4182 for (i
=0; i
<array_length(VT_TYPE
); i
++) {
4183 if (t
== VT_TYPE
[i
].tag
) {
4190 static const char *str_CBaseStorageVariant(struct CBaseStorageVariant
*value
, bool print_type
)
4193 wmem_strbuf_t
*strbuf
= wmem_strbuf_new(wmem_packet_scope(), "");
4194 if (value
== NULL
) {
4198 if (value
->type
== NULL
) {
4203 wmem_strbuf_append(strbuf
, value
->type
->str
);
4205 if (value
->vType
& 0xFF00) {
4206 wmem_strbuf_append_printf(strbuf
, "[%d]", value
->vValue
.vt_vector
.len
);
4208 wmem_strbuf_append(strbuf
, ": ");
4211 switch (value
->vType
& 0xFF00) {
4213 value
->type
->strbuf_append(strbuf
, &value
->vValue
);
4216 vvalue_strbuf_append_vector(strbuf
, value
->vValue
.vt_array
.vData
, value
->type
);
4219 vvalue_strbuf_append_vector(strbuf
, value
->vValue
.vt_vector
, value
->type
);
4222 wmem_strbuf_append(strbuf
, "Invalid");
4225 return wmem_strbuf_get_str(strbuf
);
4228 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
)
4231 proto_item
*ti
, *ti_type
, *ti_val
;
4232 proto_tree
*tree
, *tr
;
4233 enum vType highType
;
4235 ZERO_STRUCT(*value
);
4237 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CBaseStorageVariant
, &ti
, text
);
4239 value
->vType
= tvb_get_letohs(tvb
, offset
);
4240 value
->type
= vType_get_type(value
->vType
& 0xFF);
4241 if (value
->type
== NULL
) {
4245 ti_type
= proto_tree_add_string(tree
, hf_mswsp_cbasestorvariant_vtype
, tvb
, offset
, 2, "Unknown CBaseStorageVariant type");
4246 expert_add_info(pinfo
, ti_type
, &ei_mswsp_invalid_variant_type
);
4248 THROW_MESSAGE(ReportedBoundsError
, "Unknown CBaseStorageVariant type");
4252 ti_type
= proto_tree_add_string(tree
, hf_mswsp_cbasestorvariant_vtype
, tvb
, offset
, 2, value
->type
->str
);
4255 value
->vData1
= tvb_get_uint8(tvb
, offset
);
4256 proto_tree_add_uint(tree
, hf_mswsp_cbasestorvariant_vdata1
, tvb
, offset
, 1, value
->vData1
);
4259 value
->vData2
= tvb_get_uint8(tvb
, offset
);
4260 proto_tree_add_uint(tree
, hf_mswsp_cbasestorvariant_vdata2
, tvb
, offset
, 1, value
->vData2
);
4263 highType
= (enum vType
)(value
->vType
& 0xFF00);
4265 ti_val
= proto_tree_add_string(tree
, hf_mswsp_cbasestorvariant_vvalue
, tvb
, offset
, 0, "");
4269 DISSECTOR_ASSERT_HINT(value
->type
->tvb_get
!= 0,
4270 "type that we don't know yet how to handle, please submit a bug with trace");
4271 len
= value
->type
->tvb_get(tvb
, offset
, &value
->vValue
.vt_single
);
4275 proto_item_append_text(ti_type
, "|VT_VECTOR");
4276 tr
= proto_item_add_subtree(ti_val
, ett_CBaseStorageVariant_Vector
);
4278 len
= vvalue_tvb_vector(tvb
, offset
, &value
->vValue
.vt_vector
, value
->type
);
4279 proto_tree_add_uint(tr
, hf_mswsp_cbasestorvariant_num
, tvb
, offset
, 4, value
->vValue
.vt_vector
.len
);
4283 uint16_t cDims
, fFeatures
;
4284 uint32_t cbElements
, cElements
, lLbound
;
4287 proto_item_append_text(ti_type
, "|VT_ARRAY");
4288 tr
= proto_item_add_subtree(ti_val
, ett_CBaseStorageVariant_Array
);
4290 cDims
= tvb_get_letohs(tvb
, offset
);
4291 proto_tree_add_uint(tr
, hf_mswsp_cbasestorvariant_cdims
, tvb
, offset
, 2, cDims
);
4294 fFeatures
= tvb_get_letohs(tvb
, offset
);
4295 proto_tree_add_uint(tr
, hf_mswsp_cbasestorvariant_ffeatures
, tvb
, offset
, 2, fFeatures
);
4298 cbElements
= tvb_get_letohl(tvb
, offset
);
4299 proto_tree_add_uint(tr
, hf_mswsp_cbasestorvariant_cbelements
, tvb
, offset
, 4, cbElements
);
4301 for (i
=0; i
<cDims
; i
++) {
4302 cElements
= tvb_get_letohl(tvb
, offset
);
4303 lLbound
= tvb_get_letohl(tvb
, offset
+ 4);
4304 proto_tree_add_string_format(tr
, hf_mswsp_cbasestorvariant_rgsabound
, tvb
, offset
, 8, "", "Rgsabound[%d]: (%d:%d)", i
, cElements
, lLbound
);
4309 len
= vvalue_tvb_vector_internal(tvb
, offset
, &value
->vValue
.vt_array
.vData
, value
->type
, num
);
4314 proto_item_append_text(ti_type
, "|0x%x", highType
);
4316 proto_item_set_end(ti
, tvb
, offset
);
4317 proto_item_set_end(ti_val
, tvb
, offset
);
4319 proto_item_append_text(ti_val
, " %s", str_CBaseStorageVariant(value
, false));
4320 proto_item_append_text(ti
, " %s", str_CBaseStorageVariant(value
, true));
4326 DBKIND_GUID_NAME
= 0,
4327 DBKIND_GUID_PROPID
= 1
4330 static int parse_CDbColId(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *text
)
4332 uint32_t eKind
, ulId
;
4335 static const char *KIND
[] = {"DBKIND_GUID_NAME", "DBKIND_GUID_PROPID"};
4337 proto_item
*tree_item
;
4338 proto_tree
*tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CDbColId
, &tree_item
, text
);
4340 eKind
= tvb_get_letohl(tvb
, offset
);
4341 str
= (eKind
< 2 ? KIND
[eKind
] : "???");
4342 proto_tree_add_string_format_value(tree
, hf_mswsp_cdbcolid_ekind
, tvb
, offset
, 4, str
, "%s (%u)", str
, eKind
);
4345 offset
= parse_padding(tvb
, offset
, 8, pad_tree
, "paddingGuidAlign");
4347 offset
= parse_guid(tvb
, offset
, tree
, &guid
, "GUID");
4349 ulId
= tvb_get_letohl(tvb
, offset
);
4350 proto_tree_add_uint(tree
, hf_mswsp_cdbcolid_ulid
, tvb
, offset
, 4, ulId
);
4353 if (eKind
== DBKIND_GUID_NAME
) {
4356 name
= tvb_get_string_enc(wmem_packet_scope(), tvb
, offset
, len
, ENC_LITTLE_ENDIAN
| ENC_UCS_2
);
4357 proto_item_append_text(tree_item
, " \"%s\"", name
);
4358 proto_tree_add_string_format_value(tree
, hf_mswsp_cdbcolid_vstring
, tvb
, offset
, len
, name
, "\"%s\"", name
);
4360 } else if (eKind
== DBKIND_GUID_PROPID
) {
4361 proto_item_append_text(tree_item
, " %08x", ulId
);
4363 proto_item_append_text(tree_item
, "<INVALID>");
4366 proto_item_set_end(tree_item
, tvb
, offset
);
4371 static int parse_CDbProp(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const struct GuidPropertySet
*propset
, const char *fmt
, ...)
4373 static const value_string EMPTY_VS
[] = {{0, NULL
}};
4374 const value_string
*vs
= (propset
&& propset
->id_map
) ? propset
->id_map
: EMPTY_VS
;
4375 uint32_t id
, opt
, status
;
4376 struct CBaseStorageVariant value
;
4379 const char *str
, *txt
;
4383 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4386 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CDbProp
, &item
, txt
);
4388 id
= tvb_get_letohl(tvb
, offset
);
4389 str
= val_to_str(id
, vs
, "0x%08x");
4390 proto_tree_add_string_format_value(tree
, hf_mswsp_cdbprop_id
, tvb
, offset
, 4, str
, "%s (0x%08x)", (str
[0] == '0' ? "" : str
), id
);
4392 proto_item_append_text(item
, " Id: %s", str
);
4394 opt
= tvb_get_letohl(tvb
, offset
);
4395 proto_tree_add_uint(tree
, hf_mswsp_cdbprop_options
, tvb
, offset
, 4, opt
);
4398 status
= tvb_get_letohl(tvb
, offset
);
4399 proto_tree_add_uint(tree
, hf_mswsp_cdbprop_status
, tvb
, offset
, 4, status
);
4402 offset
= parse_CDbColId(tvb
, offset
, tree
, pad_tree
, "colid");
4404 offset
= parse_CBaseStorageVariant(tvb
, pinfo
, offset
, tree
, pad_tree
, &value
, "vValue");
4406 str
= str_CBaseStorageVariant(&value
, true);
4407 proto_item_append_text(item
, " %s", str
);
4408 proto_item_set_end(item
, tvb
, offset
);
4413 static int parse_CDbPropSet(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
4417 const struct GuidPropertySet
*pset
;
4424 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4427 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CDbPropSet
, &item
, txt
);
4429 offset
= parse_guid(tvb
, offset
, tree
, &guid
, "guidPropertySet");
4431 pset
= GuidPropertySet_find_guid(&guid
);
4434 proto_item_append_text(item
, " \"%s\" (%s)", pset
->desc
, pset
->def
);
4436 const char *guid_str
= guid_to_str(wmem_packet_scope(), &guid
);
4437 proto_item_append_text(item
, " {%s}", guid_str
);
4440 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "guidPropertySet");
4442 num
= tvb_get_letohl(tvb
, offset
);
4443 proto_tree_add_uint(tree
, hf_mswsp_cdbpropset_cprops
, tvb
, offset
, 4, num
);
4445 proto_item_append_text(item
, " Num: %d", num
);
4447 for (i
= 0; i
<num
; i
++) {
4448 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "aProp[%d]", i
);
4449 offset
= parse_CDbProp(tvb
, pinfo
, offset
, tree
, pad_tree
, pset
, "aProp[%d]", i
);
4452 proto_item_set_end(item
, tvb
, offset
);
4456 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
, ...)
4458 const int offset_in
= offset
;
4467 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4470 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CDbPropSet_Array
, &item
, txt
);
4472 size
= tvb_get_letohl(tvb
, size_offset
);
4473 proto_tree_add_item(tree
, hf_mswsp_msg_ConnectIn_Blob1
, tvb
,
4474 size_offset
, 4, ENC_LITTLE_ENDIAN
);
4476 num
= tvb_get_letohl(tvb
, offset
);
4477 proto_tree_add_item(tree
, hf_mswsp_msg_ConnectIn_PropSets_num
, tvb
,
4478 offset
, 4, ENC_LITTLE_ENDIAN
);
4481 for (i
= 0; i
< (int)num
; i
++) {
4482 offset
= parse_CDbPropSet(tvb
, pinfo
, offset
, tree
, pad_tree
, "PropertySet[%d]", i
);
4485 proto_item_set_end(item
, tvb
, offset
);
4486 DISSECTOR_ASSERT(offset
- offset_in
== (int)size
);
4490 int parse_CColumnSet(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
, const char *fmt
, ...)
4492 uint32_t count
, v
, i
;
4498 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4501 count
= tvb_get_letohl(tvb
, offset
);
4503 proto_tree_add_subtree(tree
, tvb
, offset
, count
* 4, ett_mswsp_uin32_array
, &item
, txt
);
4504 proto_item_append_text(item
, " Count %u [", count
);
4506 for (i
=0; i
<count
; i
++) {
4507 v
= tvb_get_letohl(tvb
, offset
);
4510 proto_item_append_text(item
, ",%u", v
);
4512 proto_item_append_text(item
, "%u", v
);
4515 proto_item_append_text(item
, "]");
4519 /* 2.2.1.23 RANGEBOUNDARY */
4520 int parse_RANGEBOUNDARY(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
4523 uint8_t labelPresent
;
4527 struct CBaseStorageVariant prval
;
4531 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4533 tree
=proto_tree_add_subtree (parent_tree
, tvb
, offset
, 0, ett_RANGEBOUNDARY
, &item
, txt
);
4535 ulType
= tvb_get_letohl(tvb
, offset
);
4536 proto_tree_add_item(tree
, hf_mswsp_rangeboundry_ultype
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
4537 proto_item_append_text(item
, ": Type 0x%08x", ulType
);
4541 offset
= parse_CBaseStorageVariant(tvb
, pinfo
, offset
, tree
, pad_tree
, &prval
, "prVal");
4543 labelPresent
= tvb_get_uint8(tvb
, offset
);
4544 proto_tree_add_item(tree
, hf_mswsp_rangeboundry_labelpresent
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
4549 const uint8_t* label
;
4550 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "paddingLabelPresent");
4552 ccLabel
= tvb_get_letohl(tvb
, offset
);
4553 proto_tree_add_item_ret_uint(tree
, hf_mswsp_rangeboundry_cclabel
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
, &ccLabel
);
4556 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
);
4557 proto_item_append_text(item
, " Label: \"%s\"", label
);
4558 offset
+= 2*ccLabel
;
4561 proto_item_append_text(item
, " Val: %s", str_CBaseStorageVariant(&prval
, true));
4563 proto_item_set_end(item
, tvb
, offset
);
4568 /* 2.2.1.22 CRangeCategSpec */
4569 int parse_CRangeCategSpec(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
4579 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4581 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CRangeCategSpec
, &item
, txt
);
4583 offset
= parse_lcid(tvb
, offset
, tree
, "lcid");
4585 cRange
= tvb_get_letohl(tvb
, offset
);
4586 proto_tree_add_uint(tree
, hf_mswsp_crangecategspec_crange
, tvb
, offset
, 4, cRange
);
4589 for (i
=0; i
<cRange
; i
++) {
4590 offset
= parse_RANGEBOUNDARY(tvb
, pinfo
, offset
, tree
, pad_tree
, "aRangeBegin[%u]", i
);
4594 proto_item_set_end(item
, tvb
, offset
);
4598 /* 2.2.1.21 CCategSpec */
4599 int parse_CCategSpec(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
4608 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4610 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CCategSpec
, &item
, txt
);
4612 type
= tvb_get_letohl(tvb
, offset
);
4613 proto_tree_add_uint(tree
, hf_mswsp_ccategspec_type
, tvb
, offset
, 4, type
);
4614 proto_item_append_text(item
, " Type %u", type
);
4617 offset
= parse_CSort(tvb
, offset
, tree
, pad_tree
, "CSort");
4620 * A CRangeCategSpec structure specifying the range values.
4621 * This field MUST be omitted if _ulCategType is set to
4622 * CATEGORIZE_UNIQUE e.g. '0' otherwise it MUST be present.
4625 offset
= parse_CRangeCategSpec(tvb
, pinfo
, offset
, tree
, pad_tree
, "CRangeCategSpec");
4628 proto_item_set_end(item
, tvb
, offset
);
4632 /* 2.2.1.25 CAggregSpec */
4633 static int parse_CAggregSpec(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
4638 uint32_t type
, ccAlias
, idColumn
;
4642 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4644 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CAggregSpec
, &item
, txt
);
4646 proto_tree_add_item_ret_uint(tree
, hf_mswsp_caggregspec_type
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
, &type
);
4649 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "padding");
4651 proto_tree_add_item_ret_uint(tree
, hf_mswsp_caggregspec_ccalias
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
, &ccAlias
);
4654 proto_tree_add_item(tree
, hf_mswsp_caggregspec_alias
, tvb
, offset
, 2*ccAlias
, ENC_LITTLE_ENDIAN
| ENC_UCS_2
);
4655 offset
+= 2*ccAlias
;
4657 proto_tree_add_item_ret_uint(tree
, hf_mswsp_caggregspec_idcolumn
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
, &idColumn
);
4659 if (type
== DBAGGTTYPE_REPRESENTATIVEOF
4660 || type
== DBAGGTTYPE_BYFREQ
4661 || type
== DBAGGTTYPE_FIRST
) {
4662 proto_tree_add_uint(tree
,
4663 hf_mswsp_caggregspec_ulmaxnumtoreturn
,
4664 tvb
, offset
, 4, idColumn
);
4666 if (type
== DBAGGTTYPE_REPRESENTATIVEOF
) {
4667 proto_tree_add_uint(tree
,
4668 hf_mswsp_caggregspec_idrepresentative
,
4669 tvb
, offset
, 4, idColumn
);
4673 ulMaxNumToReturn, idRepresentative;
4676 proto_item_set_end(item
, tvb
, offset
);
4680 /* 2.2.1.24 CAggregSet */
4681 static int parse_CAggregSet(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
4691 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4693 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CAggregSet
, &item
, txt
);
4695 cCount
= tvb_get_letohl(tvb
, offset
);
4696 proto_tree_add_uint(tree
, hf_mswsp_caggregset_count
, tvb
, offset
, 4, cCount
);
4699 for (i
=0; i
<cCount
; i
++) {
4700 /* 2.2.1.25 CAggregSpec */
4701 offset
= parse_CAggregSpec(tvb
, offset
, tree
, pad_tree
, "AggregSpecs[%u]", i
);
4704 proto_item_set_end(item
, tvb
, offset
);
4708 /* 2.2.1.27 CAggregSortKey */
4709 static int parse_CAggregSortKey(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
4719 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4721 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CAggregSortKey
, &item
, txt
);
4723 order
= tvb_get_letohl(tvb
, offset
);
4724 proto_tree_add_uint(tree
, hf_mswsp_caggregsortkey_order
, tvb
, offset
, 4, order
);
4727 offset
= parse_CAggregSpec(tvb
, offset
, tree
, pad_tree
, "ColumnSpec");
4729 proto_item_set_end(item
, tvb
, offset
);
4734 /* 2.2.1.26 CSortAggregSet */
4735 static int parse_CSortAggregSet(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
4744 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4746 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CSortAggregSet
, &item
, txt
);
4748 cCount
= tvb_get_letohl(tvb
, offset
);
4749 proto_tree_add_uint(tree
, hf_mswsp_csortaggregset_count
, tvb
, offset
, 4, cCount
);
4752 for (i
=0; i
<cCount
; i
++) {
4753 /* 2.2.1.27 CAggregSortKey */
4754 offset
= parse_CAggregSortKey(tvb
, offset
, tree
, pad_tree
, "SortKeys[%u]", i
);
4757 proto_item_set_end(item
, tvb
, offset
);
4761 enum CInGroupSortAggregSet_type
{
4762 GroupIdDefault
= 0x00, /* The default for all ranges. */
4763 GroupIdMinValue
= 0x01, /*The first range in the parent's group.*/
4764 GroupIdNull
= 0x02, /*The last range in the parent's group.*/
4768 static int parse_CInGroupSortAggregSet_type(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
, enum CInGroupSortAggregSet_type
*type
)
4770 uint8_t tmp
= tvb_get_uint8(tvb
, offset
);
4772 case GroupIdDefault
:
4773 *type
= GroupIdDefault
;
4775 case GroupIdMinValue
:
4776 *type
= GroupIdMinValue
;
4779 *type
= GroupIdNull
;
4782 *type
= GroupIdValue
;
4785 DISSECTOR_ASSERT(false);
4788 proto_tree_add_uint(tree
, hf_mswsp_cingroupsortaggregset_type
, tvb
, offset
, 1, *type
);
4792 /* 2.2.1.29 CInGroupSortAggregSet */
4793 static int parse_CInGroupSortAggregSet(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
4798 enum CInGroupSortAggregSet_type type
;
4802 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4804 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CInGroupSortAggregSet
, &item
, txt
);
4806 offset
= parse_CInGroupSortAggregSet_type(tvb
, offset
, tree
, &type
);
4807 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "CInGroupSortAggregSet");
4809 if (type
== GroupIdValue
) {
4810 struct CBaseStorageVariant id
;
4811 offset
= parse_CBaseStorageVariant(tvb
, pinfo
, offset
, tree
, pad_tree
, &id
, "inGroupId");
4814 offset
= parse_CSortSet(tvb
, offset
, tree
, pad_tree
, "SortSet");
4816 proto_item_set_end(item
, tvb
, offset
);
4821 /* 2.2.1.28 CInGroupSortAggregSets */
4822 static int parse_CInGroupSortAggregSets(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
4831 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4834 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CInGroupSortAggregSets
, &item
, txt
);
4836 cCount
= tvb_get_letohl(tvb
, offset
);
4837 proto_tree_add_uint(tree
, hf_mswsp_cingroupsortaggregsets_count
, tvb
, offset
, 4, cCount
);
4840 for (i
=0; i
<cCount
; i
++) {
4841 /* 2.2.1.29 CInGroupSortAggregSet */
4842 offset
= parse_CInGroupSortAggregSet(tvb
, pinfo
, offset
, tree
, pad_tree
, "SortSets[%u]", i
);
4845 proto_item_set_end(item
, tvb
, offset
);
4849 /* 2.2.1.20 CCategorizationSpec */
4850 int parse_CCategorizationSpec(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
4859 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4861 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CCategorizationSpec
, &item
, txt
);
4863 /* 2.2.1.18 CColumnSet */
4864 offset
= parse_CColumnSet(tvb
, offset
, tree
, "csColumns");
4866 /* 2.2.1.21 CCategSpec */
4867 offset
= parse_CCategSpec(tvb
, pinfo
, offset
, tree
, pad_tree
, "Spec");
4869 /* 2.2.1.24 CAggregSet */
4870 offset
= parse_CAggregSet(tvb
, offset
, tree
, pad_tree
, "AggregSet");
4872 /* 2.2.1.26 CSortAggregSet */
4873 offset
= parse_CSortAggregSet(tvb
, offset
, tree
, pad_tree
, "SortAggregSet");
4875 /* 2.2.1.28 CInGroupSortAggregSets */
4876 offset
= parse_CInGroupSortAggregSets(tvb
, pinfo
, offset
, tree
, pad_tree
, "InGroupSortAggregSets");
4878 proto_tree_add_item(tree
, hf_mswsp_categorizationspec_cmaxres
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
4881 proto_item_set_end(item
, tvb
, offset
);
4885 static int * const mswsp_bool_options
[] = {
4886 &hf_mswsp_bool_options_cursor
,
4887 &hf_mswsp_bool_options_async
,
4888 &hf_mswsp_bool_options_firstrows
,
4889 &hf_mswsp_bool_options_holdrows
,
4890 &hf_mswsp_bool_options_chaptered
,
4891 &hf_mswsp_bool_options_useci
,
4892 &hf_mswsp_bool_options_defertrim
,
4893 &hf_mswsp_bool_options_rowsetevents
,
4894 &hf_mswsp_bool_options_dontcomputeexpensive
,
4898 int parse_CRowsetProperties(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree _U_
, const char *fmt
, ...)
4907 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4910 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CRowsetProperties
, &item
, txt
);
4912 proto_tree_add_bitmask_with_flags(tree
, tvb
, offset
,
4913 hf_mswsp_bool_options
, ett_mswsp_bool_options
, mswsp_bool_options
, ENC_LITTLE_ENDIAN
, BMT_NO_APPEND
);
4917 proto_tree_add_item(tree
, hf_mswsp_crowsetprops_ulmaxopenrows
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
4920 proto_tree_add_item(tree
, hf_mswsp_crowsetprops_ulmemusage
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
4923 proto_tree_add_item(tree
, hf_mswsp_crowsetprops_cmaxresults
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
4926 proto_tree_add_item(tree
, hf_mswsp_crowsetprops_ccmdtimeout
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
4929 proto_item_set_end(item
, tvb
, offset
);
4933 int parse_CPidMapper(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
4942 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4945 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CPidMapper
, &item
, txt
);
4947 count
= tvb_get_letohl(tvb
, offset
);
4948 proto_tree_add_uint(tree
, hf_mswsp_cpidmapper_count
, tvb
, offset
, 4, count
);
4951 offset
= parse_padding(tvb
, offset
, 8, pad_tree
, "CPidMapper_PropSpec");
4953 for (i
=0; i
<count
; i
++) {
4954 struct CFullPropSpec v
;
4956 /*at begin or end of loop???*/
4957 offset
= parse_padding(tvb
, offset
, 4, pad_tree
,
4958 "CPidMapper_PropSpec[%u]", i
);
4959 offset
= parse_CFullPropSpec(tvb
, offset
, tree
, pad_tree
, &v
, "PropSpec[%u]", i
);
4962 proto_item_set_end(item
, tvb
, offset
);
4966 /* 2.2.1.35 CColumnGroup */
4967 int parse_CColumnGroup(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree _U_
, const char *fmt
, ...)
4970 proto_item
*item
, *ti
;
4973 uint32_t count
, groupPid
, i
;
4976 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
4979 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CColumnGroup
, &item
, txt
);
4981 count
= tvb_get_letohl(tvb
, offset
);
4982 proto_tree_add_uint(tree
, hf_mswsp_ccolumngroup_count
, tvb
, offset
, 4, count
);
4985 groupPid
= tvb_get_letohl(tvb
, offset
);
4986 ti
= proto_tree_add_uint(tree
, hf_mswsp_ccolumngroup_grouppid
, tvb
, offset
, 4, groupPid
);
4987 if ((0xFFFF0000 & groupPid
) == 0x7FFF0000) {
4988 proto_item_append_text(ti
, " Idx: %u", groupPid
& 0xFFFF);
4990 proto_item_append_text(ti
, "<Invalid>");
4994 for (i
=0; i
<count
; i
++) {
4995 /* 2.2.1.36 SProperty */
4996 uint32_t pid
, weight
;
4997 pid
= tvb_get_letohl(tvb
, offset
);
4998 weight
= tvb_get_letohl(tvb
, offset
+ 4);
4999 proto_tree_add_uint_format(tree
, hf_mswsp_ccolumngroup_pid
, tvb
, offset
, 8, pid
, "Props[%u]: pid: %u weight: %u", i
, pid
, weight
);
5003 proto_item_set_end(item
, tvb
, offset
);
5007 /* 2.2.1.34 CColumnGroupArray */
5008 int parse_CColumnGroupArray(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, proto_tree
*pad_tree
, const char *fmt
, ...)
5018 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
5020 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CColumnGroupArray
, &item
, txt
);
5022 count
= tvb_get_letohl(tvb
, offset
);
5023 proto_tree_add_uint(tree
, hf_mswsp_ccolumngrouparray_count
, tvb
, offset
, 4, count
);
5026 for (i
=0; i
<count
; i
++) {
5027 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "aGroupArray[%u]", i
);
5028 offset
= parse_CColumnGroup(tvb
, offset
, tree
, pad_tree
, "aGroupArray[%u]", i
);
5031 proto_item_set_end(item
, tvb
, offset
);
5035 static int parse_UInt32Array(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, uint32_t count
, const char *item_name
, const char *fmt
, ...)
5045 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
5048 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_Array
, &item
, txt
);
5050 for (i
=0; i
<count
; i
++) {
5051 v
= tvb_get_letohl(tvb
, offset
);
5052 proto_tree_add_uint_format(tree
, hf_mswsp_int32array_value
, tvb
, offset
, 4, v
, "%s[%u] = %u", item_name
,i
, v
);
5055 proto_item_set_end(item
, tvb
, offset
);
5059 /* 2.2.1.40 CRowSeekNext */
5060 static int parse_CRowSeekNext(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, const char *fmt
, ...)
5068 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
5071 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CRowsSeekNext
, &item
, txt
);
5073 proto_tree_add_item(tree
, hf_mswsp_crowseeknext_cskip
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5075 proto_item_set_end(item
, tvb
, offset
);
5080 /* 2.2.1.37 CRowSeekAt */
5081 static int parse_CRowSeekAt(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, const char *fmt
, ...)
5089 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
5092 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CRowsSeekAt
, &item
, txt
);
5094 proto_tree_add_item(tree
, hf_mswsp_crowseekat_bmkoffset
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5098 proto_tree_add_item(tree
, hf_mswsp_crowseekat_skip
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5101 proto_tree_add_item(tree
, hf_mswsp_crowseekat_hregion
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5104 proto_item_set_end(item
, tvb
, offset
);
5108 /* 2.2.1.38 CRowSeekAtRatio */
5109 static int parse_CRowSeekAtRatio(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, const char *fmt
, ...)
5117 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
5120 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CRowsSeekAtRatio
, &item
, txt
);
5122 proto_tree_add_item(tree
, hf_mswsp_crowseekatratio_ulnumerator
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5126 proto_tree_add_item(tree
, hf_mswsp_crowseekatratio_uldenominator
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5129 proto_tree_add_item(tree
, hf_mswsp_crowseekatratio_hregion
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5132 proto_item_set_end(item
, tvb
, offset
);
5136 /* 2.2.1.39 CRowSeekByBookmark */
5137 static int parse_CRowSeekByBookmark(tvbuff_t
*tvb
, int offset
, proto_tree
*parent_tree
, const char *fmt
, ...)
5146 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
5149 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CRowsSeekByBookmark
, &item
, txt
);
5151 num
= tvb_get_letohl(tvb
,offset
);
5152 proto_tree_add_item(tree
, hf_mswsp_crowseekbybookmark_cbookmarks
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5155 offset
= parse_UInt32Array(tvb
, offset
, tree
, num
, "abookmark", "abookmarks");
5157 num
= tvb_get_letohl(tvb
,offset
);
5158 proto_tree_add_item(tree
, hf_mswsp_crowseekbybookmark_maxret
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5161 offset
= parse_UInt32Array(tvb
, offset
, tree
, num
, "ascret", "ascret");
5163 proto_item_set_end(item
, tvb
, offset
);
5167 static int get_fixed_vtype_dataize(enum vType vtype
)
5169 struct vtype_data
*vt_type
= vType_get_type(vtype
);
5171 return vt_type
->size
;
5176 static int parse_CRowVariantArrayInfo(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
, bool is_64bit
, struct CRowVariant
*variant
)
5179 variant
->content
.array_vector
.i64
.count
=
5180 tvb_get_letoh64(tvb
, offset
);
5181 proto_tree_add_uint64(tree
, hf_mswsp_crowvariantinfo_count64
, tvb
, offset
, 8, variant
->content
.array_vector
.i64
.count
);
5183 variant
->content
.array_vector
.i64
.array_address
= tvb_get_letoh64(tvb
, offset
);
5184 proto_tree_add_uint64(tree
, hf_mswsp_arrayvector_address64
, tvb
, offset
, 8, variant
->content
.array_vector
.i64
.array_address
);
5188 variant
->content
.array_vector
.i32
.count
=
5189 tvb_get_letohl(tvb
, offset
);
5190 proto_tree_add_uint(tree
, hf_mswsp_crowvariantinfo_count32
, tvb
, offset
, 4, variant
->content
.array_vector
.i32
.count
);
5192 variant
->content
.array_vector
.i32
.array_address
= tvb_get_letohl(tvb
, offset
);
5193 proto_tree_add_uint(tree
, hf_mswsp_arrayvector_address32
, tvb
, offset
, 4, variant
->content
.array_vector
.i32
.array_address
);
5199 static int parse_VariantColVector(tvbuff_t
*tvb
, int offset
, proto_tree
*tree
, uint64_t base_address
, bool is_64bit
, struct CRowVariant
*variant
, struct vtype_data
*vt_list_type
)
5204 proto_tree
*sub_tree
;
5205 wmem_strbuf_t
*strbuf
;
5207 offset
= parse_CRowVariantArrayInfo(tvb
, offset
, tree
, is_64bit
, variant
);
5210 (int)(variant
->content
.array_vector
.i64
.array_address
- base_address
);
5211 count
= variant
->content
.array_vector
.i64
.count
;
5214 (int)(variant
->content
.array_vector
.i32
.array_address
- base_address
);
5215 count
= variant
->content
.array_vector
.i32
.count
;
5217 sub_tree
= proto_tree_add_subtree(tree
, tvb
, buf_offset
, 0, ett_CRowVariant_Vector
, NULL
, "values");
5218 for (i
= 0; i
< count
; i
++) {
5219 uint64_t item_address
= 0;
5220 int address_of_address
= 0;
5222 union vt_single value
;
5226 address_of_address
= buf_offset
+ (i
* size
);
5227 item_address
= tvb_get_letoh64(tvb
, address_of_address
);
5228 proto_tree_add_uint64_format(sub_tree
, hf_mswsp_rowvariant_item_address64
, tvb
, address_of_address
, size
, item_address
, "address[%d] 0x%" PRIx64
, i
, item_address
);
5231 item_address
= tvb_get_letohl(tvb
, buf_offset
+ (i
* size
));
5232 proto_tree_add_uint_format(sub_tree
, hf_mswsp_rowvariant_item_address32
, tvb
, address_of_address
, size
, (uint32_t)item_address
, "address[%d] 0x%x", i
, (uint32_t)item_address
);
5234 strbuf
= wmem_strbuf_new(wmem_packet_scope(), "");
5235 if (vt_list_type
->size
== -1) {
5237 DISSECTOR_ASSERT_HINT(vt_list_type
->tvb_get_value_only
!= 0,
5238 "appears this is a vector of dynamic types that we don't know yet how to handle, please submit a bug with trace");
5239 len
= vt_list_type
->tvb_get_value_only(tvb
, (int)(item_address
- base_address
), 0, &value
);
5240 vt_list_type
->strbuf_append(strbuf
, &value
);
5243 * assume non dynamic size types are stored directly.
5244 * Note: not test as not seen in the wild.
5246 len
= vt_list_type
->size
;
5247 DISSECTOR_ASSERT_HINT(vt_list_type
->tvb_get
!= 0,
5248 "appears this is a vector of fixed types that we don't know yet how to handle, please submit a bug with trace");
5250 vt_list_type
->tvb_get(tvb
, (int)(item_address
- base_address
), &value
);
5251 vt_list_type
->strbuf_append(strbuf
, &value
);
5253 proto_tree_add_string(sub_tree
, hf_mswsp_rowvariant_item_value
, tvb
, (int)(item_address
- base_address
), len
, wmem_strbuf_get_str(strbuf
));
5258 static int parse_VariantCol(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, proto_tree
*parent_tree
, uint64_t base_address
, uint32_t length _U_
, bool is_64bit
, struct CRowVariant
*variant
, const char *fmt
, ...)
5261 proto_item
*item
, *ti_type
;
5264 struct vtype_data
*vt_type
;
5265 const char *modifier
= "", *txt
;
5267 uint16_t vtype_high
;
5270 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
5273 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_CRowVariant
, &item
, txt
);
5275 variant
->vtype
= tvb_get_letohs(tvb
, offset
);
5276 vt_type
= vType_get_type((enum vType
)variant
->vtype
);
5277 vtype_high
= (variant
->vtype
& 0xFF00);
5279 if (vtype_high
== VT_VECTOR
) {
5280 modifier
= "|VT_VECTOR";
5281 } else if (vtype_high
== VT_ARRAY
) {
5282 modifier
= "|VT_ARRAY";
5284 modifier
= "|Unknown, possibly error";
5288 if (vt_type
== NULL
) {
5292 ti_type
= proto_tree_add_string(tree
, hf_mswsp_ctablecolumn_vtype
, tvb
, offset
, 4, "Unknown variant column type");
5293 expert_add_info(pinfo
, ti_type
, &ei_mswsp_invalid_variant_type
);
5295 THROW_FORMATTED(ReportedBoundsError
, "Unknown variant column type%s", modifier
);
5298 proto_tree_add_string_format_value(tree
, hf_mswsp_rowvariant_vtype
, tvb
, offset
, 2, vt_type
->str
, "%s%s", vt_type
->str
, modifier
);
5301 proto_tree_add_item(tree
, hf_mswsp_rowvariant_reserved1
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
5302 variant
->reserved1
= tvb_get_letohs(tvb
, offset
);
5305 proto_tree_add_item(tree
, hf_mswsp_rowvariant_reserved2
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5306 variant
->reserved2
= tvb_get_letohl(tvb
, offset
);
5309 size
= get_fixed_vtype_dataize((enum vType
)(variant
->vtype
& 0x00FF));
5311 if (vtype_high
== VT_VECTOR
|| vtype_high
== VT_ARRAY
) {
5312 offset
= parse_VariantColVector(tvb
, offset
, tree
, base_address
,
5313 is_64bit
, variant
, vt_type
);
5315 wmem_strbuf_t
*strbuf
= wmem_strbuf_new(wmem_packet_scope(), "");
5317 /* single fixed size value type */
5318 const char* desc
= vt_type
->str
;
5320 DISSECTOR_ASSERT_HINT(vt_type
->tvb_get
!= 0,
5321 "appears fixed type that we don't know yet how to handle, please submit a bug with trace");
5322 vt_type
->tvb_get(tvb
, offset
, &variant
->content
);
5323 vt_type
->strbuf_append(strbuf
, &variant
->content
);
5324 proto_tree_add_string_format_value(tree
, hf_mswsp_rowvariant_item_value
, tvb
, offset
, size
, desc
, "%s: %s", desc
, wmem_strbuf_get_str(strbuf
));
5326 int64_t value_address
;
5327 int buf_offset
= offset
;
5329 union vt_single non_fixed_size_val
;
5330 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");
5332 variant
->content
.hyperw
= tvb_get_letoh64(tvb
, offset
);
5334 value_address
= variant
->content
.hyperw
;
5335 proto_tree_add_uint64(tree
, hf_mswsp_rowvariant_item_address64
, tvb
, buf_offset
, 8, value_address
);
5337 variant
->content
.longw
= tvb_get_letohl(tvb
, offset
);
5339 value_address
= variant
->content
.longw
;
5340 proto_tree_add_uint(tree
, hf_mswsp_rowvariant_item_address32
, tvb
, buf_offset
, 4, (uint32_t)value_address
);
5343 len
= vt_type
->tvb_get_value_only(tvb
, (int)(value_address
- base_address
), 0, &non_fixed_size_val
);
5344 vt_type
->strbuf_append(strbuf
, &non_fixed_size_val
);
5345 proto_tree_add_string(tree
, hf_mswsp_rowvariant_item_value
, tvb
, (int)(value_address
- base_address
), len
, wmem_strbuf_get_str(strbuf
));
5352 static int parse_RowsBufferCol(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, uint32_t row
, uint32_t col
, struct CPMSetBindingsIn
*bindingsin
, struct rows_data
*rowsin
, bool b_is_64bit
, proto_tree
*parent_tree
, const char *fmt
, ...)
5356 uint32_t buf_start
= offset
;
5357 uint32_t buf_offset
= buf_start
+ (row
* bindingsin
->brow
);
5358 struct CTableColumn
*pcol
= &bindingsin
->acolumns
[col
];
5360 static const value_string STATUS
[] = {
5361 {0, "StoreStatusOk"},
5362 {1, "StoreStatusDeferred"},
5363 {2, "StoreStatusNull"},
5371 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
5373 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_GetRowsColumn
, &item
, txt
);
5374 proto_item_append_text(item
, " (%s)", pcol
->name
);
5375 if (pcol
->statusused
) {
5376 int tmp_offset
= buf_offset
+ pcol
->statusoffset
;
5377 proto_tree_add_string(tree
, hf_mswsp_ctablecolumn_status
, tvb
, tmp_offset
, 1, val_to_str(tvb_get_uint8(tvb
, tmp_offset
), STATUS
, "(Invalid: 0x%x)"));
5379 if (pcol
->lengthused
) {
5380 int tmp_offset
= buf_offset
+ pcol
->lengthoffset
;
5381 proto_tree_add_item(tree
, hf_mswsp_ctablecolumn_length
, tvb
, tmp_offset
, 1, ENC_LITTLE_ENDIAN
);
5383 if (pcol
->valueused
) {
5384 int tmp_offset
= buf_offset
+ pcol
->valueoffset
;
5385 struct CRowVariant variant
;
5386 uint32_t len
= pcol
->valuesize
;
5387 uint64_t base_address
= rowsin
->ulclientbase
;/*( + rowsin->cbreserved;*/
5388 ZERO_STRUCT(variant
);
5390 if (pcol
->lengthused
) {
5391 len
= tvb_get_letohs(tvb
, buf_offset
+ pcol
->lengthoffset
) - pcol
->valuesize
;
5393 if (pcol
->vtype
== VT_VARIANT
) {
5394 parse_VariantCol(tvb
, pinfo
, tmp_offset
, tree
, base_address
, len
, b_is_64bit
, &variant
, "CRowVariant");
5400 static int parse_RowsBuffer(tvbuff_t
*tvb
, packet_info
*pinfo
, int offset
, uint32_t num_rows
, struct CPMSetBindingsIn
*bindingsin
, struct rows_data
*rowsin
, bool is64bit
, proto_tree
*parent_tree
, const char *fmt
, ...)
5409 txt
= wmem_strdup_vprintf(wmem_packet_scope(), fmt
, ap
);
5412 tree
= proto_tree_add_subtree(parent_tree
, tvb
, offset
, 0, ett_GetRowsRow
, &item
, txt
);
5414 for (num
= 0; num
< num_rows
; ++num
) {
5416 proto_tree
*row_tree
;
5417 row_tree
= proto_tree_add_subtree_format(tree
, tvb
, offset
, 0, ett_GetRowsRow
, NULL
, "Row[%d]", num
);
5418 for (col
= 0; col
< bindingsin
->ccolumns
; col
++) {
5419 parse_RowsBufferCol(tvb
, pinfo
, offset
, num
, col
, bindingsin
, rowsin
, is64bit
, row_tree
, "Col[%d]", col
);
5424 /* Code to actually dissect the packets */
5426 static int dissect_CPMConnect(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *private_data
)
5433 struct message_data
*data
= NULL
;
5434 struct mswsp_ct
*ct
= NULL
;
5436 ti
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, -1, ENC_NA
);
5437 tree
= proto_item_add_subtree(ti
, ett_mswsp_msg
);
5438 proto_item_set_text(ti
, "CPMConnect%s", in
? "In" : "Out");
5439 col_append_str(pinfo
->cinfo
, COL_INFO
, "Connect");
5441 ti
= proto_tree_add_item_ret_uint(tree
, hf_mswsp_msg_Connect_Version
, tvb
,
5442 offset
, 4, ENC_LITTLE_ENDIAN
, &version
);
5444 ct
= get_create_converstation_data(pinfo
);
5447 data
= find_or_create_message_data(ct
, pinfo
, 0xC8, in
, private_data
);
5449 data
->content
.version
= version
;
5455 uint32_t blob_size1_off
, blob_size2_off
;
5456 proto_tree
*pad_tree
;
5458 pad_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_mswsp_pad
, &ti
, "Padding");
5460 proto_tree_add_item(tree
, hf_mswsp_msg_ConnectIn_ClientIsRemote
, tvb
,
5461 offset
, 4, ENC_LITTLE_ENDIAN
);
5465 blob_size1_off
= offset
;
5468 offset
= parse_padding(tvb
, offset
, 8, pad_tree
, "_paddingcbBlob2");
5471 blob_size2_off
= offset
;
5474 offset
= parse_padding(tvb
, offset
, 16, pad_tree
, "_padding");
5476 len
= tvb_unicode_strsize(tvb
, offset
);
5477 proto_tree_add_item(tree
, hf_mswsp_msg_ConnectIn_MachineName
, tvb
,
5478 offset
, len
, ENC_LITTLE_ENDIAN
| ENC_UCS_2
);
5481 len
= tvb_unicode_strsize(tvb
, offset
);
5482 ti
= proto_tree_add_item(tree
, hf_mswsp_msg_ConnectIn_UserName
, tvb
,
5483 offset
, len
, ENC_LITTLE_ENDIAN
| ENC_UCS_2
);
5486 offset
= parse_padding(tvb
, offset
, 8, pad_tree
, "_paddingcPropSets");
5488 offset
= parse_PropertySetArray(tvb
, pinfo
, offset
, blob_size1_off
, tree
, pad_tree
, "PropSets");
5490 offset
= parse_padding(tvb
, offset
, 8, pad_tree
, "paddingExtPropset");
5492 offset
= parse_PropertySetArray(tvb
, pinfo
, offset
, blob_size2_off
, tree
, pad_tree
, "ExtPropset");
5494 offset
= parse_padding(tvb
, offset
, 8, pad_tree
, "???");
5496 DISSECTOR_ASSERT(offset
== (int)tvb_reported_length(tvb
));
5498 /* make "Padding" the last item */
5499 proto_tree_move_item(tree
, ti
, proto_tree_get_parent(pad_tree
));
5503 return tvb_reported_length(tvb
);
5506 static int dissect_CPMDisconnect(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree _U_
, bool in _U_
, void *data _U_
)
5508 col_append_str(pinfo
->cinfo
, COL_INFO
, "Disconnect");
5509 return tvb_reported_length(tvb
);
5512 static int dissect_CPMCreateQuery(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *data _U_
)
5518 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, -1, ENC_NA
);
5519 tree
= proto_item_add_subtree(item
, ett_mswsp_msg
);
5521 proto_item_set_text(item
, "CPMCreateQuery%s", in
? "In" : "Out");
5522 col_append_str(pinfo
->cinfo
, COL_INFO
, "CreateQuery");
5526 proto_tree
*pad_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_mswsp_pad
, &ti
, "Padding");
5527 uint8_t CColumnSetPresent
, CRestrictionPresent
, CSortSetPresent
, CCategorizationSetPresent
;
5528 uint32_t size
= tvb_get_letohl(tvb
, offset
);
5529 proto_tree_add_uint(tree
, hf_mswsp_msg_cpmcreatequery_size
, tvb
, offset
, 4, size
);
5532 CColumnSetPresent
= tvb_get_uint8(tvb
, offset
);
5533 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcreatequery_ccolumnsetpresent
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
5536 if (CColumnSetPresent
) {
5537 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "paddingCColumnSetPresent");
5538 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "paddingCColumnSetPresent");
5539 offset
= parse_CColumnSet(tvb
, offset
, tree
, "CColumnSet");
5542 CRestrictionPresent
= tvb_get_uint8(tvb
, offset
);
5543 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcreatequery_crestrictionpresent
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
5546 if (CRestrictionPresent
) {
5547 offset
= parse_CRestrictionArray(tvb
, pinfo
, offset
, tree
, pad_tree
, "RestrictionArray");
5550 CSortSetPresent
= tvb_get_uint8(tvb
, offset
);
5551 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcreatequery_csortpresent
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
5554 if (CSortSetPresent
) {
5555 offset
= parse_padding(tvb
, offset
, 4, tree
, "paddingCSortSetPresent");
5556 offset
= parse_CInGroupSortAggregSets(tvb
, pinfo
, offset
, tree
, pad_tree
, "GroupSortAggregSets");
5560 CCategorizationSetPresent
= tvb_get_uint8(tvb
, offset
);
5561 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcreatequery_ccategpresent
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
5564 if (CCategorizationSetPresent
) {
5566 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "paddingCCategorizationSetPresent");
5567 /* 2.2.1.19 CCategorizationSet */
5568 count
= tvb_get_letohl(tvb
, offset
);
5569 proto_tree_add_uint(tree
, hf_mswsp_msg_cpmcreatequery_ccateg_count
, tvb
, offset
, 4, count
);
5571 for (i
=0; i
<count
; i
++) {
5572 offset
= parse_CCategorizationSpec(tvb
, pinfo
, offset
, tree
, pad_tree
, "categories[%u]", i
);
5576 offset
= parse_padding(tvb
, offset
, 4, tree
, "XXXX");
5578 offset
= parse_CRowsetProperties(tvb
, offset
, tree
, pad_tree
, "RowSetProperties");
5580 offset
= parse_CPidMapper(tvb
, offset
, tree
, pad_tree
, "PidMapper");
5582 parse_CColumnGroupArray(tvb
, offset
, tree
, pad_tree
, "GroupArray");
5584 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcreatequery_trueseq
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5586 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcreatequery_workid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5589 * #FIXME Cursors is an array of uint32 where the size of the array is
5590 * determined by categories in the CategorizationSet in the CPMQuery
5593 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcreatequery_cursors
, tvb
, offset
, -1, ENC_NA
);
5596 return tvb_reported_length(tvb
);
5599 static int dissect_CPMFreeCursor(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree _U_
, bool in _U_
, void *data _U_
)
5601 col_append_str(pinfo
->cinfo
, COL_INFO
, "FreeCursor");
5602 return tvb_reported_length(tvb
);
5605 static int dissect_CPMGetRows(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *private_data
)
5607 struct mswsp_ct
*ct
= NULL
;
5611 proto_tree
*seek_tree
;
5614 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, in
? 0 : -1, ENC_NA
);
5615 tree
= proto_item_add_subtree(item
, ett_mswsp_msg
);
5617 proto_item_set_text(item
, "GetRows%s", in
? "In" : "Out");
5618 col_append_str(pinfo
->cinfo
, COL_INFO
, "GetRows");
5620 ct
= get_create_converstation_data(pinfo
);
5623 struct message_data
*data
= NULL
;
5625 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrows_hcursor
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5628 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrows_rowstotransfer
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5631 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrows_rowwidth
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5634 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrows_cbseek
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5637 data
= find_or_create_message_data(ct
, pinfo
, 0xCC, in
, private_data
);
5639 data
->content
.rowsin
.cbreserved
= tvb_get_letohl(tvb
, offset
);
5641 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrows_cbreserved
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5644 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrows_cbreadbuffer
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5648 data
->content
.rowsin
.ulclientbase
= tvb_get_letohl(tvb
, offset
);
5651 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrows_ulclientbase
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5654 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrows_fbwdfetch
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5657 eType
= tvb_get_letohl(tvb
, offset
);
5658 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrows_etype
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5661 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrows_chapt
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5664 seek_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_SeekDescription
, NULL
, "SeekDescription");
5666 case 0: /* eRowSeekNone */
5668 case 1: /* eRowSeekNext */
5669 parse_CRowSeekNext(tvb
, offset
, seek_tree
, "CRowSeekNext");
5671 case 2: /* eRowSeekAt */
5672 parse_CRowSeekAt(tvb
, offset
, seek_tree
, "CRowSeekAt");
5675 case 3: /* eRowSeekAtRatio */
5676 parse_CRowSeekAtRatio(tvb
, offset
, seek_tree
, "CRowSeekAtRatio");
5678 case 4: /* eRowSeekByBookmark */
5679 parse_CRowSeekByBookmark(tvb
, offset
, seek_tree
, "CRowSeekByRatio");
5687 * GetRows response needs information from GetRow & SetBindings
5690 /* find the preceding SetBinding data */
5691 uint32_t num_rows
= 0;
5693 proto_tree
*pad_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_mswsp_pad
, &ti
, "Padding");
5694 struct CPMSetBindingsIn
*bindingsin
= find_binding_msg_data(ct
, pinfo
,
5696 struct rows_data
*rowsin
= find_rowsin_msg_data(ct
, pinfo
, private_data
);
5697 bool b_64bit_mode
= false;
5698 bool b_has_arch
= is_64bit_mode(ct
, pinfo
, &b_64bit_mode
, private_data
);
5699 num_rows
= tvb_get_letohl(tvb
, offset
);
5700 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrows_crowsreturned
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5703 eType
= tvb_get_letohl(tvb
, offset
);
5704 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrows_etype
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5707 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrows_chapt
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5710 seek_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_SeekDescription
, NULL
, "SeekDescription");
5712 case 0: /* eRowSeekNone */
5714 case 1: /* eRowSeekNext */
5715 parse_CRowSeekNext(tvb
, offset
, seek_tree
, "CRowSeekNext");
5717 case 2: /* eRowSeekAt */
5718 parse_CRowSeekAt(tvb
, offset
, seek_tree
, "CRowSeekAt");
5721 case 3: /* eRowSeekAtRatio */
5722 parse_CRowSeekAtRatio(tvb
, offset
, seek_tree
, "CRowSeekAtRatio");
5724 case 4: /* eRowSeekByBookmark */
5725 parse_CRowSeekByBookmark(tvb
, offset
, seek_tree
, "CRowSeekByRatio");
5731 if (b_has_arch
&& bindingsin
&& rowsin
) {
5732 offset
= parse_padding(tvb
, offset
, rowsin
->cbreserved
, pad_tree
,
5734 parse_RowsBuffer(tvb
, pinfo
, offset
, num_rows
, bindingsin
, rowsin
, b_64bit_mode
, tree
, "Rows");
5736 int nbytes
= tvb_reported_length_remaining(tvb
, offset
);
5737 proto_tree_add_expert_format(tree
, pinfo
, &ei_missing_msg_context
, tvb
, offset
, nbytes
, "Undissected %d bytes (due to missing preceding msg(s))", nbytes
);
5741 return tvb_reported_length(tvb
);
5745 static int dissect_CPMRatioFinished(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *data _U_
)
5750 col_append_str(pinfo
->cinfo
, COL_INFO
, "RatioFinished");
5751 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, -1, ENC_NA
);
5752 tree
= proto_item_add_subtree(item
, ett_mswsp_msg
);
5753 proto_item_set_text(item
, "RationFinised%s", in
? "In" : "Out");
5755 proto_tree_add_item(tree
, hf_mswsp_msg_cpmratiofinished_hcursor
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5757 proto_tree_add_item(tree
, hf_mswsp_msg_cpmratiofinished_fquick
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5759 proto_tree_add_item(tree
, hf_mswsp_msg_cpmratiofinished_ulnumerator
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5761 proto_tree_add_item(tree
, hf_mswsp_msg_cpmratiofinished_uldenominator
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5763 proto_tree_add_item(tree
, hf_mswsp_msg_cpmratiofinished_crows
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5765 proto_tree_add_item(tree
, hf_mswsp_msg_cpmratiofinished_fnewrows
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5768 return tvb_reported_length(tvb
);
5771 static int dissect_CPMCompareBmk(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *data _U_
)
5777 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, in
? 0 : -1, ENC_NA
);
5778 tree
= proto_item_add_subtree(item
, ett_mswsp_msg
);
5780 proto_item_set_text(item
, "CompareBmk%s", in
? "In" : "Out");
5781 col_append_str(pinfo
->cinfo
, COL_INFO
, "CompareBmk");
5783 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcomparebmk_hcursor
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5785 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcomparebmk_chapt
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5787 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcomparebmk_bmkfirst
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5789 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcomparebmk_bmksecond
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5791 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcomparebmk_dwcomparison
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5793 return tvb_reported_length(tvb
);
5796 static int dissect_CPMGetApproximatePosition(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *data _U_
)
5802 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, in
? 0 : -1, ENC_NA
);
5803 tree
= proto_item_add_subtree(item
, ett_mswsp_msg
);
5805 proto_item_set_text(item
, "GetApproximatePosition%s", in
? "In" : "Out");
5806 col_append_str(pinfo
->cinfo
, COL_INFO
, "GetApproximatePosition");
5808 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetapproxpos_hcursor
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5810 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetapproxpos_chapt
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5812 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetapproxpos_bmk
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5814 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetapproxpos_numerator
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5816 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetapproxpos_denominator
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5818 return tvb_reported_length(tvb
);
5822 static int dissect_CPMSetBindings(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *private_data
)
5825 struct CPMSetBindingsIn request
;
5827 col_append_str(pinfo
->cinfo
, COL_INFO
, "SetBindings");
5830 struct mswsp_ct
*ct
= NULL
;
5831 struct message_data
*data
= NULL
;
5833 proto_tree
*tree
, *pad_tree
;
5834 uint32_t size
, num
, n
;
5835 int64_t column_size
;
5837 ti
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, -1, ENC_NA
);
5838 tree
= proto_item_add_subtree(ti
, ett_mswsp_msg
);
5840 proto_item_set_text(ti
, "SetBindingsIn");
5842 pad_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_mswsp_pad
, &ti
, "Padding");
5844 proto_tree_add_item(tree
, hf_mswsp_msg_cpmsetbinding_hcursor
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5845 request
.hcursor
= tvb_get_letohl(tvb
, offset
);
5847 request
.brow
= tvb_get_letohl(tvb
, offset
);
5848 proto_tree_add_item(tree
, hf_mswsp_msg_cpmsetbinding_cbrow
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5851 size
= tvb_get_letohl(tvb
, offset
);
5852 request
.bbindingdesc
= size
;
5853 proto_tree_add_item(tree
, hf_mswsp_msg_cpmsetbinding_desc
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5856 request
.dummy
= tvb_get_letohl(tvb
, offset
);
5857 proto_tree_add_item(tree
, hf_mswsp_msg_cpmsetbinding_dummy
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5860 num
= tvb_get_letohl(tvb
, offset
);
5861 request
.ccolumns
= num
;
5862 ti
= proto_tree_add_item(tree
, hf_mswsp_msg_cpmsetbinding_ccolumns
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5865 proto_tree_add_item(tree
, hf_mswsp_msg_cpmsetbinding_acolumns
, tvb
, offset
, size
-4, ENC_NA
);
5867 /* Sanity check size value */
5868 column_size
= num
*MIN_CTABLECOL_SIZE
;
5869 if (num
> MAX_CTABLECOL_SIZE
|| column_size
> tvb_reported_length_remaining(tvb
, offset
))
5871 expert_add_info(pinfo
, ti
, &ei_mswsp_msg_cpmsetbinding_ccolumns
);
5872 return tvb_reported_length(tvb
);
5875 ct
= get_create_converstation_data(pinfo
);
5877 request
.acolumns
= (struct CTableColumn
*)wmem_alloc(wmem_file_scope(),
5878 sizeof(struct CTableColumn
) * num
);
5879 for (n
=0; n
<num
; n
++) {
5880 offset
= parse_padding(tvb
, offset
, 4, pad_tree
, "padding_aColumns[%u]", n
);
5881 offset
= parse_CTableColumn(tvb
, pinfo
, offset
, tree
, pad_tree
, &request
.acolumns
[n
],"aColumns[%u]", n
);
5883 data
= find_or_create_message_data(ct
, pinfo
,0xD0,in
, private_data
);
5885 data
->content
.bindingsin
= request
;
5888 } else { /* server only returns status with header */
5891 return tvb_reported_length(tvb
);
5894 static int dissect_CPMGetNotify(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree _U_
, bool in _U_
, void *data _U_
)
5896 col_append_str(pinfo
->cinfo
, COL_INFO
, "GetNotify");
5897 return tvb_reported_length(tvb
);
5900 static int dissect_CPMSendNotifyOut(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in _U_
, void *data _U_
)
5906 col_append_str(pinfo
->cinfo
, COL_INFO
, "SendNotify");
5907 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, -1, ENC_NA
);
5908 tree
= proto_item_add_subtree(item
, ett_mswsp_msg
);
5909 proto_item_set_text(item
, "GetSendNotifyOut");
5910 proto_tree_add_item(tree
, hf_mswsp_msg_cpmsendnotify_watchnotify
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5911 return tvb_reported_length(tvb
);
5914 static int dissect_CPMGetQueryStatus(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *data _U_
)
5920 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, -1, ENC_NA
);
5921 tree
= proto_item_add_subtree(item
, ett_mswsp_msg
);
5923 proto_item_set_text(item
, "GetQueryStatus%s", in
? "In" : "Out");
5924 col_append_str(pinfo
->cinfo
, COL_INFO
, "GetQueryStatus");
5928 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetquerystatus_hcursor
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5931 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetquerystatus_qstatus
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5934 return tvb_reported_length(tvb
);
5937 static int dissect_CPMCiState(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *data _U_
)
5943 col_append_str(pinfo
->cinfo
, COL_INFO
, "CiState");
5946 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, -1, ENC_NA
);
5947 tree
= proto_item_add_subtree(item
, ett_mswsp_msg
);
5948 proto_item_set_text(item
, "CiStateOut");
5949 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_cbstruct
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5951 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_cwordlist
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5953 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_cpersistindex
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5955 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_cqueries
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5957 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_cfreshtest
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5959 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_cfreshtest
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5961 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_dwmergeprogress
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5963 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_estate
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5965 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_cfiltereddocs
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5967 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_ctotaldocs
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5969 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_cpendingscans
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5971 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_dwindexsize
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5973 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_cuniquekeys
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5975 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_csecqdocuments
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5977 proto_tree_add_item(tree
, hf_mswsp_msg_cpmcistate_dwpropcachesize
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5979 return tvb_reported_length(tvb
);
5982 static int dissect_CPMFetchValue(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *data _U_
)
5986 proto_tree
*tree
, *pad_tree
;
5987 col_append_str(pinfo
->cinfo
, COL_INFO
, "FetchValue");
5989 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, -1, ENC_NA
);
5990 tree
= proto_tree_add_subtree_format(parent_tree
, tvb
, offset
, 0, ett_mswsp_msg
, &item
, "FetchValue%s", in
? "In" : "Out");
5991 pad_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_mswsp_pad
, NULL
, "Padding");
5993 struct CFullPropSpec prop
;
5994 proto_tree_add_item(tree
, hf_mswsp_msg_cpmfetchvalue_wid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5996 proto_tree_add_item(tree
, hf_mswsp_msg_cpmfetchvalue_cbsofar
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
5998 proto_tree_add_item(tree
, hf_mswsp_msg_cpmfetchvalue_cbpropspec
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6000 proto_tree_add_item(tree
, hf_mswsp_msg_cpmfetchvalue_cbchunk
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6002 offset
= parse_CFullPropSpec(tvb
, offset
, tree
, pad_tree
, &prop
,
6004 parse_padding(tvb
, offset
, 4, pad_tree
,"_padding");
6006 uint32_t cbValue
= tvb_get_letohl(tvb
, offset
);
6007 proto_tree_add_item(tree
, hf_mswsp_msg_cpmfetchvalue_cbvalue
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6009 proto_tree_add_item(tree
, hf_mswsp_msg_cpmfetchvalue_fmoreexists
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6011 proto_tree_add_item(tree
, hf_mswsp_msg_cpmfetchvalue_fvalueexists
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6013 proto_tree_add_item(tree
, hf_mswsp_msg_cpmfetchvalue_vvalue
, tvb
, offset
, cbValue
, ENC_NA
);
6015 return tvb_reported_length(tvb
);
6018 static int dissect_CPMGetQueryStatusEx(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *data _U_
)
6024 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, -1, ENC_NA
);
6025 tree
= proto_item_add_subtree(item
, ett_mswsp_msg
);
6027 proto_item_set_text(item
, "GetQueryStatusEx%s", in
? "In" : "Out");
6028 col_append_str(pinfo
->cinfo
, COL_INFO
, "GetQueryStatusEx");
6032 proto_tree_add_item(tree
, hf_mswsp_msg_cpmquerystatusex_hcursor
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6034 proto_tree_add_item(tree
, hf_mswsp_msg_cpmquerystatusex_bmk
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6037 proto_tree_add_item(tree
, hf_mswsp_msg_cpmquerystatusex_qstatus
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6039 proto_tree_add_item(tree
, hf_mswsp_msg_cpmquerystatusex_cfiltereddocs
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6041 proto_tree_add_item(tree
, hf_mswsp_msg_cpmquerystatusex_cdocstofilter
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6043 proto_tree_add_item(tree
, hf_mswsp_msg_cpmquerystatusex_dwratiodenom
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6045 proto_tree_add_item(tree
, hf_mswsp_msg_cpmquerystatusex_dwrationumer
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6047 proto_tree_add_item(tree
, hf_mswsp_msg_cpmquerystatusex_irowbmk
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6049 proto_tree_add_item(tree
, hf_mswsp_msg_cpmquerystatusex_crowstotal
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6051 proto_tree_add_item(tree
, hf_mswsp_msg_cpmquerystatusex_maxrank
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6053 proto_tree_add_item(tree
, hf_mswsp_msg_cpmquerystatusex_cresultsfound
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6055 proto_tree_add_item(tree
, hf_mswsp_msg_cpmquerystatusex_whereid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6057 return tvb_reported_length(tvb
);
6060 static int dissect_CPMRestartPosition(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *data _U_
)
6066 col_append_str(pinfo
->cinfo
, COL_INFO
, "CPMRestartPosition");
6069 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, -1, ENC_NA
);
6070 tree
= proto_item_add_subtree(item
, ett_mswsp_msg
);
6071 proto_item_set_text(item
, "CPMRestartPosition");
6072 proto_tree_add_item(tree
, hf_mswsp_msg_cpmrestartposition_hcursor
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6074 proto_tree_add_item(tree
, hf_mswsp_msg_cpmrestartposition_chapt
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6077 col_append_str(pinfo
->cinfo
, COL_INFO
, "RestartPosition");
6078 return tvb_reported_length(tvb
);
6081 static int dissect_CPMSetCatState(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree _U_
, bool in _U_
, void *data _U_
)
6083 col_append_str(pinfo
->cinfo
, COL_INFO
, "SetCatState");
6084 return tvb_reported_length(tvb
);
6087 static int dissect_CPMGetRowsetNotify(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *data _U_
)
6092 col_append_str(pinfo
->cinfo
, COL_INFO
, "GetRowsetNotify");
6094 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, -1, ENC_NA
);
6095 tree
= proto_item_add_subtree(item
, ett_mswsp_msg
);
6096 proto_item_set_text(item
, "GetRowsetNotifyOut");
6097 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrowsetnotify_wid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6101 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrowsetnotify_moreevents
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
6103 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrowsetnotify_eventtype
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
6106 /* rowSetItemState */
6107 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrowsetnotify_rowsetitemstate
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
6110 /* changedItemState */
6111 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrowsetnotify_changeditemstate
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
6115 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrowsetnotify_rowsetevent
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
6118 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrowsetnotify_rowseteventdata1
, tvb
, offset
, 8, ENC_LITTLE_ENDIAN
);
6120 proto_tree_add_item(tree
, hf_mswsp_msg_cpmgetrowsetnotify_rowseteventdata2
, tvb
, offset
, 8, ENC_LITTLE_ENDIAN
);
6121 /* it seems there is an extra unknown 8 bytes following */
6123 return tvb_reported_length(tvb
);
6126 static int dissect_CPMFindIndices(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *data _U_
)
6131 col_append_str(pinfo
->cinfo
, COL_INFO
, "FindIndices");
6132 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, -1, ENC_NA
);
6133 tree
= proto_item_add_subtree(item
, ett_mswsp_msg
);
6134 proto_item_set_text(item
, "FindIndices%s", in
? "In" : "Out");
6138 uint32_t cDepthPrev
;
6139 cWids
= tvb_get_letohl(tvb
, offset
);
6140 proto_tree_add_uint(tree
, hf_mswsp_msg_cpmfindindices_cwids
, tvb
, offset
, 4, cWids
);
6142 cDepthPrev
= tvb_get_letohl(tvb
, offset
);
6143 proto_tree_add_uint(tree
, hf_mswsp_msg_cpmfindindices_cdepthprev
, tvb
, offset
, 4, cDepthPrev
);
6145 offset
= parse_uin32_array(tvb
, offset
, tree
, cWids
, "pwids");
6146 parse_uin32_array(tvb
, offset
, tree
, cDepthPrev
, "prgiRowPrev");
6148 uint32_t cDepthNext
;
6149 cDepthNext
= tvb_get_letohl(tvb
, offset
);
6150 proto_tree_add_uint(tree
, hf_mswsp_msg_cpmfindindices_cdepthnext
, tvb
, offset
, 4, cDepthNext
);
6152 parse_uin32_array(tvb
, offset
, tree
, cDepthNext
, "prgiRowNext");
6154 return tvb_reported_length(tvb
);
6157 static int dissect_CPMSetScopePrioritization(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *data _U_
)
6163 col_append_str(pinfo
->cinfo
, COL_INFO
, "SetScopePrioritization");
6166 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, -1, ENC_NA
);
6167 tree
= proto_item_add_subtree(item
, ett_mswsp_msg
);
6168 proto_item_set_text(item
, "SetScopePrioritizationIn");
6169 proto_tree_add_item(tree
, hf_mswsp_msg_cpmsetscopeprioritization_priority
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6171 proto_tree_add_item(tree
, hf_mswsp_msg_cpmsetscopeprioritization_eventfreq
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6173 return tvb_reported_length(tvb
);
6176 static int dissect_CPMGetScopeStatistics(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, bool in
, void *data _U_
)
6183 item
= proto_tree_add_item(parent_tree
, hf_mswsp_msg
, tvb
, offset
, in
? 0 : -1, ENC_NA
);
6184 tree
= proto_item_add_subtree(item
, ett_mswsp_msg
);
6186 proto_item_set_text(item
, "GetScopeStatistics%s", in
? "In" : "Out");
6187 col_append_str(pinfo
->cinfo
, COL_INFO
, "GetScopeStatistics");
6193 proto_tree_add_item(tree
, hf_mswsp_msg_cpmsetscopestatisics_dwindexitems
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6195 proto_tree_add_item(tree
, hf_mswsp_msg_cpmsetscopestatisics_dwoutstandingadds
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6197 proto_tree_add_item(tree
, hf_mswsp_msg_cpmsetscopestatisics_dwoutstandingmodifies
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
6200 return tvb_reported_length(tvb
);
6204 static const value_string msg_ids
[] = {
6205 {0x000000C8, "CPMConnect"}, /* In/Out */
6206 {0x000000C9, "CPMDisconnect"},
6207 {0x000000CA, "CPMCreateQuery"}, /* In/Out */
6208 {0x000000CB, "CPMFreeCursor"}, /* In/Out */
6209 {0x000000CC, "CPMGetRows"}, /* In/Out */
6210 {0x000000CD, "CPMRatioFinished"}, /* In/Out */
6211 {0x000000CE, "CPMCompareBmk"}, /* In/Out */
6212 {0x000000CF, "CPMGetApproximatePosition"}, /* In/Out */
6213 {0x000000D0, "CPMSetBindingsIn"},
6214 {0x000000D1, "CPMGetNotify"},
6215 {0x000000D2, "CPMSendNotifyOut"},
6216 {0x000000D7, "CPMGetQueryStatusIn"}, /* In/Out */
6217 {0x000000D9, "CPMCiStateInOut"},
6218 {0x000000E4, "CPMFetchValue"}, /* In/Out */
6219 {0x000000E7, "CPMGetQueryStatusEx"}, /* In/Out */
6220 {0x000000E8, "CPMRestartPositionIn"},
6221 {0x000000EC, "CPMSetCatStateIn"}, /* (not supported) */
6222 {0x000000F1, "CPMGetRowsetNotify"}, /* In/Out */
6223 {0x000000F2, "CPMFindIndices"}, /* In/Out */
6224 {0x000000F3, "CPMSetScopePrioritization"}, /* In/Out */
6225 {0x000000F4, "CPMGetScopeStatistics"}, /* In/Out */
6231 dissect_mswsp(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, bool in
, void *data
)
6233 proto_tree
*mswsp_tree
= NULL
;
6234 proto_tree
*hdr_tree
;
6235 proto_item
*ti
, *hti
;
6240 if (tvb_reported_length(tvb
) < 16) {
6244 /* col_set_str(pinfo->cinfo, COL_PROTOCOL, "MS-WSP"); */
6245 col_append_str(pinfo
->cinfo
, COL_PROTOCOL
, " WSP");
6246 /* col_clear(pinfo->cinfo, COL_INFO); */
6248 col_set_str(pinfo
->cinfo
, COL_INFO
, "WSP ");
6249 col_append_str(pinfo
->cinfo
, COL_INFO
, in
? "Request: " : "Response: ");
6251 ti
= proto_tree_add_item(tree
, proto_mswsp
, tvb
, 0, -1, ENC_NA
);
6252 mswsp_tree
= proto_item_add_subtree(ti
, ett_mswsp
);
6254 hti
= proto_tree_add_item(mswsp_tree
, hf_mswsp_hdr
, tvb
, 0, 16, ENC_NA
);
6255 hdr_tree
= proto_item_add_subtree(hti
, ett_mswsp_hdr
);
6257 proto_tree_add_item_ret_uint(hdr_tree
, hf_mswsp_hdr_msg
, tvb
,
6258 0, 4, ENC_LITTLE_ENDIAN
, &msg
);
6259 proto_item_append_text(hti
, " %s", val_to_str(msg
, VALS(msg_ids
),
6260 "(Unknown: 0x%x)"));
6262 proto_tree_add_item_ret_uint(hdr_tree
, hf_mswsp_hdr_status
, tvb
,
6263 4, 4, ENC_LITTLE_ENDIAN
, &status
);
6264 if (!in
|| status
!= 0) {
6265 proto_item_append_text(hti
, " %s",
6266 val_to_str(status
, VALS(dcom_hresult_vals
),
6267 "(Unknown: 0x%x)"));
6270 proto_tree_add_checksum(hdr_tree
, tvb
, 8, hf_mswsp_hdr_checksum
, -1, NULL
, pinfo
, 0, ENC_LITTLE_ENDIAN
, PROTO_CHECKSUM_NO_FLAGS
);
6271 /* todo: validate checksum */
6273 proto_tree_add_item(hdr_tree
, hf_mswsp_hdr_reserved
, tvb
,
6274 12, 4, ENC_LITTLE_ENDIAN
);
6279 dissect_CPMConnect(tvb
, pinfo
, tree
, in
, data
);
6282 dissect_CPMDisconnect(tvb
, pinfo
, tree
, in
, data
);
6285 dissect_CPMCreateQuery(tvb
, pinfo
, tree
, in
, data
);
6288 dissect_CPMFreeCursor(tvb
, pinfo
, tree
, in
, data
);
6291 dissect_CPMGetRows(tvb
, pinfo
, tree
, in
, data
);
6294 dissect_CPMRatioFinished(tvb
, pinfo
, tree
, in
, data
);
6297 dissect_CPMCompareBmk(tvb
, pinfo
, tree
, in
, data
);
6300 dissect_CPMGetApproximatePosition(tvb
, pinfo
, tree
, in
, data
);
6303 dissect_CPMSetBindings(tvb
, pinfo
, tree
, in
, data
);
6306 dissect_CPMGetNotify(tvb
, pinfo
, tree
, in
, data
);
6309 dissect_CPMSendNotifyOut(tvb
, pinfo
, tree
, in
, data
);
6312 dissect_CPMGetQueryStatus(tvb
, pinfo
, tree
, in
, data
);
6315 dissect_CPMCiState(tvb
, pinfo
, tree
, in
, data
);
6318 dissect_CPMFetchValue(tvb
, pinfo
, tree
, in
, data
);
6321 dissect_CPMGetQueryStatusEx(tvb
, pinfo
, tree
, in
, data
);
6324 dissect_CPMRestartPosition(tvb
, pinfo
, tree
, in
, data
);
6327 dissect_CPMSetCatState(tvb
, pinfo
, tree
, in
, data
);
6330 dissect_CPMGetRowsetNotify(tvb
, pinfo
, tree
, in
, data
);
6333 dissect_CPMFindIndices(tvb
, pinfo
, tree
, in
, data
);
6336 dissect_CPMSetScopePrioritization(tvb
, pinfo
, tree
, in
, data
);
6339 dissect_CPMGetScopeStatistics(tvb
, pinfo
, tree
, in
, data
);
6345 /* Return the amount of data this dissector was able to dissect */
6346 return tvb_reported_length(tvb
);
6351 proto_register_mswsp(void)
6353 expert_module_t
* expert_mswsp
= NULL
;
6354 static hf_register_info hf
[] = {
6358 "Header", "mswsp.hdr",
6359 FT_NONE
, BASE_NONE
, NULL
, 0,
6360 "Message header", HFILL
6366 "Msg id", "mswsp.hdr.id",
6367 FT_UINT32
, BASE_HEX
, VALS(msg_ids
), 0,
6372 &hf_mswsp_hdr_status
,
6374 "Status", "mswsp.hdr.status",
6375 FT_UINT32
, BASE_HEX
, VALS(dcom_hresult_vals
), 0,
6376 "Message Status", HFILL
6380 &hf_mswsp_hdr_checksum
,
6382 "checksum", "mswsp.hdr.checksum",
6383 FT_UINT32
, BASE_HEX
, NULL
, 0,
6384 "Message Checksum", HFILL
6388 &hf_mswsp_hdr_reserved
,
6390 "Reserved", "mswsp.hdr.reserved",
6391 FT_UINT32
, BASE_HEX
, NULL
, 0,
6392 "Reserved bytes", HFILL
6399 FT_NONE
, BASE_NONE
, NULL
, 0,
6404 &hf_mswsp_msg_Connect_Version
,
6406 "Version", "mswsp.Connect.version",
6407 FT_UINT32
, BASE_HEX
, VALS(version_vals
), 0,
6412 &hf_mswsp_msg_ConnectIn_ClientIsRemote
,
6414 "Remote", "mswsp.ConnectIn.isRemote",
6415 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
6416 "Client is remote",HFILL
6420 &hf_mswsp_msg_ConnectIn_Blob1
,
6422 "Size", "mswsp.ConnectIn.propset.size",
6423 FT_UINT32
, BASE_DEC
, NULL
, 0,
6424 "Size of PropSet fields",HFILL
6428 &hf_mswsp_msg_ConnectIn_MachineName
,
6430 "Remote machine", "mswsp.ConnectIn.machine",
6431 FT_STRINGZ
, BASE_NONE
, NULL
, 0,
6432 "Name of remote machine",HFILL
6436 &hf_mswsp_msg_ConnectIn_UserName
,
6438 "User", "mswsp.ConnectIn.user",
6439 FT_STRINGZ
, BASE_NONE
, NULL
, 0,
6440 "Name of remote user",HFILL
6444 &hf_mswsp_msg_ConnectIn_PropSets_num
,
6446 "Num", "mswsp.ConnectIn.propset.num",
6447 FT_UINT32
, BASE_DEC
, NULL
, 0,
6448 "Number of Property Sets", HFILL
6452 &hf_mswsp_bool_options
,
6454 "uBooleanOptions", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions",
6455 FT_UINT32
, BASE_HEX
, NULL
, 0, "Boolean options", HFILL
6459 &hf_mswsp_bool_options_cursor
,
6461 "Cursor", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.cursor", FT_UINT32
,
6462 BASE_HEX
, VALS(cursor_vals
), 0x00000007, "Cursor Type", HFILL
6466 &hf_mswsp_bool_options_async
,
6468 "eAsynchronous", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.eAsynchronous",
6469 FT_BOOLEAN
, 32, NULL
, eAsynchronous
, "The client will not wait for execution completion", HFILL
6473 &hf_mswsp_bool_options_firstrows
,
6475 "eFirstRows", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.eFirstRows",
6476 FT_BOOLEAN
, 32, NULL
, eFirstRows
, "Return the first rows encountered, not the best matches.", HFILL
6480 &hf_mswsp_bool_options_holdrows
,
6482 "eHoldRows", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.eHoldRows",
6483 FT_BOOLEAN
, 32, NULL
, eHoldRows
, "The server MUST NOT discard rows until the client is done with a query.", HFILL
6487 &hf_mswsp_bool_options_chaptered
,
6489 "eChaptered", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.eChaptered",
6490 FT_BOOLEAN
, 32, NULL
, eChaptered
, "The rowset supports chapters.", HFILL
6494 &hf_mswsp_bool_options_useci
,
6496 "eUseCI", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.eUseCI",
6497 FT_BOOLEAN
, 32, NULL
, eUseCI
, "Use the inverted index to evaluate content restrictions even if it is out of date.", HFILL
6501 &hf_mswsp_bool_options_defertrim
,
6503 "eDeferTrimming", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.eDeferTrimming",
6504 FT_BOOLEAN
, 32, NULL
, eDeferTrimming
, "Defer Non-indexed trimming operations like scoping or security checking which can be expensive.", HFILL
6508 &hf_mswsp_bool_options_rowsetevents
,
6510 "eEnableRowsetEvents", "mswsp.RowSetProperties.CPMCreateQuery.uBooleanOptions.eEnableRowsetEvents",
6511 FT_BOOLEAN
, 32, NULL
, eEnableRowsetEvents
, "Enables storage of rowset events on the server side.", HFILL
6515 &hf_mswsp_bool_options_dontcomputeexpensive
,
6517 "eDoNotComputeExpensiveProps", "mswsp.CPMCreateQuery.RowSetProperties.uBooleanOptions.eDoNotComputeExpensiveProps",
6518 FT_BOOLEAN
, 32, NULL
, eDoNotComputeExpensiveProps
, "Prevents computation of expensive properties.", HFILL
6522 &hf_mswsp_guid_time_low
,
6524 "time-low", "mswsp.guid.time_low",
6525 FT_UINT32
, BASE_HEX
, NULL
, 0, "time low value", HFILL
6529 &hf_mswsp_guid_time_mid
,
6531 "time-mid", "mswsp.guid.time_mid",
6532 FT_UINT16
, BASE_HEX
, NULL
, 0, "time mid value", HFILL
6536 &hf_mswsp_guid_time_high
,
6538 "time-high", "mswsp.guid.time_high",
6539 FT_UINT16
, BASE_HEX
, NULL
, 0, "time high value", HFILL
6543 &hf_mswsp_guid_time_clock_hi
,
6545 "clock_seq_hi_and_reserved", "mswsp.guid.time_clock_high",
6546 FT_UINT8
, BASE_HEX
, NULL
, 0, "time clock high value", HFILL
6550 &hf_mswsp_guid_time_clock_low
,
6552 "clock_seq_low", "mswsp.guid.time_clock_low",
6553 FT_UINT8
, BASE_HEX
, NULL
, 0, "time clock high low", HFILL
6557 &hf_mswsp_guid_node
,
6559 "node", "mswsp.guid.node",
6560 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6566 "lcid", "mswsp.lcid",
6567 FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6571 &hf_mswsp_lcid_sortid
,
6573 "Sort ID", "mswsp.lcid.sortid",
6574 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6578 &hf_mswsp_lcid_langid
,
6580 "Language ID", "mswsp.lcid.langid",
6581 FT_UINT16
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6585 &hf_mswsp_cscort_column
,
6587 "column", "mswsp.csort.column",
6588 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6592 &hf_mswsp_cscort_order
,
6594 "order", "mswsp.csort.order",
6595 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6599 &hf_mswsp_cscort_individual
,
6601 "individual", "mswsp.csort.individual",
6602 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6606 &hf_mswsp_cscortset_count
,
6608 "count", "mswsp.csortset.count",
6609 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6613 &hf_mswsp_ctablecolumn_vtype
,
6615 "vType", "mswsp.ctablecolumn.vtype",
6616 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6620 &hf_mswsp_ctablecolumn_aggused
,
6622 "AggregateUsed", "mswsp.ctablecolumn.aggused",
6623 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6627 &hf_mswsp_ctablecolumn_aggtype
,
6629 "AggregateType", "mswsp.ctablecolumn.aggtype",
6630 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6634 &hf_mswsp_ctablecolumn_valused
,
6636 "ValueUsed", "mswsp.ctablecolumn.valused",
6637 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6641 &hf_mswsp_ctablecolumn_valoffset
,
6643 "ValueOffset", "mswsp.ctablecolumn.valoffset",
6644 FT_UINT16
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6648 &hf_mswsp_ctablecolumn_valsize
,
6650 "ValueSize", "mswsp.ctablecolumn.valsize",
6651 FT_UINT16
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6655 &hf_mswsp_ctablecolumn_statused
,
6657 "StatusUsed", "mswsp.ctablecolumn.statused",
6658 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6662 &hf_mswsp_ctablecolumn_statoffset
,
6664 "StatusOffset", "mswsp.ctablecolumn.statoffset",
6665 FT_UINT16
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6669 &hf_mswsp_ctablecolumn_lenused
,
6671 "LengthUsed", "mswsp.ctablecolumn.lenused",
6672 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6676 &hf_mswsp_ctablecolumn_lenoffset
,
6678 "LengthOffset", "mswsp.ctablecolumn.lenoffset",
6679 FT_UINT16
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6683 &hf_mswsp_cfullpropspec_kind
,
6685 "ulKind", "mswsp.cfullpropspec.kind",
6686 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6690 &hf_mswsp_cfullpropspec_propid
,
6692 "propid", "mswsp.cfullpropspec.propid",
6693 FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6697 &hf_mswsp_cfullpropspec_propname
,
6699 "propname", "mswsp.cfullpropspec.propname",
6700 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6704 &hf_mswsp_cproprestrict_relop
,
6706 "relop", "mswsp.cproprestrict.relop",
6707 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6711 &hf_mswsp_ccoercerestrict_value
,
6713 "value", "mswsp.ccoercerestrict.value",
6714 FT_FLOAT
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6718 &hf_mswsp_ccontentrestrict_cc
,
6720 "cc", "mswsp.ccontentrestrict.cc",
6721 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6725 &hf_mswsp_ccontentrestrict_phrase
,
6727 "phrase", "mswsp.ccontentrestrict.phrase",
6728 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6732 &hf_mswsp_ccontentrestrict_method
,
6734 "method", "mswsp.ccontentrestrict.method",
6735 FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6739 &hf_mswsp_natlangrestrict_cc
,
6741 "cc", "mswsp.ccontentrestrict.cc",
6742 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6746 &hf_mswsp_natlangrestrict_phrase
,
6748 "phrase", "mswsp.ccontentrestrict.phrase",
6749 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6753 &hf_mswsp_crestrict_ultype
,
6755 "ulType", "mswsp.crestrict.ultype",
6756 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6760 &hf_mswsp_crestrict_weight
,
6762 "Weight", "mswsp.crestrict.weight",
6763 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6767 &hf_mswsp_crestrictarray_count
,
6769 "count", "mswsp.crestrictarray.count",
6770 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6774 &hf_mswsp_crestrictarray_present
,
6776 "present", "mswsp.crestrictarray.present",
6777 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6781 &hf_mswsp_cnoderestrict_cnode
,
6783 "Weight", "mswsp.cnoderestrict.cnode",
6784 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6788 &hf_mswsp_cbasestorvariant_vtype
,
6790 "vType", "mswsp.cbasestorvariant.vtype",
6791 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6795 &hf_mswsp_cbasestorvariant_vvalue
,
6797 "vValue", "mswsp.cbasestorvariant.vvalue",
6798 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6802 &hf_mswsp_cbasestorvariant_vdata1
,
6804 "vData1", "mswsp.cbasestorvariant.vdata1",
6805 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6809 &hf_mswsp_cbasestorvariant_vdata2
,
6811 "vData2", "mswsp.cbasestorvariant.vdata2",
6812 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6816 &hf_mswsp_cbasestorvariant_num
,
6818 "num", "mswsp.cbasestorvariant.num",
6819 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6823 &hf_mswsp_cbasestorvariant_cdims
,
6825 "cDims", "mswsp.cbasestorvariant.cdims",
6826 FT_UINT16
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6830 &hf_mswsp_cbasestorvariant_ffeatures
,
6832 "fFeatures", "mswsp.cbasestorvariant.ffeatures",
6833 FT_UINT16
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6837 &hf_mswsp_cbasestorvariant_cbelements
,
6839 "cbElements", "mswsp.cbasestorvariant.cbelements",
6840 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6844 &hf_mswsp_cbasestorvariant_rgsabound
,
6846 "Rgsabound", "mswsp.cbasestorvariant.rgsabound",
6847 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6851 &hf_mswsp_cdbcolid_ekind
,
6853 "eKind", "mswsp.cdbcolid.ekind",
6854 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6858 &hf_mswsp_cdbcolid_ulid
,
6860 "ulId", "mswsp.cdbcolid.ulid",
6861 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6865 &hf_mswsp_cdbcolid_vstring
,
6867 "vString", "mswsp.cdbcolid.vstring",
6868 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6872 &hf_mswsp_cdbprop_id
,
6874 "Id", "mswsp.cdbprop.id",
6875 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6879 &hf_mswsp_cdbprop_options
,
6881 "Options", "mswsp.cdbprop.options",
6882 FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6886 &hf_mswsp_cdbprop_status
,
6888 "Status", "mswsp.cdbprop.status",
6889 FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6893 &hf_mswsp_cdbpropset_cprops
,
6895 "cProperties", "mswsp.cdbpropset.cprops",
6896 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6900 &hf_mswsp_rangeboundry_ultype
,
6902 "ulType", "mswsp.rangeboundry.ultype",
6903 FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6907 &hf_mswsp_rangeboundry_labelpresent
,
6909 "labelPresent", "mswsp.rangeboundry.labelpresent",
6910 FT_BOOLEAN
, 8, NULL
, 0x01, NULL
, HFILL
6914 &hf_mswsp_rangeboundry_cclabel
,
6916 "ccLabel", "mswsp.rangeboundry.cclabel",
6917 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6921 &hf_mswsp_rangeboundry_label
,
6923 "Label", "mswsp.rangeboundry.label",
6924 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6928 &hf_mswsp_crangecategspec_crange
,
6930 "cRange", "mswsp.crangecategspec.crange",
6931 FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
6935 &hf_mswsp_ccategspec_type
,
6937 "type", "mswsp.ccategspec.type",
6938 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6942 &hf_mswsp_caggregspec_type
,
6944 "type", "mswsp.caggregspec.type",
6945 FT_UINT8
, BASE_DEC
, VALS(DBAGGTTYPE
), 0, NULL
, HFILL
6949 &hf_mswsp_caggregspec_ccalias
,
6951 "ccAlias", "mswsp.caggregspec.ccalias",
6952 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6956 &hf_mswsp_caggregspec_alias
,
6958 "Alias", "mswsp.caggregspec.alias",
6959 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
6963 &hf_mswsp_caggregspec_idcolumn
,
6965 "idColumn", "mswsp.caggregspec.idcolumn",
6966 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6970 &hf_mswsp_caggregspec_ulmaxnumtoreturn
,
6973 "mswsp.caggregspec.ulmaxnumtoreturn",
6974 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6978 &hf_mswsp_caggregspec_idrepresentative
,
6981 "mswsp.caggregspec.idrepresentative",
6982 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6986 &hf_mswsp_caggregset_count
,
6988 "count", "mswsp.caggregset.count",
6989 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
6993 &hf_mswsp_caggregsortkey_order
,
6995 "order", "mswsp.caggregsortkey.order",
6996 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7000 &hf_mswsp_csortaggregset_count
,
7002 "count", "mswsp.csortaggregset.count",
7003 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7007 &hf_mswsp_cingroupsortaggregset_type
,
7009 "Type", "mswsp.cingroupsortaggregset.type",
7010 FT_UINT8
, BASE_HEX
, NULL
, 0, NULL
, HFILL
7014 &hf_mswsp_cingroupsortaggregsets_count
,
7016 "count", "mswsp.cingroupsortaggregsets.count",
7017 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7021 &hf_mswsp_categorizationspec_cmaxres
,
7023 "cMaxResults", "mswsp.categorizationspec.cmaxres",
7024 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7028 &hf_mswsp_crowsetprops_ulmaxopenrows
,
7030 "ulMaxOpenRows (ignored)", "mswsp.crowsetprops.ulmaxopenrows",
7031 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7035 &hf_mswsp_crowsetprops_ulmemusage
,
7037 "ulMemUsage (ignored)", "mswsp.crowsetprops.ulmemusage",
7038 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7042 &hf_mswsp_crowsetprops_cmaxresults
,
7044 "cMaxResults", "mswsp.crowsetprops.cmaxresults",
7045 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7049 &hf_mswsp_crowsetprops_ccmdtimeout
,
7051 "cCmdTimeout", "mswsp.crowsetprops.ccmdtimeout",
7052 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7056 &hf_mswsp_cpidmapper_count
,
7058 "count", "mswsp.cpidmapper.count",
7059 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7063 &hf_mswsp_ccolumngroup_count
,
7065 "count", "mswsp.ccolumngroup.count",
7066 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7070 &hf_mswsp_ccolumngroup_grouppid
,
7072 "groupPid", "mswsp.ccolumngroup.grouppid",
7073 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7077 &hf_mswsp_ccolumngroup_pid
,
7079 "pid", "mswsp.ccolumngroup.pid",
7080 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7084 &hf_mswsp_ccolumngrouparray_count
,
7086 "count", "mswsp.ccolumngrouparray.count",
7087 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7091 &hf_mswsp_int32array_value
,
7093 "value", "mswsp.int32array.value",
7094 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7098 &hf_mswsp_crowseeknext_cskip
,
7100 "cskip", "mswsp.crowseeknext.cskip",
7101 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7105 &hf_mswsp_crowseekat_bmkoffset
,
7107 "bmkoffset", "mswsp.crowseekat.bmkoffset",
7108 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7112 &hf_mswsp_crowseekat_skip
,
7114 "skip", "mswsp.crowseekat.skip",
7115 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7119 &hf_mswsp_crowseekat_hregion
,
7121 "hregion", "mswsp.crowseekat.hregion",
7122 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7126 &hf_mswsp_crowseekatratio_ulnumerator
,
7128 "ulnumerator", "mswsp.crowseekatratio.ulnumerator",
7129 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7133 &hf_mswsp_crowseekatratio_uldenominator
,
7135 "uldenominator", "mswsp.crowseekatratio.uldenominator",
7136 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7140 &hf_mswsp_crowseekatratio_hregion
,
7142 "hregion", "mswsp.crowseekatratio.hregion",
7143 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7147 &hf_mswsp_crowseekbybookmark_cbookmarks
,
7149 "cbookmarks", "mswsp.crowseekbybookmark.cbookmarks",
7150 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7154 &hf_mswsp_crowseekbybookmark_maxret
,
7156 "maxret", "mswsp.crowseekbybookmark.maxret",
7157 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7161 &hf_mswsp_crowvariantinfo_count64
,
7163 "count", "mswsp.crowvariantinfo.count64",
7164 FT_UINT64
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7168 &hf_mswsp_arrayvector_address64
,
7170 "address of array", "mswsp.arrayvector.address64",
7171 FT_UINT64
, BASE_HEX
, NULL
, 0, NULL
, HFILL
7175 &hf_mswsp_crowvariantinfo_count32
,
7177 "count", "mswsp.crowvariantinfo.count32",
7178 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7182 &hf_mswsp_arrayvector_address32
,
7184 "address of array", "mswsp.arrayvector.address",
7185 FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
7189 &hf_mswsp_rowvariant_item_address64
,
7191 "address", "mswsp.rowvariant.item.address64",
7192 FT_UINT64
, BASE_HEX
, NULL
, 0, NULL
, HFILL
7196 &hf_mswsp_rowvariant_item_address32
,
7198 "address", "mswsp.rowvariant.item.address32",
7199 FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
7203 &hf_mswsp_rowvariant_item_value
,
7205 "value", "mswsp.rowvariant.item.value",
7206 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
7210 &hf_mswsp_rowvariant_vtype
,
7212 "vtype", "mswsp.rowvariant.vtype",
7213 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
7217 &hf_mswsp_rowvariant_reserved1
,
7219 "reserved1", "mswsp.rowvariant.reserved1",
7220 FT_UINT16
, BASE_HEX
, NULL
, 0, NULL
, HFILL
7224 &hf_mswsp_rowvariant_reserved2
,
7226 "reserved2", "mswsp.rowvariant.reserved2",
7227 FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
7231 &hf_mswsp_ctablecolumn_status
,
7233 "status", "mswsp.ctablecolumn.name",
7234 FT_STRING
, BASE_NONE
, NULL
, 0, NULL
, HFILL
7238 &hf_mswsp_ctablecolumn_length
,
7240 "length", "mswsp.ctablecolumn.length",
7241 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7245 &hf_mswsp_msg_cpmcreatequery_size
,
7247 "size", "mswsp.cpmcreatequery.size",
7248 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7252 &hf_mswsp_msg_cpmcreatequery_ccolumnsetpresent
,
7254 "CColumnSetPresent", "mswsp.cpmcreatequery.ccolumnsetpresent",
7255 FT_BOOLEAN
, 8, NULL
, 0x01, NULL
, HFILL
7259 &hf_mswsp_msg_cpmcreatequery_crestrictionpresent
,
7261 "CRestrictionPresent", "mswsp.cpmcreatequery.crestrictionpresent",
7262 FT_BOOLEAN
, 8, NULL
, 0x01, NULL
, HFILL
7266 &hf_mswsp_msg_cpmcreatequery_csortpresent
,
7268 "CSortPresent", "mswsp.cpmcreatequery.csortpresent",
7269 FT_BOOLEAN
, 8, NULL
, 0x01, NULL
, HFILL
7273 &hf_mswsp_msg_cpmcreatequery_ccategpresent
,
7275 "CCategorizationSetPresent", "mswsp.cpmcreatequery.ccategpresent",
7276 FT_BOOLEAN
, 8, NULL
, 0x01, NULL
, HFILL
7280 &hf_mswsp_msg_cpmcreatequery_ccateg_count
,
7282 "count", "mswsp.cpmcreatequery.ccateg.count",
7283 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7287 &hf_mswsp_msg_cpmcreatequery_trueseq
,
7289 "TrueSequential", "mswsp.cpmcreatequery.trueseq",
7290 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7294 &hf_mswsp_msg_cpmcreatequery_workid
,
7296 "WorkId", "mswsp.cpmcreatequery.workid",
7297 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7301 &hf_mswsp_msg_cpmcreatequery_cursors
,
7303 "Cursors", "mswsp.cpmcreatequery.cursors",
7304 FT_BYTES
, SEP_SPACE
, NULL
, 0, NULL
, HFILL
7308 &hf_mswsp_msg_cpmgetrows_hcursor
,
7310 "hCursor", "mswsp.msg.cpmgetrows.hcursor",
7311 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7315 &hf_mswsp_msg_cpmgetrows_rowstotransfer
,
7317 "cRowsToTransfer", "mswsp.msg.cpmgetrows.rowstotransfer",
7318 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7322 &hf_mswsp_msg_cpmgetrows_rowwidth
,
7324 "cbRowWidth", "mswsp.msg.cpmgetrows.rowswidth",
7325 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7329 &hf_mswsp_msg_cpmgetrows_cbseek
,
7331 "cbSeek", "mswsp.msg.cpmgetrows.cbseek",
7332 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7336 &hf_mswsp_msg_cpmgetrows_cbreserved
,
7338 "cbReserved", "mswsp.msg.cpmgetrows.cbreserved",
7339 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7343 &hf_mswsp_msg_cpmgetrows_cbreadbuffer
,
7345 "cbReadBuffer", "mswsp.msg.cpmgetrows.cbreadbuffer",
7346 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7350 &hf_mswsp_msg_cpmgetrows_ulclientbase
,
7352 "ulClientBase", "mswsp.msg.cpmgetrows.ulclientbase",
7353 FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
7357 &hf_mswsp_msg_cpmgetrows_fbwdfetch
,
7359 "fBwdFetch", "mswsp.msg.cpmgetrows.fbwdfetch",
7360 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7364 &hf_mswsp_msg_cpmgetrows_etype
,
7366 "eType", "mswsp.msg.cpmgetrows.etype",
7367 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7371 &hf_mswsp_msg_cpmgetrows_chapt
,
7373 "chapt", "mswsp.msg.cpmgetrows.chapt",
7374 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7378 &hf_mswsp_msg_cpmgetrows_crowsreturned
,
7380 "cRowsReturned", "mswsp.msg.cpmgetrows.crowsreturned",
7381 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7385 &hf_mswsp_msg_cpmratiofinished_hcursor
,
7387 "hCursor", "mswsp.msg.cpmratiofinished_hcursor",
7388 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7392 &hf_mswsp_msg_cpmratiofinished_fquick
,
7394 "fQuick", "mswsp.msg.cpmratiofinished_fquick",
7395 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7399 &hf_mswsp_msg_cpmratiofinished_ulnumerator
,
7401 "ulNumerator", "mswsp.msg.cpmratiofinished_ulnumerator",
7402 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7406 &hf_mswsp_msg_cpmratiofinished_uldenominator
,
7408 "ulDenominator", "mswsp.msg.cpmratiofinished_uldenominator",
7409 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7413 &hf_mswsp_msg_cpmratiofinished_crows
,
7415 "cRows", "mswsp.msg.cpmratiofinished_crows",
7416 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7420 &hf_mswsp_msg_cpmratiofinished_fnewrows
,
7422 "fNewRows", "mswsp.msg.cpmratiofinished_fnewrows",
7423 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7427 &hf_mswsp_msg_cpmcomparebmk_hcursor
,
7429 "hCursor", "mswsp.msg.cpmcomparebmk.hcursor",
7430 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7434 &hf_mswsp_msg_cpmcomparebmk_chapt
,
7436 "chapt", "mswsp.msg.cpmcomparebmk.chapt",
7437 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7441 &hf_mswsp_msg_cpmcomparebmk_bmkfirst
,
7443 "bmkFirst", "mswsp.msg.cpmcomparebmk.bmkfirst",
7444 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7448 &hf_mswsp_msg_cpmcomparebmk_bmksecond
,
7450 "bmkSecond", "mswsp.msg.cpmcomparebmk.bmksecond",
7451 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7455 &hf_mswsp_msg_cpmcomparebmk_dwcomparison
,
7457 "dwComparison", "mswsp.msg.cpmcomparebmk.dwcomparison",
7458 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7462 &hf_mswsp_msg_cpmgetapproxpos_hcursor
,
7464 "hCursor", "mswsp.msg.cpmgetapproxpos.hcursor",
7465 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7469 &hf_mswsp_msg_cpmgetapproxpos_chapt
,
7471 "chapt", "mswsp.msg.cpmgetapproxpos.chapt",
7472 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7476 &hf_mswsp_msg_cpmgetapproxpos_bmk
,
7478 "bmk", "mswsp.msg.cpmgetapproxpos.bmk",
7479 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7483 &hf_mswsp_msg_cpmgetapproxpos_numerator
,
7485 "numerator", "mswsp.msg.cpmgetapproxpos.numerator",
7486 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7490 &hf_mswsp_msg_cpmgetapproxpos_denominator
,
7492 "denominator", "mswsp.msg.cpmgetapproxpos.denominator",
7493 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7497 &hf_mswsp_msg_cpmsetbinding_hcursor
,
7499 "hCursor", "mswsp.msg.cpmsetbinding.hcursor",
7500 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7504 &hf_mswsp_msg_cpmsetbinding_cbrow
,
7506 "cBrow", "mswsp.msg.cpmsetbinding.cbrow",
7507 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7511 &hf_mswsp_msg_cpmsetbinding_desc
,
7513 "cbBindingDesc", "mswsp.msg.cpmsetbinding.desc",
7514 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7518 &hf_mswsp_msg_cpmsetbinding_dummy
,
7520 "dummy", "mswsp.msg.cpmsetbinding.dummy",
7521 FT_UINT32
, BASE_HEX
, NULL
, 0, NULL
, HFILL
7525 &hf_mswsp_msg_cpmsetbinding_ccolumns
,
7527 "cColumns", "mswsp.msg.cpmsetbinding.ccolumns",
7528 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7532 &hf_mswsp_msg_cpmsetbinding_acolumns
,
7534 "aColumns", "mswsp.msg.cpmsetbinding.acolumns",
7535 FT_BYTES
, SEP_DOT
, NULL
, 0, NULL
, HFILL
7539 &hf_mswsp_msg_cpmsendnotify_watchnotify
,
7541 "watchNotify", "mswsp.msg.cpmsendnotify.watchnotify",
7542 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7546 &hf_mswsp_msg_cpmgetquerystatus_hcursor
,
7548 "hCursor", "mswsp.msg.cpmquerystatus.hcursor",
7549 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7553 &hf_mswsp_msg_cpmgetquerystatus_qstatus
,
7555 "QStatus", "mswsp.msg.cpmquerystatus.qstatus",
7556 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7560 &hf_mswsp_msg_cpmcistate_cbstruct
,
7562 "cbStruct", "mswsp.msg.cpmcistate.cbstruct",
7563 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7567 &hf_mswsp_msg_cpmcistate_cwordlist
,
7569 "cbWordList", "mswsp.msg.cpmcistate.cbwordlist",
7570 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7574 &hf_mswsp_msg_cpmcistate_cpersistindex
,
7576 "cbPersistentIndex", "mswsp.msg.cpmcistate.cbpersistindex",
7577 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7581 &hf_mswsp_msg_cpmcistate_cqueries
,
7583 "cQueries", "mswsp.msg.cpmcistate.cqueries",
7584 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7588 &hf_mswsp_msg_cpmcistate_cfreshtest
,
7590 "cFreshTest", "mswsp.msg.cpmcistate.cfreshtest",
7591 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7595 &hf_mswsp_msg_cpmcistate_dwmergeprogress
,
7597 "dwMergeProgress", "mswsp.msg.cpmcistate.dwmergeprogress",
7598 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7602 &hf_mswsp_msg_cpmcistate_estate
,
7604 "eState", "mswsp.msg.cpmcistate.estate",
7605 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7609 &hf_mswsp_msg_cpmcistate_cfiltereddocs
,
7611 "cFilteredDocuments", "mswsp.msg.cpmcistate.cfiltereddocs",
7612 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7616 &hf_mswsp_msg_cpmcistate_ctotaldocs
,
7618 "cTotalDocuments", "mswsp.msg.cpmcistate.ctotaldocs",
7619 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7623 &hf_mswsp_msg_cpmcistate_cpendingscans
,
7625 "cPendingScans", "mswsp.msg.cpmcistate.cpendingscans",
7626 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7630 &hf_mswsp_msg_cpmcistate_dwindexsize
,
7632 "dwIndexSize", "mswsp.msg.cpmcistate.dwindexsize",
7633 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7637 &hf_mswsp_msg_cpmcistate_cuniquekeys
,
7639 "cUniqueKeys", "mswsp.msg.cpmcistate.cuniquekeys",
7640 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7644 &hf_mswsp_msg_cpmcistate_csecqdocuments
,
7646 "cSecQDocuments", "mswsp.msg.cpmcistate.csecqdocuments",
7647 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7651 &hf_mswsp_msg_cpmcistate_dwpropcachesize
,
7653 "dwPropCacheSize", "mswsp.msg.cpmcistate.dwpropcachesize",
7654 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7658 &hf_mswsp_msg_cpmfetchvalue_wid
,
7660 "wid", "mswsp.msg.cpmfetchvalue.wid",
7661 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7665 &hf_mswsp_msg_cpmfetchvalue_cbsofar
,
7667 "cbSoFar", "mswsp.msg.cpmfetchvalue.cbsofar",
7668 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7672 &hf_mswsp_msg_cpmfetchvalue_cbpropspec
,
7674 "cbPropSpec", "mswsp.msg.cpmfetchvalue.cbpropspec",
7675 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7679 &hf_mswsp_msg_cpmfetchvalue_cbchunk
,
7681 "cbChunk", "mswsp.msg.cpmfetchvalue.chunk",
7682 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7686 &hf_mswsp_msg_cpmfetchvalue_cbvalue
,
7688 "cbValue", "mswsp.msg.cpmfetchvalue.cbvalue",
7689 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7693 &hf_mswsp_msg_cpmfetchvalue_fmoreexists
,
7695 "fMoreExists", "mswsp.msg.cpmfetchvalue.fmoreexists",
7696 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7700 &hf_mswsp_msg_cpmfetchvalue_fvalueexists
,
7702 "fValueExists", "mswsp.msg.cpmfetchvalue.fvalueexists",
7703 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7707 &hf_mswsp_msg_cpmfetchvalue_vvalue
,
7709 "vvalue", "mswsp.msg.cpmfetchvalue.vvalue",
7710 FT_BYTES
, SEP_SPACE
, NULL
, 0, NULL
, HFILL
7714 &hf_mswsp_msg_cpmquerystatusex_qstatus
,
7716 "qStatus", "mswsp.msg.cpmquerystatusex.qstatus",
7717 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7721 &hf_mswsp_msg_cpmquerystatusex_hcursor
,
7723 "hCursor", "mswsp.msg.cpmquerystatusex.hcursor",
7724 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7728 &hf_mswsp_msg_cpmquerystatusex_bmk
,
7730 "bmk", "mswsp.msg.cpmquerystatusex.bmk",
7731 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7735 &hf_mswsp_msg_cpmquerystatusex_cfiltereddocs
,
7737 "cFilteredDocuments", "mswsp.msg.cpmquerystatusex.cfiltereddocs",
7738 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7742 &hf_mswsp_msg_cpmquerystatusex_cdocstofilter
,
7744 "cDocumentsToFilter", "mswsp.msg.cpmquerystatusex.cdocstofilter",
7745 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7749 &hf_mswsp_msg_cpmquerystatusex_dwratiodenom
,
7751 "dwRatioFinishedDenominator", "mswsp.msg.cpmquerystatusex.dwratiodenom",
7752 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7756 &hf_mswsp_msg_cpmquerystatusex_dwrationumer
,
7758 "dwRatioFinishedNumerator", "mswsp.msg.cpmquerystatusex.dwrationumer",
7759 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7763 &hf_mswsp_msg_cpmquerystatusex_irowbmk
,
7765 "iRowBmk", "mswsp.msg.cpmquerystatusex.irowbmk",
7766 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7770 &hf_mswsp_msg_cpmquerystatusex_crowstotal
,
7772 "cRowsTotal", "mswsp.msg.cpmquerystatusex.crowstotal",
7773 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7777 &hf_mswsp_msg_cpmquerystatusex_maxrank
,
7779 "maxRank", "mswsp.msg.cpmquerystatusex.maxrank",
7780 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7784 &hf_mswsp_msg_cpmquerystatusex_cresultsfound
,
7786 "cResultsFound", "mswsp.msg.cpmquerystatusex.cresultsfound",
7787 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7791 &hf_mswsp_msg_cpmquerystatusex_whereid
,
7793 "whereId", "mswsp.msg.cpmquerystatusex.whereid",
7794 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7798 &hf_mswsp_msg_cpmrestartposition_hcursor
,
7800 "hCursor", "mswsp.msg.cpmrestartposition.hcursor",
7801 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7805 &hf_mswsp_msg_cpmrestartposition_chapt
,
7807 "chapt", "mswsp.msg.cpmrestartposition.chapt",
7808 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7812 &hf_mswsp_msg_cpmgetrowsetnotify_wid
,
7814 "wid", "mswsp.msg.cpmgetrowsetnotify.wid",
7815 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7819 &hf_mswsp_msg_cpmgetrowsetnotify_moreevents
,
7821 "moreEvents", "mswsp.msg.cpmgetrowsetnotify.moreevents",
7822 FT_BOOLEAN
, 8, NULL
, 0x01, NULL
, HFILL
7826 &hf_mswsp_msg_cpmgetrowsetnotify_eventtype
,
7828 "eventType", "mswsp.msg.cpmgetrowsetnotify.eventType",
7829 FT_UINT8
, BASE_DEC
, NULL
, 0xFE, NULL
, HFILL
7833 &hf_mswsp_msg_cpmgetrowsetnotify_rowsetitemstate
,
7835 "rowSetItemState", "mswsp.msg.cpmgetrowsetnotify.rowsetitemstate",
7836 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7840 &hf_mswsp_msg_cpmgetrowsetnotify_changeditemstate
,
7842 "changedItemState", "mswsp.msg.cpmgetrowsetnotify.changeditemState",
7843 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7847 &hf_mswsp_msg_cpmgetrowsetnotify_rowsetevent
,
7849 "rowSetEvent", "mswsp.msg.cpmgetrowsetnotify.rowsetevent",
7850 FT_UINT8
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7854 &hf_mswsp_msg_cpmgetrowsetnotify_rowseteventdata1
,
7856 "rowSetEventdata1", "mswsp.msg.cpmgetrowsetnotify.rowseteventdata1",
7857 FT_UINT64
, BASE_HEX
, NULL
, 0, NULL
, HFILL
7861 &hf_mswsp_msg_cpmgetrowsetnotify_rowseteventdata2
,
7863 "rowSetEventdata2", "mswsp.msg.cpmgetrowsetnotify.rowseteventdata2",
7864 FT_UINT64
, BASE_HEX
, NULL
, 0, NULL
, HFILL
7868 &hf_mswsp_msg_cpmfindindices_cwids
,
7870 "cWids", "mswsp.msg.cpmfindindices.cwids",
7871 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7875 &hf_mswsp_msg_cpmfindindices_cdepthprev
,
7877 "cDepthPrev", "mswsp.msg.cpmfindindices.cdepthprev",
7878 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7882 &hf_mswsp_msg_cpmfindindices_cdepthnext
,
7884 "cDepthNext", "mswsp.msg.cpmfindindices.cdepthnext",
7885 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7889 &hf_mswsp_msg_cpmsetscopeprioritization_priority
,
7891 "priority", "mswsp.msg.cpmsetscopeprioritization.priority",
7892 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7896 &hf_mswsp_msg_cpmsetscopeprioritization_eventfreq
,
7898 "eventFrequency", "mswsp.msg.cpmsetscopeprioritization.eventfreq",
7899 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7903 &hf_mswsp_msg_cpmsetscopestatisics_dwindexitems
,
7905 "dwIndexedItems", "mswsp.msg.cpmsetscopestatistics.dwindexitems",
7906 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7910 &hf_mswsp_msg_cpmsetscopestatisics_dwoutstandingadds
,
7912 "dwOutstandingAdds", "mswsp.msg.cpmsetscopestatistics.dwoutstandingadds",
7913 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7917 &hf_mswsp_msg_cpmsetscopestatisics_dwoutstandingmodifies
,
7919 "dwOutstandingModifies", "mswsp.msg.cpmsetscopestatistics.dwoutstandingmodifies",
7920 FT_UINT32
, BASE_DEC
, NULL
, 0, NULL
, HFILL
7925 static int *ett
[] = {
7930 &ett_mswsp_property_restriction
,
7931 &ett_CRestrictionArray
,
7932 &ett_CBaseStorageVariant
,
7933 &ett_CBaseStorageVariant_Vector
,
7934 &ett_CBaseStorageVariant_Array
,
7939 &ett_CDbPropSet_Array
,
7941 &ett_CNodeRestriction
,
7942 &ett_CPropertyRestriction
,
7943 &ett_CCoercionRestriction
,
7944 &ett_CContentRestriction
,
7946 &ett_CRangeCategSpec
,
7950 &ett_CCategorizationSpec
,
7951 &ett_CAggregSortKey
,
7952 &ett_CSortAggregSet
,
7953 &ett_CInGroupSortAggregSet
,
7954 &ett_CInGroupSortAggregSets
,
7955 &ett_CRowsetProperties
,
7960 &ett_CNatLanguageRestriction
,
7962 &ett_CColumnGroupArray
,
7966 &ett_SeekDescription
,
7969 &ett_CRowsSeekAtRatio
,
7970 &ett_CRowsSeekByBookmark
,
7974 &ett_CRowVariant_Vector
,
7975 &ett_mswsp_bool_options
,
7976 &ett_mswsp_uin32_array
,
7977 &ett_mswsp_msg_padding
,
7978 &ett_mswsp_msg_creusewhere
7981 static ei_register_info ei
[] = {
7982 { &ei_mswsp_invalid_variant_type
, { "mswsp.invalid_variant_type", PI_PROTOCOL
, PI_ERROR
, "Invalid variant type", EXPFILL
}},
7983 { &ei_missing_msg_context
, { "mswsp.msg.cpmgetrows.missing_msg_context", PI_SEQUENCE
, PI_WARN
, "previous messages needed for context not captured", EXPFILL
}},
7984 { &ei_mswsp_msg_cpmsetbinding_ccolumns
, { "mswsp.msg.cpmsetbinding.ccolumns.invalid", PI_PROTOCOL
, PI_WARN
, "Invalid number of cColumns for packet", EXPFILL
}}
7988 proto_mswsp
= proto_register_protocol("Windows Search Protocol", "MS-WSP", "mswsp");
7990 proto_register_field_array(proto_mswsp
, hf
, array_length(hf
));
7991 proto_register_subtree_array(ett
, array_length(ett
));
7992 expert_mswsp
= expert_register_protocol(proto_mswsp
);
7993 expert_register_field_array(expert_mswsp
, ei
, array_length(ei
));
7994 for (i
=0; i
<(int)array_length(GuidPropertySet
); i
++) {
7995 guids_add_guid(&GuidPropertySet
[i
].guid
, GuidPropertySet
[i
].def
);
7999 static int dissect_mswsp_smb(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data
)
8001 smb_info_t
*si
= (smb_info_t
*)data
;
8002 bool in
= si
->request
;
8004 smb_fid_info_t
*fid_info
= NULL
;
8005 fid_info
= find_fid_info(si
);
8007 if (!fid_info
|| !fid_info
->fsi
|| !fid_info
->fsi
->filename
) {
8012 if (g_ascii_strcasecmp(fid_info
->fsi
->filename
, "\\MsFteWds") != 0) {
8015 p_add_proto_data(wmem_file_scope(), pinfo
, proto_mswsp
, 0, (void*)&SMB1
);
8016 return dissect_mswsp(tvb
, pinfo
, tree
, in
, data
);
8020 dissect_mswsp_smb_heur(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data
)
8022 return dissect_mswsp_smb(tvb
, pinfo
, tree
, data
) > 0;
8025 static int dissect_mswsp_smb2(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data
)
8027 smb2_info_t
*si
= (smb2_info_t
*)data
;
8029 char* fid_name
= NULL
;
8030 uint32_t open_frame
= 0, close_frame
= 0;
8037 dcerpc_fetch_polhnd_data(&si
->saved
->policy_hnd
, &fid_name
, NULL
, &open_frame
, &close_frame
, pinfo
->num
);
8040 if (!fid_name
|| g_ascii_strcasecmp(fid_name
, "File: MsFteWds") != 0) {
8044 in
= !(si
->flags
& SMB2_FLAGS_RESPONSE
);
8045 p_add_proto_data(wmem_file_scope(), pinfo
, proto_mswsp
, 0, (void*)&SMB2
);
8046 return dissect_mswsp(tvb
, pinfo
, tree
, in
, data
);
8050 dissect_mswsp_smb2_heur(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data
)
8052 return dissect_mswsp_smb2(tvb
, pinfo
, tree
, data
) > 0;
8056 proto_reg_handoff_mswsp(void)
8058 heur_dissector_add("smb_transact", dissect_mswsp_smb_heur
, "WSP over SMB1", "smb1_wsp", proto_mswsp
, HEURISTIC_ENABLE
);
8059 heur_dissector_add("smb2_pipe_subdissectors", dissect_mswsp_smb2_heur
, "WSP over SMB2", "smb2_wsp", proto_mswsp
, HEURISTIC_ENABLE
);
8064 * Editor modelines - https://www.wireshark.org/tools/modelines.html
8069 * indent-tabs-mode: t
8072 * vi: set shiftwidth=4 tabstop=8 noexpandtab:
8073 * :indentSize=4:tabSize=8:noTabs=false: