diff options
Diffstat (limited to '')
63 files changed, 27608 insertions, 0 deletions
diff --git a/epan/dissectors/pidl/CMakeLists.txt b/epan/dissectors/pidl/CMakeLists.txt new file mode 100644 index 00000000..2e4dc7ba --- /dev/null +++ b/epan/dissectors/pidl/CMakeLists.txt @@ -0,0 +1,167 @@ +# CMakeLists.txt +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# SPDX-License-Identifier: GPL-2.0-or-later +# + +# TODO fix srvsvc wkssvc +set(PIDL_DISSECTOR_NAMES + atsvc + clusapi + dfs + dnsserver + drsuapi + dssetup + efs + eventlog + frsrpc + frstrans + fsrvp + initshutdown + iwbemlevel1login + lsa + mapi + mdssvc + misc + nspi + rfr + samr + #srvsvc + svcctl + winreg + winspool + witness + #wkssvc + wzcsvc +) + +set(PIDL_DISSECTOR_clusapi_EXTRA_DEPS + clusapi/clusapi.idl +) +set(PIDL_DISSECTOR_drsuapi_EXTRA_DEPS + misc/misc.idl +) +set(PIDL_DISSECTOR_dssetup_EXTRA_DEPS + misc/misc.idl +) +set(PIDL_DISSECTOR_eventlog_EXTRA_DEPS + idl_types.h +) +set(PIDL_DISSECTOR_frsrpc_EXTRA_DEPS + misc/misc.idl + idl_types.h +) +set(PIDL_DISSECTOR_frstrans_EXTRA_DEPS + misc/misc.idl + idl_types.h +) +set(PIDL_DISSECTOR_fsrvp_EXTRA_DEPS + idl_types.h +) +set(PIDL_DISSECTOR_initshutdown_EXTRA_DEPS + lsa/lsa.idl + idl_types.h +) +set(PIDL_DISSECTOR_iwbemlevel1login_EXTRA_DEPS + idl_types.h +) +set(PIDL_DISSECTOR_lsa_EXTRA_DEPS + idl_types.h +) +set(PIDL_DISSECTOR_mapi_EXTRA_DEPS + idl_types.h + mapicodes_enum.h + mapitags_enum.h +) +set(PIDL_DISSECTOR_mdssvc_EXTRA_DEPS + misc/misc.idl +) +set(PIDL_DISSECTOR_misc_EXTRA_DEPS + idl_types.h +) +set(PIDL_DISSECTOR_nspi_EXTRA_DEPS + idl_types.h + mapicodes_enum.h + mapitags_enum.h +) +set(PIDL_DISSECTOR_rfr_EXTRA_DEPS + idl_types.h + mapicodes_enum.h +) +set(PIDL_DISSECTOR_samr_EXTRA_DEPS + idl_types.h +) +set(PIDL_DISSECTOR_srvsvc_EXTRA_DEPS + idl_types.h +) +set(PIDL_DISSECTOR_winreg_EXTRA_DEPS + misc/misc.idl +) +set(PIDL_DISSECTOR_winspool_EXTRA_DEPS + idl_types.h + misc/misc.idl +) +set(PIDL_DISSECTOR_witness_EXTRA_DEPS + misc/misc.idl + idl_types.h +) +set(PIDL_DISSECTOR_wkssvc_EXTRA_DEPS + lsa/lsa.idl + srvsvc/srvsvc.idl + idl_types.h +) + +set(PIDL_DISSECTOR_TARGETS) + +foreach(PROTOCOL_NAME IN LISTS PIDL_DISSECTOR_NAMES) + add_custom_command( + OUTPUT packet-dcerpc-${PROTOCOL_NAME}-stamp + COMMAND "${PERL_EXECUTABLE}" + "${CMAKE_SOURCE_DIR}/tools/pidl/pidl" + --ws-parser + --outputdir ../.. + --includedir .. + -- + ${PROTOCOL_NAME}.idl + COMMAND + "${CMAKE_COMMAND}" -E touch + "${CMAKE_CURRENT_BINARY_DIR}/packet-dcerpc-${PROTOCOL_NAME}-stamp" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${PROTOCOL_NAME}" + DEPENDS + "${CMAKE_SOURCE_DIR}/tools/pidl/pidl" + ${PROTOCOL_NAME}/${PROTOCOL_NAME}.idl + ${PROTOCOL_NAME}/${PROTOCOL_NAME}.cnf + ${PIDL_DISSECTOR_${PROTOCOL_NAME}_EXTRA_DEPS} + VERBATIM + ) + add_custom_target(generate_dissector-dcerpc-${PROTOCOL_NAME} + DEPENDS packet-dcerpc-${PROTOCOL_NAME}-stamp + ) + set_target_properties(generate_dissector-dcerpc-${PROTOCOL_NAME} + PROPERTIES FOLDER "Generated Dissectors/PIDL" + ) + list(APPEND PIDL_DISSECTOR_TARGETS + generate_dissector-dcerpc-${PROTOCOL_NAME} + ) +endforeach() + +add_custom_target(pidl-dissectors ALL DEPENDS ${PIDL_DISSECTOR_TARGETS}) +set_target_properties(pidl-dissectors + PROPERTIES FOLDER "Generated Dissectors/PIDL" +) + +# +# Editor modelines - https://www.wireshark.org/tools/modelines.html +# +# Local variables: +# c-basic-offset: 4 +# tab-width: 4 +# indent-tabs-mode: t +# End: +# +# vi: set shiftwidth=4 tabstop=4 noexpandtab: +# :indentSize=4:tabSize=4:noTabs=false: +# diff --git a/epan/dissectors/pidl/IDL_LICENSE.txt b/epan/dissectors/pidl/IDL_LICENSE.txt new file mode 100644 index 00000000..01ae670b --- /dev/null +++ b/epan/dissectors/pidl/IDL_LICENSE.txt @@ -0,0 +1,9 @@ +The IDL files in this directory are made available by the Samba Team +under the following license: + + Permission to use, copy, modify, and distribute these interface + definitions for any purpose is hereby granted without fee. + + This work is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. diff --git a/epan/dissectors/pidl/Makefile.pidl b/epan/dissectors/pidl/Makefile.pidl new file mode 100644 index 00000000..458c4de4 --- /dev/null +++ b/epan/dissectors/pidl/Makefile.pidl @@ -0,0 +1,182 @@ +# Makefile +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 2004 Gerald Combs +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +PIDL = ../../../../tools/pidl/pidl --ws-parser + +pidl_out = --outputdir ../.. +pidl_inc = --includedir .. + +SUBDIRS = \ + atsvc \ + clusapi \ + dfs \ + dnsserver \ + dssetup \ + efs \ + eventlog \ + frsrpc \ + frstrans \ + fsrvp \ + initshutdown \ + iwbemlevel1login \ + lsa \ + mapi \ + mdssvc \ + misc \ + nspi \ + rfr \ + samr \ + svcctl \ + winreg \ + winspool \ + witness \ + wzcsvc + +DONT_BUILD_SUBDIRS = \ + srvsvc \ + wkssvc + +all: $(SUBDIRS) + +.PHONY: $(SUBDIRS) $(DONT_BUILD_SUBDIRS) + +$(SUBDIRS) $(DONT_BUILD_SUBDIRS): %: ../packet-dcerpc-%.c ../packet-dcerpc-%.h + +../packet-dcerpc-atsvc.c \ +../packet-dcerpc-atsvc.h: atsvc/atsvc.idl atsvc/atsvc.cnf + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-clusapi.c \ +../packet-dcerpc-clusapi.h: clusapi/clusapi.idl clusapi/clusapi.cnf \ + clusapi/clusapi.idl + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-dfs.c \ +../packet-dcerpc-dfs.h: dfs/dfs.idl dfs/dfs.cnf + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-dnsserver.c \ +../packet-dcerpc-dnsserver.h: dnsserver/dnsserver.idl dnsserver/dnsserver.cnf + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-dssetup.c \ +../packet-dcerpc-dssetup.h: dssetup/dssetup.idl misc/misc.idl + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-efs.c \ +../packet-dcerpc-efs.h: efs/efs.idl efs/efs.cnf + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-eventlog.c \ +../packet-dcerpc-eventlog.h: eventlog/eventlog.idl eventlog/eventlog.cnf \ + idl_types.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-frsrpc.c \ +../packet-dcerpc-frsrpc.h: frsrpc/frsrpc.idl frsrpc/frsrpc.cnf \ + misc/misc.idl idl_types.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-frstrans.c \ +../packet-dcerpc-frstrans.h: frstrans/frstrans.idl frstrans/frstrans.cnf \ + misc/misc.idl idl_types.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-fsrvp.c \ +../packet-dcerpc-fsrvp.h: fsrvp/fsrvp.idl fsrvp/fsrvp.cnf \ + idl_types.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-initshutdown.c \ +../packet-dcerpc-initshutdown.h: initshutdown/initshutdown.idl \ + initshutdown/initshutdown.cnf \ + lsa/lsa.idl idl_types.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-iwbemlevel1login.c \ +../packet-dcerpc-iwbemlevel1login.h: iwbemlevel1login/iwbemlevel1login.idl \ + iwbemlevel1login/iwbemlevel1login.cnf \ + idl_types.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-lsa.c \ +../packet-dcerpc-lsa.h: lsa/lsa.idl lsa/lsa.cnf idl_types.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-mapi.c \ +../packet-dcerpc-mapi.h: mapi/mapi.idl mapi/mapi.cnf \ + idl_types.h mapicodes_enum.h mapitags_enum.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-mdssvc.c \ +../packet-dcerpc-mdssvc.h: mdssvc/mdssvc.idl mdssvc/mdssvc.cnf \ + misc/misc.idl + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-misc.c \ +../packet-dcerpc-misc.h: misc/misc.idl misc/misc.cnf idl_types.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-nspi.c \ +../packet-dcerpc-nspi.h: nspi/nspi.idl nspi/nspi.cnf \ + idl_types.h mapicodes_enum.h mapitags_enum.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-rfr.c \ +../packet-dcerpc-rfr.h: rfr/rfr.idl rfr/rfr.cnf \ + idl_types.h mapicodes_enum.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-samr.c \ +../packet-dcerpc-samr.h: samr/samr.idl samr/samr.cnf idl_types.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-srvsvc.c \ +../packet-dcerpc-srvsvc.h: srvsvc/srvsvc.idl srvsvc/srvsvc.cnf idl_types.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-svcctl.c \ +../packet-dcerpc-svcctl.h: svcctl/svcctl.idl svcctl/svcctl.cnf + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-winreg.c \ +../packet-dcerpc-winreg.h: winreg/winreg.idl winreg/winreg.cnf \ + misc/misc.idl + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-winspool.c \ +../packet-dcerpc-winspool.h: winspool/winspool.idl winspool/winspool.cnf \ + misc/misc.idl + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-witness.c \ +../packet-dcerpc-witness.h: witness/witness.idl witness/witness.cnf \ + misc/misc.idl idl_types.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-wkssvc.c \ +../packet-dcerpc-wkssvc.h: wkssvc/wkssvc.idl wkssvc/wkssvc.cnf \ + lsa/lsa.idl srvsvc/srvsvc.idl \ + idl_types.h + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) + +../packet-dcerpc-wzcsvc.c \ +../packet-dcerpc-wzcsvc.h: wzcsvc/wzcsvc.idl wzcsvc/wzcsvc.cnf + cd $(<D) && $(PIDL) $(pidl_out) $(pidl_inc) -- $(<F) diff --git a/epan/dissectors/pidl/README b/epan/dissectors/pidl/README new file mode 100644 index 00000000..d9677b70 --- /dev/null +++ b/epan/dissectors/pidl/README @@ -0,0 +1,107 @@ +A note about PIDL generated files +================================= + +Quick guide +=========== + +Run 'make -f Makefile.pidl all' inside the pidl folder to generate all the dissectors and place +them in the epan/dissectors folder. + +Complete infos +============== + +The following files: +../packet-dcerpc-atsvc.h +../packet-dcerpc-budb.c +../packet-dcerpc-budb.h +../packet-dcerpc-butc.c +../packet-dcerpc-butc.h +../packet-dcerpc-dfs.h +../packet-dcerpc-dnsserver.h +../packet-dcerpc-drsuapi.c +../packet-dcerpc-drsuapi.h +../packet-dcerpc-dssetup.h +../packet-dcerpc-efs.h +../packet-dcerpc-eventlog.h +../packet-dcerpc-frsrpc.h +../packet-dcerpc-frstrans.h +../packet-dcerpc-initshutdown.h +../packet-dcerpc-iwbemlevel1login.h +../packet-dcerpc-lsa.h +../packet-dcerpc-mapi.h +../packet-dcerpc-misc.h +../packet-dcerpc-nspi.h +../packet-dcerpc-rfr.h +../packet-dcerpc-samr.h +../packet-dcerpc-srvsvc.h +../packet-dcerpc-winreg.h +../packet-dcerpc-wkssvc.h +../packet-dcerpc-wzcsvc.h + +are automatically generated via a tool called "pidl"; you shouldn't +modify them manually. + +The pidl tool is maintained by the Samba project (http://samba.org, +samba-technical@samba.org). We have a version in ../../../tools/pidl; +it currently differs from the Samba version only in its Wireshark-parser +generator, as we had to change it to reflect some API differences +between the current Wireshark release and the development trunk. + +The Samba version can be fetched from their git tree: + git clone git://git.samba.org/samba.git + +Running pidl +============ + +You have to run the pidl command inside the pidl folder of the wireshark +source tree. + +The command to compile file: + ../../../tools/pidl/pidl --includedir . --ws-parser -- <idl-file> + ^^^ + This is *VERY* important +The command generates 2 files: + packet-dcerpc-<interfacename>.h + packet-dcerpc-<interfacename>.c + +For instance, with the atsvc.idl, the command will be: + + ../../../tools/pidl/pidl --includedir . --ws-parser -- atsvc.idl + +This will generate 2 files: + packet-dcerpc-atsvc.h + packet-dcerpc-atsvc.c + +If you run outside the dissectors/pidl directory, this *will* result in a +warning such as: + + atsvc.idl:5:23: idl_types.h: No such file or directory + +and *may* result in additional warnings such as: + + Warning: No conformance file `initshutdown.cnf' + Unable to handle string with flags STR_LEN4|STR_NOTERM at /usr/lib/perl5/site_perl/5.8.6/Parse/Pidl/Wireshark/NDR.pm line 283. + +Notes about the in-tree pidl +============================ + +To allow building Wireshark pidl dissectors without having to +*explicitly* access a remote git repository, and to allow us to make +changes to the Wireshark parser generator that the Samba developers +might not want to make until a new major release of Wireshark comes out, +so as to allow users to build dissectors to run in the current Wireshark +release, a copy of pidl is located in tools/pidl. + +Not compiling idl +================= +As of September 26, 2014, the following idl have issues when generating +and compiling: + +pidl complains that inline arrays aren't supported for these: + + dnsserver.idl + eventlog.idl + +pidl generates possibly-incorrect code for these - this needs checking: + + rfr/rfr.idl diff --git a/epan/dissectors/pidl/atsvc/atsvc.cnf b/epan/dissectors/pidl/atsvc/atsvc.cnf new file mode 100644 index 00000000..4359cb9f --- /dev/null +++ b/epan/dissectors/pidl/atsvc/atsvc.cnf @@ -0,0 +1,13 @@ +HF_FIELD hf_atsvc_job_id "Job Id" "atsvc.job_id" FT_UINT32 BASE_DEC NULL 0 "Identifier of the scheduled job" +HF_RENAME hf_atsvc_atsvc_JobAdd_job_id hf_atsvc_job_id +HF_RENAME hf_atsvc_atsvc_JobEnumInfo_job_id hf_atsvc_job_id +HF_RENAME hf_atsvc_atsvc_JobGetInfo_job_id hf_atsvc_job_id +HF_FIELD hf_atsvc_servername "Server" "atsvc.server" FT_STRING BASE_NONE NULL 0 "Name of the server" +HF_RENAME hf_atsvc_atsvc_JobEnum_servername hf_atsvc_servername +HF_RENAME hf_atsvc_atsvc_JobDel_servername hf_atsvc_servername +HF_RENAME hf_atsvc_atsvc_JobAdd_servername hf_atsvc_servername +HF_RENAME hf_atsvc_atsvc_JobGetInfo_servername hf_atsvc_servername +HF_FIELD hf_atsvc_job_info "JobInfo" "atcvs.job_info" FT_NONE BASE_NONE NULL 0 "JobInfo structure" +HF_RENAME hf_atsvc_atsvc_JobGetInfo_job_info hf_atsvc_job_info +HF_RENAME hf_atsvc_atsvc_JobAdd_job_info hf_atsvc_job_info + diff --git a/epan/dissectors/pidl/atsvc/atsvc.idl b/epan/dissectors/pidl/atsvc/atsvc.idl new file mode 100644 index 00000000..75e1daa8 --- /dev/null +++ b/epan/dissectors/pidl/atsvc/atsvc.idl @@ -0,0 +1,119 @@ +/* + atsvc interface definition +*/ + +[ uuid("1ff70682-0a51-30e8-076d-740be8cee98b"), + version(1.0), + pointer_default(unique), + helpstring("Microsoft AT-Scheduler Service"), + endpoint("ncacn_np:[\\pipe\\atsvc]", "ncalrpc:") +] interface atsvc +{ + typedef [bitmap32bit] bitmap { + First = 0x00000001, + Second = 0x00000002, + Third = 0x00000004, + Fourth = 0x00000008, + Fifth = 0x00000010, + Sixth = 0x00000020, + Seventh = 0x00000040, + Eight = 0x00000080, + Ninth = 0x00000100, + Tenth = 0x00000200, + Eleventh = 0x00000400, + Twelfth = 0x00000800, + Thitteenth = 0x00001000, + Fourteenth = 0x00002000, + Fifteenth = 0x00004000, + Sixteenth = 0x00008000, + Seventeenth = 0x00010000, + Eighteenth = 0x00020000, + Ninteenth = 0x00040000, + Twentyth = 0x00080000, + Twentyfirst = 0x00100000, + Twentysecond = 0x00200000, + Twentythird = 0x00400000, + Twentyfourth = 0x00800000, + Twentyfifth = 0x01000000, + Twentysixth = 0x02000000, + Twentyseventh = 0x04000000, + Twentyeighth = 0x08000000, + Twentyninth = 0x10000000, + Thirtieth = 0x20000000, + Thirtyfirst = 0x40000000 + } atsvc_DaysOfMonth; + + typedef [bitmap8bit] bitmap { + JOB_RUN_PERIODICALLY = 0x01, + JOB_EXEC_ERROR = 0x02, + JOB_RUNS_TODAY = 0x04, + JOB_ADD_CURRENT_DATE = 0x08, + JOB_NONINTERACTIVE = 0x10 + } atsvc_Flags; + + typedef [bitmap8bit] bitmap { + DAYSOFWEEK_MONDAY = 0x01, + DAYSOFWEEK_TUESDAY = 0x02, + DAYSOFWEEK_WEDNESDAY = 0x04, + DAYSOFWEEK_THURSDAY = 0x08, + DAYSOFWEEK_FRIDAY = 0x10, + DAYSOFWEEK_SATURDAY = 0x20, + DAYSOFWEEK_SUNDAY = 0x40 + } atsvc_DaysOfWeek; + + typedef struct { + uint32 job_time; + atsvc_DaysOfMonth days_of_month; + atsvc_DaysOfWeek days_of_week; + atsvc_Flags flags; + [string,charset(UTF16)] uint16 *command; + } atsvc_JobInfo; + + /******************/ + /* Function: 0x00 */ + [public] NTSTATUS atsvc_JobAdd( + [in,unique,string,charset(UTF16)] uint16 *servername, + [in] atsvc_JobInfo *job_info, + [out,ref] uint32 *job_id + ); + + /******************/ + /* Function: 0x01 */ + [public] NTSTATUS atsvc_JobDel( + [in,unique,string,charset(UTF16)] uint16 *servername, + [in] uint32 min_job_id, + [in] uint32 max_job_id + ); + + typedef struct { + uint32 job_id; + uint32 job_time; + atsvc_DaysOfMonth days_of_month; + atsvc_DaysOfWeek days_of_week; + atsvc_Flags flags; + [string,charset(UTF16)] uint16 *command; + } atsvc_JobEnumInfo; + + typedef struct { + uint32 entries_read; + [size_is(entries_read)] atsvc_JobEnumInfo *first_entry; + } atsvc_enum_ctr; + + /******************/ + /* Function: 0x02 */ + [public] NTSTATUS atsvc_JobEnum( + [in,unique,string,charset(UTF16)] uint16 *servername, + [in,out] atsvc_enum_ctr *ctr, + [in] uint32 preferred_max_len, + [out,ref] uint32 *total_entries, + [in,out,unique] uint32 *resume_handle + ); + + /******************/ + /* Function: 0x03 */ + [public] NTSTATUS atsvc_JobGetInfo( + [in,unique,string,charset(UTF16)] uint16 *servername, + [in] uint32 job_id, + [out] atsvc_JobInfo **job_info + ); +} diff --git a/epan/dissectors/pidl/clusapi/clusapi.cnf b/epan/dissectors/pidl/clusapi/clusapi.cnf new file mode 100644 index 00000000..2a413e91 --- /dev/null +++ b/epan/dissectors/pidl/clusapi/clusapi.cnf @@ -0,0 +1,49 @@ +TYPE winreg_Type "offset = misc_dissect_enum_winreg_Type(tvb, offset, pinfo, tree, di, drep, @HF@, @PARAM@);" FT_NONE BASE_NONE 0 NULL NULL +TYPE winreg_AccessMask "offset = winreg_dissect_bitmap_AccessMask(tvb, offset, pinfo, tree, di, drep, @HF@, @PARAM@);" FT_NONE BASE_NONE 0 NULL NULL + +#MANUAL clusapi_dissect_struct_PROPERTY_LIST +#NOEMIT clusapi_dissect_element_PROPERTY_LIST_propertyValues_ +# +#CODE START +# +#int +#clusapi_dissect_struct_PROPERTY_LIST(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +#{ +# proto_item *item = NULL; +# proto_tree *tree = NULL; +# int old_offset; +# guint32 i, count; +# +# ALIGN_TO_4_BYTES; +# +# ALIGN_TO_4_BYTES; +# +# old_offset = offset; +# +# if (parent_tree) { +# item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); +# tree = proto_item_add_subtree(item, ett_clusapi_clusapi_PROPERTY_LIST); +# } +# +# count = tvb_get_letohl(tvb, offset); +# +# offset = clusapi_dissect_element_PROPERTY_LIST_propertyCount(tvb, offset, pinfo, tree, di, drep); +# +# for (i=0; i < count; i++) { +# offset = clusapi_dissect_element_PROPERTY_LIST_propertyValues(tvb, offset, pinfo, tree, di, drep); +# } +# +# offset = clusapi_dissect_element_PROPERTY_LIST_end_mark(tvb, offset, pinfo, tree, di, drep); +# +# +# proto_item_set_len(item, offset-old_offset); +# +# +# if (di->call_data->flags & DCERPC_IS_NDR64) { +# ALIGN_TO_4_BYTES; +# } +# +# return offset; +#} +# +#CODE END diff --git a/epan/dissectors/pidl/clusapi/clusapi.idl b/epan/dissectors/pidl/clusapi/clusapi.idl new file mode 100644 index 00000000..ea9c2b67 --- /dev/null +++ b/epan/dissectors/pidl/clusapi/clusapi.idl @@ -0,0 +1,2918 @@ +import "winreg.idl", "misc.idl"; + +#include "idl_types.h" + +[ + uuid("b97db8b2-4c63-11cf-bff6-08002be23f2f"), + version(3.0), + pointer_default(unique), + endpoint("ncacn_ip_tcp:"), + authservice("MSServerClusterMgmtAPI"), + helpstring("Failover Cluster Management API (clusapi)") +] +#define MAX_CLUSTER_CONTROL_CODE_BUFFER_SIZE 0x7FFFFFFF + interface clusapi +{ +#if 0 + /* + * pidl does not yet have a real [context_handle] implementation, so we + * just use some defines here. + */ + + typedef [context_handle] void *HCLUSTER_RPC; + typedef [context_handle] void *HNODE_RPC; + typedef [context_handle] void *HGROUP_RPC; + typedef [context_handle] void *HRES_RPC; + typedef [context_handle] void *HKEY_RPC; + typedef [context_handle] void *HNOTIFY_RPC; + typedef [context_handle] void *HNETWORK_RPC; + typedef [context_handle] void *HNETINTERFACE_RPC; + typedef [context_handle] void *HBATCH_PORT_RPC; +#else +#define HCLUSTER_RPC policy_handle +#define HNODE_RPC policy_handle +#define HGROUP_RPC policy_handle +#define HRES_RPC policy_handle +#define HKEY_RPC policy_handle +#define HNOTIFY_RPC policy_handle +#define HNETWORK_RPC policy_handle +#define HNETINTERFACE_RPC policy_handle +#define HBATCH_PORT_RPC policy_handle +#endif + + typedef struct { + [ size_is( cbInSecurityDescriptor ), length_is( cbOutSecurityDescriptor ) ] uint8 *lpSecurityDescriptor; + uint32 cbInSecurityDescriptor; + uint32 cbOutSecurityDescriptor; + } RPC_SECURITY_DESCRIPTOR; + + typedef struct { + uint32 nLength; + RPC_SECURITY_DESCRIPTOR RpcSecurityDescriptor; + long bInheritHandle; + } RPC_SECURITY_ATTRIBUTES; + + typedef struct { + [value(20)] uint32 dwSize; + uint32 dwClusterHighestVersion; + uint32 dwClusterLowestVersion; + uint32 dwFlags; + uint32 dwReserved; + } CLUSTER_OPERATIONAL_VERSION_INFO; + + typedef struct { + uint32 NodeId; + boolean8 SetAttempted; + uint32 ReturnStatus; + } IDL_CLUSTER_SET_PASSWORD_STATUS; + + typedef enum { + IDL_CLUSTER_SET_PASSWORD_IGNORE_DOWN_NODES = 1 + } IDL_CLUSTER_SET_PASSWORD_FLAGS; + + typedef struct { + uint32 dwVersion; + uint32 dwGroupType; + } CLUSTER_CREATE_GROUP_INFO_RPC; + + /*****************/ + /* Function 0x00 */ + +#if 0 + /* + * pidl cannot generate code for functions that return structures in + * IDL, therefore pretend the function is void and add the returned + * structure as an out parameter. This is what we do with pretty much + * all the Open calls right now in this interface - gd + */ + + HCLUSTER_RPC + clusapi_OpenCluster( + [ out ] WERROR *Status + ); +#else + void + clusapi_OpenCluster( + [ out ] WERROR *Status, + [ out ] HCLUSTER_RPC *Cluster + ); +#endif + + /*****************/ + /* Function 0x01 */ + + WERROR + clusapi_CloseCluster( + [ in, out ] HCLUSTER_RPC *Cluster + ); + + /*****************/ + /* Function 0x02 */ + + WERROR + clusapi_SetClusterName( + [ in, string ] [charset(UTF16)] uint16 *NewClusterName, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x03 */ + + WERROR + clusapi_GetClusterName( + [ out, string ] [charset(UTF16)] uint16 **ClusterName, + [ out, string ] [charset(UTF16)] uint16 **NodeName + ); + + /*****************/ + /* Function 0x04 */ + + WERROR + clusapi_GetClusterVersion( + [ out ] uint16 *lpwMajorVersion, + [ out ] uint16 *lpwMinorVersion, + [ out ] uint16 *lpwBuildNumber, + [ out, string ] [charset(UTF16)] uint16 **lpszVendorId, + [ out, string ] [charset(UTF16)] uint16 **lpszCSDVersion + ); + + /*****************/ + /* Function 0x05 */ + + WERROR + clusapi_GetQuorumResource( + [ out, string ] [charset(UTF16)] uint16 **lpszResourceName, + [ out, string ] [charset(UTF16)] uint16 **lpszDeviceName, + [ out ] uint32 *pdwMaxQuorumLogSize, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x06 */ + + WERROR + clusapi_SetQuorumResource( + [ in ] HRES_RPC hResource, + [ in, string ] [charset(UTF16)] uint16 *lpszDeviceName, + [ in ] uint32 dwMaxQuorumLogSize, + [ out ] WERROR *rpc_status + ); + + typedef [bitmap32bit] bitmap { + CLUSTER_ENUM_NODE = 0x00000001, + CLUSTER_ENUM_RESTYPE = 0x00000002, + CLUSTER_ENUM_RESOURCE = 0x00000004, + CLUSTER_ENUM_GROUP = 0x00000008, + CLUSTER_ENUM_NETWORK = 0x00000010, + CLUSTER_ENUM_NETINTERFACE = 0x00000020, + CLUSTER_ENUM_INTERNAL_NETWORK = 0x80000000, + CLUSTER_ENUM_SHARED_VOLUME_RESOURCE = 0x40000000 + } ClusterEnumType; + + typedef struct { + ClusterEnumType Type; + [string] [charset(UTF16)] uint16 *Name; + } ENUM_ENTRY; + + typedef struct { + uint32 EntryCount; + [size_is(EntryCount)] ENUM_ENTRY Entry[*]; + } ENUM_LIST; + + typedef struct { + [string] [charset(UTF16)] uint16 *Name; + [string] [charset(UTF16)] uint16 *Id; + uint32 dwState; + [string] [charset(UTF16)] uint16 *Owner; + uint32 dwFlags; + uint32 cbProperties; + [size_is(cbProperties)] uint8* Properties; + uint32 cbRoProperties; + [size_is(cbRoProperties)] uint8* RoProperties; + } GROUP_ENUM_ENTRY; + + typedef struct { + [string] [charset(UTF16)] uint16 *Name; + [string] [charset(UTF16)] uint16 *Id; + [string] [charset(UTF16)] uint16 *OwnerName; + [string] [charset(UTF16)] uint16 *OwnerId; + uint32 cbProperties; + [size_is(cbProperties)] uint8* Properties; + uint32 cbRoProperties; + [size_is(cbRoProperties)] uint8* RoProperties; + } RESOURCE_ENUM_ENTRY; + + typedef struct { + uint32 EntryCount; + [size_is(EntryCount)] GROUP_ENUM_ENTRY Entry[*]; + } GROUP_ENUM_LIST; + + typedef struct { + uint32 EntryCount; + [size_is(EntryCount)] RESOURCE_ENUM_ENTRY Entry[*]; + } RESOURCE_ENUM_LIST; + + /*****************/ + /* Function 0x07 */ + + WERROR + clusapi_CreateEnum( + [ in ] ClusterEnumType dwType, + [ out ] ENUM_LIST **ReturnEnum, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x08 */ + +#if 0 + HRES_RPC + clusapi_OpenResource( + [ in, string ] [charset(UTF16)] uint16 *lpszResourceName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_OpenResource( + [ in, string ] [charset(UTF16)] uint16 *lpszResourceName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HRES_RPC *hResource + ); +#endif + /*****************/ + /* Function 0x09 */ + + typedef [v1_enum] enum { + CLUSTER_RESOURCE_DEFAULT_MONITOR = 0x00000000, + CLUSTER_RESOURCE_SEPARATE_MONITOR = 0x00000001 + } clusapi_CreateResourceFlags; + +#if 0 + HRES_RPC + clusapi_CreateResource( + [ in ] HGROUP_RPC hGroup, + [ in, string ] [charset(UTF16)] uint16 *lpszResourceName, + [ in, string ] [charset(UTF16)] uint16 *lpszResourceType, + [ in ] clusapi_CreateResourceFlags dwFlags, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_CreateResource( + [ in ] HGROUP_RPC hGroup, + [ in, string ] [charset(UTF16)] uint16 *lpszResourceName, + [ in, string ] [charset(UTF16)] uint16 *lpszResourceType, + [ in ] clusapi_CreateResourceFlags dwFlags, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HRES_RPC *hResource + ); +#endif + /*****************/ + /* Function 0x0A */ + + WERROR + clusapi_DeleteResource( + [ in ] HRES_RPC hResource, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x0B */ + + WERROR + clusapi_CloseResource( + [ in, out ] HRES_RPC *Resource + ); + + /*****************/ + /* Function 0x0C */ + + typedef [v1_enum] enum { + ClusterResourceInitializing = 0x00000001, + ClusterResourceOnline = 0x00000002, + ClusterResourceOffline = 0x00000003, + ClusterResourceFailed = 0x00000004, + ClusterResourceOnlinePending = 0x00000081, + ClusterResourceOfflinePending = 0x00000082, + ClusterResourceStateUnknown = 0xFFFFFFFF + } clusapi_ClusterResourceState; + + WERROR + clusapi_GetResourceState( + [ in ] HRES_RPC hResource, + [ out ] clusapi_ClusterResourceState *State, + [ out, string ] [charset(UTF16)] uint16 **NodeName, + [ out, string ] [charset(UTF16)] uint16 **GroupName, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x0D */ + + WERROR + clusapi_SetResourceName( + [ in ] HRES_RPC hResource, + [ in, string ] [charset(UTF16)] uint16 *lpszResourceName, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x0E */ + + WERROR + clusapi_GetResourceId( + [ in ] HRES_RPC hResource, + [ out, string ] [charset(UTF16)] uint16 **pGuid, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x0F */ + + WERROR + clusapi_GetResourceType( + [ in ] HRES_RPC hResource, + [ out, string ] [charset(UTF16)] uint16 **lpszResourceType, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x10 */ + + WERROR + clusapi_FailResource( + [ in ] HRES_RPC hResource, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x11 */ + + WERROR + clusapi_OnlineResource( + [ in ] HRES_RPC hResource, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x12 */ + + WERROR + clusapi_OfflineResource( + [ in ] HRES_RPC hResource, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x13 */ + + WERROR + clusapi_AddResourceDependency( + [ in ] HRES_RPC hResource, + [ in ] HRES_RPC hDependsOn, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x14 */ + + WERROR + clusapi_RemoveResourceDependency( + [ in ] HRES_RPC hResource, + [ in ] HRES_RPC hDependsOn, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x15 */ + + WERROR + clusapi_CanResourceBeDependent( + [ in ] HRES_RPC hResource, + [ in ] HRES_RPC hResourceDependent, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x16 */ + + WERROR + clusapi_CreateResEnum( + [ in ] HRES_RPC hResource, + [ in ] uint32 dwType, + [ out ] ENUM_LIST **ReturnEnum, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x17 */ + + WERROR + clusapi_AddResourceNode( + [ in ] HRES_RPC hResource, + [ in ] HNODE_RPC hNode, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x18 */ + + WERROR + clusapi_RemoveResourceNode( + [ in ] HRES_RPC hResource, + [ in ] HNODE_RPC hNode, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x19 */ + + WERROR + clusapi_ChangeResourceGroup( + [ in ] HRES_RPC hResource, + [ in ] HGROUP_RPC hGroup, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x1A */ + + WERROR + clusapi_CreateResourceType( + [ in, string ] [charset(UTF16)] uint16 *lpszTypeName, + [ in, string ] [charset(UTF16)] uint16 *lpszDisplayName, + [ in, string ] [charset(UTF16)] uint16 *lpszDllName, + [ in ] uint32 dwLooksAlive, + [ in ] uint32 dwIsAlive, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x1B */ + + WERROR + clusapi_DeleteResourceType( + [ in, string ] [charset(UTF16)] uint16 *lpszTypeName, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x1C */ +#if 0 + HKEY_RPC + clusapi_GetRootKey( + [ in ] winreg_AccessMask samDesired, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_GetRootKey( + [ in ] winreg_AccessMask samDesired, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HKEY_RPC *phKey + ); +#endif + /*****************/ + /* Function 0x1D */ +#if 0 + HKEY_RPC + clusapi_CreateKey( + [ in ] HKEY_RPC hKey, + [ in, string ] [charset(UTF16)] uint16 *lpSubKey, + [ in ] uint32 dwOptions, + [ in ] winreg_AccessMask samDesired, + [ in, unique ] RPC_SECURITY_ATTRIBUTES *lpSecurityAttributes, + [ out ] uint32 *lpdwDisposition, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_CreateKey( + [ in ] HKEY_RPC hKey, + [ in, string ] [charset(UTF16)] uint16 *lpSubKey, + [ in ] uint32 dwOptions, + [ in ] winreg_AccessMask samDesired, + [ in, unique ] RPC_SECURITY_ATTRIBUTES *lpSecurityAttributes, + [ out ] uint32 *lpdwDisposition, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HKEY_RPC *phKey + ); +#endif + /*****************/ + /* Function 0x1E */ +#if 0 + HKEY_RPC + clusapi_OpenKey( + [ in ] HKEY_RPC hKey, + [ in, string ] [charset(UTF16)] uint16 *lpSubKey, + [ in ] winreg_AccessMask samDesired, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_OpenKey( + [ in ] HKEY_RPC hKey, + [ in, string ] [charset(UTF16)] uint16 *lpSubKey, + [ in ] winreg_AccessMask samDesired, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HKEY_RPC *phKey + ); +#endif + /*****************/ + /* Function 0x1F */ + + WERROR + clusapi_EnumKey( + [ in ] HKEY_RPC hKey, + [ in ] uint32 dwIndex, + [ out, string ] [charset(UTF16)] uint16 **KeyName, + [ out ] NTTIME *lpftLastWriteTime, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x20 */ + + WERROR + clusapi_SetValue( + [ in ] HKEY_RPC hKey, + [ in, string ] [charset(UTF16)] uint16 *lpValueName, + [ in ] winreg_Type dwType, + [ in, size_is(cbData) ] uint8 *lpData, + [ in ] uint32 cbData, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x21 */ + + WERROR + clusapi_DeleteValue( + [ in ] HKEY_RPC hKey, + [ in, string ] [charset(UTF16)] uint16 *lpValueName, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x22 */ + + WERROR + clusapi_QueryValue( + [ in ] HKEY_RPC hKey, + [ in, string ] [charset(UTF16)] uint16 *lpValueName, + [ out ] winreg_Type *lpValueType, + [ out, size_is(cbData) ] uint8 *lpData, + [ in ] uint32 cbData, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x23 */ + + WERROR + clusapi_DeleteKey( + [ in ] HKEY_RPC hKey, + [ in, string ] [charset(UTF16)] uint16 *lpSubKey, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x24 */ + + WERROR + clusapi_EnumValue( + [ in ] HKEY_RPC hKey, + [ in ] uint32 dwIndex, + [ out, string ] [charset(UTF16)] uint16 **lpValueName, + [ out ] winreg_Type *lpType, + [ out, size_is(*lpcbData) ] uint8 *lpData, + [ in, out ] uint32 *lpcbData, + [ out ] uint32 *TotalSize, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x25 */ + + WERROR + clusapi_CloseKey( + [ in, out ] HKEY_RPC *pKey + ); + + /*****************/ + /* Function 0x26 */ + + WERROR + clusapi_QueryInfoKey( + [ in ] HKEY_RPC hKey, + [ out ] uint32 *lpcSubKeys, + [ out ] uint32 *lpcbMaxSubKeyLen, + [ out ] uint32 *lpcValues, + [ out ] uint32 *lpcbMaxValueNameLen, + [ out ] uint32 *lpcbMaxValueLen, + [ out ] uint32 *lpcbSecurityDescriptor, + [ out ] NTTIME *lpftLastWriteTime, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x27 */ + + WERROR + clusapi_SetKeySecurity( + [ in ] HKEY_RPC hKey, + [ in ] uint32 SecurityInformation, + [ in ] RPC_SECURITY_DESCRIPTOR *pRpcSecurityDescriptor, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x28 */ + + WERROR + clusapi_GetKeySecurity( + [ in ] HKEY_RPC hKey, + [ in ] uint32 SecurityInformation, + [ in, out ] RPC_SECURITY_DESCRIPTOR *pRpcSecurityDescriptor, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x29 */ +#if 0 + HGROUP_RPC + clusapi_OpenGroup( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_OpenGroup( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HGROUP_RPC *hGroup + ); +#endif + /*****************/ + /* Function 0x2A */ +#if 0 + HGROUP_RPC + clusapi_CreateGroup( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_CreateGroup( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HGROUP_RPC *hGroup + ); +#endif + /*****************/ + /* Function 0x2B */ + + WERROR + clusapi_DeleteGroup( + [ in ] HGROUP_RPC Group, + [ in ] boolean8 force, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x2C */ + + WERROR + clusapi_CloseGroup( + [ in, out ] HGROUP_RPC *Group + ); + + /*****************/ + /* Function 0x2D */ + + typedef [v1_enum] enum { + ClusterGroupOnline = 0x00000000, + ClusterGroupOffline = 0x00000001, + ClusterGroupFailed = 0x00000002, + ClusterGroupPartialOnline = 0x00000003, + ClusterGroupPending = 0x00000004, + ClusterGroupStateUnknown = 0xFFFFFFFF + } clusapi_ClusterGroupState; + + WERROR + clusapi_GetGroupState( + [ in ] HGROUP_RPC hGroup, + [ out ] clusapi_ClusterGroupState *State, + [ out, string ] [charset(UTF16)] uint16 **NodeName, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x2E */ + + WERROR + clusapi_SetGroupName( + [ in ] HGROUP_RPC hGroup, + [ in, string ] [charset(UTF16)] uint16 *lpszGroupName, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x2F */ + + WERROR + clusapi_GetGroupId( + [ in ] HGROUP_RPC hGroup, + [ out, string ] [charset(UTF16)] uint16 **pGuid, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x30 */ + + WERROR + clusapi_GetNodeId( + [ in ] HNODE_RPC hNode, + [ out, string ] [charset(UTF16)] uint16 **pGuid, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x31 */ + + WERROR + clusapi_OnlineGroup( + [ in ] HGROUP_RPC hGroup, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x32 */ + + WERROR + clusapi_OfflineGroup( + [ in ] HGROUP_RPC hGroup, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x33 */ + + WERROR + clusapi_MoveGroup( + [ in ] HGROUP_RPC hGroup, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x34 */ + + WERROR + clusapi_MoveGroupToNode( + [ in ] HGROUP_RPC hGroup, + [ in ] HNODE_RPC hNode, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x35 */ + + typedef [bitmap32bit] bitmap { + CLUSTER_GROUP_ENUM_CONTAINS = 0x00000001, + CLUSTER_GROUP_ENUM_NODES = 0x00000002 + } ClusterGroupEnumType; + + WERROR + clusapi_CreateGroupResourceEnum( + [ in ] HGROUP_RPC hGroup, + [ in ] ClusterGroupEnumType dwType, + [ out ] ENUM_LIST **ReturnEnum, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x36 */ + + WERROR + clusapi_SetGroupNodeList( + [ in ] HGROUP_RPC hGroup, + [ in, unique, size_is(cchListSize) ] uint16 *multiSzNodeList, + [ in ] uint32 cchListSize, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x37 */ +#if 0 + HNOTIFY_RPC + clusapi_CreateNotify( + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_CreateNotify( + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HNOTIFY_RPC *hNotify + ); +#endif + /*****************/ + /* Function 0x38 */ + + WERROR + clusapi_CloseNotify( + [ in, out ] HNOTIFY_RPC *Notify + ); + + /*****************/ + /* Function 0x39 */ + + WERROR + clusapi_AddNotifyCluster( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HCLUSTER_RPC hCluster, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x3A */ + + WERROR + clusapi_AddNotifyNode( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ out ] uint32 *dwStateSequence, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x3B */ + + WERROR + clusapi_AddNotifyGroup( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HGROUP_RPC hGroup, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ out ] uint32 *dwStateSequence, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x3C */ + + WERROR + clusapi_AddNotifyResource( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HRES_RPC hResource, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ out ] uint32 *dwStateSequence, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x3D */ + + WERROR + clusapi_AddNotifyKey( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HKEY_RPC hKey, + [ in ] uint32 dwNotifyKey, + [ in ] uint32 Filter, + [ in ] boolean8 WatchSubTree, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x3E */ + + WERROR + clusapi_ReAddNotifyNode( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ in ] uint32 StateSequence, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x3F */ + + WERROR + clusapi_ReAddNotifyGroup( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HGROUP_RPC hGroup, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ in ] uint32 StateSequence, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x40 */ + + WERROR + clusapi_ReAddNotifyResource( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HRES_RPC hResource, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ in ] uint32 StateSequence, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x41 */ + + WERROR + clusapi_GetNotify( + [ in ] HNOTIFY_RPC hNotify, + [ out ] uint32 *dwNotifyKey, + [ out ] uint32 *dwFilter, + [ out ] uint32 *dwStateSequence, + [ out, string ] [charset(UTF16)] uint16 **Name, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x42 */ +#if 0 + HNODE_RPC + clusapi_OpenNode( + [ in, string ] [charset(UTF16)] uint16 *lpszNodeName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_OpenNode( + [ in, string ] [charset(UTF16)] uint16 *lpszNodeName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HNODE_RPC *hNode + ); +#endif + /*****************/ + /* Function 0x43 */ + + WERROR + clusapi_CloseNode( + [ in, out ] HNODE_RPC *Node + ); + + /*****************/ + /* Function 0x44 */ + + typedef [v1_enum] enum { + ClusterNodeUp = 0x00000000, + ClusterNodeDown = 0x00000001, + ClusterNodePaused = 0x00000002, + ClusterNodeJoining = 0x00000003, + ClusterNodeStateUnknown = 0xFFFFFFFF + } clusapi_ClusterNodeState; + + WERROR + clusapi_GetNodeState( + [ in ] HNODE_RPC hNode, + [ out ] clusapi_ClusterNodeState *State, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x45 */ + + WERROR + clusapi_PauseNode( + [ in ] HNODE_RPC hNode, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x46 */ + + WERROR + clusapi_ResumeNode( + [ in ] HNODE_RPC hNode, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x47 */ + + WERROR + clusapi_EvictNode( + [ in ] HNODE_RPC hNode, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x48 */ + + WERROR + clusapi_NodeResourceControl( + [ in ] HRES_RPC hResource, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x49 */ + + typedef [v1_enum] enum { + CLUS_RESCLASS_UNKNOWN = 0x00000000, + CLUS_RESCLASS_STORAGE = 0x00000001, + CLUS_RESCLASS_NETWORK = 0x00000002 + } clusapi_ResourceClass; + + typedef [public] struct { + clusapi_ResourceClass Class; + uint32 SubClass; + } CLUS_RESOURCE_CLASS_INFO; + + typedef [v1_enum] enum { + CLUSCTL_RESOURCE_UNKNOWN = 0x01000000, + CLUSCTL_RESOURCE_GET_CHARACTERISTICS = 0x01000005, + CLUSCTL_RESOURCE_GET_FLAGS = 0x01000009, + CLUSCTL_RESOURCE_GET_CLASS_INFO = 0x0100000D, + CLUSCTL_RESOURCE_GET_REQUIRED_DEPENDENCIES = 0x01000011, + CLUSCTL_RESOURCE_GET_NAME = 0x01000029, + CLUSCTL_RESOURCE_GET_RESOURCE_TYPE = 0x0100002D, + CLUSCTL_RESOURCE_GET_ID = 0x01000039, + CLUSCTL_RESOURCE_ENUM_COMMON_PROPERTIES = 0x01000051, + CLUSCTL_RESOURCE_GET_RO_COMMON_PROPERTIES = 0x01000055, + CLUSCTL_RESOURCE_GET_COMMON_PROPERTIES = 0x01000059, + CLUSCTL_RESOURCE_SET_COMMON_PROPERTIES = 0x0140005E, + CLUSCTL_RESOURCE_VALIDATE_COMMON_PROPERTIES = 0x01000061, + CLUSCTL_RESOURCE_GET_COMMON_PROPERTY_FMTS = 0x01000065, + CLUSCTL_RESOURCE_ENUM_PRIVATE_PROPERTIES = 0x01000079, + CLUSCTL_RESOURCE_GET_RO_PRIVATE_PROPERTIES = 0x0100007D, + CLUSCTL_RESOURCE_GET_PRIVATE_PROPERTIES = 0x01000081, + CLUSCTL_RESOURCE_SET_PRIVATE_PROPERTIES = 0x01400086, + CLUSCTL_RESOURCE_VALIDATE_PRIVATE_PROPERTIES = 0x01000089, + CLUSCTL_RESOURCE_GET_PRIVATE_PROPERTY_FMTS = 0x0100008D, + CLUSCTL_RESOURCE_ADD_REGISTRY_CHECKPOINT = 0x014000A2, + CLUSCTL_RESOURCE_DELETE_REGISTRY_CHECKPOINT = 0x014000A6, + CLUSCTL_RESOURCE_GET_REGISTRY_CHECKPOINTS = 0x010000A9, + CLUSCTL_RESOURCE_ADD_CRYPTO_CHECKPOINT = 0x014000AE, + CLUSCTL_RESOURCE_DELETE_CRYPTO_CHECKPOINT = 0x014000B2, + CLUSCTL_RESOURCE_GET_CRYPTO_CHECKPOINTS = 0x010000B5, + CLUSCTL_RESOURCE_UPGRADE_DLL = 0x014000BA, + CLUSCTL_RESOURCE_ADD_REGISTRY_CHECKPOINT_64BIT = 0x014000BE, + CLUSCTL_RESOURCE_ADD_REGISTRY_CHECKPOINT_32BIT = 0x014000C2, + CLUSCTL_RESOURCE_GET_NETWORK_NAME = 0x01000169, + CLUSCTL_RESOURCE_NETNAME_REGISTER_DNS_RECORDS = 0x01000172, + CLUSCTL_RESOURCE_GET_DNS_NAME = 0x01000175, + CLUSCTL_RESOURCE_NETNAME_SET_PWD_INFO = 0x0100017A, + CLUSCTL_RESOURCE_NETNAME_DELETE_CO = 0x0100017E, + CLUSCTL_RESOURCE_NETNAME_VALIDATE_VCO = 0x01000181, + CLUSCTL_RESOURCE_NETNAME_RESET_VCO = 0x01000185, + CLUSCTL_RESOURCE_NETNAME_CREDS_UPDATED = 0x01c0018a, + CLUSCTL_RESOURCE_STORAGE_GET_DISK_INFO = 0x01000191, + CLUSCTL_RESOURCE_STORAGE_IS_PATH_VALID = 0x01000199, + CLUSCTL_RESOURCE_IPADDRESS_RENEW_LEASE = 0x014001BE, + CLUSCTL_RESOURCE_IPADDRESS_RELEASE_LEASE = 0x014001C2, + CLUSCTL_RESOURCE_QUERY_MAINTENANCE_MODE = 0x010001E1, + CLUSCTL_RESOURCE_SET_MAINTENANCE_MODE = 0x014001E6, + CLUSCTL_RESOURCE_STORAGE_SET_DRIVELETTER = 0x014001EA, + CLUSCTL_RESOURCE_STORAGE_GET_DISK_INFO_EX = 0x010001F1, + CLUSCTL_RESOURCE_STORAGE_GET_DIRTY = 0x01000219, + CLUSCTL_RESOURCE_STORAGE_GET_MOUNTPOINTS = 0x01000211, + CLUSCTL_RESOURCE_STORAGE_GET_SHARED_VOLUME_INFO = 0x01000225, + CLUSCTL_RESOURCE_VM_START_MIGRATION = 0x01600004, + CLUSCTL_RESOURCE_VM_CANCEL_MIGRATION = 0x01600008, + CLUSCTL_RESOURCE_SET_CSV_MAINTENANCE_MODE = 0x01400296, + CLUSCTL_RESOURCE_ENABLE_SHARED_VOLUME_DIRECTIO = 0x0140028a, + CLUSCTL_RESOURCE_DISABLE_SHARED_VOLUME_DIRECTIO = 0x0140028e, + CLUSCTL_RESOURCE_SET_SHARED_VOLUME_BACKUP_MODE = 0x0140029a, + CLUSCTL_RESOURCE_GET_RELATED_RESOURCE_NAMES = 0x01001fad, + CLUSCTL_RESOURCE_POOL_GET_DRIVE_INFO = 0x010002b5, + CLUSCTL_RESOURCE_CLOUD_WITNESS_UPDATE_TOKEN = 0x014020e6, + CLUSCTL_RESOURCE_NETNAME_CHECK_OU_PERMISSIONS = 0x07002121, + CLUSCTL_RESOURCE_NETNAME_CHECK_AD_STATE = 0x07002125 + } clusapi_ResourceControlCode; + + WERROR + clusapi_ResourceControl( + [ in ] HRES_RPC hResource, + [ in ] clusapi_ResourceControlCode dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x4A */ + + WERROR + clusapi_NodeResourceTypeControl( + [ in ] HCLUSTER_RPC hCluster, + [ in, string ] [charset(UTF16)] uint16 *lpszResourceTypeName, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x4B */ + + typedef [v1_enum] enum { + CLUSCTL_RESOURCE_TYPE_UNKNOWN = 0x02000000, + CLUSCTL_RESOURCE_TYPE_GET_CHARACTERISTICS = 0x02000005, + CLUSCTL_RESOURCE_TYPE_GET_FLAGS = 0x02000009, + CLUSCTL_RESOURCE_TYPE_GET_CLASS_INFO = 0x0200000D, + CLUSCTL_RESOURCE_TYPE_GET_REQUIRED_DEPENDENCIES = 0x02000011, + CLUSCTL_RESOURCE_TYPE_GET_ARB_TIMEOUT = 0x02000015, + CLUSCTL_RESOURCE_TYPE_ENUM_COMMON_PROPERTIES = 0x02000051, + CLUSCTL_RESOURCE_TYPE_GET_RO_COMMON_PROPERTIES = 0x02000055, + CLUSCTL_RESOURCE_TYPE_GET_COMMON_PROPERTIES = 0x02000059, + CLUSCTL_RESOURCE_TYPE_SET_COMMON_PROPERTIES = 0x0240005E, + CLUSCTL_RESOURCE_TYPE_VALIDATE_COMMON_PROPERTIES = 0x02000061, + CLUSCTL_RESOURCE_TYPE_GET_COMMON_PROPERTY_FMTS = 0x02000065, + CLUSCTL_RESOURCE_TYPE_GET_COMMON_RESOURCE_PROPERTY_FMTS = 0x02000069, + CLUSCTL_RESOURCE_TYPE_ENUM_PRIVATE_PROPERTIES = 0x02000079, + CLUSCTL_RESOURCE_TYPE_GET_RO_PRIVATE_PROPERTIES = 0x0200007D, + CLUSCTL_RESOURCE_TYPE_GET_PRIVATE_PROPERTIES = 0x02000081, + CLUSCTL_RESOURCE_TYPE_SET_PRIVATE_PROPERTIES = 0x02400086, + CLUSCTL_RESOURCE_TYPE_VALIDATE_PRIVATE_PROPERTIES = 0x02000089, + CLUSCTL_RESOURCE_TYPE_GET_PRIVATE_PROPERTY_FMTS = 0x0200008D, + CLUSCTL_RESOURCE_TYPE_GET_PRIVATE_RESOURCE_PROPERTY_FMTS= 0x02000091, + CLUSCTL_RESOURCE_TYPE_STORAGE_GET_AVAILABLE_DISKS = 0x02000195, + CLUSCTL_RESOURCE_TYPE_NETNAME_VALIDATE_NETNAME = 0x02000235, + CLUSCTL_RESOURCE_TYPE_VALIDATE_PATH = 0x02000231, + CLUSCTL_RESOURCE_TYPE_GEN_APP_VALIDATE_DIRECTORY = 0x02000239, + CLUSCTL_RESOURCE_TYPE_STORAGE_GET_DRIVELETTERS = 0x020001ED, + CLUSCTL_RESOURCE_TYPE_STORAGE_GET_AVAILABLE_DISKS_EX = 0x020001F5, + CLUSCTL_RESOURCE_TYPE_STORAGE_REMAP_DRIVELETTER = 0x02000201, + CLUSCTL_RESOURCE_TYPE_STORAGE_GET_DISKID = 0x02000205, + CLUSCTL_RESOURCE_TYPE_STORAGE_IS_CLUSTERABLE = 0x02000209, + CLUSCTL_RESOURCE_TYPE_STORAGE_RELEASE_OWNERSHIP = 0x0240020E, + CLUSCTL_RESOURCE_TYPE_STORAGE_IS_CSV_FILE = 0x1000229, + CLUSCTL_RESOURCE_TYPE_CLOUD_WITNESS_VALIDATE_CREDENTIALS= 0x020020e1, + CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_ELIGIBLE_LOGDISKS = 0x02002149, + CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_ELIGIBLE_TARGET_DATADISKS = 0x0200214D, + CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_ELIGIBLE_SOURCE_DATADISKS = 0x02002151, + CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_REPLICA_VOLUMES = 0x02002159, + CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_LOG_VOLUME = 0x0200215D, + CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_REPLICATED_DISKS = 0x02002155, + CLUSCTL_RESOURCE_TYPE_REPLICATION_GET_RESOURCE_GROUP = 0x02002161 + } clusapi_ResourceTypeControlCode; + + WERROR + clusapi_ResourceTypeControl( + [ in ] HCLUSTER_RPC hCluster, + [ in, string ] [charset(UTF16)] uint16 *lpszResourceTypeName, + [ in ] clusapi_ResourceTypeControlCode dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x4C */ + + WERROR + clusapi_NodeGroupControl( + [ in ] HGROUP_RPC hGroup, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x4D */ + + typedef [v1_enum] enum { + CLUSCTL_GROUP_UNKNOWN = 0x03000000, + CLUSCTL_GROUP_GET_CHARACTERISTICS = 0x03000005, + CLUSCTL_GROUP_GET_FLAGS = 0x03000009, + CLUSCTL_GROUP_GET_NAME = 0x03000029, + CLUSCTL_GROUP_GET_ID = 0x03000039, + CLUSCTL_GROUP_ENUM_COMMON_PROPERTIES = 0x03000051, + CLUSCTL_GROUP_GET_RO_COMMON_PROPERTIES = 0x03000055, + CLUSCTL_GROUP_GET_COMMON_PROPERTIES = 0x03000059, + CLUSCTL_GROUP_SET_COMMON_PROPERTIES = 0x0340005E, + CLUSCTL_GROUP_VALIDATE_COMMON_PROPERTIES = 0x03000061, + CLUSCTL_GROUP_GET_COMMON_PROPERTY_FMTS = 0x03000065, + CLUSCTL_GROUP_ENUM_PRIVATE_PROPERTIES = 0x03000079, + CLUSCTL_GROUP_GET_RO_PRIVATE_PROPERTIES = 0x0300007D, + CLUSCTL_GROUP_GET_PRIVATE_PROPERTIES = 0x03000081, + CLUSCTL_GROUP_SET_PRIVATE_PROPERTIES = 0x03400086, + CLUSCTL_GROUP_VALIDATE_PRIVATE_PROPERTIES = 0x03000089 + } clusapi_GroupControlCode; + + WERROR + clusapi_GroupControl( + [ in ] HGROUP_RPC hGroup, + [ in ] clusapi_GroupControlCode dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x4E */ + + WERROR + clusapi_NodeNodeControl( + [ in ] HNODE_RPC hNode, + [ in ] HNODE_RPC hHostNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x4F */ + + typedef [v1_enum] enum { + CLUSCTL_NODE_UNKNOWN = 0x04000000, + CLUSCTL_NODE_GET_CHARACTERISTICS = 0x04000005, + CLUSCTL_NODE_GET_FLAGS = 0x04000009, + CLUSCTL_NODE_GET_NAME = 0x04000029, + CLUSCTL_NODE_GET_ID = 0x04000039, + CLUSCTL_NODE_GET_CLUSTER_SERVICE_ACCOUNT_NAME = 0x04000041, + CLUSCTL_NODE_ENUM_COMMON_PROPERTIES = 0x04000051, + CLUSCTL_NODE_GET_RO_COMMON_PROPERTIES = 0x04000055, + CLUSCTL_NODE_GET_COMMON_PROPERTIES = 0x04000059, + CLUSCTL_NODE_SET_COMMON_PROPERTIES = 0x0440005E, + CLUSCTL_NODE_VALIDATE_COMMON_PROPERTIES = 0x04000061, + CLUSCTL_NODE_ENUM_PRIVATE_PROPERTIES = 0x04000079, + CLUSCTL_NODE_GET_RO_PRIVATE_PROPERTIES = 0x0400007D, + CLUSCTL_NODE_GET_PRIVATE_PROPERTIES = 0x04000081, + CLUSCTL_NODE_SET_PRIVATE_PROPERTIES = 0x04400086, + CLUSCTL_NODE_VALIDATE_PRIVATE_PROPERTIES = 0x04000089 + } clusapi_NodeControlCode; + + WERROR + clusapi_NodeControl( + [ in ] HNODE_RPC hNode, + [ in ] clusapi_NodeControlCode dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x50 */ + + WERROR + Opnum80NotUsedOnWire(void); + + /*****************/ + /* Function 0x51 */ +#if 0 + HNETWORK_RPC + clusapi_OpenNetwork( + [ in, string ] [charset(UTF16)] uint16 *lpszNetworkName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_OpenNetwork( + [ in, string ] [charset(UTF16)] uint16 *lpszNetworkName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HNETWORK_RPC *hNetwork + ); +#endif + /*****************/ + /* Function 0x52 */ + + WERROR + clusapi_CloseNetwork( + [ in, out ] HNETWORK_RPC *Network + ); + + /*****************/ + /* Function 0x53 */ + + typedef [v1_enum] enum { + ClusterNetworkUnavailable = 0x00000000, + ClusterNetworkDown = 0x00000001, + ClusterNetworkPartitioned = 0x00000002, + ClusterNetworkUp = 0x00000003, + ClusterNetworkStateUnknown = 0xFFFFFFFF + } clusapi_ClusterNetworkState; + + WERROR + clusapi_GetNetworkState( + [ in ] HNETWORK_RPC hNetwork, + [ out ] clusapi_ClusterNetworkState *State, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x54 */ + + WERROR + clusapi_SetNetworkName( + [ in ] HNETWORK_RPC hNetwork, + [ in, string ] [charset(UTF16)] uint16 *lpszNetworkName, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x55 */ + + WERROR + clusapi_CreateNetworkEnum( + [ in ] HNETWORK_RPC hNetwork, + [ in ] uint32 dwType, + [ out ] ENUM_LIST **ReturnEnum, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x56 */ + + WERROR + clusapi_GetNetworkId( + [ in ] HNETWORK_RPC hNetwork, + [ out, string ] [charset(UTF16)] uint16 **pGuid, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x57 */ + + WERROR + clusapi_SetNetworkPriorityOrder( + [ in, range(0, 1000)] uint32 NetworkCount, + [ in, string, size_is(NetworkCount) ] [charset(UTF16)] uint16 NetworkIdList[*], + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x58 */ + + WERROR + clusapi_NodeNetworkControl( + [ in ] HNETWORK_RPC hNetwork, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x59 */ + + WERROR + clusapi_NetworkControl( + [ in ] HNETWORK_RPC hNetwork, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x5A */ + + WERROR + clusapi_AddNotifyNetwork( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HNETWORK_RPC hNetwork, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ out ] uint32 *dwStateSequence, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x5B */ + + WERROR + clusapi_ReAddNotifyNetwork( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HNETWORK_RPC hNetwork, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ in ] uint32 StateSequence, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x5C */ +#if 0 + HNETINTERFACE_RPC + clusapi_OpenNetInterface( + [ in, string ] [charset(UTF16)] uint16 *lpszNetInterfaceName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_OpenNetInterface( + [ in, string ] [charset(UTF16)] uint16 *lpszNetInterfaceName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HNETINTERFACE_RPC *hNetInterface + ); +#endif + /*****************/ + /* Function 0x5D */ + + WERROR + clusapi_CloseNetInterface( + [ in, out ] HNETINTERFACE_RPC *NetInterface + ); + + /*****************/ + /* Function 0x5E */ + + typedef [v1_enum] enum { + ClusterNetInterfaceFailed = 0x00000000, + ClusterNetInterfaceUnreachable = 0x00000001, + ClusterNetInterfaceUnavailable = 0x00000002, + ClusterNetInterfaceUp = 0x00000003, + ClusterNetInterfaceStateUnknown = 0xFFFFFFFF + } clusapi_ClusterNetInterfaceState; + + WERROR + clusapi_GetNetInterfaceState( + [ in ] HNETINTERFACE_RPC hNetInterface, + [ out ] clusapi_ClusterNetInterfaceState *State, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x5F */ + + WERROR + clusapi_GetNetInterface( + [ in, string ] [charset(UTF16)] uint16 *lpszNodeName, + [ in, string ] [charset(UTF16)] uint16 *lpszNetworkName, + [ out, string ] [charset(UTF16)] uint16 **lppszInterfaceName, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x60 */ + + WERROR + clusapi_GetNetInterfaceId( + [ in ] HNETINTERFACE_RPC hNetInterface, + [ out, string ] [charset(UTF16)] uint16 **pGuid, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x61 */ + + WERROR + clusapi_NodeNetInterfaceControl( + [ in ] HNETINTERFACE_RPC hNetInterface, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x62 */ + + WERROR + clusapi_NetInterfaceControl( + [ in ] HNETINTERFACE_RPC hNetInterface, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x63 */ + + WERROR + clusapi_AddNotifyNetInterface( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HNETINTERFACE_RPC hNetInterface, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ out ] uint32 *dwStateSequence, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x64 */ + + WERROR + clusapi_ReAddNotifyNetInterface( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HNETINTERFACE_RPC hNetInterface, + [ in ] uint32 dwFilter, + [ in ] uint32 dwNotifyKey, + [ in ] uint32 StateSequence, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x65 */ + + WERROR + clusapi_CreateNodeEnum( + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwType, + [ out ] ENUM_LIST **ReturnEnum, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x66 */ + + WERROR + clusapi_GetClusterVersion2( + [ out ] uint16 *lpwMajorVersion, + [ out ] uint16 *lpwMinorVersion, + [ out ] uint16 *lpwBuildNumber, + [ out, string ] [charset(UTF16)] uint16 **lpszVendorId, + [ out, string ] [charset(UTF16)] uint16 **lpszCSDVersion, + [ out ] CLUSTER_OPERATIONAL_VERSION_INFO **ppClusterOpVerInfo, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x67 */ + + typedef [bitmap32bit] bitmap { + CLUSTER_RESOURCE_TYPE_ENUM_NODES = 0x00000001, + CLUSTER_RESOURCE_TYPE_ENUM_RESOURCES = 0x00000002 + } ClusterResTypeEnumType; + + WERROR + clusapi_CreateResTypeEnum( + [ in, string ] [charset(UTF16)] uint16 *lpszTypeName, + [ in ] ClusterResTypeEnumType dwType, + [ out ] ENUM_LIST **ReturnEnum, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x68 */ + + WERROR + clusapi_BackupClusterDatabase( + [ in, string ] [charset(UTF16)] uint16 *lpszPathName, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x69 */ + + WERROR + clusapi_NodeClusterControl( + [ in ] HCLUSTER_RPC hCluster, + [ in ] HNODE_RPC hHostNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x6A */ + + typedef [v1_enum] enum { + CLUSCTL_CLUSTER_UNKNOWN = 0x07000000, + CLUSCTL_CLUSTER_GET_FQDN = 0x0700003D, + CLUSCTL_CLUSTER_CHECK_VOTER_EVICT = 0x07000045, + CLUSCTL_CLUSTER_CHECK_VOTER_DOWN = 0x07000049, + CLUSCTL_CLUSTER_SHUTDOWN = 0x0700004D, + CLUSCTL_CLUSTER_ENUM_COMMON_PROPERTIES = 0x07000051, + CLUSCTL_CLUSTER_GET_RO_COMMON_PROPERTIES = 0x07000055, + CLUSCTL_CLUSTER_GET_COMMON_PROPERTIES = 0x07000059, + CLUSCTL_CLUSTER_SET_COMMON_PROPERTIES = 0x0740005E, + CLUSCTL_CLUSTER_VALIDATE_COMMON_PROPERTIES = 0x07000061, + CLUSCTL_CLUSTER_GET_COMMON_PROPERTY_FMTS = 0x07000065, + CLUSCTL_CLUSTER_ENUM_PRIVATE_PROPERTIES = 0x07000079, + CLUSCTL_CLUSTER_GET_RO_PRIVATE_PROPERTIES = 0x0700007D, + CLUSCTL_CLUSTER_GET_PRIVATE_PROPERTIES = 0x07000081, + CLUSCTL_CLUSTER_SET_PRIVATE_PROPERTIES = 0x07400086, + CLUSCTL_CLUSTER_VALIDATE_PRIVATE_PROPERTIES = 0x07000089, + CLUSCTL_CLUSTER_GET_SHARED_VOLUME_ID = 0x07000291, + CLUSCTL_CLUSTER_UPGRADE_CLUSTER_VERSION = 0x074000ce, + CLUSCTL_CLUSTER_CLEAR_UPGRADE_IN_PROGRESS = 0x074000d2, + CLUSCTL_CLUSTER_IS_READY_FOR_UPGRADE = 0x070000d5 + } clusapi_ClusterControlCode; + + typedef [v1_enum] enum { + CLUSPROP_SYNTAX_ENDMARK = 0x00000000, + CLUSPROP_SYNTAX_NAME = 0x00040003, + CLUSPROP_SYNTAX_RESCLASS = 0x00020002, + CLUSPROP_SYNTAX_LIST_VALUE_SZ = 0x00010003, + CLUSPROP_SYNTAX_LIST_VALUE_EXPAND_SZ = 0x00010004, + CLUSPROP_SYNTAX_LIST_VALUE_DWORD = 0x00010002, + CLUSPROP_SYNTAX_LIST_VALUE_BINARY = 0x00010001, + CLUSPROP_SYNTAX_LIST_VALUE_MULTI_SZ = 0x00010005, + CLUSPROP_SYNTAX_LIST_VALUE_LONG = 0x00010007, + CLUSPROP_SYNTAX_LIST_VALUE_EXPANDED_SZ = 0x00010008, + CLUSPROP_SYNTAX_LIST_VALUE_SECURITY_DESCRIPTOR = 0x00010009, + CLUSPROP_SYNTAX_LIST_VALUE_LARGE_INTEGER = 0x0001000a, + CLUSPROP_SYNTAX_LIST_VALUE_ULARGE_INTEGER = 0x00010006, + CLUSPROP_SYNTAX_LIST_VALUE_WORD = 0x0001000b, + CLUSPROP_SYNTAX_LIST_VALUE_FILETIME = 0x0001000c, + CLUSPROP_SYNTAX_DISK_SIGNATURE = 0x00050002, + CLUSPROP_SYNTAX_SCSI_ADDRESS = 0x00060002, + CLUSPROP_SYNTAX_DISK_NUMBER = 0x00070002, + CLUSPROP_SYNTAX_PARTITION_INFO = 0x00080001, + CLUSPROP_SYNTAX_DISK_SERIALNUMBER = 0x000a0003, + CLUSPROP_SYNTAX_DISK_GUID = 0x000b0003, + CLUSPROP_SYNTAX_DISK_SIZE = 0x000c0006, + CLUSPROP_SYNTAX_PARTITION_INFO_EX = 0x000d0001 + } CLUSTER_PROPERTY_SYNTAX; +#if 0 + typedef struct { + CLUSTER_PROPERTY_SYNTAX Syntax; + uint32 Size; + [subcontext(0),subcontext_size(Size)] [flag(NDR_REMAINING)] DATA_BLOB Buffer; + [flag(NDR_ALIGN4)] DATA_BLOB Padding; + } clusapi_propertyValues; + + typedef struct { + [value(CLUSPROP_SYNTAX_NAME)] CLUSTER_PROPERTY_SYNTAX syntax_name; + [value(strlen_m_term(buffer)*2)] uint32 size; + nstring buffer; + [flag(NDR_ALIGN2)] DATA_BLOB padding; + clusapi_propertyValues PropertyValues; + [value(CLUSPROP_SYNTAX_ENDMARK)] CLUSTER_PROPERTY_SYNTAX end_mark; + } clusapi_propertyValue; + + typedef [public] struct { + uint32 propertyCount; + clusapi_propertyValue propertyValues[propertyCount]; + [value(CLUSPROP_SYNTAX_ENDMARK)] CLUSTER_PROPERTY_SYNTAX end_mark; + } clusapi_PROPERTY_LIST; +#endif + WERROR + clusapi_ClusterControl( + [ in ] HCLUSTER_RPC hCluster, + [ in ] clusapi_ClusterControlCode dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), + length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in ] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x6B */ + + WERROR + clusapi_UnblockGetNotifyCall( + [ in ] HNOTIFY_RPC hNotify + ); + + /*****************/ + /* Function 0x6C */ + + WERROR + clusapi_SetServiceAccountPassword( + [ in, string ] [charset(UTF16)] uint16 *lpszNewPassword, + [ in ] IDL_CLUSTER_SET_PASSWORD_FLAGS dwFlags, + [ out, size_is(ReturnStatusBufferSize), length_is(*SizeReturned) ] + IDL_CLUSTER_SET_PASSWORD_STATUS ReturnStatusBufferPtr[*], + [ in, range(0, (64 * 1024)) ] uint32 ReturnStatusBufferSize, + [ out ] uint32 *SizeReturned, + [ out ] uint32 *ExpectedBufferSize + ); + + /*****************/ + /* Function 0x6D */ + + WERROR + clusapi_SetResourceDependencyExpression( + [ in ] HRES_RPC hResource, + [ in, string, unique ] [charset(UTF16)] uint16 *lpszDependencyExpression, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x6E */ + + WERROR + clusapi_GetResourceDependencyExpression( + [ in ] HRES_RPC hResource, + [ out, string ] [charset(UTF16)] uint16 **lpszDependencyExpression, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x6F */ + + WERROR + Opnum111NotUsedOnWire(void); + + /*****************/ + /* Function 0x70 */ + + WERROR + clusapi_GetResourceNetworkName( + [ in ] HRES_RPC hResource, + [ out, string ] [charset(UTF16)] uint16 **lpszName, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x71 */ + + WERROR + clusapi_ExecuteBatch( + [ in ] HKEY_RPC hKey, + [ in ] uint32 cbData, + [ in, size_is(cbData)] uint8 *lpData, + [ out ] int *pdwFailedCommand, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x72 */ + + WERROR + clusapi_CreateBatchPort( + [ in ] HKEY_RPC hKey, + [ out ] HBATCH_PORT_RPC *phBatchPort, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x73 */ + + WERROR + clusapi_GetBatchNotification( + [ in ] HBATCH_PORT_RPC hBatchNotify, + [ out ] uint32 *cbData, + [ out, size_is(,*cbData) ] uint8 ** lpData + ); + + /*****************/ + /* Function 0x74 */ + + WERROR + clusapi_CloseBatchPort( + [ in, out ] HBATCH_PORT_RPC *phBatchPort + ); + + /*****************/ + /* Function 0x75 */ + + typedef [bitmap32bit] bitmap { + CLUSAPI_READ_ACCESS = 0x00000001, + CLUSAPI_CHANGE_ACCESS = 0x00000002, + CLUSAPI_GENERIC_READ = 0x80000000, + CLUSAPI_GENERIC_WRITE = 0x40000000, + CLUSAPI_GENERIC_EXECUTE = 0x20000000, + CLUSAPI_GENERIC_ALL = 0x10000000, + CLUSAPI_MAXIMUM_ALLOWED = 0x02000000 + } clusapi_DesiredAccessMask; + +#if 0 + HCLUSTER_RPC + clusapi_OpenClusterEx( + [ in ] clusapi_DesiredAccessMask dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] WERROR *Status + ); +#else + void + clusapi_OpenClusterEx( + [ in ] clusapi_DesiredAccessMask dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] WERROR *Status, + [ out ] HCLUSTER_RPC *hCluster + ); +#endif + + /*****************/ + /* Function 0x76 */ +#if 0 + HNODE_RPC + clusapi_OpenNodeEx( + [ in, string ] [charset(UTF16)] uint16 *lpszNodeName, + [ in ] clusapi_DesiredAccessMask dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_OpenNodeEx( + [ in, string ] [charset(UTF16)] uint16 *lpszNodeName, + [ in ] clusapi_DesiredAccessMask dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HNODE_RPC *hNode + ); +#endif + /*****************/ + /* Function 0x77 */ +#if 0 + HGROUP_RPC + clusapi_OpenGroupEx( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupName, + [ in ] clusapi_DesiredAccessMask dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_OpenGroupEx( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupName, + [ in ] clusapi_DesiredAccessMask dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HGROUP_RPC *hGroup + ); +#endif + /*****************/ + /* Function 0x78 */ +#if 0 + HRES_RPC + clusapi_OpenResourceEx( + [ in, string ] [charset(UTF16)] uint16 *lpszResourceName, + [ in ] clusapi_DesiredAccessMask dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_OpenResourceEx( + [ in, string ] [charset(UTF16)] uint16 *lpszResourceName, + [ in ] clusapi_DesiredAccessMask dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HRES_RPC *hResource + ); +#endif + /*****************/ + /* Function 0x79 */ +#if 0 + HNETWORK_RPC + clusapi_OpenNetworkEx( + [ in, string ] [charset(UTF16)] uint16 *lpszNetworkName, + [ in ] clusapi_DesiredAccessMask dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_OpenNetworkEx( + [ in, string ] [charset(UTF16)] uint16 *lpszNetworkName, + [ in ] clusapi_DesiredAccessMask dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HNETWORK_RPC *hNetwork + ); +#endif + /*****************/ + /* Function 0x7A */ +#if 0 + HNETINTERFACE_RPC + clusapi_OpenNetInterfaceEx( + [ in, string ] [charset(UTF16)] uint16 *lpszNetInterfaceName, + [ in ] clusapi_DesiredAccessMask dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_OpenNetInterfaceEx( + [ in, string ] [charset(UTF16)] uint16 *lpszNetInterfaceName, + [ in ] clusapi_DesiredAccessMask dwDesiredAccess, + [ out ] uint32 *lpdwGrantedAccess, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HNETINTERFACE_RPC *hNetInterface + ); +#endif + /*****************/ + /* Function 0x7B */ + + WERROR + clusapi_ChangeCsvState( + [ in ] HRES_RPC hResource, + [ in ] uint32 dwState, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x7C */ + + WERROR + clusapi_CreateNodeEnumEx( + [in] HNODE_RPC hNode, + [in] uint32 dwType, + [in] uint32 dwOptions, + [out] ENUM_LIST **ReturnIdEnum, + [out] ENUM_LIST **ReturnNameEnum, + [out] WERROR* rpc_status + ); + + /*****************/ + /* Function 0x7D */ + + WERROR + clusapi_CreateEnumEx( + [in] HCLUSTER_RPC hCluster, + [in] ClusterEnumType dwType, + [in] uint32 dwOptions, + [out] ENUM_LIST **ReturnIdEnum, + [out] ENUM_LIST **ReturnNameEnum, + [out] WERROR* rpc_status + ); + + /*****************/ + /* Function 0x7E */ + + WERROR + clusapi_PauseNodeEx( + [ in ] HNODE_RPC hNode, + [ in ] boolean8 bDrainNode, + [ in ] uint32 dwPauseFlags, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x7F */ + + WERROR + clusapi_PauseNodeWithDrainTarget( + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwPauseFlags, + [ in ] HNODE_RPC hNodeDrainTarget, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x80 */ + + WERROR + clusapi_ResumeNodeEx( + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwResumeFailbackType, + [ in ] uint32 dwResumeFlagsReserved, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x81 */ +#if 0 + HGROUP_RPC + clusapi_CreateGroupEx( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupName, + [ in, unique ] CLUSTER_CREATE_GROUP_INFO_RPC *pGroupInfo, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_CreateGroupEx( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupName, + [ in, unique ] CLUSTER_CREATE_GROUP_INFO_RPC *pGroupInfo, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HGROUP_RPC *hGroup + ); +#endif + /*****************/ + /* Function 0x82 */ + + WERROR + clusapi_OnlineGroupEx( + [ in ] HGROUP_RPC hGroup, + [ in ] uint32 dwOnlineFlags, + [ in, size_is(cbInBufferSize) ] uint8* lpInBuffer, + [ in ] uint32 cbInBufferSize, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x83 */ + + WERROR + clusapi_OfflineGroupEx( + [ in ] HGROUP_RPC hGroup, + [ in ] uint32 dwOfflineFlags, + [ in, size_is(cbInBufferSize) ] uint8* lpInBuffer, + [ in ] uint32 cbInBufferSize, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x84 */ + + WERROR + clusapi_MoveGroupEx( + [ in ] HGROUP_RPC hGroup, + [ in ] uint32 dwMoveFlags, + [ in, size_is(cbInBufferSize) ] uint8* lpInBuffer, + [ in ] uint32 cbInBufferSize, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x85 */ + + WERROR + clusapi_MoveGroupToNodeEx( + [ in ] HGROUP_RPC hGroup, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwMoveFlags, + [ in, size_is(cbInBufferSize) ] uint8* lpInBuffer, + [ in ] uint32 cbInBufferSize, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x86 */ + + WERROR + clusapi_CancelClusterGroupOperation( + [ in ] HGROUP_RPC hGroup, + [ in ] uint32 dwCancelFlags, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x87 */ + + WERROR + clusapi_OnlineResourceEx( + [ in ] HRES_RPC hResource, + [ in ] uint32 dwOnlineFlags, + [ in, size_is(cbInBufferSize) ] uint8* lpInBuffer, + [ in ] uint32 cbInBufferSize, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x88 */ + + WERROR + clusapi_OfflineResourceEx( + [ in ] HRES_RPC hResource, + [ in ] uint32 dwOfflineFlags, + [ in, size_is(cbInBufferSize) ] uint8* lpInBuffer, + [ in ] uint32 cbInBufferSize, + [ out ] WERROR *rpc_status + ); + +#define HGENERIC_RPC policy_handle +#if 0 + typedef [context_handle] void *HGENERIC_RPC; +#endif + + typedef struct { + uint32 dwObjectType; /* really of type CLUSTER_OBJECT_TYPE_RPC */ + hyper FilterFlags; + } NOTIFY_FILTER_AND_TYPE_RPC; + + typedef struct { + NOTIFY_FILTER_AND_TYPE_RPC FilterAndType; + [ size_is(dwBufferSize ) ] uint8* buffer; + uint32 dwBufferSize; + [string] [charset(UTF16)] uint16 *ObjectId; + [string] [charset(UTF16)] uint16 *ParentId; + [string] [charset(UTF16)] uint16 *Name; + [string] [charset(UTF16)] uint16 *Type; + } NOTIFICATION_DATA_RPC; + + typedef struct { + uint32 *dwNotifyKey; + NOTIFICATION_DATA_RPC NotificationData; + } NOTIFICATION_RPC; + + /*****************/ + /* Function 0x89 */ + + /* + * Notify interface V2 functions + */ +#if 0 + HNOTIFY_RPC + clusapi_CreateNotifyV2( + [ out ] WERROR *rpc_error, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_CreateNotifyV2( + [ out ] WERROR *rpc_error, + [ out ] WERROR *rpc_status, + [ out ] HNOTIFY_RPC *hNotify + ); + +#endif + /*****************/ + /* Function 0x8A */ + + WERROR + clusapi_AddNotifyV2( + [ in ] HNOTIFY_RPC hNotify, + [ in ] HGENERIC_RPC hObject, + [ in ] NOTIFY_FILTER_AND_TYPE_RPC filter, + [ in ] uint32 dwNotifyKey, + [ in ] uint32 dwVersion, + [ in ] boolean8 isTargetedAtObject, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x8B */ + + WERROR + clusapi_GetNotifyV2( + [ in ] HNOTIFY_RPC hNotify, + [ out, size_is(,*dwNumNotifications) ] NOTIFICATION_RPC **Notifications, + [ out ] uint32 *dwNumNotifications + ); + + /*****************/ + /* Function 0x8C */ + + WERROR + clusapi_QueryAllValues( + [ in ] HKEY_RPC hKey, + [ out ] uint32 *pcbData, + [ out, size_is(1, *pcbData) ] uint8 ** ppData, + [ out ] WERROR *rpc_status + ); + + typedef struct { + uint32 DiskIdType; + uint8 DiskIdBlob[16]; + } CLUSTER_DISKID; + + /*****************/ + /* Function 0x8D */ + + WERROR + clusapi_StmFindDisk( + [ in ] HCLUSTER_RPC hCluster, + [ in ] uint32 dwFlags, + [ in, out, unique ] CLUSTER_DISKID *pDiskId, + [ in, size_is(uniqueIdSize), unique ] uint8 *pUniqueId, + [ in ] uint32 uniqueIdSize, + [ out, ref, string ] [charset(UTF16)] uint16 **ppszDeviceName, + [ out ] WERROR *rpc_status + ); + + typedef struct{ + [string] [charset(UTF16)] uint16 *pszNodeName; + HRESULT ResultCode; + uint32 ResultSize; + [unique, size_is(ResultSize)] uint8 *pResultData; + } CLUSTER_MRR_NODE_RESPONSE; + + typedef struct { + uint32 NodeCount; + [size_is(NodeCount)] CLUSTER_MRR_NODE_RESPONSE *pNodes; + } CLUSTER_MRR_RESPONSE; + + /*****************/ + /* Function 0x8E */ + + WERROR + clusapi_ClusterMrr( + [ in ] HCLUSTER_RPC hCluster, + [ in ] boolean8 fExcludeSelf, + [ in ] hyper nodeSet, + [ in ] uint32 dwTimeout, + [ in ] uint32 dwComponent, + [ in ] uint32 dwControlCode, + [ in ] uint32 inSize, + [ in, unique, size_is(inSize) ] uint8 *pInData, + [ out, ref, size_is(1, 1) ] CLUSTER_MRR_RESPONSE **ppInfo, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x8F */ + + WERROR + clusapi_CreateGroupEnum( + [ in ] HCLUSTER_RPC hCluster, + [ in, unique, size_is(cbProperties)] uint8* pProperties, + [ in ] uint32 cbProperties, + [ in, unique, size_is(cbRoProperties)] uint8* pRoProperties, + [ in ] uint32 cbRoProperties, + [ out ] GROUP_ENUM_LIST **ppResultList, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x90 */ + + WERROR + clusapi_CreateResourceEnum( + [ in ] HCLUSTER_RPC hCluster, + [ in, unique, size_is(cbProperties)] uint8* pProperties, + [ in ] uint32 cbProperties, + [ in, unique, size_is(cbRoProperties)] uint8* pRoProperties, + [ in ] uint32 cbRoProperties, + [ out ] RESOURCE_ENUM_LIST **ppResultList, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x91 */ + + WERROR + clusapi_ExecuteReadBatch( + [ in ] HKEY_RPC hKey, + [ in ] uint32 cbInData, + [ in, size_is(cbInData)] uint8 *lpInData, + [ out ] uint32 *cbOutData, + [ out, size_is(,*cbOutData) ] uint8 ** lpOutData, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x92 */ + + WERROR + clusapi_RestartResource( + [ in ] HRES_RPC hResource, + [ in ] uint32 dwFlags, + [ out ] WERROR *rpc_status + ); + + typedef struct { + uint32 dwNotifyKey; + uint32 dwFilter; + [string] [charset(UTF16)] uint16 *Name; + } NOTIFICATION_DATA_ASYNC_RPC; + + /*****************/ + /* Function 0x93 */ + + WERROR + clusapi_GetNotifyAsync( + [ in ] HNOTIFY_RPC hNotify, + [ out, size_is(,*dwNumNotifications) ] NOTIFICATION_DATA_ASYNC_RPC **Notifications, + [ out ] uint32 *dwNumNotifications + ); + + typedef enum { + DiskIdSignature = 0x00000001, + DiskIdGuid = 0x00000002, + DiskIdUnKnown = 0x00001388 + } CLUSDSK_DISKID_ENUM; + +#if 0 + typedef struct { + CLUSDSK_DISKID_ENUM DiskIdType; + [switch_is(DiskIdType)] union { + [case(DiskIdSignature)] uint32 DiskSignature; + [case(DiskIdGuid)] GUID DiskGuid; + }; + } CLUSDSK_DISKID; +#endif + typedef enum { + CLUSPROP_TYPE_ENDMARK = 0x0000, + CLUSPROP_TYPE_LIST_VALUE = 0x0001, + CLUSPROP_TYPE_RESCLASS = 0x0002, + CLUSPROP_TYPE_NAME = 0x0004, + CLUSPROP_TYPE_SIGNATURE = 0x0005, + CLUSPROP_TYPE_SCSIADDRESS = 0x0006, + CLUSPROP_TYPE_DISK_NUMBER = 0x0007, + CLUSPROP_TYPE_PARTITION_INFO = 0x0008, + CLUSPROP_TYPE_DISK_SERIALNUMBER = 0x000a, + CLUSPROP_TYPE_DISK_GUID = 0x000b, + CLUSPROP_TYPE_DISK_SIZE = 0x000c, + CLUSPROP_TYPE_PARTITION_INFO_EX = 0x000d + } CLUSTER_PROPERTY_TYPE; + + typedef enum { + CLUSPROP_FORMAT_UNKNOWN = 0x0000, + CLUSPROP_FORMAT_BINARY = 0x0001, + CLUSPROP_FORMAT_DWORD = 0x0002, + CLUSPROP_FORMAT_SZ = 0x0003, + CLUSPROP_FORMAT_EXPAND_SZ = 0x0004, + CLUSPROP_FORMAT_MULTI_SZ = 0x0005, + CLUSPROP_FORMAT_ULARGE_INTEGER = 0x0006, + CLUSPROP_FORMAT_LONG = 0x0007, + CLUSPROP_FORMAT_EXPANDED_SZ = 0x0008, + CLUSPROP_FORMAT_SECURITY_DESCRIPTOR = 0x0009, + CLUSPROP_FORMAT_LARGE_INTEGER = 0x000a, + CLUSPROP_FORMAT_WORD = 0x000b, + CLUSPROP_FORMAT_FILETIME = 0x000c + } CLUSTER_PROPERTY_FORMAT; + + typedef enum { + CLUS_CHAR_UNKNOWN = 0x00000000, + CLUS_CHAR_QUORUM = 0x00000001, + CLUS_CHAR_DELETE_REQUIRES_ALL_NODES = 0x00000002, + CLUS_CHAR_LOCAL_QUORUM = 0x00000004, + CLUS_CHAR_BROADCAST_DELETE = 0x00000020, + CLUS_CHAR_SINGLE_CLUSTER_INSTANCE = 0x00000040, + CLUS_CHAR_SINGLE_GROUP_INSTANCE = 0x00000080, + CLUS_CHAR_COEXIST_IN_SHARED_VOLUME_GROUP = 0x00000100, + CLUS_CHAR_RESERVED1 = 0x00000200, + CLUS_CHAR_MONITOR_DETACH = 0x00000400, + CLUS_CHAR_RESERVED2 = 0x00000800, + CLUS_CHAR_RESERVED3 = 0x00001000, + CLUS_CHAR_RESERVED4 = 0x00002000 + } CLUS_CHARACTERISTICS; + + typedef enum { + CLUS_FLAG_CORE = 0x00000001 + } CLUS_FLAGS; + + typedef enum { + MaintenanceModeTypeDisableIsAliveCheck = 1, + MaintenanceModeTypeOfflineResource = 2, + MaintenanceModeTypeUnclusterResource = 3 + } MAINTENANCE_MODE_TYPE; + + typedef enum { + CLUSTER_CHANGE_NODE_STATE = 0x00000001, + CLUSTER_CHANGE_NODE_DELETED = 0x00000002, + CLUSTER_CHANGE_NODE_ADDED = 0x00000004, + CLUSTER_CHANGE_NODE_PROPERTY = 0x00000008, + CLUSTER_CHANGE_REGISTRY_NAME = 0x00000010, + CLUSTER_CHANGE_REGISTRY_ATTRIBUTES = 0x00000020, + CLUSTER_CHANGE_REGISTRY_VALUE = 0x00000040, + CLUSTER_CHANGE_REGISTRY_SUBTREE = 0x00000080, + CLUSTER_CHANGE_RESOURCE_STATE = 0x00000100, + CLUSTER_CHANGE_RESOURCE_DELETED = 0x00000200, + CLUSTER_CHANGE_RESOURCE_ADDED = 0x00000400, + CLUSTER_CHANGE_RESOURCE_PROPERTY = 0x00000800, + CLUSTER_CHANGE_GROUP_STATE = 0x00001000, + CLUSTER_CHANGE_GROUP_DELETED = 0x00002000, + CLUSTER_CHANGE_GROUP_ADDED = 0x00004000, + CLUSTER_CHANGE_GROUP_PROPERTY = 0x00008000, + CLUSTER_CHANGE_RESOURCE_TYPE_DELETED = 0x00010000, + CLUSTER_CHANGE_RESOURCE_TYPE_ADDED = 0x00020000, + CLUSTER_CHANGE_RESOURCE_TYPE_PROPERTY = 0x00040000, + CLUSTER_CHANGE_CLUSTER_RECONNECT = 0x00080000, + CLUSTER_CHANGE_NETWORK_STATE = 0x00100000, + CLUSTER_CHANGE_NETWORK_DELETED = 0x00200000, + CLUSTER_CHANGE_NETWORK_ADDED = 0x00400000, + CLUSTER_CHANGE_NETWORK_PROPERTY = 0x00800000, + CLUSTER_CHANGE_NETINTERFACE_STATE = 0x01000000, + CLUSTER_CHANGE_NETINTERFACE_DELETED = 0x02000000, + CLUSTER_CHANGE_NETINTERFACE_ADDED = 0x04000000, + CLUSTER_CHANGE_NETINTERFACE_PROPERTY = 0x08000000, + CLUSTER_CHANGE_QUORUM_STATE = 0x10000000, + CLUSTER_CHANGE_CLUSTER_STATE = 0x20000000, + CLUSTER_CHANGE_CLUSTER_PROPERTY = 0x40000000, + CLUSTER_CHANGE_HANDLE_CLOSE = 0x80000000 + } CLUSTER_CHANGE; + + typedef enum { + CLUSREG_SET_VALUE = 1, + CLUSREG_CREATE_KEY = 2, + CLUSREG_DELETE_KEY = 3, + CLUSREG_DELETE_VALUE = 4, + CLUSREG_VALUE_DELETED = 6, + CLUSREG_READ_KEY = 7, + CLUSREG_READ_VALUE = 8, + CLUSREG_READ_ERROR = 9 + } CLUSTER_REG_BATCH_COMMAND; +#if 0 + typedef enum { + IDL_CLUSTER_SET_PASSWORD_IGNORE_DOWN_NODES = 1 + } IDL_CLUSTER_SET_PASSWORD_FLAGS; +#endif + typedef enum { + CLUSTER_QUORUM_MAINTAINED = 0, + CLUSTER_QUORUM_LOST = 1 + } CLUSTER_QUORUM_VALUE; + + typedef enum { + CLUSTER_OBJECT_TYPE_CLUSTER = 0x00000001, + CLUSTER_OBJECT_TYPE_GROUP = 0x00000002, + CLUSTER_OBJECT_TYPE_RESOURCE = 0x00000003, + CLUSTER_OBJECT_TYPE_RESOURCE_TYPE = 0x00000004, + CLUSTER_OBJECT_TYPE_NETWORK_INTERFACE = 0x00000005, + CLUSTER_OBJECT_TYPE_NETWORK = 0x00000006, + CLUSTER_OBJECT_TYPE_NODE = 0x00000007, + CLUSTER_OBJECT_TYPE_REGISTRY = 0x00000008, + CLUSTER_OBJECT_TYPE_QUORUM = 0x00000009, + CLUSTER_OBJECT_TYPE_SHARED_VOLUME = 0x0000000a + } CLUSTER_OBJECT_TYPE; + + typedef enum { + CLUSTER_CHANGE_CLUSTER_RECONNECT_V2 = 0x00000001, + CLUSTER_CHANGE_CLUSTER_STATE_V2 = 0x00000002, + CLUSTER_CHANGE_CLUSTER_GROUP_ADDED_V2 = 0x00000004, + CLUSTER_CHANGE_CLUSTER_HANDLE_CLOSE_V2 = 0x00000008, + CLUSTER_CHANGE_CLUSTER_NETWORK_ADDED_V2 = 0x00000010, + CLUSTER_CHANGE_CLUSTER_NODE_ADDED_V2 = 0x00000020, + CLUSTER_CHANGE_CLUSTER_RESOURCE_TYPE_ADDED_V2 = 0x00000040, + CLUSTER_CHANGE_CLUSTER_COMMON_PROPERTY_V2 = 0x00000080, + CLUSTER_CHANGE_CLUSTER_PRIVATE_PROPERTY_V2 = 0x00000100, + CLUSTER_CHANGE_CLUSTER_LOST_NOTIFICATIONS_V2 = 0x00000200, + CLUSTER_CHANGE_CLUSTER_RENAME_V2 = 0x00000400 + } CLUSTER_CHANGE_CLUSTER_V2; + + typedef enum { + CLUSTER_CHANGE_GROUP_DELETED_V2 = 0x00000001, + CLUSTER_CHANGE_GROUP_COMMON_PROPERTY_V2 = 0x00000002, + CLUSTER_CHANGE_GROUP_PRIVATE_PROPERTY_V2 = 0x00000004, + CLUSTER_CHANGE_GROUP_STATE_V2 = 0x00000008, + CLUSTER_CHANGE_GROUP_OWNER_NODE_V2 = 0x00000010, + CLUSTER_CHANGE_GROUP_PREFERRED_OWNERS_V2 = 0x00000020, + CLUSTER_CHANGE_GROUP_RESOURCE_ADDED_V2 = 0x00000040, + CLUSTER_CHANGE_GROUP_RESOURCE_GAINED_V2 = 0x00000080, + CLUSTER_CHANGE_GROUP_RESOURCE_LOST_V2 = 0x00000100, + CLUSTER_CHANGE_GROUP_HANDLE_CLOSE_V2 = 0x00000200 + } CLUSTER_CHANGE_GROUP_V2; + + typedef enum { + CLUSTER_CHANGE_RESOURCE_COMMON_PROPERTY_V2 = 0x00000001, + CLUSTER_CHANGE_RESOURCE_PRIVATE_PROPERTY_V2 = 0x00000002, + CLUSTER_CHANGE_RESOURCE_STATE_V2 = 0x00000004, + CLUSTER_CHANGE_RESOURCE_OWNER_GROUP_V2 = 0x00000008, + CLUSTER_CHANGE_RESOURCE_DEPENDENCIES_V2 = 0x00000010, + CLUSTER_CHANGE_RESOURCE_DEPENDENTS_V2 = 0x00000020, + CLUSTER_CHANGE_RESOURCE_POSSIBLE_OWNERS_V2 = 0x00000040, + CLUSTER_CHANGE_RESOURCE_DELETED_V2 = 0x00000080, + CLUSTER_CHANGE_RESOURCE_DLL_UPGRADED_V2 = 0x00000100, + CLUSTER_CHANGE_RESOURCE_HANDLE_CLOSE_V2 = 0x00000200 + } CLUSTER_CHANGE_RESOURCE_V2; + + typedef enum { + CLUSTER_CHANGE_RESOURCE_TYPE_DELETED_V2 = 0x00000001, + CLUSTER_CHANGE_RESOURCE_TYPE_COMMON_PROPERTY_V2 = 0x00000002, + CLUSTER_CHANGE_RESOURCE_TYPE_PRIVATE_PROPERTY_V2 = 0x00000004, + CLUSTER_CHANGE_RESOURCE_TYPE_POSSIBLE_OWNERS_V2 = 0x00000008, + CLUSTER_CHANGE_RESOURCE_TYPE_DLL_UPGRADED_V2 = 0x00000010 + } CHANGE_RESOURCE_TYPE_V2; + + typedef enum { + CLUSTER_CHANGE_NETINTERFACE_DELETED_V2 = 0x00000001, + CLUSTER_CHANGE_NETINTERFACE_COMMON_PROPERTY_V2 = 0x00000002, + CLUSTER_CHANGE_NETINTERFACE_PRIVATE_PROPERTY_V2 = 0x00000004, + CLUSTER_CHANGE_NETINTERFACE_STATE_V2 = 0x00000008, + CLUSTER_CHANGE_NETINTERFACE_HANDLE_CLOSE_V2 = 0x00000010 + } CLUSTER_CHANGE_NETINTERFACE_V2; + + typedef enum { + CLUSTER_CHANGE_NETWORK_DELETED_V2 = 0x00000001, + CLUSTER_CHANGE_NETWORK_COMMON_PROPERTY_V2 = 0x00000002, + CLUSTER_CHANGE_NETWORK_PRIVATE_PROPERTY_V2 = 0x00000004, + CLUSTER_CHANGE_NETWORK_STATE_V2 = 0x00000008, + CLUSTER_CHANGE_NETWORK_HANDLE_CLOSE_V2 = 0x00000010 + } CLUSTER_CHANGE_NETWORK_V2; + + typedef enum { + CLUSTER_CHANGE_NODE_NETINTERFACE_ADDED_V2 = 0x00000001, + CLUSTER_CHANGE_NODE_DELETED_V2 = 0x00000002, + CLUSTER_CHANGE_NODE_COMMON_PROPERTY_V2 = 0x00000004, + CLUSTER_CHANGE_NODE_PRIVATE_PROPERTY_V2 = 0x00000008, + CLUSTER_CHANGE_NODE_STATE_V2 = 0x00000010, + CLUSTER_CHANGE_NODE_GROUP_GAINED_V2 = 0x00000020, + CLUSTER_CHANGE_NODE_GROUP_LOST_V2 = 0x00000040, + CLUSTER_CHANGE_NODE_HANDLE_CLOSE_V2 = 0x00000080 + } CLUSTER_CHANGE_NODE_V2; + + typedef enum { + CLUSTER_CHANGE_REGISTRY_ATTRIBUTES_V2 = 0x00000001, + CLUSTER_CHANGE_REGISTRY_NAME_V2 = 0x00000002, + CLUSTER_CHANGE_REGISTRY_SUBTREE_V2 = 0x00000004, + CLUSTER_CHANGE_REGISTRY_VALUE_V2 = 0x00000008, + CLUSTER_CHANGE_REGISTRY_HANDLE_CLOSE_V2 = 0x00000010 + } CLUSTER_CHANGE_REGISTRY_V2; + + typedef enum { + CLUSTER_CHANGE_QUORUM_STATE_V2 = 0x00000001 + } CLUSTER_CHANGE_QUORUM_V2; + + typedef enum { + CLUSTER_CHANGE_SHARED_VOLUME_STATE_V2 = 0x00000001 + } CLUSTER_CHANGE_SHARED_VOLUME_V2; +#if 0 + typedef enum { + DiskIdSignature = 0x00000001, + DiskIdGuid = 0x00000002, + DiskIdUnKnown = 0x00001388 + } CLUSDSK_DISKID_ENUM; +#endif + + /*****************/ + /* Function 0x94 */ + WERROR + Opnum148NotUsedOnWire(void); + + /*****************/ + /* Function 0x95 */ + WERROR + Opnum149otUsedOnWire(void); + + /*****************/ + /* Function 0x96 */ + WERROR + Opnum150NotUsedOnWire(void); + + /*****************/ + /* Function 0x97 */ + WERROR + Opnum151NotUsedOnWire(void); + + /*****************/ + /* Function 0x98 */ + WERROR + Opnum152NotUsedOnWire(void); + + /*****************/ + /* Function 0x99 */ + WERROR + Opnum153NotUsedOnWire(void); + + /*****************/ + /* Function 0x9A */ + WERROR + Opnum154NotUsedOnWire(void); + + /*****************/ + /* Function 0x9B */ + WERROR + clusapi_AddNotifyResourceTypeV2( + [ in ] HNOTIFY_RPC hNotify, + [ in ] hyper filter, + [ in ] uint32 dwNotifyKey, + [ in, string ] [charset(UTF16)] uint16 *resTypeName, + [ in ] uint32 dwVersion, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x9C */ + WERROR + Opnum156NotUsedOnWire(void); + + /*****************/ + /* Function 0x9D */ + WERROR + clusapi_ExecuteReadBatchEx( + [in] HKEY_RPC hKey, + [in] uint32 cbInData, + [in, size_is(cbInData)] uint8* lpInData, + [in] uint32 flags, + [out] uint32* cbOutData, + [out, size_is(,*cbOutData)] uint8** lpOutData, + [out] WERROR *rpc_status + ); + + /*****************/ + /* Function 0x9E */ + WERROR + Opnum158NotUsedOnWire(void); + + /*****************/ + /* Function 0x9F */ + WERROR + Opnum159NotUsedOnWire(void); + + /*****************/ + /* Function 0xA0 */ + WERROR + Opnum160NotUsedOnWire(void); + + /*****************/ + /* Function 0xA1 */ + WERROR + Opnum161NotUsedOnWire(void); + + /*****************/ + /* Function 0xA2 */ + WERROR + Opnum162NotUsedOnWire(void); + + /*****************/ + /* Function 0xA3 */ + +#define HGROUPSET_RPC policy_handle +#if 0 + typedef [context_handle] void *HGROUPSET_RPC; +#endif +#if 0 + HGROUPSET_RPC + clusapi_CreateGroupSet ( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupSetName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_CreateGroupSet ( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupSetName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HGROUPSET_RPC *hGroupSet + ); +#endif + + /*****************/ + /* Function 0xA4 */ +#if 0 + HGROUPSET_RPC + clusapi_OpenGroupSet( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupSetName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status + ); +#else + void + clusapi_OpenGroupSet( + [ in, string ] [charset(UTF16)] uint16 *lpszGroupSetName, + [ out ] WERROR *Status, + [ out ] WERROR *rpc_status, + [ out ] HGROUPSET_RPC *hGroupSet + ); +#endif + + /*****************/ + /* Function 0xA5 */ + WERROR + clusapi_CloseGroupSet( + [ in, out ] HGROUPSET_RPC *GroupSet + ); + + /*****************/ + /* Function 0xA6 */ + WERROR + clusapi_DeleteGroupSet( + [ in ] HGROUPSET_RPC GroupSet, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0xA7 */ + WERROR + clusapi_AddGroupToGroupSet( + [ in ] HGROUPSET_RPC GroupSet, + [ in ] HGROUP_RPC Group, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0xA8 */ + WERROR + clusapi_RemoveGroupFromGroupSet( + [ in ] HGROUP_RPC Group, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0xA9 */ + WERROR + clusapi_MoveGroupToGroupSet( + [ in ] HGROUPSET_RPC GroupSet, + [ in ] HGROUP_RPC Group, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0xAA */ + WERROR + Opnum170NotUsedOnWire(void); + + /*****************/ + /* Function 0xAB */ + WERROR + clusapi_AddGroupSetDependency( + [ in ] HGROUPSET_RPC DependentGroupSet, + [ in ] HGROUPSET_RPC ProviderGroupSet, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0xAC */ + WERROR + clusapi_AddGroupToGroupSetDependency( + [ in ] HGROUP_RPC DependentGroup, + [ in ] HGROUPSET_RPC ProviderGroupSet, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0xAD */ + WERROR + clusapi_NodeGroupSetControl( + [ in ] HGROUPSET_RPC hGroupSet, + [ in ] HNODE_RPC hNode, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in, range(0, MAX_CLUSTER_CONTROL_CODE_BUFFER_SIZE)] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0xAE */ + WERROR + clusapi_GroupSetControl( + [ in ] HGROUPSET_RPC hGroupSet, + [ in ] uint32 dwControlCode, + [ in, unique, size_is(nInBufferSize) ] uint8 *lpInBuffer, + [ in ] uint32 nInBufferSize, + [ out, size_is(nOutBufferSize), length_is (*lpBytesReturned)] uint8 *lpOutBuffer, + [ in, range(0, 0x7FFFFFFF)] uint32 nOutBufferSize, + [ out ] uint32 *lpBytesReturned, + [ out ] uint32 *lpcbRequired, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0xAF */ + WERROR + clusapi_SetGroupDependencyExpression( + [ in ] HGROUP_RPC hGroup, + [ in, string ] [charset(UTF16)] uint16 *lpszDependencyExpression, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0xB0 */ + WERROR + clusapi_RemoveClusterGroupDependency( + [ in ] HGROUP_RPC hGroup, + [ in ] HGROUP_RPC hDependsOn, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0xB1 */ + WERROR + clusapi_SetGroupSetDependencyExpression( + [ in ] HGROUPSET_RPC hGroupSet, + [ in, string ] [charset(UTF16)] uint16 *lpszDependencyExpression, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0xB2 */ + WERROR + clusapi_RemoveGroupSetDependency( + [ in ] HGROUPSET_RPC hGroupSet, + [ in ] HGROUPSET_RPC hDependsOn, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0xB3 */ + WERROR + clusapi_RemoveClusterGroupToGroupSetDependency( + [ in ] HGROUP_RPC hGroup, + [ in ] HGROUPSET_RPC hDependsOn, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0xB4 */ + WERROR + clusapi_CreateGroupSetEnum( + [ in ] HCLUSTER_RPC hCluster, + [ out ] ENUM_LIST **ReturnEnum, + [ out ] WERROR * rpc_status + ); + + /*****************/ + /* Function 0xB5 */ + WERROR + clusapi_CreateNetInterfaceEnum( + [in] HCLUSTER_RPC hCluster, + [in, string] [charset(UTF16)] uint16 *lpszNodeName, + [in, string] [charset(UTF16)] uint16 *lpszNetworkName, + [out] ENUM_LIST **ReturnEnum, + [out] WERROR * rpc_status + ); + + /*****************/ + /* Function 0xB6 */ + WERROR + clusapi_ChangeCsvStateEx( + [ in ] HRES_RPC hResource, + [ in ] uint32 dwState, + [ in, string ] [charset(UTF16)] uint16 *lpszVolumeName, + [ out ] WERROR *rpc_status + ); + + /*****************/ + /* Function 0xB7 */ + WERROR + clusapi_AddGroupToGroupSetEx( + [ in ] HGROUPSET_RPC GroupSet, + [ in ] HGROUP_RPC Group, + [ in ] uint32 FaultDomain, + [ in ] uint32 UpdateDomain, + [ in ] boolean8 UseDomains, + [ in ] uint32 *Reserved, + [ out ] WERROR *rpc_status + ); +} diff --git a/epan/dissectors/pidl/dfs/dfs.cnf b/epan/dissectors/pidl/dfs/dfs.cnf new file mode 100644 index 00000000..4cb06365 --- /dev/null +++ b/epan/dissectors/pidl/dfs/dfs.cnf @@ -0,0 +1,3 @@ +# Conformance file for DFS + + diff --git a/epan/dissectors/pidl/dfs/dfs.idl b/epan/dissectors/pidl/dfs/dfs.idl new file mode 100644 index 00000000..2b519b15 --- /dev/null +++ b/epan/dissectors/pidl/dfs/dfs.idl @@ -0,0 +1,394 @@ +/* + dfs interface definition +*/ + +[ uuid("4fc742e0-4a10-11cf-8273-00aa004ae673"), + version(3.0), + pointer_default(unique), + helpstring("Settings for Microsoft Distributed File System") +] interface netdfs +{ + /******************/ + /* Function: 0x00 */ + typedef [v1_enum] enum { + DFS_MANAGER_VERSION_NT4 = 1, + DFS_MANAGER_VERSION_W2K = 2, + DFS_MANAGER_VERSION_W2K3 = 4 + } dfs_ManagerVersion; + + [public] void dfs_GetManagerVersion( + [out] dfs_ManagerVersion *version + ); + + + /******************/ + /* Function: 0x01 */ + WERROR dfs_Add ( + [in] [string,charset(UTF16)] uint16 *path, + [in] [string,charset(UTF16)] uint16 *server, + [in,unique] [string,charset(UTF16)] uint16 *share, + [in,unique] [string,charset(UTF16)] uint16 *comment, + [in] uint32 flags + ); + + /******************/ + /* Function: 0x02 */ + WERROR dfs_Remove ( + [in] [string,charset(UTF16)] uint16 *dfs_entry_path, + [in,unique] [string,charset(UTF16)] uint16 *servername, + [in,unique] [string,charset(UTF16)] uint16 *sharename + ); + + /******************/ + /* Function: 0x03 */ + + typedef struct { + } dfs_Info0; + + typedef struct { + [string,charset(UTF16)] uint16 *path; + } dfs_Info1; + + /* first 4 bits unverified yet */ + typedef [public,bitmap32bit] bitmap { + DFS_VOLUME_STATE_OK = 0x1, + DFS_VOLUME_STATE_INCONSISTENT = 0x2, + DFS_VOLUME_STATE_OFFLINE = 0x4, + DFS_VOLUME_STATE_ONLINE = 0x8, + DFS_VOLUME_STATE_STANDALONE = DFS_VOLUME_FLAVOR_STANDALONE, + DFS_VOLUME_STATE_AD_BLOB = DFS_VOLUME_FLAVOR_AD_BLOB + } dfs_VolumeState; + + typedef struct { + [string,charset(UTF16)] uint16 *path; + [string,charset(UTF16)] uint16 *comment; + dfs_VolumeState state; + uint32 num_stores; + } dfs_Info2; + + const int DFS_STORAGE_STATES = 0xf; + + /* yes, this is a bitmap */ + typedef [public,bitmap32bit] bitmap { + DFS_STORAGE_STATE_OFFLINE = 1, + DFS_STORAGE_STATE_ONLINE = 2, + DFS_STORAGE_STATE_ACTIVE = 4 + } dfs_StorageState; + + typedef struct { + dfs_StorageState state; + [string,charset(UTF16)] uint16 *server; + [string,charset(UTF16)] uint16 *share; + } dfs_StorageInfo; + + typedef struct { + [string,charset(UTF16)] uint16 *path; + [string,charset(UTF16)] uint16 *comment; + dfs_VolumeState state; + uint32 num_stores; + [size_is(num_stores)] dfs_StorageInfo *stores; + } dfs_Info3; + + typedef struct { + [string,charset(UTF16)] uint16 *path; + [string,charset(UTF16)] uint16 *comment; + dfs_VolumeState state; + uint32 timeout; + GUID guid; + uint32 num_stores; + [size_is(num_stores)] dfs_StorageInfo *stores; + } dfs_Info4; + + /* verified with dfsutil */ + typedef [public,bitmap32bit] bitmap { + DFS_PROPERTY_FLAG_INSITE_REFERRALS = 0x01, + DFS_PROPERTY_FLAG_ROOT_SCALABILITY = 0x02, + DFS_PROPERTY_FLAG_SITE_COSTING = 0x04, + DFS_PROPERTY_FLAG_TARGET_FAILBACK = 0x08, + DFS_PROPERTY_FLAG_CLUSTER_ENABLED = 0x10 /* untested */ + } dfs_PropertyFlags; + + typedef struct { + [string,charset(UTF16)] uint16 *path; + [string,charset(UTF16)] uint16 *comment; + dfs_VolumeState state; + uint32 timeout; + GUID guid; + dfs_PropertyFlags flags; + uint32 pktsize; + uint32 num_stores; + } dfs_Info5; + + typedef [v1_enum] enum { + DFS_INVALID_PRIORITY_CLASS = -1, + DFS_SITE_COST_NORMAL_PRIORITY_CLASS = 0, + DFS_GLOBAL_HIGH_PRIORITY_CLASS = 1, + DFS_SITE_COST_HIGH_PRIORITY_CLASS = 2, + DFS_SITE_COST_LOW_PRIORITY_CLASS = 3, + DFS_GLOBAL_LOW_PRIORITY_CLASS = 4 + } dfs_Target_PriorityClass; + + typedef struct { + dfs_Target_PriorityClass target_priority_class; + uint16 target_priority_rank; + uint16 reserved; + } dfs_Target_Priority; + + typedef struct { + dfs_StorageInfo info; + dfs_Target_Priority target_priority; + } dfs_StorageInfo2; + + typedef struct { + [string,charset(UTF16)] uint16 *entry_path; + [string,charset(UTF16)] uint16 *comment; + dfs_VolumeState state; + uint32 timeout; + GUID guid; + dfs_PropertyFlags flags; + uint32 pktsize; + uint16 num_stores; + [size_is(num_stores)] dfs_StorageInfo2 *stores; + } dfs_Info6; + + typedef struct { + GUID generation_guid; + } dfs_Info7; + + typedef struct { + [string,charset(UTF16)] uint16 *comment; + } dfs_Info100; + + typedef struct { + dfs_StorageState state; + } dfs_Info101; + + typedef struct { + uint32 timeout; + } dfs_Info102; + + typedef struct { + dfs_PropertyFlags flags; + } dfs_Info103; + + typedef struct { + dfs_Target_Priority priority; + } dfs_Info104; + + typedef struct { + [string,charset(UTF16)] uint16 *comment; + dfs_VolumeState state; + uint32 timeout; + uint32 property_flag_mask; + uint32 property_flags; + } dfs_Info105; + + typedef struct { + dfs_StorageState state; + dfs_Target_Priority priority; + } dfs_Info106; + + typedef struct { + [string,charset(UTF16)] uint16 *dom_root; + } dfs_Info200; + + typedef enum { + DFS_VOLUME_FLAVOR_STANDALONE = 0x100, + DFS_VOLUME_FLAVOR_AD_BLOB = 0x200 + } dfs_VolumeFlavor; + + typedef struct { + dfs_VolumeFlavor flavor; + [string,charset(UTF16)] uint16 *dom_root; + } dfs_Info300; + + typedef union { + [case(0)] dfs_Info0 *info0; + [case(1)] dfs_Info1 *info1; + [case(2)] dfs_Info2 *info2; + [case(3)] dfs_Info3 *info3; + [case(4)] dfs_Info4 *info4; + [case(5)] dfs_Info5 *info5; + [case(6)] dfs_Info6 *info6; + [case(7)] dfs_Info7 *info7; + [case(100)] dfs_Info100 *info100; + [case(101)] dfs_Info101 *info101; + [case(102)] dfs_Info102 *info102; + [case(103)] dfs_Info103 *info103; + [case(104)] dfs_Info104 *info104; + [case(105)] dfs_Info105 *info105; + [case(106)] dfs_Info106 *info106; + } dfs_Info; + + WERROR dfs_SetInfo ( + [in] [string,charset(UTF16)] uint16 dfs_entry_path[], + [in,unique] [string,charset(UTF16)] uint16 *servername, + [in,unique] [string,charset(UTF16)] uint16 *sharename, + [in] uint32 level, + [in,ref,switch_is(level)] dfs_Info *info + ); + + /******************/ + /* Function: 0x04 */ + WERROR dfs_GetInfo ( + [in] [string,charset(UTF16)] uint16 dfs_entry_path[], + [in,unique] [string,charset(UTF16)] uint16 *servername, + [in,unique] [string,charset(UTF16)] uint16 *sharename, + [in] uint32 level, + [out,switch_is(level)] dfs_Info *info + ); + + /******************/ + /* Function: 0x05 */ + + typedef struct { + uint32 count; + [size_is(count)] dfs_Info1 *s; + } dfs_EnumArray1; + + typedef struct { + uint32 count; + [size_is(count)] dfs_Info2 *s; + } dfs_EnumArray2; + + typedef struct { + uint32 count; + [size_is(count)] dfs_Info3 *s; + } dfs_EnumArray3; + + typedef struct { + uint32 count; + [size_is(count)] dfs_Info4 *s; + } dfs_EnumArray4; + + typedef struct { + uint32 count; + [size_is(count)] dfs_Info200 *s; + } dfs_EnumArray200; + + typedef struct { + uint32 count; + [size_is(count)] dfs_Info300 *s; + } dfs_EnumArray300; + + + typedef union { + [case(1)] dfs_EnumArray1 *info1; + [case(2)] dfs_EnumArray2 *info2; + [case(3)] dfs_EnumArray3 *info3; + [case(4)] dfs_EnumArray4 *info4; + [case(200)] dfs_EnumArray200 *info200; + [case(300)] dfs_EnumArray300 *info300; + } dfs_EnumInfo; + + typedef struct { + uint32 level; + [switch_is(level)] dfs_EnumInfo e; + } dfs_EnumStruct; + + WERROR dfs_Enum ( + [in] uint32 level, + [in] uint32 bufsize, + [in,out,unique] dfs_EnumStruct *info, + [in,out,unique] uint32 *total + ); + + /* Function 0x06 */ + WERROR dfs_Rename(); + + /* Function 0x07 */ + WERROR dfs_Move(); + + /* Function 0x08 */ + WERROR dfs_ManagerGetConfigInfo(); + + /* Function 0x09 */ + WERROR dfs_ManagerSendSiteInfo(); + + /* Function 0x0a */ + typedef struct { + uint32 unknown1; + [string,charset(UTF16)] uint16 *unknown2; + } dfs_UnknownStruct; + + WERROR dfs_AddFtRoot( + [in] [string,charset(UTF16)] uint16 servername[], + [in] [string,charset(UTF16)] uint16 dns_servername[], + [in] [string,charset(UTF16)] uint16 dfsname[], + [in] [string,charset(UTF16)] uint16 rootshare[], + [in] [string,charset(UTF16)] uint16 comment[], + [in] [string,charset(UTF16)] uint16 dfs_config_dn[], + [in] uint8 unknown1, + [in] uint32 flags, + [in,out,unique] dfs_UnknownStruct **unknown2 + ); + + /* Function 0x0b */ + WERROR dfs_RemoveFtRoot( + [in] [string,charset(UTF16)] uint16 servername[], + [in] [string,charset(UTF16)] uint16 dns_servername[], + [in] [string,charset(UTF16)] uint16 dfsname[], + [in] [string,charset(UTF16)] uint16 rootshare[], + [in] uint32 flags, + [in,out,unique] dfs_UnknownStruct **unknown + ); + + /* Function 0x0c */ + WERROR dfs_AddStdRoot( + [in] [string,charset(UTF16)] uint16 servername[], + [in] [string,charset(UTF16)] uint16 rootshare[], + [in] [string,charset(UTF16)] uint16 comment[], + [in] uint32 flags + ); + + /* Function 0x0d */ + WERROR dfs_RemoveStdRoot( + [in] [string,charset(UTF16)] uint16 servername[], + [in] [string,charset(UTF16)] uint16 rootshare[], + [in] uint32 flags + ); + + /* Function 0x0e */ + WERROR dfs_ManagerInitialize( + [in] [string,charset(UTF16)] uint16 *servername, + [in] uint32 flags + ); + + /* Function 0x0f */ + WERROR dfs_AddStdRootForced( + [in] [string,charset(UTF16)] uint16 servername[], + [in] [string,charset(UTF16)] uint16 rootshare[], + [in] [string,charset(UTF16)] uint16 comment[], + [in] [string,charset(UTF16)] uint16 store[] /* C:\\whatever */ + ); + + /* Function 0x10 */ + WERROR dfs_GetDcAddress(); + + /* Function 0x11 */ + WERROR dfs_SetDcAddress(); + + /* Function 0x12 */ + WERROR dfs_FlushFtTable( + [in] [string,charset(UTF16)] uint16 servername[], + [in] [string,charset(UTF16)] uint16 rootshare[] + ); + + /* Function 0x13 */ + WERROR dfs_Add2(); + + /* Function 0x14 */ + WERROR dfs_Remove2(); + + /* Function 0x15 */ + [public] WERROR dfs_EnumEx( + [in] [string,charset(UTF16)] uint16 dfs_name[], + [in] uint32 level, + [in] uint32 bufsize, + [in,out,unique] dfs_EnumStruct *info, + [in,out,unique] uint32 *total + ); + + /* Function 0x16 */ + WERROR dfs_SetInfo2(); +} diff --git a/epan/dissectors/pidl/dnsserver/dnsserver.cnf b/epan/dissectors/pidl/dnsserver/dnsserver.cnf new file mode 100644 index 00000000..ab89c333 --- /dev/null +++ b/epan/dissectors/pidl/dnsserver/dnsserver.cnf @@ -0,0 +1,84 @@ +# +# DNS_RPC_NAME +# +MANUAL dnsserver_dissect_struct_DNS_RPC_NAME +HF_FIELD hf_dnsserver_DNS_RPC_NAME_name "Name" "dnsserver.DNS_RPC_NAME.name" FT_STRING BASE_NONE NULL 0 "" "" "" + + +# +# DNS_RPC_NODE +# +MANUAL dnsserver_dissect_element_DNS_RPC_NODE_RecordCount +MANUAL dnsserver_dissect_element_DNS_RPC_NODE_records + + +NOEMIT dnsserver_dissect_element_DNS_RPC_NAME_NameLength +NOEMIT dnsserver_dissect_element_DNS_RPC_NAME_Name +NOEMIT dnsserver_dissect_element_DNS_RPC_NAME_Name_ + +CODE START + +int +dnsserver_dissect_struct_DNS_RPC_NAME(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + guint8 len; + + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_dnsserver_DNS_RPC_NAME); + } + + offset = dissect_ndr_uint8(tvb, offset, pinfo, tree, di, drep, hf_dnsserver_DNS_RPC_NAME_NameLength, &len); + proto_tree_add_item(tree, hf_dnsserver_DNS_RPC_NAME_name, tvb, + offset, len, ENC_UTF_8); + offset += len; + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + + +static guint16 node_record_count; + +static int +dnsserver_dissect_element_DNS_RPC_NODE_RecordCount(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di, guint8 *drep _U_) +{ + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, di, drep, hf_dnsserver_DNS_RPC_NODE_RecordCount, &node_record_count); + + return offset; +} + +static int +dnsserver_dissect_element_DNS_RPC_NODE_records(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di, guint8 *drep _U_) +{ + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + while(node_record_count--){ + offset = dnsserver_dissect_element_DNS_RPC_NODE_records_(tvb, offset, pinfo, tree, di, drep); + } + + return offset; +} + +CODE END diff --git a/epan/dissectors/pidl/dnsserver/dnsserver.idl b/epan/dissectors/pidl/dnsserver/dnsserver.idl new file mode 100644 index 00000000..c71b8eb1 --- /dev/null +++ b/epan/dissectors/pidl/dnsserver/dnsserver.idl @@ -0,0 +1,402 @@ +/* + dnsserver interface definition +*/ + +[ uuid("50abc2a4-574d-40b3-9d66-ee4fd5fba076"), + version(5.0), + pointer_default(unique), + helpstring("DNS Server") +] interface dnsserver +{ + + typedef [v1_enum] enum { + DNS_CLIENT_VERSION_W2K = 0x00000000, + DNS_CLIENT_VERSION_DOTNET = 0x00000006, + DNS_CLIENT_VERSION_LONGHORN = 0x00000007 + } DNS_RPC_CLIENT_VERSION; + + typedef [flag(NDR_ALIGN4)] struct { + uint8 OSMajorVersion; + uint8 OSMinorVersion; + uint16 ServicePackVersion; + } DNS_RPC_VERSION; + + typedef [enum8bit] enum { + DNS_RPC_BOOT_METHOD_FILE = 0x01, + DNS_RPC_BOOT_METHOD_REGISTRY = 0x02, + DNS_RPC_BOOT_METHOD_DIRECTORY = 0x03 + } DNS_RPC_BOOT_METHOD; + + + const uint32 DNS_LOG_LEVEL_ALL_PACKETS = 0x0000ffff; + const uint32 DNS_LOG_LEVEL_NON_QUERY = 0x000000fe; + typedef [bitmap32bit] bitmap { + DNS_LOG_LEVEL_QUERY = 0x00000001, + DNS_LOG_LEVEL_NOTIFY = 0x00000010, + DNS_LOG_LEVEL_UPDATE = 0x00000020, + DNS_LOG_LEVEL_QUESTIONS = 0x00000100, + DNS_LOG_LEVEL_ANSWERS = 0x00000200, + DNS_LOG_LEVEL_SEND = 0x00001000, + DNS_LOG_LEVEL_RECV = 0x00002000, + DNS_LOG_LEVEL_UDP = 0x00004000, + DNS_LOG_LEVEL_TCP = 0x00008000, + DNS_LOG_LEVEL_FULL_PACKETS = 0x01000000, + DNS_LOG_LEVEL_WRITE_THROUGH = 0x80000000 + } DNS_LOG_LEVELS; + + const uint32 DNS_RPC_USE_ALL_PROTOCOLS = 0xffffffff; + typedef [bitmap32bit] bitmap { + DNS_RPC_USE_TCPIP = 0x00000001, + DNS_RPC_USE_NAMED_PIPE = 0x00000002, + DNS_RPC_USE_LPC = 0x00000004 + } DNS_RPC_PROTOCOLS; + + typedef [v1_enum] enum { + DNS_ALLOW_RFC_NAMES_ONLY = 0x00000000, + DNS_ALLOW_NONRFC_NAMES = 0x00000001, + DNS_ALLOW_MULTIBYTE_NAMES = 0x00000002, + DNS_ALLOW_ALL_NAMES = 0x00000003 + } DNS_NAME_CHECK_FLAGS; + + typedef [enum16bit] enum { + DNS_TYPE_ZERO = 0x0000, + DNS_TYPE_A = 0x0001, + DNS_TYPE_NS = 0x0002, + DNS_TYPE_MD = 0x0003, + DNS_TYPE_MF = 0x0004, + DNS_TYPE_CNAME = 0x0005, + DNS_TYPE_SOA = 0x0006, + DNS_TYPE_MB = 0x0007, + DNS_TYPE_MG = 0x0008, + DNS_TYPE_MR = 0x0009, + DNS_TYPE_NULL = 0x000a, + DNS_TYPE_WKS = 0x000b, + DNS_TYPE_PTR = 0x000c, + DNS_TYPE_HINFO = 0x000d, + DNS_TYPE_MINFO = 0x000e, + DNS_TYPE_MX = 0x000f, + DNS_TYPE_TXT = 0x0010, + DNS_TYPE_RP = 0x0011, + DNS_TYPE_AFSDB = 0x0012, + DNS_TYPE_X25 = 0x0013, + DNS_TYPE_ISDN = 0x0014, + DNS_TYPE_RT = 0x0015, + DNS_TYPE_NSAP = 0x0016, + DNS_TYPE_NSAPPTR = 0x0017, + DNS_TYPE_SIG = 0x0018, + DNS_TYPE_KEY = 0x0019, + DNS_TYPE_PX = 0x001a, + DNS_TYPE_GPOS = 0x001b, + DNS_TYPE_AAAA = 0x001c, + DNS_TYPE_LOC = 0x001d, + DNS_TYPE_NXT = 0x001e, + DNS_TYPE_SRV = 0x0021, + DNS_TYPE_ATMA = 0x0022, + DNS_TYPE_NAPTR = 0x0023, + DNS_TYPE_DNAME = 0x0024, + DNS_TYPE_ALL = 0x00ff, + DNS_TYPE_WINS = 0xff01, + DNS_TYPE_WINSR = 0xff02 + } DNS_RECORD_TYPE; + + typedef [bitmap32bit] bitmap { + DNS_RPC_VIEW_AUTHORITY_DATA = 0x00000001, + DNS_RPC_VIEW_CACHE_DATA = 0x00000002, + DNS_RPC_VIEW_GLUE_DATA = 0x00000004, + DNS_RPC_VIEW_ROOT_HINT_DATA = 0x00000008, + DNS_RPC_VIEW_ADDITIONAL_DATA = 0x00000010, + DNS_RPC_VIEW_NO_CHILDREN = 0x00010000, + DNS_RPC_VIEW_ONLY_CHILDREN = 0x00020000 + } DNS_SELECT_FLAGS; + + typedef [bitmap32bit] bitmap { + DNS_RPC_FLAG_CACHE_DATA = 0x80000000, + DNS_RPC_FLAG_ZONE_ROOT = 0x40000000, + DNS_RPC_FLAG_AUTH_ZONE_ROOT = 0x20000000, + DNS_RPC_FLAG_ZONE_DELEGATION = 0x10000000, + DNS_RPC_FLAG_RECOR_DEFAULT_TTL = 0x08000000, + DNS_RPC_FLAG_RECORD_TTL_CHANGE = 0x04000000, + DNS_RPC_FLAG_RECORD_CREATE_PTR = 0x02000000, + DNS_RPC_FLAG_NODE_STICKY = 0x01000000, + DNS_RPC_FLAG_NODE_COMPLETE = 0x00800000, + DNS_RPC_FLAG_OPEN_ACL = 0x00040000, + DNS_RPC_FLAG_AGING_ON = 0x00020000, + DNS_RPC_FLAG_SUPPRESS_NOTIFY = 0x00010000 + } DNS_RPC_NODE_FLAGS; + + /* 2.2.2.2.1 this cant really be described in IDL :-( */ + typedef struct { + uint8 NameLength; + uint8 Name[NameLength]; + } DNS_RPC_NAME; + + typedef struct { + DNS_RPC_NAME Name; + } DNS_RPC_RECORD_NODE_NAME; + +/* typedef [nodiscriminant] union { */ + typedef union { + [case(2)] DNS_RPC_RECORD_NODE_NAME NodeName; + } DNS_RPC_RECORD_UNION; + + typedef struct { + uint16 DataLength; /* size of */ + DNS_RECORD_TYPE Type; + uint32 Flags; + uint32 Serial; + uint32 TtlSeconds; + uint32 TimeStamp; + uint32 reserved; + [switch_is(Type)] DNS_RPC_RECORD_UNION record; + } DNS_RPC_RECORD; + + typedef struct { + uint16 Length; + uint16 RecordCount; + DNS_RPC_NODE_FLAGS Flags; + uint32 Childcount; + DNS_RPC_NAME NodeName; + DNS_RPC_RECORD records[RecordCount]; + } DNS_RPC_NODE; +/* XXX */ + + + typedef struct { + uint32 AddrCount; + [size_is(AddrCount)] uint32 AddrArray[]; + } IP4_ARRAY; + +/* XXX */ + typedef struct { + uint32 RpcStructureVersion; + uint32 reserved0; + DNS_RPC_VERSION Version; + DNS_RPC_BOOT_METHOD BootMethod; + boolean8 AdminConfigured; + boolean8 AllowUpdate; + boolean8 DsAvailable; + [unique, string] uint8 *ServerName; + [unique, string, charset(UTF16)] uint16 *DsContainer; + [unique] IP4_ARRAY *ServerAddrs; + [unique] IP4_ARRAY *ListenAddrs; + [unique] IP4_ARRAY *Forwarders; + [unique] IP4_ARRAY *LogFilter; + [unique, string, charset(UTF16)] uint16 *LogFilePath; + [unique, string] uint8 *DomainName; + [unique, string] uint8 *ForestName; + [unique, string] uint8 *DomainDirectoryPartition; + [unique, string] uint8 *ForestDirectoryPartition; + [unique, string] uint8 *extension0; + [unique, string] uint8 *extension1; + [unique, string] uint8 *extension2; + [unique, string] uint8 *extension3; + [unique, string] uint8 *extension4; + [unique, string] uint8 *extension5; + DNS_LOG_LEVELS LogLevel; + uint32 DebugLevel; + uint32 ForwardTimeout; + DNS_RPC_PROTOCOLS RpcProtocol; + DNS_NAME_CHECK_FLAGS NameCheckFlag; + uint32 AddressAnswerLimit; + uint32 RecursionRetry; + uint32 RecursionTimeout; + uint32 MaxCacheTtl; + uint32 DsPollingInterval; + uint32 LocalNetPriorityNetmask; + uint32 ScavengingInterval; + uint32 DefaultRefreshInterval; + uint32 DefaultNoRefreshInterval; + uint32 LastScavengeTime; + uint32 EventLogLevel; + uint32 LogFileMaxSize; + uint32 DsForestVersion; + uint32 DsDomainVersion; + uint32 DsDsaVersion; + uint32 reserve_array[4]; + boolean8 AutoReverseZones; + boolean8 AutoCacheUpdate; + boolean8 RecurseAfterForwarding; + boolean8 ForwardDelegations; + boolean8 NoRecursion; + boolean8 SecureResponses; + boolean8 RoundRobin; + boolean8 LocalNetPriority; + boolean8 BindSecondaries; + boolean8 WriteAuthorityNs; + boolean8 StrictFileParsing; + boolean8 LooseWildcarding; + boolean8 DefaultAgingState; + boolean8 reserve_array2[15]; + } DNS_RPC_SERVER_INFO_DOTNET; +/* XXX */ + + typedef [v1_enum, flag(NDR_PAHEX)] enum { + DNSSRV_TYPEID_NULL = 0, + DNSSRV_TYPEID_DWORD = 1, + DNSSRV_TYPEID_LPSTR = 2, + DNSSRV_TYPEID_LPWSTR = 3, + DNSSRV_TYPEID_IPARRAY = 4, + DNSSRV_TYPEID_BUFFER = 5, + DNSSRV_TYPEID_SERVER_INFO_W2K = 6, + DNSSRV_TYPEID_STATS = 7, + DNSSRV_TYPEID_FORWARDERS_W2K = 8, + DNSSRV_TYPEID_ZONE_W2K = 9, + DNSSRV_TYPEID_ZONE_INFO_W2K = 10, + DNSSRV_TYPEID_ZONE_SECONDARIES_W2K = 11, + DNSSRV_TYPEID_ZONE_DATABASE_W2K = 12, + DNSSRV_TYPEID_ZONE_TYPE_RESET_W2K = 13, + DNSSRV_TYPEID_ZONE_CREATE_W2K = 14, + DNSSRV_TYPEID_NAME_AND_PARAM = 15, + DNSSRV_TYPEID_ZONE_LIST_W2K = 16, + DNSSRV_TYPEID_ZONE_RENAME = 17, + DNSSRV_TYPEID_ZONE_EXPORT = 18, + DNSSRV_TYPEID_SERVER_INFO_DOTNET = 19, + DNSSRV_TYPEID_FORWARDERS_DOTNET = 20, + DNSSRV_TYPEID_ZONE = 21, + DNSSRV_TYPEID_ZONE_INFO_DOTNET = 22, + DNSSRV_TYPEID_ZONE_SECONDARIES_DOTNET = 23, + DNSSRV_TYPEID_ZONE_DATABASE = 24, + DNSSRV_TYPEID_ZONE_TYPE_RESET_DOTNET = 25, + DNSSRV_TYPEID_ZONE_CREATE_DOTNET = 26, + DNSSRV_TYPEID_ZONE_LIST = 27, + DNSSRV_TYPEID_DP_ENUM = 28, + DNSSRV_TYPEID_DP_INFO = 29, + DNSSRV_TYPEID_DP_LIST = 30, + DNSSRV_TYPEID_ENLIST_DP = 31, + DNSSRV_TYPEID_ZONE_CHANGE_DP = 32, + DNSSRV_TYPEID_ENUM_ZONES_FILTER = 33, + DNSSRV_TYPEID_ADDARRAY = 34, + DNSSRV_TYPEID_SERVER_INFO = 35, + DNSSRV_TYPEID_ZONE_INFO = 36, + DNSSRV_TYPEID_FORWARDERS = 37, + DNSSRV_TYPEID_ZONE_SECONDARIES = 38, + DNSSRV_TYPEID_ZONE_TYPE_RESET = 39, + DNSSRV_TYPEID_ZONE_CREATE = 40, + DNSSRV_TYPEID_IP_VALIDATE = 41, + DNSSRV_TYPEID_AUTOCONFIGURE = 42, + DNSSRV_TYPEID_UTF8_STRING_LIST = 43, + DNSSRV_TYPEID_UNICODE_STRING_LIST = 44 + } DnssrvRpcTypeId; + + typedef union { + [case(DNSSRV_TYPEID_NULL)] uint8 *null; + [case(DNSSRV_TYPEID_DWORD)] uint32 dword; +/* DNSSRV_TYPEID_LPSTR = 2,*/ +/* DNSSRV_TYPEID_LPWSTR = 3,*/ +/* DNSSRV_TYPEID_IPARRAY = 4,*/ +/* DNSSRV_TYPEID_BUFFER = 5,*/ +/* DNSSRV_TYPEID_SERVER_INFO_W2K = 6,*/ +/* DNSSRV_TYPEID_STATS = 7,*/ +/* DNSSRV_TYPEID_FORWARDERS_W2K = 8,*/ +/* DNSSRV_TYPEID_ZONE_W2K = 9,*/ +/* DNSSRV_TYPEID_ZONE_INFO_W2K = 10,*/ +/* DNSSRV_TYPEID_ZONE_SECONDARIES_W2K = 11,*/ +/* DNSSRV_TYPEID_ZONE_DATABASE_W2K = 12,*/ +/* DNSSRV_TYPEID_ZONE_TYPE_RESET_W2K = 13,*/ +/* DNSSRV_TYPEID_ZONE_CREATE_W2K = 14,*/ +/* DNSSRV_TYPEID_NAME_AND_PARAM = 15,*/ +/* DNSSRV_TYPEID_ZONE_LIST_W2K = 16,*/ +/* DNSSRV_TYPEID_ZONE_RENAME = 17,*/ +/* DNSSRV_TYPEID_ZONE_EXPORT = 18,*/ + [case(DNSSRV_TYPEID_SERVER_INFO_DOTNET)] DNS_RPC_SERVER_INFO_DOTNET *ServerInfoDotnet; +/* DNSSRV_TYPEID_FORWARDERS_DOTNET = 20,*/ +/* DNSSRV_TYPEID_ZONE = 21,*/ +/* DNSSRV_TYPEID_ZONE_INFO_DOTNET = 22,*/ +/* DNSSRV_TYPEID_ZONE_SECONDARIES_DOTNET = 23,*/ +/* DNSSRV_TYPEID_ZONE_DATABASE = 24,*/ +/* DNSSRV_TYPEID_ZONE_TYPE_RESET_DOTNET = 25,*/ +/* DNSSRV_TYPEID_ZONE_CREATE_DOTNET = 26,*/ +/* DNSSRV_TYPEID_ZONE_LIST = 27,*/ +/* DNSSRV_TYPEID_DP_ENUM = 28,*/ +/* DNSSRV_TYPEID_DP_INFO = 29,*/ +/* DNSSRV_TYPEID_DP_LIST = 30,*/ +/* DNSSRV_TYPEID_ENLIST_DP = 31,*/ +/* DNSSRV_TYPEID_ZONE_CHANGE_DP = 32,*/ +/* DNSSRV_TYPEID_ENUM_ZONES_FILTER = 33,*/ +/* DNSSRV_TYPEID_ADDARRAY = 34,*/ +/* DNSSRV_TYPEID_SERVER_INFO = 35,*/ +/* DNSSRV_TYPEID_ZONE_INFO = 36,*/ +/* DNSSRV_TYPEID_FORWARDERS = 37,*/ +/* DNSSRV_TYPEID_ZONE_SECONDARIES = 38,*/ +/* DNSSRV_TYPEID_ZONE_TYPE_RESET = 39,*/ +/* DNSSRV_TYPEID_ZONE_CREATE = 40,*/ +/* DNSSRV_TYPEID_IP_VALIDATE = 41,*/ +/* DNSSRV_TYPEID_AUTOCONFIGURE = 42,*/ +/* DNSSRV_TYPEID_UTF8_STRING_LIST = 43,*/ +/* DNSSRV_TYPEID_UNICODE_STRING_LIST = 44*/ + } DNSSRV_RPC_UNION; + + + /******************/ + /* Function: 0x00 */ + NTSTATUS DnssrvOperation ( + ); + + /******************/ + /* Function: 0x01 */ + NTSTATUS DnssrvQuery ( + ); + + /******************/ + /* Function: 0x02 */ + NTSTATUS DnssrvComplexOperation ( + ); + + /******************/ + /* Function: 0x03 */ + NTSTATUS DnssrvEnumRecords ( + ); + + /******************/ + /* Function: 0x04 */ + NTSTATUS DnssrvUpdateRecord ( + ); + + /******************/ + /* Function: 0x05 */ + NTSTATUS DnssrvOperation2 ( + ); + + /******************/ + /* Function: 0x06 */ + NTSTATUS DnssrvQuery2 ( + [in] DNS_RPC_CLIENT_VERSION client_version, + [in] uint32 setting_flags, + [in, unique, string, charset(UTF16)] uint16 *server_name, + [in, unique, string] uint8 *zone, + [in, unique, string] uint8 *operation, + [out, ref] DnssrvRpcTypeId *type_id, + [out, ref, switch_is(*type_id)] DNSSRV_RPC_UNION *data + ); + + /******************/ + /* Function: 0x07 */ + NTSTATUS DnssrvComplexOperation2 ( + ); + + typedef struct { + DNS_RPC_NODE rpc_node; + } DNS_RECORD_BUFFER; + + /******************/ + /* Function: 0x08 */ + NTSTATUS DnssrvEnumRecords2 ( + [in] DNS_RPC_CLIENT_VERSION client_version, + [in] uint32 setting_flags, + [in, unique, string, charset(UTF16)] uint16 *server_name, + [in, unique, string] uint8 *zone, + [in, unique, string] uint8 *node_name, + [in, unique, string] uint8 *start_child, + [in] DNS_RECORD_TYPE record_type, + [in] DNS_SELECT_FLAGS select_flag, + [in, unique, string] uint8 *filter_start, + [in, unique, string] uint8 *filter_stop, + [out,ref] uint32 *buffer_length, + [out, unique, subcontext(4)] DNS_RPC_NODE *record_buffer + ); + + /******************/ + /* Function: 0x09 */ + NTSTATUS DnssrvUpdateRecord2 ( + ); +} diff --git a/epan/dissectors/pidl/drsuapi/drsuapi.cnf b/epan/dissectors/pidl/drsuapi/drsuapi.cnf new file mode 100644 index 00000000..305e6907 --- /dev/null +++ b/epan/dissectors/pidl/drsuapi/drsuapi.cnf @@ -0,0 +1,119 @@ +# conformance file for DRSUAPI +# + +MANUAL drsuapi_dissect_element_DsBindInfoCtr_length +MANUAL drsuapi_dissect_element_DsBindInfoCtr_info +MANUAL drsuapi_dissect_element_DsAddEntry_AttrErrListItem_V1_next_ +MANUAL drsuapi_dissect_element_DsReplicaObjectListItemEx_next_object_ +MANUAL drsuapi_dissect_element_DsReplicaObjectListItem_next_object_ +MANUAL drsuapi_dissect_element_DsaAddressListItem_V1_next_ +MANUAL drsuapi_dissect_element_DsAddEntry_RefErrListItem_V1_next_ +MANUAL drsuapi_dissect_element_DsCrackNames_ctr_ +MANUAL drsuapi_dissect_ReadNgcKeyReply + +TYPE lsa_String "offset=dissect_ndr_counted_string(tvb, offset, pinfo, tree, di, drep, @HF@, @PARAM@);" FT_STRING BASE_NONE 0 NULL 4 + +CODE START + +static int +drsuapi_dissect_element_DsBindInfoCtr_length(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, guint3264 *length _U_) +{ + offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, di, drep, hf_drsuapi_drsuapi_DsBindInfoCtr_length, NULL); + + return offset; +} + +static int +drsuapi_dissect_DsBindInfo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_); +static int +drsuapi_dissect_element_DsBindInfoCtr_info(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, guint3264 *length) +{ + if(di->conformant_run){ + return offset; + } + offset = drsuapi_dissect_DsBindInfo(tvb, offset, pinfo, tree, di, drep, hf_drsuapi_drsuapi_DsBindInfoCtr_info, (guint32)*length); + + return offset; +} + +static int +drsuapi_dissect_DsNameCtr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_); +static int +drsuapi_dissect_element_DsCrackNames_ctr_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + ALIGN_TO_5_BYTES; + offset = drsuapi_dissect_DsNameCtr(tvb, offset, pinfo, tree, di, drep, hf_drsuapi_drsuapi_DsCrackNames_ctr, 0); + + return offset; +} + +static int +drsuapi_dissect_element_DsAddEntry_AttrErrListItem_V1_next_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = drsuapi_dissect_struct_DsAddEntry_AttrErrListItem_V1(tvb,offset,pinfo,tree,di,drep,hf_drsuapi_drsuapi_DsAddEntry_AttrErrListItem_V1_next,0); + + return offset; +} + +static int +drsuapi_dissect_element_DsReplicaObjectListItemEx_next_object_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = drsuapi_dissect_struct_DsReplicaObjectListItemEx(tvb,offset,pinfo,tree,di,drep,hf_drsuapi_drsuapi_DsGetNCChangesCtr1_first_object,0); + + return offset; +} + +static int +drsuapi_dissect_element_DsReplicaObjectListItem_next_object_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = drsuapi_dissect_struct_DsReplicaObjectListItem(tvb,offset,pinfo,tree,di,drep,hf_drsuapi_drsuapi_DsAddEntryRequest2_first_object,0); + + return offset; +} + +static int +drsuapi_dissect_element_DsaAddressListItem_V1_next_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = drsuapi_dissect_struct_DsaAddressListItem_V1(tvb,offset,pinfo,tree,di,drep,hf_drsuapi_drsuapi_DsAddEntry_RefErrListItem_V1_addr_list,0); + + return offset; +} + +static int +drsuapi_dissect_element_DsAddEntry_RefErrListItem_V1_next_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = drsuapi_dissect_struct_DsAddEntry_RefErrListItem_V1(tvb,offset,pinfo,tree,di,drep,hf_drsuapi_drsuapi_DsAddEntryErrorInfo_Referr_V1_refer,0); + + return offset; +} + +static int +drsuapi_dissect_ReadNgcKeyReply(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + guint32 level; + + ALIGN_TO_5_BYTES; + + old_offset = offset; + if (parent_tree) { + tree = proto_tree_add_subtree(parent_tree, tvb, offset, -1, ett_drsuapi_drsuapi_ReadNgcKeyReply, &item, "drsuapi_ReadNgcKeyReply"); + } + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_index, &level); + ALIGN_TO_5_BYTES; + + switch(level) { + case 1: + offset = drsuapi_dissect_element_ReadNgcKeyReply_V1(tvb, offset, pinfo, tree, di, drep); + break; + } + proto_item_set_len(item, offset-old_offset); + + + return offset; +} + +CODE END diff --git a/epan/dissectors/pidl/drsuapi/drsuapi.idl b/epan/dissectors/pidl/drsuapi/drsuapi.idl new file mode 100644 index 00000000..c4db864c --- /dev/null +++ b/epan/dissectors/pidl/drsuapi/drsuapi.idl @@ -0,0 +1,1957 @@ +#include "idl_types.h" + +import "misc.idl", "lsa.idl", "samr.idl"; + +[ + uuid("e3514235-4b06-11d1-ab04-00c04fc2dcd2"), + version(4.0), + endpoint("ncacn_np:[\\pipe\\lsass]","ncacn_np:[\\pipe\\protected_storage]", "ncacn_ip_tcp:", "ncalrpc:"), + authservice("ldap"), + helpstring("Active Directory Replication"), + pointer_default(unique) +] +interface drsuapi +{ + typedef bitmap security_GroupAttrs security_GroupAttrs; + + /* see MS-DRSR section 5.39 */ + typedef [public,bitmap32bit] bitmap { + DRSUAPI_DRS_ASYNC_OP = 0x00000001, + DRSUAPI_DRS_GETCHG_CHECK = 0x00000002, + DRSUAPI_DRS_UPDATE_NOTIFICATION = 0x00000002, + DRSUAPI_DRS_ADD_REF = 0x00000004, + DRSUAPI_DRS_SYNC_ALL = 0x00000008, + DRSUAPI_DRS_DEL_REF = 0x00000008, + DRSUAPI_DRS_WRIT_REP = 0x00000010, + DRSUAPI_DRS_INIT_SYNC = 0x00000020, + DRSUAPI_DRS_PER_SYNC = 0x00000040, + DRSUAPI_DRS_MAIL_REP = 0x00000080, + DRSUAPI_DRS_ASYNC_REP = 0x00000100, + DRSUAPI_DRS_IGNORE_ERROR = 0x00000100, + DRSUAPI_DRS_TWOWAY_SYNC = 0x00000200, + DRSUAPI_DRS_CRITICAL_ONLY = 0x00000400, + DRSUAPI_DRS_GET_ANC = 0x00000800, + DRSUAPI_DRS_GET_NC_SIZE = 0x00001000, + DRSUAPI_DRS_LOCAL_ONLY = 0x00001000, + DRSUAPI_DRS_NONGC_RO_REP = 0x00002000, + DRSUAPI_DRS_SYNC_BYNAME = 0x00004000, + DRSUAPI_DRS_REF_OK = 0x00004000, + DRSUAPI_DRS_FULL_SYNC_NOW = 0x00008000, + DRSUAPI_DRS_NO_SOURCE = 0x00008000, + DRSUAPI_DRS_FULL_SYNC_IN_PROGRESS = 0x00010000, + DRSUAPI_DRS_FULL_SYNC_PACKET = 0x00020000, + DRSUAPI_DRS_SYNC_REQUEUE = 0x00040000, + DRSUAPI_DRS_SYNC_URGENT = 0x00080000, + DRSUAPI_DRS_REF_GCSPN = 0x00100000, + DRSUAPI_DRS_NO_DISCARD = 0x00100000, + DRSUAPI_DRS_NEVER_SYNCED = 0x00200000, + DRSUAPI_DRS_SPECIAL_SECRET_PROCESSING = 0x00400000, + DRSUAPI_DRS_INIT_SYNC_NOW = 0x00800000, + DRSUAPI_DRS_PREEMPTED = 0x01000000, + DRSUAPI_DRS_SYNC_FORCED = 0x02000000, + DRSUAPI_DRS_DISABLE_AUTO_SYNC = 0x04000000, + DRSUAPI_DRS_DISABLE_PERIODIC_SYNC = 0x08000000, + DRSUAPI_DRS_USE_COMPRESSION = 0x10000000, + DRSUAPI_DRS_NEVER_NOTIFY = 0x20000000, + DRSUAPI_DRS_SYNC_PAS = 0x40000000, + DRSUAPI_DRS_GET_ALL_GROUP_MEMBERSHIP = 0x80000000 + } drsuapi_DrsOptions; + + typedef [public,bitmap32bit] bitmap { + DRSUAPI_DRS_GET_TGT = 0x00000001 + } drsuapi_DrsMoreOptions; + + /* see DRS_MSG_REPMOD_V1 */ + typedef [public,bitmap32bit] bitmap { + DRSUAPI_DRS_UPDATE_FLAGS = 0x00000001, + DRSUAPI_DRS_UPDATE_ADDRESS = 0x00000002, + DRSUAPI_DRS_UPDATE_SCHEDULE = 0x00000004 + } drsuapi_DrsUpdate; + + /*****************/ + /* Function 0x00 drsuapi_DsBind() */ + + /* MS-DRSR 5.39 DRS_EXTENSIONS_INT */ + typedef [bitmap32bit] bitmap { + DRSUAPI_SUPPORTED_EXTENSION_BASE = 0x00000001, + DRSUAPI_SUPPORTED_EXTENSION_ASYNC_REPLICATION = 0x00000002, + DRSUAPI_SUPPORTED_EXTENSION_REMOVEAPI = 0x00000004, + DRSUAPI_SUPPORTED_EXTENSION_MOVEREQ_V2 = 0x00000008, + DRSUAPI_SUPPORTED_EXTENSION_GETCHG_COMPRESS = 0x00000010, + DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V1 = 0x00000020, + DRSUAPI_SUPPORTED_EXTENSION_RESTORE_USN_OPTIMIZATION = 0x00000040, + DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY = 0x00000080, + DRSUAPI_SUPPORTED_EXTENSION_KCC_EXECUTE = 0x00000100, + DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY_V2 = 0x00000200, + DRSUAPI_SUPPORTED_EXTENSION_LINKED_VALUE_REPLICATION = 0x00000400, + DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V2 = 0x00000800, + DRSUAPI_SUPPORTED_EXTENSION_INSTANCE_TYPE_NOT_REQ_ON_MOD= 0x00001000, + DRSUAPI_SUPPORTED_EXTENSION_CRYPTO_BIND = 0x00002000, + DRSUAPI_SUPPORTED_EXTENSION_GET_REPL_INFO = 0x00004000, + DRSUAPI_SUPPORTED_EXTENSION_STRONG_ENCRYPTION = 0x00008000, + DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V01 = 0x00010000, + DRSUAPI_SUPPORTED_EXTENSION_TRANSITIVE_MEMBERSHIP = 0x00020000, + DRSUAPI_SUPPORTED_EXTENSION_ADD_SID_HISTORY = 0x00040000, + DRSUAPI_SUPPORTED_EXTENSION_POST_BETA3 = 0x00080000, + DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V5 = 0x00100000, + DRSUAPI_SUPPORTED_EXTENSION_GET_MEMBERSHIPS2 = 0x00200000, + DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V6 = 0x00400000, + DRSUAPI_SUPPORTED_EXTENSION_NONDOMAIN_NCS = 0x00800000, + DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8 = 0x01000000, + DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V5 = 0x02000000, + DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V6 = 0x04000000, + /* + * the following 3 have the same value + * repadmin.exe /bind says that + */ + DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3 = 0x08000000, + DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7 = 0x08000000, + DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECT = 0x08000000, + DRSUAPI_SUPPORTED_EXTENSION_XPRESS_COMPRESS = 0x10000000, + DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V10 = 0x20000000, + DRSUAPI_SUPPORTED_EXTENSION_RESERVED_PART2 = 0x40000000, + DRSUAPI_SUPPORTED_EXTENSION_RESERVED_PART3 = 0x80000000 + } drsuapi_SupportedExtensions; + + typedef [bitmap32bit] bitmap { + DRSUAPI_SUPPORTED_EXTENSION_ADAM = 0x00000001, + DRSUAPI_SUPPORTED_EXTENSION_LH_BETA2 = 0x00000002, + DRSUAPI_SUPPORTED_EXTENSION_RECYCLE_BIN = 0x00000004 + } drsuapi_SupportedExtensionsExt; + + /* this is used by w2k */ + typedef [public] struct { + drsuapi_SupportedExtensions supported_extensions; + GUID site_guid; + uint32 pid; + } drsuapi_DsBindInfo24; + + /* this is used by w2k3 */ + typedef [public] struct { + drsuapi_SupportedExtensions supported_extensions; + GUID site_guid; + uint32 pid; + uint32 repl_epoch; + } drsuapi_DsBindInfo28; + + typedef [public] struct { + drsuapi_SupportedExtensions supported_extensions; + GUID site_guid; + uint32 pid; + uint32 repl_epoch; + drsuapi_SupportedExtensionsExt supported_extensions_ext; + } drsuapi_DsBindInfo32; + + /* this is used by w2k8 */ + typedef [public] struct { + drsuapi_SupportedExtensions supported_extensions; + GUID site_guid; + uint32 pid; + uint32 repl_epoch; + drsuapi_SupportedExtensionsExt supported_extensions_ext; + GUID config_dn_guid; + } drsuapi_DsBindInfo48; + + /* this is used by w2k12 R2 [MS-DRSR] Section 5.39 */ + typedef [public] struct { + drsuapi_SupportedExtensions supported_extensions; + GUID site_guid; + uint32 pid; + uint32 repl_epoch; + drsuapi_SupportedExtensionsExt supported_extensions_ext; + GUID config_dn_guid; + drsuapi_SupportedExtensionsExt supported_capabilities_ext; + } drsuapi_DsBindInfo52; + + typedef [public] struct { + [flag(NDR_REMAINING)] DATA_BLOB info; + } drsuapi_DsBindInfoFallBack; + + typedef [nopull, nopush, noprint] union { + [case(24)] drsuapi_DsBindInfo24 info24; + [case(28)] drsuapi_DsBindInfo28 info28; + [case(32)] drsuapi_DsBindInfo32 info32; + [case(48)] drsuapi_DsBindInfo48 info48; + [case(52)] drsuapi_DsBindInfo52 info52; + /* + * The size for the default case is a bit arbitrary it in fact the value + * of the switch but we can't reference it. + * As we hand(un-)marshall this structure it has 0 impact and makes + * pidl happy for wireshark too + */ + [default] drsuapi_DsBindInfoFallBack Fallback; + } drsuapi_DsBindInfo; + + /* the drsuapi_DsBindInfoCtr was this before + * typedef [flag(NDR_PAHEX)] struct { + * [range(1,10000)] uint32 length; + * [size_is(length)] uint8 data[]; + * } drsuapi_DsBindInfo; + * + * but we don't want the caller to manually decode this blob, + * so we're doing it here + */ + + /* + * MS-DRSR.pdf gives the following definition + typedef struct { + [range(1,10000)] DWORD cb; + [size_is(cb)] BYTE rgb[]; + } DRS_EXTENSIONS; + + But we use a subcontext which has a slightly different signification on how + data are laid out. + With the MS-DRSR definition we will have + size_is_cb cv rgb_array + with size_is_cb being a uint3264 and cv being a uint32 + + We used to have + typedef struct { + [range(1,10000)] uint32 length; + [switch_is(length)] drsuapi_DsBindInfo info; + } drsuapi_DsBindInfoCtr; + + typedef [nodiscriminant] union { + [case(24)][subcontext(4)] drsuapi_DsBindInfo24 info24; + [case(28)][subcontext(4)] drsuapi_DsBindInfo28 info28; + [case(48)][subcontext(4)] drsuapi_DsBindInfo48 info48; + [default][subcontext(4)] drsuapi_DsBindInfoFallBack FallBack; + } drsuapi_DsBindInfo; + + With this definition data is laid out this way: + length subcontext_size drsuapi_DsBindInfoxx + with length being a uint32 and subcontext_size being a uint3264 + + It has clearly an impact on the way things are aligned when using NDR64 + */ + typedef [flag(NDR_NOALIGN)] struct { + [range(1,10000)] uint3264 length; + [switch_is(length)] drsuapi_DsBindInfo info; + } drsuapi_DsBindInfoCtr; + + /* this is a magic guid you need to pass to DsBind to make drsuapi_DsWriteAccountSpn() work + * + * maybe the bind_guid could also be the invocation_id see drsuapi_DsReplicaConnection04 + */ + const char *DRSUAPI_DS_BIND_GUID = "e24d201a-4fd6-11d1-a3da-0000f875ae0d"; + /* + * this magic guid are needed to fetch the whole tree with drsuapi_DsGetNCChanges() + * as administrator and this values are also used in the destination_dsa_guid field + * of drsuapi_DsGetNCChangesReq5/8 and the source_dsa_guid is zero. + */ + const char *DRSUAPI_DS_BIND_GUID_W2K = "6abec3d1-3054-41c8-a362-5a0c5b7d5d71"; + const char *DRSUAPI_DS_BIND_GUID_W2K3 = "6afab99c-6e26-464a-975f-f58f105218bc"; + + [public] WERROR drsuapi_DsBind( + [in,unique] GUID *bind_guid, + [in,out,unique] drsuapi_DsBindInfoCtr *bind_info, + [out, ref] policy_handle *bind_handle + ); + + /*****************/ + /* Function 0x01 */ + WERROR drsuapi_DsUnbind( + [in,out] policy_handle *bind_handle + ); + + /*****************/ + /* Function 0x02 */ + typedef [public,gensize] struct { + [value(ndr_size_drsuapi_DsReplicaObjectIdentifier(r, ndr->flags)-4)] uint32 __ndr_size; + [value(ndr_size_dom_sid28(&sid, ndr->flags))] uint32 __ndr_size_sid; + GUID guid; + dom_sid28 sid; + [value(strlen_m(dn))] uint32 __ndr_size_dn; + [charset(UTF16),size_is(__ndr_size_dn+1)] uint16 dn[]; + } drsuapi_DsReplicaObjectIdentifier; + + typedef struct { + [ref] drsuapi_DsReplicaObjectIdentifier *naming_context; + GUID source_dsa_guid; + [charset(DOS),string] char *source_dsa_dns; /* Source DSA dns_name in <guid>._msdcs.<domain_dns> form */ + drsuapi_DrsOptions options; + } drsuapi_DsReplicaSyncRequest1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsReplicaSyncRequest1 req1; + } drsuapi_DsReplicaSyncRequest; + + WERROR drsuapi_DsReplicaSync( + [in] policy_handle *bind_handle, + [in] uint32 version, + [in,switch_is(version)] drsuapi_DsReplicaSyncRequest *req + ); + + /*****************/ + /* Function 0x03 */ + typedef [public] struct { + hyper tmp_highest_usn; /* updated after each object update */ + hyper reserved_usn; + hyper highest_usn; /* updated after a full replication cycle */ + } drsuapi_DsReplicaHighWaterMark; + + typedef [public] struct { + GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */ + hyper highest_usn; /* updated after a full replication cycle */ + } drsuapi_DsReplicaCursor; + + typedef struct { + [value(1)] uint32 version; + [value(0)] uint32 reserved1; + [range(0,0x100000)] uint32 count; + [value(0)] uint32 reserved2; + [size_is(count)] drsuapi_DsReplicaCursor cursors[]; + } drsuapi_DsReplicaCursorCtrEx; + + typedef [flag(NDR_PAHEX),v1_enum] enum { + DRSUAPI_EXOP_NONE = 0x00000000, + DRSUAPI_EXOP_FSMO_REQ_ROLE = 0x00000001, + DRSUAPI_EXOP_FSMO_RID_ALLOC = 0x00000002, + DRSUAPI_EXOP_FSMO_RID_REQ_ROLE = 0x00000003, + DRSUAPI_EXOP_FSMO_REQ_PDC = 0x00000004, + DRSUAPI_EXOP_FSMO_ABANDON_ROLE = 0x00000005, + DRSUAPI_EXOP_REPL_OBJ = 0x00000006, + DRSUAPI_EXOP_REPL_SECRET = 0x00000007 + } drsuapi_DsExtendedOperation; + + typedef [flag(NDR_PAHEX),v1_enum] enum { + DRSUAPI_EXOP_ERR_NONE = 0x00000000, + DRSUAPI_EXOP_ERR_SUCCESS = 0x00000001, + DRSUAPI_EXOP_ERR_UNKNOWN_OP = 0x00000002, + DRSUAPI_EXOP_ERR_FSMO_NOT_OWNER = 0x00000003, + DRSUAPI_EXOP_ERR_UPDATE_ERR = 0x00000004, + DRSUAPI_EXOP_ERR_EXCEPTION = 0x00000005, + DRSUAPI_EXOP_ERR_UNKNOWN_CALLER = 0x00000006, + DRSUAPI_EXOP_ERR_RID_ALLOC = 0x00000007, + DRSUAPI_EXOP_ERR_FSMO_OWNER_DELETED = 0x00000008, + DRSUAPI_EXOP_ERR_FMSO_PENDING_OP = 0x00000009, + DRSUAPI_EXOP_ERR_MISMATCH = 0x0000000A, + DRSUAPI_EXOP_ERR_COULDNT_CONTACT = 0x0000000B, + DRSUAPI_EXOP_ERR_FSMO_REFUSING_ROLES = 0x0000000C, + DRSUAPI_EXOP_ERR_DIR_ERROR = 0x0000000D, + DRSUAPI_EXOP_ERR_FSMO_MISSING_SETTINGS = 0x0000000E, + DRSUAPI_EXOP_ERR_ACCESS_DENIED = 0x0000000F, + DRSUAPI_EXOP_ERR_PARAM_ERROR = 0x00000010 + } drsuapi_DsExtendedError; + + typedef struct { + GUID destination_dsa_guid; + GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */ + [ref] drsuapi_DsReplicaObjectIdentifier *naming_context; + drsuapi_DsReplicaHighWaterMark highwatermark; + drsuapi_DsReplicaCursorCtrEx *uptodateness_vector; + drsuapi_DrsOptions replica_flags; + uint32 max_object_count; /* w2k3 uses min(133,max(100,max_object_count)) */ + uint32 max_ndr_size; /* w2k3 seems to ignore this */ + drsuapi_DsExtendedOperation extended_op; + hyper fsmo_info; + } drsuapi_DsGetNCChangesRequest5; + + /* + * In DRSUAPI all attributes with syntax 2.5.5.2 + * are identified by uint32 values + * + * the following table shows the mapping used between the two representations + * e.g. - objectClass 'nTDSDSA' has governsID: 1.2.840.113556.1.5.7000.47 + * and a UINT32-ID of '0x0017002F'. + * - so the OID 1.2.840.113556.1.5.7000.47 is split into a + * OID-prefix: 1.2.840.113556.1.5.7000 + * and a value: 47 => 0x2F + * - the mapping table gives a UINT32-prefix: 0x00170000 + * - and the UINT32-ID is 0x0017002F = 0x00170000 | 0x2F + * + * This prefix mapping table is replied in the drsuapi_DsReplicaOIDMapping_Ctr + * array. The following are the default mappings of w2k3 + * + * OID-prefix => UINT32-Id prefix + * + * 2.5.4.* => 0x00000000 (standard attributes RFC2256 core.schema) + * 2.5.6.* => 0x00010000 (standard object classes RFC2256 core.schema) + * 1.2.840.113556.1.2.* => 0x00020000 + * 1.2.840.113556.1.3.* => 0x00030000 + * 2.5.5.* => 0x00080000 (attributeSyntax OID's) + * 1.2.840.113556.1.4.* => 0x00090000 + * 1.2.840.113556.1.5.* => 0x000A0000 + * 2.16.840.1.113730.3.* => 0x00140000 + * 0.9.2342.19200300.100.1.* => 0x00150000 + * 2.16.840.1.113730.3.1.* => 0x00160000 + * 1.2.840.113556.1.5.7000.* => 0x00170000 + * 2.5.21.* => 0x00180000 (attrs for SubSchema) + * 2.5.18.* => 0x00190000 (createTimeStamp,modifyTimeStamp, SubSchema) + * 2.5.20.* => 0x001A0000 + * 1.3.6.1.4.1.1466.101.119.* => 0x001B0000 (dynamicObject, entryTTL) + * 2.16.840.1.113730.3.2.* => 0x001C0000 + * 1.3.6.1.4.1.250.1.* => 0x001D0000 + * 1.2.840.113549.1.9.* => 0x001E0000 (unstructuredAddress,unstructuredName) + * 0.9.2342.19200300.100.4.* => 0x001F0000 + * + * Here's a list of used 'attributeSyntax' OID's + * + * 2.5.5.1 => Object(DS-DN) string + * struct drsuapi_DsObjectIdentifier3 + * + * 2.5.5.2 => OID-string + * => all values are represented as uint32 values in drsuapi + * => governsID, attributeID and attributeSyntax returned as OID-Strings in LDAP + * => mayContain, mustContain and all other attributes with 2.5.5.2 syntax + * are returned as attribute names + * + * 2.5.5.4 => String(Teletex) case-insensitive string with teletex charset + * + * 2.5.5.5 => String(IA5) case-sensitive string + * + * 2.5.5.6 => String(Numeric) + * => eg. internationalISDNNumber + * + * 2.5.5.7 => Object(DN-Binary) B:<byte count>:<bytes>:<object DN> + * => e.g. wellKnownObjects + * + * 2.5.5.8 => BOOL + * + * 2.5.5.9 => int32 + * + * 2.5.5.10 => DATA_BLOB + * => struct GUID + * + * 2.5.5.11 => LDAP timestring + * => NTTIME_1sec + * + * 2.5.5.12 => String(Unicode) case-insensitive string + * => 'standard strings' + * + * 2.5.5.13 => Object(Presentation-Address) string + * => used in objectClass applicationEntity + * + * 2.5.5.14 => Object(DN-String) S:<char count>:<string>:<object DN> + * => not used + * + * 2.5.5.15 => ntSecurityDescriptor + * + * 2.5.5.16 => int64 + * + * 2.5.5.17 => dom_sid + */ + typedef [noprint] struct { + [range(0,10000)] uint32 length; + [size_is(length)] uint8 *binary_oid; /* partial-binary-OID encoded with asn1_write_partial_OID_String() */ + } drsuapi_DsReplicaOID; + + typedef struct { + uint32 id_prefix; + drsuapi_DsReplicaOID oid; + } drsuapi_DsReplicaOIDMapping; + + typedef [public] struct { + [range(0,0x100000)] uint32 num_mappings; + [size_is(num_mappings)] drsuapi_DsReplicaOIDMapping *mappings; + } drsuapi_DsReplicaOIDMapping_Ctr; + + typedef [flag(NDR_PAHEX),v1_enum] enum { + DRSUAPI_OBJECTCLASS_top = 0x00010000, + DRSUAPI_OBJECTCLASS_classSchema = 0x0003000d, + DRSUAPI_OBJECTCLASS_attributeSchema = 0x0003000e + } drsuapi_DsObjectClassId; + + typedef [flag(NDR_PAHEX),v1_enum,public] enum { + DRSUAPI_ATTID_objectClass = 0x00000000, + DRSUAPI_ATTID_cn = 0x00000003, + DRSUAPI_ATTID_ou = 0x0000000b, + DRSUAPI_ATTID_description = 0x0000000d, + DRSUAPI_ATTID_member = 0x0000001f, + DRSUAPI_ATTID_distinguishedName = 0x00000031, + DRSUAPI_ATTID_instanceType = 0x00020001, + DRSUAPI_ATTID_whenCreated = 0x00020002, + DRSUAPI_ATTID_possSuperiors = 0x00020008, + DRSUAPI_ATTID_displayName = 0x0002000d, + DRSUAPI_ATTID_hasMasterNCs = 0x0002000e, + DRSUAPI_ATTID_nCName = 0x00020010, + DRSUAPI_ATTID_subClassOf = 0x00020015, + DRSUAPI_ATTID_governsID = 0x00020016, + DRSUAPI_ATTID_mustContain = 0x00020018, + DRSUAPI_ATTID_mayContain = 0x00020019, + DRSUAPI_ATTID_rDNAttId = 0x0002001A, + DRSUAPI_ATTID_attributeID = 0x0002001e, + DRSUAPI_ATTID_attributeSyntax = 0x00020020, + DRSUAPI_ATTID_isSingleValued = 0x00020021, + DRSUAPI_ATTID_rangeLower = 0x00020022, + DRSUAPI_ATTID_rangeUpper = 0x00020023, + DRSUAPI_ATTID_dMDLocation = 0x00020024, + DRSUAPI_ATTID_isDeleted = 0x00020030, + DRSUAPI_ATTID_objectVersion = 0x0002004c, + DRSUAPI_ATTID_invocationId = 0x00020073, + DRSUAPI_ATTID_showInAdvancedViewOnly = 0x000200a9, + DRSUAPI_ATTID_adminDisplayName = 0x000200c2, + DRSUAPI_ATTID_adminDescription = 0x000200e2, + DRSUAPI_ATTID_oMSyntax = 0x000200e7, + DRSUAPI_ATTID_ntSecurityDescriptor = 0x00020119, + DRSUAPI_ATTID_searchFlags = 0x0002014e, + DRSUAPI_ATTID_auxiliaryClass = 0x0002015f, + DRSUAPI_ATTID_lDAPDisplayName = 0x000201cc, + DRSUAPI_ATTID_name = 0x00090001, + DRSUAPI_ATTID_objectGUID = 0x00090002, + DRSUAPI_ATTID_replPropertyMetaData = 0x00090003, + DRSUAPI_ATTID_userAccountControl = 0x00090008, + DRSUAPI_ATTID_badPwdCount = 0x0009000c, + DRSUAPI_ATTID_codePage = 0x00090010, + DRSUAPI_ATTID_countryCode = 0x00090019, + DRSUAPI_ATTID_currentValue = 0x0009001b, + DRSUAPI_ATTID_homeDirectory = 0x0009002c, + DRSUAPI_ATTID_homeDrive = 0x0009002d, + DRSUAPI_ATTID_lastLogoff = 0x00090033, + DRSUAPI_ATTID_lastLogon = 0x00090034, + DRSUAPI_ATTID_dBCSPwd = 0x00090037,/* lmPwdHash */ + DRSUAPI_ATTID_scriptPath = 0x0009003e, + DRSUAPI_ATTID_logonHours = 0x00090040, + DRSUAPI_ATTID_userWorkstations = 0x00090056, + DRSUAPI_ATTID_unicodePwd = 0x0009005a,/* ntPwdHash */ + DRSUAPI_ATTID_ntPwdHistory = 0x0009005e, + DRSUAPI_ATTID_pwdLastSet = 0x00090060, + DRSUAPI_ATTID_primaryGroupID = 0x00090062, + DRSUAPI_ATTID_priorValue = 0x00090064, + DRSUAPI_ATTID_supplementalCredentials = 0x0009007d, + DRSUAPI_ATTID_trustAuthIncoming = 0x00090081, + DRSUAPI_ATTID_trustDirection = 0x00090084, + DRSUAPI_ATTID_trustPartner = 0x00090085, + DRSUAPI_ATTID_trustPosixOffset = 0x00090086, + DRSUAPI_ATTID_trustAuthOutgoing = 0x00090087, + DRSUAPI_ATTID_trustType = 0x00090088, + DRSUAPI_ATTID_userParameters = 0x0009008a, + DRSUAPI_ATTID_profilePath = 0x0009008b, + DRSUAPI_ATTID_operatorCount = 0x00090090, + DRSUAPI_ATTID_objectSid = 0x00090092, + DRSUAPI_ATTID_schemaIDGUID = 0x00090094, + DRSUAPI_ATTID_adminCount = 0x00090096, + DRSUAPI_ATTID_comment = 0x0009009C,/* User-Comment */ + DRSUAPI_ATTID_accountExpires = 0x0009009f, + DRSUAPI_ATTID_lmPwdHistory = 0x000900a0, + DRSUAPI_ATTID_logonCount = 0x000900a9, + DRSUAPI_ATTID_systemPossSuperiors = 0x000900c3, + DRSUAPI_ATTID_systemMayContain = 0x000900c4, + DRSUAPI_ATTID_systemMustContain = 0x000900c5, + DRSUAPI_ATTID_systemAuxiliaryClass = 0x000900c6, + DRSUAPI_ATTID_sAMAccountName = 0x000900dd, + DRSUAPI_ATTID_sAMAccountType = 0x0009012e, + DRSUAPI_ATTID_options = 0x00090133, + DRSUAPI_ATTID_fSMORoleOwner = 0x00090171, + DRSUAPI_ATTID_systemFlags = 0x00090177, + DRSUAPI_ATTID_trustAttributes = 0x000901d6, + DRSUAPI_ATTID_trustParent = 0x000901d7, + DRSUAPI_ATTID_flatName = 0x000901ff, + DRSUAPI_ATTID_serverReference = 0x00090203, + DRSUAPI_ATTID_serverReferenceBL = 0x00090204, + DRSUAPI_ATTID_nonSecurityMember = 0x00090212, + DRSUAPI_ATTID_initialAuthIncoming = 0x0009021b, + DRSUAPI_ATTID_initialAuthOutgoing = 0x0009021c, + DRSUAPI_ATTID_wellKnownObjects = 0x0009026a, + DRSUAPI_ATTID_dNSHostName = 0x0009026b, + DRSUAPI_ATTID_isMemberOfPartialAttributeSet = 0x0009027f, + DRSUAPI_ATTID_managedBy = 0x0009028d, + DRSUAPI_ATTID_userPrincipalName = 0x00090290, + DRSUAPI_ATTID_groupType = 0x000902ee, + DRSUAPI_ATTID_servicePrincipalName = 0x00090303, + DRSUAPI_ATTID_lastKnownParent = 0x0009030d, + DRSUAPI_ATTID_objectCategory = 0x0009030e, + DRSUAPI_ATTID_gPLink = 0x0009037b, + DRSUAPI_ATTID_transportAddressAttribute = 0x0009037f, + DRSUAPI_ATTID_schemaInfo = 0x0009054e, + DRSUAPI_ATTID_msDS_Behavior_Version = 0x000905b3, + DRSUAPI_ATTID_msDS_TrustForestTrustInfo = 0x000906a6, + DRSUAPI_ATTID_msDS_KeyVersionNumber = 0x000906f6, + DRSUAPI_ATTID_msDS_NonMembers = 0x00090701, + DRSUAPI_ATTID_msDS_MembersForAzRole = 0x0009070e, + DRSUAPI_ATTID_msDS_HasDomainNCs = 0x0009071c, + DRSUAPI_ATTID_msDS_hasMasterNCs = 0x0009072c, + DRSUAPI_ATTID_msDS_NeverRevealGroup = 0x00090786, + DRSUAPI_ATTID_msDS_RevealOnDemandGroup = 0x00090788, + DRSUAPI_ATTID_msDS_SupportedEncryptionTypes = 0x000907ab, + DRSUAPI_ATTID_msDS_HostServiceAccount = 0x00090808, + DRSUAPI_ATTID_isRecycled = 0x0009080a, + + DRSUAPI_ATTID_INVALID = 0xFFFFFFFF + } drsuapi_DsAttributeId; + + typedef struct { + [value(1)] uint32 version; + [value(0)] uint32 reserved1; + [range(1,0x100000)] uint32 num_attids; + [size_is(num_attids)] drsuapi_DsAttributeId attids[]; + } drsuapi_DsPartialAttributeSet; + + typedef [public] struct { + GUID destination_dsa_guid; + GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */ + [ref] drsuapi_DsReplicaObjectIdentifier *naming_context; + drsuapi_DsReplicaHighWaterMark highwatermark; + drsuapi_DsReplicaCursorCtrEx *uptodateness_vector; + drsuapi_DrsOptions replica_flags; + uint32 max_object_count; /* w2k3 uses min(133,max(100,max_object_count)) */ + uint32 max_ndr_size; /* w2k3 seems to ignore this */ + drsuapi_DsExtendedOperation extended_op; + hyper fsmo_info; + drsuapi_DsPartialAttributeSet *partial_attribute_set; + drsuapi_DsPartialAttributeSet *partial_attribute_set_ex; + drsuapi_DsReplicaOIDMapping_Ctr mapping_ctr; + } drsuapi_DsGetNCChangesRequest8; + + typedef [public] struct { + GUID destination_dsa_guid; + GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */ + [ref] drsuapi_DsReplicaObjectIdentifier *naming_context; + drsuapi_DsReplicaHighWaterMark highwatermark; + drsuapi_DsReplicaCursorCtrEx *uptodateness_vector; + drsuapi_DrsOptions replica_flags; + uint32 max_object_count; /* w2k3 uses min(133,max(100,max_object_count)) */ + uint32 max_ndr_size; /* w2k3 seems to ignore this */ + drsuapi_DsExtendedOperation extended_op; + hyper fsmo_info; + drsuapi_DsPartialAttributeSet *partial_attribute_set; + drsuapi_DsPartialAttributeSet *partial_attribute_set_ex; + drsuapi_DsReplicaOIDMapping_Ctr mapping_ctr; + drsuapi_DrsMoreOptions more_flags; + } drsuapi_DsGetNCChangesRequest10; + + typedef [switch_type(uint32)] union { + [case(5)] drsuapi_DsGetNCChangesRequest5 req5; + [case(8)] drsuapi_DsGetNCChangesRequest8 req8; + [case(10)] drsuapi_DsGetNCChangesRequest10 req10; + } drsuapi_DsGetNCChangesRequest; + + typedef [public] struct { + GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */ + hyper highest_usn; /* updated after a full replication cycle */ + NTTIME last_sync_success; + } drsuapi_DsReplicaCursor2; + + typedef struct { + [value(2)] uint32 version; + [value(0)] uint32 reserved1; + [range(0,0x100000)] uint32 count; + [value(0)] uint32 reserved2; + [size_is(count)] drsuapi_DsReplicaCursor2 cursors[]; + } drsuapi_DsReplicaCursor2CtrEx; + + /* Generic DATA_BLOB values */ + typedef struct { + [range(0,26214400),value(ndr_size_DATA_BLOB(0,blob,0))] uint32 __ndr_size; + DATA_BLOB *blob; + } drsuapi_DsAttributeValue; + + typedef struct { + [range(0,10485760)] uint32 num_values; + [size_is(num_values)] drsuapi_DsAttributeValue *values; + } drsuapi_DsAttributeValueCtr; + + /* DN String values */ + typedef [public,gensize] struct { + [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3(r, ndr->flags))] uint32 __ndr_size; + [value(ndr_size_dom_sid28(&sid,ndr->flags))] uint32 __ndr_size_sid; + GUID guid; + dom_sid28 sid; + [value(strlen_m(dn))] uint32 __ndr_size_dn; + [charset(UTF16), size_is(__ndr_size_dn+1), length_is(__ndr_size_dn+1)] uint16 *dn; + } drsuapi_DsReplicaObjectIdentifier3; + + typedef [public] struct { + [value(ndr_size_drsuapi_DsReplicaObjectIdentifier3Binary_without_Binary(r, ndr->flags))] uint32 __ndr_size; + [value(ndr_size_dom_sid28(&sid,ndr->flags))] uint32 __ndr_size_sid; + GUID guid; + dom_sid28 sid; + [value(strlen_m(dn))] uint32 __ndr_size_dn; + [charset(UTF16), size_is(__ndr_size_dn+1), length_is(__ndr_size_dn+1)] uint16 *dn; + [value(binary.length + 4)] uint32 __ndr_size_binary; + [flag(NDR_REMAINING)] DATA_BLOB binary; + } drsuapi_DsReplicaObjectIdentifier3Binary; + + typedef [public,noprint] struct { + drsuapi_DsAttributeId attid; + drsuapi_DsAttributeValueCtr value_ctr; + } drsuapi_DsReplicaAttribute; + + typedef struct { + [range(0,1048576)] uint32 num_attributes; + [size_is(num_attributes)] drsuapi_DsReplicaAttribute *attributes; + } drsuapi_DsReplicaAttributeCtr; + + typedef [public] bitmap { + DRSUAPI_DS_REPLICA_OBJECT_FROM_MASTER = 0x00000001, + DRSUAPI_DS_REPLICA_OBJECT_DYNAMIC = 0x00000002, + DRSUAPI_DS_REPLICA_OBJECT_REMOTE_MODIFY = 0x00010000 + } drsuapi_DsReplicaObjectFlags; + + typedef [public] struct { + drsuapi_DsReplicaObjectIdentifier *identifier; + drsuapi_DsReplicaObjectFlags flags; + drsuapi_DsReplicaAttributeCtr attribute_ctr; + } drsuapi_DsReplicaObject; + + typedef struct { + uint32 version; + NTTIME_1sec originating_change_time; + GUID originating_invocation_id; + hyper originating_usn; + } drsuapi_DsReplicaMetaData; + + typedef [public] struct { + [range(0,1048576)] uint32 count; + [size_is(count)] drsuapi_DsReplicaMetaData meta_data[]; + } drsuapi_DsReplicaMetaDataCtr; + + typedef [public,noprint] struct { + drsuapi_DsReplicaObjectListItemEx *next_object; + drsuapi_DsReplicaObject object; + boolean32 is_nc_prefix; + GUID *parent_object_guid; + drsuapi_DsReplicaMetaDataCtr *meta_data_ctr; + } drsuapi_DsReplicaObjectListItemEx; + + typedef [public,gensize] struct { + GUID source_dsa_guid; /* the 'objectGUID' field of the CN=NTDS Settings object */ + GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */ + drsuapi_DsReplicaObjectIdentifier *naming_context; + drsuapi_DsReplicaHighWaterMark old_highwatermark; + drsuapi_DsReplicaHighWaterMark new_highwatermark; + drsuapi_DsReplicaCursorCtrEx *uptodateness_vector; + drsuapi_DsReplicaOIDMapping_Ctr mapping_ctr; + drsuapi_DsExtendedError extended_ret; /* w2k sends the nc_object_count value here */ + uint32 object_count; + /* this +55 is sometimes +56, so I don't know where this comes from... --metze */ + [value(ndr_size_drsuapi_DsGetNCChangesCtr1(r,ndr->flags)+55)] uint32 __ndr_size; + drsuapi_DsReplicaObjectListItemEx *first_object; + boolean32 more_data; + } drsuapi_DsGetNCChangesCtr1; + + /* + * if the DRSUAPI_DS_LINKED_ATTRIBUTE_FLAG_ACTIVE flag + * isn't there it means the value is deleted + */ + typedef [public] bitmap { + DRSUAPI_DS_LINKED_ATTRIBUTE_FLAG_ACTIVE = 0x00000001 + } drsuapi_DsLinkedAttributeFlags; + + typedef [public] struct { + drsuapi_DsReplicaObjectIdentifier *identifier; + drsuapi_DsAttributeId attid; + drsuapi_DsAttributeValue value; + drsuapi_DsLinkedAttributeFlags flags; + NTTIME_1sec originating_add_time; + drsuapi_DsReplicaMetaData meta_data; + } drsuapi_DsReplicaLinkedAttribute; + + /* [MS-DRSR] section 4.1.10.2.11 DRS_MSG_GETCHGREPLY_V6 */ + typedef [public,gensize] struct { + GUID source_dsa_guid; /* the 'objectGUID' field of the CN=NTDS Settings object */ + GUID source_dsa_invocation_id; /* the 'invocationId' field of the CN=NTDS Settings object */ + drsuapi_DsReplicaObjectIdentifier *naming_context; + drsuapi_DsReplicaHighWaterMark old_highwatermark; + drsuapi_DsReplicaHighWaterMark new_highwatermark; + drsuapi_DsReplicaCursor2CtrEx *uptodateness_vector; + drsuapi_DsReplicaOIDMapping_Ctr mapping_ctr; + drsuapi_DsExtendedError extended_ret; + uint32 object_count; + /* this +55 is sometimes +56, so I don't know where this comes from... --metze */ + [value(ndr_size_drsuapi_DsGetNCChangesCtr6(r,ndr->flags)+55)] uint32 __ndr_size; + drsuapi_DsReplicaObjectListItemEx *first_object; + boolean32 more_data; + uint32 nc_object_count; /* estimated amount of objects in the whole NC */ + uint32 nc_linked_attributes_count; /* estimated amount of linked values in the whole NC */ + [range(0,1048576)] uint32 linked_attributes_count; + [size_is(linked_attributes_count)] drsuapi_DsReplicaLinkedAttribute *linked_attributes; + WERROR drs_error; + } drsuapi_DsGetNCChangesCtr6; + + typedef [public] struct { + drsuapi_DsGetNCChangesCtr1 ctr1; + } drsuapi_DsGetNCChangesCtr1TS; + + typedef [public] struct { + drsuapi_DsGetNCChangesCtr6 ctr6; + } drsuapi_DsGetNCChangesCtr6TS; + + typedef [nopush] struct { + uint32 decompressed_length; + uint32 compressed_length; + [subcontext(4),subcontext_size(compressed_length), + compression(NDR_COMPRESSION_MSZIP,compressed_length,decompressed_length)] + drsuapi_DsGetNCChangesCtr1TS *ts; + } drsuapi_DsGetNCChangesMSZIPCtr1; + + typedef [nopush] struct { + uint32 decompressed_length; + uint32 compressed_length; + [subcontext(4),subcontext_size(compressed_length), + compression(NDR_COMPRESSION_MSZIP,compressed_length,decompressed_length)] + drsuapi_DsGetNCChangesCtr6TS *ts; + } drsuapi_DsGetNCChangesMSZIPCtr6; + + typedef [nopush] struct { + uint32 decompressed_length; + uint32 compressed_length; + [subcontext(4),subcontext_size(compressed_length), + compression(NDR_COMPRESSION_WIN2K3_LZ77_DIRECT2,compressed_length,decompressed_length)] + drsuapi_DsGetNCChangesCtr1TS *ts; + } drsuapi_DsGetNCChangesWIN2K3_LZ77_DIRECT2Ctr1; + + typedef [nopush] struct { + uint32 decompressed_length; + uint32 compressed_length; + [subcontext(4),subcontext_size(compressed_length), + compression(NDR_COMPRESSION_WIN2K3_LZ77_DIRECT2,compressed_length,decompressed_length)] + drsuapi_DsGetNCChangesCtr6TS *ts; + } drsuapi_DsGetNCChangesWIN2K3_LZ77_DIRECT2Ctr6; + + typedef [enum16bit] enum { + DRSUAPI_COMPRESSION_TYPE_MSZIP = 2, + DRSUAPI_COMPRESSION_TYPE_WIN2K3_LZ77_DIRECT2 = 3 /* CompressOrDecompressWin2k3 DRS_COMP_ALG_WIN2K3 */ + } drsuapi_DsGetNCChangesCompressionType; + + typedef [nodiscriminant,flag(NDR_PAHEX)] union { + [case(1|(DRSUAPI_COMPRESSION_TYPE_MSZIP<<16))] drsuapi_DsGetNCChangesMSZIPCtr1 mszip1; + [case(6|(DRSUAPI_COMPRESSION_TYPE_MSZIP<<16))] drsuapi_DsGetNCChangesMSZIPCtr6 mszip6; + [case(1|(DRSUAPI_COMPRESSION_TYPE_WIN2K3_LZ77_DIRECT2<<16))] drsuapi_DsGetNCChangesWIN2K3_LZ77_DIRECT2Ctr1 xpress1; + [case(6|(DRSUAPI_COMPRESSION_TYPE_WIN2K3_LZ77_DIRECT2<<16))] drsuapi_DsGetNCChangesWIN2K3_LZ77_DIRECT2Ctr6 xpress6; + } drsuapi_DsGetNCChangesCompressedCtr; + + typedef struct { + drsuapi_DsGetNCChangesMSZIPCtr1 mszip1; + } drsuapi_DsGetNCChangesCtr2; + + typedef struct { + [range(0,6)] uint32 level; + [range(2,3)] drsuapi_DsGetNCChangesCompressionType type; + [switch_is(level | (type<<16))] drsuapi_DsGetNCChangesCompressedCtr ctr; + } drsuapi_DsGetNCChangesCtr7; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsGetNCChangesCtr1 ctr1; + [case(2)] drsuapi_DsGetNCChangesCtr2 ctr2; + [case(6)] drsuapi_DsGetNCChangesCtr6 ctr6; + [case(7)] drsuapi_DsGetNCChangesCtr7 ctr7; + } drsuapi_DsGetNCChangesCtr; + + WERROR drsuapi_DsGetNCChanges( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in,ref,switch_is(level)] drsuapi_DsGetNCChangesRequest *req, + [out,ref] uint32 *level_out, + [out,ref,switch_is(*level_out)] drsuapi_DsGetNCChangesCtr *ctr + ); + + /*****************/ + /* Function 0x04 */ + /* [MS-DRSR] 4.1.26 */ + + typedef struct { + [ref] drsuapi_DsReplicaObjectIdentifier *naming_context; + [ref,charset(DOS),string] uint8 *dest_dsa_dns_name; + GUID dest_dsa_guid; + drsuapi_DrsOptions options; + } drsuapi_DsReplicaUpdateRefsRequest1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsReplicaUpdateRefsRequest1 req1; + } drsuapi_DsReplicaUpdateRefsRequest; + + WERROR drsuapi_DsReplicaUpdateRefs( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in,switch_is(level)] drsuapi_DsReplicaUpdateRefsRequest req + ); + + /*****************/ + /* Function 0x05 */ + + typedef struct { + [ref] drsuapi_DsReplicaObjectIdentifier *naming_context; + [charset(UTF16),string] uint16 *source_dsa_address; + uint8 schedule[84]; + drsuapi_DrsOptions options; + } drsuapi_DsReplicaAddRequest1; + + typedef struct { + [ref] drsuapi_DsReplicaObjectIdentifier *naming_context; + drsuapi_DsReplicaObjectIdentifier *source_dsa_dn; + drsuapi_DsReplicaObjectIdentifier *transport_dn; + [charset(UTF16),string] uint16 *source_dsa_address; + uint8 schedule[84]; + drsuapi_DrsOptions options; + } drsuapi_DsReplicaAddRequest2; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsReplicaAddRequest1 req1; + [case(2)] drsuapi_DsReplicaAddRequest2 req2; + } drsuapi_DsReplicaAddRequest; + + WERROR drsuapi_DsReplicaAdd( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in,switch_is(level)] drsuapi_DsReplicaAddRequest req + ); + + /*****************/ + /* Function 0x06 */ + typedef struct { + [ref] drsuapi_DsReplicaObjectIdentifier *naming_context; + [charset(UTF8), string] uint8 *source_dsa_address; + drsuapi_DrsOptions options; + } drsuapi_DsReplicaDelRequest1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsReplicaDelRequest1 req1; + } drsuapi_DsReplicaDelRequest; + + WERROR drsuapi_DsReplicaDel( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in,switch_is(level)] drsuapi_DsReplicaDelRequest req + ); + + /*****************/ + /* Function 0x07 */ + + typedef struct { + [ref] drsuapi_DsReplicaObjectIdentifier *naming_context; + GUID source_dra; + [charset(UTF16),string] uint16 *source_dra_address; + uint8 schedule[84]; + drsuapi_DrsOptions replica_flags; + uint32 modify_fields; + drsuapi_DrsOptions options; + } drsuapi_DsReplicaModRequest1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsReplicaModRequest1 req1; + } drsuapi_DsReplicaModRequest; + + WERROR drsuapi_DsReplicaMod( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in,switch_is(level)] drsuapi_DsReplicaModRequest req + ); + + /*****************/ + /* Function 0x08 */ + [todo] WERROR DRSUAPI_VERIFY_NAMES(); + + /*****************/ + /* Function 0x09 */ + + /* how are type 4 and 7 different from 2 and 3 ? */ + typedef [v1_enum] enum { + DRSUAPI_DS_MEMBERSHIP_TYPE_UNIVERSAL_AND_DOMAIN_GROUPS = 1, + DRSUAPI_DS_MEMBERSHIP_TYPE_DOMAIN_LOCAL_GROUPS = 2, + DRSUAPI_DS_MEMBERSHIP_TYPE_DOMAIN_GROUPS = 3, + DRSUAPI_DS_MEMBERSHIP_TYPE_DOMAIN_LOCAL_GROUPS2 = 4, + DRSUAPI_DS_MEMBERSHIP_TYPE_UNIVERSAL_GROUPS = 5, + DRSUAPI_DS_MEMBERSHIP_TYPE_GROUPMEMBERS = 6, + DRSUAPI_DS_MEMBERSHIP_TYPE_DOMAIN_GROUPS2 = 7 + } drsuapi_DsMembershipType; + + typedef struct { + NTSTATUS status; + [range(0,10000)] uint32 num_memberships; + [range(0,10000)] uint32 num_sids; + [size_is(num_memberships)] drsuapi_DsReplicaObjectIdentifier **info_array; + [size_is(num_memberships)] security_GroupAttrs *group_attrs; + [size_is(num_sids)] dom_sid28 **sids; + } drsuapi_DsGetMembershipsCtr1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsGetMembershipsCtr1 ctr1; + } drsuapi_DsGetMembershipsCtr; + + const int DRSUAPI_DS_MEMBERSHIP_FLAG_GROUP_ATTR = 0x1; + + typedef struct { + [range(1,10000)] uint32 count; + [size_is(count)] drsuapi_DsReplicaObjectIdentifier **info_array; + uint32 flags; + [range(1,7)] drsuapi_DsMembershipType type; + drsuapi_DsReplicaObjectIdentifier *domain; + } drsuapi_DsGetMembershipsRequest1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsGetMembershipsRequest1 req1; + } drsuapi_DsGetMembershipsRequest; + + WERROR drsuapi_DsGetMemberships( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in,ref] [switch_is(level)] drsuapi_DsGetMembershipsRequest *req, + [out,ref] uint32 *level_out, + [out,ref] [switch_is(*level_out)] drsuapi_DsGetMembershipsCtr *ctr + ); + + /*****************/ + /* Function 0x0a */ + [todo] WERROR DRSUAPI_INTER_DOMAIN_MOVE(); + + /*****************/ + /* Function 0x0b */ + typedef [bitmap32bit] bitmap { + DRSUAPI_NT4_CHANGELOG_GET_CHANGELOG = 0x00000001, + DRSUAPI_NT4_CHANGELOG_GET_SERIAL_NUMBERS = 0x00000002 + } drsuapi_DsGetNT4ChangeLogFlags; + + typedef struct { + drsuapi_DsGetNT4ChangeLogFlags flags; + uint32 preferred_maximum_length; + [range(0,0x00A00000)] uint32 restart_length; + [size_is(restart_length)] uint8 *restart_data; + } drsuapi_DsGetNT4ChangeLogRequest1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsGetNT4ChangeLogRequest1 req1; + } drsuapi_DsGetNT4ChangeLogRequest; + + typedef struct { + [range(0,0x00A00000)] uint32 restart_length; + [range(0,0x00A00000)] uint32 log_length; + hyper sam_serial_number; + NTTIME sam_creation_time; + hyper builtin_serial_number; + NTTIME builtin_creation_time; + hyper lsa_serial_number; + NTTIME lsa_creation_time; + NTSTATUS status; + [size_is(restart_length)] uint8 *restart_data; + [size_is(log_length)] uint8 *log_data; + } drsuapi_DsGetNT4ChangeLogInfo1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsGetNT4ChangeLogInfo1 info1; + } drsuapi_DsGetNT4ChangeLogInfo; + + WERROR drsuapi_DsGetNT4ChangeLog( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in,ref] [switch_is(level)] drsuapi_DsGetNT4ChangeLogRequest *req, + [out,ref] uint32 *level_out, + [out,ref] [switch_is(*level_out)] drsuapi_DsGetNT4ChangeLogInfo *info + ); + + /*****************/ + /* Function 0x0c */ + typedef [v1_enum] enum { + DRSUAPI_DS_NAME_STATUS_OK = 0, + DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR = 1, + DRSUAPI_DS_NAME_STATUS_NOT_FOUND = 2, + DRSUAPI_DS_NAME_STATUS_NOT_UNIQUE = 3, + DRSUAPI_DS_NAME_STATUS_NO_MAPPING = 4, + DRSUAPI_DS_NAME_STATUS_DOMAIN_ONLY = 5, + DRSUAPI_DS_NAME_STATUS_NO_SYNTACTICAL_MAPPING = 6, + DRSUAPI_DS_NAME_STATUS_TRUST_REFERRAL = 7 + } drsuapi_DsNameStatus; + + typedef [v1_enum] enum { + DRSUAPI_DS_NAME_FLAG_NO_FLAGS = 0x0, + DRSUAPI_DS_NAME_FLAG_SYNTACTICAL_ONLY = 0x1, + DRSUAPI_DS_NAME_FLAG_EVAL_AT_DC = 0x2, + DRSUAPI_DS_NAME_FLAG_GCVERIFY = 0x4, + DRSUAPI_DS_NAME_FLAG_TRUST_REFERRAL = 0x8 + } drsuapi_DsNameFlags; + + typedef [v1_enum] enum { + DRSUAPI_DS_NAME_FORMAT_UNKNOWN = 0x00000000, + DRSUAPI_DS_NAME_FORMAT_FQDN_1779 = 0x00000001, + DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT = 0x00000002, + DRSUAPI_DS_NAME_FORMAT_DISPLAY = 0x00000003, + DRSUAPI_DS_NAME_FORMAT_GUID = 0x00000006, + DRSUAPI_DS_NAME_FORMAT_CANONICAL = 0x00000007, + DRSUAPI_DS_NAME_FORMAT_USER_PRINCIPAL = 0x00000008, + DRSUAPI_DS_NAME_FORMAT_CANONICAL_EX = 0x00000009, + DRSUAPI_DS_NAME_FORMAT_SERVICE_PRINCIPAL = 0x0000000A, + DRSUAPI_DS_NAME_FORMAT_SID_OR_SID_HISTORY = 0x0000000B, + DRSUAPI_DS_NAME_FORMAT_DNS_DOMAIN = 0x0000000C, + DRSUAPI_DS_NAME_FORMAT_UPN_AND_ALTSECID = 0xFFFFFFEF, + DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT_NAME_SANS_DOMAIN_EX = 0xFFFFFFF0, + DRSUAPI_DS_NAME_FORMAT_LIST_GLOBAL_CATALOG_SERVERS = 0xFFFFFFF1, + DRSUAPI_DS_NAME_FORMAT_UPN_FOR_LOGON = 0xFFFFFFF2, + DRSUAPI_DS_NAME_FORMAT_LIST_SERVERS_WITH_DCS_IN_SITE = 0xFFFFFFF3, + DRSUAPI_DS_NAME_FORMAT_STRING_SID_NAME = 0xFFFFFFF4, + DRSUAPI_DS_NAME_FORMAT_ALT_SECURITY_IDENTITIES_NAME = 0xFFFFFFF5, + DRSUAPI_DS_NAME_FORMAT_LIST_NCS = 0xFFFFFFF6, + DRSUAPI_DS_NAME_FORMAT_LIST_DOMAINS = 0xFFFFFFF7, + DRSUAPI_DS_NAME_FORMAT_MAP_SCHEMA_GUID = 0xFFFFFFF8, + DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT_NAME_SANS_DOMAIN = 0xFFFFFFF9, + DRSUAPI_DS_NAME_FORMAT_LIST_ROLES = 0xFFFFFFFA, + DRSUAPI_DS_NAME_FORMAT_LIST_INFO_FOR_SERVER = 0xFFFFFFFB, + DRSUAPI_DS_NAME_FORMAT_LIST_SERVERS_FOR_DOMAIN_IN_SITE = 0xFFFFFFFC, + DRSUAPI_DS_NAME_FORMAT_LIST_DOMAINS_IN_SITE = 0xFFFFFFFD, + DRSUAPI_DS_NAME_FORMAT_LIST_SERVERS_IN_SITE = 0xFFFFFFFE, + DRSUAPI_DS_NAME_FORMAT_LIST_SITES = 0xFFFFFFFF + } drsuapi_DsNameFormat; + + typedef struct { + [string,charset(UTF16)] uint16 *str; + } drsuapi_DsNameString; + + typedef struct { + uint32 codepage; /* 0x000004e4 - 1252 is german codepage*/ + uint32 language; /* 0x00000407 - german language ID*/ + drsuapi_DsNameFlags format_flags; + drsuapi_DsNameFormat format_offered; + drsuapi_DsNameFormat format_desired; + [range(1,10000)] uint32 count; + [size_is(count)] drsuapi_DsNameString *names; + } drsuapi_DsNameRequest1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsNameRequest1 req1; + } drsuapi_DsNameRequest; + + typedef struct { + drsuapi_DsNameStatus status; + [charset(UTF16),string] uint16 *dns_domain_name; + [charset(UTF16),string] uint16 *result_name; + } drsuapi_DsNameInfo1; + + typedef struct { + uint32 count; + [size_is(count)] drsuapi_DsNameInfo1 *array; + } drsuapi_DsNameCtr1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsNameCtr1 *ctr1; + } drsuapi_DsNameCtr; + + WERROR drsuapi_DsCrackNames( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in,ref,switch_is(level)] drsuapi_DsNameRequest *req, + [out,ref] uint32 *level_out, + [out,ref,switch_is(*level_out)] drsuapi_DsNameCtr *ctr + ); + + /*****************/ + /* Function 0x0d */ + typedef [v1_enum] enum { + DRSUAPI_DS_SPN_OPERATION_ADD = 0, + DRSUAPI_DS_SPN_OPERATION_REPLACE= 1, + DRSUAPI_DS_SPN_OPERATION_DELETE = 2 + } drsuapi_DsSpnOperation; + + typedef struct { + drsuapi_DsSpnOperation operation; + uint32 unknown1; + [charset(UTF16),string] uint16 *object_dn; + [range(0,10000)] uint32 count; + [size_is(count)] drsuapi_DsNameString *spn_names; + } drsuapi_DsWriteAccountSpnRequest1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsWriteAccountSpnRequest1 req1; + } drsuapi_DsWriteAccountSpnRequest; + + typedef struct { + WERROR status; + } drsuapi_DsWriteAccountSpnResult1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsWriteAccountSpnResult1 res1; + } drsuapi_DsWriteAccountSpnResult; + + WERROR drsuapi_DsWriteAccountSpn( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in,ref,switch_is(level)] drsuapi_DsWriteAccountSpnRequest *req, + [out,ref] uint32 *level_out, + [out,ref,switch_is(*level_out)] drsuapi_DsWriteAccountSpnResult *res + ); + + /*****************/ + /* Function 0x0e */ + typedef struct { + [charset(UTF16),string] uint16 *server_dn; + [charset(UTF16),string] uint16 *domain_dn; + boolean32 commit; + } drsuapi_DsRemoveDSServerRequest1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsRemoveDSServerRequest1 req1; + } drsuapi_DsRemoveDSServerRequest; + + typedef struct { + boolean32 last_dc_in_domain; + } drsuapi_DsRemoveDSServerResult1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsRemoveDSServerResult1 res1; + } drsuapi_DsRemoveDSServerResult; + + WERROR drsuapi_DsRemoveDSServer( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in,ref,switch_is(level)] drsuapi_DsRemoveDSServerRequest *req, + [out,ref] uint32 *level_out, + [out,ref,switch_is(*level_out)] drsuapi_DsRemoveDSServerResult *res + ); + + /*****************/ + /* Function 0x0f */ + [todo] WERROR DRSUAPI_REMOVE_DS_DOMAIN(); + + /*****************/ + /* Function 0x10 */ + typedef [v1_enum] enum { + DRSUAPI_DC_INFO_CTR_1 = 1, + DRSUAPI_DC_INFO_CTR_2 = 2, + DRSUAPI_DC_INFO_CTR_3 = 3, + DRSUAPI_DC_CONNECTION_CTR_01 = 0xFFFFFFFF + } drsuapi_DsGetDCInfoCtrLevels; + + typedef struct { + [charset(UTF16),string] uint16 *domain_name; /* netbios or dns */ + drsuapi_DsGetDCInfoCtrLevels level; /* specifies the switch level for the request */ + } drsuapi_DsGetDCInfoRequest1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsGetDCInfoRequest1 req1; + } drsuapi_DsGetDCInfoRequest; + + typedef struct { + [charset(UTF16),string] uint16 *netbios_name; + [charset(UTF16),string] uint16 *dns_name; + [charset(UTF16),string] uint16 *site_name; + [charset(UTF16),string] uint16 *computer_dn; + [charset(UTF16),string] uint16 *server_dn; + uint32 is_pdc; + uint32 is_enabled; + } drsuapi_DsGetDCInfo1; + + typedef struct { + [range(0,10000)] uint32 count; + [size_is(count)] drsuapi_DsGetDCInfo1 *array; + } drsuapi_DsGetDCInfoCtr1; + + typedef struct { + [charset(UTF16),string] uint16 *netbios_name; + [charset(UTF16),string] uint16 *dns_name; + [charset(UTF16),string] uint16 *site_name; + [charset(UTF16),string] uint16 *site_dn; + [charset(UTF16),string] uint16 *computer_dn; + [charset(UTF16),string] uint16 *server_dn; + [charset(UTF16),string] uint16 *ntds_dn; + uint32 is_pdc; + uint32 is_enabled; + uint32 is_gc; + GUID site_guid; + GUID computer_guid; + GUID server_guid; + GUID ntds_guid; + } drsuapi_DsGetDCInfo2; + + typedef struct { + [range(0,10000)] uint32 count; + [size_is(count)] drsuapi_DsGetDCInfo2 *array; + } drsuapi_DsGetDCInfoCtr2; + + typedef struct { + [charset(UTF16),string] uint16 *netbios_name; + [charset(UTF16),string] uint16 *dns_name; + [charset(UTF16),string] uint16 *site_name; + [charset(UTF16),string] uint16 *site_dn; + [charset(UTF16),string] uint16 *computer_dn; + [charset(UTF16),string] uint16 *server_dn; + [charset(UTF16),string] uint16 *ntds_dn; + uint32 is_pdc; + uint32 is_enabled; + uint32 is_gc; + uint32 is_rodc; + GUID site_guid; + GUID computer_guid; + GUID server_guid; + GUID ntds_guid; + } drsuapi_DsGetDCInfo3; + + typedef struct { + [range(0,10000)] uint32 count; + [size_is(count)] drsuapi_DsGetDCInfo3 *array; + } drsuapi_DsGetDCInfoCtr3; + + /* + * this represents an active connection to the + * Directory System Agent (DSA) + * this can be via LDAP or DRSUAPI + */ + typedef struct { + [flag(NDR_BIG_ENDIAN)] ipv4address client_ip_address; + uint32 unknown2; + uint32 connection_time; /* in seconds */ + uint32 unknown4; + uint32 unknown5; + uint32 unknown6; + /* + * client_account can be the following: + * "W2K3\Administrator" + * "Administrator@W2K3" + * "cn=Administrator,cn=Users,DC=w2k3,DC=vmnet1,DC=vm,DC=base" + * "" + * or NULL + */ + [charset(UTF16),string] uint16 *client_account; + } drsuapi_DsGetDCConnection01; + + typedef struct { + [range(0,10000)] uint32 count; + [size_is(count)] drsuapi_DsGetDCConnection01 *array; + } drsuapi_DsGetDCConnectionCtr01; + + typedef [switch_type(drsuapi_DsGetDCInfoCtrLevels)] union { + [case(DRSUAPI_DC_INFO_CTR_1)] drsuapi_DsGetDCInfoCtr1 ctr1; + [case(DRSUAPI_DC_INFO_CTR_2)] drsuapi_DsGetDCInfoCtr2 ctr2; + [case(DRSUAPI_DC_INFO_CTR_3)] drsuapi_DsGetDCInfoCtr3 ctr3; + [case(DRSUAPI_DC_CONNECTION_CTR_01)] drsuapi_DsGetDCConnectionCtr01 ctr01; + } drsuapi_DsGetDCInfoCtr; + + WERROR drsuapi_DsGetDomainControllerInfo( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in,ref,switch_is(level)] drsuapi_DsGetDCInfoRequest *req, + [out,ref] drsuapi_DsGetDCInfoCtrLevels *level_out, + [out,ref,switch_is(*level_out)] drsuapi_DsGetDCInfoCtr *ctr + ); + + /*****************/ + /* Function 0x11 */ + typedef [public,noprint] struct { + drsuapi_DsReplicaObjectListItem *next_object; + drsuapi_DsReplicaObject object; + } drsuapi_DsReplicaObjectListItem; + + /* + * The DsAddEntry() call which creates a nTDSDSA object, + * also adds a servicePrincipalName in the following form + * to the computer account of the new domain controller + * referenced by the "serverReferenece" attribute. + * + * E3514235-4B06-11D1-AB04-00C04FC2DCD2/<new-ntdsdsa-object-guid-as-string>/<domain-dns-name> + * + * also note that the "serverReference" isn't added to the new object! + */ + const char *DRSUAPI_NTDSDSA_KRB5_SERVICE_GUID = "E3514235-4B06-11D1-AB04-00C04FC2DCD2"; + + /* Error codes to classify an error that occurs + * during a search for, or the update of, + * a directory object */ + typedef [v1_enum] enum { + DRSUAPI_DIRERR_OK = 0, + DRSUAPI_DIRERR_ATTRIBUTE = 1, + DRSUAPI_DIRERR_NAME = 2, + DRSUAPI_DIRERR_REFERRAL = 3, + DRSUAPI_DIRERR_SECURITY = 4, + DRSUAPI_DIRERR_SERVICE = 5, + DRSUAPI_DIRERR_UPDATE = 6, + DRSUAPI_DIRERR_SYSTEM = 7 + } drsuapi_DsAddEntry_DirErr; + + /* + * Ref: DRS_MSG_ADDENTRYREQ_V2, [MS-DRSR]: 4.1.1.1.3 + */ + typedef struct { + drsuapi_DsReplicaObjectListItem first_object; + } drsuapi_DsAddEntryRequest2; + + /* Buffer type is actually more + * like a semi Flags + * Ref: DRS_SecBuffer, [MS-DRSR]: 5.41 */ + typedef [v1_enum,noprint] enum { + DRSUAPI_SECBUFFER_EMPTY = 0x00000000, + DRSUAPI_SECBUFFER_DATA = 0x00000001, + DRSUAPI_SECBUFFER_TOKEN = 0x00000002, + DRSUAPI_SECBUFFER_PKG_PARAMS = 0x00000003, + DRSUAPI_SECBUFFER_MISSING = 0x00000004, + DRSUAPI_SECBUFFER_EXTRA = 0x00000005, + DRSUAPI_SECBUFFER_STREAM_TRAILER = 0x00000006, + DRSUAPI_SECBUFFER_STREAM_HEADER = 0x00000007, + DRSUAPI_SECBUFFER_READONLY = 0x80000000 + } drsuapi_SecBufferType; + + typedef struct { + [range(0,10000)] uint32 buf_size; + drsuapi_SecBufferType buf_type; + [size_is(buf_size)] uint8 *buffer; + } drsuapi_SecBuffer; + + typedef struct { + [value(0)] uint32 version; + [range(0,10000)] uint32 buff_count; + [size_is(buff_count)] drsuapi_SecBuffer *buffers; + } drsuapi_SecBufferDesc; + + /* + * Ref: DRS_MSG_ADDENTRYREQ_V3, [MS-DRSR]: 4.1.1.1.4 + */ + typedef struct { + drsuapi_DsReplicaObjectListItem first_object; + drsuapi_SecBufferDesc *client_creds; + } drsuapi_DsAddEntryRequest3; + + typedef [switch_type(uint32)] union { + [case(2)] drsuapi_DsAddEntryRequest2 req2; + [case(3)] drsuapi_DsAddEntryRequest3 req3; + } drsuapi_DsAddEntryRequest; + + /* Generic extended error info + * commonly used in most places + * where rich error info is returned */ + typedef struct { + uint32 dsid; /* implementation-specific diagnostic code */ + WERROR extended_err; /* 0, STATUS code, or Windows error code */ + uint32 extended_data; /* implementation-specific diagnostic code */ + uint16 problem; /* 0 or PROBLEM error code */ + } drsuapi_DsAddEntryErrorInfoX; + + /* Attribute errors + * Ref: ATRERR_DRS_WIRE_V1, [MS-DRSR]: 4.1.1.1.11 */ + typedef struct { + uint32 dsid; + WERROR extended_err; + uint32 extended_data; + uint16 problem; + drsuapi_DsAttributeId attid; + boolean32 is_val_returned; + drsuapi_DsAttributeValue attr_val; + } drsuapi_DsAddEntry_AttrErr_V1; + + typedef [noprint] struct { + drsuapi_DsAddEntry_AttrErrListItem_V1 *next; + drsuapi_DsAddEntry_AttrErr_V1 err_data; + } drsuapi_DsAddEntry_AttrErrListItem_V1; + + typedef struct { + drsuapi_DsReplicaObjectIdentifier *id; + uint32 count; + drsuapi_DsAddEntry_AttrErrListItem_V1 first; + } drsuapi_DsAddEntryErrorInfo_Attr_V1; + + /* Name resolution error + * Ref: NAMERR_DRS_WIRE_V1, [MS-DRSR]: 4.1.1.1.14 */ + typedef struct { + uint32 dsid; + WERROR extended_err; + uint32 extended_data; + uint16 problem; + drsuapi_DsReplicaObjectIdentifier *id_matched; /* The best match for the supplied object identity */ + } drsuapi_DsAddEntryErrorInfo_Name_V1; + + /* Referral error + * Ref: REFERR_DRS_WIRE_V1, [MS-DRSR]: 4.1.1.1.15 */ + typedef struct { + [value(83)] uint8 name_res; /* Must be 'S' */ + [value(0)] uint8 unused_pad; + [value(0)] uint16 next_rdn; + } drsuapi_NameResOp_V1; + + typedef [enum16bit] enum { + DRSUAPI_CH_REFTYPE_SUPERIOR = 0x0000, /* referral to a superior DC */ + DRSUAPI_CH_REFTYPE_SUBORDINATE = 0x0001, /* referral to a subordinate DC */ + DRSUAPI_CH_REFTYPE_NSSR = 0x0002, /* Not used */ + DRSUAPI_CH_REFTYPE_CROSS = 0x0003 /* A referral to an external crossRef object */ + } drsuapi_DsAddEntry_RefType; + + typedef [enum8bit] enum { + DRSUAPI_SE_CHOICE_BASE_ONLY = 0x00, + DRSUAPI_SE_CHOICE_IMMED_CHLDRN = 0x01, + DRSUAPI_SE_CHOICE_WHOLE_SUBTREE = 0x02 + } drsuapi_DsAddEntry_ChoiceType; + + /* list of network names of the DCs + * to which the referral is directed */ + typedef struct { + drsuapi_DsaAddressListItem_V1 *next; + lsa_String *address; + } drsuapi_DsaAddressListItem_V1; + + typedef struct { + drsuapi_DsReplicaObjectIdentifier *id_target; /* object to which the referral is directed */ + drsuapi_NameResOp_V1 op_state; + [value(0)] uint16 rdn_alias; + [value(0)] uint16 rdn_internal; + drsuapi_DsAddEntry_RefType ref_type; + uint16 addr_list_count; + drsuapi_DsaAddressListItem_V1 *addr_list; + drsuapi_DsAddEntry_RefErrListItem_V1 *next; + boolean32 is_choice_set; + drsuapi_DsAddEntry_ChoiceType choice; + } drsuapi_DsAddEntry_RefErrListItem_V1; + + typedef struct { + uint32 dsid; + WERROR extended_err; + uint32 extended_data; + drsuapi_DsAddEntry_RefErrListItem_V1 refer; + } drsuapi_DsAddEntryErrorInfo_Referr_V1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsAddEntryErrorInfo_Attr_V1 attr_err; + [case(2)] drsuapi_DsAddEntryErrorInfo_Name_V1 name_err; + [case(3)] drsuapi_DsAddEntryErrorInfo_Referr_V1 referral_err; + [case(4)] drsuapi_DsAddEntryErrorInfoX security_err; + [case(5)] drsuapi_DsAddEntryErrorInfoX service_err; + [case(6)] drsuapi_DsAddEntryErrorInfoX update_err; + [case(7)] drsuapi_DsAddEntryErrorInfoX system_err; + } drsuapi_DsAddEntryErrorInfo; + + typedef struct { + WERROR status; + drsuapi_DsAddEntry_DirErr dir_err; + [switch_is(dir_err)] drsuapi_DsAddEntryErrorInfo info; /* FIXME */ + } drsuapi_DsAddEntry_ErrData_V1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsAddEntry_ErrData_V1 v1; + } drsuapi_DsAddEntry_ErrData; + + typedef struct { + GUID guid; + dom_sid28 sid; + } drsuapi_DsReplicaObjectIdentifier2; + + typedef struct { + drsuapi_DsReplicaObjectIdentifier *id; + drsuapi_DsAddEntry_DirErr dir_err; + uint32 dsid; /* implementation-specific diagnostic code */ + WERROR extended_err; /* 0, STATUS code, or Windows error code */ + uint32 extended_data; /* implementation-specific diagnostic code */ + uint16 problem; /* 0 or PROBLEM error code */ + [range(0,10000)] uint32 count; + [size_is(count)] drsuapi_DsReplicaObjectIdentifier2 *objects; + } drsuapi_DsAddEntryCtr2; + + typedef struct { + drsuapi_DsReplicaObjectIdentifier *id; + uint32 err_ver; /* Must be 1 */ + [switch_is(err_ver)] drsuapi_DsAddEntry_ErrData err_data; /* FIXME */ + [range(0,10000)] uint32 count; + [size_is(count)] drsuapi_DsReplicaObjectIdentifier2 *objects; + } drsuapi_DsAddEntryCtr3; + + typedef [switch_type(uint32)] union { + [case(2)] drsuapi_DsAddEntryCtr2 ctr2; + [case(3)] drsuapi_DsAddEntryCtr3 ctr3; + } drsuapi_DsAddEntryCtr; + + [public] WERROR drsuapi_DsAddEntry( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in,ref,switch_is(level)] drsuapi_DsAddEntryRequest *req, + [out,ref] uint32 *level_out, + [out,ref,switch_is(*level_out)] drsuapi_DsAddEntryCtr *ctr + ); + + /*****************/ + /* Function 0x12 */ + typedef bitmap { + DRSUAPI_DS_EXECUTE_KCC_ASYNCHRONOUS_OPERATION = 0x00000001, + DRSUAPI_DS_EXECUTE_KCC_DAMPED = 0x00000002 + } drsuapi_DsExecuteKCCFlags; + + typedef struct { + uint32 taskID; + drsuapi_DsExecuteKCCFlags flags; + } drsuapi_DsExecuteKCC1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsExecuteKCC1 ctr1; + } drsuapi_DsExecuteKCCRequest; + + WERROR drsuapi_DsExecuteKCC( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in, ref, switch_is(level)] drsuapi_DsExecuteKCCRequest *req + ); + + /*****************/ + /* Function 0x13 */ + typedef [v1_enum] enum { + DRSUAPI_DS_REPLICA_GET_INFO = 1, + DRSUAPI_DS_REPLICA_GET_INFO2 = 2 + } drsuapi_DsReplicaGetInfoLevel; + + typedef [v1_enum] enum { + DRSUAPI_DS_REPLICA_INFO_NEIGHBORS = 0, + DRSUAPI_DS_REPLICA_INFO_CURSORS = 1, + DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA = 2, + DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES = 3, + DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES = 4, + DRSUAPI_DS_REPLICA_INFO_PENDING_OPS = 5, + DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA = 6, + DRSUAPI_DS_REPLICA_INFO_CURSORS2 = 7, + DRSUAPI_DS_REPLICA_INFO_CURSORS3 = 8, + DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2 = 9, + DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2 = 10, + DRSUAPI_DS_REPLICA_INFO_REPSTO = -2, + DRSUAPI_DS_REPLICA_INFO_CLIENT_CONTEXTS = -4, + DRSUAPI_DS_REPLICA_INFO_UPTODATE_VECTOR_V1 = -5, + DRSUAPI_DS_REPLICA_INFO_SERVER_OUTGOING_CALLS = -6 + } drsuapi_DsReplicaInfoType; + + typedef struct { + drsuapi_DsReplicaInfoType info_type; + [charset(UTF16),string] uint16 *object_dn; + GUID source_dsa_guid; + } drsuapi_DsReplicaGetInfoRequest1; + + typedef struct { + drsuapi_DsReplicaInfoType info_type; + [charset(UTF16),string] uint16 *object_dn; + GUID source_dsa_guid; + uint32 flags; + [charset(UTF16),string] uint16 *attribute_name; + [charset(UTF16),string] uint16 *value_dn_str; + uint32 enumeration_context; + } drsuapi_DsReplicaGetInfoRequest2; + + typedef [switch_type(drsuapi_DsReplicaGetInfoLevel)] union { + [case(DRSUAPI_DS_REPLICA_GET_INFO)] drsuapi_DsReplicaGetInfoRequest1 req1; + [case(DRSUAPI_DS_REPLICA_GET_INFO2)] drsuapi_DsReplicaGetInfoRequest2 req2; + } drsuapi_DsReplicaGetInfoRequest; + + typedef struct { + [charset(UTF16),string] uint16 *naming_context_dn; + [charset(UTF16),string] uint16 *source_dsa_obj_dn; + [charset(UTF16),string] uint16 *source_dsa_address; + [charset(UTF16),string] uint16 *transport_obj_dn; + drsuapi_DrsOptions replica_flags; + uint32 reserved; + GUID naming_context_obj_guid; + GUID source_dsa_obj_guid; + GUID source_dsa_invocation_id; + GUID transport_obj_guid; + hyper tmp_highest_usn; + hyper highest_usn; + NTTIME last_success; + NTTIME last_attempt; + WERROR result_last_attempt; + uint32 consecutive_sync_failures; + } drsuapi_DsReplicaNeighbour; + + typedef struct { + uint32 count; + uint32 reserved; + [size_is(count)] drsuapi_DsReplicaNeighbour array[]; + } drsuapi_DsReplicaNeighbourCtr; + + typedef struct { + uint32 count; + uint32 reserved; + [size_is(count)] drsuapi_DsReplicaCursor array[]; + } drsuapi_DsReplicaCursorCtr; + + typedef struct { + [charset(UTF16),string] uint16 *attribute_name; + uint32 version; + NTTIME originating_change_time; + GUID originating_invocation_id; + hyper originating_usn; + hyper local_usn; + } drsuapi_DsReplicaObjMetaData; + + typedef struct { + uint32 count; + uint32 reserved; + [size_is(count)] drsuapi_DsReplicaObjMetaData array[]; + } drsuapi_DsReplicaObjMetaDataCtr; + + typedef struct { + [charset(UTF16),string] uint16 *dsa_obj_dn; + GUID dsa_obj_guid; + NTTIME first_failure; + uint32 num_failures; + WERROR last_result; + } drsuapi_DsReplicaKccDsaFailure; + + typedef struct { + uint32 count; + uint32 reserved; + [size_is(count)] drsuapi_DsReplicaKccDsaFailure array[]; + } drsuapi_DsReplicaKccDsaFailuresCtr; + + typedef enum { + DRSUAPI_DS_REPLICA_OP_TYPE_SYNC = 0, + DRSUAPI_DS_REPLICA_OP_TYPE_ADD = 1, + DRSUAPI_DS_REPLICA_OP_TYPE_DELETE = 2, + DRSUAPI_DS_REPLICA_OP_TYPE_MODIFY = 3, + DRSUAPI_DS_REPLICA_OP_TYPE_UPDATE_REFS = 4 + } drsuapi_DsReplicaOpType; + + typedef struct { + NTTIME operation_start; + uint32 serial_num; /* unique till reboot */ + uint32 priority; + drsuapi_DsReplicaOpType operation_type; + drsuapi_DrsOptions options; + [charset(UTF16),string] uint16 *nc_dn; + [charset(UTF16),string] uint16 *remote_dsa_obj_dn; + [charset(UTF16),string] uint16 *remote_dsa_address; + GUID nc_obj_guid; + GUID remote_dsa_obj_guid; + } drsuapi_DsReplicaOp; + + typedef struct { + NTTIME time; + uint32 count; + [size_is(count)] drsuapi_DsReplicaOp array[]; + } drsuapi_DsReplicaOpCtr; + + typedef struct { + [charset(UTF16),string] uint16 *attribute_name; + [charset(UTF16),string] uint16 *object_dn; + [value(ndr_size_DATA_BLOB(0,binary,0))] uint32 __ndr_size_binary; + DATA_BLOB *binary; + NTTIME deleted; + NTTIME created; + uint32 version; + NTTIME originating_change_time; + GUID originating_invocation_id; + hyper originating_usn; + hyper local_usn; + } drsuapi_DsReplicaAttrValMetaData; + + typedef struct { + uint32 count; + uint32 enumeration_context; + [size_is(count)] drsuapi_DsReplicaAttrValMetaData array[]; + } drsuapi_DsReplicaAttrValMetaDataCtr; + + typedef struct { + uint32 count; + uint32 enumeration_context; + [size_is(count)] drsuapi_DsReplicaCursor2 array[]; + } drsuapi_DsReplicaCursor2Ctr; + + typedef struct { + GUID source_dsa_invocation_id; + hyper highest_usn; + NTTIME last_sync_success; + [charset(UTF16),string] uint16 *source_dsa_obj_dn; + } drsuapi_DsReplicaCursor3; + + typedef struct { + uint32 count; + uint32 enumeration_context; + [size_is(count)] drsuapi_DsReplicaCursor3 array[]; + } drsuapi_DsReplicaCursor3Ctr; + + typedef struct { + [charset(UTF16),string] uint16 *attribute_name; + uint32 version; + NTTIME originating_change_time; + GUID originating_invocation_id; + hyper originating_usn; + hyper local_usn; + [charset(UTF16),string] uint16 *originating_dsa_dn; + } drsuapi_DsReplicaObjMetaData2; + + typedef struct { + uint32 count; + uint32 enumeration_context; + [size_is(count)] drsuapi_DsReplicaObjMetaData2 array[]; + } drsuapi_DsReplicaObjMetaData2Ctr; + + typedef struct { + [charset(UTF16),string] uint16 *attribute_name; + [charset(UTF16),string] uint16 *object_dn; + [value(ndr_size_DATA_BLOB(0,binary,0))] uint32 __ndr_size_binary; + DATA_BLOB *binary; + NTTIME deleted; + NTTIME created; + uint32 version; + NTTIME originating_change_time; + GUID originating_invocation_id; + hyper originating_usn; + hyper local_usn; + [charset(UTF16),string] uint16 *originating_dsa_dn; + } drsuapi_DsReplicaAttrValMetaData2; + + typedef struct { + uint32 count; + uint32 enumeration_context; + [size_is(count)] drsuapi_DsReplicaAttrValMetaData2 array[]; + } drsuapi_DsReplicaAttrValMetaData2Ctr; + + typedef struct { + hyper u1; /* session number? */ + uint32 u2; + uint32 u3; + GUID bind_guid; + NTTIME_1sec bind_time; + [flag(NDR_BIG_ENDIAN)] ipv4address client_ip_address; + uint32 u5; /* this is the same value the client used as pid in the DsBindInfoX struct */ + } drsuapi_DsReplicaConnection04; + + typedef struct { + [range(0,10000)] uint32 count; + uint32 reserved; + [size_is(count)] drsuapi_DsReplicaConnection04 array[]; + } drsuapi_DsReplicaConnection04Ctr; + + typedef struct { + [charset(UTF16),string] uint16 *str1; + uint32 u1; + uint32 u2; + uint32 u3; + uint32 u4; + uint32 u5; + hyper u6; + uint32 u7; + } drsuapi_DsReplica06; + + typedef struct { + [range(0,256)] uint32 count; + uint32 reserved; + [size_is(count)] drsuapi_DsReplica06 array[]; + } drsuapi_DsReplica06Ctr; + + typedef [switch_type(drsuapi_DsReplicaInfoType)] union { + [case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS)] drsuapi_DsReplicaNeighbourCtr *neighbours; + [case(DRSUAPI_DS_REPLICA_INFO_CURSORS)] drsuapi_DsReplicaCursorCtr *cursors; + [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA)] drsuapi_DsReplicaObjMetaDataCtr *objmetadata; + [case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *connectfailures; + [case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *linkfailures; + [case(DRSUAPI_DS_REPLICA_INFO_PENDING_OPS)] drsuapi_DsReplicaOpCtr *pendingops; + [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA)] drsuapi_DsReplicaAttrValMetaDataCtr *attrvalmetadata; + [case(DRSUAPI_DS_REPLICA_INFO_CURSORS2)] drsuapi_DsReplicaCursor2Ctr *cursors2; + [case(DRSUAPI_DS_REPLICA_INFO_CURSORS3)] drsuapi_DsReplicaCursor3Ctr *cursors3; + [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2)] drsuapi_DsReplicaObjMetaData2Ctr *objmetadata2; + [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2)] drsuapi_DsReplicaAttrValMetaData2Ctr *attrvalmetadata2; + [case(DRSUAPI_DS_REPLICA_INFO_REPSTO)] drsuapi_DsReplicaNeighbourCtr *repsto; + [case(DRSUAPI_DS_REPLICA_INFO_CLIENT_CONTEXTS)] drsuapi_DsReplicaConnection04Ctr *clientctx; + [case(DRSUAPI_DS_REPLICA_INFO_UPTODATE_VECTOR_V1)] drsuapi_DsReplicaCursorCtrEx *udv1; + [case(DRSUAPI_DS_REPLICA_INFO_SERVER_OUTGOING_CALLS)] drsuapi_DsReplica06Ctr *srvoutgoingcalls; + } drsuapi_DsReplicaInfo; + + WERROR drsuapi_DsReplicaGetInfo( + [in] policy_handle *bind_handle, + [in] drsuapi_DsReplicaGetInfoLevel level, + [in,ref,switch_is(level)] drsuapi_DsReplicaGetInfoRequest *req, + [out,ref] drsuapi_DsReplicaInfoType *info_type, + [out,ref,switch_is(*info_type)] drsuapi_DsReplicaInfo *info + ); + + /*****************/ + /* Function 0x14 */ + [todo] WERROR DRSUAPI_ADD_SID_HISTORY(); + + /*****************/ + /* Function 0x15 */ + + typedef struct { + [range(0,10000)] uint32 num_entries; + [size_is(num_entries)] drsuapi_DsGetMembershipsCtr1 **ctrl_array; + } drsuapi_DsGetMemberships2Ctr1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsGetMembershipsCtr1 ctr1; + } drsuapi_DsGetMemberships2Ctr; + + typedef struct { + [range(1,10000)] uint32 num_req; + [size_is(num_req)] drsuapi_DsGetMembershipsRequest1 **req_array; + } drsuapi_DsGetMemberships2Request1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_DsGetMemberships2Request1 req1; + } drsuapi_DsGetMemberships2Request; + + WERROR drsuapi_DsGetMemberships2( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in,ref] [switch_is(level)] drsuapi_DsGetMemberships2Request *req, + [out,ref] uint32 *level_out, + [out,ref] [switch_is(*level_out)] drsuapi_DsGetMemberships2Ctr *ctr + ); + + /*****************/ + /* Function 0x16 */ + [todo] WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS(); + + /*****************/ + /* Function 0x17 */ + [todo] WERROR DRSUAPI_GET_OBJECT_EXISTENCE(); + + /*****************/ + /* Function 0x18 */ + typedef struct { + WERROR error_code; + uint32 site_cost; + } drsuapi_DsSiteCostInfo; + + typedef struct { + [range(0,10000)] uint32 num_info; + [size_is(num_info)] drsuapi_DsSiteCostInfo *info; + [value(0)] uint32 flags_reserved; + } drsuapi_QuerySitesByCostCtr1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_QuerySitesByCostCtr1 ctr1; + } drsuapi_QuerySitesByCostCtr; + + typedef struct { + [charset(UTF16),string] uint16 *site_from; + [range(1,10000)] uint32 num_req; + [size_is(num_req)] [charset(UTF16),string] uint16 **site_to; + uint32 flags; + } drsuapi_QuerySitesByCostRequest1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_QuerySitesByCostRequest1 req1; + } drsuapi_QuerySitesByCostRequest; + + WERROR drsuapi_QuerySitesByCost( + [in] policy_handle *bind_handle, + [in] uint32 level, + [in,ref] [switch_is(level)] drsuapi_QuerySitesByCostRequest *req, + [out,ref] uint32 *level_out, + [out,ref] [switch_is(*level_out)] drsuapi_QuerySitesByCostCtr *ctr + ); + + /*****************/ + /* Function 0x19 */ + [todo] WERROR drsuapi_InitDemotion(); + + /*****************/ + /* Function 0x1a */ + [todo] WERROR drsuapi_ReplicaDemotion(); + + /*****************/ + /* Function 0x1b */ + [todo] WERROR drsuapi_FinishDemotion(); + + /*****************/ + /* Function 0x1c */ + [todo] WERROR drsuapi_AddCloneDC(); + + /*****************/ + /* Function 0x1d */ + [todo] WERROR drsuapi_WriteNgcKey(); + + /*****************/ + /* Function 0x1e */ + + typedef struct { + [charset(UTF16),string] uint16 *pwszAccount; + } drsuapi_ReadNgcKeyReqV1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_ReadNgcKeyReqV1 V1; + } drsuapi_ReadNgcKeyReq; + + typedef struct { + uint32 retVal; + [range(0,0xFFFF)] uint32 cNgcKey; + [size_is(cNgcKey), string] uint8 * pNgcKey; + } drsuapi_ReadNgcKeyReplyV1; + + typedef [switch_type(uint32)] union { + [case(1)] drsuapi_ReadNgcKeyReplyV1 V1; + } drsuapi_ReadNgcKeyReply; + + WERROR drsuapi_ReadNgcKey( + [in] policy_handle * hDrs, + [in] uint32 inVersion, + [in, ref, switch_is(inVersion)] drsuapi_ReadNgcKeyReq * ngcReq, + [out, ref] uint32 * pOutVersion, + [out, ref, switch_is(*pOutVersion)] drsuapi_ReadNgcKeyReply* ngcReply + ); +} diff --git a/epan/dissectors/pidl/dssetup/dssetup.cnf b/epan/dissectors/pidl/dssetup/dssetup.cnf new file mode 100644 index 00000000..a551614b --- /dev/null +++ b/epan/dissectors/pidl/dssetup/dssetup.cnf @@ -0,0 +1 @@ +# Conformance file for dssetup diff --git a/epan/dissectors/pidl/dssetup/dssetup.idl b/epan/dissectors/pidl/dssetup/dssetup.idl new file mode 100644 index 00000000..922caba4 --- /dev/null +++ b/epan/dissectors/pidl/dssetup/dssetup.idl @@ -0,0 +1,101 @@ +/* + dssetup interface definition +*/ + +import "misc/misc.idl"; + +[ + uuid("3919286a-b10c-11d0-9ba8-00c04fd92ef5"), + version(0.0), + endpoint("ncacn_np:[\\pipe\\lsarpc]", "ncacn_np:[\\pipe\\lsass]", "ncacn_ip_tcp:", "ncalrpc:"), + pointer_default(unique), + helpstring("Active Directory Setup") +] interface dssetup +{ + /**********************************************/ + /* Function 0x00 */ + + typedef enum { + DS_ROLE_STANDALONE_WORKSTATION = 0, + DS_ROLE_MEMBER_WORKSTATION = 1, + DS_ROLE_STANDALONE_SERVER = 2, + DS_ROLE_MEMBER_SERVER = 3, + DS_ROLE_BACKUP_DC = 4, + DS_ROLE_PRIMARY_DC = 5 + } dssetup_DsRole; + + typedef [bitmap32bit] bitmap { + DS_ROLE_PRIMARY_DS_RUNNING = 0x00000001, + DS_ROLE_PRIMARY_DS_MIXED_MODE = 0x00000002, + DS_ROLE_UPGRADE_IN_PROGRESS = 0x00000004, + DS_ROLE_PRIMARY_DOMAIN_GUID_PRESENT = 0x01000000 + } dssetup_DsRoleFlags; + + typedef struct { + dssetup_DsRole role; + dssetup_DsRoleFlags flags; + [charset(UTF16),string] uint16 *domain; + [charset(UTF16),string] uint16 *dns_domain; + [charset(UTF16),string] uint16 *forest; + GUID domain_guid; + } dssetup_DsRolePrimaryDomInfoBasic; + + typedef [v1_enum] enum { + DS_ROLE_NOT_UPGRADING = 0, + DS_ROLE_UPGRADING = 1 + } dssetup_DsUpgrade; + + typedef enum { + DS_ROLE_PREVIOUS_UNKNOWN = 0, + DS_ROLE_PREVIOUS_PRIMARY = 1, + DS_ROLE_PREVIOUS_BACKUP = 2 + } dssetup_DsPrevious; + + typedef struct { + dssetup_DsUpgrade upgrading; + dssetup_DsPrevious previous_role; + } dssetup_DsRoleUpgradeStatus; + + typedef enum { + DS_ROLE_OP_IDLE = 0, + DS_ROLE_OP_ACTIVE = 1, + DS_ROLE_OP_NEEDS_REBOOT = 2 + } dssetup_DsRoleOp; + + typedef struct { + dssetup_DsRoleOp status; + } dssetup_DsRoleOpStatus; + + typedef enum { + DS_ROLE_BASIC_INFORMATION = 1, + DS_ROLE_UPGRADE_STATUS = 2, + DS_ROLE_OP_STATUS = 3 + } dssetup_DsRoleInfoLevel; + + typedef [switch_type(dssetup_DsRoleInfoLevel)] union { + [case(DS_ROLE_BASIC_INFORMATION)] dssetup_DsRolePrimaryDomInfoBasic basic; + [case(DS_ROLE_UPGRADE_STATUS)] dssetup_DsRoleUpgradeStatus upgrade; + [case(DS_ROLE_OP_STATUS)] dssetup_DsRoleOpStatus opstatus; + } dssetup_DsRoleInfo; + + WERROR dssetup_DsRoleGetPrimaryDomainInformation( + [in] dssetup_DsRoleInfoLevel level, + [out,switch_is(level),unique] dssetup_DsRoleInfo *info + ); + + /* + w2k3 has removed all the calls below from their implementation. + These stubs are left here only as a way of documenting the names + of the calls in case they ever turn up on the wire. + */ + [todo] WERROR dssetup_DsRoleDnsNameToFlatName(); + [todo] WERROR dssetup_DsRoleDcAsDc(); + [todo] WERROR dssetup_DsRoleDcAsReplica(); + [todo] WERROR dssetup_DsRoleDemoteDc(); + [todo] WERROR dssetup_DsRoleGetDcOperationProgress(); + [todo] WERROR dssetup_DsRoleGetDcOperationResults(); + [todo] WERROR dssetup_DsRoleCancel(); + [todo] WERROR dssetup_DsRoleServerSaveStateForUpgrade(); + [todo] WERROR dssetup_DsRoleUpgradeDownlevelServer(); + [todo] WERROR dssetup_DsRoleAbortDownlevelServerUpgrade(); +} diff --git a/epan/dissectors/pidl/efs/efs.cnf b/epan/dissectors/pidl/efs/efs.cnf new file mode 100644 index 00000000..cac75869 --- /dev/null +++ b/epan/dissectors/pidl/efs/efs.cnf @@ -0,0 +1,27 @@ +# Conformance file for EFS + +# +# policyhandle tracking +# This block is to specify where a policyhandle is opened and where it is +# closed so that policyhandles when dissected contain nice info such as +# [opened in xxx] [closed in yyy] +# +# Policyhandles are opened in these functions +PARAM_VALUE efs_dissect_element_EfsRpcOpenFileRaw_pvContext_ PIDL_POLHND_OPEN +# Policyhandles are closed in these functions +PARAM_VALUE efs_dissect_element_EfsRpcCloseRaw_pvContext_ PIDL_POLHND_CLOSE + +CODE START +static int +efs_dissect_struct_dom_sid(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, dcerpc_info* di, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + if(di->conformant_run){ + /* just a run to handle conformant arrays, no scalars to dissect */ + return offset; + } + + offset=dissect_nt_sid(tvb, offset, tree, "SID", NULL, -1); + return offset; +} + +CODE END diff --git a/epan/dissectors/pidl/efs/efs.idl b/epan/dissectors/pidl/efs/efs.idl new file mode 100644 index 00000000..54f971d1 --- /dev/null +++ b/epan/dissectors/pidl/efs/efs.idl @@ -0,0 +1,108 @@ +/* + IDL definitions from original packet-dcerpc-efs.c + by Jean-Baptiste Marchand +*/ + +/* import "security.idl";*/ + +[ + uuid("c681d488-d850-11d0-8c52-00c04fd90f7e"), + version(1.0), + pointer_default(unique) +] interface efs +{ + +WERROR EfsRpcOpenFileRaw( + [out,ref] policy_handle *pvContext, + [in] [charset(UTF16),string] uint16 FileName[], + [in] uint32 Flags + ); + +WERROR EfsRpcReadFileRaw( + [in,ref] policy_handle *pvContext +/* incomplete */ +); + + +WERROR EfsRpcWriteFileRaw( + [in,ref] policy_handle *pvContext +/* incomplete */ +); + +void EfsRpcCloseRaw( + [in,out,ref] policy_handle *pvContext +); + +WERROR EfsRpcEncryptFileSrv( + [in] [charset(UTF16),string] uint16 Filename[] +); + +WERROR EfsRpcDecryptFileSrv( + [in] [charset(UTF16),string] uint16 FileName[], + [in] uint32 Reserved +); + +typedef struct { + uint32 cbData; + [size_is(cbData), unique] uint8 *pbData; +} EFS_HASH_BLOB; + +typedef struct { + uint32 cbTotalLength; + [unique] dom_sid *pUserSid; + [unique] EFS_HASH_BLOB *pHash; + [unique] [charset(UTF16),string] uint16 *lpDisplayInformation; +} ENCRYPTION_CERTIFICATE_HASH; + +typedef struct { + uint32 nCert_Hash; + /* this is a pointer to an array of pointers */ + [size_is(nCert_Hash)] ENCRYPTION_CERTIFICATE_HASH *pUsers[*]; +} ENCRYPTION_CERTIFICATE_HASH_LIST; + +WERROR EfsRpcQueryUsersOnFile( + [in] [charset(UTF16),string] uint16 FileName[], + [out,ref,unique] ENCRYPTION_CERTIFICATE_HASH_LIST **pUsers +); + +WERROR EfsRpcQueryRecoveryAgents( + [in] [charset(UTF16),string] uint16 FileName[], + [out,ref,unique] ENCRYPTION_CERTIFICATE_HASH_LIST **pRecoveryAgents +); + +WERROR EfsRpcRemoveUsersFromFile( + [in] [charset(UTF16),string] uint16 FileName[] + /* [in] ENCRYPTION_CERTIFICATE_LIST Hashes*/ +); + +WERROR EfsRpcAddUsersToFile( + [in] [charset(UTF16),string] uint16 FileName[] + /* [in] ENCRYPTION_CERTIFICATE_LIST Hashes*/ +); + +typedef struct { + uint32 dwCertEncodingType; + uint32 cbData; + [size_is(cbData)] [unique] uint8 *pbData; +} EFS_CERTIFICATE_BLOB; + +typedef struct { + uint32 TotalLength; + [unique] dom_sid *pUserSid; + [unique] EFS_CERTIFICATE_BLOB *pCertBlob; +} ENCRYPTION_CERTIFICATE; + +WERROR EfsRpcSetFileEncryptionKey( + [in] [unique] ENCRYPTION_CERTIFICATE *pEncryptionCertificate +); + +WERROR EfsRpcNotSupported( +); + +WERROR EfsRpcFileKeyInfo( +); + +WERROR EfsRpcDuplicateEncryptionInfoFile( +); + +} diff --git a/epan/dissectors/pidl/eventlog/eventlog.cnf b/epan/dissectors/pidl/eventlog/eventlog.cnf new file mode 100644 index 00000000..f9182117 --- /dev/null +++ b/epan/dissectors/pidl/eventlog/eventlog.cnf @@ -0,0 +1,158 @@ +# Conformance file for EVENTLOG +# + +HF_FIELD hf_eventlog_Record "Record" "eventlog.Record" FT_NONE BASE_NONE NULL 0 "" "" "" +HF_FIELD hf_eventlog_Record_length "Record Length" "eventlog.Record.length" FT_UINT32 BASE_DEC NULL 0 "" "" "" +HF_FIELD hf_eventlog_Record_source_name "Source Name" "eventlog.Record.source_name" FT_STRING BASE_NONE NULL 0 "" "" "" +HF_FIELD hf_eventlog_Record_computer_name "Computer Name" "eventlog.Record.computer_name" FT_STRING BASE_NONE NULL 0 "" "" "" +HF_FIELD hf_eventlog_Record_string "string" "eventlog.Record.string" FT_STRING BASE_NONE NULL 0 "" "" "" + +MANUAL eventlog_dissect_element_ReadEventLogW_data_ +MANUAL eventlog_dissect_element_Record_sid_length +MANUAL eventlog_dissect_element_Record_sid_offset +MANUAL eventlog_dissect_element_Record_source_name +MANUAL eventlog_dissect_element_Record_computer_name +MANUAL eventlog_dissect_element_Record_num_of_strings +MANUAL eventlog_dissect_element_Record_stringoffset +MANUAL eventlog_dissect_element_Record_strings + +NOEMIT eventlog_dissect_element_Record_strings_ +NOEMIT eventlog_dissect_element_ReadEventLogW_data__ +# +# policyhandle tracking +# This block is to specify where a policyhandle is opened and where it is +# closed so that policyhandles when dissected contain nice info such as +# [opened in xxx] [closed in yyy] +# +# Policyhandles are opened in these functions +PARAM_VALUE eventlog_dissect_element_OpenEventLogW_handle_ PIDL_POLHND_OPEN +PARAM_VALUE eventlog_dissect_element_OpenBackupEventLogW_handle_ PIDL_POLHND_OPEN +# Policyhandles are closed in these functions +PARAM_VALUE eventlog_dissect_element_CloseEventLog_handle_ PIDL_POLHND_CLOSE + +TYPE lsa_String "offset=dissect_ndr_counted_string(tvb, offset, pinfo, tree, di, drep, @HF@, @PARAM@);" FT_STRING BASE_NONE 0 NULL 4 + + +CODE START + +static int +eventlog_dissect_element_ReadEventLogW_data_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info *di, guint8 *drep) +{ + guint32 len; + tvbuff_t *record_tvb; + + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_eventlog_Record_length, &len); + + /* Create a new tvb so that we know that offset==0 is the beginning + * of the record. We need to know this since the data is not really + * NDR encoded at all and there are byte offsets into this buffer + * encoded therein. + */ + record_tvb=tvb_new_subset_length_caplen(tvb, offset, MIN((gint)len, tvb_captured_length_remaining(tvb, offset)), len); + eventlog_dissect_struct_Record(record_tvb, 0, pinfo, tree, di, drep, hf_eventlog_Record, 0); + offset+=len; + + return offset; +} + + +/* sid_length and sid_offset handled by manual code since this is not NDR + and we want to dissect the sid from the data blob */ +static guint32 sid_length; +static int +eventlog_dissect_element_Record_sid_length(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info *di, guint8 *drep) +{ + sid_length=0; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_eventlog_eventlog_Record_sid_length,&sid_length); + + return offset; +} +static int +eventlog_dissect_element_Record_sid_offset(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info *di, guint8 *drep) +{ + guint32 sid_offset=0; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_eventlog_eventlog_Record_sid_offset,&sid_offset); + + if(sid_offset && sid_length){ + tvbuff_t *sid_tvb; + + /* this blob contains an NT SID. + * tvb starts at the beginning of the record. + */ + sid_tvb=tvb_new_subset_length_caplen(tvb, sid_offset, MIN((gint)sid_length, tvb_captured_length_remaining(tvb, offset)), sid_length); + dissect_nt_sid(sid_tvb, 0, tree, "SID", NULL, -1); + } + + return offset; +} + +static int +eventlog_dissect_element_Record_source_name(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, dcerpc_info *di _U_, guint8 *drep _U_) +{ + guint len; + + len=tvb_unicode_strsize(tvb, offset); + proto_tree_add_item(tree, hf_eventlog_Record_source_name, tvb, offset, len, ENC_UTF_16|ENC_LITTLE_ENDIAN); + + offset+=len; + return offset; +} + +static int +eventlog_dissect_element_Record_computer_name(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, dcerpc_info *di _U_, guint8 *drep _U_) +{ + guint len; + + len=tvb_unicode_strsize(tvb, offset); + proto_tree_add_item(tree, hf_eventlog_Record_computer_name, tvb, offset, len, ENC_UTF_16|ENC_LITTLE_ENDIAN); + + offset+=len; + return offset; +} + +static guint16 num_of_strings; + +static int +eventlog_dissect_element_Record_num_of_strings(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info *di, guint8 *drep) +{ + num_of_strings=0; + offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, di, drep, hf_eventlog_eventlog_Record_num_of_strings,&num_of_strings); + + return offset; +} + +static guint32 string_offset; + +static int +eventlog_dissect_element_Record_stringoffset(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info *di, guint8 *drep) +{ + string_offset=0; + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_eventlog_eventlog_Record_stringoffset,&string_offset); + + return offset; +} + +static int +eventlog_dissect_element_Record_strings(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, dcerpc_info *di _U_, guint8 *drep _U_) +{ + while(string_offset && num_of_strings){ + guint len; + + len=tvb_unicode_strsize(tvb, string_offset); + proto_tree_add_item(tree, hf_eventlog_Record_string, tvb, string_offset, len, ENC_UTF_16|ENC_LITTLE_ENDIAN); + string_offset+=len; + + num_of_strings--; + } + + + return offset; +} + +CODE END diff --git a/epan/dissectors/pidl/eventlog/eventlog.idl b/epan/dissectors/pidl/eventlog/eventlog.idl new file mode 100644 index 00000000..cef3c388 --- /dev/null +++ b/epan/dissectors/pidl/eventlog/eventlog.idl @@ -0,0 +1,224 @@ +#include "idl_types.h" + +/* import "lsa.idl", "security.idl";*/ + +/* + eventlog interface definition +*/ +[ uuid("82273fdc-e32a-18c3-3f78-827929dc23ea"), + version(0.0), + pointer_default(unique), + helpstring("Event Logger") +] interface eventlog +{ + typedef bitmap { + EVENTLOG_SEQUENTIAL_READ = 0x0001, + EVENTLOG_SEEK_READ = 0x0002, + EVENTLOG_FORWARDS_READ = 0x0004, + EVENTLOG_BACKWARDS_READ = 0x0008 + } eventlogReadFlags; + + typedef bitmap { + EVENTLOG_SUCCESS = 0x0000, + EVENTLOG_ERROR_TYPE = 0x0001, + EVENTLOG_WARNING_TYPE = 0x0002, + EVENTLOG_INFORMATION_TYPE = 0x0004, + EVENTLOG_AUDIT_SUCCESS = 0x0008, + EVENTLOG_AUDIT_FAILURE = 0x0010 + } eventlogEventTypes; + + typedef struct { + uint16 unknown0; + uint16 unknown1; + } eventlog_OpenUnknown0; + + typedef [public] struct { + uint32 size; + uint32 reserved; + uint32 record_number; + uint32 time_generated; + uint32 time_written; + uint32 event_id; + uint16 event_type; + uint16 num_of_strings; + uint16 event_category; + uint16 reserved_flags; + uint32 closing_record_number; + uint32 stringoffset; + uint32 sid_length; + uint32 sid_offset; + uint32 data_length; + uint32 data_offset; + nstring source_name; + nstring computer_name; + nstring strings[num_of_strings]; + astring raw_data; + } eventlog_Record; + + /******************/ + /* Function: 0x00 */ + NTSTATUS eventlog_ClearEventLogW( + [in] policy_handle *handle, + [in,unique] lsa_String *backupfilename + ); + + /******************/ + /* Function: 0x01 */ + NTSTATUS eventlog_BackupEventLogW( + [in] policy_handle *handle, + [in,unique] lsa_String *backupfilename + ); + + /******************/ + /* Function: 0x02 */ + NTSTATUS eventlog_CloseEventLog( + [in,out] policy_handle *handle + ); + + /******************/ + /* Function: 0x03 */ + NTSTATUS eventlog_DeregisterEventSource( + [in,out] policy_handle *handle + ); + + /******************/ + /* Function: 0x04 */ + NTSTATUS eventlog_GetNumRecords( + [in] policy_handle *handle, + [out,ref] uint32 *number + ); + + /******************/ + /* Function: 0x05 */ + NTSTATUS eventlog_GetOldestRecord( + [in] policy_handle *handle, + [out,ref] uint32 *oldest + ); + + /******************/ + /* Function: 0x06 */ + typedef struct { + uint32 unknown0; + uint32 unknown1; + } eventlog_ChangeUnknown0; + + NTSTATUS eventlog_ChangeNotify( + [in] policy_handle *handle, + [in, ref] eventlog_ChangeUnknown0 *unknown2, + [in] uint32 unknown3 + ); + + /******************/ + /* Function: 0x07 */ + NTSTATUS eventlog_OpenEventLogW( + [in,unique] eventlog_OpenUnknown0 *unknown0, + [in] lsa_String Module, + [in] lsa_String RegModuleName, + [in] uint32 MajorVersion, + [in] uint32 MinorVersion, + [out] policy_handle *handle + ); + + /******************/ + /* Function: 0x08 */ + NTSTATUS eventlog_RegisterEventSourceW( + [in,unique] eventlog_OpenUnknown0 *unknown0, + [in] lsa_String logname, + [in] lsa_String servername, + [in] uint32 unknown2, + [in] uint32 unknown3, + [out] policy_handle *handle + ); + + /******************/ + /* Function: 0x09 */ + NTSTATUS eventlog_OpenBackupEventLogW( + [in,unique] eventlog_OpenUnknown0 *unknown0, + [in] lsa_String logname, + [in] uint32 unknown2, + [in] uint32 unknown3, + [out] policy_handle *handle + ); + + /******************/ + /* Function: 0x0a */ + NTSTATUS eventlog_ReadEventLogW( + [in] policy_handle *handle, + [in] eventlogReadFlags flags, + [in] uint32 offset, + [in] uint32 number_of_bytes, + [out,size_is(number_of_bytes)] uint8 *data, + [out,ref] uint32 *sent_size, + [out,ref] uint32 *real_size + ); + + /*****************/ + /* Function 0x0b */ + NTSTATUS eventlog_ReportEventW( + [in] policy_handle *handle, + [in] uint32 time, + [in] eventlogEventTypes Type, + [in] uint16 event_category, + [in] uint32 event_id, + [in] uint16 num_of_strings, + [in] uint32 data_length, + [in] lsa_String computer_name + /* sid */ + ); + + /*****************/ + /* Function 0x0c */ + NTSTATUS eventlog_ClearEventLogA(); + + /******************/ + /* Function: 0x0d */ + NTSTATUS eventlog_BackupEventLogA(); + + /*****************/ + /* Function 0x0e */ + NTSTATUS eventlog_OpenEventLogA(); + + /*****************/ + /* Function 0x0f */ + NTSTATUS eventlog_RegisterEventSourceA(); + + /*****************/ + /* Function 0x10 */ + NTSTATUS eventlog_OpenBackupEventLogA(); + + /*****************/ + /* Function 0x11 */ + NTSTATUS eventlog_ReadEventLogA(); + + /*****************/ + /* Function 0x12 */ + NTSTATUS eventlog_ReportEventA(); + + /*****************/ + /* Function 0x13 */ + NTSTATUS eventlog_RegisterClusterSvc(); + + /*****************/ + /* Function 0x14 */ + NTSTATUS eventlog_DeregisterClusterSvc(); + + /*****************/ + /* Function 0x15 */ + NTSTATUS eventlog_WriteClusterEvents(); + + /*****************/ + /* Function 0x16 */ + NTSTATUS eventlog_GetLogIntormation( + [in] policy_handle *handle, + [in] uint32 dwInfoLevel, + [out] [size_is(cbBufSize)] char lpBuffer[*], + [in] uint32 cbBufSize, + [out,ref] long *cbBytesNeeded + ); + + /*****************/ + /* Function 0x17 */ + NTSTATUS eventlog_FlushEventLog( + [in] policy_handle *handle + ); +} diff --git a/epan/dissectors/pidl/frsrpc/frsrpc.cnf b/epan/dissectors/pidl/frsrpc/frsrpc.cnf new file mode 100644 index 00000000..a0116f30 --- /dev/null +++ b/epan/dissectors/pidl/frsrpc/frsrpc.cnf @@ -0,0 +1,115 @@ +NOEMIT CommPktChunkCtr +NOEMIT CommPktChangeOrderCommand.file_name + +ETT_FIELD ett_ChunkCtr +HF_FIELD hf_frsrpc_CommPktChangeOrderCommand_file_name "File Name" "frsrpc.CommPktChangeOrderCommand.file_name" FT_STRING BASE_NONE NULL 0 "" "" "" +HF_FIELD hf_CommPktChunk "Chunk" "frsrpc.chunk.ctr.chunk" FT_NONE BASE_NONE NULL 0 "" "" "" + +MANUAL frsrpc_dissect_struct_frsrpc_CommPktChunkCtr +MANUAL frsrpc_dissect_element_CommPktChangeOrderCommand_file_name +MANUAL frsrpc_dissect_enum_CommPktCommand +MANUAL frsrpc_dissect_struct_CommPktChunk + +CODE START +static int +frsrpc_dissect_element_CommPktChangeOrderCommand_file_name(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di, guint8 *drep _U_) +{ + int conformant = di->conformant_run; + + if (!conformant) { + guint32 soffset = dissect_null_term_wstring(tvb, offset, pinfo, tree, drep, hf_frsrpc_CommPktChangeOrderCommand_file_name, 0); + /* The difference has to be 4 due to the uint16 of the length + null terminator utf16*/ + DISSECTOR_ASSERT(soffset - offset < 261); + offset += 261; + } + + return offset; +} + +int +frsrpc_dissect_struct_CommPktChunk(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + guint1632 type = 0; + int i = 0; + const char *s = NULL; + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_frsrpc_frsrpc_CommPktChunk); + } + + offset = frsrpc_dissect_element_CommPktChunk_type(tvb, offset, pinfo, tree, di, drep, &type); + + offset = frsrpc_dissect_element_CommPktChunk_data(tvb, offset, pinfo, tree, di, drep, &type); + + for (i=0; frsrpc_frsrpc_CommPktChunkType_vals[i].strptr; i++) { + if (frsrpc_frsrpc_CommPktChunkType_vals[i].value == type) { + s = frsrpc_frsrpc_CommPktChunkType_vals[i].strptr; + } + } + if (s != NULL) { + proto_item_append_text(item, ", type = %s", s); + } + proto_item_set_len(item, offset-old_offset); + + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_3_BYTES; + } + + return offset; +} + +int +frsrpc_dissect_enum_CommPktCommand(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di, guint8 *drep _U_, int hf_index _U_, guint32 *param _U_) +{ + guint32 parameter=0; + int i = 0; + const char *s = NULL; + if(param){ + parameter=(guint32)*param; + } + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_index, ¶meter); + + for (i=0; frsrpc_frsrpc_CommPktCommand_vals[i].strptr != NULL; i++) { + if (frsrpc_frsrpc_CommPktCommand_vals[i].value == parameter) { + s = frsrpc_frsrpc_CommPktCommand_vals[i].strptr; + } + } + if (s!= NULL) + col_append_fstr(pinfo->cinfo, COL_INFO, ",command = %s", + s); + + if(param){ + *param=(guint32)parameter; + } + return offset; +} + + +static int +frsrpc_dissect_struct_frsrpc_CommPktChunkCtr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep _U_, int hf_index, guint32 param _U_) +{ + guint32 remaining = tvb_reported_length_remaining(tvb, offset); + int align_status = di->no_align; + + if (remaining > 0) { + proto_item *item = proto_tree_add_item(tree, hf_index, tvb, offset, -1, TRUE); + proto_tree *subtree = proto_item_add_subtree(item, ett_ChunkCtr); + di->no_align = 1; + while (remaining > 0) { + offset = frsrpc_dissect_struct_CommPktChunk(tvb, offset, pinfo, subtree, di, drep, hf_CommPktChunk, param); + remaining = tvb_reported_length_remaining(tvb, offset); + } + di->no_align = align_status; + } + return offset; +} + +CODE END diff --git a/epan/dissectors/pidl/frsrpc/frsrpc.idl b/epan/dissectors/pidl/frsrpc/frsrpc.idl new file mode 100644 index 00000000..3d2feddf --- /dev/null +++ b/epan/dissectors/pidl/frsrpc/frsrpc.idl @@ -0,0 +1,422 @@ +#include "idl_types.h" + +import "misc/misc.idl"; + +[ + uuid("f5cc59b4-4264-101a-8c59-08002b2f8426"), + version(1.1), + endpoint("ncacn_ip_tcp:", "ncalrpc:"), + helpstring("File Replication Service"), + helper("../librpc/ndr/ndr_frsrpc.h"), + pointer_default(unique) +] +interface frsrpc +{ + /*****************/ + /* Function 0x00 */ + + typedef struct { + [subcontext(4)] GUID guid; + [subcontext(4)] nstring name; + } frsrpc_CommPktChunkGuidName; + + typedef struct { + hyper vsn; + GUID guid; + } frsrpc_CommPktGSVN; + + typedef [bitmap32bit,flag(NDR_PAHEX)] bitmap { + FRSRPC_CO_FLAG_ABORT_CO = 0x00000001, + FRSRPC_CO_FLAG_VV_ACTIVATED = 0x00000002, + FRSRPC_CO_FLAG_CONTENT_CMD = 0x00000004, + FRSRPC_CO_FLAG_LOCATION_CMD = 0x00000008, + FRSRPC_CO_FLAG_ONLIST = 0x00000010, + FRSRPC_CO_FLAG_LOCALCO = 0x00000020, + FRSRPC_CO_FLAG_RETRY = 0x00000040, + FRSRPC_CO_FLAG_OUT_OF_ORDER = 0x00000200, + FRSRPC_CO_FLAG_NEW_FILE = 0x00000400, + FRSRPC_CO_FLAG_CONTROL = 0x00001000, + FRSRPC_CO_FLAG_DIRECTED_CO = 0x00002000, + FRSRPC_CO_FLAG_VVJOIN_TO_ORIG = 0x00040000, + FRSRPC_CO_FLAG_SKIP_ORIG_REC_C = 0x00100000, + FRSRPC_CO_FLAG_MOVEIN_GEN = 0x00200000, + FRSRPC_CO_FLAG_MORPH_GEN_HEAD = 0x00400000, + FRSRPC_CO_FLAG_JUST_OID_RESET = 0x00800000, + FRSRPC_CO_FLAG_COMPRESSED_STAGE = 0x01000000, + FRSRPC_CO_FLAG_SKIP_VV_UPDATE = 0x02000000 + } frsrpc_CommPktCoCmdFlags; + + const uint32 FRSRPC_CO_IFLAG_NONE = 0x0000000; + + typedef [bitmap32bit,flag(NDR_PAHEX)] bitmap { + FRSRPC_CO_IFLAG_VVRETIRE_EXEC = 0x00000001, + FRSRPC_CO_IFLAG_CO_ABORT = 0x00000002, + FRSRPC_CO_IFLAG_DIR_ENUM_PENDING= 0x00000004 + } frsrpc_CommPktCoCmdIFlags; + + typedef [v1_enum,flag(NDR_PAHEX)] enum { + FRSRPC_CO_STATUS_CO_ENTERED_LOG = 0x00000000, + FRSRPC_CO_STATUS_ALLOC_STAGING_LOCAL_CO = 0x00000001, + FRSRPC_CO_STATUS_LOCAL_CO_STAGING_STARTED = 0x00000002, + FRSRPC_CO_STATUS_LOCAL_CO_STAGING_COMPLETED = 0x00000003, + FRSRPC_CO_STATUS_WAIT_RETRY_LOCAL_CO_STAGING = 0x00000004, + FRSRPC_CO_STATUS_ALLOC_STAGING_REMOTE_CO = 0x00000005, + FRSRPC_CO_STATUS_REMOTE_CO_STAGING_STARTED = 0x00000006, + FRSRPC_CO_STATUS_REMOTE_CO_STAGING_COMPLETED = 0x00000007, + FRSRPC_CO_STATUS_WAIT_RETRY_REMOTE_CO_STAGING = 0x00000008, + FRSRPC_CO_STATUS_FILE_INSTALL_REQUESTED = 0x00000009, + FRSRPC_CO_STATUS_FILE_INSTALL_STARTED = 0x0000000A, + FRSRPC_CO_STATUS_FILE_INSTALL_COMPLETED = 0x0000000B, + FRSRPC_CO_STATUS_FILE_INSTALL_WAIT_RETRY = 0x0000000C, + FRSRPC_CO_STATUS_FILE_INSTALL_RETRYING = 0x0000000D, + FRSRPC_CO_STATUS_FILE_INSTALL_RENAME_RETRYING = 0x0000000E, + FRSRPC_CO_STATUS_FILE_INSTALL_DELETE_RETRYING = 0x0000000F, + FRSRPC_CO_STATUS_CO_RECYCLED_FOR_ENUM = 0x00000013, + FRSRPC_CO_STATUS_REQUEST_OUTBOUND_PROPAGATION = 0x00000014, + FRSRPC_CO_STATUS_REQUEST_ACCEPTED_OUTBOUND_LOG = 0x00000015, + FRSRPC_CO_STATUS_DB_STATE_UPDATE_STARTED = 0x00000016, + FRSRPC_CO_STATUS_DB_STATE_UPDATE_COMPLETED = 0x00000017, + FRSRPC_CO_STATUS_CO_ABORTED = 0x00000018 + } frsrpc_CommPktCoCmdStatus; + + typedef [bitmap32bit,flag(NDR_PAHEX)] bitmap { + FRSRPC_CONTENT_REASON_DATA_OVERWRITE = 0x00000001, + FRSRPC_CONTENT_REASON_DATA_EXTEND = 0x00000002, + FRSRPC_CONTENT_REASON_DATA_TRUNCATION = 0x00000004, + FRSRPC_CONTENT_REASON_NAMED_DATA_OVERWRITE = 0x00000010, + FRSRPC_CONTENT_REASON_NAMED_DATA_EXTEND = 0x00000020, + FRSRPC_CONTENT_REASON_NAMED_DATA_TRUNCATION = 0x00000040, + FRSRPC_CONTENT_REASON_FILE_CREATE = 0x00000100, + FRSRPC_CONTENT_REASON_FILE_DELETE = 0x00000200, + FRSRPC_CONTENT_REASON_EA_CHANGE = 0x00000400, + FRSRPC_CONTENT_REASON_SECURITY_CHANGE = 0x00000800, + FRSRPC_CONTENT_REASON_OLD_NAME = 0x00001000, + FRSRPC_CONTENT_REASON_NEW_NAME = 0x00002000, + FRSRPC_CONTENT_REASON_BASIC_INFO_CHANGE = 0x00004000, + FRSRPC_CONTENT_REASON_COMPRESSION_CHANGE = 0x00020000 + } frsrpc_CommPktCoCmdContentCmd; + + typedef [v1_enum,flag(NDR_PAHEX)] enum { + FRSRPC_CO_LOCATION_FILE_CREATE = 0x00000000, + FRSRPC_CO_LOCATION_DIR_CREATE = 0x00000000 | 0x00000001, + FRSRPC_CO_LOCATION_FILE_DELETE = 0x00000002, + FRSRPC_CO_LOCATION_DIR_DELETE = 0x00000002 | 0x00000001, + FRSRPC_CO_LOCATION_FILE_MOVEIN = 0x00000004, + FRSRPC_CO_LOCATION_DIR_MOVEIN = 0x00000004 | 0x00000001, + FRSRPC_CO_LOCATION_FILE_MOVEIN2 = 0x00000006, + FRSRPC_CO_LOCATION_DIR_MOVEIN2 = 0x00000006 | 0x00000001, + FRSRPC_CO_LOCATION_FILE_MOVEOUT = 0x00000008, + FRSRPC_CO_LOCATION_DIR_MOVEOUT = 0x00000008 | 0x00000001, + FRSRPC_CO_LOCATION_FILE_MOVERS = 0x0000000a, + FRSRPC_CO_LOCATION_DIR_MOVERS = 0x0000000a | 0x00000001, + FRSRPC_CO_LOCATION_FILE_MOVEDIR = 0x0000000c, + FRSRPC_CO_LOCATION_DIR_MOVEDIR = 0x0000000c | 0x00000001, + FRSRPC_CO_LOCATION_FILE_NO_CMD = 0x0000000e, + FRSRPC_CO_LOCATION_DIR_NO_CMD = 0x0000000e | 0x00000001 + } frsrpc_CommPktCoCmdLocationCmd; + + typedef struct { + uint32 sequence_number; + frsrpc_CommPktCoCmdFlags flags; + frsrpc_CommPktCoCmdIFlags iflags; + frsrpc_CommPktCoCmdStatus status; + frsrpc_CommPktCoCmdContentCmd content_cmd; + frsrpc_CommPktCoCmdLocationCmd location_cmd; + uint32 file_attributes; + uint32 file_version_number; + uint32 partern_ack_sequence_number; + [value(0)] uint32 not_used; + hyper file_size; + hyper file_offset; + hyper frs_vsn; + hyper file_usn; + hyper jrnl_usn; + hyper jrnl_first_usn; + uint32 original_replica_num; + uint32 new_replica_num; + GUID change_order_guid; + GUID originator_guid; + GUID file_guid; + GUID old_parent_guid; + GUID new_parent_guid; + GUID connection_guid; + hyper ack_version; + [value(0)] hyper spare2ul1; + [value(0)] hyper spare1guid_p1; + [value(0)] hyper spare1guid_p2; + [value(0)] hyper spare2guid_p1; + [value(0)] hyper spare3guid_p2; + [value(0)] uint32 spare1wcs; + [value(0)] uint32 spare2wcs; + [value(0)] uint32 extension; + [value(0)] uint32 spare2bin; + NTTIME event_time; + [value(2*strlen_m(file_name))] uint16 file_name_length; +#define FRSRPC_MAX_PATH 260 + [charset(UTF16)] uint16 file_name[FRSRPC_MAX_PATH+1]; + [value(0)] uint8 padding1; + [value(0)] uint8 padding2; + [value(0)] uint8 padding3; + [value(0)] uint8 padding4; + } frsrpc_CommPktChangeOrderCommand; + + typedef [v1_enum,flag(NDR_PAHEX)] enum { + FRSRPC_DATA_EXTENSION_TERMINATOR = 0x00000000, + FRSRPC_DATA_EXTENSION_MD5_CHECKSUM = 0x00000001, + FRSRPC_DATA_EXTENSION_RETRY_TIMEOUT = 0x00000002 + } frsrpc_CommPktDataExtensionType; + + typedef [flag(NDR_PAHEX)] struct { + [value(0x00000018)] uint32 prefix_size; + [value(FRSRPC_DATA_EXTENSION_MD5_CHECKSUM)] + frsrpc_CommPktDataExtensionType prefix_type; + uint8 data[16]; + } frsrpc_CommPktDataExtensionChecksum; + + typedef struct { + [value(0x00000018)] uint32 prefix_size; + [value(FRSRPC_DATA_EXTENSION_RETRY_TIMEOUT)] + frsrpc_CommPktDataExtensionType prefix_type; + uint32 count; + [value(0)] uint32 not_used; + NTTIME first_try_time; + } frsrpc_CommPktDataExtensionRetryTimeout; + + typedef [flag(NDR_PAHEX)] enum { + FRSRPC_CO_RECORD_EXTENSION_VERSION_WIN2K = 0x0000, + FRSRPC_CO_RECORD_EXTENSION_VERSION_1 = 0x0001 + } frsrpc_CommPktCoRecordExtensionMajor; + + typedef struct { + [value(0x00000028)] uint32 field_size; + [value(FRSRPC_CO_RECORD_EXTENSION_VERSION_WIN2K)] + frsrpc_CommPktCoRecordExtensionMajor major; + [value(0x0001)] uint16 offset_count; + [value(0x00000010)] uint32 offset; + [value(0)] uint32 offset_last; + frsrpc_CommPktDataExtensionChecksum data_checksum; + } frsrpc_CommPktCoRecordExtensionWin2k; + + typedef struct { + [value(0x00000048)] uint32 field_size; + frsrpc_CommPktCoRecordExtensionMajor major; + [value(0x0002)] uint16 offset_count; + [value(0x00000018)] uint32 offset0; + [value(0x00000030)] uint32 offset1;/*TODO: is this correct??? */ + [value(0)] uint32 offset_last; + [value(0)] uint32 not_used; + frsrpc_CommPktDataExtensionChecksum data_checksum; + frsrpc_CommPktDataExtensionRetryTimeout data_retry_timeout; + } frsrpc_CommPktChangeOrderRecordExtension; + + typedef [v1_enum,flag(NDR_PAHEX)] enum { + FRSRPC_COMMAND_REMOTE_CO = 0x00000218, + FRSRPC_COMMAND_RECEIVING_STATE = 0x00000238, + FRSRPC_COMMAND_REMOTE_CO_DONE = 0x00000250, + FRSRPC_COMMAND_ABORT_FETCH = 0x00000246, + FRSRPC_COMMAND_RETRY_FETCH = 0x00000244, + FRSRPC_COMMAND_NEED_JOIN = 0x00000121, + FRSRPC_COMMAND_START_JOIN = 0x00000122, + FRSRPC_COMMAND_JOINING = 0x00000130, + FRSRPC_COMMAND_JOINED = 0x00000128, + FRSRPC_COMMAND_UNJOIN_REMOTE = 0x00000148, + FRSRPC_COMMAND_WJOIN_DONE = 0x00000136, + FRSRPC_COMMAND_SEND_STAGE = 0x00000228 + } frsrpc_CommPktCommand; + + typedef [flag(NDR_PAHEX)] enum { + FRSRPC_COMM_PKT_CHUNK_BOP = 0x0001, + FRSRPC_COMM_PKT_CHUNK_COMMAND = 0x0002, + FRSRPC_COMM_PKT_CHUNK_TO = 0x0003, + FRSRPC_COMM_PKT_CHUNK_FROM = 0x0004, + FRSRPC_COMM_PKT_CHUNK_REPLICA = 0x0005, + FRSRPC_COMM_PKT_CHUNK_CONNECTION = 0x0008, + FRSRPC_COMM_PKT_CHUNK_JOIN_GUID = 0x0006, + FRSRPC_COMM_PKT_CHUNK_LAST_JOIN_TIME = 0x0012, + + FRSRPC_COMM_PKT_CHUNK_VVECTOR = 0x0007, + FRSRPC_COMM_PKT_CHUNK_JOIN_TIME = 0x0011, + FRSRPC_COMM_PKT_CHUNK_REPLICA_VERSION_GUID = 0x0014, + FRSRPC_COMM_PKT_CHUNK_COMPRESSION_GUID = 0x0018, + + FRSRPC_COMM_PKT_CHUNK_BLOCK = 0x0009, + FRSRPC_COMM_PKT_CHUNK_BLOCK_SIZE = 0x000A, + FRSRPC_COMM_PKT_CHUNK_FILE_SIZE = 0x000B, + FRSRPC_COMM_PKT_CHUNK_FILE_OFFSET = 0x000C, + FRSRPC_COMM_PKT_CHUNK_GVSN = 0x000E, + FRSRPC_COMM_PKT_CHUNK_CO_GUID = 0x000F, + FRSRPC_COMM_PKT_CHUNK_CO_SEQUENCE_NUMBER = 0x0010, + + FRSRPC_COMM_PKT_CHUNK_REMOTE_CO = 0x000D, + FRSRPC_COMM_PKT_CHUNK_CO_EXT_WIN2K = 0x0016, + FRSRPC_COMM_PKT_CHUNK_CO_EXTENTION_2 = 0x0017, + + FRSRPC_COMM_PKT_CHUNK_EOP = 0x0013 + } frsrpc_CommPktChunkType; + + typedef [nodiscriminant] union { + [default,flag(NDR_REMAINING)] DATA_BLOB blob; + [case(FRSRPC_COMM_PKT_CHUNK_BOP)] + [value(0)] uint32 bop; + [case(FRSRPC_COMM_PKT_CHUNK_COMMAND)] + frsrpc_CommPktCommand command; + [case(FRSRPC_COMM_PKT_CHUNK_TO)] + frsrpc_CommPktChunkGuidName to; + [case(FRSRPC_COMM_PKT_CHUNK_FROM)] + frsrpc_CommPktChunkGuidName from; + [case(FRSRPC_COMM_PKT_CHUNK_REPLICA)] + frsrpc_CommPktChunkGuidName replica; + [case(FRSRPC_COMM_PKT_CHUNK_CONNECTION)] + frsrpc_CommPktChunkGuidName connection; + [case(FRSRPC_COMM_PKT_CHUNK_JOIN_GUID)][subcontext(4)] + GUID join_guid; + [case(FRSRPC_COMM_PKT_CHUNK_LAST_JOIN_TIME)] + NTTIME last_join_time; + [case(FRSRPC_COMM_PKT_CHUNK_VVECTOR)][subcontext(4)] + frsrpc_CommPktGSVN vvector; + [case(FRSRPC_COMM_PKT_CHUNK_JOIN_TIME)][subcontext(4)] + NTTIME join_time; + [case(FRSRPC_COMM_PKT_CHUNK_REPLICA_VERSION_GUID)][subcontext(4)] + GUID replica_version_guid; + [case(FRSRPC_COMM_PKT_CHUNK_COMPRESSION_GUID)] + GUID compression_guid; + [case(FRSRPC_COMM_PKT_CHUNK_BLOCK)] + [flag(NDR_REMAINING)] DATA_BLOB block; + [case(FRSRPC_COMM_PKT_CHUNK_BLOCK_SIZE)] + hyper block_size; + [case(FRSRPC_COMM_PKT_CHUNK_FILE_SIZE)] + hyper file_size; + [case(FRSRPC_COMM_PKT_CHUNK_FILE_OFFSET)] + hyper file_offset; + [case(FRSRPC_COMM_PKT_CHUNK_GVSN)][subcontext(4)] + frsrpc_CommPktGSVN gvsn; + [case(FRSRPC_COMM_PKT_CHUNK_CO_GUID)][subcontext(4)] + GUID co_guid; + [case(FRSRPC_COMM_PKT_CHUNK_CO_SEQUENCE_NUMBER)] + uint32 co_sequnence_number; + [case(FRSRPC_COMM_PKT_CHUNK_REMOTE_CO)][subcontext(4)] + frsrpc_CommPktChangeOrderCommand remote_co; + [case(FRSRPC_COMM_PKT_CHUNK_CO_EXT_WIN2K)][subcontext(4)] + frsrpc_CommPktCoRecordExtensionWin2k co_ext_win2k; + [case(FRSRPC_COMM_PKT_CHUNK_CO_EXTENTION_2)] + frsrpc_CommPktChangeOrderRecordExtension co_extension2; + [case(FRSRPC_COMM_PKT_CHUNK_EOP)] + [value(0xFFFFFFFF)] uint32 bopend; + } frsrpc_CommPktChunkData; + + typedef [public,flag(NDR_NOALIGN)] struct { + frsrpc_CommPktChunkType type; + [subcontext(4),switch_is(type)] frsrpc_CommPktChunkData data; + } frsrpc_CommPktChunk; + + typedef [nopull,nopush,flag(NDR_NOALIGN)] struct { + uint32 num_chunks; /* this doesn't appear on the wire */ + frsrpc_CommPktChunk chunks[num_chunks]; + } frsrpc_CommPktChunkCtr; + + typedef [v1_enum] enum { + FRSRPC_COMM_PKT_MAJOR_0 = 0x00000000 + } frsrpc_CommPktMajor; + + typedef [v1_enum] enum { + FRSRPC_COMM_PKT_MINOR_0 = 0x00000000, + FRSRPC_COMM_PKT_MINOR_1 = 0x00000001, + FRSRPC_COMM_PKT_MINOR_2 = 0x00000002, + FRSRPC_COMM_PKT_MINOR_3 = 0x00000003, + FRSRPC_COMM_PKT_MINOR_4 = 0x00000004, + FRSRPC_COMM_PKT_MINOR_5 = 0x00000005, + FRSRPC_COMM_PKT_MINOR_6 = 0x00000006, + FRSRPC_COMM_PKT_MINOR_7 = 0x00000007, + FRSRPC_COMM_PKT_MINOR_8 = 0x00000008, + FRSRPC_COMM_PKT_MINOR_9 = 0x00000009 + } frsrpc_CommPktMinor; + + typedef struct { + frsrpc_CommPktMajor major; + frsrpc_CommPktMinor minor; + [value(1)] uint32 cs_id; + [value(pkt_len+12)] uint32 memory_len; + [value(ndr_size_frsrpc_CommPktChunkCtr(r->ctr, + ndr->flags))] + [range(0, 262144)] + uint32 pkt_len; + [value(0)] uint32 upk_len; + [subcontext(4),subcontext_size(pkt_len)] + frsrpc_CommPktChunkCtr *ctr; + [value(0)] uint3264 data_name; + [value(0)] uint3264 data_handle; + } frsrpc_FrsSendCommPktReq; + + WERROR frsrpc_FrsSendCommPkt( + [in] frsrpc_FrsSendCommPktReq req + ); + + /*****************/ + /* Function 0x01 */ + /* this function always return WERR_CALL_NOT_IMPLEMENTED */ + WERROR frsrpc_FrsVerifyPromotionParent( + [in,unique,string,charset(UTF16)] uint16 *parent_account, + [in,unique,string,charset(UTF16)] uint16 *parent_password, + [in,unique,string,charset(UTF16)] uint16 *replica_set_name, + [in,unique,string,charset(UTF16)] uint16 *replica_set_type, + [in] frsrpc_PartnerAuthLevel partner_auth_level, + [in] uint32 __ndr_guid_size + ); + + /*****************/ + /* Function 0x02 */ + typedef [v1_enum,flag(NDR_PAHEX)] enum { + FRSRPC_PARENT_AUTH_LEVEL_ENCRYPTED_KERBEROS = 0x00000000, + FRSRPC_PARENT_AUTH_LEVEL_NO_AUTHENTICATION = 0x00000001 + } frsrpc_PartnerAuthLevel; + + WERROR frsrpc_FrsStartPromotionParent( + [in,unique,string,charset(UTF16)] uint16 *parent_account, + [in,unique,string,charset(UTF16)] uint16 *parent_password, + [in,unique,string,charset(UTF16)] uint16 *replica_set_name, + [in,unique,string,charset(UTF16)] uint16 *replica_set_type, + [in,unique,string,charset(UTF16)] uint16 *connection_name, + [in,unique,string,charset(UTF16)] uint16 *partner_name, + [in,unique,string,charset(UTF16)] uint16 *partner_princ_name, + [in] frsrpc_PartnerAuthLevel partner_auth_level, + [in,value(16),range(16,16)] uint32 __ndr_guid_size, + [in,unique,subcontext(4),subcontext_size(16)] + GUID *connection_guid, + [in,unique,subcontext(4),subcontext_size(16)] + GUID *partner_guid, + [in,out,unique,subcontext(4),subcontext_size(16)] + GUID *parent_guid + ); + + /*****************/ + /* Function 0x03 */ + WERROR frsrpc_FrsNOP(); + + /*****************/ + /* Function 0x04 */ + [todo] void FRSRPC_BACKUP_COMPLETE(); + + /*****************/ + /* Function 0x05 */ + [todo] void FRSRPC_BACKUP_COMPLETE_5(); + + /*****************/ + /* Function 0x06 */ + [todo] void FRSRPC_BACKUP_COMPLETE_6(); + + /*****************/ + /* Function 0x07 */ + [todo] void FRSRPC_BACKUP_COMPLETE_7(); + + /*****************/ + /* Function 0x08 */ + [todo] void FRSRPC_BACKUP_COMPLETE_8(); + + /*****************/ + /* Function 0x09 */ + [todo] void FRSRPC_BACKUP_COMPLETE_9(); + + /*****************/ + /* Function 0x0a */ + [todo] void FRSRPC_VERIFY_PROMOTION_PARENT_EX(); +} diff --git a/epan/dissectors/pidl/frstrans/frstrans.cnf b/epan/dissectors/pidl/frstrans/frstrans.cnf new file mode 100644 index 00000000..a1613776 --- /dev/null +++ b/epan/dissectors/pidl/frstrans/frstrans.cnf @@ -0,0 +1,15 @@ +# Conformance file for DFS-R / FRSTRANS + +TYPE hyper "offset=cnf_dissect_hyper(tvb, offset, pinfo, tree, di, drep, @PARAM@, @HF@);" FT_UINT64 BASE_DEC 0 NULL 8 + +CODE START + +static int +cnf_dissect_hyper(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, guint32 param _U_, int hfindex) +{ + offset = dissect_ndr_uint64(tvb, offset, pinfo, tree, di, drep, hfindex, NULL); + + return offset; +} + +CODE END diff --git a/epan/dissectors/pidl/frstrans/frstrans.idl b/epan/dissectors/pidl/frstrans/frstrans.idl new file mode 100644 index 00000000..761c3eec --- /dev/null +++ b/epan/dissectors/pidl/frstrans/frstrans.idl @@ -0,0 +1,285 @@ +#include "idl_types.h" + +/*import "misc.idl";*/ + +[ + uuid("897e2e5f-93f3-4376-9c9c-fd2277495c27"), + version(1.0), + endpoint("ncacn_ip_tcp:", "ncalrpc:"), + helpstring("File Replication Service DFS-R"), + pointer_default(unique) +] +interface frstrans +{ + /*****************/ + /* Function 0x00 */ + WERROR frstrans_CheckConnectivity( + [in] GUID replica_set_guid, + [in] GUID connection_guid + ); + + /*****************/ + /* Function 0x01 */ + typedef [v1_enum,flag(NDR_PAHEX)] enum { + FRSTRANS_PROTOCOL_VERSION_W2K3R2 = 0x00050000, + FRSTRANS_PROTOCOL_VERSION_LONGHORN_SERVER = 0x00050002 + } frstrans_ProtocolVersion; + + typedef [bitmap32bit] bitmap { + FRSTRANS_TRANSPORT_SUPPORTS_RDC_SIMILARITY = 0x00000001 + } frstrans_TransportFlags; + + WERROR frstrans_EstablishConnection( + [in] GUID replica_set_guid, + [in] GUID connection_guid, + [in] frstrans_ProtocolVersion downstream_protocol_version, + [in] frstrans_TransportFlags downstream_flags, + [out,ref] frstrans_ProtocolVersion *upstream_protocol_version, + [out,ref] frstrans_TransportFlags *upstream_flags + ); + + /*****************/ + /* Function 0x02 */ + WERROR frstrans_EstablishSession( + [in] GUID connection_guid, + [in] GUID content_set_guid + ); + + /*****************/ + /* Function 0x03 */ + typedef enum { + FRSTRANS_UPDATE_REQUEST_ALL = 0x0000, + FRSTRANS_UPDATE_REQUEST_TOMBSTONES = 0x0001, + FRSTRANS_UPDATE_REQUEST_LIVE = 0x0002 + } frstrans_UpdateRequestType; + + typedef enum { + FRSTRANS_UPDATE_STATUS_DONE = 0x0002, + FRSTRANS_UPDATE_STATUS_MORE = 0x0003 + } frstrans_UpdateStatus; + + typedef struct { + GUID db_guid; + hyper low; + hyper high; + } frstrans_VersionVector; + + typedef [flag(NDR_PAHEX)] struct { + boolean32 present; + boolean32 name_conflict; + uint32 attributes; + NTTIME fence; + NTTIME clock; + NTTIME create_time; + GUID content_set_guid; + uint8 sha1_hash[20]; + uint8 rdc_similarity[16]; + GUID uid_db_guid; + hyper uid_version; + GUID gsvn_db_guid; + hyper gsvn_version; + GUID parent_db_guid; + hyper parent_version; + [string,charset(UTF16)] uint16 name[261]; + uint32 flags; + } frstrans_Update; + + WERROR frstrans_RequestUpdates( + [in] GUID connection_guid, + [in] GUID content_set_guid, + [in,range(0,256)] uint32 credits_available, + [in,range(0,1)] boolean32 hash_requested, + [in,range(0,2)] + frstrans_UpdateRequestType update_request_type, + [in] uint32 version_vector_diff_count, + [in,size_is(version_vector_diff_count)] + frstrans_VersionVector *version_vector_diff, + [out,ref,size_is(credits_available),length_is(*update_count)] + frstrans_Update *frs_update, + [out,ref] uint32 *update_count, + [out,ref] frstrans_UpdateStatus *update_status, + [out,ref] GUID *gvsn_db_guid, + [out,ref] hyper *gvsn_version + ); + + /*****************/ + /* Function 0x04 */ + typedef enum { + FRSTRANS_VERSION_REQUEST_NORNAL_SYNC = 0x0000, + FRSTRANS_VERSION_REQUEST_SLOW_SYNC = 0x0001, + FRSTRANS_VERSION_REQUEST_SLAVE_SYNC = 0x0002 + } frstrans_VersionRequestType; + + typedef enum { + FRSTRANS_VERSION_CHANGE_NOTIFY = 0x0000, + FRSTRANS_VERSION_CHANGE_ALL = 0x0002 + } frstrans_VersionChangeType; + + WERROR frstrans_RequestVersionVector( + [in] uint32 sequence_number, + [in] GUID connection_guid, + [in] GUID content_set_guid, + [in,range(0,2)] frstrans_VersionRequestType request_type, + [in,range(0,2)] frstrans_VersionChangeType change_type, + [in] hyper vv_generation + ); + + /*****************/ + /* Function 0x05 */ + typedef struct { + GUID machine_guid; + uint32 year; + uint32 month; + uint32 day_of_week; + uint32 day; + uint32 hour; + uint32 minute; + uint32 second; + uint32 milli_seconds; + } frstrans_EpoqueVector; + + typedef struct { + hyper vv_generation; + uint32 version_vector_count; + [size_is(version_vector_count)] + frstrans_VersionVector *version_vector; + uint32 epoque_vector_count; + [size_is(epoque_vector_count)] + frstrans_EpoqueVector *epoque_vector; + } frstrans_AsyncVersionVectorResponse; + + typedef struct { + uint32 sequence_number; + WERROR status; + frstrans_AsyncVersionVectorResponse response; + } frstrans_AsyncResponseContext; + + WERROR frstrans_AsyncPoll( + [in] GUID connection_guid, + [out,ref] frstrans_AsyncResponseContext *response + ); + + /*****************/ + /* Function 0x06 */ + void FRSTRANS_REQUEST_RECORDS(); + + /*****************/ + /* Function 0x07 */ + void FRSTRANS_UPDATE_CANCEL(); + + /*****************/ + /* Function 0x08 */ + void FRSTRANS_RAW_GET_FILE_DATA(); + + /*****************/ + /* Function 0x09 */ + void FRSTRANS_RDC_GET_SIGNATURES(); + + /*****************/ + /* Function 0x0a */ + void FRSTRANS_RDC_PUSH_SOURCE_NEEDS(); + + /*****************/ + /* Function 0x0b */ + void FRSTRANS_RDC_GET_FILE_DATA(); + + /*****************/ + /* Function 0x0c */ + void FRSTRANS_RDC_CLOSE(); + + /*****************/ + /* Function 0x0d */ + typedef enum { + FRSTRANS_STAGING_POLICY_SERVER_DEFAULTY = 0x0000, + FRSTRANS_STAGING_POLICY_STATGING_REQUIRED = 0x0001, + FRSTRANS_STAGING_POLICY_RESTATGING_REQUIRED = 0x0002 + } frstrans_RequestedStagingPolicy; + + typedef enum { + FRSTRANS_RDC_FILTER_GENERIC = 0x0000, + FRSTRANS_RDC_FILTER_MAX = 0x0001, + FRSTRANS_RDC_FILTER_POINT = 0x0002, + FRSTRANS_RDC_MAX_ALGORITHM = 0x0003 + } frstrans_RdcChunckerAlgorithm; + + typedef struct { + frstrans_RdcChunckerAlgorithm chunker_type; + uint8 chunker_parameters[64]; + } frstrans_RdcParameterGeneric; + + typedef struct { + [range(128,1024*16)] uint16 min_horizon_size; + [range(2,96)] uint16 max_window_size; + } frstrans_RdcParameterFilterMax; + + typedef struct { + uint16 min_chunk_size; + uint16 max_chunk_size; + } frstrans_RdcParameterFilterPoint; + + typedef [switch_type(frstrans_RdcChunckerAlgorithm)] union { + [case(FRSTRANS_RDC_FILTER_GENERIC)] + frstrans_RdcParameterGeneric filter_generic; + [case(FRSTRANS_RDC_FILTER_MAX)] + frstrans_RdcParameterFilterMax filter_max; + [case(FRSTRANS_RDC_FILTER_POINT)] + frstrans_RdcParameterFilterPoint filter_point; + } frstrans_RdcParameterUnion; + + typedef struct { + frstrans_RdcChunckerAlgorithm rdc_chunker_algorithm; + [switch_is(rdc_chunker_algorithm)] frstrans_RdcParameterUnion u; + } frstrans_RdcParameters; + + typedef enum { + FRSTRANS_RDC_VERSION = 0x0001 + } frstrans_RdcVersion; + + typedef enum { + FRSTRANS_RDC_VERSION_COMPATIBLE = 0x0001 + } frstrans_RdcVersionCompatible; + + typedef enum { + FRSTRANS_RDC_UNCOMPRESSED = 0x0000, + FRSTRANS_RDC_XPRESS = 0x0001 + } frstrans_RdcCompressionAlgorithm; + + typedef struct { + hyper on_disk_file_size; + hyper file_size_estimate; + frstrans_RdcVersion rdc_version; + frstrans_RdcVersionCompatible rdc_minimum_compatible_version; + [range(0,8)] uint8 rdc_signature_levels; + frstrans_RdcCompressionAlgorithm compression_algorithm; + [size_is(rdc_signature_levels)] + frstrans_RdcParameters rdc_filter_parameters[*]; + } frstrans_RdcFileInfo; + + WERROR frstrans_InitializeFileTransferAsync( + [in] GUID connection_guid, + [in,out,ref] frstrans_Update *frs_update, + [in,range(0,1)] boolean32 rdc_desired, + [in,out,ref] frstrans_RequestedStagingPolicy *staging_policy, + [out,ref] policy_handle *server_context, + [out,ref] frstrans_RdcFileInfo **rdc_file_info, + [out,ref,size_is(buffer_size),length_is(*size_read)] + uint8 *data_buffer, + [in,range(0,262144)] uint32 buffer_size, + [out,ref] uint32 *size_read, + [out,ref] boolean32 *is_end_of_file + ); + + /*****************/ + /* Function 0x0e */ + void FRSTRANS_OPNUM_0E_NOT_USED_ON_THE_WIRE(); + + /* The following functions are new in Windows 2008 */ + + /*****************/ + /* Function 0x0f */ + void FRSTRANS_RAW_GET_FILE_DATA_ASYNC(); + + /*****************/ + /* Function 0x10 */ + void FRSTRANS_RDC_GET_FILE_DATA_ASYNC(); +} diff --git a/epan/dissectors/pidl/fsrvp/fsrvp.cnf b/epan/dissectors/pidl/fsrvp/fsrvp.cnf new file mode 100644 index 00000000..f77001d5 --- /dev/null +++ b/epan/dissectors/pidl/fsrvp/fsrvp.cnf @@ -0,0 +1,109 @@ +# Conformance file for FSRVP + +MANUAL fsrvp_dissect_SetContext_request +MANUAL fsrvp_dissect_StartShadowCopySet_request +MANUAL fsrvp_dissect_AddToShadowCopySet_request +MANUAL fsrvp_dissect_CommitShadowCopySet_request +MANUAL fsrvp_dissect_ExposeShadowCopySet_request +MANUAL fsrvp_dissect_RecoveryCompleteShadowCopySet_request +MANUAL fsrvp_dissect_AbortShadowCopySet_request +MANUAL fsrvp_dissect_GetShareMapping_request +MANUAL fsrvp_dissect_DeleteShareMapping_request +MANUAL fsrvp_dissect_PrepareShadowCopySet_request + +CODE START + +static int +fsrvp_dissect_SetContext_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="SetContext"; + offset = fsrvp_dissect_element_SetContext_Context(tvb, offset, pinfo, tree, di, drep); + return offset; +} + +static int +fsrvp_dissect_StartShadowCopySet_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="StartShadowCopySet"; + offset = fsrvp_dissect_element_StartShadowCopySet_ClientShadowCopySetId(tvb, offset, pinfo, tree, di, drep); + return offset; +} + +static int +fsrvp_dissect_AddToShadowCopySet_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="AddToShadowCopySet"; + offset = fsrvp_dissect_element_AddToShadowCopySet_ClientShadowCopyId(tvb, offset, pinfo, tree, di, drep); + offset = fsrvp_dissect_element_AddToShadowCopySet_ShadowCopySetId(tvb, offset, pinfo, tree, di, drep); + offset = fsrvp_dissect_element_AddToShadowCopySet_ShareName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +fsrvp_dissect_CommitShadowCopySet_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="CommitShadowCopySet"; + offset = fsrvp_dissect_element_CommitShadowCopySet_ShadowCopySetId(tvb, offset, pinfo, tree, di, drep); + offset = fsrvp_dissect_element_CommitShadowCopySet_TimeOutInMilliseconds(tvb, offset, pinfo, tree, di, drep); + return offset; +} + +static int +fsrvp_dissect_ExposeShadowCopySet_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="ExposeShadowCopySet"; + offset = fsrvp_dissect_element_ExposeShadowCopySet_ShadowCopySetId(tvb, offset, pinfo, tree, di, drep); + offset = fsrvp_dissect_element_ExposeShadowCopySet_TimeOutInMilliseconds(tvb, offset, pinfo, tree, di, drep); + return offset; +} + +static int +fsrvp_dissect_RecoveryCompleteShadowCopySet_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="RecoveryCompleteShadowCopySet"; + offset = fsrvp_dissect_element_RecoveryCompleteShadowCopySet_ShadowCopySetId(tvb, offset, pinfo, tree, di, drep); + return offset; +} + +static int +fsrvp_dissect_AbortShadowCopySet_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="AbortShadowCopySet"; + offset = fsrvp_dissect_element_AbortShadowCopySet_ShadowCopySetId(tvb, offset, pinfo, tree, di, drep); + return offset; +} + +static int +fsrvp_dissect_GetShareMapping_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="GetShareMapping"; + offset = fsrvp_dissect_element_GetShareMapping_ShadowCopyId(tvb, offset, pinfo, tree, di, drep); + offset = fsrvp_dissect_element_GetShareMapping_ShadowCopySetId(tvb, offset, pinfo, tree, di, drep); + offset = fsrvp_dissect_element_GetShareMapping_ShareName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + offset = fsrvp_dissect_element_GetShareMapping_Level(tvb, offset, pinfo, tree, di, drep); + return offset; +} + +static int +fsrvp_dissect_DeleteShareMapping_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="DeleteShareMapping"; + offset = fsrvp_dissect_element_DeleteShareMapping_ShadowCopySetId(tvb, offset, pinfo, tree, di, drep); + offset = fsrvp_dissect_element_DeleteShareMapping_ShadowCopyId(tvb, offset, pinfo, tree, di, drep); + offset = fsrvp_dissect_element_DeleteShareMapping_ShareName(tvb, offset, pinfo, tree, di, drep); + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + return offset; +} + +static int +fsrvp_dissect_PrepareShadowCopySet_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + di->dcerpc_procedure_name="PrepareShadowCopySet"; + offset = fsrvp_dissect_element_PrepareShadowCopySet_ShadowCopySetId(tvb, offset, pinfo, tree, di, drep); + offset = fsrvp_dissect_element_PrepareShadowCopySet_TimeOutInMilliseconds(tvb, offset, pinfo, tree, di, drep); + return offset; +} + +CODE END diff --git a/epan/dissectors/pidl/fsrvp/fsrvp.idl b/epan/dissectors/pidl/fsrvp/fsrvp.idl new file mode 100644 index 00000000..b76e822f --- /dev/null +++ b/epan/dissectors/pidl/fsrvp/fsrvp.idl @@ -0,0 +1,105 @@ +#include "idl_types.h" + +/* + * File Server Remote VSS Protocol Definitions + */ + +[ uuid("a8e0653c-2744-4389-a61d-7373df8b2292"), + version(1.0), + endpoint("ncacn_np:[\\pipe\\FssagentRpc]"), + helpstring("File Server Remote VSS Protocol"), + pointer_default(unique) +] interface fsrvp +{ + const uint32 FSRVP_E_BAD_STATE = 0x80042301; + const uint32 FSRVP_E_SHADOW_COPY_SET_IN_PROGRESS = 0x80042316; + const uint32 FSRVP_E_NOT_SUPPORTED = 0x8004230C; + const uint32 FSRVP_E_WAIT_TIMEOUT = 0x00000102; + const uint32 FSRVP_E_WAIT_FAILED = 0xFFFFFFFF; + const uint32 FSRVP_E_OBJECT_ALREADY_EXISTS = 0x8004230D; + const uint32 FSRVP_E_OBJECT_NOT_FOUND = 0x80042308; + const uint32 FSRVP_E_UNSUPPORTED_CONTEXT = 0x8004231B; + const uint32 FSRVP_E_BAD_ID = 0x80042302; /* wire, not documented */ + const uint32 FSRVP_E_SHADOWCOPYSET_ID_MISMATCH = 0x80042501; + typedef struct { + GUID ShadowCopySetId; + GUID ShadowCopyId; + [string,charset(UTF16)] uint16 *ShareNameUNC; + [string,charset(UTF16)] uint16 *ShadowCopyShareName; + NTTIME tstamp; + } fssagent_share_mapping_1; + + typedef union { + [case(1)] fssagent_share_mapping_1 *ShareMapping1; + [default]; + } fssagent_share_mapping; + + const uint32 FSRVP_RPC_VERSION_1 = 0x000000001; + NTSTATUS fsrvp_GetSupportedVersion( + [out] uint32 *MinVersion, + [out] uint32 *MaxVersion); + + const uint32 ATTR_PERSISTENT = 0x00000001; + const uint32 ATTR_NO_AUTO_RECOVERY = 0x00000002; + const uint32 ATTR_NO_AUTO_RELEASE = 0x00000008; + const uint32 ATTR_NO_WRITERS = 0x00000010; + const uint32 ATTR_FILE_SHARE = 0x04000000; + const uint32 ATTR_AUTO_RECOVERY = 0x00400000; + + const uint32 FSRVP_CTX_BACKUP = 0x00000000; + const uint32 FSRVP_CTX_FILE_SHARE_BACKUP = 0x00000010; + const uint32 FSRVP_CTX_NAS_ROLLBACK = 0x00000019; + const uint32 FSRVP_CTX_APP_ROLLBACK = 0x00000009; + NTSTATUS fsrvp_SetContext( + [in] uint32 Context); + + NTSTATUS fsrvp_StartShadowCopySet( + [in] GUID ClientShadowCopySetId, + [out] GUID *pShadowCopySetId); + + NTSTATUS fsrvp_AddToShadowCopySet( + [in] GUID ClientShadowCopyId, + [in] GUID ShadowCopySetId, + [in] [string,charset(UTF16)] uint16 *ShareName, + [out] GUID *pShadowCopyId); + + NTSTATUS fsrvp_CommitShadowCopySet( + [in] GUID ShadowCopySetId, + [in] uint32 TimeOutInMilliseconds); + + NTSTATUS fsrvp_ExposeShadowCopySet( + [in] GUID ShadowCopySetId, + [in] uint32 TimeOutInMilliseconds); + + NTSTATUS fsrvp_RecoveryCompleteShadowCopySet( + [in] GUID ShadowCopySetId); + + NTSTATUS fsrvp_AbortShadowCopySet( + [in] GUID ShadowCopySetId); + + NTSTATUS fsrvp_IsPathSupported( + [in] [string,charset(UTF16)] uint16 *ShareName, + [out] boolean32 *SupportedByThisProvider, + [out] [string,charset(UTF16)] uint16 **OwnerMachineName); + + NTSTATUS fsrvp_IsPathShadowCopied( + [in] [string,charset(UTF16)] uint16 *ShareName, + [out] boolean32 *ShadowCopyPresent, + [out] int32 *ShadowCopyCompatibility); + + NTSTATUS fsrvp_GetShareMapping( + [in] GUID ShadowCopyId, + [in] GUID ShadowCopySetId, + [in] [string,charset(UTF16)] uint16 *ShareName, + [in] uint32 Level, + [out,switch_is(Level)] fssagent_share_mapping *ShareMapping); + + NTSTATUS fsrvp_DeleteShareMapping( + [in] GUID ShadowCopySetId, + [in] GUID ShadowCopyId, + [in] [string,charset(UTF16)] uint16 *ShareName); + + NTSTATUS fsrvp_PrepareShadowCopySet( + [in] GUID ShadowCopySetId, + [in] uint32 TimeOutInMilliseconds); +} diff --git a/epan/dissectors/pidl/idl_types.h b/epan/dissectors/pidl/idl_types.h new file mode 100644 index 00000000..3c6c12cd --- /dev/null +++ b/epan/dissectors/pidl/idl_types.h @@ -0,0 +1,72 @@ +#define STR_ASCII LIBNDR_FLAG_STR_ASCII +#define STR_LEN4 LIBNDR_FLAG_STR_LEN4 +#define STR_SIZE4 LIBNDR_FLAG_STR_SIZE4 +#define STR_SIZE2 LIBNDR_FLAG_STR_SIZE2 +#define STR_NOTERM LIBNDR_FLAG_STR_NOTERM +#define STR_NULLTERM LIBNDR_FLAG_STR_NULLTERM +#define STR_BYTESIZE LIBNDR_FLAG_STR_BYTESIZE +#define STR_CONFORMANT LIBNDR_FLAG_STR_CONFORMANT +#define STR_CHARLEN LIBNDR_FLAG_STR_CHARLEN +#define STR_UTF8 LIBNDR_FLAG_STR_UTF8 + +/* + a null terminated UCS2 string +*/ +#define nstring [flag(STR_NULLTERM)] string + +/* + an ascii string prefixed with [offset] [length], both 32 bits + null terminated +*/ +#define ascstr2 [flag(STR_ASCII|STR_LEN4)] string + +/* + an ascii string prefixed with [size], 32 bits +*/ +#define asclstr [flag(STR_ASCII|STR_SIZE4)] string + +/* + an ascii string prefixed with [size], 16 bits + null terminated +*/ +#define ascstr3 [flag(STR_ASCII|STR_SIZE2)] string + +/* + an ascii string prefixed with [size] [offset] [length], all 32 bits + not null terminated +*/ +#define ascstr_noterm [flag(STR_NOTERM|STR_ASCII|STR_SIZE4|STR_LEN4)] string + +/* + a null terminated ascii string +*/ +#define astring [flag(STR_ASCII|STR_NULLTERM)] string + +/* + a null terminated UTF8 string +*/ +#define utf8string [flag(STR_UTF8|STR_NULLTERM)] string + +/* + a null terminated UCS2 string +*/ +#define nstring_array [flag(STR_NULLTERM)] string_array + +#define NDR_NOALIGN LIBNDR_FLAG_NOALIGN +#define NDR_REMAINING LIBNDR_FLAG_REMAINING +#define NDR_ALIGN2 LIBNDR_FLAG_ALIGN2 +#define NDR_ALIGN4 LIBNDR_FLAG_ALIGN4 +#define NDR_ALIGN8 LIBNDR_FLAG_ALIGN8 + +/* this flag is used to force a section of IDL as little endian. It is + needed for the epmapper IDL, which is defined as always being LE */ +#define NDR_LITTLE_ENDIAN LIBNDR_FLAG_LITTLE_ENDIAN +#define NDR_BIG_ENDIAN LIBNDR_FLAG_BIGENDIAN + +/* + this is used to control formatting of uint8 arrays +*/ +#define NDR_PAHEX LIBNDR_PRINT_ARRAY_HEX + +#define NDR_RELATIVE_REVERSE LIBNDR_FLAG_RELATIVE_REVERSE +#define NDR_NO_RELATIVE_REVERSE LIBNDR_FLAG_NO_RELATIVE_REVERSE diff --git a/epan/dissectors/pidl/initshutdown/initshutdown.cnf b/epan/dissectors/pidl/initshutdown/initshutdown.cnf new file mode 100644 index 00000000..25691da2 --- /dev/null +++ b/epan/dissectors/pidl/initshutdown/initshutdown.cnf @@ -0,0 +1 @@ +TYPE lsa_StringLarge "offset=lsarpc_dissect_struct_lsa_StringLarge(tvb, offset, pinfo, tree, di, drep, @HF@, @PARAM@);" FT_NONE BASE_NONE 0 NULL NULL diff --git a/epan/dissectors/pidl/initshutdown/initshutdown.idl b/epan/dissectors/pidl/initshutdown/initshutdown.idl new file mode 100644 index 00000000..ffe068d2 --- /dev/null +++ b/epan/dissectors/pidl/initshutdown/initshutdown.idl @@ -0,0 +1,91 @@ +#include "idl_types.h" + +/* + initshutdown interface definition +*/ + +import "lsa/lsa.idl"; + +[ + uuid("894de0c0-0d55-11d3-a322-00c04fa321a1"), + version(1.0), + endpoint("ncacn_np:[\\pipe\\InitShutdown]"), + pointer_default(unique), + helpstring("Init shutdown service") +] interface initshutdown +{ + typedef [v1_enum] enum { + SHTDN_REASON_MAJOR_OTHER = 0x00000000, + SHTDN_REASON_MAJOR_HARDWARE = 0x00010000, + SHTDN_REASON_MAJOR_OPERATINGSYSTEM = 0x00020000, + SHTDN_REASON_MAJOR_SOFTWARE = 0x00030000, + SHTDN_REASON_MAJOR_APPLICATION = 0x00040000, + SHTDN_REASON_MAJOR_SYSTEM = 0x00050000, + SHTDN_REASON_MAJOR_POWER = 0x00060000, + SHTDN_REASON_MAJOR_LEGACY_API = 0x00070000 + } initshutdown_ReasonMajor; + + typedef [v1_enum] enum { + SHTDN_REASON_MINOR_OTHER = 0x00000000, + SHTDN_REASON_MINOR_MAINTENANCE = 0x00000001, + SHTDN_REASON_MINOR_INSTALLATION = 0x00000002, + SHTDN_REASON_MINOR_UPGRADE = 0x00000003, + SHTDN_REASON_MINOR_RECONFIG = 0x00000004, + SHTDN_REASON_MINOR_HUNG = 0x00000005, + SHTDN_REASON_MINOR_UNSTABLE = 0x00000006, + SHTDN_REASON_MINOR_DISK = 0x00000007, + SHTDN_REASON_MINOR_PROCESSOR = 0x00000008, + SHTDN_REASON_MINOR_NETWORKCARD = 0x00000009, + SHTDN_REASON_MINOR_POWER_SUPPLY = 0x0000000a, + SHTDN_REASON_MINOR_CORDUNPLUGGED = 0x0000000b, + SHTDN_REASON_MINOR_ENVIRONMENT = 0x0000000c, + SHTDN_REASON_MINOR_HARDWARE_DRIVER = 0x0000000d, + SHTDN_REASON_MINOR_OTHERDRIVER = 0x0000000e, + SHTDN_REASON_MINOR_BLUESCREEN = 0x0000000f, + SHTDN_REASON_MINOR_SERVICEPACK = 0x00000010, + SHTDN_REASON_MINOR_HOTFIX = 0x00000011, + SHTDN_REASON_MINOR_SECURITYFIX = 0x00000012, + SHTDN_REASON_MINOR_SECURITY = 0x00000013, + SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY = 0x00000014, + SHTDN_REASON_MINOR_WMI = 0x00000015, + SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL= 0x00000016, + SHTDN_REASON_MINOR_HOTFIX_UNINSTALL = 0x00000017, + SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL= 0x00000018, + SHTDN_REASON_MINOR_MMC = 0x00000019, + SHTDN_REASON_MINOR_TERMSRV = 0x00000020 + } initshutdown_ReasonMinor; + + typedef [bitmap32bit] bitmap { + SHTDN_REASON_FLAG_USER_DEFINED = 0x40000000, + SHTDN_REASON_FLAG_PLANNED = 0x80000000 + } initshutdown_ReasonFlags; + + WERROR initshutdown_Init( + [in,unique] uint16 *hostname, + /* + * Note: lsa_String and winreg_String both result + * in WERR_INVALID_PARAM + */ + [in,unique] lsa_StringLarge *message, + [in] uint32 timeout, + [in] uint8 force_apps, + [in] uint8 do_reboot + ); + + WERROR initshutdown_Abort( + [in,unique] uint16 *server + ); + + WERROR initshutdown_InitEx( + [in,unique] uint16 *hostname, + /* + * Note: lsa_String and winreg_String both result + * in WERR_INVALID_PARAM + */ + [in,unique] lsa_StringLarge *message, + [in] uint32 timeout, + [in] uint8 force_apps, + [in] uint8 do_reboot, + [in] uint32 reason + ); +} diff --git a/epan/dissectors/pidl/iwbemlevel1login/iwbemlevel1login.cnf b/epan/dissectors/pidl/iwbemlevel1login/iwbemlevel1login.cnf new file mode 100644 index 00000000..1fd19e09 --- /dev/null +++ b/epan/dissectors/pidl/iwbemlevel1login/iwbemlevel1login.cnf @@ -0,0 +1,170 @@ +# Conformance file for iwbemlevel1login + +MANUAL IWbemLevel1Login_dissect_element_EstablishPosition_orpcthis +MANUAL IWbemLevel1Login_dissect_element_EstablishPosition_orpcthat_ +MANUAL IWbemLevel1Login_dissect_element_RequestChallenge_orpcthis +MANUAL IWbemLevel1Login_dissect_element_RequestChallenge_orpcthat_ +MANUAL IWbemLevel1Login_dissect_element_WBEMLogin_orpcthis +MANUAL IWbemLevel1Login_dissect_element_WBEMLogin_orpcthat_ +MANUAL IWbemLevel1Login_dissect_element_NTLMLogin_orpcthis +MANUAL IWbemLevel1Login_dissect_element_NTLMLogin_orpcthat_ +MANUAL IWbemLevel1Login_dissect_element_IWbemServices_services + +NOEMIT IWbemLevel1Login_dissect_element_IWbemServices_services_ + +ETT_FIELD ett_IWbemLevel1Login_EstablishPosition_orpcthis +ETT_FIELD ett_IWbemLevel1Login_EstablishPosition_orpcthat +ETT_FIELD ett_IWbemLevel1Login_RequestChallenge_orpcthis +ETT_FIELD ett_IWbemLevel1Login_RequestChallenge_orpcthat +ETT_FIELD ett_IWbemLevel1Login_WBEMLogin_orpcthis +ETT_FIELD ett_IWbemLevel1Login_WBEMLogin_orpcthat +ETT_FIELD ett_IWbemLevel1Login_NTLMLogin_orpcthis +ETT_FIELD ett_IWbemLevel1Login_NTLMLogin_orpcthat + +CODE START + + #include "packet-dcom.h" + +/* EstablishPosition */ +static int +IWbemLevel1Login_dissect_element_EstablishPosition_orpcthis(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + proto_item *sub_item; + proto_tree *sub_tree; + + sub_item = proto_tree_add_item(tree, hf_IWbemLevel1Login_EstablishPosition_orpcthis, tvb, offset, 0, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_IWbemLevel1Login_EstablishPosition_orpcthis); + + offset = dissect_dcom_this(tvb, offset, pinfo, sub_tree, di, drep); + + return offset; +} + +static int +IWbemLevel1Login_dissect_element_EstablishPosition_orpcthat_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + proto_item *sub_item; + proto_tree *sub_tree; + + sub_item = proto_tree_add_item(tree, hf_IWbemLevel1Login_EstablishPosition_orpcthat, tvb, offset, 0, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_IWbemLevel1Login_EstablishPosition_orpcthat); + + offset = dissect_dcom_that(tvb, offset, pinfo, sub_tree, di, drep); + + return offset; +} + +/* RequestChallenge */ +static int +IWbemLevel1Login_dissect_element_RequestChallenge_orpcthis(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + proto_item *sub_item; + proto_tree *sub_tree; + + sub_item = proto_tree_add_item(tree, hf_IWbemLevel1Login_RequestChallenge_orpcthis, tvb, offset, 0, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_IWbemLevel1Login_RequestChallenge_orpcthis); + + offset = dissect_dcom_this(tvb, offset, pinfo, sub_tree, di, drep); + + return offset; +} + +static int +IWbemLevel1Login_dissect_element_RequestChallenge_orpcthat_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + proto_item *sub_item; + proto_tree *sub_tree; + + sub_item = proto_tree_add_item(tree, hf_IWbemLevel1Login_RequestChallenge_orpcthat, tvb, offset, 0, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_IWbemLevel1Login_RequestChallenge_orpcthat); + + offset = dissect_dcom_that(tvb, offset, pinfo, sub_tree, di, drep); + + return offset; +} + +/* WBEMLogin */ +static int +IWbemLevel1Login_dissect_element_WBEMLogin_orpcthis(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + proto_item *sub_item; + proto_tree *sub_tree; + + sub_item = proto_tree_add_item(tree, hf_IWbemLevel1Login_WBEMLogin_orpcthis, tvb, offset, 0, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_IWbemLevel1Login_WBEMLogin_orpcthis); + + offset = dissect_dcom_this(tvb, offset, pinfo, sub_tree, di, drep); + + return offset; +} + +static int +IWbemLevel1Login_dissect_element_WBEMLogin_orpcthat_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + proto_item *sub_item; + proto_tree *sub_tree; + + sub_item = proto_tree_add_item(tree, hf_IWbemLevel1Login_WBEMLogin_orpcthat, tvb, offset, 0, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_IWbemLevel1Login_WBEMLogin_orpcthat); + + offset = dissect_dcom_that(tvb, offset, pinfo, sub_tree, di, drep); + + return offset; +} + +/* NTLMLogin */ +static int +IWbemLevel1Login_dissect_element_NTLMLogin_orpcthis(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + proto_item *sub_item; + proto_tree *sub_tree; + + sub_item = proto_tree_add_item(tree, hf_IWbemLevel1Login_NTLMLogin_orpcthis, tvb, offset, 0, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_IWbemLevel1Login_NTLMLogin_orpcthis); + + offset = dissect_dcom_this(tvb, offset, pinfo, sub_tree, di, drep); + + return offset; +} + +static int +IWbemLevel1Login_dissect_element_NTLMLogin_orpcthat_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + proto_item *sub_item; + proto_tree *sub_tree; + + sub_item = proto_tree_add_item(tree, hf_IWbemLevel1Login_NTLMLogin_orpcthat, tvb, offset, 0, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_IWbemLevel1Login_NTLMLogin_orpcthat); + + offset = dissect_dcom_that(tvb, offset, pinfo, sub_tree, di, drep); + + return offset; +} + +static int +IWbemLevel1Login_dissect_element_IWbemServices_services_(tvbuff_t *tvb, int offset, int length _U_, packet_info *pinfo, proto_tree *tree, dcerpc_info *di, guint8 *drep _U_) +; + +static int +IWbemLevel1Login_dissect_element_IWbemServices_services(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray_block(tvb, offset, pinfo, tree, di, drep, &IWbemLevel1Login_dissect_element_IWbemServices_services_); + + return offset; +} + +static int +IWbemLevel1Login_dissect_element_IWbemServices_services_(tvbuff_t *tvb, int offset, int length _U_, packet_info *pinfo, proto_tree *tree, dcerpc_info *di, guint8 *drep _U_) +{ + proto_item *sub_item; + proto_tree *sub_tree; + + sub_item = proto_tree_add_item(tree, hf_IWbemLevel1Login_WBEMLogin_ppNamespace, tvb, offset, 0, ENC_NA); + sub_tree = proto_item_add_subtree(sub_item, ett_IWbemLevel1Login_IWbemServices); + + offset = dissect_dcom_OBJREF(tvb, offset, pinfo, sub_tree, di, drep, hf_IWbemLevel1Login_WBEMLogin_ppNamespace, NULL); + + return offset; +} + +CODE END
\ No newline at end of file diff --git a/epan/dissectors/pidl/iwbemlevel1login/iwbemlevel1login.idl b/epan/dissectors/pidl/iwbemlevel1login/iwbemlevel1login.idl new file mode 100644 index 00000000..7b0b00cd --- /dev/null +++ b/epan/dissectors/pidl/iwbemlevel1login/iwbemlevel1login.idl @@ -0,0 +1,84 @@ +#include "idl_types.h" + +/* + IWbemLevel1Login interface definitions +*/ +[ uuid("f309ad18-d86a-11d0-a075-00c04fb68820"), + restricted, + pointer_default(unique) +] +interface IWbemLevel1Login +{ + /*****************/ + /* Function 0x00 */ + [todo] WERROR iwbemlevel1login_opnum0( + ); + + /*****************/ + /* Function 0x01 */ + [todo] WERROR iwbemlevel1login_opnum1( + ); + + /*****************/ + /* Function 0x02 */ + [todo] WERROR iwbemlevel1login_opnum2( + ); + + typedef [public] struct + { + } ORPCTHIS; + + typedef [public] struct + { + } ORPCTHAT; + + /*****************/ + /* Function 0x03 */ + WERROR EstablishPosition( + [in] ORPCTHIS orpcthis, + [in, unique, string, charset(UTF16)] uint16* reserved1, + [in] uint32 reserved2, + [out] ORPCTHAT* orpcthat, + [out] uint32* LocaleVersion + ); + + /*****************/ + /* Function 0x04 */ + WERROR RequestChallenge( + [in] ORPCTHIS orpcthis, + [in, unique, string, charset(UTF16)] uint16* reserved1, + [in, unique, string, charset(UTF16)] uint16* reserved2, + [out] ORPCTHAT* orpcthat, + [out, size_is(16), length_is(16)] uint8* reserved3 + ); + + /*****************/ + /* Function 0x05 */ + WERROR WBEMLogin( + [in] ORPCTHIS orpcthis, + [in, unique, string, charset(UTF16)] uint16* reserved1, + [in, size_is(16), length_is(16), unique] uint8* reserved2, + [in] long reserved3, + [in] uint8* reserved4, + [out] ORPCTHAT* orpcthat, + [out, ref] IWbemServices **ppNamespace + ); + + typedef [flag(NDR_NOALIGN)] struct + { + uint32 count; + [size_is(count)] uint8 services[]; + } IWbemServices; + + /*****************/ + /* Function 0x06 */ + WERROR NTLMLogin( + [in] ORPCTHIS orpcthis, + [in, unique, string, charset(UTF16)] uint16* wszNetworkResource, + [in, unique, string, charset(UTF16)] uint16* wszPreferredLocale, + [in] long lFlags, + [in, unique] uint8* pCtx, + [out] ORPCTHAT* orpcthat, + [out, ref] IWbemServices **ppNamespace + ); +};
\ No newline at end of file diff --git a/epan/dissectors/pidl/lsa/lsa.cnf b/epan/dissectors/pidl/lsa/lsa.cnf new file mode 100644 index 00000000..4453f7fe --- /dev/null +++ b/epan/dissectors/pidl/lsa/lsa.cnf @@ -0,0 +1,407 @@ +# +# policyhandle tracking +# This block is to specify where a policyhandle is opened and where it is +# closed so that policyhandles when dissected contain nice info such as +# [opened in xxx] [closed in yyy] +# +# Policyhandles are opened in these functions +PARAM_VALUE lsarpc_dissect_element_lsa_OpenPolicy_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_LSA_POLICY +PARAM_VALUE lsarpc_dissect_element_lsa_OpenPolicy2_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_LSA_POLICY +PARAM_VALUE lsarpc_dissect_element_lsa_CreateAccount_acct_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_LSA_ACCOUNT +PARAM_VALUE lsarpc_dissect_element_lsa_OpenAccount_acct_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_LSA_ACCOUNT +PARAM_VALUE lsarpc_dissect_element_lsa_CreateTrustedDomain_trustdom_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_LSA_DOMAIN +PARAM_VALUE lsarpc_dissect_element_lsa_OpenTrustedDomain_trustdom_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_LSA_DOMAIN +PARAM_VALUE lsarpc_dissect_element_lsa_OpenTrustedDomainByName_trustdom_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_LSA_DOMAIN +PARAM_VALUE lsarpc_dissect_element_lsa_CreateSecret_sec_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_LSA_SECRET +PARAM_VALUE lsarpc_dissect_element_lsa_OpenSecret_sec_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_LSA_SECRET +# Policyhandles are closed in these functions +PARAM_VALUE lsarpc_dissect_element_lsa_Close_handle_ PIDL_POLHND_CLOSE +PARAM_VALUE lsarpc_dissect_element_lsa_Delete_handle_ PIDL_POLHND_CLOSE +PARAM_VALUE lsarpc_dissect_element_lsa_CloseTrustedDomainEx_handle_ PIDL_POLHND_CLOSE + + + +TYPE hyper "offset=cnf_dissect_hyper(tvb, offset, pinfo, tree, di, drep, @PARAM@, @HF@);" FT_UINT64 BASE_DEC 0 NULL 8 + +TYPE sec_desc_buf "offset=cnf_dissect_sec_desc_buf(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL 4 +HF_FIELD hf_lsarpc_sec_desc_buf_len "Sec Desc Buf Len" "lsarpc.sec_desc_buf_len" FT_UINT32 BASE_DEC NULL 0 "" "" "" + + +MANUAL lsarpc_dissect_bitmap_lsa_PolicyAccessMask +MANUAL lsarpc_dissect_bitmap_lsa_AccountAccessMask +MANUAL lsarpc_dissect_bitmap_lsa_SecretAccessMask +MANUAL lsarpc_dissect_bitmap_lsa_DomainAccessMask +HF_FIELD hf_lsarpc_policy_access_mask "Access Mask" "lsarpc.policy.access_mask" FT_UINT32 BASE_HEX NULL 0 "" "" "" +HF_FIELD hf_lsarpc_account_access_mask "Access Mask" "lsarpc.policy.access_mask" FT_UINT32 BASE_HEX NULL 0 "" "" "" +HF_FIELD hf_lsarpc_secret_access_mask "Access Mask" "lsarpc.policy.access_mask" FT_UINT32 BASE_HEX NULL 0 "" "" "" +HF_FIELD hf_lsarpc_domain_access_mask "Access Mask" "lsarpc.policy.access_mask" FT_UINT32 BASE_HEX NULL 0 "" "" "" + +HF_FIELD hf_lsarpc_String_name "String" "lsarpc.lsa.string" FT_STRING BASE_NONE NULL 0 "" "" "" + +MANUAL lsarpc_dissect_element_lsa_LookupNames_names +MANUAL lsarpc_dissect_element_lsa_LookupNames2_names +MANUAL lsarpc_dissect_element_lsa_LookupNames3_names +MANUAL lsarpc_dissect_element_lsa_LookupNames4_names +MANUAL lsarpc_dissect_element_lsa_String_string_ +MANUAL lsarpc_dissect_element_lsa_StringLarge_string_ + +NOEMIT lsarpc_dissect_element_lsa_String_string__ +NOEMIT lsarpc_dissect_element_lsa_StringLarge_string__ +NOEMIT lsarpc_dissect_element_lsa_DomainInfoEfs_efs_blob__ +NOEMIT lsarpc_dissect_element_lsa_LookupNames_names_ +NOEMIT lsarpc_dissect_element_lsa_LookupNames2_names_ +NOEMIT lsarpc_dissect_element_lsa_LookupNames4_names_ + +ETT_FIELD ett_lsarpc_names +HF_FIELD hf_lsarpc_names "Names" "lsarpc.lookup.names" FT_NONE BASE_NONE NULL 0 "" "" "" + + +MANUAL lsarpc_dissect_element_lsa_DomainInfoEfs_efs_blob_ +HF_FIELD hf_lsarpc_efs_blob_len "EFS blob size" "lsarpc.efs.blob_size" FT_UINT32 BASE_DEC NULL 0 "" "" "" + +CODE START + + +static void +lsarpc_policy_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 access) +{ + static int* const access_flags[] = { + &hf_lsarpc_lsa_PolicyAccessMask_LSA_POLICY_NOTIFICATION, + &hf_lsarpc_lsa_PolicyAccessMask_LSA_POLICY_LOOKUP_NAMES, + &hf_lsarpc_lsa_PolicyAccessMask_LSA_POLICY_SERVER_ADMIN, + &hf_lsarpc_lsa_PolicyAccessMask_LSA_POLICY_AUDIT_LOG_ADMIN, + &hf_lsarpc_lsa_PolicyAccessMask_LSA_POLICY_SET_AUDIT_REQUIREMENTS, + &hf_lsarpc_lsa_PolicyAccessMask_LSA_POLICY_SET_DEFAULT_QUOTA_LIMITS, + &hf_lsarpc_lsa_PolicyAccessMask_LSA_POLICY_CREATE_PRIVILEGE, + &hf_lsarpc_lsa_PolicyAccessMask_LSA_POLICY_CREATE_SECRET, + &hf_lsarpc_lsa_PolicyAccessMask_LSA_POLICY_CREATE_ACCOUNT, + &hf_lsarpc_lsa_PolicyAccessMask_LSA_POLICY_TRUST_ADMIN, + &hf_lsarpc_lsa_PolicyAccessMask_LSA_POLICY_GET_PRIVATE_INFORMATION, + &hf_lsarpc_lsa_PolicyAccessMask_LSA_POLICY_VIEW_AUDIT_INFORMATION, + &hf_lsarpc_lsa_PolicyAccessMask_LSA_POLICY_VIEW_LOCAL_INFORMATION, + NULL + }; + + proto_tree_add_bitmask_list_value(tree, tvb, offset, 4, access_flags, access); +} + +static void +lsarpc_account_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 access) +{ + static int* const access_flags[] = { + &hf_lsarpc_lsa_AccountAccessMask_LSA_ACCOUNT_ADJUST_SYSTEM_ACCESS, + &hf_lsarpc_lsa_AccountAccessMask_LSA_ACCOUNT_ADJUST_QUOTAS, + &hf_lsarpc_lsa_AccountAccessMask_LSA_ACCOUNT_ADJUST_PRIVILEGES, + &hf_lsarpc_lsa_AccountAccessMask_LSA_ACCOUNT_VIEW, + NULL + }; + + proto_tree_add_bitmask_list_value(tree, tvb, offset, 4, access_flags, access); +} + +static void +lsarpc_secret_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 access) +{ + static int* const access_flags[] = { + &hf_lsarpc_lsa_SecretAccessMask_LSA_SECRET_QUERY_VALUE, + &hf_lsarpc_lsa_SecretAccessMask_LSA_SECRET_SET_VALUE, + NULL + }; + + proto_tree_add_bitmask_list_value(tree, tvb, offset, 4, access_flags, access); +} + +static void +lsarpc_domain_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 access) +{ + static int* const access_flags[] = { + &hf_lsarpc_lsa_DomainAccessMask_LSA_DOMAIN_QUERY_AUTH, + &hf_lsarpc_lsa_DomainAccessMask_LSA_DOMAIN_SET_AUTH, + &hf_lsarpc_lsa_DomainAccessMask_LSA_DOMAIN_SET_POSIX, + &hf_lsarpc_lsa_DomainAccessMask_LSA_DOMAIN_QUERY_POSIX, + &hf_lsarpc_lsa_DomainAccessMask_LSA_DOMAIN_SET_CONTROLLERS, + &hf_lsarpc_lsa_DomainAccessMask_LSA_DOMAIN_QUERY_CONTROLLERS, + &hf_lsarpc_lsa_DomainAccessMask_LSA_DOMAIN_QUERY_DOMAIN_NAME, + NULL + }; + + proto_tree_add_bitmask_list_value(tree, tvb, offset, 4, access_flags, access); +} + + +struct access_mask_info lsarpc_policy_access_mask_info = { + "LSA Policy", /* Name of specific rights */ + lsarpc_policy_specific_rights, /* Dissection function */ + NULL, /* Generic mapping table */ + NULL /* Standard mapping table */ +}; + +struct access_mask_info lsarpc_account_access_mask_info = { + "LSA Account", /* Name of specific rights */ + lsarpc_account_specific_rights, /* Dissection function */ + NULL, /* Generic mapping table */ + NULL /* Standard mapping table */ +}; + +struct access_mask_info lsarpc_secret_access_mask_info = { + "LSA Secret", /* Name of specific rights */ + lsarpc_secret_specific_rights, /* Dissection function */ + NULL, /* Generic mapping table */ + NULL /* Standard mapping table */ +}; + +struct access_mask_info lsarpc_domain_access_mask_info = { + "LSA Domain", /* Name of specific rights */ + lsarpc_domain_specific_rights, /* Dissection function */ + NULL, /* Generic mapping table */ + NULL /* Standard mapping table */ +}; + +int +lsarpc_dissect_bitmap_lsa_PolicyAccessMask(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, int hf_index _U_, guint32 param _U_) +{ + offset = dissect_nt_access_mask( + tvb, offset, pinfo, tree, di, drep, hf_lsarpc_policy_access_mask, + &lsarpc_policy_access_mask_info, NULL); + return offset; +} + +int +lsarpc_dissect_bitmap_lsa_AccountAccessMask(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, int hf_index _U_, guint32 param _U_) +{ + offset = dissect_nt_access_mask( + tvb, offset, pinfo, tree, di, drep, hf_lsarpc_account_access_mask, + &lsarpc_account_access_mask_info, NULL); + return offset; +} + +int +lsarpc_dissect_bitmap_lsa_SecretAccessMask(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, int hf_index _U_, guint32 param _U_) +{ + offset = dissect_nt_access_mask( + tvb, offset, pinfo, tree, di, drep, hf_lsarpc_secret_access_mask, + &lsarpc_secret_access_mask_info, NULL); + return offset; +} + +int +lsarpc_dissect_bitmap_lsa_DomainAccessMask(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, int hf_index _U_, guint32 param _U_) +{ + offset = dissect_nt_access_mask( + tvb, offset, pinfo, tree, di, drep, hf_lsarpc_domain_access_mask, + &lsarpc_domain_access_mask_info, NULL); + return offset; +} + +static int +cnf_dissect_sec_desc_buf_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + guint32 len; + e_ctx_hnd *polhnd = NULL; + dcerpc_call_value *dcv = NULL; + guint32 type=0; + struct access_mask_info *ami=NULL; + + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_lsarpc_sec_desc_buf_len, &len); + + dcv = (dcerpc_call_value *)di->call_data; + if(dcv){ + polhnd = dcv->pol; + } + if(polhnd){ + dcerpc_fetch_polhnd_data(polhnd, NULL, &type, NULL, NULL, + pinfo->num); + } + switch(type){ + case PIDL_POLHND_TYPE_LSA_POLICY: + ami=&lsarpc_policy_access_mask_info; + break; + case PIDL_POLHND_TYPE_LSA_ACCOUNT: + ami=&lsarpc_account_access_mask_info; + break; + case PIDL_POLHND_TYPE_LSA_SECRET: + ami=&lsarpc_secret_access_mask_info; + break; + case PIDL_POLHND_TYPE_LSA_DOMAIN: + ami=&lsarpc_domain_access_mask_info; + break; + } + + dissect_nt_sec_desc(tvb, offset, pinfo, tree, drep, TRUE, len, ami); + + offset += len; + + return offset; +} + +static int +cnf_dissect_sec_desc_buf(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + guint32 len; + + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_lsarpc_sec_desc_buf_len, &len); + + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, + cnf_dissect_sec_desc_buf_, NDR_POINTER_UNIQUE, + "LSA SECURITY DESCRIPTOR data:", -1); + + return offset; +} + + +int +lsarpc_dissect_sec_desc_buf(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep){ + return cnf_dissect_sec_desc_buf(tvb, offset, pinfo, tree, di, drep); +} + +static int +lsarpc_dissect_struct_security_descriptor(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di, guint8 *drep _U_, int unused1 _U_, int unused2 _U_){ + return cnf_dissect_sec_desc_buf(tvb, offset, pinfo, tree, di, drep); +} + + +int +lsarpc_dissect_struct_dom_sid2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di, guint8 *drep _U_, int unused1 _U_, int unused2 _U_) { + /* sid */ + return dissect_ndr_nt_SID(tvb, offset, pinfo, tree, di, drep); + +} + +static int +cnf_dissect_hyper(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, guint32 param _U_, int hfindex) +{ + offset = dissect_ndr_uint64(tvb, offset, pinfo, tree, di, drep, hfindex, NULL); + + return offset; +} + +# PIDL cant handle top level arrays so we must explicitely go through a +# ref pointer here +static int +lsarpc_dissect_element_lsa_LookupNames3_names_X(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di, guint8 *drep _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_lsarpc_names, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_lsarpc_names); + } + + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, di, drep, lsarpc_dissect_element_lsa_LookupNames3_names_); + + proto_item_set_len(item, offset-old_offset); + return offset; +} + +static int +lsarpc_dissect_element_lsa_LookupNames_names(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, lsarpc_dissect_element_lsa_LookupNames3_names_X, NDR_POINTER_REF, "Pointer to Names", hf_lsarpc_names); + + return offset; +} +static int +lsarpc_dissect_element_lsa_LookupNames2_names(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, lsarpc_dissect_element_lsa_LookupNames3_names_X, NDR_POINTER_REF, "Pointer to Names", hf_lsarpc_names); + + return offset; +} +static int +lsarpc_dissect_element_lsa_LookupNames3_names(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, lsarpc_dissect_element_lsa_LookupNames3_names_X, NDR_POINTER_REF, "Pointer to Names", hf_lsarpc_names); + + return offset; +} +static int +lsarpc_dissect_element_lsa_LookupNames4_names(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di, guint8 *drep _U_) +{ + offset = dissect_ndr_toplevel_pointer(tvb, offset, pinfo, tree, di, drep, lsarpc_dissect_element_lsa_LookupNames3_names_X, NDR_POINTER_REF, "Pointer to Names", hf_lsarpc_names); + + return offset; +} + + + +static int +lsarpc_dissect_element_lsa_String_string_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_lsarpc_String_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + +static int +lsarpc_dissect_element_lsa_StringLarge_string_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di, guint8 *drep _U_) +{ + char *data; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint16), hf_lsarpc_String_name, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + return offset; +} + + + +static int +lsarpc_dissect_element_lsa_DomainInfoEfs_efs_blob_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di, guint8 *drep _U_) +{ + tvbuff_t *next_tvb; + gint len, reported_len; + dissector_handle_t efsblob_handle; + + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_lsarpc_efs_blob_len, &reported_len); + + len = reported_len; + if (len > tvb_captured_length_remaining(tvb, offset)) { + len = tvb_captured_length_remaining(tvb, offset); + } + + next_tvb = tvb_new_subset_length_caplen(tvb, offset, len, reported_len); + + efsblob_handle = find_dissector("efsblob"); + if (efsblob_handle) { + call_dissector(efsblob_handle, next_tvb, pinfo, tree); + } + + offset += reported_len; + + return offset; +} + +CODE END + +HEADER START + +extern int +lsarpc_dissect_sec_desc_buf(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep); +extern int +lsarpc_dissect_struct_dom_sid2(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, int unused1, int unused2); + +HEADER END diff --git a/epan/dissectors/pidl/lsa/lsa.idl b/epan/dissectors/pidl/lsa/lsa.idl new file mode 100644 index 00000000..f7535d6a --- /dev/null +++ b/epan/dissectors/pidl/lsa/lsa.idl @@ -0,0 +1,1293 @@ +#include "idl_types.h" + +/* + lsa interface definition +*/ + +/*import "misc.idl", "security.idl";*/ + +[ uuid("12345778-1234-abcd-ef00-0123456789ab"), + version(0.0), + endpoint("ncacn_np:[\\pipe\\lsarpc]","ncacn_np:[\\pipe\\netlogon]","ncacn_np:[\\pipe\\lsass]", "ncacn_ip_tcp:", "ncalrpc:"), + pointer_default(unique), + helpstring("Local Security Authority") +] interface lsarpc +{ + typedef [bitmap32bit] bitmap { + LSA_POLICY_NOTIFICATION = 0x00001000, + LSA_POLICY_LOOKUP_NAMES = 0x00000800, + LSA_POLICY_SERVER_ADMIN = 0x00000400, + LSA_POLICY_AUDIT_LOG_ADMIN = 0x00000200, + LSA_POLICY_SET_AUDIT_REQUIREMENTS = 0x00000100, + LSA_POLICY_SET_DEFAULT_QUOTA_LIMITS = 0x00000080, + LSA_POLICY_CREATE_PRIVILEGE = 0x00000040, + LSA_POLICY_CREATE_SECRET = 0x00000020, + LSA_POLICY_CREATE_ACCOUNT = 0x00000010, + LSA_POLICY_TRUST_ADMIN = 0x00000008, + LSA_POLICY_GET_PRIVATE_INFORMATION = 0x00000004, + LSA_POLICY_VIEW_AUDIT_INFORMATION = 0x00000002, + LSA_POLICY_VIEW_LOCAL_INFORMATION = 0x00000001 + } lsa_PolicyAccessMask; + + typedef [bitmap32bit] bitmap { + LSA_ACCOUNT_ADJUST_SYSTEM_ACCESS = 0x00000008, + LSA_ACCOUNT_ADJUST_QUOTAS = 0x00000004, + LSA_ACCOUNT_ADJUST_PRIVILEGES = 0x00000002, + LSA_ACCOUNT_VIEW = 0x00000001 + } lsa_AccountAccessMask; + + typedef [bitmap32bit] bitmap { + LSA_DOMAIN_QUERY_AUTH = 0x00000040, + LSA_DOMAIN_SET_AUTH = 0x00000020, + LSA_DOMAIN_SET_POSIX = 0x00000010, + LSA_DOMAIN_QUERY_POSIX = 0x00000008, + LSA_DOMAIN_SET_CONTROLLERS = 0x00000004, + LSA_DOMAIN_QUERY_CONTROLLERS = 0x00000002, + LSA_DOMAIN_QUERY_DOMAIN_NAME = 0x00000001 + } lsa_DomainAccessMask; + + typedef [bitmap32bit] bitmap { + LSA_SECRET_QUERY_VALUE = 0x00000002, + LSA_SECRET_SET_VALUE = 0x00000001 + } lsa_SecretAccessMask; + + typedef bitmap security_secinfo security_secinfo; + + typedef [public] struct { + [value(2*strlen_m(string))] uint16 length; + [value(2*strlen_m(string))] uint16 size; + [charset(UTF16),size_is(size/2),length_is(length/2)] uint16 *string; + } lsa_String; + + typedef [public] struct { + [value(2*strlen_m(string))] uint16 length; + [value(2*strlen_m_term(string))] uint16 size; + [charset(UTF16),size_is(size/2),length_is(length/2)] uint16 *string; + } lsa_StringLarge; + + typedef [public] struct { + uint32 count; + [size_is(count)] lsa_String *names; + } lsa_Strings; + + typedef [public] struct { + [value(strlen_m(string))] uint16 length; + [value(strlen_m(string))] uint16 size; + [charset(DOS),size_is(size),length_is(length)] uint8 *string; + } lsa_AsciiString; + + typedef [public] struct { + [value(strlen_m(string))] uint16 length; + [value(strlen_m_term(string))] uint16 size; + [charset(DOS),size_is(size),length_is(length)] uint8 *string; + } lsa_AsciiStringLarge; + + /******************/ + /* Function: 0x00 */ + NTSTATUS lsa_Close ( + [in,out] policy_handle *handle + ); + + + /******************/ + /* Function: 0x01 */ + [public] NTSTATUS lsa_Delete ( + [in] policy_handle *handle + ); + + + /******************/ + /* Function: 0x02 */ + typedef struct { + uint32 low; + uint32 high; + } lsa_LUID; + + typedef struct { + lsa_StringLarge name; + lsa_LUID luid; + } lsa_PrivEntry; + + typedef struct { + uint32 count; + [size_is(count)] lsa_PrivEntry *privs; + } lsa_PrivArray; + + [public] NTSTATUS lsa_EnumPrivs ( + [in] policy_handle *handle, + [in,out] uint32 *resume_handle, + [in] uint32 max_count, + [out] lsa_PrivArray *privs + ); + + /******************/ + /* Function: 0x03 */ + + NTSTATUS lsa_QuerySecurity ( + [in] policy_handle *handle, + [in] security_secinfo sec_info, + [out] sec_desc_buf **sdbuf + ); + + + /******************/ + /* Function: 0x04 */ + [todo] NTSTATUS lsa_SetSecObj (); + + + /******************/ + /* Function: 0x05 */ + [todo] NTSTATUS lsa_ChangePassword (); + + + /******************/ + /* Function: 0x06 */ + + typedef enum { + LSA_SECURITY_ANONYMOUS = 0, + LSA_SECURITY_IDENTIFICATION = 1, + LSA_SECURITY_IMPERSONATION = 2, + LSA_SECURITY_DELEGATION = 3 + } lsa_SecurityImpersonationLevel; + + typedef struct { + uint32 len; /* ignored */ + lsa_SecurityImpersonationLevel impersonation_level; + uint8 context_mode; + uint8 effective_only; + } lsa_QosInfo; + + typedef struct { + uint32 len; /* ignored */ + uint8 *root_dir; + [string,charset(UTF16)] uint16 *object_name; + uint32 attributes; + security_descriptor *sec_desc; + lsa_QosInfo *sec_qos; + } lsa_ObjectAttribute; + + /* notice the screwup with the system_name - thats why MS created + OpenPolicy2 */ + [public] NTSTATUS lsa_OpenPolicy ( + [in,unique] uint16 *system_name, + [in] lsa_ObjectAttribute *attr, + [in] lsa_PolicyAccessMask access_mask, + [out] policy_handle *handle + ); + + + + /******************/ + /* Function: 0x07 */ + + typedef struct { + uint32 percent_full; + uint32 log_size; + NTTIME retention_time; + uint8 shutdown_in_progress; + NTTIME time_to_shutdown; + uint32 next_audit_record; + uint32 unknown; + } lsa_AuditLogInfo; + + typedef [v1_enum] enum { + LSA_AUDIT_POLICY_NONE=0, + LSA_AUDIT_POLICY_SUCCESS=1, + LSA_AUDIT_POLICY_FAILURE=2, + LSA_AUDIT_POLICY_ALL=(LSA_AUDIT_POLICY_SUCCESS|LSA_AUDIT_POLICY_FAILURE), + LSA_AUDIT_POLICY_CLEAR=4 + } lsa_PolicyAuditPolicy; + + typedef enum { + LSA_AUDIT_CATEGORY_SYSTEM = 0, + LSA_AUDIT_CATEGORY_LOGON = 1, + LSA_AUDIT_CATEGORY_FILE_AND_OBJECT_ACCESS = 2, + LSA_AUDIT_CATEGORY_USE_OF_USER_RIGHTS = 3, + LSA_AUDIT_CATEGORY_PROCCESS_TRACKING = 4, + LSA_AUDIT_CATEGORY_SECURITY_POLICY_CHANGES = 5, + LSA_AUDIT_CATEGORY_ACCOUNT_MANAGEMENT = 6, + LSA_AUDIT_CATEGORY_DIRECTORY_SERVICE_ACCESS = 7, /* only in win2k/2k3 */ + LSA_AUDIT_CATEGORY_ACCOUNT_LOGON = 8 /* only in win2k/2k3 */ + } lsa_PolicyAuditEventType; + + typedef struct { + uint32 auditing_mode; + [size_is(count)] lsa_PolicyAuditPolicy *settings; + uint32 count; + } lsa_AuditEventsInfo; + + typedef struct { + lsa_StringLarge name; + dom_sid2 *sid; + } lsa_DomainInfo; + + typedef struct { + lsa_String name; + } lsa_PDAccountInfo; + + typedef enum { + LSA_POLICY_ROLE_BACKUP = 2, + LSA_POLICY_ROLE_PRIMARY = 3 + } lsa_PolicyServerRole; + + typedef struct { + lsa_PolicyServerRole role; + } lsa_ServerRole; + + typedef struct { + lsa_String source; + lsa_String account; + } lsa_ReplicaSourceInfo; + + typedef struct { + uint32 paged_pool; + uint32 non_paged_pool; + uint32 min_wss; + uint32 max_wss; + uint32 pagefile; + hyper unknown; + } lsa_DefaultQuotaInfo; + + typedef struct { + hyper modified_id; + NTTIME db_create_time; + } lsa_ModificationInfo; + + typedef struct { + uint8 shutdown_on_full; + } lsa_AuditFullSetInfo; + + typedef struct { + uint16 unknown; /* an midl padding bug? */ + uint8 shutdown_on_full; + uint8 log_is_full; + } lsa_AuditFullQueryInfo; + + typedef struct { + /* it's important that we use the lsa_StringLarge here, + * because otherwise windows clients result with such dns hostnames + * e.g. w2k3-client.samba4.samba.orgsamba4.samba.org + * where it should be + * w2k3-client.samba4.samba.org + */ + lsa_StringLarge name; + lsa_StringLarge dns_domain; + lsa_StringLarge dns_forest; + GUID domain_guid; + dom_sid2 *sid; + } lsa_DnsDomainInfo; + + typedef enum { + LSA_POLICY_INFO_AUDIT_LOG=1, + LSA_POLICY_INFO_AUDIT_EVENTS=2, + LSA_POLICY_INFO_DOMAIN=3, + LSA_POLICY_INFO_PD=4, + LSA_POLICY_INFO_ACCOUNT_DOMAIN=5, + LSA_POLICY_INFO_ROLE=6, + LSA_POLICY_INFO_REPLICA=7, + LSA_POLICY_INFO_QUOTA=8, + LSA_POLICY_INFO_DB=9, + LSA_POLICY_INFO_AUDIT_FULL_SET=10, + LSA_POLICY_INFO_AUDIT_FULL_QUERY=11, + LSA_POLICY_INFO_DNS=12, + LSA_POLICY_INFO_DNS_INT=13, + LSA_POLICY_INFO_LOCAL_ACCOUNT_DOMAIN=14 + } lsa_PolicyInfo; + + typedef [switch_type(uint16)] union { + [case(LSA_POLICY_INFO_AUDIT_LOG)] lsa_AuditLogInfo audit_log; + [case(LSA_POLICY_INFO_AUDIT_EVENTS)] lsa_AuditEventsInfo audit_events; + [case(LSA_POLICY_INFO_DOMAIN)] lsa_DomainInfo domain; + [case(LSA_POLICY_INFO_PD)] lsa_PDAccountInfo pd; + [case(LSA_POLICY_INFO_ACCOUNT_DOMAIN)] lsa_DomainInfo account_domain; + [case(LSA_POLICY_INFO_ROLE)] lsa_ServerRole role; + [case(LSA_POLICY_INFO_REPLICA)] lsa_ReplicaSourceInfo replica; + [case(LSA_POLICY_INFO_QUOTA)] lsa_DefaultQuotaInfo quota; + [case(LSA_POLICY_INFO_DB)] lsa_ModificationInfo db; + [case(LSA_POLICY_INFO_AUDIT_FULL_SET)] lsa_AuditFullSetInfo auditfullset; + [case(LSA_POLICY_INFO_AUDIT_FULL_QUERY)] lsa_AuditFullQueryInfo auditfullquery; + [case(LSA_POLICY_INFO_DNS)] lsa_DnsDomainInfo dns; + } lsa_PolicyInformation; + + NTSTATUS lsa_QueryInfoPolicy ( + [in] policy_handle *handle, + [in] lsa_PolicyInfo level, + [out,switch_is(level)] lsa_PolicyInformation **info + ); + + /******************/ + /* Function: 0x08 */ + NTSTATUS lsa_SetInfoPolicy ( + [in] policy_handle *handle, + [in] lsa_PolicyInfo level, + [in,switch_is(level)] lsa_PolicyInformation *info + ); + + /******************/ + /* Function: 0x09 */ + [todo] NTSTATUS lsa_ClearAuditLog (); + + /******************/ + /* Function: 0x0a */ + [public] NTSTATUS lsa_CreateAccount ( + [in] policy_handle *handle, + [in] dom_sid2 *sid, + [in] lsa_AccountAccessMask access_mask, + [out] policy_handle *acct_handle + ); + + /******************/ + /* NOTE: This only returns accounts that have at least + one privilege set + */ + /* Function: 0x0b */ + typedef struct { + dom_sid2 *sid; + } lsa_SidPtr; + + typedef [public] struct { + [range(0,1000)] uint32 num_sids; + [size_is(num_sids)] lsa_SidPtr *sids; + } lsa_SidArray; + + [public] NTSTATUS lsa_EnumAccounts ( + [in] policy_handle *handle, + [in,out] uint32 *resume_handle, + [in,range(0,8192)] uint32 num_entries, + [out] lsa_SidArray *sids + ); + + + /*************************************************/ + /* Function: 0x0c */ + + [public] NTSTATUS lsa_CreateTrustedDomain( + [in] policy_handle *handle, + [in] lsa_DomainInfo *info, + [in] lsa_DomainAccessMask access_mask, + [out] policy_handle *trustdom_handle + ); + + + /******************/ + /* Function: 0x0d */ + + /* w2k3 treats max_size as max_domains*60 */ + const int LSA_ENUM_TRUST_DOMAIN_MULTIPLIER = 60; + + typedef struct { + uint32 count; + [size_is(count)] lsa_DomainInfo *domains; + } lsa_DomainList; + + NTSTATUS lsa_EnumTrustDom ( + [in] policy_handle *handle, + [in,out] uint32 *resume_handle, + [in] uint32 max_size, + [out] lsa_DomainList *domains + ); + + + /******************/ + /* Function: 0x0e */ + typedef [public] enum { + SID_NAME_USE_NONE = 0,/* NOTUSED */ + SID_NAME_USER = 1, /* user */ + SID_NAME_DOM_GRP = 2, /* domain group */ + SID_NAME_DOMAIN = 3, /* domain: don't know what this is */ + SID_NAME_ALIAS = 4, /* local group */ + SID_NAME_WKN_GRP = 5, /* well-known group */ + SID_NAME_DELETED = 6, /* deleted account: needed for c2 rating */ + SID_NAME_INVALID = 7, /* invalid account */ + SID_NAME_UNKNOWN = 8, /* oops. */ + SID_NAME_COMPUTER = 9 /* machine */ + } lsa_SidType; + + typedef struct { + lsa_SidType sid_type; + uint32 rid; + uint32 sid_index; + } lsa_TranslatedSid; + + typedef struct { + [range(0,1000)] uint32 count; + [size_is(count)] lsa_TranslatedSid *sids; + } lsa_TransSidArray; + + const int LSA_REF_DOMAIN_LIST_MULTIPLIER = 32; + typedef struct { + [range(0,1000)] uint32 count; + [size_is(count)] lsa_DomainInfo *domains; + uint32 max_size; + } lsa_RefDomainList; + + /* Level 1: Ask everywhere + * Level 2: Ask domain and trusted domains, no builtin and wkn + * Level 3: Only ask domain + * Level 4: W2k3ad: Only ask AD trusts + * Level 5: Only ask transitive forest trusts + * Level 6: Like 4 + */ + + typedef enum { + LSA_LOOKUP_NAMES_ALL = 1, + LSA_LOOKUP_NAMES_DOMAINS_ONLY = 2, + LSA_LOOKUP_NAMES_PRIMARY_DOMAIN_ONLY = 3, + LSA_LOOKUP_NAMES_UPLEVEL_TRUSTS_ONLY = 4, + LSA_LOOKUP_NAMES_FOREST_TRUSTS_ONLY = 5, + LSA_LOOKUP_NAMES_UPLEVEL_TRUSTS_ONLY2 = 6 + } lsa_LookupNamesLevel; + + [public] NTSTATUS lsa_LookupNames ( + [in] policy_handle *handle, + [in,range(0,1000)] uint32 num_names, + [in,size_is(num_names)] lsa_String names[], + [out] lsa_RefDomainList **domains, + [in,out] lsa_TransSidArray *sids, + [in] lsa_LookupNamesLevel level, + [in,out] uint32 *count + ); + + + /******************/ + /* Function: 0x0f */ + + typedef struct { + lsa_SidType sid_type; + lsa_String name; + uint32 sid_index; + } lsa_TranslatedName; + + typedef struct { + [range(0,1000)] uint32 count; + [size_is(count)] lsa_TranslatedName *names; + } lsa_TransNameArray; + + [public] NTSTATUS lsa_LookupSids ( + [in] policy_handle *handle, + [in] lsa_SidArray *sids, + [out] lsa_RefDomainList *domains, + [in,out] lsa_TransNameArray *names, + [in] uint16 level, + [in,out] uint32 *count + ); + + + /* Function: 0x10 */ + [public] NTSTATUS lsa_CreateSecret( + [in] policy_handle *handle, + [in] lsa_String name, + [in] lsa_SecretAccessMask access_mask, + [out] policy_handle *sec_handle + ); + + + /*****************************************/ + /* Function: 0x11 */ + NTSTATUS lsa_OpenAccount ( + [in] policy_handle *handle, + [in] dom_sid2 *sid, + [in] lsa_AccountAccessMask access_mask, + [out] policy_handle *acct_handle + ); + + + /****************************************/ + /* Function: 0x12 */ + + typedef struct { + lsa_LUID luid; + uint32 attribute; + } lsa_LUIDAttribute; + + typedef struct { + [range(0,1000)] uint32 count; + uint32 unknown; + [size_is(count)] lsa_LUIDAttribute set[*]; + } lsa_PrivilegeSet; + + NTSTATUS lsa_EnumPrivsAccount ( + [in] policy_handle *handle, + [out] lsa_PrivilegeSet **privs + ); + + + /****************************************/ + /* Function: 0x13 */ + NTSTATUS lsa_AddPrivilegesToAccount( + [in] policy_handle *handle, + [in] lsa_PrivilegeSet *privs + ); + + + /****************************************/ + /* Function: 0x14 */ + NTSTATUS lsa_RemovePrivilegesFromAccount( + [in] policy_handle *handle, + [in] uint8 remove_all, + [in,unique] lsa_PrivilegeSet *privs + ); + + /* Function: 0x15 */ + [todo] NTSTATUS lsa_GetQuotasForAccount(); + + /* Function: 0x16 */ + [todo] NTSTATUS lsa_SetQuotasForAccount(); + + /* Function: 0x17 */ + [todo] NTSTATUS lsa_GetSystemAccessAccount(); + /* Function: 0x18 */ + [todo] NTSTATUS lsa_SetSystemAccessAccount(); + + /* Function: 0x19 */ + NTSTATUS lsa_OpenTrustedDomain( + [in] policy_handle *handle, + [in] dom_sid2 *sid, + [in] lsa_DomainAccessMask access_mask, + [out] policy_handle *trustdom_handle + ); + + typedef [flag(NDR_PAHEX)] struct { + uint32 length; + uint32 size; + [size_is(size),length_is(length)] uint8 *data; + } lsa_DATA_BUF; + + typedef [flag(NDR_PAHEX)] struct { + [range(0,65536)] uint32 size; + [size_is(size)] uint8 *data; + } lsa_DATA_BUF2; + + typedef enum { + LSA_TRUSTED_DOMAIN_INFO_NAME = 1, + LSA_TRUSTED_DOMAIN_INFO_CONTROLLERS_INFO = 2, + LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET = 3, + LSA_TRUSTED_DOMAIN_INFO_PASSWORD = 4, + LSA_TRUSTED_DOMAIN_INFO_BASIC = 5, + LSA_TRUSTED_DOMAIN_INFO_INFO_EX = 6, + LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO = 7, + LSA_TRUSTED_DOMAIN_INFO_FULL_INFO = 8, + LSA_TRUSTED_DOMAIN_INFO_11 = 11, + LSA_TRUSTED_DOMAIN_INFO_INFO_ALL = 12 + } lsa_TrustDomInfoEnum; + + typedef struct { + lsa_StringLarge netbios_name; + } lsa_TrustDomainInfoName; + + typedef struct { + uint32 posix_offset; + } lsa_TrustDomainInfoPosixOffset; + + typedef struct { + lsa_DATA_BUF *password; + lsa_DATA_BUF *old_password; + } lsa_TrustDomainInfoPassword; + + typedef struct { + lsa_String netbios_name; + dom_sid2 *sid; + } lsa_TrustDomainInfoBasic; + + typedef struct { + lsa_StringLarge domain_name; + lsa_StringLarge netbios_name; + dom_sid2 *sid; + uint32 trust_direction; + uint32 trust_type; + uint32 trust_attributes; + } lsa_TrustDomainInfoInfoEx; + + typedef struct { + NTTIME_hyper last_update_time; + uint32 secret_type; + lsa_DATA_BUF2 data; + } lsa_TrustDomainInfoBuffer; + + typedef struct { + uint32 incoming_count; + lsa_TrustDomainInfoBuffer *incoming_current_auth_info; + lsa_TrustDomainInfoBuffer *incoming_previous_auth_info; + uint32 outgoing_count; + lsa_TrustDomainInfoBuffer *outgoing_current_auth_info; + lsa_TrustDomainInfoBuffer *outgoing_previous_auth_info; + } lsa_TrustDomainInfoAuthInfo; + + typedef struct { + lsa_TrustDomainInfoInfoEx info_ex; + lsa_TrustDomainInfoPosixOffset posix_offset; + lsa_TrustDomainInfoAuthInfo auth_info; + } lsa_TrustDomainInfoFullInfo; + + typedef struct { + lsa_TrustDomainInfoInfoEx info_ex; + lsa_DATA_BUF2 data1; + } lsa_TrustDomainInfo11; + + typedef struct { + lsa_TrustDomainInfoInfoEx info_ex; + lsa_DATA_BUF2 data1; + lsa_TrustDomainInfoPosixOffset posix_offset; + lsa_TrustDomainInfoAuthInfo auth_info; + } lsa_TrustDomainInfoInfoAll; + + typedef [switch_type(lsa_TrustDomInfoEnum)] union { + [case(LSA_TRUSTED_DOMAIN_INFO_NAME)] lsa_TrustDomainInfoName name; + [case(LSA_TRUSTED_DOMAIN_INFO_POSIX_OFFSET)] lsa_TrustDomainInfoPosixOffset posix_offset; + [case(LSA_TRUSTED_DOMAIN_INFO_PASSWORD)] lsa_TrustDomainInfoPassword password; + [case(LSA_TRUSTED_DOMAIN_INFO_BASIC)] lsa_TrustDomainInfoBasic info_basic; + [case(LSA_TRUSTED_DOMAIN_INFO_INFO_EX)] lsa_TrustDomainInfoInfoEx info_ex; + [case(LSA_TRUSTED_DOMAIN_INFO_AUTH_INFO)] lsa_TrustDomainInfoAuthInfo auth_info; + [case(LSA_TRUSTED_DOMAIN_INFO_FULL_INFO)] lsa_TrustDomainInfoFullInfo full_info; + [case(LSA_TRUSTED_DOMAIN_INFO_11)] lsa_TrustDomainInfo11 info11; + [case(LSA_TRUSTED_DOMAIN_INFO_INFO_ALL)] lsa_TrustDomainInfoInfoAll info_all; + } lsa_TrustedDomainInfo; + + /* Function: 0x1a */ + NTSTATUS lsa_QueryTrustedDomainInfo( + [in] policy_handle *trustdom_handle, + [in] lsa_TrustDomInfoEnum level, + [out,switch_is(level)] lsa_TrustedDomainInfo **info + ); + + /* Function: 0x1b */ + [todo] NTSTATUS lsa_SetInformationTrustedDomain(); + + /* Function: 0x1c */ + [public] NTSTATUS lsa_OpenSecret( + [in] policy_handle *handle, + [in] lsa_String name, + [in] lsa_SecretAccessMask access_mask, + [out] policy_handle *sec_handle + ); + + /* Function: 0x1d */ + + [public] NTSTATUS lsa_SetSecret( + [in] policy_handle *sec_handle, + [in,unique] lsa_DATA_BUF *new_val, + [in,unique] lsa_DATA_BUF *old_val + ); + + typedef struct { + lsa_DATA_BUF *buf; + } lsa_DATA_BUF_PTR; + + /* Function: 0x1e */ + [public] NTSTATUS lsa_QuerySecret ( + [in] policy_handle *sec_handle, + [in,out,unique] lsa_DATA_BUF_PTR *new_val, + [in,out,unique] NTTIME_hyper *new_mtime, + [in,out,unique] lsa_DATA_BUF_PTR *old_val, + [in,out,unique] NTTIME_hyper *old_mtime + ); + + /* Function: 0x1f */ + NTSTATUS lsa_LookupPrivValue( + [in] policy_handle *handle, + [in] lsa_String *name, + [out] lsa_LUID *luid + ); + + + /* Function: 0x20 */ + NTSTATUS lsa_LookupPrivName ( + [in] policy_handle *handle, + [in] lsa_LUID *luid, + [out] lsa_StringLarge **name + ); + + + /*******************/ + /* Function: 0x21 */ + NTSTATUS lsa_LookupPrivDisplayName ( + [in] policy_handle *handle, + [in] lsa_String *name, + [out] lsa_StringLarge **disp_name, + /* see http://www.microsoft.com/globaldev/nlsweb/ for + language definitions */ + [in,out] uint16 *language_id, + [in] uint16 unknown + ); + + /* Function: 0x22 */ + [todo] NTSTATUS lsa_DeleteObject(); + + + /*******************/ + /* Function: 0x23 */ + NTSTATUS lsa_EnumAccountsWithUserRight ( + [in] policy_handle *handle, + [in,unique] lsa_String *name, + [out] lsa_SidArray *sids + ); + + /* Function: 0x24 */ + typedef struct { + [string,charset(UTF16)] uint16 *name; + } lsa_RightAttribute; + + typedef struct { + uint32 count; + [size_is(count)] lsa_StringLarge *names; + } lsa_RightSet; + + NTSTATUS lsa_EnumAccountRights ( + [in] policy_handle *handle, + [in] dom_sid2 *sid, + [out] lsa_RightSet *rights + ); + + + /**********************/ + /* Function: 0x25 */ + NTSTATUS lsa_AddAccountRights ( + [in] policy_handle *handle, + [in] dom_sid2 *sid, + [in] lsa_RightSet *rights + ); + + /**********************/ + /* Function: 0x26 */ + NTSTATUS lsa_RemoveAccountRights ( + [in] policy_handle *handle, + [in] dom_sid2 *sid, + [in] uint32 unknown, + [in] lsa_RightSet *rights + ); + + /* Function: 0x27 */ + NTSTATUS lsa_QueryTrustedDomainInfoBySid( + [in] policy_handle *handle, + [in] dom_sid2 *dom_sid, + [in] lsa_TrustDomInfoEnum level, + [out,switch_is(level)] lsa_TrustedDomainInfo **info + ); + + /* Function: 0x28 */ + [todo] NTSTATUS lsa_SetTrustedDomainInfo(); + /* Function: 0x29 */ + NTSTATUS lsa_DeleteTrustedDomain( + [in] policy_handle *handle, + [in] dom_sid2 *dom_sid + ); + + /* Function: 0x2a */ + [todo] NTSTATUS lsa_StorePrivateData(); + /* Function: 0x2b */ + [todo] NTSTATUS lsa_RetrievePrivateData(); + + + /**********************/ + /* Function: 0x2c */ + [public] NTSTATUS lsa_OpenPolicy2 ( + [in,unique] [string,charset(UTF16)] uint16 *system_name, + [in] lsa_ObjectAttribute *attr, + [in] lsa_PolicyAccessMask access_mask, + [out] policy_handle *handle + ); + + /**********************/ + /* Function: 0x2d */ + typedef struct { + lsa_String *string; + } lsa_StringPointer; + + NTSTATUS lsa_GetUserName( + [in,unique] [string,charset(UTF16)] uint16 *system_name, + [in,out,unique] lsa_String *account_name, + [in,out,unique] lsa_StringPointer *authority_name + ); + + /**********************/ + /* Function: 0x2e */ + + NTSTATUS lsa_QueryInfoPolicy2( + [in] policy_handle *handle, + [in] lsa_PolicyInfo level, + [out,switch_is(level)] lsa_PolicyInformation **info + ); + + /* Function 0x2f */ + NTSTATUS lsa_SetInfoPolicy2( + [in] policy_handle *handle, + [in] lsa_PolicyInfo level, + [in,switch_is(level)] lsa_PolicyInformation *info + ); + + /**********************/ + /* Function 0x30 */ + NTSTATUS lsa_QueryTrustedDomainInfoByName( + [in] policy_handle *handle, + [in] lsa_String trusted_domain, + [in] lsa_TrustDomInfoEnum level, + [out,switch_is(level)] lsa_TrustedDomainInfo **info + ); + + /**********************/ + /* Function 0x31 */ + NTSTATUS lsa_SetTrustedDomainInfoByName( + [in] policy_handle *handle, + [in] lsa_String trusted_domain, + [in] lsa_TrustDomInfoEnum level, + [in,unique,switch_is(level)] lsa_TrustedDomainInfo *info + ); + + /* Function 0x32 */ + + /* w2k3 treats max_size as max_domains*82 */ + const int LSA_ENUM_TRUST_DOMAIN_EX_MULTIPLIER = 82; + + typedef struct { + uint32 count; + [size_is(count)] lsa_TrustDomainInfoInfoEx *domains; + } lsa_DomainListEx; + + NTSTATUS lsa_EnumTrustedDomainsEx ( + [in] policy_handle *handle, + [in,out] uint32 *resume_handle, + [out] lsa_DomainListEx *domains, + [in] uint32 max_size + ); + + + /* Function 0x33 */ + [todo] NTSTATUS lsa_CreateTrustedDomainEx(); + + /* Function 0x34 */ + NTSTATUS lsa_CloseTrustedDomainEx( + [in,out] policy_handle *handle + ); + + /* Function 0x35 */ + + /* w2k3 returns either 0x000bbbd000000000 or 0x000a48e800000000 + for unknown6 - gd */ + typedef struct { + uint32 enforce_restrictions; + hyper service_tkt_lifetime; + hyper user_tkt_lifetime; + hyper user_tkt_renewaltime; + hyper clock_skew; + hyper unknown6; + } lsa_DomainInfoKerberos; + + typedef struct { + uint32 blob_size; + [size_is(blob_size)] uint8 *efs_blob; + } lsa_DomainInfoEfs; + + typedef enum { + LSA_DOMAIN_INFO_POLICY_QOS=1, + LSA_DOMAIN_INFO_POLICY_EFS=2, + LSA_DOMAIN_INFO_POLICY_KERBEROS=3 + } lsa_DomainInfoEnum; + + typedef [switch_type(uint16)] union { + [case(LSA_DOMAIN_INFO_POLICY_EFS)] lsa_DomainInfoEfs efs_info; + [case(LSA_DOMAIN_INFO_POLICY_KERBEROS)] lsa_DomainInfoKerberos kerberos_info; + } lsa_DomainInformationPolicy; + + NTSTATUS lsa_QueryDomainInformationPolicy( + [in] policy_handle *handle, + [in] lsa_DomainInfoEnum level, + [out,switch_is(level)] lsa_DomainInformationPolicy **info + ); + + /* Function 0x36 */ + NTSTATUS lsa_SetDomainInformationPolicy( + [in] policy_handle *handle, + [in] lsa_DomainInfoEnum level, + [in,unique,switch_is(level)] lsa_DomainInformationPolicy *info + ); + + /**********************/ + /* Function 0x37 */ + NTSTATUS lsa_OpenTrustedDomainByName( + [in] policy_handle *handle, + [in] lsa_String name, + [in] lsa_DomainAccessMask access_mask, + [out] policy_handle *trustdom_handle + ); + + /* Function 0x38 */ + [todo] NTSTATUS lsa_TestCall(); + + /**********************/ + /* Function 0x39 */ + + typedef struct { + lsa_SidType sid_type; + lsa_String name; + uint32 sid_index; + uint32 unknown; + } lsa_TranslatedName2; + + typedef struct { + [range(0,1000)] uint32 count; + [size_is(count)] lsa_TranslatedName2 *names; + } lsa_TransNameArray2; + + [public] NTSTATUS lsa_LookupSids2( + [in] policy_handle *handle, + [in] lsa_SidArray *sids, + [out] lsa_RefDomainList **domains, + [in,out] lsa_TransNameArray2 *names, + [in] uint16 level, + [in,out] uint32 *count, + [in] uint32 unknown1, + [in] uint32 unknown2 + ); + + /**********************/ + /* Function 0x3a */ + + typedef struct { + lsa_SidType sid_type; + uint32 rid; + uint32 sid_index; + uint32 unknown; + } lsa_TranslatedSid2; + + typedef struct { + [range(0,1000)] uint32 count; + [size_is(count)] lsa_TranslatedSid2 *sids; + } lsa_TransSidArray2; + + [public] NTSTATUS lsa_LookupNames2 ( + [in] policy_handle *handle, + [in,range(0,1000)] uint32 num_names, + [in,size_is(num_names)] lsa_String names[], + [out] lsa_RefDomainList **domains, + [in,out] lsa_TransSidArray2 *sids, + [in] lsa_LookupNamesLevel level, + [in,out] uint32 *count, + [in] uint32 unknown1, + [in] uint32 unknown2 + ); + + /* Function 0x3b */ + [todo] NTSTATUS lsa_CreateTrustedDomainEx2(); + + /* Function 0x3c */ + [todo] NTSTATUS lsa_CREDRWRITE(); + + /* Function 0x3d */ + [todo] NTSTATUS lsa_CREDRREAD(); + + /* Function 0x3e */ + [todo] NTSTATUS lsa_CREDRENUMERATE(); + + /* Function 0x3f */ + [todo] NTSTATUS lsa_CREDRWRITEDOMAINCREDENTIALS(); + + /* Function 0x40 */ + [todo] NTSTATUS lsa_CREDRREADDOMAINCREDENTIALS(); + + /* Function 0x41 */ + [todo] NTSTATUS lsa_CREDRDELETE(); + + /* Function 0x42 */ + [todo] NTSTATUS lsa_CREDRGETTARGETINFO(); + + /* Function 0x43 */ + [todo] NTSTATUS lsa_CREDRPROFILELOADED(); + + /**********************/ + /* Function 0x44 */ + typedef struct { + lsa_SidType sid_type; + dom_sid2 *sid; + uint32 sid_index; + uint32 unknown; + } lsa_TranslatedSid3; + + typedef struct { + [range(0,1000)] uint32 count; + [size_is(count)] lsa_TranslatedSid3 *sids; + } lsa_TransSidArray3; + + [public] NTSTATUS lsa_LookupNames3 ( + [in] policy_handle *handle, + [in,range(0,1000)] uint32 num_names, + [in,size_is(num_names)] lsa_String names[], + [out] lsa_RefDomainList **domains, + [in,out] lsa_TransSidArray3 *sids, + [in] lsa_LookupNamesLevel level, + [in,out] uint32 *count, + [in] uint32 unknown1, + [in] uint32 unknown2 + ); + + /* Function 0x45 */ + [todo] NTSTATUS lsa_CREDRGETSESSIONTYPES(); + + /* Function 0x46 */ + [todo] NTSTATUS lsa_LSARREGISTERAUDITEVENT(); + + /* Function 0x47 */ + [todo] NTSTATUS lsa_LSARGENAUDITEVENT(); + + /* Function 0x48 */ + [todo] NTSTATUS lsa_LSARUNREGISTERAUDITEVENT(); + + /* Function 0x49 */ + typedef struct { + [range(0,131072)] uint32 length; + [size_is(length)] uint8 *data; + } lsa_ForestTrustBinaryData; + + typedef struct { + dom_sid2 *domain_sid; + lsa_StringLarge dns_domain_name; + lsa_StringLarge netbios_domain_name; + } lsa_ForestTrustDomainInfo; + + typedef [switch_type(uint32)] union { + [case(LSA_FOREST_TRUST_TOP_LEVEL_NAME)] lsa_String top_level_name; + [case(LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX)] lsa_StringLarge top_level_name_ex; + [case(LSA_FOREST_TRUST_DOMAIN_INFO)] lsa_ForestTrustDomainInfo domain_info; + [default] lsa_ForestTrustBinaryData data; + } lsa_ForestTrustData; + + typedef [v1_enum] enum { + LSA_FOREST_TRUST_TOP_LEVEL_NAME = 0, + LSA_FOREST_TRUST_TOP_LEVEL_NAME_EX = 1, + LSA_FOREST_TRUST_DOMAIN_INFO = 2, + LSA_FOREST_TRUST_RECORD_TYPE_LAST = 3 + } lsa_ForestTrustRecordType; + + typedef struct { + uint32 flags; + lsa_ForestTrustRecordType level; + hyper unknown; + [switch_is(level)] lsa_ForestTrustData forest_trust_data; + } lsa_ForestTrustRecord; + + typedef [public] struct { + [range(0,4000)] uint32 count; + [size_is(count)] lsa_ForestTrustRecord **entries; + } lsa_ForestTrustInformation; + + NTSTATUS lsa_lsaRQueryForestTrustInformation( + [in] policy_handle *handle, + [in,ref] lsa_String *trusted_domain_name, + [in] uint16 unknown, /* level ? */ + [out,ref] lsa_ForestTrustInformation **forest_trust_info + ); + + /* Function 0x4a */ + [todo] NTSTATUS lsa_LSARSETFORESTTRUSTINFORMATION(); + + /* Function 0x4b */ + [todo] NTSTATUS lsa_CREDRRENAME(); + + /*****************/ + /* Function 0x4c */ + + [public] NTSTATUS lsa_LookupSids3( + [in] lsa_SidArray *sids, + [out] lsa_RefDomainList **domains, + [in,out] lsa_TransNameArray2 *names, + [in] uint16 level, + [in,out] uint32 *count, + [in] uint32 unknown1, + [in] uint32 unknown2 + ); + + /* Function 0x4d */ + NTSTATUS lsa_LookupNames4( + [in,range(0,1000)] uint32 num_names, + [in,size_is(num_names)] lsa_String names[], + [out] lsa_RefDomainList **domains, + [in,out] lsa_TransSidArray3 *sids, + [in] lsa_LookupNamesLevel level, + [in,out] uint32 *count, + [in] uint32 unknown1, + [in] uint32 unknown2 + ); + + /* Function 0x4e */ + [todo] NTSTATUS lsa_LSAROPENPOLICYSCE(); + + /* Function 0x4f */ + [todo] NTSTATUS lsa_LSARADTREGISTERSECURITYEVENTSOURCE(); + + /* Function 0x50 */ + [todo] NTSTATUS lsa_LSARADTUNREGISTERSECURITYEVENTSOURCE(); + + /* Function 0x51 */ + [todo] NTSTATUS lsa_LSARADTREPORTSECURITYEVENT(); + + /* Function 0x52 */ + [todo] NTSTATUS Opnum82NotUsedOnWire(void); + + /* Function 0x53 */ + [todo] NTSTATUS Opnum83NotUsedOnWire(void); + + /* Function 0x54 */ + [todo] NTSTATUS Opnum84NotUsedOnWire(void); + + /* Function 0x55 */ + [todo] NTSTATUS Opnum85NotUsedOnWire(void); + + /* Function 0x56 */ + [todo] NTSTATUS Opnum86NotUsedOnWire(void); + + /* Function 0x57 */ + [todo] NTSTATUS Opnum87NotUsedOnWire(void); + + /* Function 0x58 */ + [todo] NTSTATUS Opnum88NotUsedOnWire(void); + + /* Function 0x59 */ + [todo] NTSTATUS Opnum89NotUsedOnWire(void); + + /* Function 0x5A */ + [todo] NTSTATUS Opnum90NotUsedOnWire(void); + + /* Function 0x5B */ + [todo] NTSTATUS Opnum91NotUsedOnWire(void); + + /* Function 0x5C */ + [todo] NTSTATUS Opnum92NotUsedOnWire(void); + + /* Function 0x5D */ + [todo] NTSTATUS Opnum93NotUsedOnWire(void); + + /* Function 0x5E */ + [todo] NTSTATUS Opnum94NotUsedOnWire(void); + + /* Function 0x5F */ + [todo] NTSTATUS Opnum95NotUsedOnWire(void); + + /* Function 0x60 */ + [todo] NTSTATUS Opnum96NotUsedOnWire(void); + + /* Function 0x61 */ + [todo] NTSTATUS Opnum97NotUsedOnWire(void); + + /* Function 0x62 */ + [todo] NTSTATUS Opnum98NotUsedOnWire(void); + + /* Function 0x63 */ + [todo] NTSTATUS Opnum99NotUsedOnWire(void); + + /* Function 0x64 */ + [todo] NTSTATUS Opnum100NotUsedOnWire(void); + + /* Function 0x65 */ + [todo] NTSTATUS Opnum101NotUsedOnWire(void); + + /* Function 0x66 */ + [todo] NTSTATUS Opnum102NotUsedOnWire(void); + + /* Function 0x67 */ + [todo] NTSTATUS Opnum103NotUsedOnWire(void); + + /* Function 0x68 */ + [todo] NTSTATUS Opnum104NotUsedOnWire(void); + + /* Function 0x69 */ + [todo] NTSTATUS Opnum105NotUsedOnWire(void); + + /* Function 0x6A */ + [todo] NTSTATUS Opnum106NotUsedOnWire(void); + + /* Function 0x6B */ + [todo] NTSTATUS Opnum107NotUsedOnWire(void); + + /* Function 0x6C */ + [todo] NTSTATUS Opnum108NotUsedOnWire(void); + + /* Function 0x6D */ + [todo] NTSTATUS Opnum109NotUsedOnWire(void); + + /* Function 0x6E */ + [todo] NTSTATUS Opnum110NotUsedOnWire(void); + + /* Function 0x6F */ + [todo] NTSTATUS Opnum111NotUsedOnWire(void); + + /* Function 0x70 */ + [todo] NTSTATUS Opnum112NotUsedOnWire(void); + + /* Function 0x71 */ + [todo] NTSTATUS Opnum113NotUsedOnWire(void); + + /* Function 0x72 */ + [todo] NTSTATUS Opnum114NotUsedOnWire(void); + + /* Function 0x73 */ + [todo] NTSTATUS Opnum115NotUsedOnWire(void); + + /* Function 0x74 */ + [todo] NTSTATUS Opnum116NotUsedOnWire(void); + + /* Function 0x75 */ + [todo] NTSTATUS Opnum117NotUsedOnWire(void); + + /* Function 0x76 */ + [todo] NTSTATUS Opnum118NotUsedOnWire(void); + + /* Function 0x77 */ + [todo] NTSTATUS Opnum119NotUsedOnWire(void); + + /* Function 0x78 */ + [todo] NTSTATUS Opnum120NotUsedOnWire(void); + + /* Function 0x79 */ + [todo] NTSTATUS Opnum121NotUsedOnWire(void); + + /* Function 0x7A */ + [todo] NTSTATUS Opnum122NotUsedOnWire(void); + + /* Function 0x7B */ + [todo] NTSTATUS Opnum123NotUsedOnWire(void); + + /* Function 0x7C */ + [todo] NTSTATUS Opnum124NotUsedOnWire(void); + + /* Function 0x7D */ + [todo] NTSTATUS Opnum125NotUsedOnWire(void); + + /* Function 0x7E */ + [todo] NTSTATUS Opnum126NotUsedOnWire(void); + + /* Function 0x7F */ + [todo] NTSTATUS Opnum127NotUsedOnWire(void); + + /* Function 0x80 */ + [todo] NTSTATUS Opnum128NotUsedOnWire(void); + + /* Function 0x81 */ + [todo] NTSTATUS lsa_LsarCreateTrustedDomainEx3(void); + + /*****************/ + /* Function 0x82 */ + + typedef [v1_enum] enum { + LSAPR_REVISION_VERSION_1 = 0x00000001 + } LSAPR_REVISION_VERSION; + + typedef struct _LSAPR_REVISION_INFO_V1 + { + uint32 Revision; + uint32 SupportedFeatures; + } LSAPR_REVISION_INFO_V1; + + typedef [switch_type(LSAPR_REVISION_VERSION)] union { + [case(LSAPR_REVISION_VERSION_1)] LSAPR_REVISION_INFO_V1 revision_info_v1; + } LSAPR_REVISION_INFO; + + NTSTATUS lsa_LsarOpenPolicy3( + [in,unique] [string,charset(UTF16)] uint16 *system_name, + [in] lsa_ObjectAttribute *ObjectAttributes, + [in] lsa_PolicyAccessMask DesiredAccess, + [in] uint32 InVersion, + [in] [switch_is(InVersion)] LSAPR_REVISION_INFO* InRevisionInfo, + [out] uint32 *OutVersion, + [out] [switch_is(*OutVersion)] LSAPR_REVISION_INFO* OutRevisionInfo, + [out] policy_handle *handle + ); +} diff --git a/epan/dissectors/pidl/mapi/mapi.cnf b/epan/dissectors/pidl/mapi/mapi.cnf new file mode 100644 index 00000000..c817bbca --- /dev/null +++ b/epan/dissectors/pidl/mapi/mapi.cnf @@ -0,0 +1,1351 @@ +# Conformance file for mapi + +HF_FIELD hf_mapi_decrypted_data "Decrypted data" "mapi.decrypted.data" FT_BYTES BASE_NONE NULL 0 NULL HFILL +HF_FIELD hf_mapi_LogonId "LogonId" "mapi.rop.LogonId" FT_UINT8 BASE_DEC NULL 0 NULL HFILL +HF_FIELD hf_mapi_ResponseHandleIndex "ResponseHandleIndex" "mapi.rop.ResponseHandleIndex" FT_UINT8 BASE_DEC NULL 0 NULL HFILL +HF_FIELD hf_mapi_InputHandleIndex "InputHandleIndex" "mapi.rop.InputHandleIndex" FT_UINT8 BASE_DEC NULL 0 NULL HFILL +HF_FIELD hf_mapi_OutputHandleIndex "OutputHandleIndex" "mapi.rop.OutputHandleIndex" FT_UINT8 BASE_DEC NULL 0 NULL HFILL +HF_FIELD hf_mapi_RgbInSize "RgbInSize" "mapi.RgbIn.RgbInSize" FT_UINT32 BASE_DEC NULL 0 NULL HFILL +HF_FIELD hf_mapi_RgbOutSize "RgbOutSize" "mapi.RgbOut.RgbOutSize" FT_UINT32 BASE_DEC NULL 0 NULL HFILL +HF_FIELD hf_mapi_AUX_PERF_CLIENTINFO_ClientIPV4 "ClientIP" "mapi.AUX_PERF_CLIENTINFO.ClientIP" FT_IPv4 BASE_NONE NULL 0 NULL HFILL +HF_FIELD hf_mapi_AUX_PERF_CLIENTINFO_ClientIPV6 "ClientIPV6" "mapi.AUX_PERF_CLIENTINFO.ClientIPV6" FT_IPv6 BASE_NONE NULL 0 NULL HFILL +HF_FIELD hf_mapi_AUX_PERF_CLIENTINFO_MacAddressEther "MacAddress" "mapi.AUX_PERF_CLIENTINFO.MacAddress" FT_ETHER BASE_NONE NULL 0 NULL HFILL + +HF_RENAME hf_mapi_AUX_PERF_CLIENTINFO_MacAddress hf_mapi_AUX_PERF_CLIENTINFO_MacAddressEther +HF_RENAME hf_mapi_AUX_PERF_CLIENTINFO_ClientIP hf_mapi_AUX_PERF_CLIENTINFO_ClientIPV4 +HF_RENAME hf_mapi_AbortSubmit_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_Abort_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_AddressTypes_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_CloneStream_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_CollapseRow_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_CommitStream_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_CopyFolder_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_CopyProperties_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_CopyToStream_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_CopyTo_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_CreateAttach_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_CreateBookmark_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_CreateFolder_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_CreateMessage_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_DeleteAttach_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_DeleteFolder_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_DeleteMessages_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_DeletePropertiesNoReplicate_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_DeleteProps_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_EmptyFolder_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_ExpandRow_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_FastTransferSourceGetBuffer_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_FindRow_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_FreeBookmark_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetAttachmentTable_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetCollapseState_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetContentsTable_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetHierarchyTable_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetIDsFromNames_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetLocalReplicaIds_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetMessageStatus_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetNamesFromIDs_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetOwningServers_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetPerUserGuid_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetPerUserLongTermIds_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetPermissionsTable_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetPropList_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetPropsAll_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetProps_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetReceiveFolderTable_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetReceiveFolder_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetRulesTable_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetSearchCriteria_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetStatus_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetStoreState_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetStreamSize_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetTransportFolder_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_GetValidAttachments_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_HardDeleteMessagesAndSubfolders_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_HardDeleteMessages_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_IdFromLongTermId_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_LockRegionStream_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_Logon_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_LongTermIdFromId_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_ModifyPermissions_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_ModifyRecipients_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_ModifyRules_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_MoveCopyMessages_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_MoveFolder_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_OpenAttach_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_OpenEmbeddedMessage_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_OpenFolder_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_OpenMessage_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_OpenStream_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_OptionsData_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_Progress_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_PublicFolderIsGhosted_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_QueryColumnsAll_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_QueryNamedProperties_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_QueryPosition_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_QueryRows_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_ReadPerUserInformation_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_ReadRecipients_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_ReadStream_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_RegisterNotification_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_Release_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_RemoveAllRecipients_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_ResetTable_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SaveChangesAttachment_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SaveChangesMessage_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SeekRowApprox_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SeekRowBookmark_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SeekRow_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SeekStream_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SetCollapseState_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SetColumns_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SetMessageReadFlag_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SetMessageStatus_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SetPropertiesNoReplicate_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SetProps_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SetReadFlags_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SetReceiveFolder_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SetSearchCriteria_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SetSpooler_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SetStreamSize_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SortTable_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SpoolerLockMessage_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SubmitMessage_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SyncConfigure_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SyncGetTransferState_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SyncImportDeletes_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SyncImportHierarchyChange_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SyncImportMessageChange_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SyncImportMessageMove_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SyncImportReadStateChanges_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SyncOpenCollector_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SyncUploadStateStreamBegin_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SyncUploadStateStreamContinue_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_SyncUploadStateStreamEnd_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_TransportNewMail_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_TransportSend_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_UnlockRegionStream_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_UpdateDeferredActionMessages_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_WriteAndCommitStream_req_LogonId hf_mapi_LogonId +HF_RENAME hf_mapi_WriteStream_req_LogonId hf_mapi_LogonId + + +HF_RENAME hf_mapi_AbortSubmit_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_Abort_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_AddressTypes_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_CloneStream_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_CollapseRow_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_CommitStream_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_CreateAttach_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_CreateBookmark_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_CreateFolder_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_CreateMessage_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_DeleteAttach_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_DeleteFolder_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_DeleteMessages_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_DeletePropertiesNoReplicate_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_DeleteProps_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_EmptyFolder_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_ExpandRow_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_FastTransferSourceGetBuffer_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_FindRow_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_FreeBookmark_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetAttachmentTable_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetCollapseState_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetContentsTable_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetHierarchyTable_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetIDsFromNames_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetLocalReplicaIds_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetMessageStatus_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetNamesFromIDs_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetOwningServers_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetPerUserGuid_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetPerUserLongTermIds_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetPermissionsTable_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetPropList_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetPropsAll_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetProps_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetReceiveFolderTable_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetReceiveFolder_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetRulesTable_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetSearchCriteria_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetStatus_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetStoreState_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetStreamSize_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetTransportFolder_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_GetValidAttachments_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_HardDeleteMessagesAndSubfolders_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_HardDeleteMessages_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_IdFromLongTermId_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_LockRegionStream_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_LongTermIdFromId_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_ModifyPermissions_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_ModifyRecipients_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_ModifyRules_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_OpenAttach_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_OpenEmbeddedMessage_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_OpenFolder_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_OpenMessage_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_OpenStream_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_OptionsData_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_Progress_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_PublicFolderIsGhosted_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_QueryColumnsAll_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_QueryNamedProperties_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_QueryPosition_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_QueryRows_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_ReadPerUserInformation_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_ReadRecipients_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_ReadStream_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_RegisterNotification_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_Release_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_RemoveAllRecipients_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_ResetTable_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SaveChangesAttachment_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SaveChangesMessage_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SeekRowApprox_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SeekRowBookmark_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SeekRow_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SeekStream_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SetCollapseState_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SetColumns_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SetMessageReadFlag_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SetMessageStatus_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SetPropertiesNoReplicate_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SetProps_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SetReadFlags_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SetReceiveFolder_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SetSearchCriteria_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SetSpooler_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SetStreamSize_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SortTable_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SpoolerLockMessage_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SubmitMessage_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SyncConfigure_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SyncGetTransferState_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SyncImportDeletes_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SyncImportHierarchyChange_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SyncImportMessageChange_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SyncImportMessageMove_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SyncImportReadStateChanges_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SyncOpenCollector_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SyncUploadStateStreamBegin_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SyncUploadStateStreamContinue_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_SyncUploadStateStreamEnd_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_TransportNewMail_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_TransportSend_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_UnlockRegionStream_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_UpdateDeferredActionMessages_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_WriteAndCommitStream_req_InputHandleIndex hf_mapi_InputHandleIndex +HF_RENAME hf_mapi_WriteStream_req_InputHandleIndex hf_mapi_InputHandleIndex + +HF_RENAME hf_mapi_CloneStream_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_CreateAttach_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_CreateFolder_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_CreateMessage_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_GetAttachmentTable_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_GetContentsTable_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_GetHierarchyTable_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_GetPermissionsTable_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_GetRulesTable_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_Logon_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_OpenAttach_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_OpenEmbeddedMessage_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_OpenFolder_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_OpenMessage_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_OpenStream_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_RegisterNotification_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_SyncConfigure_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_SyncGetTransferState_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_SyncImportMessageChange_req_OutputHandleIndex hf_mapi_OutputHandleIndex +HF_RENAME hf_mapi_SyncOpenCollector_req_OutputHandleIndex hf_mapi_OutputHandleIndex + +HF_RENAME hf_mapi_SaveChangesAttachment_req_ResponseHandleIndex hf_mapi_ResponseHandleIndex +HF_RENAME hf_mapi_SaveChangesMessage_req_ResponseHandleIndex hf_mapi_ResponseHandleIndex +HF_RENAME hf_mapi_SetMessageReadFlag_req_ResponseHandleIndex hf_mapi_ResponseHandleIndex + +HF_FIELD hf_mapi_SyncUploadStateStreamContinue_req_StreamDataValue "StreamData" "mapi.SyncUploadStateStreamContinue_req.StreamData" FT_BYTES BASE_NONE NULL 0 NULL HFILL +HF_RENAME hf_mapi_SyncUploadStateStreamContinue_req_StreamData hf_mapi_SyncUploadStateStreamContinue_req_StreamDataValue + +HF_FIELD hf_mapi_SyncImportMessageMove_req_SourceFolderIdValue "SourceFolderId" "mapi.SyncImportMessageMove_req.SourceFolderId" FT_BYTES BASE_NONE NULL 0 NULL HFILL +HF_RENAME hf_mapi_SyncImportMessageMove_req_SourceFolderId hf_mapi_SyncImportMessageMove_req_SourceFolderIdValue + +HF_FIELD hf_mapi_SyncImportMessageMove_req_SourceMessageIdValue "SourceMessageId" "mapi.SyncImportMessageMove_req.SourceMessageId" FT_BYTES BASE_NONE NULL 0 NULL HFILL +HF_RENAME hf_mapi_SyncImportMessageMove_req_SourceMessageId hf_mapi_SyncImportMessageMove_req_SourceMessageIdValue + +HF_FIELD hf_mapi_SyncImportMessageMove_req_PredecessorChangeListValue "PredecessorChangeList" "mapi.SyncImportMessageMove_req.PredecessorChangeList" FT_BYTES BASE_NONE NULL 0 NULL HFILL +HF_RENAME hf_mapi_SyncImportMessageMove_req_PredecessorChangeList hf_mapi_SyncImportMessageMove_req_PredecessorChangeListValue + +HF_FIELD hf_mapi_SyncImportMessageMove_req_DestinationMessageIdValue "DestinationMessageId" "mapi.SyncImportMessageMove_req.DestinationMessageId" FT_BYTES BASE_NONE NULL 0 NULL HFILL +HF_RENAME hf_mapi_SyncImportMessageMove_req_DestinationMessageId hf_mapi_SyncImportMessageMove_req_DestinationMessageIdValue + +HF_FIELD hf_mapi_SyncImportMessageMove_req_ChangeNumberValue "ChangeNumber" "mapi.SyncImportMessageMove_req.ChangeNumber" FT_BYTES BASE_NONE NULL 0 NULL HFILL +HF_RENAME hf_mapi_SyncImportMessageMove_req_ChangeNumber hf_mapi_SyncImportMessageMove_req_ChangeNumberValue + +ETT_FIELD ett_mapi_connect_request +ETT_FIELD ett_ServerObjectHandleTable + +MANUAL mapi_dissect_struct_request +MANUAL mapi_dissect_struct_EcDoRpcMapiRequest +MANUAL mapi_dissect_struct_AuxInfo +MANUAL mapi_dissect_struct_AUX_HEADER +MANUAL mapi_dissect_AUX_HEADER_TYPE_ENUM +MANUAL mapi_dissect_AUX_DATA +MANUAL mapi_dissect_struct_EcDoRpcMapiResponse +MANUAL mapi_dissect_struct_response +MANUAL mapi_dissect_element_EcDoRpc_response +MANUAL mapi_dissect_struct_AUX_PERF_CLIENTINFO +MANUAL mapi_dissect_element_AuxInfo_auxHeader +MANUAL mapi_dissect_element_EcDoConnect_szUserDN +MANUAL mapi_dissect_element_EcDoConnectEx_szUserDN +MANUAL mapi_dissect_element_EcDoConnectEx_rgbAuxOut_ +MANUAL mapi_dissect_element_EcDoRpcExt2_rgbAuxOut_ +MANUAL mapi_dissect_element_EcDoConnect_rgwClientVersion +MANUAL mapi_dissect_element_EcDoConnect_rgwServerVersion +MANUAL mapi_dissect_element_EcDoConnect_rgwBestVersion +MANUAL mapi_dissect_element_EcDoConnectEx_rgwClientVersion +MANUAL mapi_dissect_element_EcDoConnectEx_rgwServerVersion +MANUAL mapi_dissect_element_EcDoConnectEx_rgwBestVersion +MANUAL mapi_dissect_struct_SyncUploadStateStreamContinue_req +MANUAL mapi_dissect_struct_SyncImportMessageMove_req +MANUAL mapi_dissect_bitmap_OpenFlags +MANUAL mapi_dissect_bitmap_StoreState +MANUAL mapi_dissect_struct_Logon_repl +MANUAL mapi_dissect_struct_RgbIn +MANUAL mapi_dissect_struct_RgbOut +MANUAL mapi_dissect_element_EcDoRpcExt2_rgbOut_ +MANUAL mapi_dissect_element_EcDoRpcExt_rgbOut_ + + +NOEMIT mapi_dissect_element_EcDoRpc_request +NOEMIT mapi_dissect_element_request_len +NOEMIT mapi_dissect_element_request_length +NOEMIT mapi_dissect_element_EcDoRpcMapiRequest_opnum +NOEMIT mapi_dissect_element_request_handles +NOEMIT mapi_dissect_element_EcDoRpc_MAPI_REPL_opnum +NOEMIT mapi_dissect_element_EcDoRpcMapiResponse_opnum +NOEMIT mapi_dissect_element_response_len +NOEMIT mapi_dissect_element_response_length +NOEMIT mapi_dissect_element_response_handles +NOEMIT mapi_dissect_element_EcDoRpc_response_ +NOEMIT mapi_dissect_element_AuxInfo_auxInSize +NOEMIT mapi_dissect_element_AuxInfo_auxIn +NOEMIT mapi_dissect_element_AuxInfo_RpcHeaderExtension +NOEMIT mapi_dissect_element_AuxInfo_AUX_HEADER +NOEMIT mapi_dissect_element_AUX_HEADER_hdrType +NOEMIT mapi_dissect_element_AUX_HEADER_TYPE_ENUM_Type +NOEMIT mapi_dissect_element_AUX_HEADER_TYPE_ENUM_Type_2 +NOEMIT mapi_dissect_element_AUX_HEADER_AuxData +NOEMIT mapi_dissect_element_AUX_DATA_Version1 +NOEMIT mapi_dissect_element_AUX_DATA_Version2 +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_MachineNameOffset +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_UserNameOffset +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_ClientIPSize +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_ClientIPOffset +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_ClientIPMaskSize +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_ClientIPMaskOffset +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_AdapterNameOffset +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_MacAddressSize +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_MacAddressOffset +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_MachineName +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_UserName +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_ClientIP +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_ClientIPMask +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_AdapterName +NOEMIT mapi_dissect_element_AUX_PERF_CLIENTINFO_MacAddress +NOEMIT mapi_dissect_element_AUX_HEADER_Size +NOEMIT mapi_dissect_element_EcDoConnectEx_rgbAuxOut__ +NOEMIT mapi_dissect_element_EcDoRpcExt2_rgbAuxOut__ +NOEMIT mapi_dissect_element_AuxInfo_auxHeader_ +NOEMIT mapi_dissect_element_EcDoConnect_rgwClientVersion_ +NOEMIT mapi_dissect_element_ROPRequest_RopId +NOEMIT mapi_dissect_element_SyncUploadStateStreamContinue_req_StreamDataSize +NOEMIT mapi_dissect_element_SyncUploadStateStreamContinue_req_StreamData +NOEMIT mapi_dissect_element_SyncImportMessageMove_req_SourceFolderIdSize +NOEMIT mapi_dissect_element_SyncImportMessageMove_req_SourceFolderId +NOEMIT mapi_dissect_element_SyncImportMessageMove_req_SourceMessageIdSize +NOEMIT mapi_dissect_element_SyncImportMessageMove_req_SourceMessageId +NOEMIT mapi_dissect_element_SyncImportMessageMove_req_PredecessorChangeListSize +NOEMIT mapi_dissect_element_SyncImportMessageMove_req_PredecessorChangeList +NOEMIT mapi_dissect_element_SyncImportMessageMove_req_DestinationMessageIdSize +NOEMIT mapi_dissect_element_SyncImportMessageMove_req_DestinationMessageId +NOEMIT mapi_dissect_element_SyncImportMessageMove_req_ChangeNumberSize +NOEMIT mapi_dissect_element_SyncImportMessageMove_req_ChangeNumber +NOEMIT mapi_dissect_element_Logon_repl_ReturnValue +NOEMIT mapi_dissect_element_Logon_repl_LogonFlags +NOEMIT mapi_dissect_element_RgbIn_RpcHeaderExtension +NOEMIT mapi_dissect_element_RgbIn_ropIn +NOEMIT mapi_dissect_element_RgbOut_RpcHeaderExtension +NOEMIT mapi_dissect_element_RgbOut_ropOut +NOEMIT mapi_dissect_element_EcDoRpcExt2_rgbOut__ +NOEMIT mapi_dissect_element_EcDoRpcExt_rgbOut__ + +CODE START + +tvbuff_t * +mapi_deobfuscate(tvbuff_t *tvb, int offset, packet_info *pinfo, guint32 size) +{ + tvbuff_t *deob_tvb = NULL; + guint8 *decrypted_data; + const guint8 *ptr; + gint reported_len; + + reported_len = tvb_reported_length_remaining(tvb, offset); + + if ((guint32) reported_len > size) { + reported_len = size; + } + + if (size > (guint32) reported_len) { + size = reported_len; + } + + ptr = tvb_get_ptr(tvb, offset, size); + + decrypted_data = (guint8 *)wmem_alloc0(pinfo->pool, size); + for (guint32 i = 0; i < size; i++) { + decrypted_data[i] = ptr[i] ^ 0xA5; + } + + deob_tvb = tvb_new_child_real_data(tvb, decrypted_data, size, reported_len); + + return deob_tvb; +} + +/* [MS-OXCRPC] 3.1.4.1.3.1 Version Number Comparison +*/ +static int +normalize_version(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *tree, int hf_index, const gchar * str) +{ + guint16 version_0, build_major, product_major, product_minor; + gchar *value; + + version_0= tvb_get_letohs(tvb, offset); + build_major= tvb_get_letohs(tvb, offset + 2); + + if(build_major & 0x8000){ + product_major = (version_0 & 0xFF00) >> 8; + product_minor = (version_0 & 0xFF); + build_major = (build_major & 0x7FFF); + } else { + product_major = version_0; + product_minor = 0; + } + + value = wmem_strdup_printf( pinfo->pool + , "%d.%d.%d.%d" + , product_major + , product_minor + , build_major + , tvb_get_letohs(tvb, offset + 4)); + + proto_tree_add_string_format( tree + , hf_index + , tvb + , offset + , 6 + , value + , "%s: %s" + , str + , value + ); + return offset + 6; +} + +static int +mapi_dissect_element_EcDoConnect_rgwClientVersion(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + return normalize_version(tvb, pinfo, offset, tree, hf_mapi_mapi_EcDoConnect_rgwClientVersion, "rgwClientVersion"); +} + +static int +mapi_dissect_element_EcDoConnect_rgwServerVersion(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + return normalize_version(tvb, pinfo, offset, tree, hf_mapi_mapi_EcDoConnect_rgwServerVersion, "rgwServerVersion"); +} + +static int +mapi_dissect_element_EcDoConnect_rgwBestVersion(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + return normalize_version(tvb, pinfo, offset, tree, hf_mapi_mapi_EcDoConnect_rgwBestVersion, "rgwBestVersion"); +} + +static int +mapi_dissect_element_EcDoConnectEx_rgwClientVersion(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + return normalize_version(tvb, pinfo, offset, tree, hf_mapi_mapi_EcDoConnectEx_rgwClientVersion, "rgwClientVersion"); +} + +static int +mapi_dissect_element_EcDoConnectEx_rgwServerVersion(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + return normalize_version(tvb, pinfo, offset, tree, hf_mapi_mapi_EcDoConnectEx_rgwServerVersion, "rgwServerVersion"); +} + +static int +mapi_dissect_element_EcDoConnectEx_rgwBestVersion(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + return normalize_version(tvb, pinfo, offset, tree, hf_mapi_mapi_EcDoConnectEx_rgwBestVersion, "rgwBestVersion"); +} + + +static int +mapi_dissect_element_EcDoRpc_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + return mapi_dissect_struct_request(tvb, offset, pinfo, tree, di, drep, hf_mapi_mapi_EcDoRpc_mapi_request, 0); +} + +static int +mapi_dissect_element_EcDoRpc_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + return mapi_dissect_struct_response(tvb, offset, pinfo, tree, di, drep, hf_mapi_mapi_EcDoRpc_mapi_response, 0); +} + +/** + * Analyze mapi_request MAPI Handles + */ +static int +mapi_dissect_element_handles_cnf(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, int hf_index _U_, guint8 *drep _U_) +{ + gint reported_len; + gint handles_cnt = 0; + guint32 value; + proto_tree *tr = NULL; + + reported_len = tvb_reported_length_remaining(tvb, offset); + + handles_cnt = reported_len / 4; + + tr = proto_tree_add_subtree_format(tree, tvb, offset, reported_len, ett_mapi_mapi_request, NULL, "MAPI Handles: %d", handles_cnt); + + for (gint i = 0; i < handles_cnt; i++) { + value = tvb_get_letohl(tvb, offset); + proto_tree_add_uint_format(tr, hf_index, tvb, offset, 4, value, "[%.2d] MAPI handle: 0x%.8x", i, value); + offset += 4; + } + + return offset; +} + +int +mapi_dissect_struct_response(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int start_offset = offset; + tvbuff_t *decrypted_tvb; + guint32 size; + guint16 pdu_len; + + ALIGN_TO_5_BYTES; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, start_offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_mapi_mapi_response); + } + + offset = dissect_ndr_uint32(tvb, start_offset, pinfo, tree, di, drep, hf_mapi_mapi_response_mapi_len, &size); + + decrypted_tvb = mapi_deobfuscate(tvb, offset, pinfo, size); + if (!decrypted_tvb || tvb_reported_length(decrypted_tvb) != size) { + return offset; + } + + offset += size; + proto_item_set_len(item, offset - start_offset); + + { + add_new_data_source(pinfo, decrypted_tvb, "Decrypted MAPI Response"); + + tree = proto_tree_add_subtree(tree, decrypted_tvb, 0, size, ett_mapi_mapi_response, NULL, "Decrypted MAPI Response PDU"); + + pdu_len = tvb_get_letohs(decrypted_tvb, 0); + proto_tree_add_uint(tree, hf_mapi_mapi_response_length, decrypted_tvb, 0, sizeof(guint16), pdu_len); + proto_tree_add_item(tree, hf_mapi_decrypted_data, decrypted_tvb, sizeof(guint16), pdu_len - sizeof(guint16), ENC_NA); + + /* analyze contents */ + mapi_dissect_element_response_rpcResponse(decrypted_tvb, sizeof(guint16), pinfo, tree, di, drep); + mapi_dissect_element_handles_cnf(decrypted_tvb, pdu_len, pinfo, tree, di, hf_mapi_mapi_response_handles, drep); + } + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_5_BYTES; + } + + return offset; +} + +static int +mapi_dissect_element_AuxInfo_auxHeader(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + guint total_length = tvb_reported_length(tvb); + + if(di->conformant_run){ + return offset; + } + + while(offset >= 0 && (guint)offset < total_length){ + offset = mapi_dissect_struct_AUX_HEADER(tvb,offset,pinfo,tree,di,drep,di->ptype == PDU_REQ ? hf_mapi_AuxInfo_auxHeader : hf_mapi_AuxInfoOut_auxHeader ,0); + } + + return offset; +} + +int +dissect_EcDoConnectEx_AuxInfoOut(tvbuff_t *tvb _U_, int offset _U_, int length _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + if (length == 0){ + return offset; + } + return mapi_dissect_struct_AuxInfo(tvb, offset, pinfo, parent_tree, di, drep, hf_mapi_mapi_EcDoConnectEx_rgbAuxOut, 0); +} + +static int +mapi_dissect_element_EcDoConnectEx_rgbAuxOut_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + return dissect_ndr_ucvarray_block(tvb, offset, pinfo, tree, di, drep, &dissect_EcDoConnectEx_AuxInfoOut); +} + +int +dissect_EcDoRpcExt2_AuxInfoOut(tvbuff_t *tvb _U_, int offset _U_, int length _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + if (length == 0){ + return offset; + } + return mapi_dissect_struct_AuxInfo(tvb, offset, pinfo, parent_tree, di, drep, hf_mapi_mapi_EcDoRpcExt2_rgbAuxOut, 0); +} + +static int +mapi_dissect_element_EcDoRpcExt2_rgbAuxOut_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + return dissect_ndr_ucvarray_block(tvb, offset, pinfo, tree, di, drep, &dissect_EcDoRpcExt2_AuxInfoOut); +} + +int +mapi_dissect_struct_AUX_PERF_CLIENTINFO(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + gboolean oldalign = di->no_align; + int old_offset, cur_end_offset; + guint16 MachineNameOffset; + guint16 UserNameOffset; + guint16 ClientIPSize; + guint16 ClientIPOffset; + guint16 ClientIPMaskSize; + guint16 ClientIPMaskOffset; + guint16 AdapterNameOffset; + guint16 MacAddressSize; + guint16 MacAddressOffset; + + di->no_align = TRUE; + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_mapi_AUX_PERF_CLIENTINFO); + } + + offset = mapi_dissect_element_AUX_PERF_CLIENTINFO_AdapterSpeed(tvb, offset, pinfo, tree, di, drep); + + offset = mapi_dissect_element_AUX_PERF_CLIENTINFO_ClientID(tvb, offset, pinfo, tree, di, drep); + + offset = PIDL_dissect_uint16_val(tvb, offset, pinfo, tree, di, drep, hf_mapi_AUX_PERF_CLIENTINFO_MachineNameOffset, 0, &MachineNameOffset); + + offset = PIDL_dissect_uint16_val(tvb, offset, pinfo, tree, di, drep, hf_mapi_AUX_PERF_CLIENTINFO_UserNameOffset, 0, &UserNameOffset); + + offset = PIDL_dissect_uint16_val(tvb, offset, pinfo, tree, di, drep, hf_mapi_AUX_PERF_CLIENTINFO_ClientIPSize, 0, &ClientIPSize); + + offset = PIDL_dissect_uint16_val(tvb, offset, pinfo, tree, di, drep, hf_mapi_AUX_PERF_CLIENTINFO_ClientIPOffset, 0, &ClientIPOffset); + + offset = PIDL_dissect_uint16_val(tvb, offset, pinfo, tree, di, drep, hf_mapi_AUX_PERF_CLIENTINFO_ClientIPMaskSize, 0, &ClientIPMaskSize); + + offset = PIDL_dissect_uint16_val(tvb, offset, pinfo, tree, di, drep, hf_mapi_AUX_PERF_CLIENTINFO_ClientIPMaskOffset, 0, &ClientIPMaskOffset); + + offset = PIDL_dissect_uint16_val(tvb, offset, pinfo, tree, di, drep, hf_mapi_AUX_PERF_CLIENTINFO_AdapterNameOffset, 0, &AdapterNameOffset); + + offset = PIDL_dissect_uint16_val(tvb, offset, pinfo, tree, di, drep, hf_mapi_AUX_PERF_CLIENTINFO_MacAddressSize, 0, &MacAddressSize); + + offset = PIDL_dissect_uint16_val(tvb, offset, pinfo, tree, di, drep, hf_mapi_AUX_PERF_CLIENTINFO_MacAddressOffset, 0, &MacAddressOffset); + + offset = mapi_dissect_element_AUX_PERF_CLIENTINFO_ClientMode(tvb, offset, pinfo, tree, di, drep); + + offset = mapi_dissect_element_AUX_PERF_CLIENTINFO_Reserved(tvb, offset, pinfo, tree, di, drep); + + if (MachineNameOffset > 0){ + cur_end_offset = dissect_null_term_wstring(tvb, MachineNameOffset, pinfo, tree, drep, hf_mapi_AUX_PERF_CLIENTINFO_MachineName , 0); + if (cur_end_offset > offset) + offset = cur_end_offset; + } + + if (UserNameOffset > 0){ + cur_end_offset = dissect_null_term_wstring(tvb, UserNameOffset, pinfo, tree, drep, hf_mapi_AUX_PERF_CLIENTINFO_UserName , 0); + if (cur_end_offset > offset) + offset = cur_end_offset; + } + + if (ClientIPOffset > 0 && ClientIPSize > 0){ + if(ClientIPSize == 4){ + proto_tree_add_item(tree, hf_mapi_AUX_PERF_CLIENTINFO_ClientIPV4, tvb, ClientIPOffset, 4, ENC_NA); + } else if(ClientIPSize == 16){ + proto_tree_add_item(tree, hf_mapi_AUX_PERF_CLIENTINFO_ClientIPV6, tvb, ClientIPOffset, 16, ENC_NA); + } + + cur_end_offset = ClientIPOffset + ClientIPSize; + + if (cur_end_offset > offset) + offset = cur_end_offset; + } + + if (ClientIPMaskOffset > 0 && ClientIPMaskSize > 0){ + for (int i = 0; i < ClientIPMaskSize; i++) + cur_end_offset = PIDL_dissect_uint8(tvb, ClientIPMaskOffset+i, pinfo, tree, di, drep, hf_mapi_AUX_PERF_CLIENTINFO_ClientIPMask, 0); + + if (cur_end_offset > offset) + offset = cur_end_offset; + } + + if (AdapterNameOffset > 0){ + cur_end_offset = dissect_null_term_wstring(tvb, AdapterNameOffset, pinfo, tree, drep, hf_mapi_AUX_PERF_CLIENTINFO_AdapterName , 0); + + if (cur_end_offset > offset) + offset = cur_end_offset; + } + + if (MacAddressOffset > 0 && MacAddressSize > 0){ + if(MacAddressSize == 6){ + proto_tree_add_item(tree, hf_mapi_AUX_PERF_CLIENTINFO_MacAddressEther, tvb, MacAddressOffset, 6, ENC_NA); + } + + cur_end_offset = MacAddressOffset + MacAddressSize; + + if (cur_end_offset > offset) + offset = cur_end_offset; + } + + proto_item_set_len(item, offset-old_offset); + + di->no_align = oldalign; + + return offset; +} + +static int +mapi_dissect_AuxDataVersion1(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_); + +static int +mapi_dissect_AuxDataVersion2(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_); + +static int +mapi_dissect_AUX_DATA(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, guint8 Version, int hf_index _U_, guint8 hdrType) +{ + switch(Version) { + case AUX_VERSION_1: + return mapi_dissect_AuxDataVersion1(tvb, offset, pinfo, parent_tree, di, drep, hf_mapi_AUX_DATA_Version1, hdrType); + case AUX_VERSION_2: + return mapi_dissect_AuxDataVersion2(tvb, offset, pinfo, parent_tree, di, drep, hf_mapi_AUX_DATA_Version2, hdrType); + default: + return offset; + } +} + +int +mapi_dissect_AUX_HEADER_TYPE_ENUM(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, guint8 Version, int hf_index _U_, guint8 *hdrType) +{ + switch(Version) { + case AUX_VERSION_1: + return PIDL_dissect_uint8_val(tvb, offset, pinfo, parent_tree, di, drep, hf_mapi_AUX_HEADER_TYPE_ENUM_Type, 0, hdrType); + case AUX_VERSION_2: + return PIDL_dissect_uint8_val(tvb, offset, pinfo, parent_tree, di, drep, hf_mapi_AUX_HEADER_TYPE_ENUM_Type_2, 0, hdrType); + default: + return offset; + } +} + +int +mapi_dissect_struct_AUX_HEADER(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + guint16 auxSize = 0; + guint8 Version = 0; + guint8 hdrType = 0; + proto_item *item = NULL; + proto_tree *tree = NULL; + gboolean oldalign = di->no_align; + + di->no_align = TRUE; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_mapi_AUX_HEADER); + } + + offset = PIDL_dissect_uint16_val(tvb, offset, pinfo, tree, di, drep, hf_mapi_AUX_HEADER_Size, 0, &auxSize); + offset = mapi_dissect_element_AUX_HEADER_Version(tvb, offset, pinfo, tree, di, drep, &Version); + offset = mapi_dissect_AUX_HEADER_TYPE_ENUM(tvb, offset, pinfo, tree, di, drep, Version, hf_mapi_AUX_HEADER_hdrType, &hdrType); + offset = mapi_dissect_AUX_DATA(tvb, offset, pinfo, tree, di, drep, Version, hf_mapi_AUX_HEADER_AuxData, hdrType); + + proto_item_set_len(item, auxSize); + + di->no_align = oldalign; + + return offset; +} + +int +mapi_dissect_struct_EcDoRpcMapiRequest(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + guint8 opnum = 0; + proto_item *item = NULL; + proto_tree *tree = NULL; + gboolean oldalign = di->no_align; + int old_offset; + + di->no_align = TRUE; + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_mapi_EcDoRpcMapiRequest); + } + + offset = PIDL_dissect_uint8_val(tvb, offset, pinfo, tree, di, drep, hf_mapi_EcDoRpcMapiRequest_opnum, param, &opnum); + + col_append_fstr(pinfo->cinfo, COL_INFO, " + %s", val_to_str(opnum, mapi_ROP_OPNUM_vals, "Unknown MAPI operation")); + + offset = mapi_dissect_element_EcDoRpcMapiRequest_u(tvb, offset, pinfo, tree, di, drep, &opnum); + + proto_item_set_len(item, offset-old_offset); + + di->no_align = oldalign; + + return offset; +} + +int +mapi_dissect_struct_request(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int start_offset = offset;; + tvbuff_t *decrypted_tvb = NULL; + guint16 pdu_len; + guint32 size; + + ALIGN_TO_5_BYTES; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_mapi_mapi_request); + } + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_mapi_mapi_request_mapi_len, &size); + + decrypted_tvb = mapi_deobfuscate(tvb, offset, pinfo, size); + if (!decrypted_tvb || tvb_reported_length(decrypted_tvb) != size) { + return offset; + } + + offset += size; + proto_item_set_len(item, offset - start_offset); + + { + add_new_data_source(pinfo, decrypted_tvb, "Decrypted MAPI Request"); + + tree = proto_tree_add_subtree(tree, decrypted_tvb, 0, size, ett_mapi_mapi_request, NULL, "Decrypted MAPI Request PDU"); + + pdu_len = tvb_get_letohs(decrypted_tvb, 0); + proto_tree_add_uint(tree, hf_mapi_mapi_request_length, decrypted_tvb, 0, 2, pdu_len); + proto_tree_add_item(tree, hf_mapi_decrypted_data, decrypted_tvb, 2, pdu_len - 2, ENC_NA); + + /* analyze contents */ + mapi_dissect_element_request_rpcRequest(decrypted_tvb, 2, pinfo, tree, di, drep); + + mapi_dissect_element_handles_cnf(decrypted_tvb, pdu_len, pinfo, tree, di, hf_mapi_mapi_request_handles, drep); + } + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_5_BYTES; + } + + return offset; +} + +static int +mapi_dissect_element_EcDoConnect_szUserDN(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data= NULL; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_mapi_mapi_EcDoConnect_szUserDN, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + col_append_fstr(pinfo->cinfo, COL_INFO, " DN: %s", data); + + return offset; +} + +static int +mapi_dissect_element_EcDoConnectEx_szUserDN(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + char *data= NULL; + + offset = dissect_ndr_cvstring(tvb, offset, pinfo, tree, di, drep, sizeof(guint8), hf_mapi_mapi_EcDoConnectEx_szUserDN, FALSE, &data); + proto_item_append_text(tree, ": %s", data); + + col_append_fstr(pinfo->cinfo, COL_INFO, " DN: %s", data); + + return offset; +} + +int +mapi_dissect_struct_EcDoRpcMapiResponse(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + guint8 opnum = 0; + proto_item *item = NULL; + proto_tree *tree = NULL; + gboolean oldalign = di->no_align; + int old_offset= offset; + + di->no_align = TRUE; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_mapi_EcDoRpcMapiResponse); + } + + offset = PIDL_dissect_uint8_val(tvb, offset, pinfo, tree, di, drep, hf_mapi_EcDoRpcMapiResponse_opnum, param, &opnum); + col_append_fstr(pinfo->cinfo, COL_INFO, " + %s", val_to_str(opnum, mapi_ROP_OPNUM_vals, "Unknown MAPI operation")); + + offset = mapi_dissect_element_EcDoRpcMapiResponse_u(tvb, offset, pinfo, tree, di, drep, &opnum); + + proto_item_set_len(item, offset-old_offset); + + di->no_align = oldalign; + + return offset; +} + +int +uint32_size_uint8_buffer(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info* di, guint8 *drep, int hf_size_index, int hf_buffer_index, guint32 param) +{ + guint32 size= 0; + + offset = PIDL_dissect_uint32_val(tvb, offset, pinfo, parent_tree, di, drep, hf_size_index, param, &size); + + proto_tree_add_item(parent_tree, hf_buffer_index, tvb, offset, size, ENC_NA); + + return offset+size; +} + +int +mapi_dissect_struct_SyncUploadStateStreamContinue_req(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + gboolean oldalign = di->no_align; + int old_offset= offset; + + di->no_align = TRUE; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_mapi_SyncUploadStateStreamContinue_req); + } + + offset = mapi_dissect_element_SyncUploadStateStreamContinue_req_LogonId(tvb, offset, pinfo, tree, di, drep); + + offset = mapi_dissect_element_SyncUploadStateStreamContinue_req_InputHandleIndex(tvb, offset, pinfo, tree, di, drep); + + offset = uint32_size_uint8_buffer(tvb, offset, pinfo, tree, di, drep, hf_mapi_SyncUploadStateStreamContinue_req_StreamDataSize, hf_mapi_SyncUploadStateStreamContinue_req_StreamDataValue, 0); + + proto_item_set_len(item, offset-old_offset); + + di->no_align = oldalign; + + return offset; +} + +int +mapi_dissect_struct_SyncImportMessageMove_req(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + gboolean oldalign = di->no_align; + int old_offset = offset; + + di->no_align = TRUE; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_mapi_SyncImportMessageMove_req); + } + + offset = mapi_dissect_element_SyncImportMessageMove_req_LogonId(tvb, offset, pinfo, tree, di, drep); + offset = mapi_dissect_element_SyncImportMessageMove_req_InputHandleIndex(tvb, offset, pinfo, tree, di, drep); + offset = uint32_size_uint8_buffer(tvb, offset, pinfo, tree, di, drep, hf_mapi_SyncImportMessageMove_req_SourceFolderIdSize, hf_mapi_SyncImportMessageMove_req_SourceFolderIdValue, 0); + offset = uint32_size_uint8_buffer(tvb, offset, pinfo, tree, di, drep, hf_mapi_SyncImportMessageMove_req_SourceMessageIdSize, hf_mapi_SyncImportMessageMove_req_SourceMessageIdValue, 0); + offset = uint32_size_uint8_buffer(tvb, offset, pinfo, tree, di, drep, hf_mapi_SyncImportMessageMove_req_PredecessorChangeListSize, hf_mapi_SyncImportMessageMove_req_PredecessorChangeListValue, 0); + offset = uint32_size_uint8_buffer(tvb, offset, pinfo, tree, di, drep, hf_mapi_SyncImportMessageMove_req_DestinationMessageIdSize, hf_mapi_SyncImportMessageMove_req_DestinationMessageIdValue, 0); + offset = uint32_size_uint8_buffer(tvb, offset, pinfo, tree, di, drep, hf_mapi_SyncImportMessageMove_req_ChangeNumberSize, hf_mapi_SyncImportMessageMove_req_ChangeNumberValue, 0); + + proto_item_set_len(item, offset-old_offset); + + di->no_align = oldalign; + + return offset; +} + +/* IDL: bitmap { */ +/* IDL: PUBLIC = 0x2 , */ +/* IDL: HOME_LOGON = 0x4 , */ +/* IDL: TAKE_OWNERSHIP = 0x8 , */ +/* IDL: ALTERNATE_SERVER = 0x100 , */ +/* IDL: IGNORE_HOME_MDB = 0x200 , */ +/* IDL: NO_MAIL = 0x400 , */ +/* IDL: USE_PER_MDB_REPLID_MAPPING = 0x010000000 , */ +/* IDL: } */ + +int +mapi_dissect_bitmap_OpenFlags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item= NULL; + static int * const mapi_OpenFlags_fields[] = { + &hf_mapi_OpenFlags_PUBLIC, + &hf_mapi_OpenFlags_HOME_LOGON, + &hf_mapi_OpenFlags_TAKE_OWNERSHIP, + &hf_mapi_OpenFlags_ALTERNATE_SERVER, + &hf_mapi_OpenFlags_IGNORE_HOME_MDB, + &hf_mapi_OpenFlags_NO_MAIL, + &hf_mapi_OpenFlags_USE_PER_MDB_REPLID_MAPPING, + NULL + }; + guint32 flags; + + item = proto_tree_add_bitmask_with_flags(parent_tree, tvb, offset, hf_index, + ett_mapi_OpenFlags, mapi_OpenFlags_fields, DREP_ENC_INTEGER(drep), BMT_NO_FALSE); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, parent_tree, di, drep, -1, &flags); + + if (!flags) + proto_item_append_text(item, ": (No values set)"); + + if (flags & (~0x1000070e)) { + flags &= (~0x1000070e); + proto_item_append_text(item, "Unknown bitmap value 0x%x", flags); + } + + return offset; +} + +int +mapi_dissect_bitmap_StoreState(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item; + static int * const mapi_StoreState_fields[] = { + &hf_mapi_StoreState_STORE_HAS_SEARCHES, + NULL + }; + guint32 flags; + + item = proto_tree_add_bitmask_with_flags(parent_tree, tvb, offset, hf_index, + ett_mapi_StoreState, mapi_StoreState_fields, DREP_ENC_INTEGER(drep), BMT_NO_FALSE); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, parent_tree, di, drep, -1, &flags); + + if (!flags) + proto_item_append_text(item, ": (No values set)"); + + if (flags & (~0x10000000)) { + flags &= (~0x10000000); + proto_item_append_text(item, "Unknown bitmap value 0x%x", flags); + } + + return offset; +} + +int +mapi_dissect_struct_Logon_repl(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + gboolean oldalign = di->no_align; + int old_offset= offset; + guint32 returnValue; + + di->no_align = TRUE; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_mapi_Logon_repl); + } + + offset = mapi_dissect_element_Logon_repl_OutputHandleIndex(tvb, offset, pinfo, tree, di, drep); + + offset = PIDL_dissect_uint32_val(tvb, offset, pinfo, tree, di, drep, hf_mapi_Logon_repl_ReturnValue, 0, &returnValue); + + if (returnValue == 0x0){ + // 2.2.3.1.2 RopLogon ROP Success Response Buffer + guint8 LogonFlags= 0; + + offset = mapi_dissect_enum_LogonFlags(tvb, offset, pinfo, tree, di, drep, hf_mapi_Logon_repl_LogonFlags, &LogonFlags); + + if (LogonFlags == 0x1){ + // Private + offset = mapi_dissect_element_Logon_repl_FolderIds(tvb, offset, pinfo, tree, di, drep); + offset = mapi_dissect_element_Logon_repl_ResponseFlags(tvb, offset, pinfo, tree, di, drep); + offset = mapi_dissect_element_Logon_repl_MailboxGuid(tvb, offset, pinfo, tree, di, drep); + offset = mapi_dissect_element_Logon_repl_ReplId(tvb, offset, pinfo, tree, di, drep); + offset = mapi_dissect_element_Logon_repl_ReplGuid(tvb, offset, pinfo, tree, di, drep); + offset = mapi_dissect_element_Logon_repl_LogonTime(tvb, offset, pinfo, tree, di, drep); + offset = mapi_dissect_element_Logon_repl_GwartTime(tvb, offset, pinfo, tree, di, drep); + offset = mapi_dissect_element_Logon_repl_StoreState(tvb, offset, pinfo, tree, di, drep); + } else { + // Public + offset = mapi_dissect_element_Logon_repl_FolderIds(tvb, offset, pinfo, tree, di, drep); + offset = mapi_dissect_element_Logon_repl_ReplId(tvb, offset, pinfo, tree, di, drep); + offset = mapi_dissect_element_Logon_repl_ReplGuid(tvb, offset, pinfo, tree, di, drep); + offset = mapi_dissect_element_Logon_repl_PerUserGuid(tvb, offset, pinfo, tree, di, drep); + } + } else if (returnValue == 0x00000478){ + // 2.2.1.1.2 RopLogon ROP Redirect Response Buffer + offset = mapi_dissect_enum_LogonFlags(tvb, offset, pinfo, tree, di, drep, hf_mapi_Logon_repl_LogonFlags, 0); + offset = mapi_dissect_element_Logon_repl_ServerNameSize(tvb, offset, pinfo, tree, di, drep); + offset = mapi_dissect_element_Logon_repl_ServerName(tvb, offset, pinfo, tree, di, drep); + } + + proto_item_set_len(item, offset-old_offset); + + di->no_align = oldalign; + + return offset; +} + + #define RHEF_Compressed 0x0001 + #define RHEF_XorMagic 0x0002 + #define RHEF_Last 0x0004 + +int dissect_RPC_HEADER_EXT(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info* di, guint8 *drep, int hf_index, tvbuff_t **ppUncomp_tvb) +{ + proto_tree *hTree = NULL; + proto_item *rpcItem = NULL; + guint16 flags; + guint16 compressedSize= 0, uncompressedSize= 0; + int old_offset= offset; + + ALIGN_TO_2_BYTES; + + if (parent_tree) { + rpcItem = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + hTree = proto_item_add_subtree(rpcItem, ett_mapi_RPC_HEADER_EXT); + } + + offset = mapi_dissect_element_RPC_HEADER_EXT_Version(tvb, offset, pinfo, hTree, di, drep); + + proto_item *flagItem; + static int * const mapi_RPC_HEADER_EXT_Flags_fields[] = { + &hf_mapi_RPC_HEADER_EXT_Flags_RHEF_Compressed, + &hf_mapi_RPC_HEADER_EXT_Flags_RHEF_XorMagic, + &hf_mapi_RPC_HEADER_EXT_Flags_RHEF_Last, + NULL + }; + + ALIGN_TO_2_BYTES; + + flagItem = proto_tree_add_bitmask_with_flags(hTree, tvb, offset, hf_mapi_RPC_HEADER_EXT_Flags, + ett_mapi_RPC_HEADER_EXT_Flags, mapi_RPC_HEADER_EXT_Flags_fields, DREP_ENC_INTEGER(drep), BMT_NO_FALSE); + + offset = dissect_ndr_uint16(tvb, offset, pinfo, hTree, di, drep, -1, &flags); + + if (!flags) + proto_item_append_text(flagItem, ": (No values set)"); + + if (flags & (~0x00000007)) { + flags &= (~0x00000007); + proto_item_append_text(flagItem, "Unknown bitmap value 0x%x", flags); + } + + offset = PIDL_dissect_uint16_val(tvb, offset, pinfo, hTree, di, drep, hf_mapi_RPC_HEADER_EXT_Size, 0, &compressedSize); + offset = PIDL_dissect_uint16_val(tvb, offset, pinfo, hTree, di, drep, hf_mapi_RPC_HEADER_EXT_SizeActual, 0, &uncompressedSize); + + proto_item_set_len(flagItem, 2); + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_2_BYTES; + } + + bool last = RHEF_Last == (flags & RHEF_Last); + bool compressed = RHEF_Compressed == (flags & RHEF_Compressed); + bool xored = RHEF_XorMagic == (flags & RHEF_XorMagic); + + if (!last){ + // TODO: Currently we don't support multiple buffers of RPC_HEADER_EXT. + return offset; + } + + if (compressed && xored){ + // TODO: Currently we don't support both compressed and Xored + return offset; + } + + if (compressed){ + *ppUncomp_tvb= tvb_child_uncompress_lz77(tvb, tvb, offset, compressedSize); + } else if (xored){ + *ppUncomp_tvb= mapi_deobfuscate(tvb, offset, pinfo, uncompressedSize); + } else if (!compressed && !xored) { + *ppUncomp_tvb = tvb_new_subset_length(tvb, offset, uncompressedSize); + } else { + return offset; + } + + if (!(*ppUncomp_tvb) || tvb_reported_length(*ppUncomp_tvb) != uncompressedSize) { + *ppUncomp_tvb= NULL; + return offset; + } + + offset += compressedSize; + + proto_item_set_len(rpcItem, offset-old_offset); + + return offset; +} + +int +mapi_dissect_struct_AuxInfo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset= offset; + tvbuff_t *uncomp_tvb = NULL; + + ALIGN_TO_4_BYTES; + + if(di->conformant_run){ + return offset; + } + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_mapi_AuxInfo); + } + + if (di->ptype == PDU_REQ){ + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_mapi_AuxInfo_auxInSize, NULL); + } + + offset = dissect_RPC_HEADER_EXT(tvb, offset, pinfo, tree, di, drep, di->ptype == PDU_REQ ? hf_mapi_AuxInfo_RpcHeaderExtension : hf_mapi_AuxInfoOut_RpcHeaderExtension, &uncomp_tvb); + + if (!uncomp_tvb) { + return offset; + } + + proto_item_set_len(item, offset-old_offset); + + add_new_data_source(pinfo, uncomp_tvb, "Decrypted MAPI AuxInfo"); + + { + tree = proto_tree_add_subtree(tree, uncomp_tvb, 0, tvb_reported_length(uncomp_tvb), ett_mapi_connect_request, NULL, "Decrypted MAPI AuxInfo"); + + mapi_dissect_element_AuxInfo_auxHeader(uncomp_tvb, 0, pinfo, tree, di, drep); + } + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_4_BYTES; + } + + return offset; +} + +int +mapi_dissect_RgbInOut(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info* di, guint8 *drep, int hf_index) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset= offset; + tvbuff_t *uncomp_tvb = NULL; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, di->ptype == PDU_REQ ? ett_mapi_RgbIn : ett_mapi_RgbOut); + } + + if (di->ptype == PDU_REQ){ + offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, di, drep, di->ptype == PDU_REQ ? hf_mapi_RgbInSize : hf_mapi_RgbOutSize, NULL); + } + + offset = dissect_RPC_HEADER_EXT(tvb, offset, pinfo, tree, di, drep, di->ptype == PDU_REQ ? hf_mapi_RgbIn_RpcHeaderExtension : hf_mapi_RgbOut_RpcHeaderExtension, &uncomp_tvb); + + if (!uncomp_tvb) { + return offset; + } + + proto_item_set_len(item, offset-old_offset); + + add_new_data_source(pinfo, uncomp_tvb, di->ptype == PDU_REQ ? "Decrypted MAPI ROPIn PDU" : "Decrypted MAPI ROPOut PDU"); + + { + int uncompressed_offset= 0; + guint16 total_length; + + item = proto_tree_add_item(tree, di->ptype == PDU_REQ ? hf_mapi_RgbIn_ropIn : hf_mapi_RgbOut_ropOut, uncomp_tvb, 0, tvb_reported_length(uncomp_tvb), ENC_NA); + tree = proto_item_add_subtree(item, di->ptype == PDU_REQ ? ett_mapi_RgbIn : ett_mapi_RgbOut); + + uncompressed_offset = PIDL_dissect_uint16_val(uncomp_tvb, uncompressed_offset, pinfo, tree, di, drep, di->ptype == PDU_REQ ? hf_mapi_ROPInputBuffer_ropSize : hf_mapi_ROPOutputBuffer_ropSize, 0, &total_length); + + while((guint)(uncompressed_offset) < total_length){ + if (di->ptype == PDU_REQ){ + uncompressed_offset = mapi_dissect_struct_RopInput(uncomp_tvb, uncompressed_offset,pinfo,tree,di,drep,hf_mapi_ROPInputBuffer_rop,0); + } else { + uncompressed_offset = mapi_dissect_struct_RopOutput(uncomp_tvb, uncompressed_offset,pinfo,tree,di,drep,hf_mapi_ROPOutputBuffer_rop,0); + } + } + } + + ALIGN_TO_5_BYTES + + return offset; +} + + +int +mapi_dissect_struct_RgbIn(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info* di, guint8 *drep, int hf_index, guint32 param _U_) +{ + return mapi_dissect_RgbInOut(tvb, offset, pinfo, parent_tree, di, drep, hf_index); +} + +int +dissect_EcDoRpcExt2_RgbOut(tvbuff_t *tvb _U_, int offset _U_, int length _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + if (length == 0){ + return offset; + } + return mapi_dissect_struct_RgbOut(tvb, offset, pinfo, parent_tree, di, drep, hf_mapi_mapi_EcDoRpcExt2_rgbOut, 0); +} + +static int +mapi_dissect_element_EcDoRpcExt2_rgbOut_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + return dissect_ndr_ucvarray_block(tvb, offset, pinfo, tree, di, drep, &dissect_EcDoRpcExt2_RgbOut); +} + +int +dissect_EcDoRpcExt_RgbOut(tvbuff_t *tvb _U_, int offset _U_, int length _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + if (length == 0){ + return offset; + } + return mapi_dissect_struct_RgbOut(tvb, offset, pinfo, parent_tree, di, drep, hf_mapi_mapi_EcDoRpcExt_rgbOut, 0); +} + +static int +mapi_dissect_element_EcDoRpcExt_rgbOut_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + return dissect_ndr_ucvarray_block(tvb, offset, pinfo, tree, di, drep, &dissect_EcDoRpcExt_RgbOut); +} + +int +mapi_dissect_struct_RgbOut(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + return mapi_dissect_RgbInOut(tvb, offset, pinfo, parent_tree, di, drep, hf_index); +} + +CODE END
\ No newline at end of file diff --git a/epan/dissectors/pidl/mapi/mapi.idl b/epan/dissectors/pidl/mapi/mapi.idl new file mode 100644 index 00000000..2b77f2ca --- /dev/null +++ b/epan/dissectors/pidl/mapi/mapi.idl @@ -0,0 +1,4049 @@ +#include "idl_types.h" + +import "nspi.idl"; + +/* + emsmdb interface definitions +*/ +[ uuid("a4f1db00-ca47-1067-b31f-00dd010662da"), + version(0.82), + endpoint("ncacn_np:[\\pipe\\lsass]","ncacn_np:[\\pipe\\protected_storage]","ncacn_ip_tcp:"), + pointer_default(unique), + helpstring("MAPI") +] interface mapi +{ +#include "mapicodes_enum.h" +#include "mapitags_enum.h" + +/* Property types */ +#define PT_UNSPECIFIED 0x0 +#define PT_NULL 0x1 +#define PT_I2 0x2 +#define PT_SHORT 0x2 +#define PT_LONG 0x3 +#define PT_FLOAT 0x4 +#define PT_DOUBLE 0x5 +#define PT_CURRENCY 0x6 +#define PT_APPTIME 0x7 +#define PT_ERROR 0xa +#define PT_BOOLEAN 0xb +#define PT_OBJECT 0xd +#define PT_I8 0x14 +#define PT_STRING8 0x1e +#define PT_UNICODE 0x1f +#define PT_SYSTIME 0x40 +#define PT_CLSID 0x48 +#define PT_SVREID 0xFB +#define PT_SRESTRICT 0xFD +#define PT_ACTIONS 0xFE +#define PT_BINARY 0x102 + + typedef struct datablob { + uint8 *data; + uint8 length; + } DATA_BLOB; + + /******************/ + /* Function: 0x00 */ + WERROR mapi_EcDoConnect( + [out] policy_handle *hBinding, + [in,string,charset(DOS)] uint8 szUserDN[], + [in] uint32 ulFlags, + [in] uint32 ulConMod, + [in] uint32 cbLimit, + [in] uint32 ulCpid, + [in] uint32 ulLcidString, + [in] uint32 ulLcidSort, + [in] uint32 ulIcxrLink, + [in] uint16 usFCanConvertCodePages, + [out] uint32 *pcmsPollsMax, + [out] uint32 *pcRetry, + [out] uint32 *pcmsRetryDelay, + [out] uint32 *picxr, + [out,unique,ref,string,charset(DOS)] uint8 **szDNPrefix, + [out,unique,ref,string,charset(DOS)] uint8 **szDisplayName, + [in,string] uint8 rgwClientVersion[6], + [out,string] uint8 rgwServerVersion[6], + [out,string] uint8 rgwBestVersion[6], + [in,out] uint32 *pullTimeStamp + ); + + /******************/ + /* Function: 0x01 */ + WERROR mapi_EcDoDisconnect( + [in, out, ref] policy_handle *pcxh + ); + + /******************/ + /* Function: 0x02 */ + typedef [public, enum8bit, flag(NDR_PAHEX)] enum + { + MAPI_STORE = 0x1, + MAPI_ADDRBOOK = 0x2, + MAPI_FOLDER = 0x3, + MAPI_ABCONT = 0x4, + MAPI_MESSAGE = 0x5, + MAPI_MAILUSER = 0x6, /* Individual Recipient */ + MAPI_ATTACH = 0x7, + MAPI_DISTLIST = 0x8, + MAPI_PROFSECT = 0x9, + MAPI_STATUS = 0xA, + MAPI_SESSION = 0xB, + MAPI_FORMINFO = 0xC + } MAPI_OBJTYPE; + + typedef [public, v1_enum, flag(NDR_PAHEX)] enum + { + RightsNone = 0x00000000, + RightsReadItems = 0x00000001, + RightsCreateItems = 0x00000002, + RightsEditOwn = 0x00000008, + RightsDeleteOwn = 0x00000010, + RightsEditAll = 0x00000020, + RightsDeleteAll = 0x00000040, + RightsCreateSubfolders = 0x00000080, + RightsFolderOwner = 0x00000100, + RightsFolderContact = 0x00000200, + RoleNone = 0x00000400, + RoleReviewer = 0x00000401, + RoleContributor = 0x00000402, + RoleNoneditingAuthor = 0x00000413, + RoleAuthor = 0x0000041B, + RoleEditor = 0x0000047B, + RolePublishAuthor = 0x0000049B, + RolePublishEditor = 0x000004FB, + RightsAll = 0x000005FB, + RoleOwner = 0x000007FB + } ACLRIGHTS; + + /* + EcDoRpc opnums + */ + typedef [public, enum8bit, flag(NDR_PAHEX)] enum + { + RopNone = 0x00, + RopRelease = 0x01, + RopOpenFolder = 0x02, + RopOpenMessage = 0x03, + RopGetHierarchyTable = 0x04, + RopGetContentsTable = 0x05, + RopCreateMessage = 0x06, + RopGetPropertiesSpecific = 0x07, + RopGetPropertiesAll = 0x08, + RopGetPropertiesList = 0x09, + RopSetProperties = 0x0a, + RopDeleteProperties = 0x0b, + RopSaveChangesMessage = 0x0c, + RopRemoveAllRecipients = 0x0d, + RopModifyRecipients = 0x0e, + RopReadRecipients = 0x0f, + RopReloadCachedInformation = 0x10, + RopSetMessageReadFlag = 0x11, + RopSetColumns = 0x12, + RopSortTable = 0x13, + RopRestrict = 0x14, + RopQueryRows = 0x15, + RopGetStatus = 0x16, + RopQueryPosition = 0x17, + RopSeekRow = 0x18, + RopSeekRowBookmark = 0x19, + RopSeekRowFractional = 0x1a, + RopCreateBookmark = 0x1b, + RopCreateFolder = 0x1c, + RopDeleteFolder = 0x1d, + RopDeleteMessages = 0x1e, + RopGetMessageStatus = 0x1f, + RopSetMessageStatus = 0x20, + RopGetAttachmentTable = 0x21, + RopOpenAttachment = 0x22, + RopCreateAttachment = 0x23, + RopDeleteAttachment = 0x24, + RopSaveChangesAttachment = 0x25, + RopSetReceiveFolder = 0x26, + RopGetReceiveFolder = 0x27, + RopSpoolerRules = 0x28, + RopRegisterNotification = 0x29, + RopNotify = 0x2a, + RopOpenStream = 0x2b, + RopReadStream = 0x2c, + RopWriteStream = 0x2d, + RopSeekStream = 0x2e, + RopSetStreamSize = 0x2f, + RopSetSearchCriteria = 0x30, + RopGetSearchCriteria = 0x31, + RopSubmitMessage = 0x32, + RopMoveCopyMessages = 0x33, + RopAbortSubmit = 0x34, + RopMoveFolder = 0x35, + RopCopyFolder = 0x36, + RopQueryColumnsAll = 0x37, + RopAbort = 0x38, + RopCopyTo = 0x39, + RopCopyToStream = 0x3a, + RopCloneStream = 0x3b, + RopRegisterTableNotification = 0x3c, + RopDeregisterTableNotification = 0x3d, + RopGetPermissionsTable = 0x3e, /* RopGetACLTable */ + RopGetRulesTable = 0x3f, + RopModifyPermissions = 0x40, + RopModifyRules = 0x41, + RopGetOwningServers = 0x42, + RopLongTermIdFromId = 0x43, + RopIdFromLongTermId = 0x44, + RopPublicFolderIsGhosted = 0x45, + RopOpenEmbeddedMessage = 0x46, + RopSetSpooler = 0x47, + RopSpoolerLockMessage = 0x48, + RopGetAddressTypes = 0x49, + RopTransportSend = 0x4a, + RopFastTransferSourceCopyMessages = 0x4b, /* NEW */ + RopFastTransferSourceCopyFolder = 0x4c, /* NEW */ + RopFastTransferSourceCopyTo = 0x4d, /* NEW */ + RopFastTransferSourceGetBuffer = 0x4e, + RopFindRow = 0x4f, + RopProgress = 0x50, + RopTransportNewMail = 0x51, + RopGetValidAttachments = 0x52, + RopFastTransferDestinationConfigure = 0x53, /* NEW */ + RopFastTransferDestinationPutBuffer = 0x54, /* NEW */ + RopGetNamesFromPropertyIds = 0x55, + RopGetPropertyIdsFromNames = 0x56, + RopUpdateDeferredActionMessages = 0x57, + RopEmptyFolder = 0x58, + RopExpandRow = 0x59, + RopCollapseRow = 0x5a, + RopLockRegionStream = 0x5b, + RopUnlockRegionStream = 0x5c, + RopCommitStream = 0x5d, + RopGetStreamSize = 0x5e, + RopQueryNamedProperties = 0x5f, + RopGetPerUserLongTermIds = 0x60, + RopGetPerUserGuid = 0x61, + RopFlushPerUser = 0x62, + RopReadPerUserInformation = 0x63, + RopWritePerUserInformation = 0x64, /* NEW */ + RopCacheCcnRead = 0x65, + RopSetReadFlags = 0x66, + RopCopyProperties = 0x67, + RopGetReceiveFolderTable = 0x68, + RopFastTransferSourceCopyProperties = 0x69, /* NEW */ + RopFastTransferDestinationCopyProperties = 0x6a, /* NEW */ + RopGetCollapseState = 0x6b, + RopSetCollapseState = 0x6c, + RopGetTransportFolder = 0x6d, + RopPending = 0x6e, + RopOptionsData = 0x6f, + RopSynchronizationConfigure = 0x70, + RopIncrState = 0x71, + RopSynchronizationImportMessageChange = 0x72, + RopSynchronizationImportHierarchyChange = 0x73, + RopSynchronizationImportDeletes = 0x74, + RopSynchronizationUploadStateStreamBegin = 0x75, + RopSynchronizationUploadStateStreamContinue = 0x76, + RopSynchronizationUploadStateStreamEnd = 0x77, + RopSynchronizationImportMessageMove = 0x78, + RopSetPropertiesNoReplicate = 0x79, + RopDeletePropertiesNoReplicate = 0x7a, + RopGetStoreState = 0x7b, + RopGetRights = 0x7c, + RopGetAllPerUserLtids = 0x7d, + RopSynchronizationOpenCollector = 0x7e, + RopGetLocalReplicaIds = 0x7f, + RopSynchronizationImportReadStateChanges = 0x80, + RopResetTable = 0x81, + RopSynchronizationGetTransferState = 0x82, + RopOpenAdvisor = 0x83, + RopRegICSNotifs = 0x84, + RopOpenCStream = 0x85, + RopTellVersion = 0x86, /* NEW */ + RopOpenPublicFolderByName = 0x87, + RopSetSyncNotificationGuid = 0x88, + RopFreeBookmark = 0x89, + RopWriteAndCommitStream = 0x90, + RopHardDeleteMessages = 0x91, + RopHardDeleteMessagesAndSubfolders = 0x92, + RopSetLocalReplicaMidsetDeleted = 0x93, /* NEW */ + RopTransportDeliverMessage = 0x94, + RopTransportDoneWithMessage = 0x95, + RopIdFromLegacyDN = 0x96, + RopSetAuthenticatedContext = 0x97, + RopCopyToEx = 0x98, + RopImportMsgChangePartial = 0x99, + RopSetMessageFlags = 0x9a, + RopMoveCopyMessagesEx = 0x9b, + RopFXSrcGetBufferEx = 0x9c, + RopFXDstPutBufferEx = 0x9d, + RopTransportDeliverMessage2 = 0x9e, + RopCreateMessageEx = 0x9f, + RopMoveCopyMessagesEID = 0xA0, + RopTransportDupDlvCheck = 0xA1, + RopPrereadMessages = 0xA2, + RopWriteStreamExtended = 0xA3, + RopGetContentsTableExtended = 0xA4, + RopStartScope = 0xA5, + RopEndScope = 0xA6, + RopEchoString = 0xC8, + RopEchoInt = 0xC9, + RopEchoBinary = 0xCA, + RopBackoff = 0xF9, /* NEW */ + RopExtendedError = 0xFA, /* NEW */ + RopBookmarkReturned = 0xFB, + RopFidReturned = 0xFC, + RopHsotReturned = 0xFd, + RopLogon = 0xFE, + RopBufferTooSmall = 0xFF + } ROP_OPNUM; + + typedef [public,noprint,flag(NDR_NOALIGN)] struct { + uint16 cb; + [flag(NDR_BUFFERS), size_is(cb)] uint8 lpb[]; + } SBinary_short; + + typedef [public] struct { + uint32 cValues; + [size_is(cValues)] uint32 lpl[]; + } mapi_MV_LONG_STRUCT; + + typedef [public] struct { + astring lppszA; + } mapi_LPSTR; + + typedef [public] struct { + uint32 cValues; + [size_is(cValues)] mapi_LPSTR strings[]; + } mapi_SLPSTRArray; + + typedef struct { + [flag(STR_NULLTERM)] string lppszW; + } mapi_LPWSTR; + + typedef struct { + uint32 cValues; + [size_is(cValues)] mapi_LPWSTR strings[]; + } mapi_SPLSTRArrayW; + + typedef [public] struct { + uint32 cValues; + [size_is(cValues)] SBinary_short bin[]; + } mapi_SBinaryArray; + + typedef struct { + uint32 cValues; + [size_is(cValues)] GUID lpguid[]; + } mapi_SGuidArray; + + /******* part of the no-pointer deep recursion hack *******/ + typedef [nopull,nopush,noprint,flag(NDR_NOALIGN)] struct { + uint8 wrap[0x8000]; + } mapi_SRestriction_wrap; + + typedef [nopush,nopull,noprint,flag(NDR_NOALIGN)] struct { + uint8 wrap[0x8000]; + } mapi_SPropValue_wrap; + + typedef [nopush,nopull,noprint,flag(NDR_NOALIGN)] struct { + uint8 wrap[0x8000]; + } mapi_SPropValue_array_wrap; + /**********************************************************/ + + typedef [enum8bit] enum { + ActionType_OP_MOVE = 0x1, + ActionType_OP_COPY = 0x2, + ActionType_OP_REPLY = 0x3, + ActionType_OP_OOF_REPLY = 0x4, + ActionType_OP_DEFER_ACTION = 0x5, + ActionType_OP_BOUNCE = 0x6, + ActionType_OP_FORWARD = 0x7, + ActionType_OP_DELEGATE = 0x8, + ActionType_OP_TAG = 0x9, + ActionType_OP_DELETE = 0xA, + ActionType_OP_MARK_AS_READ = 0xB + } ActionType; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 FolderInThisStore; + SBinary_short StoreEID; + SBinary_short FolderEID; + } MoveCopy_Action; + + typedef [flag(NDR_NOALIGN)] struct { + hyper ReplyTemplateFID; + hyper ReplyTemplateMID; + GUID ReplyTemplateGUID; + } ReplyOOF_Action; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 Reserved; + mapi_SPropValue_array_wrap PropertyValue; + } RecipientBlock; + + typedef [flag(NDR_NOALIGN)] enum { + BOUNCE_MESSAGE_TOO_LARGE = 0x0000000d, + BOUNCE_MESSAGE_NOT_DISPLAYED = 0x0000001f, + BOUNCE_MESSAGE_DENIED = 0x00000026 + } BounceCode; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 RecipientCount; + [size_is(RecipientCount)] RecipientBlock RecipientBlock[]; + } ForwardDelegate_Action; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(ActionType_OP_MOVE)] MoveCopy_Action MoveAction; + [case(ActionType_OP_COPY)] MoveCopy_Action CopyAction; + [case(ActionType_OP_REPLY)] ReplyOOF_Action ReplyAction; + [case(ActionType_OP_OOF_REPLY)] ReplyOOF_Action ReplyOOFAction; + [case(ActionType_OP_DEFER_ACTION)][flag(NDR_REMAINING)] DATA_BLOB DeferAction; + [case(ActionType_OP_BOUNCE)] BounceCode BounceCode; + [case(ActionType_OP_TAG)] mapi_SPropValue_wrap PropValue; + [case(ActionType_OP_FORWARD)] ForwardDelegate_Action ForwardAction; + [case(ActionType_OP_DELEGATE)] ForwardDelegate_Action DelegateAction; + [case(ActionType_OP_DELETE)]; + [case(ActionType_OP_MARK_AS_READ)]; + } ActionData; + + typedef [flag(NDR_NOALIGN)] struct { + ActionType ActionType; + uint32 ActionFlavor; + uint32 ActionFlags; + [switch_is(ActionType)] ActionData ActionDataBuffer; + } ActionBlockData; + + typedef [flag(NDR_NOALIGN)] struct { + [flag(NDR_REMAINING)] [represent_as(uint16)] ActionBlockData ActionBlockData; + } ActionBlock; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 count; + [size_is(count)] ActionBlock ActionBlock[]; + } RuleAction; + + typedef struct { + [range(0,100000)] uint32 cValues; + [size_is(cValues)] uint16 *lpi; + } ShortArray_r; + + typedef struct { + [range(0,100000)] uint32 cValues; + [size_is(cValues)] uint32 *lpl; + } LongArray_r; + + typedef struct { + [range(0,100000)] uint32 cValues; + [size_is(cValues)] Binary_r *lpbin; + } BinaryArray_r; + + typedef struct { + [range(0,100000)] uint32 cValues; + [size_is(cValues)] FILETIME *lpft; + } DateTimeArray_r; + + typedef [public] struct { + [range(0,2097152)] uint32 cb; + [size_is(cb)] uint8 *lpb; + } Binary_r; + + typedef [switch_type(uint32)] union { + [case(PT_I2)] uint16 i; + [case(PT_LONG)] uint32 l; + [case(PT_DOUBLE)] dlong dbl; + [case(PT_BOOLEAN)] uint8 b; + [case(PT_I8)] dlong d; + [case(PT_STRING8)][unique][string,charset(DOS)] uint8 *lpszA; + [case(PT_BINARY)] Binary_r bin; + [case(PT_SVREID)] SBinary_short svreid; + [case(PT_UNICODE)][string,charset(UTF16)] uint16 *lpszW; + [case(PT_CLSID)] GUID *lpguid; + [case(PT_SRESTRICT)] mapi_SRestriction_wrap Restrictions; + [case(PT_ACTIONS)] RuleAction RuleAction; + [case(PT_SYSTIME)] FILETIME ft; + [case(PT_ERROR)] MAPISTATUS err; + [case(PT_MV_I2)] ShortArray_r MVi; + [case(PT_MV_LONG)] LongArray_r MVl; + [case(PT_MV_STRING8)] mapi_SLPSTRArray MVszA; + [case(PT_MV_BINARY)] mapi_SBinaryArray MVbin; + [case(PT_MV_CLSID)] mapi_SGuidArray MVguid; + [case(PT_MV_UNICODE)] mapi_SPLSTRArrayW MVszW; + [case(PT_MV_SYSTIME)] DateTimeArray_r MVft; + [case(PT_NULL)] uint32 null; + [case(PT_OBJECT)] uint32 object; + } mapi_SPropValue_CTR; + + typedef [public,flag(NDR_NOALIGN)] struct { + MAPITAGS ulPropTag; + [switch_is(ulPropTag & 0xFFFF)] mapi_SPropValue_CTR value; + } mapi_SPropValue; + + typedef [public,flag(NDR_NOALIGN)] struct { + uint16 cValues; + [flag(NDR_REMAINING), size_is(cValues)]mapi_SPropValue lpProps[]; + } mapi_SPropValue_array; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 cValues; + [size_is(cValues)] MAPITAGS aulPropTag[]; + } mapi_SPropTagArray; + + typedef [enum8bit, flag(NDR_PAHEX)] enum { + ROW_ADD = 0x1, + ROW_MODIFY = 0x2, + ROW_REMOVE = 0x4 + } ulRowFlags; + + /**************************/ + /* ROP: RopRelease(0x1) */ + typedef [nopush,nopull,flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } Release_req; + + typedef [nopush,nopull,flag(NDR_NOALIGN)] struct { + } Release_repl; + + /**************************/ + /* ROP: RopOpenFolder(0x2) */ + typedef [enum8bit] enum { + OpenModeFlags_Folder = 0x0, + OpenModeFlags_SoftDeleted = 0x4 + } OpenFolder_OpenModeFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + hyper FolderId; + OpenFolder_OpenModeFlags OpenModeFlags; + } OpenFolder_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 ServerCount; + uint16 CheapServerCount; + [size_is(ServerCount)] astring Servers[]; + } OpenFolder_Replicas; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)]; + [case(0x1)] OpenFolder_Replicas Replicas; + } IsGhosted; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 HasRules; + boolean8 IsGhosted; + [switch_is(IsGhosted)] IsGhosted Ghost; + } OpenFolder_Success; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)] OpenFolder_Success Success; + [default]; + } OpenFolder_repl_status; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 OutputHandleIndex; + uint32 ReturnValue; + [switch_is(ReturnValue)] OpenFolder_repl_status repl; + } OpenFolder_repl; + + /**************************/ + /* ROP: RopOpenMessage(0x3) */ + typedef [enum8bit] enum { + StringType_NONE = 0x0, + StringType_EMPTY = 0x1, + StringType_STRING8 = 0x2, + StringType_UNICODE_REDUCED = 0x3, + StringType_UNICODE = 0x4 + } StringType; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)]; + [case(0x1)]; + [case(0x2)] astring lpszA; + [case(0x3)] astring lpszW_reduced; + [case(0x4)] [flag(STR_NULLTERM)] string lpszW; + } String; + + typedef [flag(NDR_NOALIGN)] struct { + StringType StringType; + [switch_is(StringType)] String String; + } TypedString; + + typedef [enum8bit] enum { + ReadOnly = 0x0, + ReadWrite = 0x1, + Create = 0x3, + OpenSoftDelete = 0x4 + } OpenMessage_OpenModeFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + uint16 CodePageId; + hyper FolderId; + OpenMessage_OpenModeFlags OpenModeFlags; + hyper MessageId; + } OpenMessage_req; + + typedef [enum16bit, flag(NDR_PAHEX)] enum { + CP_USASCII = 0x04E4, + CP_UNICODE = 0x04B0, + CP_JAUTODETECT = 0xC6F4, + CP_KAUTODETECT = 0xC705, + CP_ISO2022JPESC = 0xC42D, + CP_ISO2022JPSIO = 0xC42E + } CODEPAGEID; + + typedef [enum8bit, flag(NDR_PAHEX)] enum { + MAPI_ORIG = 0x0, + MAPI_TO = 0x1, + MAPI_CC = 0x2, + MAPI_BCC = 0x3 + } ulRecipClass; + + typedef [enum8bit, flag(NDR_PAHEX)] enum { + SINGLE_RECIPIENT = 0x0, + DISTRIBUTION_LIST = 0x1 + } addr_type; + + typedef [flag(NDR_NOALIGN)]struct { + uint8 organization_length; + addr_type addr_type; + astring username; + } RecipExchange; + + typedef [flag(NDR_NOALIGN)] struct { + } RecipSMTP; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x1)] RecipExchange EXCHANGE; + [case(0x3)] RecipSMTP SMTP; + [default]; + } recipient_type; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)]; + [case(0x400)] astring lpszA; + [case(0x600)][flag(STR_NULLTERM)] string lpszW; + [default]; + } recipient_SimpleDisplayName; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)]; + [case(0x60)]; + [case(0x260)]; + [case(0x20)] astring lpszA; + [case(0x220)][flag(STR_NULLTERM)] string lpszW; + [default]; + } recipient_TransmittableDisplayName; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)]; + [case(0x10)] astring lpszA; + [case(0x210)][flag(STR_NULLTERM)] string lpszW; + [default]; + } recipient_DisplayName; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)]; + [case(0x8)] astring lpszA; + [case(0x208)][flag(STR_NULLTERM)] string lpszW; + [default]; + } recipient_EmailAddress; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 RecipientFlags; + [switch_is(RecipientFlags & 0x7)] recipient_type type; + [switch_is(RecipientFlags & 0x208)] recipient_EmailAddress EmailAddress; + [switch_is(RecipientFlags & 0x210)] recipient_DisplayName DisplayName; + [switch_is(RecipientFlags & 0x600)] recipient_SimpleDisplayName SimpleDisplayName; + [switch_is(RecipientFlags & 0x260)] recipient_TransmittableDisplayName TransmittableDisplayName; + uint16 prop_count; + uint8 layout; + [flag(NDR_REMAINING)] DATA_BLOB prop_values; + } RecipientRow; + + typedef [flag(NDR_NOALIGN)] struct { + ulRecipClass RecipClass; + CODEPAGEID codepage; + uint16 Reserved; + [represent_as(uint16)] RecipientRow RecipientRow; + } OpenMessage_recipients; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 HasNamedProperties; + TypedString SubjectPrefix; + TypedString NormalizedSubject; + uint16 RecipientCount; + uint16 ColumnCount; + mapi_SPropTagArray RecipientColumns; + uint8 RowCount; + [size_is(RowCount)] OpenMessage_recipients recipients[]; + } OpenMessage_Success; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)] OpenMessage_Success Success; + [default]; + } OpenMessage_repl_status; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 OutputHandleIndex; + uint32 ReturnValue; + [switch_is(ReturnValue)] OpenMessage_repl_status repl; + } OpenMessage_repl; + + /**************************/ + /* ROP: RopGetHierarchyTable(0x4) */ + typedef [bitmap8bit] bitmap { + TableFlags_Depth = 0x4, + TableFlags_DeferredErrors = 0x8, + TableFlags_NoNotifications = 0x10, + TableFlags_SoftDeletes = 0x20, + TableFlags_UseUnicode = 0x40, + TableFlags_SuppressNotifications = 0x80 + } TableFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + TableFlags TableFlags; + } GetHierarchyTable_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint32 RowCount; + } GetHierarchyTable_repl_success; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)] GetHierarchyTable_repl_success Success; + [default]; + } GetHierarchyTable_repl_status; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 OutputHandleIndex; + uint32 ReturnValue; + [switch_is(ReturnValue)] GetHierarchyTable_repl_status repl; + } GetHierarchyTable_repl; + + /**************************/ + /* ROP: RopGetContentsTable(0x5) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + TableFlags TableFlags; + } GetContentsTable_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint32 RowCount; + } GetContentsTable_repl_success; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)] GetContentsTable_repl_success Success; + [default]; + } GetContentsTable_repl_status; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 OutputHandleIndex; + uint32 ReturnValue; + [switch_is(ReturnValue)] GetContentsTable_repl_status repl; + } GetContentsTable_repl; + + /**************************/ + /* ROP: RopCreateMessage(0x6) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + uint16 CodePageId; + hyper FolderId; + boolean8 AssociatedFlag; + } CreateMessage_req; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)]; + [case(0x1)] hyper MessageId; + } CreateMessage_MessageId; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 HasMessageId; + [switch_is(HasMessageId)] CreateMessage_MessageId MessageId; + } CreateMessage_repl_success; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)] CreateMessage_repl_success Success; + [default]; + } CreateMessage_repl_status; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 OutputHandleIndex; + uint32 ReturnValue; + [switch_is(ReturnValue)] CreateMessage_repl_status repl; + } CreateMessage_repl; + + /*************************/ + /* ROP: RopGetPropertiesSpecific(0x7) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint16 PropertySizeLimit; + uint16 WantUnicode; + uint16 prop_count; + [size_is(prop_count)] MAPITAGS properties[]; + } GetProps_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 layout; + [flag(NDR_REMAINING)] DATA_BLOB prop_data; + } GetProps_repl_success; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)] GetProps_repl_success Success; + [default]; + } GetProps_repl_status; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 InputHandleIndex; + uint32 ReturnValue; + [switch_is(ReturnValue)] GetProps_repl_status repl; + } GetProps_repl; + + /*************************/ + /* ROP: RopGetPropertiesAll(0x8) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint16 PropertySizeLimit; + uint16 WantUnicode; + } GetPropsAll_req; + + typedef [flag(NDR_NOALIGN)] struct { + mapi_SPropValue_array properties; + } GetPropsAll_repl_success; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)] GetPropsAll_repl_success Success; + [default]; + } GetPropsAll_repl_status; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 InputHandleIndex; + uint32 ReturnValue; + [switch_is(ReturnValue)] GetPropsAll_repl_status repl; + } GetPropsAll_repl; + + /*************************/ + /* ROP: RopGetPropertiesList(0x9) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } GetPropList_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 count; + [size_is(count)] MAPITAGS tags[]; + } GetPropList_repl; + + /*************************/ + /* ROP: RopSetProperties(0xa) */ + typedef [flag(NDR_NOALIGN)] struct { + uint32 index; /* index into array of property tags */ + MAPITAGS property_tag; /* property for which there was an error */ + MAPISTATUS error_code; /* the error that occurred for this property */ + } PropertyProblem; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + [represent_as(uint16)] mapi_SPropValue_array values; + } SetProps_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 PropertyProblemCount; + [size_is(PropertyProblemCount)] PropertyProblem PropertyProblem[]; + } SetProps_repl; + + /*************************/ + /* ROP: RopDeleteProperties(0xb) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint16 PropertyTagCount; + [size_is(PropertyTagCount)] MAPITAGS tags[]; + } DeleteProps_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 PropertyProblemCount; + [size_is(PropertyProblemCount)] PropertyProblem PropertyProblem[]; + } DeleteProps_repl; + + /*************************/ + /* ROP: RopSaveChangesMessage(0xc) */ + typedef [enum8bit] enum { + KeepOpenReadOnly = 0x9, + KeepOpenReadWrite = 0xA, + ForceSave = 0xC + } SaveFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 ResponseHandleIndex; + uint8 InputHandleIndex; + uint8 SaveFlags; + } SaveChangesMessage_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 handle_idx; + hyper MessageId; + } SaveChangesMessage_repl; + + /*************************/ + /* ROP: RopRemoveAllRecipients(0xd) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint32 ulReserved; + } RemoveAllRecipients_req; + + typedef [flag(NDR_NOALIGN)] struct { + + } RemoveAllRecipients_repl; + + /*************************/ + /* ROP: RopModifyRecipients(0xe) */ + + /* + * MODRECIP_NULL and INVALID are not part of the msdn flags + * but are added for printing support + */ + typedef [enum8bit,flag(NDR_PAHEX)] enum { + MODRECIP_NULL = 0x0, + MODRECIP_INVALID = 0x1, + MODRECIP_ADD = 0x2, + MODRECIP_MODIFY = 0x4, + MODRECIP_REMOVE = 0x8 + } modrecip; + + typedef [flag(NDR_NOALIGN)]struct { + uint32 idx; + ulRecipClass RecipClass; + [represent_as(uint16),flag(NDR_REMAINING)] RecipientRow RecipientRow; + } ModifyRecipientRow; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint16 prop_count; + [size_is(prop_count)] MAPITAGS properties[]; + uint16 cValues; + [size_is(cValues)] ModifyRecipientRow RecipientRow[]; + } ModifyRecipients_req; + + typedef [flag(NDR_NOALIGN)] struct { + + } ModifyRecipients_repl; + + /*************************/ + /* ROP: RopReadRecipients(0xf) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint32 RowId; + uint16 ulReserved; + } ReadRecipients_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint32 RowId; + ulRecipClass RecipientType; + uint16 CodePageId; + uint16 ulReserved; + [represent_as(uint16)] RecipientRow RecipientRow; + } ReadRecipientRow; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 RowCount; + [size_is(RowCount)] ReadRecipientRow RecipientRows[]; + } ReadRecipients_repl; + + /*************************/ + /* ROP: RopReloadCachedInformation(0x10) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + ulRecipClass RecipientType; + uint16 CodePageId; + uint16 Reserved; + [represent_as(uint16),flag(NDR_REMAINING)]RecipientRow RecipientRow; + } OpenRecipientRow; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 Reserved; + } ReloadCachedInformation_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 HasNamedProperties; + TypedString SubjectPrefix; + TypedString NormalizedSubject; + uint16 RecipientCount; + mapi_SPropTagArray RecipientColumns; + uint8 RowCount; + [size_is(RowCount)] OpenRecipientRow RecipientRows[]; + } ReloadCachedInformation_repl; + + /*************************/ + /* ROP: RopSetMessageReadFlag(0x11) */ + typedef [bitmap8bit] bitmap { + SUPPRESS_RECEIPT = 0x01, + CLEAR_READ_FLAG = 0x04, + MAPI_DEFERRED_ERRORS = 0x08, + GENERATE_RECEIPT_ONLY = 0x10, + CLEAR_RN_PENDING = 0x20, + CLEAR_NRN_PENDING = 0x40 + } MSGFLAG_READ; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 ResponseHandleIndex; + uint8 InputHandleIndex; + MSGFLAG_READ ReadFlags; + [flag(NDR_REMAINING)] DATA_BLOB clientdata; + } SetMessageReadFlag_req; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)]; + [case(0x1)] uint8 LogonId; + } SetMessageReadFlag_LogonId; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)]; + [case(0x1)] uint8 ClientData[24]; + } SetMessageReadFlag_ClientData; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 ReadStatusChanged; + [switch_is(ReadStatusChanged)] SetMessageReadFlag_LogonId LogonId; + [switch_is(ReadStatusChanged)] SetMessageReadFlag_ClientData ClientData; + } SetMessageReadFlag_repl; + + /*************************/ + /* ROP: RopSetColumns(0x12) */ + typedef [enum8bit] enum { + SetColumns_TBL_SYNC = 0x0, + SetColumns_TBL_ASYNC = 0x1 + } SetColumnsFlags; + + typedef [enum8bit] enum { + TBLSTAT_COMPLETE = 0x0, + TBLSTAT_SORTING = 0x9, + TBLSTAT_SORT_ERROR = 0xA, + TBLSTAT_SETTING_COLS = 0xB, + TBLSTAT_SETCOL_ERROR = 0xD, + TBLSTAT_RESTRICTING = 0xE, + TBLSTAT_RESTRICT_ERROR = 0xF + } TableStatus; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + SetColumnsFlags SetColumnsFlags; + uint16 prop_count; + [size_is(prop_count)] MAPITAGS properties[]; + } SetColumns_req; + + typedef [flag(NDR_NOALIGN)] struct { + TableStatus TableStatus; + } SetColumns_repl; + + /**************************/ + /* ROP: RopSortTable(0x13) */ + typedef [enum8bit, flag(NDR_PAHEX)] enum { + TBL_ASYNC = 0x1, + TBL_BATCH = 0x2 + } TBL_FLAGS; + + typedef [enum8bit, flag(NDR_PAHEX)] enum { + TABLE_SORT_ASCEND = 0x0, + TABLE_SORT_COMBINE = 0x1, + TABLE_SORT_DESCEND = 0x2 + } TABLE_SORT; + + typedef [public, flag(NDR_NOALIGN)] struct _SSortOrder{ + MAPITAGS ulPropTag; + TABLE_SORT ulOrder; + } SSortOrder; + + typedef [public, flag(NDR_NOALIGN)] struct _SSortOrderSet { + uint16 cSorts; + uint16 cCategories; + uint16 cExpanded; + [size_is(cSorts)] SSortOrder aSort[]; + } SSortOrderSet; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 SortTableFlags; + SSortOrderSet lpSortCriteria; + } SortTable_req; + + typedef [flag(NDR_NOALIGN)] struct { + TableStatus TableStatus; + } SortTable_repl; + + /**************************/ + /* ROP: RopRestrict(0x14) */ + typedef [flag(NDR_NOALIGN)] struct { + uint16 cRes; + [size_is(cRes)] SRestriction_and res[]; + } mapi_SAndRestriction; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 cRes; + [size_is(cRes)] SRestriction_or res[]; + } mapi_SOrRestriction; + + typedef [flag(NDR_NOALIGN)] struct { + mapi_SRestriction_wrap res; + } mapi_SNotRestriction; + + typedef [noprint, bitmap32bit] bitmap { + FL_FULLSTRING = 0x00000, + FL_SUBSTRING = 0x00001, + FL_PREFIX = 0x00002, + FL_IGNORECASE = 0x10000, + FL_IGNORENONSPACE = 0x20000, + FL_LOOSE = 0x40000 + } fuzzyLevel; + + typedef [flag(NDR_NOALIGN)] struct { + fuzzyLevel fuzzy; + MAPITAGS ulPropTag; + mapi_SPropValue lpProp; + } mapi_SContentRestriction; + + typedef [enum8bit, flag(NDR_PAHEX)] enum { + BMR_EQZ = 0x0, + BMR_NEZ = 0x1 + } relMBR; + + typedef [flag(NDR_NOALIGN)] struct { + relMBR relMBR; + MAPITAGS ulPropTag; + uint32 ulMask; + } mapi_SBitmaskRestriction; + + typedef [enum8bit, flag(NDR_PAHEX)] enum { + RELOP_LT = 0x0, /* < */ + RELOP_LE = 0x1, /* <= */ + RELOP_GT = 0x2, /* > */ + RELOP_GE = 0x3, /* >= */ + RELOP_EQ = 0x4, /* == */ + RELOP_NE = 0x5, /* != */ + RELOP_RE = 0x6 /* LIKE (Regular expression) */ + } CompareRelop; + + typedef [flag(NDR_NOALIGN)] struct { + CompareRelop relop; + MAPITAGS ulPropTag; + uint32 size; + } mapi_SSizeRestriction; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 relop; + MAPITAGS ulPropTag; + mapi_SPropValue lpProp; + } mapi_SPropertyRestriction; + + typedef [flag(NDR_NOALIGN)] struct { + CompareRelop relop; + MAPITAGS ulPropTag1; + MAPITAGS ulPropTag2; + } mapi_SCompareProps; + + typedef [flag(NDR_NOALIGN)] struct { + MAPITAGS ulPropTag; + } mapi_SExistRestriction; + + typedef [flag(NDR_NOALIGN)] struct { + MAPITAGS ulSubObject; + [size_is(ulSubObject - ulSubObject + 1)] SRestriction_sub res[]; /* nasty hack - generates fake pointer */ + } mapi_SSubRestriction; + + typedef [nopush,nopull,noprint,nodiscriminant] union { + [case(0x0)]; + [case(0x1)] SRestriction_comment *res; + } RestrictionVariable; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 TaggedValuesCount; + [size_is(TaggedValuesCount)] mapi_SPropValue TaggedValues[]; + boolean8 RestrictionPresent; + [switch_is(RestrictionPresent)] RestrictionVariable Restriction; + } mapi_SCommentRestriction; + + typedef [public,nodiscriminant] union { + [case(RES_AND)] mapi_SAndRestriction resAnd; + [case(RES_OR)] mapi_SOrRestriction resOr; + [case(RES_NOT)] mapi_SNotRestriction resNot; + [case(RES_CONTENT)] mapi_SContentRestriction resContent; + [case(RES_PROPERTY)] mapi_SPropertyRestriction resProperty; + [case(RES_COMPAREPROPS)] mapi_SCompareProps resCompareProps; + [case(RES_BITMASK)] mapi_SBitmaskRestriction resBitmask; + [case(RES_SIZE)] mapi_SSizeRestriction resSize; + [case(RES_EXIST)] mapi_SExistRestriction resExist; + [case(RES_SUBRESTRICTION)] mapi_SSubRestriction resSub; + [case(RES_COMMENT)] mapi_SCommentRestriction resComment; + [default]; + } mapi_SRestriction_CTR; + + typedef [public,flag(NDR_NOALIGN)] struct { + uint8 rt; + [switch_is(rt)] mapi_SRestriction_CTR res; + } mapi_SRestriction; + + typedef [public,flag(NDR_NOALIGN)] struct _mapi_SRestriction_and { + uint8 rt; + [switch_is(rt)] mapi_SRestriction_CTR res; + } SRestriction_and; + + typedef [public,flag(NDR_NOALIGN)] struct _mapi_SRestriction_or { + uint8 rt; + [switch_is(rt)] mapi_SRestriction_CTR res; + } SRestriction_or; + + typedef [public,flag(NDR_NOALIGN)] struct _mapi_SRestriction_sub { + uint8 rt; + [switch_is(rt)] mapi_SRestriction_CTR res; + } SRestriction_sub; + + typedef [public,flag(NDR_NOALIGN)] struct _mapi_SRestriction_comment { + uint8 rt; + [switch_is(rt)] mapi_SRestriction_CTR res; + } SRestriction_comment; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 handle_idx; + [represent_as(uint16)] mapi_SRestriction restrictions; + } Restrict_req; + + typedef [flag(NDR_NOALIGN)] struct { + TableStatus TableStatus; + } Restrict_repl; + + /**************************/ + /* ROP: RopQueryRows(0x15) */ + typedef [enum8bit] enum { + TBL_ADVANCE = 0x0, + TBL_NOADVANCE = 0x1, + TBL_ENABLEPACKEDBUFFERS = 0x2 + } QueryRowsFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + QueryRowsFlags QueryRowsFlags; + uint8 ForwardRead; + uint16 RowCount; + } QueryRows_req; + + typedef [nopush,nopull,flag(NDR_NOALIGN)] struct { + uint8 Origin; + uint16 RowCount; + [flag(NDR_REMAINING)]DATA_BLOB RowData; + } QueryRows_repl; + + /**************************/ + /* ROP: RopGetStatus(0x16) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } GetStatus_req; + + typedef [flag(NDR_NOALIGN)] struct { + TableStatus TableStatus; + } GetStatus_repl; + + /**************************/ + /* ROP: RopQueryPosition(0x17) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } QueryPosition_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint32 Numerator; + uint32 Denominator; + } QueryPosition_repl; + + /**************************/ + /* ROP: RopSeekRow(0x18) */ + typedef [enum8bit] enum { + BOOKMARK_BEGINNING = 0x0, + BOOKMARK_CURRENT = 0x1, + BOOKMARK_END = 0x2, + BOOKMARK_USER = 0x3 + } BOOKMARK; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + BOOKMARK origin; + int32 offset; + boolean8 WantRowMovedCount; + } SeekRow_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 HasSoughtLess; + uint32 RowsSought; + } SeekRow_repl; + + /**************************/ + /* ROP: RopSeekRowBookmark(0x19) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + SBinary_short Bookmark; + uint32 RowCount; + boolean8 WantRowMovedCount; + } SeekRowBookmark_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 RowNoLongerVisible; + boolean8 HasSoughtLess; + uint32 RowsSought; + } SeekRowBookmark_repl; + + /**************************/ + /* ROP: RopSeekRowFractional(0x1a) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint32 ulNumerator; + uint32 ulDenominator; + } SeekRowApprox_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SeekRowApprox_repl; + + /**************************/ + /* ROP: RopCreateBookmark(0x1b) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } CreateBookmark_req; + + typedef [flag(NDR_NOALIGN)] struct { + SBinary_short bookmark; + } CreateBookmark_repl; + + /**************************/ + /* ROP: RopCreateFolder(0x1c) */ + typedef [enum8bit] enum { + FOLDER_GENERIC = 0x1, + FOLDER_SEARCH = 0x2 + } FOLDER_TYPE; + + typedef [enum8bit] enum { + MAPI_FOLDER_ANSI = 0x0, + MAPI_FOLDER_UNICODE = 0x1 + } FOLDER_STRING; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(MAPI_FOLDER_ANSI)] astring lpszA; + [case(MAPI_FOLDER_UNICODE)][flag(STR_NULLTERM)] string lpszW; + } LPTSTR; + + typedef [enum16bit] enum { + NONE = 0x0000, + OPEN_IF_EXISTS = 0x0001 + } FOLDER_FLAGS; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + FOLDER_TYPE ulFolderType; + FOLDER_STRING ulType; + FOLDER_FLAGS ulFlags; + [switch_is(ulType)] LPTSTR FolderName; + [switch_is(ulType)] LPTSTR FolderComment; + } CreateFolder_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 HasRules; + boolean8 IsGhosted; + [switch_is(IsGhosted)] IsGhosted Ghost; + } CreateFolder_GhostInfo; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)]; + [case(0x1)] CreateFolder_GhostInfo GhostInfo; + } CreateFolder_GhostUnion; + + typedef [flag(NDR_NOALIGN)] struct { + hyper folder_id; + boolean8 IsExistingFolder; + [switch_is(IsExistingFolder)] CreateFolder_GhostUnion GhostUnion; + } CreateFolder_repl; + + /**************************/ + /* ROP: RopDeleteFolder(0x1d) */ + typedef [bitmap8bit] bitmap { + DEL_MESSAGES = 0x1, + DEL_FOLDERS = 0x4, + DELETE_HARD_DELETE = 0x10 + } DeleteFolderFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + DeleteFolderFlags DeleteFolderFlags; + hyper FolderId; + } DeleteFolder_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 PartialCompletion; + } DeleteFolder_repl; + + /**************************/ + /* ROP: RopDeleteMessages(0x1e) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + boolean8 WantAsynchronous; + boolean8 NotifyNonRead; + uint16 cn_ids; + [size_is(cn_ids)] hyper message_ids[]; + } DeleteMessages_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 PartialCompletion; + } DeleteMessages_repl; + + /**************************/ + /* ROP: RopGetMessageStatus(0x1f) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + hyper msgid; + } GetMessageStatus_req; + + /**************************/ + /* ROP: RopSetMessageStatus(0x20) */ + typedef [bitmap32bit] bitmap { + MSGSTATUS_HIGHLIGHTED = 0x1, + MSGSTATUS_TAGGED = 0x2, + MSGSTATUS_HIDDEN = 0x4, + MSGSTATUS_DELMARKED = 0x8, + MSGSTATUS_REMOTE_DOWNLOAD = 0x1000, + MSGSTATUS_REMOTE_DELETE = 0x2000 + } ulMessageStatus; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + hyper msgid; + uint32 ulNewStatus; + ulMessageStatus ulNewStatusMask; + } SetMessageStatus_req; + + typedef [flag(NDR_NOALIGN)] struct { + ulMessageStatus ulOldStatus; + } SetMessageStatus_repl; + + /**************************/ + /* ROP: RopGetAttachmentTable(0x21) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + TableFlags TableFlags; + } GetAttachmentTable_req; + + typedef [flag(NDR_NOALIGN)] struct { + } GetAttachmentTable_repl; + + /*************************/ + /* ROP: RopOpenAttachment(0x22) */ + typedef [enum8bit] enum { + OpenAttachmentFlags_ReadOnly = 0x0, + OpenAttachmentFlags_ReadWrite = 0x1, + OpenAttachmentFlags_BestAccess = 0x3 + } OpenAttachmentFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + OpenAttachmentFlags OpenAttachmentFlags; + uint32 AttachmentID; + } OpenAttach_req; + + typedef [flag(NDR_NOALIGN)] struct { + } OpenAttach_repl; + + /*************************/ + /* ROP: RopCreateAttachment(0x23) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + } CreateAttach_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint32 AttachmentID; + } CreateAttach_repl; + + /*************************/ + /* ROP: RopDeleteAttachment(0x24) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint32 AttachmentID; + } DeleteAttach_req; + + + typedef [flag(NDR_NOALIGN)] struct { + } DeleteAttach_repl; + + /*************************/ + /* ROP: RopSaveChangesAttachment(0x25) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 ResponseHandleIndex; + uint8 InputHandleIndex; + SaveFlags SaveFlags; + } SaveChangesAttachment_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SaveChangesAttachment_repl; + + /*************************/ + /* ROP: RopSetReceiveFolder(0x26) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + hyper fid; + astring lpszMessageClass; + } SetReceiveFolder_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SetReceiveFolder_repl; + + /*************************/ + /* ROP: RopGetReceiveFolder(0x27) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + astring MessageClass; + } GetReceiveFolder_req; + + typedef [flag(NDR_NOALIGN)] struct { + hyper folder_id; + astring MessageClass; + } GetReceiveFolder_repl; + + /*************************/ + /* ROP: RopRegisterNotification(0x29) */ + typedef [enum16bit] enum { + fnevCriticalError = 0x0001, + fnevNewMail = 0x0002, + fnevObjectCreated = 0x0004, + fnevObjectDeleted = 0x0008, + fnevObjectModified = 0x0010, + fnevObjectMoved = 0x0020, + fnevObjectCopied = 0x0040, + fnevSearchComplete = 0x0080, + fnevTableModified = 0x0100, + fnevStatusObjectModified = 0x0200, + fnevReserved = 0x0400, + fnevTbit = 0x1000, + fnevUbit = 0x2000, + fnevSbit = 0x4000, + fnevMbit = 0x8000 + } NotificationFlags; + + typedef [nodiscriminant,flag(NDR_NOALIGN)] union { + [case(0x0)] hyper ID; + [case(0x1)]; + } hyperbool; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + NotificationFlags notificationFlags; + uint8 layout; + [switch_is(layout)] hyperbool u; + } RegisterNotification_req; + + typedef [flag(NDR_NOALIGN)] struct { + } RegisterNotification_repl; + + /*************************/ + /* ROP: RopNotify(0x2a) */ + typedef [bitmap32bit] bitmap { + MSGFLAG_READ = 0x1, + MSGFLAG_UNMODIFIED = 0x2, + MSGFLAG_SUBMIT = 0x4, + MSGFLAG_UNSENT = 0x8, + MSGFLAG_HASATTACH = 0x10, + MSGFLAG_FROMME = 0x20, + MSGFLAG_ASSOCIATED = 0x40, + MSGFLAG_RESEND = 0x80, + MSGFLAG_RN_PENDING = 0x100, + MSGFLAG_NRN_PENDING = 0x200 + } MsgFlags; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)] astring lpszA; + [case(0x1)][flag(STR_NULLTERM)] string lpszW; + } MessageClass; + + typedef [flag(NDR_NOALIGN)] struct { + GUID DatabaseGUID; + uint8 GlobalCounter[6]; + } GID; + + typedef [enum16bit] enum { + TABLE_CHANGED = 0x1, + TABLE_ROW_ADDED = 0x3, + TABLE_ROW_DELETED = 0x4, + TABLE_ROW_MODIFIED = 0x5, + TABLE_RESTRICT_DONE = 0x7 + } RichTableNotificationType; + + /* NewMailNotification: case 0x2 and 0x8002 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper MID; + MsgFlags MessageFlags; + boolean8 UnicodeFlag; + [switch_is(UnicodeFlag)] MessageClass MessageClass; + } NewMailNotification; + + /* FolderCreatedNotification: case 0x4 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper ParentFID; + uint16 TagCount; + [size_is(TagCount)] MAPITAGS Tags[]; + } FolderCreatedNotification; + + /* FolderDeletedNotification: case 0x8 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper ParentFID; + } FolderDeletedNotification; + + /* FolderModifiedNotification: case 0x10 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + uint16 TagCount; + [size_is(TagCount)] MAPITAGS Tags[]; + } FolderModifiedNotification_10; + + /* FolderMoveCopyNotification: case 0x20 and 0x40 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper ParentFID; + hyper OldFID; + hyper OldParentFID; + } FolderMoveCopyNotification; + + /* SearchCompleteNotification: case 0x80 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + } SearchCompleteNotification; + + /* HierarchyTable: case 0x100 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper InsertAfterFID; + [represent_as(uint16)] DATA_BLOB Columns; + } HierarchyRowAddedNotification; + + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + } HierarchyRowDeletedNotification; + + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper InsertAfterFID; + [represent_as(uint16)] DATA_BLOB Columns; + } HierarchyRowModifiedNotification; + + typedef [nodiscriminant] union { + [case(TABLE_ROW_ADDED)] HierarchyRowAddedNotification HierarchyRowAddedNotification; + [case(TABLE_ROW_DELETED)] HierarchyRowDeletedNotification HierarchyRowDeletedNotification; + [case(TABLE_ROW_MODIFIED)] HierarchyRowModifiedNotification HierarchyRowModifiedNotification; + [default]; + } HierarchyTableChangeUnion; + + typedef [flag(NDR_NOALIGN)] struct { + RichTableNotificationType TableEvent; + [switch_is(TableEvent)] HierarchyTableChangeUnion HierarchyTableChangeUnion; + } HierarchyTableChange; + + /* IcsNotification: case 0x200 */ + typedef [flag(NDR_NOALIGN)] struct { + boolean8 HierChanged; + uint32 GIDCount; + [size_is(GIDCount)] GID GID[]; + } IcsNotification; + + /* FolderModifiedNotification: case 0x1010 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + uint16 TagCount; + [size_is(TagCount)] MAPITAGS Tags[]; + uint32 TotalMessageCount; + } FolderModifiedNotification_1010; + + /* FolderModifiedNotification: case 0x2010 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + uint16 TagCount; + [size_is(TagCount)] MAPITAGS Tags[]; + uint32 UnreadMessageCount; + } FolderModifiedNotification_2010; + + /* FolderModifiedNotification: case 0x3010 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + uint16 TagCount; + [size_is(TagCount)] MAPITAGS Tags[]; + uint32 TotalMessageCount; + uint32 UnreadMessageCount; + } FolderModifiedNotification_3010; + + /* MessageCreatedNotification: case 0x8004 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper MID; + uint16 TagCount; + [size_is(TagCount)] MAPITAGS Tags[]; + } MessageCreatedNotification; + + /* MessageDeletedNotification: case 0x8008 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper MID; + } MessageDeletedNotification; + + /* MessageModifiedNotification: case 0x8010 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper MID; + uint16 TagCount; + [size_is(TagCount)] MAPITAGS Tags[]; + } MessageModifiedNotification; + + /* MessageMoveCopyNotification: case 0x8020 and 0x8040 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper MID; + hyper OldFID; + hyper OldMID; + } MessageMoveCopyNotification; + + /* ContentsTableChange: case 0x8100 and 0xc100 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper MID; + uint32 Instance; + hyper InsertAfterFID; + hyper InsertAfterMID; + uint32 InsertAfterInstance; + [represent_as(uint16)] DATA_BLOB Columns; + } ContentsRowAddedNotification; + + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper MID; + uint32 Instance; + } ContentsRowDeletedNotification; + + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper MID; + uint32 Instance; + hyper InsertAfterFID; + hyper InsertAfterMID; + uint32 InsertAfterInstance; + [represent_as(uint16)] DATA_BLOB Columns; + } ContentsRowModifiedNotification; + + typedef [nodiscriminant] union { + [case(TABLE_ROW_ADDED)] ContentsRowAddedNotification ContentsRowAddedNotification; + [case(TABLE_ROW_DELETED)] ContentsRowDeletedNotification ContentsRowDeletedNotification; + [case(TABLE_ROW_MODIFIED)] ContentsRowModifiedNotification ContentsRowModifiedNotification; + [default]; + } ContentsTableChangeUnion; + + typedef [flag(NDR_NOALIGN)] struct { + RichTableNotificationType TableEvent; + [switch_is(TableEvent)] ContentsTableChangeUnion ContentsTableChangeUnion; + } ContentsTableChange; + + /* SearchMessageCreatedNotification: case 0xc004 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper MID; + hyper SearchFID; + uint16 TagCount; + [size_is(TagCount)] MAPITAGS Tags[]; + } SearchMessageCreatedNotification; + + /* SearchMessageRemovedNotification: case 0xc008 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper MID; + hyper SearchFID; + } SearchMessageRemovedNotification; + + /* SearchMessageModifiedNotification: 0xc010 */ + typedef [flag(NDR_NOALIGN)] struct { + hyper FID; + hyper MID; + uint16 TagCount; + [size_is(TagCount)] MAPITAGS Tags[]; + } SearchMessageModifiedNotification; + + typedef [nodiscriminant] union { + [case(0x0002)] NewMailNotification NewMailNotification; + [case(0x0004)] FolderCreatedNotification FolderCreatedNotification; + [case(0x0008)] FolderDeletedNotification FolderDeletedNotification; + [case(0x0010)] FolderModifiedNotification_10 FolderModifiedNotification_10; + [case(0x0020)] FolderMoveCopyNotification FolderMoveNotification; + [case(0x0040)] FolderMoveCopyNotification FolderCopyNotification; + [case(0x0080)] SearchCompleteNotification SearchCompleteNotification; + [case(0x0100)] HierarchyTableChange HierarchyTableChange; + [case(0x0200)] IcsNotification IcsNotification; + [case(0x1010)] FolderModifiedNotification_1010 FolderModifiedNotification_1010; + [case(0x2010)] FolderModifiedNotification_2010 FolderModifiedNotification_2010; + [case(0x3010)] FolderModifiedNotification_3010 FolderModifiedNotification_3010; + [case(0x8002)] NewMailNotification NewMessageNotification; + [case(0x8004)] MessageCreatedNotification MessageCreatedNotification; + [case(0x8008)] MessageDeletedNotification MessageDeletedNotification; + [case(0x8010)] MessageModifiedNotification MessageModifiedNotification; + [case(0x8020)] MessageMoveCopyNotification MessageMoveNotification; + [case(0x8040)] MessageMoveCopyNotification MessageCopyNotification; + [case(0x8100)] ContentsTableChange ContentsTableChange; + [case(0xc004)] SearchMessageCreatedNotification SearchMessageCreatedNotification; + [case(0xc008)] SearchMessageRemovedNotification SearchMessageRemovedNotification; + [case(0xc010)] SearchMessageModifiedNotification SearchMessageModifiedNotification; + [case(0xc100)] ContentsTableChange SearchTableChange; + } NotificationData; + + typedef [flag(NDR_NOALIGN)] struct { + uint32 NotificationHandle; + uint8 LogonId; + NotificationFlags NotificationType; + [switch_is(NotificationType)] NotificationData NotificationData; + } Notify_repl; + + /*************************/ + /* ROP: RopOpenStream(0x2b) */ + typedef [enum8bit] enum { + OpenStream_ReadOnly = 0x0, + OpenStream_ReadWrite = 0x1, + OpenStream_Create = 0x2, + OpenStream_BestAccess = 0x3 + } OpenStream_OpenModeFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + MAPITAGS PropertyTag; + OpenStream_OpenModeFlags OpenModeFlags; + } OpenStream_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint32 StreamSize; + } OpenStream_repl; + + /*************************/ + /* ROP: RopReadStream(0x2c) */ + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0xBABE)] uint32 value; + [default]; + } MaximumByteCount; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint16 ByteCount; + [switch_is(ByteCount)] MaximumByteCount MaximumByteCount; + } ReadStream_req; + + typedef [flag(NDR_ALIGN2)] struct { + [represent_as(uint16), flag(NDR_REMAINING)] DATA_BLOB data; + } ReadStream_repl; + + /*************************/ + /* ROP: RopWriteStream(0x2d) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + [represent_as(uint16), flag(NDR_REMAINING)] DATA_BLOB data; + } WriteStream_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 WrittenSize; + } WriteStream_repl; + + /*************************/ + /* ROP: RopSeekStream(0x2e) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 Origin; + hyper Offset; + } SeekStream_req; + + typedef [flag(NDR_NOALIGN)] struct { + hyper NewPosition; + } SeekStream_repl; + + /*************************/ + /* ROP: RopSetStreamSize(0x2f) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + hyper SizeStream; + } SetStreamSize_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SetStreamSize_repl; + + /*************************/ + /* ROP: RopSetSearchCriteria(0x30) */ + typedef [bitmap32bit, flag(NDR_PAHEX)] bitmap { + STOP_SEARCH = 0x00000001, + RESTART_SEARCH = 0x00000002, + RECURSIVE_SEARCH = 0x00000004, + SHALLOW_SEARCH = 0x00000008, + FOREGROUND_SEARCH = 0x00000010, + BACKGROUND_SEARCH = 0x00000020, + CONTENT_INDEXED_SEARCH = 0x00010000, + NON_CONTENT_INDEXED_SEARCH = 0x00020000, + STATIC_SEARCH = 0x00040000 + } SearchFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + [represent_as(uint16)] mapi_SRestriction res; + uint16 FolderIdCount; + [size_is(FolderIdCount)] hyper FolderIds[]; + SearchFlags SearchFlags; + } SetSearchCriteria_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SetSearchCriteria_repl; + + /*************************/ + /* ROP: RopGetSearchCriteria(0x31) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + boolean8 UseUnicode; + boolean8 IncludeRestriction; + boolean8 IncludeFolders; + } GetSearchCriteria_req; + + typedef [flag(NDR_NOALIGN)] struct { + [represent_as(uint16)] mapi_SRestriction res; + uint8 unknown; + uint16 FolderIdCount; + [size_is(FolderIdCount)] hyper FolderIds[]; + SearchFlags SearchFlags; + } GetSearchCriteria_repl; + + /*************************/ + /* ROP: RopSubmitMessage(0x32) */ + typedef [enum8bit] enum { + None = 0x0, /* None */ + PreProcess = 0x1, /* Needs to be preprocessed by the server */ + NeedsSpooler = 0x2 /* Is to be processed by a client spooler */ + } SubmitFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + SubmitFlags SubmitFlags; + } SubmitMessage_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SubmitMessage_repl; + + /*************************/ + /* ROP: RopMoveCopyMessages(0x33) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint16 count; + [size_is(count)] hyper message_id[]; + boolean8 WantAsynchronous; + boolean8 WantCopy; + } MoveCopyMessages_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 PartialCompletion; + } MoveCopyMessages_repl; + + /*************************/ + /* ROP: RopAbortSubmit(0x34) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + hyper FolderId; + hyper MessageId; + } AbortSubmit_req; + + typedef [flag(NDR_NOALIGN)] struct { + } AbortSubmit_repl; + + /*************************/ + /* ROP: RopMoveFolder(0x35) */ + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)] astring lpszA; + [case(0x1)][flag(STR_NULLTERM)] string lpszW; + } Folder_name; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + boolean8 WantAsynchronous; + boolean8 UseUnicode; + hyper FolderId; + [switch_is(UseUnicode)] Folder_name NewFolderName; + } MoveFolder_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 PartialCompletion; + } MoveFolder_repl; + + /*************************/ + /* ROP: RopCopyFolder(0x36) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + boolean8 WantAsynchronous; + boolean8 WantRecursive; + boolean8 UseUnicode; + hyper FolderId; + [switch_is(UseUnicode)] Folder_name NewFolderName; + } CopyFolder_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 PartialCompletion; + } CopyFolder_repl; + + /*************************/ + /* ROP: RopQueryColumnsAll(0x37) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } QueryColumnsAll_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 PropertyTagCount; + [size_is(PropertyTagCount)] MAPITAGS PropertyTags[]; + } QueryColumnsAll_repl; + + /*************************/ + /* ROP: RopAbort(0x38) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } Abort_req; + + typedef [flag(NDR_NOALIGN)] struct { + TableStatus TableStatus; + } Abort_repl; + + /*************************/ + /* ROP: RopCopyTo(0x39) */ + typedef [bitmap8bit] bitmap { + CopyFlagsMove = 0x1, /* Move properties */ + CopyFlagsNoOverwrite = 0x2 /* Do not overwrite existing properties */ + } CopyFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + boolean8 WantAsynchronous; + boolean8 WantSubObjects; + CopyFlags CopyFlags; + mapi_SPropTagArray ExcludedTags; + } CopyTo_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 PropertyProblemCount; + [size_is(PropertyProblemCount)] PropertyProblem PropertyProblem[]; + } CopyTo_repl; + + /*************************/ + /* ROP: RopCopyToStream(0x3a) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + hyper ByteCount; + } CopyToStream_req; + + typedef [flag(NDR_NOALIGN)] struct { + hyper ReadByteCount; + hyper WrittenByteCount; + } CopyToStream_repl; + + /*************************/ + /* ROP: RopCloneStream(0x3b) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + } CloneStream_req; + + typedef [flag(NDR_NOALIGN)] struct { + } CloneStream_repl; + + /*************************/ + /* ROP: RopGetPermissionsTable(0x3e) */ + typedef [bitmap8bit] bitmap { + IncludeFreeBusy = 0x02 + } PermissionsTableFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + PermissionsTableFlags TableFlags; + } GetPermissionsTable_req; + + typedef [flag(NDR_NOALIGN)] struct { + } GetPermissionsTable_repl; + + /*************************/ + /* ROP: RopGetRulesTable(0x3f) */ + typedef [bitmap8bit] bitmap { + RulesTableFlags_Unicode = 0x40 + } RulesTableFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + RulesTableFlags TableFlags; + } GetRulesTable_req; + + typedef [flag(NDR_NOALIGN)] struct { + } GetRulesTable_repl; + + /*************************/ + /* ROP: RopModifyPermissions(0x40) */ + typedef [bitmap8bit] bitmap { + ModifyPerms_IncludeFreeBusy = 0x02, + ModifyPerms_ReplaceRows = 0x01 + } ModifyPermissionsFlags; + + typedef [flag(NDR_NOALIGN)] struct { + ulRowFlags PermissionDataFlags; + mapi_SPropValue_array lpProps; + } PermissionData; + + typedef [flag(NDR_NOALIGN)] struct { + ModifyPermissionsFlags ModifyFlags; + uint16 ModifyCount; + [size_is(ModifyCount)] PermissionData PermissionsData[]; + } mapi_PermissionsData; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + mapi_PermissionsData rowList; + } ModifyPermissions_req; + + typedef [flag(NDR_NOALIGN)] struct { + } ModifyPermissions_repl; + + /*************************/ + /* ROP: RopModifyRules(0x41) */ + typedef [flag(NDR_NOALIGN)] struct { + ulRowFlags RuleDataFlags; + mapi_SPropValue_array PropertyValues; + } RuleData; + + typedef [bitmap8bit] bitmap { + ModifyRulesFlag_Replace = 0x01 + } ModifyRulesFlag; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + ModifyRulesFlag ModifyRulesFlags; + uint16 RulesCount; + [size_is(RulesCount)] RuleData RulesData[]; + } ModifyRules_req; + + typedef [flag(NDR_NOALIGN)] struct { + } ModifyRules_repl; + + /*************************/ + /* ROP: RopGetOwningServers(0x42) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + hyper FolderId; + } GetOwningServers_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 OwningServersCount; + uint16 CheapServersCount; + [size_is(OwningServersCount)] astring OwningServers[]; + } GetOwningServers_repl; + + /*************************/ + /* ROP: RopLongTermIdFromId(0x43) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + hyper Id; + } LongTermIdFromId_req; + + typedef [flag(NDR_NOALIGN)] struct { + GUID DatabaseGuid; + uint8 GlobalCounter[6]; + uint16 padding; + } LongTermId; + + typedef [flag(NDR_NOALIGN)] struct { + LongTermId LongTermId; + } LongTermIdFromId_repl_Success; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)] LongTermIdFromId_repl_Success Success; + [default]; + } LongTermIdFromId_repl_status; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 InputHandleIndex; + uint32 ReturnValue; + [switch_is(ReturnValue)] LongTermIdFromId_repl_status repl; + } LongTermIdFromId_repl; + + /*************************/ + /* ROP: RopIdFromLongTermId(0x44) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + LongTermId LongTermId; + } IdFromLongTermId_req; + + typedef [flag(NDR_NOALIGN)] struct { + hyper Id; + } IdFromLongTermId_repl; + + /*************************/ + /* ROP: RopPublicFolderIsGhosted(0x45) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + hyper FolderId; + } PublicFolderIsGhosted_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 IsGhosted; + [switch_is(IsGhosted)] IsGhosted Ghost; + } PublicFolderIsGhosted_repl; + + /*************************/ + /* ROP: RopOpenEmbeddedMessage(0x46) */ + typedef [enum8bit, flag(NDR_PAHEX)] enum { + MAPI_READONLY = 0x0, + MAPI_READWRITE = 0x1, + MAPI_CREATE = 0x2 + } OpenEmbeddedMessage_OpenModeFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + uint16 CodePageId; + OpenEmbeddedMessage_OpenModeFlags OpenModeFlags; + } OpenEmbeddedMessage_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 Reserved; + hyper MessageId; + boolean8 HasNamedProperties; + TypedString SubjectPrefix; + TypedString NormalizedSubject; + uint16 RecipientCount; + uint16 ColumnCount; + [size_is(ColumnCount)] MAPITAGS RecipientColumns[]; + uint8 RowCount; + [size_is(RowCount)] OpenRecipientRow RecipientRows[]; + } OpenEmbeddedMessage_repl; + + /*************************/ + /* ROP: RopSetSpooler(0x47) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } SetSpooler_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SetSpooler_repl; + + /*************************/ + /* ROP: RopSpoolerLockMessage(0x48) */ + typedef [enum8bit] enum { + LockState_1stLock = 0x0, + LockState_1stUnlock = 0x1, + LockState_1stFinished = 0x2 + } LockState; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + hyper MessageId; + LockState LockState; + } SpoolerLockMessage_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SpoolerLockMessage_repl; + + /*************************/ + /* ROP: RopGetAddressTypes(0x49) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } AddressTypes_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 cValues; + uint16 size; + [size_is(cValues)] mapi_LPSTR transport[]; + } AddressTypes_repl; + + /**************************/ + /* ROP: RopTransportSend(0x4a) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } TransportSend_req; + + typedef [nodiscriminant] union { + [case(0x0)] mapi_SPropValue_array lpProps; + [case(0x1)]; + } TransportSend_lpProps; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 NoPropertiesReturned; + [switch_is(NoPropertiesReturned)] TransportSend_lpProps properties; + } TransportSend_repl; + + /**************************/ + /* ROP: RopFastTransferSourceCopyMessages(0x4b) */ + /* TODO */ + + /**************************/ + /* ROP: RopFastTransferSourceCopyFolder(0x4c) */ + /* TODO */ + + /**************************/ + /* ROP: RopFastTransferSourceCopyTo(0x4d) */ + /* TODO */ + + /**************************/ + /* ROP: RopFastTransferSourceGetBuffer(0x4e) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint16 BufferSize; + } FastTransferSourceGetBuffer_req; + + typedef [enum16bit] enum { + TransferStatus_Error = 0x0, + TransferStatus_Partial = 0x1, + TransferStatus_NoRoom = 0x2, + TransferStatus_Done = 0x3 + } TransferStatus; + + typedef [flag(NDR_NOALIGN)] struct { + TransferStatus TransferStatus; + uint16 InProgressCount; + uint16 TotalStepCount; + uint8 Reserved; + [flag(NDR_REMAINING)] [represent_as(uint16)] DATA_BLOB TransferBuffer; + /*uint16 TransferBufferSize; + [subcontext(0),subcontext_size(TransferBufferSize),flag(NDR_REMAINING)] DATA_BLOB TransferBuffer;*/ + } FastTransferSourceGetBuffer_repl; + + /**************************/ + /* ROP: RopFindRow(0x4f) */ + typedef [enum8bit] enum { + DIR_FORWARD = 0x0, + DIR_BACKWARD = 0x1 + } FindRow_ulFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + FindRow_ulFlags ulFlags; + [represent_as(uint16)] mapi_SRestriction res; + BOOKMARK origin; + SBinary_short bookmark; + } FindRow_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 RowNoLongerVisible; + uint8 HasRowData; + [flag(NDR_NOALIGN)] DATA_BLOB row; + } FindRow_repl; + + /**************************/ + /* ROP: RopProgress(0x50) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + boolean8 WantCancel; + } Progress_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint32 CompletedTaskCount; + uint32 TotalTaskCount; + } Progress_repl; + + /**************************/ + /* ROP: RopTransportNewMail(0x51) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + hyper MessageId; + hyper FolderId; + astring MessageClass; + uint32 MessageFlags; + } TransportNewMail_req; + + typedef [flag(NDR_NOALIGN)] struct { + } TransportNewMail_repl; + + /**************************/ + /* ROP: RopGetValidAttachments(0x52) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } GetValidAttachments_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 AttachmentIdCount; + [size_is(AttachmentIdCount)] uint32 AttachmentIdArray[]; + } GetValidAttachments_repl; + + /**************************/ + /* ROP: RopFastTransferDestinationConfigure(0x53) */ + /* TODO */ + + /**************************/ + /* ROP: RopFastTransferDestinationPutBuffer(0x54) */ + /* TODO */ + + /*************************/ + /* ROP: RopGetNamesFromPropertyIds(0x55) */ + typedef [enum8bit] enum { + MNID_ID = 0, + MNID_STRING = 1 + } ulKind; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 NameSize; + [flag(STR_NULLTERM)] string Name; + } mapi_name; + + typedef [nodiscriminant] union { + [case(MNID_ID)] uint32 lid; + [case(MNID_STRING)] mapi_name lpwstr; + } Kind; + + typedef [flag(NDR_NOALIGN)] struct { + ulKind ulKind; + GUID lpguid; + [switch_is(ulKind)] Kind kind; + } MAPINAMEID; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint16 PropertyIdCount; + [size_is(PropertyIdCount)] uint16 PropertyIds[]; + } GetNamesFromIDs_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 count; + [size_is(count)] MAPINAMEID nameid[]; + } GetNamesFromIDs_repl; + + /*************************/ + /* ROP: RopGetPropertyIdsFromNames(0x56) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 ulFlags; + uint16 count; + [size_is(count)] MAPINAMEID nameid[]; + } GetIDsFromNames_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 count; + [size_is(count)] uint16 propID[]; + } GetIDsFromNames_repl; + + /*************************/ + /* ROP: RopUpdateDeferredActionMessages(0x57) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + SBinary_short ServerEntryId; + SBinary_short ClientEntryId; + } UpdateDeferredActionMessages_req; + + typedef [flag(NDR_NOALIGN)] struct { + } UpdateDeferredActionMessages_repl; + + /*************************/ + /* ROP: RopEmptyFolder(0x58) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + boolean8 WantAsynchronous; + boolean8 WantDeleteAssociated; + } EmptyFolder_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 PartialCompletion; + } EmptyFolder_repl; + + /*************************/ + /* ROP: RopExpandRow(0x59) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint16 MaxRowCount; + hyper CategoryId; + } ExpandRow_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint32 ExpandedRowCount; + uint16 RowCount; + [flag(NDR_REMAINING)]DATA_BLOB RowData; + } ExpandRow_repl; + + /*************************/ + /* ROP: RopCollapseRow(0x5a) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + hyper CategoryId; + } CollapseRow_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint32 CollapsedRowCount; + } CollapseRow_repl; + + /*************************/ + /* ROP: RopLockRegionStream(0x5b) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + hyper RegionOffset; + hyper RegionSize; + uint32 LockFlags; + } LockRegionStream_req; + + typedef [flag(NDR_NOALIGN)] struct { + } LockRegionStream_repl; + + /*************************/ + /* ROP: RopUnlockRegionStream(0x5c) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + hyper RegionOffset; + hyper RegionSize; + uint32 LockFlags; + } UnlockRegionStream_req; + + typedef [flag(NDR_NOALIGN)] struct { + } UnlockRegionStream_repl; + + /*************************/ + /* ROP: RopCommitStream(0x5d) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } CommitStream_req; + + typedef [flag(NDR_NOALIGN)] struct { + } CommitStream_repl; + + /*************************/ + /* ROP: RopGetStreamSize(0x5e) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } GetStreamSize_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint32 StreamSize; + } GetStreamSize_repl; + + /*************************/ + /* ROP: RopQueryNamedProperties(0x5f) */ + typedef [bitmap8bit] bitmap { + NoStrings = 0x01, + NoIds = 0x02 + } QueryFlags; + + typedef [nodiscriminant] union { + [case(0x0)]; + [case(0x1)] GUID guid; + } QueryNamedProperties_guid; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + QueryFlags QueryFlags; + boolean8 HasGuid; + [switch_is(HasGuid)] QueryNamedProperties_guid PropertyGuid; + } QueryNamedProperties_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 IdCount; + [size_is(IdCount)] uint16 PropertyIds[]; + [size_is(IdCount)] MAPINAMEID PropertyNames[]; + } QueryNamedProperties_repl; + + /*************************/ + /* ROP: RopGetPerUserLongTermIds(0x60) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + GUID DatabaseGuid; + } GetPerUserLongTermIds_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 LongTermIdCount; + [size_is(LongTermIdCount)] LongTermId LongTermIds[]; + } GetPerUserLongTermIds_repl; + + /*************************/ + /* ROP: RopGetPerUserGuid(0x61) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + LongTermId LongTermId; + } GetPerUserGuid_req; + + typedef [flag(NDR_NOALIGN)] struct { + GUID DatabaseGuid; + } GetPerUserGuid_repl; + + /*************************/ + /* ROP: RopReadPerUserInformation(0x63) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 FolderId[24]; + boolean8 WhatIfChanged; + uint32 DataOffset; + uint16 MaxDataSize; + } ReadPerUserInformation_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 HasFinished; + [flag(NDR_REMAINING)] [represent_as(uint16)] DATA_BLOB Data; + /*uint16 DataSize; + [subcontext(0), subcontext_size(DataSize), flag(NDR_REMAINING)] DATA_BLOB Data;*/ + } ReadPerUserInformation_repl; + + /*************************/ + /* ROP: RopWritePerUserInformation(0x64) */ + /* TODO */ + + /*************************/ + /* ROP: RopSetReadFlags(0x66) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + boolean8 WantAsynchronous; + MSGFLAG_READ ReadFlags; + uint16 MessageIdCount; + [size_is(MessageIdCount)] hyper MessageIds[]; + } SetReadFlags_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 PartialCompletion; + } SetReadFlags_repl; + + /*************************/ + /* ROP: RopCopyProperties(0x67) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + boolean8 WantAsynchronous; + CopyFlags CopyFlags; + mapi_SPropTagArray PropertyTags; + } CopyProperties_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 PropertyProblemCount; + [size_is(PropertyProblemCount)] PropertyProblem PropertyProblem[]; + } CopyProperties_repl; + + /*************************/ + /* ROP: RopGetReceiveFolderTable(0x68) */ + typedef struct { + uint32 dwLowDateTime; + uint32 dwHighDateTime; + } FILETIME; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 unknown; + hyper fid; + astring lpszMessageClass; + FILETIME modiftime; + } ReceiveFolder; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } GetReceiveFolderTable_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint32 cValues; + [size_is(cValues)] ReceiveFolder entries[]; + } GetReceiveFolderTable_repl; + + /*************************/ + /* ROP: RopFastTransferSourceCopyProperties(0x69) */ + /* TODO */ + + /*************************/ + /* ROP: RopGetCollapseState(0x6b) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + hyper RowId; + uint32 RowInstanceNumber; + } GetCollapseState_req; + + typedef [flag(NDR_NOALIGN)] struct { + SBinary_short CollapseState; + } GetCollapseState_repl; + + /*************************/ + /* ROP: RopSetCollapseState(0x6c) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + SBinary_short CollapseState; + } SetCollapseState_req; + + typedef [flag(NDR_NOALIGN)] struct { + SBinary_short bookmark; + } SetCollapseState_repl; + + /*************************/ + /* ROP: RopGetTransportFolder(0x6d) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } GetTransportFolder_req; + + typedef [flag(NDR_NOALIGN)] struct { + hyper FolderId; + } GetTransportFolder_repl; + + /*************************/ + /* ROP: RopPending(0x6e) */ + typedef [flag(NDR_NOALIGN)] struct { + uint16 SessionIndex; + } Pending_repl; + + /*************************/ + /* ROP: RopOptionsData(0x6f) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + astring AddressType; + boolean8 WantWin32; + } OptionsData_req; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { + [case(0x0)]; + [default] astring HelpFileName; + } OptionsData_HelpFileName; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 Reserved; + SBinary_short OptionsInfo; + uint16 HelpFileSize; + [size_is(HelpFileSize)] uint8 HelpFile[]; + [switch_is(HelpFileSize)] OptionsData_HelpFileName HelpFileName; + } OptionsData_repl; + + /*************************/ + /* ROP: RopSynchronizationConfigure(0x70) */ + typedef [enum8bit] enum { + Contents = 0x1, + Hierarchy = 0x2 + } SynchronizationType; + + typedef [bitmap8bit] bitmap { + SendOptions_Unicode = 0x1, + SendOptions_ForUpload = 0x3, + SendOptions_RecoverMode = 0x4, + SendOptions_ForceUnicode = 0x8, + SendOptions_Partial = 0x10 + } SendOptions; + + typedef [bitmap16bit] bitmap { + SynchronizationFlag_Unicode = 0x1, + SynchronizationFlag_NoDeletions = 0x2, + SynchronizationFlag_NoSoftDeletions = 0x4, + SynchronizationFlag_ReadState = 0x8, + SynchronizationFlag_FAI = 0x10, + SynchronizationFlag_Normal = 0x20, + SynchronizationFlag_OnlySpecifiedProperties = 0x80, + SynchronizationFlag_NoForeignIdentifiers = 0x100, + SynchronizationFlag_Reserved = 0x1000, + SynchronizationFlag_BestBody = 0x2000, + SynchronizationFlag_IgnoreSpecifiedOnFAI = 0x4000, + SynchronizationFlag_Progress = 0x8000 + } SynchronizationFlag; + + typedef [bitmap32bit] bitmap { + Eid = 0x00000001, + MessageSize = 0x00000002, + Cn = 0x00000004, + OrderByDeliveryTime = 0x00000008 + } SynchronizationExtraFlags; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + SynchronizationType SynchronizationType; + SendOptions SendOptions; + SynchronizationFlag SynchronizationFlag; + [flag(NDR_REMAINING)] [represent_as(uint16)] DATA_BLOB RestrictionData; + SynchronizationExtraFlags SynchronizationExtraFlags; + mapi_SPropTagArray PropertyTags; + } SyncConfigure_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SyncConfigure_repl; + + /*************************/ + /* ROP: RopSynchronizationImportMessageChange(0x72) */ + typedef [bitmap8bit] bitmap { + ImportFlag_Associated = 0x10, + ImportFlag_FailOnConflict = 0x40 + } ImportFlag; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + ImportFlag ImportFlag; + mapi_SPropValue_array PropertyValues; + } SyncImportMessageChange_req; + + typedef [flag(NDR_NOALIGN)] struct { + hyper MessageId; + } SyncImportMessageChange_repl; + + /*************************/ + /* ROP: RopSynchronizationImportHierarchyChange(0x73) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + mapi_SPropValue_array HierarchyValues; + mapi_SPropValue_array PropertyValues; + } SyncImportHierarchyChange_req; + + typedef [flag(NDR_NOALIGN)] struct { + hyper FolderId; + } SyncImportHierarchyChange_repl; + + /*************************/ + /* ROP: RopSynchronizationImportDeletes(0x74) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + boolean8 IsHierarchy; + mapi_SPropValue_array PropertyValues; + } SyncImportDeletes_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SyncImportDeletes_repl; + + /*************************/ + /* ROP: RopSynchronizationUploadStateStreamBegin(0x75) */ + typedef [v1_enum,flag(NDR_PAHEX)] enum { + PidTagIdsetGiven = 0x40170003, + PidTagCnsetSeen = 0x67960102, + PidTagCnsetSeenFAI = 0x67da0102, + PidTagCnsetRead = 0x67d20102 + } StateProperty; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + StateProperty StateProperty; + uint32 TransferBufferSize; + } SyncUploadStateStreamBegin_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SyncUploadStateStreamBegin_repl; + + /*************************/ + /* ROP: RopSynchronizationUploadStateStreamContinue(0x76) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint32 StreamDataSize; + /* Current PIDL in wireshark repo does not support inline arrays. */ + [flag(NDR_BUFFERS), size_is(cb)]uint8 StreamData[]; /* [StreamDataSize] */ + } SyncUploadStateStreamContinue_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SyncUploadStateStreamContinue_repl; + + /*************************/ + /* ROP: RopSynchronizationUploadStateStreamEnd(0x77) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } SyncUploadStateStreamEnd_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SyncUploadStateStreamEnd_repl; + + /*************************/ + /* ROP: RopSynchronizationImportMessageMove(0x78) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint32 SourceFolderIdSize; + [size_is(SourceFolderIdSize)] uint8 SourceFolderId[]; + uint32 SourceMessageIdSize; + [size_is(SourceMessageIdSize)] uint8 SourceMessageId[]; + uint32 PredecessorChangeListSize; + [size_is(PredecessorChangeListSize)] uint8 PredecessorChangeList[]; + uint32 DestinationMessageIdSize; + [size_is(DestinationMessageIdSize)] uint8 DestinationMessageId[]; + uint32 ChangeNumberSize; + [size_is(ChangeNumberSize)] uint8 ChangeNumber[]; + } SyncImportMessageMove_req; + + typedef [flag(NDR_NOALIGN)] struct { + hyper MessageId; + } SyncImportMessageMove_repl; + + /*************************/ + /* ROP: RopSetPropertiesNoReplicate(0x79) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + [represent_as(uint16)] mapi_SPropValue_array values; + } SetPropertiesNoReplicate_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 PropertyProblemCount; + [size_is(PropertyProblemCount)] PropertyProblem PropertyProblem[]; + } SetPropertiesNoReplicate_repl; + + /*************************/ + /* ROP: RopDeletePropertiesNoReplicate(0x7a) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + mapi_SPropTagArray PropertyTags; + } DeletePropertiesNoReplicate_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 PropertyProblemCount; + [size_is(PropertyProblemCount)] PropertyProblem PropertyProblem[]; + } DeletePropertiesNoReplicate_repl; + + /*************************/ + /* ROP: RopGetStoreState(0x7b) */ + typedef [public,bitmap32bit] bitmap { + STORE_HAS_SEARCHES = 0x010000000 + } StoreState; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } GetStoreState_req; + + typedef [flag(NDR_NOALIGN)] struct { + StoreState StoreState; + } GetStoreState_repl; + + /*************************/ + /* ROP: RopSynchronizationOpenCollector(0x7e) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + boolean8 IsContentsCollector; + } SyncOpenCollector_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SyncOpenCollector_repl; + + /*************************/ + /* ROP: RopGetLocalReplicaIds(0x7f) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint32 IdCount; + } GetLocalReplicaIds_req; + + typedef [flag(NDR_NOALIGN)] struct { + GUID ReplGuid; + uint8 GlobalCount[6]; + } GetLocalReplicaIds_repl; + + /*************************/ + /* ROP: RopSynchronizationImportReadStateChanges(0x80) */ + #if 0 + typedef [flag(NDR_NOALIGN)] struct { + uint16 MessageSize; + uint8 MessageId[MessageSize]; + boolean8 MarkAsRead; + } MessageReadStates; + #endif + + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + [flag(NDR_REMAINING)] [represent_as(uint16)] DATA_BLOB MessageStates; + } SyncImportReadStateChanges_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SyncImportReadStateChanges_repl; + + /*************************/ + /* ROP: RopResetTable(0x81) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + } ResetTable_req; + + typedef [flag(NDR_NOALIGN)] struct { + } ResetTable_repl; + + /*************************/ + /* ROP: RopSynchronizationGetTransferState(0x82) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + uint8 OutputHandleIndex; + } SyncGetTransferState_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SyncGetTransferState_repl; + + /*************************/ + /* ROP: RopTellVersion(0x86) */ + /* TODO */ + + /*************************/ + /* ROP: OpenPublicFolderByName(0x87) - NOT DOCUMENTED */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 handle_idx; + asclstr name; + } OpenPublicFolderByName_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 HasRules; + boolean8 IsGhosted; + [switch_is(IsGhosted)] IsGhosted Ghost; + } OpenPublicFolderByName_repl; + + /*************************/ + /* ROP: SetSyncNotificationGuid(0x88) - NOT DOCUMENTED */ + typedef [flag(NDR_NOALIGN)] struct { + GUID NotificationGuid; + } SetSyncNotificationGuid_req; + + typedef [flag(NDR_NOALIGN)] struct { + } SetSyncNotificationGuid_repl; + + /*************************/ + /* ROP: RopFreeBookmark(0x89) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + SBinary_short bookmark; + } FreeBookmark_req; + + typedef [flag(NDR_NOALIGN)] struct { + } FreeBookmark_repl; + + /*************************/ + /* ROP: RopWriteAndCommitStream(0x90) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + [represent_as(uint16), flag(NDR_REMAINING)] DATA_BLOB data; + } WriteAndCommitStream_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 WrittenSize; + } WriteAndCommitStream_repl; + + /**************************/ + /* ROP: RopHardDeleteMessages(0x91) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + boolean8 WantAsynchronous; + boolean8 NotifyNonRead; + uint16 MessageIdCount; + [size_is(MessageIdCount)] hyper MessageIds[]; + } HardDeleteMessages_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 PartialCompletion; + } HardDeleteMessages_repl; + + /*************************/ + /* ROP: RopHardDeleteMessagesAndSubfolders(0x92) */ + typedef [flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 InputHandleIndex; + boolean8 WantAsynchronous; + boolean8 WantDeleteAssociated; + } HardDeleteMessagesAndSubfolders_req; + + typedef [flag(NDR_NOALIGN)] struct { + boolean8 PartialCompletion; + } HardDeleteMessagesAndSubfolders_repl; + + /*************************/ + /* ROP: RopSetLocalReplicaMidsetDeleted(0x93) */ + /* TODO */ + + /*************************/ + /* ROP: RopBackoff(0xF9) */ + /* TODO */ + + /*************************/ + /* ROP: RopLogon(0xFE) */ + typedef [flag(NDR_NOALIGN),public,enum8bit] enum { + LogonPrivate = 0x1, + UnderCover = 0x2, + Ghosted = 0x4, + SpIProcess = 0x8 + } LogonFlags; + + typedef [flag(NDR_NOALIGN),public,bitmap32bit] bitmap { + PUBLIC = 0x2, + HOME_LOGON = 0x4, + TAKE_OWNERSHIP = 0x8, + ALTERNATE_SERVER = 0x100, + IGNORE_HOME_MDB = 0x200, + NO_MAIL = 0x400, + USE_PER_MDB_REPLID_MAPPING = 0x010000000 + } OpenFlags; + + typedef [enum8bit] enum { + DayOfWeek_Sunday = 0x0, + DayOfWeek_Monday = 0x1, + DayOfWeek_Tuesday = 0x2, + DayOfWeek_Wednesday = 0x3, + DayOfWeek_Thursday = 0x4, + DayOfWeek_Friday = 0x5, + DayOfWeek_Saturday = 0x6 + } DayOfWeek; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 Seconds; + uint8 Minutes; + uint8 Hour; + DayOfWeek DayOfWeek; + uint8 Day; + uint8 Month; + uint16 Year; + } LogonTime; + + typedef [bitmap8bit] bitmap { + ResponseFlags_Reserved = 0x1, + ResponseFlags_OwnerRight = 0x2, + ResponseFlags_SendAsRight = 0x4, + ResponseFlags_OOF = 0x10 + } ResponseFlags; + + typedef [nopush,flag(NDR_NOALIGN)] struct { + uint8 LogonId; + uint8 OutputHandleIndex; + LogonFlags LogonFlags; + OpenFlags OpenFlags; + StoreState StoreState; + uint16 EssdnSize; + astring EssDN; + } Logon_req; + + typedef [flag(NDR_NOALIGN)] struct { + uint8 OutputHandleIndex; + uint32 ReturnValue; + /* Success - Private Mailboxes */ + LogonFlags LogonFlags; + hyper FolderIds[13]; + uint8 ResponseFlags; + GUID MailboxGuid; + uint16 ReplId; + GUID ReplGuid; + hyper LogonTime; /* TODO */ + hyper GwartTime; + StoreState StoreState; + /* Success - Public mailbox */ + GUID PerUserGuid; + /* Success - Redirect */ + uint8 ServerNameSize; + astring ServerName; + } Logon_repl; + + /*************************/ + /* ROP: RopBufferTooSmall(0xFF) */ + typedef [flag(NDR_NOALIGN)] struct { + uint16 SizeNeeded; + /* [size_is(SizeNeeded)] RequestBuffers; */ + } RopBufferTooSmall_repl; + + typedef [public, nodiscriminant] union { + [case(RopRelease)] Release_req Release; + [case(RopOpenFolder)] OpenFolder_req OpenFolder; + [case(RopOpenMessage)] OpenMessage_req OpenMessage; + [case(RopGetHierarchyTable)] GetHierarchyTable_req GetHierarchyTable; + [case(RopGetContentsTable)] GetContentsTable_req GetContentsTable; + [case(RopCreateMessage)] CreateMessage_req CreateMessage; + [case(RopGetPropertiesSpecific)] GetProps_req GetProps; + [case(RopGetPropertiesAll)] GetPropsAll_req GetPropsAll; + [case(RopGetPropertiesList)] GetPropList_req GetPropList; + [case(RopSetProperties)] SetProps_req SetProps; + [case(RopDeleteProperties)] DeleteProps_req DeleteProps; + [case(RopSaveChangesMessage)] SaveChangesMessage_req SaveChangesMessage; + [case(RopSetMessageReadFlag)] SetMessageReadFlag_req SetMessageReadFlag; + [case(RopReloadCachedInformation)] ReloadCachedInformation_req ReloadCachedInformation; + [case(RopSetColumns)] SetColumns_req SetColumns; + [case(RopSortTable)] SortTable_req SortTable; + [case(RopRestrict)] Restrict_req Restrict; + [case(RopRemoveAllRecipients)] RemoveAllRecipients_req RemoveAllRecipients; + [case(RopModifyRecipients)] ModifyRecipients_req ModifyRecipients; + [case(RopReadRecipients)] ReadRecipients_req ReadRecipients; + [case(RopQueryRows)] QueryRows_req QueryRows; + [case(RopGetStatus)] GetStatus_req GetStatus; + [case(RopQueryPosition)] QueryPosition_req QueryPosition; + [case(RopSeekRow)] SeekRow_req SeekRow; + [case(RopSeekRowBookmark)] SeekRowBookmark_req SeekRowBookmark; + [case(RopSeekRowFractional)] SeekRowApprox_req SeekRowApprox; + [case(RopCreateBookmark)] CreateBookmark_req CreateBookmark; + [case(RopCreateFolder)] CreateFolder_req CreateFolder; + [case(RopDeleteFolder)] DeleteFolder_req DeleteFolder; + [case(RopDeleteMessages)] DeleteMessages_req DeleteMessages; + [case(RopGetMessageStatus)] GetMessageStatus_req GetMessageStatus; + [case(RopSetMessageStatus)] SetMessageStatus_req SetMessageStatus; + [case(RopGetAttachmentTable)] GetAttachmentTable_req GetAttachmentTable; + [case(RopOpenAttachment)] OpenAttach_req OpenAttach; + [case(RopCreateAttachment)] CreateAttach_req CreateAttach; + [case(RopDeleteAttachment)] DeleteAttach_req DeleteAttach; + [case(RopSaveChangesAttachment)] SaveChangesAttachment_req SaveChangesAttachment; + [case(RopSetReceiveFolder)] SetReceiveFolder_req SetReceiveFolder; + [case(RopGetReceiveFolder)] GetReceiveFolder_req GetReceiveFolder; + [case(RopRegisterNotification)] RegisterNotification_req Advise; + [case(RopOpenStream)] OpenStream_req OpenStream; + [case(RopReadStream)] ReadStream_req ReadStream; + [case(RopWriteStream)] WriteStream_req WriteStream; + [case(RopSeekStream)] SeekStream_req SeekStream; + [case(RopSetStreamSize)] SetStreamSize_req SetStreamSize; + [case(RopSetSearchCriteria)] SetSearchCriteria_req SetSearchCriteria; + [case(RopGetSearchCriteria)] GetSearchCriteria_req GetSearchCriteria; + [case(RopSubmitMessage)] SubmitMessage_req SubmitMessage; + [case(RopMoveCopyMessages)] MoveCopyMessages_req MoveCopyMessages; + [case(RopAbortSubmit)] AbortSubmit_req AbortSubmit; + [case(RopMoveFolder)] MoveFolder_req MoveFolder; + [case(RopCopyFolder)] CopyFolder_req CopyFolder; + [case(RopQueryColumnsAll)] QueryColumnsAll_req QueryColumnsAll; + [case(RopAbort)] Abort_req Abort; + [case(RopCopyTo)] CopyTo_req CopyTo; + [case(RopCopyToStream)] CopyToStream_req CopyToStream; + [case(RopCloneStream)] CloneStream_req CloneStream; + [case(RopGetPermissionsTable)] GetPermissionsTable_req GetPermissionsTable; + [case(RopGetRulesTable)] GetRulesTable_req GetRulesTable; + [case(RopModifyPermissions)] ModifyPermissions_req ModifyPermissions; + [case(RopModifyRules)] ModifyRules_req ModifyRules; + [case(RopGetOwningServers)] GetOwningServers_req GetOwningServers; + [case(RopLongTermIdFromId)] LongTermIdFromId_req LongTermIdFromId; + [case(RopIdFromLongTermId)] IdFromLongTermId_req IdFromLongTermId; + [case(RopPublicFolderIsGhosted)] PublicFolderIsGhosted_req PublicFolderIsGhosted; + [case(RopOpenEmbeddedMessage)] OpenEmbeddedMessage_req OpenEmbeddedMessage; + [case(RopSetSpooler)] SetSpooler_req SetSpooler; + [case(RopSpoolerLockMessage)] SpoolerLockMessage_req SpoolerLockMessage; + [case(RopGetAddressTypes)] AddressTypes_req AddressTypes; + [case(RopTransportSend)] TransportSend_req TransportSend; + [case(RopFastTransferSourceGetBuffer)] FastTransferSourceGetBuffer_req FastTransferSourceGetBuffer; + [case(RopFindRow)] FindRow_req FindRow; + [case(RopProgress)] Progress_req Progress; + [case(RopTransportNewMail)] TransportNewMail_req TransportNewMail; + [case(RopGetValidAttachments)] GetValidAttachments_req GetValidAttachments; + [case(RopGetNamesFromPropertyIds)] GetNamesFromIDs_req GetNamesFromIDs; + [case(RopGetPropertyIdsFromNames)] GetIDsFromNames_req GetIDsFromNames; + [case(RopUpdateDeferredActionMessages)] UpdateDeferredActionMessages_req UpdateDeferredActionMessages; + [case(RopEmptyFolder)] EmptyFolder_req EmptyFolder; + [case(RopExpandRow)] ExpandRow_req ExpandRow; + [case(RopCollapseRow)] CollapseRow_req CollapseRow; + [case(RopLockRegionStream)] LockRegionStream_req LockRegionStream; + [case(RopUnlockRegionStream)] UnlockRegionStream_req UnlockRegionStream; + [case(RopCommitStream)] CommitStream_req CommitStream; + [case(RopGetStreamSize)] GetStreamSize_req GetStreamSize; + [case(RopQueryNamedProperties)] QueryNamedProperties_req QueryNamedProperties; + [case(RopGetPerUserLongTermIds)] GetPerUserLongTermIds_req GetPerUserLongTermIds; + [case(RopGetPerUserGuid)] GetPerUserGuid_req GetPerUserGuid; + [case(RopReadPerUserInformation)] ReadPerUserInformation_req ReadPerUserInformation; + [case(RopSetReadFlags)] SetReadFlags_req SetReadFlags; + [case(RopCopyProperties)] CopyProperties_req CopyProperties; + [case(RopGetReceiveFolderTable)] GetReceiveFolderTable_req GetReceiveFolderTable; + [case(RopGetCollapseState)] GetCollapseState_req GetCollapseState; + [case(RopSetCollapseState)] SetCollapseState_req SetCollapseState; + [case(RopGetTransportFolder)] GetTransportFolder_req GetTransportFolder; + [case(RopOptionsData)] OptionsData_req OptionsData; + [case(RopSynchronizationConfigure)] SyncConfigure_req SyncConfigure; + [case(RopSynchronizationImportMessageChange)] SyncImportMessageChange_req SyncImportMessageChange; + [case(RopSynchronizationImportHierarchyChange)] SyncImportHierarchyChange_req SyncImportHierarchyChange; + [case(RopSynchronizationImportDeletes)] SyncImportDeletes_req SyncImportDeletes; + [case(RopSynchronizationUploadStateStreamBegin)] SyncUploadStateStreamBegin_req SyncUploadStateStreamBegin; + [case(RopSynchronizationUploadStateStreamContinue)] SyncUploadStateStreamContinue_req SyncUploadStateStreamContinue; + [case(RopSynchronizationUploadStateStreamEnd)] SyncUploadStateStreamEnd_req SyncUploadStateStreamEnd; + [case(RopSynchronizationImportMessageMove)] SyncImportMessageMove_req SyncImportMessageMove; + [case(RopSetPropertiesNoReplicate)] SetPropertiesNoReplicate_req SetPropertiesNoReplicate; + [case(RopDeletePropertiesNoReplicate)] DeletePropertiesNoReplicate_req DeletePropertiesNoReplicate; + [case(RopGetStoreState)] GetStoreState_req GetStoreState; + [case(RopSynchronizationOpenCollector)] SyncOpenCollector_req SyncOpenCollector; + [case(RopGetLocalReplicaIds)] GetLocalReplicaIds_req GetLocalReplicaIds; + [case(RopSynchronizationImportReadStateChanges)] SyncImportReadStateChanges_req SyncImportReadStateChanges; + [case(RopResetTable)] ResetTable_req ResetTable; + [case(RopSynchronizationGetTransferState)] SyncGetTransferState_req SyncGetTransferState; + [case(RopOpenPublicFolderByName)] OpenPublicFolderByName_req OpenPublicFolderByName; + [case(RopSetSyncNotificationGuid)] SetSyncNotificationGuid_req SetSyncNotificationGuid; + [case(RopFreeBookmark)] FreeBookmark_req FreeBookmark; + [case(RopWriteAndCommitStream)] WriteAndCommitStream_req WriteAndCommitStream; + [case(RopHardDeleteMessages)] HardDeleteMessages_req HardDeleteMessages; + [case(RopHardDeleteMessagesAndSubfolders)] HardDeleteMessagesAndSubfolders_req HardDeleteMessagesAndSubfolders; + [case(RopLogon)] Logon_req Logon; + [default]; + } RopRequest; + + typedef [public, nodiscriminant] union { + [case(RopRelease)] Release_repl Release; + [case(RopOpenFolder)] OpenFolder_repl OpenFolder; + [case(RopOpenMessage)] OpenMessage_repl OpenMessage; + [case(RopGetHierarchyTable)] GetHierarchyTable_repl GetHierarchyTable; + [case(RopGetContentsTable)] GetContentsTable_repl GetContentsTable; + [case(RopCreateMessage)] CreateMessage_repl CreateMessage; + [case(RopGetPropertiesSpecific)] GetProps_repl GetProps; + [case(RopGetPropertiesAll)] GetPropsAll_repl GetPropsAll; + [case(RopGetPropertiesList)] GetPropList_repl GetPropList; + [case(RopSetProperties)] SetProps_repl SetProps; + [case(RopDeleteProperties)] DeleteProps_repl DeleteProps; + [case(RopSaveChangesMessage)] SaveChangesMessage_repl SaveChangesMessage; + [case(RopRemoveAllRecipients)] RemoveAllRecipients_repl RemoveAllRecipients; + [case(RopModifyRecipients)] ModifyRecipients_repl ModifyRecipients; + [case(RopReadRecipients)] ReadRecipients_repl ReadRecipients; + [case(RopSetMessageReadFlag)] SetMessageReadFlag_repl SetMessageReadFlag; + [case(RopReloadCachedInformation)] ReloadCachedInformation_repl ReloadCachedInformation; + [case(RopSetColumns)] SetColumns_repl SetColumns; + [case(RopSortTable)] SortTable_repl SortTable; + [case(RopRestrict)] Restrict_repl Restrict; + [case(RopQueryRows)] QueryRows_repl QueryRows; + [case(RopGetStatus)] GetStatus_repl GetStatus; + [case(RopQueryPosition)] QueryPosition_repl QueryPosition; + [case(RopSeekRow)] SeekRow_repl SeekRow; + [case(RopSeekRowBookmark)] SeekRowBookmark_repl SeekRowBookmark; + [case(RopSeekRowFractional)] SeekRowApprox_repl SeekRowApprox; + [case(RopCreateBookmark)] CreateBookmark_repl CreateBookmark; + [case(RopCreateFolder)] CreateFolder_repl CreateFolder; + [case(RopDeleteFolder)] DeleteFolder_repl DeleteFolder; + [case(RopDeleteMessages)] DeleteMessages_repl DeleteMessages; + [case(RopSetMessageStatus)] SetMessageStatus_repl SetMessageStatus; + [case(RopGetAttachmentTable)] GetAttachmentTable_repl GetAttachmentTable; + [case(RopOpenAttachment)] OpenAttach_repl OpenAttach; + [case(RopCreateAttachment)] CreateAttach_repl CreateAttach; + [case(RopDeleteAttachment)] DeleteAttach_repl DeleteAttach; + [case(RopSaveChangesAttachment)] SaveChangesAttachment_repl SaveChangesAttachment; + [case(RopSetReceiveFolder)] SetReceiveFolder_repl SetReceiveFolder; + [case(RopGetReceiveFolder)] GetReceiveFolder_repl GetReceiveFolder; + [case(RopRegisterNotification)] RegisterNotification_repl Advise; + [case(RopNotify)] Notify_repl Notify; + [case(RopOpenStream)] OpenStream_repl OpenStream; + [case(RopReadStream)] ReadStream_repl ReadStream; + [case(RopWriteStream)] WriteStream_repl WriteStream; + [case(RopSeekStream)] SeekStream_repl SeekStream; + [case(RopSetStreamSize)] SetStreamSize_repl SetStreamSize; + [case(RopSetSearchCriteria)] SetSearchCriteria_repl SetSearchCriteria; + [case(RopGetSearchCriteria)] GetSearchCriteria_repl GetSearchCriteria; + [case(RopSubmitMessage)] SubmitMessage_repl SubmitMessage; + [case(RopMoveCopyMessages)] MoveCopyMessages_repl MoveCopyMessages; + [case(RopAbortSubmit)] AbortSubmit_repl AbortSubmit; + [case(RopMoveFolder)] MoveFolder_repl MoveFolder; + [case(RopCopyFolder)] CopyFolder_repl CopyFolder; + [case(RopQueryColumnsAll)] QueryColumnsAll_repl QueryColumnsAll; + [case(RopAbort)] Abort_repl Abort; + [case(RopCopyTo)] CopyTo_repl CopyTo; + [case(RopCopyToStream)] CopyToStream_repl CopyToStream; + [case(RopCloneStream)] CloneStream_repl CloneStream; + [case(RopGetPermissionsTable)] GetPermissionsTable_repl GetPermissionsTable; + [case(RopGetRulesTable)] GetRulesTable_repl GetRulesTable; + [case(RopModifyPermissions)] ModifyPermissions_repl ModifyPermissions; + [case(RopModifyRules)] ModifyRules_repl ModifyRules; + [case(RopGetOwningServers)] GetOwningServers_repl GetOwningServers; + [case(RopLongTermIdFromId)] LongTermIdFromId_repl LongTermIdFromId; + [case(RopIdFromLongTermId)] IdFromLongTermId_repl IdFromLongTermId; + [case(RopPublicFolderIsGhosted)] PublicFolderIsGhosted_repl PublicFolderIsGhosted; + [case(RopOpenEmbeddedMessage)] OpenEmbeddedMessage_repl OpenEmbeddedMessage; + [case(RopSetSpooler)] SetSpooler_repl SetSpooler; + [case(RopSpoolerLockMessage)] SpoolerLockMessage_repl SpoolerLockMessage; + [case(RopGetAddressTypes)] AddressTypes_repl AddressTypes; + [case(RopTransportSend)] TransportSend_repl TransportSend; + [case(RopFastTransferSourceGetBuffer)] FastTransferSourceGetBuffer_repl FastTransferSourceGetBuffer; + [case(RopFindRow)] FindRow_repl FindRow; + [case(RopProgress)] Progress_repl Progress; + [case(RopTransportNewMail)] TransportNewMail_repl TransportNewMail; + [case(RopGetValidAttachments)] GetValidAttachments_repl GetValidAttachments; + [case(RopGetNamesFromPropertyIds)] GetNamesFromIDs_repl GetNamesFromIDs; + [case(RopGetPropertyIdsFromNames)] GetIDsFromNames_repl GetIDsFromNames; + [case(RopUpdateDeferredActionMessages)] UpdateDeferredActionMessages_repl UpdateDeferredActionMessages; + [case(RopEmptyFolder)] EmptyFolder_repl EmptyFolder; + [case(RopExpandRow)] ExpandRow_repl ExpandRow; + [case(RopCollapseRow)] CollapseRow_repl CollapseRow; + [case(RopLockRegionStream)] LockRegionStream_repl LockRegionStream; + [case(RopUnlockRegionStream)] UnlockRegionStream_repl UnlockRegionStream; + [case(RopCommitStream)] CommitStream_repl CommitStream; + [case(RopGetStreamSize)] GetStreamSize_repl GetStreamSize; + [case(RopQueryNamedProperties)] QueryNamedProperties_repl QueryNamedProperties; + [case(RopGetPerUserLongTermIds)] GetPerUserLongTermIds_repl GetPerUserLongTermIds; + [case(RopGetPerUserGuid)] GetPerUserGuid_repl GetPerUserGuid; + [case(RopReadPerUserInformation)] ReadPerUserInformation_repl ReadPerUserInformation; + [case(RopSetReadFlags)] SetReadFlags_repl SetReadFlags; + [case(RopCopyProperties)] CopyProperties_repl CopyProperties; + [case(RopGetReceiveFolderTable)] GetReceiveFolderTable_repl GetReceiveFolderTable; + [case(RopPending)] Pending_repl Pending; + [case(RopGetCollapseState)] GetCollapseState_repl GetCollapseState; + [case(RopSetCollapseState)] SetCollapseState_repl SetCollapseState; + [case(RopGetTransportFolder)] GetTransportFolder_repl GetTransportFolder; + [case(RopOptionsData)] OptionsData_repl OptionsData; + [case(RopSynchronizationConfigure)] SyncConfigure_repl SyncConfigure; + [case(RopSynchronizationImportMessageChange)] SyncImportMessageChange_repl SyncImportMessageChange; + [case(RopSynchronizationImportHierarchyChange)] SyncImportHierarchyChange_repl SyncImportHierarchyChange; + [case(RopSynchronizationImportDeletes)] SyncImportDeletes_repl SyncImportDeletes; + [case(RopSynchronizationUploadStateStreamBegin)] SyncUploadStateStreamBegin_repl SyncUploadStateStreamBegin; + [case(RopSynchronizationUploadStateStreamContinue)] SyncUploadStateStreamContinue_repl SyncUploadStateStreamContinue; + [case(RopSynchronizationUploadStateStreamEnd)] SyncUploadStateStreamEnd_repl SyncUploadStateStreamEnd; + [case(RopSynchronizationImportMessageMove)] SyncImportMessageMove_repl SyncImportMessageMove; + [case(RopSetPropertiesNoReplicate)] SetPropertiesNoReplicate_repl SetPropertiesNoReplicate; + [case(RopDeletePropertiesNoReplicate)] DeletePropertiesNoReplicate_repl DeletePropertiesNoReplicate; + [case(RopGetStoreState)] GetStoreState_repl GetStoreState; + [case(RopSynchronizationOpenCollector)] SyncOpenCollector_repl SyncOpenCollector; + [case(RopGetLocalReplicaIds)] GetLocalReplicaIds_repl GetLocalReplicaIds; + [case(RopSynchronizationImportReadStateChanges)] SyncImportReadStateChanges_repl SyncImportReadStateChanges; + [case(RopResetTable)] ResetTable_repl ResetTable; + [case(RopSynchronizationGetTransferState)] SyncGetTransferState_repl SyncGetTransferState; + [case(RopOpenPublicFolderByName)] OpenPublicFolderByName_repl OpenPublicFolderByName; + [case(RopSetSyncNotificationGuid)] SetSyncNotificationGuid_repl SetSyncNotificationGuid; + [case(RopFreeBookmark)] FreeBookmark_repl FreeBookmark; + [case(RopWriteAndCommitStream)] WriteAndCommitStream_repl WriteAndCommitStream; + [case(RopHardDeleteMessages)] HardDeleteMessages_repl HardDeleteMessages; + [case(RopHardDeleteMessagesAndSubfolders)] HardDeleteMessagesAndSubfolders_repl HardDeleteMessagesAndSubfolders; + [case(RopLogon)] Logon_repl Logon; + [case(RopBufferTooSmall)] RopBufferTooSmall_repl RopBufferTooSmall; + [default]; + } RopReply; + + typedef [public,flag(NDR_NOALIGN)] struct { + uint8 opnum; + [switch_is(opnum)] RopRequest u; + } EcDoRpcMapiRequest; + + typedef [public,nopush,nopull,noprint,flag(NDR_NOALIGN)] struct { + uint8 opnum; + /*uint8 handle_idx; + MAPISTATUS error_code;*/ + [switch_is(opnum)] RopReply u; + } EcDoRpcMapiResponse; + + typedef [public,nopull,nopush,noprint] struct { + uint32 mapi_len; /* whole mapi_data length */ + uint16 length; /* obfuscated: content length */ + EcDoRpcMapiRequest rpcRequest; /* obfuscated */ + uint32 *handles; /* obfuscated: handles id array */ + } mapi_request; + + typedef [public,nopull,nopush,noprint] struct { + uint32 mapi_len; + uint16 length; /* obfuscated: content length */ + EcDoRpcMapiResponse rpcResponse; /* obfuscated */ + uint32 *handles; /* obfuscated: handles id array */ + } mapi_response; + + WERROR mapi_EcDoRpc( + [in,out] policy_handle *handle, + [in,out] uint32 *size, + [in,out] uint32 *offset, + [in] [flag(NDR_REMAINING|NDR_NOALIGN)] mapi_request *mapi_request, + [out] [flag(NDR_REMAINING|NDR_NOALIGN)] mapi_response *mapi_response, + [in,out] uint16 *length, + [in] uint16 max_data + ); + + /******************/ + /* Function: 0x03 */ + WERROR mapi_EcGetMoreRpc( + [in, out, ref] policy_handle * pcxh, + [in][out] [size_is(usSize), length_is(*pusLength)] uint8 *rgb, + [in][out] uint16 *pusLength, + [in] uint16 usSize + ); + + /******************/ + /* Function: 0x04 */ + WERROR mapi_EcRRegisterPushNotification( + [in, out, ref] policy_handle * handle, + [in] uint32 iRpc, + [in] [size_is(cbContext)] uint8 *rgbContext, + [in] uint16 cbContext, + [in] uint32 grbitMapiAdviseBits, + [in, size_is(cbCallbackAddress)] uint8 *rgbCallbackAddress, + [in] uint16 cbCallbackAddress, + [out] uint32 *hNotification + ); + + /******************/ + /* Function: 0x05 */ + WERROR mapi_EcRUnregisterPushNotification( + [in,out] policy_handle *handle, + [in] uint32 iRpc, + [in] uint32 hNotification + ); + + /******************/ + /* Function: 0x06 */ + WERROR mapi_EcDummyRpc( + ); + + /******************/ + /* Function: 0x07 */ + WERROR mapi_EcRGetDCName( + [in,out] policy_handle *handle, + [in][string] uint8* szDomainName, + [out] uint8 rgchDomainController[16] + ); + + /******************/ + /* Function: 0x08 */ + WERROR mapi_EcRNetGetDCName( + [in][string] uint8* szDomainName, + [out] uint8 rgchDomainController[16] + ); + + /******************/ + /* Function: 0x09 */ + WERROR mapi_EcDoRpcExt( + [in, out, ref] policy_handle * pcxh, + [in, out] RpcExt2Flags *pulFlags, + [in, represent_as(4)] RgbIn *rgbIn, + [in] uint32 cbIn, + [out, length_is(*pcbOut), size_is(*pcbOut)] RgbOut *rgbOut, + [in, out] [range(0x0, 0x40000)] uint32 *pcbOut, + [in,represent_as(4),flag(NDR_NOALIGN|NDR_REMAINING)] AuxInfo *rgbAuxIn, + [in] uint32 cbAuxIn, + [out] uint32 *pulTransTime + ); + + /******************/ + /* Function: 0x0a */ + typedef [enum8bit,flag(NDR_PAHEX)] enum { + AUX_TYPE_PERF_REQUESTID = 0x01, + AUX_TYPE_PERF_CLIENTINFO = 0x02, + AUX_TYPE_PERF_SERVERINFO = 0x03, + AUX_TYPE_PERF_SESSIONINFO = 0x04, + AUX_TYPE_PERF_DEFMDB_SUCCESS = 0x05, + AUX_TYPE_PERF_DEFGC_SUCCESS = 0x06, + AUX_TYPE_PERF_MDB_SUCCESS = 0x07, + AUX_TYPE_PERF_GC_SUCCESS = 0x08, + AUX_TYPE_PERF_FAILURE = 0x09, + AUX_TYPE_CLIENT_CONTROL = 0x0A, + AUX_TYPE_PERF_PROCESSINFO = 0x0B, + AUX_TYPE_PERF_BG_DEFMDB_SUCCESS = 0x0C, + AUX_TYPE_PERF_BG_DEFGC_SUCCESS = 0x0D, + AUX_TYPE_PERF_BG_MDB_SUCCESS = 0x0E, + AUX_TYPE_PERF_BG_GC_SUCCESS = 0x0F, + AUX_TYPE_PERF_BG_FAILURE = 0x10, + AUX_TYPE_PERF_FG_DEFMDB_SUCCESS = 0x11, + AUX_TYPE_PERF_FG_DEFGC_SUCCESS = 0x12, + AUX_TYPE_PERF_FG_MDB_SUCCESS = 0x13, + AUX_TYPE_PERF_FG_GC_SUCCESS = 0x14, + AUX_TYPE_PERF_FG_FAILURE = 0x15, + AUX_TYPE_OSVERSIONINFO = 0x16, + AUX_TYPE_EXORGINFO = 0x17, + AUX_TYPE_PERF_ACCOUNTINFO = 0x18, + AUX_TYPE_SERVER_CAPABILITIES = 0x46, + AUX_TYPE_ENDPOINT_CAPABILITIES = 0x48, + AUX_CLIENT_CONNECTION_INFO = 0x4A, + AUX_SERVER_SESSION_INFO = 0x4B, + AUX_PROTOCOL_DEVICE_IDENTIFICATION = 0x4E + } AUX_HEADER_TYPE_1; + + typedef [enum8bit,flag(NDR_PAHEX)] enum { + AUX_TYPE_PERF_SESSIONINFO_2 = 0x04, + AUX_TYPE_PERF_MDB_SUCCESS_2 = 0x07, + AUX_TYPE_PERF_GC_SUCCESS_2 = 0x08, + AUX_TYPE_PERF_FAILURE_2 = 0x09, + AUX_TYPE_PERF_PROCESSINFO_2 = 0x0B, + AUX_TYPE_PERF_BG_MDB_SUCCESS_2 = 0x0E, + AUX_TYPE_PERF_BG_GC_SUCCESS_2 = 0x0F, + AUX_TYPE_PERF_BG_FAILURE_2 = 0x10, + AUX_TYPE_PERF_FG_MDB_SUCCESS_2 = 0x13, + AUX_TYPE_PERF_FG_GC_SUCCESS_2 = 0x14, + AUX_TYPE_PERF_FG_FAILURE_2 = 0x15 + } AUX_HEADER_TYPE_2; + + typedef [public,enum8bit,flag(NDR_PAHEX)] enum { + AUX_VERSION_1 = 0x1, + AUX_VERSION_2 = 0x2 + } AUX_VERSION; + + typedef [switch_type(uint8)] union { + [case(AUX_VERSION_1)] AUX_HEADER_TYPE_1 Type; + [case(AUX_VERSION_2)] AUX_HEADER_TYPE_2 Type_2; + [default]; + } AUX_HEADER_TYPE_ENUM; + + /*************************/ + /* AUX_HEADER case (0x1) */ + typedef [flag(NDR_NOALIGN)] struct { + uint16 SessionID; + uint16 RequestID; + } AUX_PERF_REQUESTID; + + /*************************/ + /* AUX_HEADER case (0x2) */ + typedef [public,enum16bit, flag(NDR_PAHEX)] enum { + CLIENTMODE_UNKNOWN = 0x0, + CLIENTMODE_CLASSIC = 0x1, + CLIENTMODE_CACHED = 0x2 + } ClientMode; + + typedef [public,flag(NDR_NOALIGN)] struct { + uint32 AdapterSpeed; + uint16 ClientID; + uint16 MachineNameOffset; + uint16 UserNameOffset; + uint16 ClientIPSize; + uint16 ClientIPOffset; + uint16 ClientIPMaskSize; + uint16 ClientIPMaskOffset; + uint16 AdapterNameOffset; + uint16 MacAddressSize; + uint16 MacAddressOffset; + ClientMode ClientMode; + uint16 Reserved; + nstring MachineName; + nstring UserName; + uint8 ClientIP[0]; + uint8 ClientIPMask[0]; + nstring AdapterName; + uint8 MacAddress[0]; + } AUX_PERF_CLIENTINFO; + + /*************************/ + /* AUX_HEADER case (0x3) */ + typedef [enum16bit,flag(NDR_PAHEX)] enum { + SERVERTYPE_UNKNOWN = 0x0, + SERVERTYPE_PRIVATE = 0x1, + SERVERTYPE_PUBLIC = 0x2, + SERVERTYPE_DIRECTORY = 0x3, + SERVERTYPE_REFERRAL = 0x4 + } SERVERINFO_ServerType; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 ServerID; + SERVERINFO_ServerType ServerType; + uint16 ServerDNOffset; + uint16 ServerNameOffset; + nstring ServerDN; + nstring ServerName; + } AUX_PERF_SERVERINFO; + + /*************************/ + /* AUX_HEADER case (0x4) */ + typedef [flag(NDR_NOALIGN)] struct { + uint16 SessionID; + uint16 Reserved; + GUID SessionGuid; + } AUX_PERF_SESSIONINFO; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 SessionID; + uint16 Reserved; + GUID SessionGuid; + uint32 ConnectionID; + } AUX_PERF_SESSIONINFO_V2; + + /**************************/ + /* AUX_HEADER case (0x5) */ + /* AUX_HEADER case (0xC) */ + /* AUX_HEADER case (0x11) */ + typedef [flag(NDR_NOALIGN)] struct { + uint32 TimeSinceRequest; + uint32 TimeToCompleteRequest; + uint16 RequestID; + uint16 Reserved; + } AUX_PERF_DEFMDB_SUCCESS; + + /**************************/ + /* AUX_HEADER case (0x6) */ + /* AUX_HEADER case (0xD) */ + typedef [flag(NDR_NOALIGN)] struct { + uint16 ServerID; + uint16 SessionID; + uint32 TimeSinceRequest; + uint32 TimeToCompleteRequest; + uint8 RequestOperation; + uint8 Reserved[3]; + } AUX_PERF_DEFGC_SUCCESS; + + /**************************/ + /* AUX_HEADER case (0x7) */ + /* AUX_HEADER case (0xE) */ + + /* AUX_HEADER case (0x13) */ + typedef [flag(NDR_NOALIGN)] struct { + uint16 ClientID; + uint16 ServerID; + uint16 SessionID; + uint16 RequestID; + uint32 TimeSinceRequest; + uint32 TimeToCompleteRequest; + } AUX_PERF_MDB_SUCCESS; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 ProcessID; + uint16 ClientID; + uint16 ServerID; + uint16 SessionID; + uint16 RequestID; + uint16 Reserved; + uint32 TimeSinceRequest; + uint32 TimeToCompleteRequest; + } AUX_PERF_MDB_SUCCESS_V2; + + /**************************/ + /* AUX_HEADER case (0x8) */ + typedef [flag(NDR_NOALIGN)] struct { + uint16 ClientID; + uint16 ServerID; + uint16 SessionID; + uint16 Reserved_1; + uint32 TimeSinceRequest; + uint32 TimeToCompleteRequest; + uint8 RequestOperation; + uint8 Reserved_2[3]; + } AUX_PERF_GC_SUCCESS; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 ProcessID; + uint16 ClientID; + uint16 ServerID; + uint16 SessionID; + uint32 TimeSinceRequest; + uint32 TimeToCompleteRequest; + uint8 RequestOperation; + uint8 Reserved[3]; + } AUX_PERF_GC_SUCCESS_V2; + + /**************************/ + /* AUX_HEADER case (0x9) */ + typedef [flag(NDR_NOALIGN)] struct { + uint16 ClientID; + uint16 ServerID; + uint16 SessionID; + uint16 RequestID; + uint32 TimeSinceRequest; + uint32 TimeToFailRequest; + MAPISTATUS ResultCode; + uint8 RequestOperation; + uint8 Reserved[3]; + } AUX_PERF_FAILURE; + + typedef [flag(NDR_NOALIGN)] struct { + uint16 ProcessID; + uint16 ClientID; + uint16 ServerID; + uint16 SessionID; + uint16 RequestID; + uint16 Reserved_1; + uint32 TimeSinceRequest; + uint32 TimeToFailRequest; + MAPISTATUS ResultCode; + uint8 RequestOperation; + uint8 Reserved_2[3]; + } AUX_PERF_FAILURE_V2; + + /**************************/ + /* AUX_HEADER case (0xA) */ + typedef [bitmap32bit] bitmap { + ENABLE_PERF_SENDTOSERVER = 0x00000001, + ENABLE_PERF_SENDTOMAILBOX = 0x00000002, + ENABLE_COMPRESSION = 0x00000004, + ENABLE_HTTP_TUNNELING = 0x00000008, + ENABLE_PERF_SENDGCDATA = 0x00000010 + } CLIENT_CONTROL_EnableFlags; + + typedef [flag(NDR_NOALIGN)] struct { + CLIENT_CONTROL_EnableFlags EnableFlags; + uint32 ExpiryTime; + } AUX_CLIENT_CONTROL; + + /*************************/ + /* AUX_HEADER case (0xB) */ + typedef [flag(NDR_NOALIGN)] struct { + uint16 ProcessID; + uint16 Reserved1; + GUID ProcessGuid; + uint16 ProcessNameOffset; + uint16 Reserved2; + nstring ProcessName; + } AUX_PERF_PROCESSINFO; + + /**************************/ + /* AUX_HEADER case (0x16) */ + typedef [flag(NDR_NOALIGN)] struct { + uint32 OSVersionInfoSize; + uint32 MajorVersion; + uint32 MinorVersion; + uint32 BuildNumber; + [flag(NDR_NOALIGN|NDR_REMAINING)] DATA_BLOB Reserved_1; + uint16 ServicePackMajor; + uint16 ServicePackMinor; + uint32 Reserved_2; + } AUX_OSVERSIONINFO; + + /**************************/ + /* AUX_HEADER case (0x17) */ + typedef [bitmap32bit] bitmap { + PUBLIC_FOLDERS_ENABLED = 0x00000001 + } EXORGINFO_OrgFlags; + + typedef [flag(NDR_NOALIGN)] struct { + EXORGINFO_OrgFlags OrgFlags; + } AUX_EXORGINFO; + + typedef [public,nodiscriminant,flag(NDR_NOALIGN)] union { + [case(AUX_TYPE_PERF_REQUESTID)] AUX_PERF_REQUESTID AuxiliaryPerfRequestId; + [case(AUX_TYPE_PERF_CLIENTINFO)] AUX_PERF_CLIENTINFO AuxiliaryPerfClientInfo; + [case(AUX_TYPE_PERF_SERVERINFO)] AUX_PERF_SERVERINFO AuxiliaryPerfServerInfo; + [case(AUX_TYPE_PERF_SESSIONINFO)] AUX_PERF_SESSIONINFO AuxiliaryPerfSessionInfo; + [case(AUX_TYPE_PERF_DEFMDB_SUCCESS)] AUX_PERF_DEFMDB_SUCCESS AuxiliaryPerfDefmdbSuccess; + [case(AUX_TYPE_PERF_DEFGC_SUCCESS)] AUX_PERF_DEFGC_SUCCESS AuxiliaryPerfDefgcSuccess; + [case(AUX_TYPE_PERF_MDB_SUCCESS)] AUX_PERF_MDB_SUCCESS AuxiliaryPerfMdbSuccess; + [case(AUX_TYPE_PERF_GC_SUCCESS)] AUX_PERF_GC_SUCCESS AuxiliaryPerfGcSuccess; + [case(AUX_TYPE_PERF_FAILURE)] AUX_PERF_FAILURE AuxiliaryPerfFailure; + [case(AUX_TYPE_CLIENT_CONTROL)] AUX_CLIENT_CONTROL AuxiliaryClientControl; + [case(AUX_TYPE_PERF_PROCESSINFO)] AUX_PERF_PROCESSINFO AuxiliaryPerfProcessInfo; + [case(AUX_TYPE_PERF_BG_DEFMDB_SUCCESS)] AUX_PERF_DEFMDB_SUCCESS AuxiliaryPerfBgDefmdbSuccess; + [case(AUX_TYPE_PERF_BG_DEFGC_SUCCESS)] AUX_PERF_DEFGC_SUCCESS AuxiliaryPerfBgDefgcSuccess; + [case(AUX_TYPE_PERF_BG_MDB_SUCCESS)] AUX_PERF_MDB_SUCCESS AuxiliaryPerfBgMdbSuccess; + [case(AUX_TYPE_PERF_BG_GC_SUCCESS)] AUX_PERF_GC_SUCCESS AuxiliaryPerfBgGcSuccess; + [case(AUX_TYPE_PERF_BG_FAILURE)] AUX_PERF_FAILURE AuxiliaryPerfBgFailure; + [case(AUX_TYPE_PERF_FG_DEFMDB_SUCCESS)] AUX_PERF_DEFMDB_SUCCESS AuxiliaryPerfFgDefmdbSuccess; + [case(AUX_TYPE_PERF_FG_DEFGC_SUCCESS)] AUX_PERF_DEFGC_SUCCESS AuxiliaryPerfFgDefgcSuccess; + [case(AUX_TYPE_PERF_FG_MDB_SUCCESS)] AUX_PERF_MDB_SUCCESS AuxiliaryPerfFgMdbSuccess; + [case(AUX_TYPE_PERF_FG_GC_SUCCESS)] AUX_PERF_GC_SUCCESS AuxiliaryPerFGGCSuccess; + [case(AUX_TYPE_PERF_FG_FAILURE)] AUX_PERF_FAILURE AuxiliaryPerfFgFailure; + [case(AUX_TYPE_OSVERSIONINFO)] AUX_OSVERSIONINFO AuxiliaryOSVersionInfo; + [case(AUX_TYPE_EXORGINFO)] AUX_EXORGINFO AuxiliaryEXOrgInfo; + [default][flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB Payload; + } AuxDataVersion1; + + typedef [public,nodiscriminant,flag(NDR_NOALIGN)] union { + [case(AUX_TYPE_PERF_REQUESTID)] AUX_PERF_REQUESTID AuxiliaryPerfRequestId; + [case(AUX_TYPE_PERF_CLIENTINFO)] AUX_PERF_CLIENTINFO AuxiliaryPerfClientInfo; + [case(AUX_TYPE_PERF_SERVERINFO)] AUX_PERF_SERVERINFO AuxiliaryPerfServerInfo; + [case(AUX_TYPE_PERF_SESSIONINFO_2)] AUX_PERF_SESSIONINFO_V2 AuxiliaryPerfSessioninfo; /* V2 specific */ + [case(AUX_TYPE_PERF_DEFMDB_SUCCESS)] AUX_PERF_DEFMDB_SUCCESS AuxiliaryPerfDefmdbSuccess; + [case(AUX_TYPE_PERF_DEFGC_SUCCESS)] AUX_PERF_DEFGC_SUCCESS AuxiliaryPerfDefgcSuccess; + [case(AUX_TYPE_PERF_MDB_SUCCESS_2)] AUX_PERF_MDB_SUCCESS_V2 AuxiliaryPerfMdbSuccess; /* V2 specific */ + [case(AUX_TYPE_PERF_GC_SUCCESS_2)] AUX_PERF_GC_SUCCESS_V2 AuxiliaryPerfGcSuccess; /* V2 specific */ + [case(AUX_TYPE_PERF_FAILURE_2)] AUX_PERF_FAILURE_V2 AuxiliaryPerfFailure; /* V2 specific*/ + [case(AUX_TYPE_CLIENT_CONTROL)] AUX_CLIENT_CONTROL AuxiliaryPerf; + [case(AUX_TYPE_PERF_PROCESSINFO_2)] AUX_PERF_PROCESSINFO AuxiliaryPerfProcessInfo; + [case(AUX_TYPE_PERF_BG_DEFMDB_SUCCESS)] AUX_PERF_DEFMDB_SUCCESS AuxiliaryPerfBgDefmdbSuccess; + [case(AUX_TYPE_PERF_BG_DEFGC_SUCCESS)] AUX_PERF_DEFGC_SUCCESS AuxiliaryPerfBgDefgcSuccess; + [case(AUX_TYPE_PERF_BG_MDB_SUCCESS_2)] AUX_PERF_MDB_SUCCESS_V2 AuxiliaryPerfBgMdbSuccess; + [case(AUX_TYPE_PERF_BG_GC_SUCCESS_2)] AUX_PERF_GC_SUCCESS AuxiliaryPerfBgGcSuccess; + [case(AUX_TYPE_PERF_BG_FAILURE_2)] AUX_PERF_FAILURE AuxiliaryPerfBgFailure; + [case(AUX_TYPE_PERF_FG_DEFMDB_SUCCESS)] AUX_PERF_DEFMDB_SUCCESS AuxiliaryPerfFgDefmdbSuccess; + [case(AUX_TYPE_PERF_FG_DEFGC_SUCCESS)] AUX_PERF_DEFGC_SUCCESS AuxiliaryPerfFgDefgcSuccess; + [case(AUX_TYPE_PERF_FG_MDB_SUCCESS_2)] AUX_PERF_MDB_SUCCESS AuxiliaryPerfFgMdbSuccess; + [case(AUX_TYPE_PERF_FG_GC_SUCCESS_2)] AUX_PERF_GC_SUCCESS AuxiliaryPerFGGCSuccess; + [case(AUX_TYPE_PERF_FG_FAILURE_2)] AUX_PERF_FAILURE AuxiliaryPerfFgFailure; + [case(AUX_TYPE_OSVERSIONINFO)] AUX_OSVERSIONINFO AuxiliaryOSVersionInfo; + [case(AUX_TYPE_EXORGINFO)] AUX_EXORGINFO AuxiliaryEXOrgInfo; + [default][flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB Payload; + } AuxDataVersion2; + + typedef [public,switch_type(uint8)] union { + [case(AUX_VERSION_1)] AuxDataVersion1 Version1; + [case(AUX_VERSION_2)] AuxDataVersion2 Version2; + [default]; + } AUX_DATA; + + typedef [public,nopull,noprint,flag(NDR_NOALIGN)] struct { + uint16 Size; + AUX_VERSION Version; + + /* Switch based on the version. Not really a union in NDR */ + [switch_is(Version)] AUX_HEADER_TYPE_ENUM hdrType; + + /* Switch based on the version and header type */ + AUX_DATA AuxData ; + } AUX_HEADER; + + typedef [public,bitmap16bit] bitmap { + RHEF_Compressed = 0x0001, + RHEF_XorMagic = 0x0002, + RHEF_Last = 0x0004 + } RPC_HEADER_EXT_Flags; + + typedef [public] struct { + uint16 Version; + RPC_HEADER_EXT_Flags Flags; + uint16 Size; + uint16 SizeActual; + } RPC_HEADER_EXT; + + typedef [public,nopull,noprint] struct { + uint32 auxInSize; + RPC_HEADER_EXT RpcHeaderExtension; + AUX_HEADER auxHeader[0]; /* Plain LZ77 Compressed */ + } AuxInfo; + + typedef [public,nopull,noprint] struct { + RPC_HEADER_EXT RpcHeaderExtension; + AUX_HEADER auxHeader[0]; /* Plain LZ77 Compressed */ + } AuxInfoOut; + + WERROR mapi_EcDoConnectEx( + [out] policy_handle *handle, + [in,string,charset(DOS)] uint8 szUserDN[], + [in] uint32 ulFlags, + [in] uint32 ulConMod, + [in] uint32 cbLimit, + [in] uint32 ulCpid, + [in] uint32 ulLcidString, + [in] uint32 ulLcidSort, + [in] uint32 ulIcxrLink, + [in] uint16 usFCanConvertCodePages, + [out] uint32 *pcmsPollsMax, + [out] uint32 *pcRetry, + [out] uint32 *pcmsRetryDelay, + [out] uint32 *picxr, + [out,unique,ref,string,charset(DOS)]uint8 **szDNPrefix, + [out,unique,ref,string,charset(DOS)]uint8 **szDisplayName, + [in,string] uint8 rgwClientVersion[6], + [out,string] uint8 rgwServerVersion[6], + [out,string] uint8 rgwBestVersion[6], + [in,out] uint32 *pulTimeStamp, + [in,represent_as(4),flag(NDR_NOALIGN|NDR_REMAINING)] AuxInfo *rgbAuxIn, + [in] uint32 cbAuxIn, + [out,size_is(*pcbAuxOut),length_is(0)] AuxInfoOut *rgbAuxOut, + [in,out][range(0,0x1008)] uint32 *pcbAuxOut + ); + + /******************/ + /* Function: 0x0b */ + + typedef [noprint, bitmap32bit] bitmap { + NoCompression = 0x00000001, + NoXorMagic = 0x00000002, + Chain = 0x00000004 + } RpcExt2Flags; + + typedef [public,flag(NDR_NOALIGN)] struct { + ROP_OPNUM RopId; + [switch_is(RopId)] RopRequest u; + } RopInput; + + typedef [public,nopull] struct { + uint16 ropSize; + RopInput rop[0]; + uint32 objectHandles[0]; /* ServerObjectHandleTable */ + } ROPInputBuffer; + + typedef [public,nopull] struct { + RPC_HEADER_EXT RpcHeaderExtension; + [flag(NDR_REMAINING|NDR_NOALIGN)] ROPInputBuffer ropIn; + } RgbIn; + + typedef [public,flag(NDR_NOALIGN)] struct { + ROP_OPNUM RopId; + [switch_is(RopId)] RopReply u; + } RopOutput; + + typedef [public,nopull] struct { + uint16 ropSize; + RopOutput rop[0]; + uint32 objectHandles[0]; /* ServerObjectHandleTable */ + } ROPOutputBuffer; + + typedef [public,nopull] struct { + RPC_HEADER_EXT RpcHeaderExtension; + [flag(NDR_REMAINING|NDR_NOALIGN)] ROPOutputBuffer ropOut; + } RgbOut; + + WERROR mapi_EcDoRpcExt2( + [in, out, ref] policy_handle * pcxh, + [in, out] RpcExt2Flags *pulFlags, + [in, represent_as(4)] RgbIn *rgbIn, + [in] uint32 cbIn, + [out, length_is(*pcbOut), size_is(*pcbOut)] RgbOut *rgbOut, + [in, out] [range(0x0, 0x40000)] uint32 *pcbOut, + [in,represent_as(4),flag(NDR_NOALIGN|NDR_REMAINING)] AuxInfo *rgbAuxIn, + [in] uint32 cbAuxIn, + [out,size_is(*pcbAuxOut),length_is(0)] AuxInfoOut *rgbAuxOut, + [in, out] [range(0x0, 0x1008)] uint32 *pcbAuxOut, + [out] uint32 *pulTransTime + ); + + /******************/ + /* Function: 0x0c */ + WERROR mapi_EcDoAsyncConnect( + [in] policy_handle *cxh, + [out, ref] policy_handle * pacxh + ); + + /******************/ + /* Function: 0x0d */ + WERROR mapi_EcDoAsyncWait( + [in] policy_handle *cxh, + [in] long ulFlagsIn, + [out] long *pulFlagsOut + ); + + /******************/ + /* Function: 0x0e */ + WERROR mapi_EcDoAsyncConnectEx( + [in] policy_handle *cxh, + [out, ref] policy_handle * pacxh + ); +}
\ No newline at end of file diff --git a/epan/dissectors/pidl/mapicodes_enum.h b/epan/dissectors/pidl/mapicodes_enum.h new file mode 100644 index 00000000..ba0d53e7 --- /dev/null +++ b/epan/dissectors/pidl/mapicodes_enum.h @@ -0,0 +1,98 @@ +/* + MAPI Implementation + + OpenChange Project + + Copyright (C) Julien Kerihuel 2006 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* parser auto-generated by mparse */ + +typedef [public, v1_enum, flag(NDR_PAHEX)] enum { + MAPI_E_SUCCESS = 0x00000000, + MAPI_E_NO_SUPPORT = 0x80040102, + MAPI_E_BAD_CHARWIDTH = 0x80040103, + MAPI_E_STRING_TOO_LONG = 0x80040105, + MAPI_E_UNKNOWN_FLAGS = 0x80040106, + MAPI_E_INVALID_ENTRYID = 0x80040107, + MAPI_E_INVALID_OBJECT = 0x80040108, + MAPI_E_OBJECT_CHANGED = 0x80040109, + MAPI_E_OBJECT_DELETED = 0x8004010A, + MAPI_E_BUSY = 0x8004010B, + MAPI_E_NOT_ENOUGH_DISK = 0x8004010D, + MAPI_E_NOT_ENOUGH_RESOURCES = 0x8004010E, + MAPI_E_NOT_FOUND = 0x8004010F, + MAPI_E_VERSION = 0x80040110, + MAPI_E_LOGON_FAILED = 0x80040111, + MAPI_E_SESSION_LIMIT = 0x80040112, + MAPI_E_USER_CANCEL = 0x80040113, + MAPI_E_UNABLE_TO_ABORT = 0x80040114, + MAPI_E_NETWORK_ERROR = 0x80040115, + MAPI_E_DISK_ERROR = 0x80040116, + MAPI_E_TOO_COMPLEX = 0x80040117, + MAPI_E_BAD_COLUMN = 0x80040118, + MAPI_E_EXTENDED_ERROR = 0x80040119, + MAPI_E_COMPUTED = 0x8004011A, + MAPI_E_CORRUPT_DATA = 0x8004011B, + MAPI_E_UNCONFIGURED = 0x8004011C, + MAPI_E_FAILONEPROVIDER = 0x8004011D, + MAPI_E_UNKNOWN_CPID = 0x8004011E, + MAPI_E_UNKNOWN_LCID = 0x8004011F, + MAPI_E_PASSWORD_CHANGE_REQUIRED = 0x80040120, + MAPI_E_PASSWORD_EXPIRED = 0x80040121, + MAPI_E_INVALID_WORKSTATION_ACCOUNT = 0x80040122, + MAPI_E_INVALID_ACCESS_TIME = 0x80040123, + MAPI_E_ACCOUNT_DISABLED = 0x80040124, + MAPI_E_END_OF_SESSION = 0x80040200, + MAPI_E_UNKNOWN_ENTRYID = 0x80040201, + MAPI_E_MISSING_REQUIRED_COLUMN = 0x80040202, + MAPI_W_NO_SERVICE = 0x80040203, + MAPI_E_BAD_VALUE = 0x80040301, + MAPI_E_INVALID_TYPE = 0x80040302, + MAPI_E_TYPE_NO_SUPPORT = 0x80040303, + MAPI_E_UNEXPECTED_TYPE = 0x80040304, + MAPI_E_TOO_BIG = 0x80040305, + MAPI_E_DECLINE_COPY = 0x80040306, + MAPI_E_UNEXPECTED_ID = 0x80040307, + MAPI_W_ERRORS_RETURNED = 0x80040380, + MAPI_E_UNABLE_TO_COMPLETE = 0x80040400, + MAPI_E_TIMEOUT = 0x80040401, + MAPI_E_TABLE_EMPTY = 0x80040402, + MAPI_E_TABLE_TOO_BIG = 0x80040403, + MAPI_E_INVALID_BOOKMARK = 0x80040405, + MAPI_W_POSITION_CHANGED = 0x80040481, + MAPI_W_APPROX_COUNT = 0x80040482, + MAPI_E_WAIT = 0x80040500, + MAPI_E_CANCEL = 0x80040501, + MAPI_E_NOT_ME = 0x80040502, + MAPI_W_CANCEL_MESSAGE = 0x80040580, + MAPI_E_CORRUPT_STORE = 0x80040600, + MAPI_E_NOT_IN_QUEUE = 0x80040601, + MAPI_E_NO_SUPPRESS = 0x80040602, + MAPI_E_COLLISION = 0x80040604, + MAPI_E_NOT_INITIALIZED = 0x80040605, + MAPI_E_NON_STANDARD = 0x80040606, + MAPI_E_NO_RECIPIENTS = 0x80040607, + MAPI_E_SUBMITTED = 0x80040608, + MAPI_E_HAS_FOLDERS = 0x80040609, + MAPI_E_HAS_MESSAGES = 0x8004060A, + MAPI_E_FOLDER_CYCLE = 0x8004060B, + MAPI_W_PARTIAL_COMPLETION = 0x80040680, + MAPI_E_AMBIGUOUS_RECIP = 0x80040700, + MAPI_E_RESERVED = 0xFFFFFFFF +} MAPISTATUS; + diff --git a/epan/dissectors/pidl/mapitags_enum.h b/epan/dissectors/pidl/mapitags_enum.h new file mode 100644 index 00000000..2ca596f1 --- /dev/null +++ b/epan/dissectors/pidl/mapitags_enum.h @@ -0,0 +1,3421 @@ +/* + MAPI Implementation + + OpenChange Project + + Copyright (C) Julien Kerihuel 2006 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + +/* parser auto-generated by mparse */ + +typedef [v1_enum, flag(NDR_PAHEX)] enum { + PR_ACKNOWLEDGEMENT_MODE = 0x00010003, + PR_ACKNOWLEDGEMENT_MODE_ERROR = 0x0001000a, + PR_ALTERNATE_RECIPIENT_ALLOWED = 0x0002000b, + PR_ALTERNATE_RECIPIENT_ALLOWED_ERROR = 0x0002000a, + PR_AUTHORIZING_USERS = 0x00030102, + PR_AUTHORIZING_USERS_ERROR = 0x0003000a, + PR_AUTO_FORWARD_COMMENT = 0x0004001e, + PR_AUTO_FORWARD_COMMENT_UNICODE = 0x0004001f, + PR_AUTO_FORWARD_COMMENT_ERROR = 0x0004000a, + PR_AUTO_FORWARDED = 0x0005000b, + PR_AUTO_FORWARDED_ERROR = 0x0005000a, + PR_CONTENT_CONFIDENTIALITY_ALGORITHM_ID = 0x00060102, + PR_CONTENT_CONFIDENTIALITY_ALGORITHM_ID_ERROR = 0x0006000a, + PR_CONTENT_CORRELATOR = 0x00070102, + PR_CONTENT_CORRELATOR_ERROR = 0x0007000a, + PR_CONTENT_IDENTIFIER = 0x0008001e, + PR_CONTENT_IDENTIFIER_UNICODE = 0x0008001f, + PR_CONTENT_IDENTIFIER_ERROR = 0x0008000a, + PR_CONTENT_LENGTH = 0x00090003, + PR_CONTENT_LENGTH_ERROR = 0x0009000a, + PR_CONTENT_RETURN_REQUESTED = 0x000a000b, + PR_CONTENT_RETURN_REQUESTED_ERROR = 0x000a000a, + PR_CONVERSATION_KEY = 0x000b0102, + PR_CONVERSATION_KEY_ERROR = 0x000b000a, + PR_CONVERSION_EITS = 0x000c0102, + PR_CONVERSION_EITS_ERROR = 0x000c000a, + PR_CONVERSION_WITH_LOSS_PROHIBITED = 0x000d000b, + PR_CONVERSION_WITH_LOSS_PROHIBITED_ERROR = 0x000d000a, + PR_CONVERTED_EITS = 0x000e0102, + PR_CONVERTED_EITS_ERROR = 0x000e000a, + PR_DEFERRED_DELIVERY_TIME = 0x000f0040, + PR_DEFERRED_DELIVERY_TIME_ERROR = 0x000f000a, + PR_DELIVER_TIME = 0x00100040, + PR_DELIVER_TIME_ERROR = 0x0010000a, + PR_DISCARD_REASON = 0x00110003, + PR_DISCARD_REASON_ERROR = 0x0011000a, + PR_DISCLOSURE_OF_RECIPIENTS = 0x0012000b, + PR_DISCLOSURE_OF_RECIPIENTS_ERROR = 0x0012000a, + PR_DL_EXPANSION_HISTORY = 0x00130102, + PR_DL_EXPANSION_HISTORY_ERROR = 0x0013000a, + PR_DL_EXPANSION_PROHIBITED = 0x0014000b, + PR_DL_EXPANSION_PROHIBITED_ERROR = 0x0014000a, + PR_EXPIRY_TIME = 0x00150040, + PR_EXPIRY_TIME_ERROR = 0x0015000a, + PR_IMPLICIT_CONVERSION_PROHIBITED = 0x0016000b, + PR_IMPLICIT_CONVERSION_PROHIBITED_ERROR = 0x0016000a, + PR_IMPORTANCE = 0x00170003, + PR_IMPORTANCE_ERROR = 0x0017000a, + PR_IPM_ID = 0x00180102, + PR_IPM_ID_ERROR = 0x0018000a, + PR_LATEST_DELIVERY_TIME = 0x00190040, + PR_LATEST_DELIVERY_TIME_ERROR = 0x0019000a, + PR_MESSAGE_CLASS = 0x001a001e, + PR_MESSAGE_CLASS_UNICODE = 0x001a001f, + PR_MESSAGE_CLASS_ERROR = 0x001a000a, + PR_MESSAGE_DELIVERY_ID = 0x001b0102, + PR_MESSAGE_DELIVERY_ID_ERROR = 0x001b000a, + PR_MESSAGE_SECURITY_LABEL = 0x001e0102, + PR_MESSAGE_SECURITY_LABEL_ERROR = 0x001e000a, + PR_OBSOLETED_IPMS = 0x001f0102, + PR_OBSOLETED_IPMS_ERROR = 0x001f000a, + PR_ORIGINALLY_INTENDED_RECIPIENT_NAME = 0x00200102, + PR_ORIGINALLY_INTENDED_RECIPIENT_NAME_ERROR = 0x0020000a, + PR_ORIGINAL_EITS = 0x00210102, + PR_ORIGINAL_EITS_ERROR = 0x0021000a, + PR_ORIGINATOR_CERTIFICATE = 0x00220102, + PR_ORIGINATOR_CERTIFICATE_ERROR = 0x0022000a, + PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED = 0x0023000b, + PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED_ERROR = 0x0023000a, + PR_ORIGINATOR_RETURN_ADDRESS = 0x00240102, + PR_ORIGINATOR_RETURN_ADDRESS_ERROR = 0x0024000a, + PR_PARENT_KEY = 0x00250102, + PR_PARENT_KEY_ERROR = 0x0025000a, + PR_PRIORITY = 0x00260003, + PR_PRIORITY_ERROR = 0x0026000a, + PR_ORIGIN_CHECK = 0x00270102, + PR_ORIGIN_CHECK_ERROR = 0x0027000a, + PR_PROOF_OF_SUBMISSION_REQUESTED = 0x0028000b, + PR_PROOF_OF_SUBMISSION_REQUESTED_ERROR = 0x0028000a, + PR_READ_RECEIPT_REQUESTED = 0x0029000b, + PR_READ_RECEIPT_REQUESTED_ERROR = 0x0029000a, + PR_RECEIPT_TIME = 0x002a0040, + PR_RECEIPT_TIME_ERROR = 0x002a000a, + PR_RECIPIENT_REASSIGNMENT_PROHIBITED = 0x002b000b, + PR_RECIPIENT_REASSIGNMENT_PROHIBITED_ERROR = 0x002b000a, + PR_REDIRECTION_HISTORY = 0x002c0102, + PR_REDIRECTION_HISTORY_ERROR = 0x002c000a, + PR_RELATED_IPMS = 0x002d0102, + PR_RELATED_IPMS_ERROR = 0x002d000a, + PR_ORIGINAL_SENSITIVITY = 0x002e0003, + PR_ORIGINAL_SENSITIVITY_ERROR = 0x002e000a, + PR_LANGUAGES = 0x002f001e, + PR_LANGUAGES_UNICODE = 0x002f001f, + PR_LANGUAGES_ERROR = 0x002f000a, + PR_REPLY_TIME = 0x00300040, + PR_REPLY_TIME_ERROR = 0x0030000a, + PR_REPORT_TAG = 0x00310102, + PR_REPORT_TAG_ERROR = 0x0031000a, + PR_REPORT_TIME = 0x00320040, + PR_REPORT_TIME_ERROR = 0x0032000a, + PR_RETURNED_IPM = 0x0033000b, + PR_RETURNED_IPM_ERROR = 0x0033000a, + PR_SECURITY = 0x00340003, + PR_SECURITY_ERROR = 0x0034000a, + PR_INCOMPLETE_COPY = 0x0035000b, + PR_INCOMPLETE_COPY_ERROR = 0x0035000a, + PR_SENSITIVITY = 0x00360003, + PR_SENSITIVITY_ERROR = 0x0036000a, + PR_SUBJECT = 0x0037001e, + PR_SUBJECT_UNICODE = 0x0037001f, + PR_SUBJECT_ERROR = 0x0037000a, + PR_SUBJECT_IPM = 0x00380102, + PR_SUBJECT_IPM_ERROR = 0x0038000a, + PR_CLIENT_SUBMIT_TIME = 0x00390040, + PR_CLIENT_SUBMIT_TIME_ERROR = 0x0039000a, + PR_REPORT_NAME = 0x003a001e, + PR_REPORT_NAME_UNICODE = 0x003a001f, + PR_REPORT_NAME_ERROR = 0x003a000a, + PR_SENT_REPRESENTING_SEARCH_KEY = 0x003b0102, + PR_SENT_REPRESENTING_SEARCH_KEY_ERROR = 0x003b000a, + PR_X400_CONTENT_TYPE = 0x003c0102, + PR_X400_CONTENT_TYPE_ERROR = 0x003c000a, + PR_SUBJECT_PREFIX = 0x003d001e, + PR_SUBJECT_PREFIX_UNICODE = 0x003d001f, + PR_SUBJECT_PREFIX_ERROR = 0x003d000a, + PR_NON_RECEIPT_REASON = 0x003e0003, + PR_NON_RECEIPT_REASON_ERROR = 0x003e000a, + PR_RECEIVED_BY_ENTRYID = 0x003f0102, + PR_RECEIVED_BY_ENTRYID_ERROR = 0x003f000a, + PR_RECEIVED_BY_NAME = 0x0040001e, + PR_RECEIVED_BY_NAME_UNICODE = 0x0040001f, + PR_RECEIVED_BY_NAME_ERROR = 0x0040000a, + PR_SENT_REPRESENTING_ENTRYID = 0x00410102, + PR_SENT_REPRESENTING_ENTRYID_ERROR = 0x0041000a, + PR_SENT_REPRESENTING_NAME = 0x0042001e, + PR_SENT_REPRESENTING_NAME_UNICODE = 0x0042001f, + PR_SENT_REPRESENTING_NAME_ERROR = 0x0042000a, + PR_RCVD_REPRESENTING_ENTRYID = 0x00430102, + PR_RCVD_REPRESENTING_ENTRYID_ERROR = 0x0043000a, + PR_RCVD_REPRESENTING_NAME = 0x0044001e, + PR_RCVD_REPRESENTING_NAME_UNICODE = 0x0044001f, + PR_RCVD_REPRESENTING_NAME_ERROR = 0x0044000a, + PR_REPORT_ENTRYID = 0x00450102, + PR_REPORT_ENTRYID_ERROR = 0x0045000a, + PR_READ_RECEIPT_ENTRYID = 0x00460102, + PR_READ_RECEIPT_ENTRYID_ERROR = 0x0046000a, + PR_MESSAGE_SUBMISSION_ID = 0x00470102, + PR_MESSAGE_SUBMISSION_ID_ERROR = 0x0047000a, + PR_PROVIDER_SUBMIT_TIME = 0x00480040, + PR_PROVIDER_SUBMIT_TIME_ERROR = 0x0048000a, + PR_ORIGINAL_SUBJECT = 0x0049001e, + PR_ORIGINAL_SUBJECT_UNICODE = 0x0049001f, + PR_ORIGINAL_SUBJECT_ERROR = 0x0049000a, + PR_DISC_VAL = 0x004a000b, + PR_DISC_VAL_ERROR = 0x004a000a, + PR_ORIG_MESSAGE_CLASS = 0x004b001e, + PR_ORIG_MESSAGE_CLASS_UNICODE = 0x004b001f, + PR_ORIG_MESSAGE_CLASS_ERROR = 0x004b000a, + PR_ORIGINAL_AUTHOR_ENTRYID = 0x004c0102, + PR_ORIGINAL_AUTHOR_ENTRYID_ERROR = 0x004c000a, + PR_ORIGINAL_AUTHOR_NAME = 0x004d001e, + PR_ORIGINAL_AUTHOR_NAME_UNICODE = 0x004d001f, + PR_ORIGINAL_AUTHOR_NAME_ERROR = 0x004d000a, + PR_ORIGINAL_SUBMIT_TIME = 0x004e0040, + PR_ORIGINAL_SUBMIT_TIME_ERROR = 0x004e000a, + PR_REPLY_RECIPIENT_ENTRIES = 0x004f0102, + PR_REPLY_RECIPIENT_ENTRIES_ERROR = 0x004f000a, + PR_REPLY_RECIPIENT_NAMES = 0x0050001e, + PR_REPLY_RECIPIENT_NAMES_UNICODE = 0x0050001f, + PR_REPLY_RECIPIENT_NAMES_ERROR = 0x0050000a, + PR_RECEIVED_BY_SEARCH_KEY = 0x00510102, + PR_RECEIVED_BY_SEARCH_KEY_ERROR = 0x0051000a, + PR_RCVD_REPRESENTING_SEARCH_KEY = 0x00520102, + PR_RCVD_REPRESENTING_SEARCH_KEY_ERROR = 0x0052000a, + PR_READ_RECEIPT_SEARCH_KEY = 0x00530102, + PR_READ_RECEIPT_SEARCH_KEY_ERROR = 0x0053000a, + PR_REPORT_SEARCH_KEY = 0x00540102, + PR_REPORT_SEARCH_KEY_ERROR = 0x0054000a, + PR_ORIGINAL_DELIVERY_TIME = 0x00550040, + PR_ORIGINAL_DELIVERY_TIME_ERROR = 0x0055000a, + PR_ORIGINAL_AUTHOR_SEARCH_KEY = 0x00560102, + PR_ORIGINAL_AUTHOR_SEARCH_KEY_ERROR = 0x0056000a, + PR_MESSAGE_TO_ME = 0x0057000b, + PR_MESSAGE_TO_ME_ERROR = 0x0057000a, + PR_MESSAGE_CC_ME = 0x0058000b, + PR_MESSAGE_CC_ME_ERROR = 0x0058000a, + PR_MESSAGE_RECIP_ME = 0x0059000b, + PR_MESSAGE_RECIP_ME_ERROR = 0x0059000a, + PR_ORIGINAL_SENDER_NAME = 0x005a001e, + PR_ORIGINAL_SENDER_NAME_UNICODE = 0x005a001f, + PR_ORIGINAL_SENDER_NAME_ERROR = 0x005a000a, + PR_ORIGINAL_SENDER_ENTRYID = 0x005b0102, + PR_ORIGINAL_SENDER_ENTRYID_ERROR = 0x005b000a, + PR_ORIGINAL_SENDER_SEARCH_KEY = 0x005c0102, + PR_ORIGINAL_SENDER_SEARCH_KEY_ERROR = 0x005c000a, + PR_ORIGINAL_SENT_REPRESENTING_NAME = 0x005d001e, + PR_ORIGINAL_SENT_REPRESENTING_NAME_UNICODE = 0x005d001f, + PR_ORIGINAL_SENT_REPRESENTING_NAME_ERROR = 0x005d000a, + PR_ORIGINAL_SENT_REPRESENTING_ENTRYID = 0x005e0102, + PR_ORIGINAL_SENT_REPRESENTING_ENTRYID_ERROR = 0x005e000a, + PR_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY = 0x005f0102, + PR_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY_ERROR = 0x005f000a, + PR_START_DATE = 0x00600040, + PR_START_DATE_ERROR = 0x0060000a, + PR_END_DATE = 0x00610040, + PR_END_DATE_ERROR = 0x0061000a, + PR_OWNER_APPT_ID = 0x00620003, + PR_OWNER_APPT_ID_ERROR = 0x0062000a, + PR_RESPONSE_REQUESTED = 0x0063000b, + PR_RESPONSE_REQUESTED_ERROR = 0x0063000a, + PR_SENT_REPRESENTING_ADDRTYPE = 0x0064001e, + PR_SENT_REPRESENTING_ADDRTYPE_UNICODE = 0x0064001f, + PR_SENT_REPRESENTING_ADDRTYPE_ERROR = 0x0064000a, + PR_SENT_REPRESENTING_EMAIL_ADDRESS = 0x0065001e, + PR_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE = 0x0065001f, + PR_SENT_REPRESENTING_EMAIL_ADDRESS_ERROR = 0x0065000a, + PR_ORIGINAL_SENDER_ADDRTYPE = 0x0066001e, + PR_ORIGINAL_SENDER_ADDRTYPE_UNICODE = 0x0066001f, + PR_ORIGINAL_SENDER_ADDRTYPE_ERROR = 0x0066000a, + PR_ORIGINAL_SENDER_EMAIL_ADDRESS = 0x0067001e, + PR_ORIGINAL_SENDER_EMAIL_ADDRESS_UNICODE = 0x0067001f, + PR_ORIGINAL_SENDER_EMAIL_ADDRESS_ERROR = 0x0067000a, + PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE = 0x0068001e, + PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_UNICODE = 0x0068001f, + PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE_ERROR = 0x0068000a, + PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS = 0x0069001e, + PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_UNICODE = 0x0069001f, + PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS_ERROR = 0x0069000a, + PR_CONVERSATION_TOPIC = 0x0070001e, + PR_CONVERSATION_TOPIC_UNICODE = 0x0070001f, + PR_CONVERSATION_TOPIC_ERROR = 0x0070000a, + PR_CONVERSATION_INDEX = 0x00710102, + PR_CONVERSATION_INDEX_ERROR = 0x0071000a, + PR_ORIGINAL_DISPLAY_BCC = 0x0072001e, + PR_ORIGINAL_DISPLAY_BCC_UNICODE = 0x0072001f, + PR_ORIGINAL_DISPLAY_BCC_ERROR = 0x0072000a, + PR_ORIGINAL_DISPLAY_CC = 0x0073001e, + PR_ORIGINAL_DISPLAY_CC_UNICODE = 0x0073001f, + PR_ORIGINAL_DISPLAY_CC_ERROR = 0x0073000a, + PR_ORIGINAL_DISPLAY_TO = 0x0074001e, + PR_ORIGINAL_DISPLAY_TO_UNICODE = 0x0074001f, + PR_ORIGINAL_DISPLAY_TO_ERROR = 0x0074000a, + PR_RECEIVED_BY_ADDRTYPE = 0x0075001e, + PR_RECEIVED_BY_ADDRTYPE_UNICODE = 0x0075001f, + PR_RECEIVED_BY_ADDRTYPE_ERROR = 0x0075000a, + PR_RECEIVED_BY_EMAIL_ADDRESS = 0x0076001e, + PR_RECEIVED_BY_EMAIL_ADDRESS_UNICODE = 0x0076001f, + PR_RECEIVED_BY_EMAIL_ADDRESS_ERROR = 0x0076000a, + PR_RCVD_REPRESENTING_ADDRTYPE = 0x0077001e, + PR_RCVD_REPRESENTING_ADDRTYPE_UNICODE = 0x0077001f, + PR_RCVD_REPRESENTING_ADDRTYPE_ERROR = 0x0077000a, + PR_RCVD_REPRESENTING_EMAIL_ADDRESS = 0x0078001e, + PR_RCVD_REPRESENTING_EMAIL_ADDRESS_UNICODE = 0x0078001f, + PR_RCVD_REPRESENTING_EMAIL_ADDRESS_ERROR = 0x0078000a, + PR_ORIGINAL_AUTHOR_ADDRTYPE = 0x0079001e, + PR_ORIGINAL_AUTHOR_ADDRTYPE_UNICODE = 0x0079001f, + PR_ORIGINAL_AUTHOR_ADDRTYPE_ERROR = 0x0079000a, + PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS = 0x007a001e, + PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_UNICODE = 0x007a001f, + PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS_ERROR = 0x007a000a, + PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE = 0x007b001e, + PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_UNICODE = 0x007b001f, + PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE_ERROR = 0x007b000a, + PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS = 0x007c001e, + PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_UNICODE = 0x007c001f, + PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS_ERROR = 0x007c000a, + PR_TRANSPORT_MESSAGE_HEADERS = 0x007d001e, + PR_TRANSPORT_MESSAGE_HEADERS_UNICODE = 0x007d001f, + PR_TRANSPORT_MESSAGE_HEADERS_ERROR = 0x007d000a, + PR_DELEGATION = 0x007e0102, + PR_DELEGATION_ERROR = 0x007e000a, + PR_TNEF_CORRELATION_KEY = 0x007f0102, + PR_TNEF_CORRELATION_KEY_ERROR = 0x007f000a, + PR_CONTENT_INTEGRITY_CHECK = 0x0c000102, + PR_CONTENT_INTEGRITY_CHECK_ERROR = 0x0c00000a, + PR_EXPLICIT_CONVERSION = 0x0c010003, + PR_EXPLICIT_CONVERSION_ERROR = 0x0c01000a, + PR_IPM_RETURN_REQUESTED = 0x0c02000b, + PR_IPM_RETURN_REQUESTED_ERROR = 0x0c02000a, + PR_MESSAGE_TOKEN = 0x0c030102, + PR_MESSAGE_TOKEN_ERROR = 0x0c03000a, + PR_NDR_REASON_CODE = 0x0c040003, + PR_NDR_REASON_CODE_ERROR = 0x0c04000a, + PR_NDR_DIAG_CODE = 0x0c050003, + PR_NDR_DIAG_CODE_ERROR = 0x0c05000a, + PR_NON_RECEIPT_NOTIFICATION_REQUESTED = 0x0c06000b, + PR_NON_RECEIPT_NOTIFICATION_REQUESTED_ERROR = 0x0c06000a, + PR_DELIVERY_POINT = 0x0c070003, + PR_DELIVERY_POINT_ERROR = 0x0c07000a, + PR_ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED = 0x0c08000b, + PR_ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED_ERROR = 0x0c08000a, + PR_ORIGINATOR_REQUESTED_ALTERNATE_RECIPIENT = 0x0c090102, + PR_ORIGINATOR_REQUESTED_ALTERNATE_RECIPIENT_ERROR = 0x0c09000a, + PR_PHYSICAL_DELIVERY_BUREAU_FAX_DELIVERY = 0x0c0a000b, + PR_PHYSICAL_DELIVERY_BUREAU_FAX_DELIVERY_ERROR = 0x0c0a000a, + PR_PHYSICAL_DELIVERY_MODE = 0x0c0b0003, + PR_PHYSICAL_DELIVERY_MODE_ERROR = 0x0c0b000a, + PR_PHYSICAL_DELIVERY_REPORT_REQUEST = 0x0c0c0003, + PR_PHYSICAL_DELIVERY_REPORT_REQUEST_ERROR = 0x0c0c000a, + PR_PHYSICAL_FORWARDING_ADDRESS = 0x0c0d0102, + PR_PHYSICAL_FORWARDING_ADDRESS_ERROR = 0x0c0d000a, + PR_PHYSICAL_FORWARDING_ADDRESS_REQUESTED = 0x0c0e000b, + PR_PHYSICAL_FORWARDING_ADDRESS_REQUESTED_ERROR = 0x0c0e000a, + PR_PHYSICAL_FORWARDING_PROHIBITED = 0x0c0f000b, + PR_PHYSICAL_FORWARDING_PROHIBITED_ERROR = 0x0c0f000a, + PR_PHYSICAL_RENDITION_ATTRIBUTES = 0x0c100102, + PR_PHYSICAL_RENDITION_ATTRIBUTES_ERROR = 0x0c10000a, + PR_PROOF_OF_DELIVERY = 0x0c110102, + PR_PROOF_OF_DELIVERY_ERROR = 0x0c11000a, + PR_PROOF_OF_DELIVERY_REQUESTED = 0x0c12000b, + PR_PROOF_OF_DELIVERY_REQUESTED_ERROR = 0x0c12000a, + PR_RECIPIENT_CERTIFICATE = 0x0c130102, + PR_RECIPIENT_CERTIFICATE_ERROR = 0x0c13000a, + PR_RECIPIENT_NUMBER_FOR_ADVICE = 0x0c14001e, + PR_RECIPIENT_NUMBER_FOR_ADVICE_UNICODE = 0x0c14001f, + PR_RECIPIENT_NUMBER_FOR_ADVICE_ERROR = 0x0c14000a, + PR_RECIPIENT_TYPE = 0x0c150003, + PR_RECIPIENT_TYPE_ERROR = 0x0c15000a, + PR_REGISTERED_MAIL_TYPE = 0x0c160003, + PR_REGISTERED_MAIL_TYPE_ERROR = 0x0c16000a, + PR_REPLY_REQUESTED = 0x0c17000b, + PR_REPLY_REQUESTED_ERROR = 0x0c17000a, + PR_REQUESTED_DELIVERY_METHOD = 0x0c180003, + PR_REQUESTED_DELIVERY_METHOD_ERROR = 0x0c18000a, + PR_SENDER_ENTRYID = 0x0c190102, + PR_SENDER_ENTRYID_ERROR = 0x0c19000a, + PR_SENDER_NAME = 0x0c1a001e, + PR_SENDER_NAME_UNICODE = 0x0c1a001f, + PR_SENDER_NAME_ERROR = 0x0c1a000a, + PR_SUPPLEMENTARY_INFO = 0x0c1b001e, + PR_SUPPLEMENTARY_INFO_UNICODE = 0x0c1b001f, + PR_SUPPLEMENTARY_INFO_ERROR = 0x0c1b000a, + PR_TYPE_OF_MTS_USER = 0x0c1c0003, + PR_TYPE_OF_MTS_USER_ERROR = 0x0c1c000a, + PR_SENDER_SEARCH_KEY = 0x0c1d0102, + PR_SENDER_SEARCH_KEY_ERROR = 0x0c1d000a, + PR_SENDER_ADDRTYPE = 0x0c1e001e, + PR_SENDER_ADDRTYPE_UNICODE = 0x0c1e001f, + PR_SENDER_ADDRTYPE_ERROR = 0x0c1e000a, + PR_SENDER_EMAIL_ADDRESS = 0x0c1f001e, + PR_SENDER_EMAIL_ADDRESS_UNICODE = 0x0c1f001f, + PR_SENDER_EMAIL_ADDRESS_ERROR = 0x0c1f000a, + PR_CURRENT_VERSION = 0x0e000014, + PR_CURRENT_VERSION_ERROR = 0x0e00000a, + PR_DELETE_AFTER_SUBMIT = 0x0e01000b, + PR_DELETE_AFTER_SUBMIT_ERROR = 0x0e01000a, + PR_DISPLAY_BCC = 0x0e02001e, + PR_DISPLAY_BCC_UNICODE = 0x0e02001f, + PR_DISPLAY_BCC_ERROR = 0x0e02000a, + PR_DISPLAY_CC = 0x0e03001e, + PR_DISPLAY_CC_UNICODE = 0x0e03001f, + PR_DISPLAY_CC_ERROR = 0x0e03000a, + PR_DISPLAY_TO = 0x0e04001e, + PR_DISPLAY_TO_UNICODE = 0x0e04001f, + PR_DISPLAY_TO_ERROR = 0x0e04000a, + PR_PARENT_DISPLAY = 0x0e05001e, + PR_PARENT_DISPLAY_UNICODE = 0x0e05001f, + PR_PARENT_DISPLAY_ERROR = 0x0e05000a, + PR_MESSAGE_DELIVERY_TIME = 0x0e060040, + PR_MESSAGE_DELIVERY_TIME_ERROR = 0x0e06000a, + PR_MESSAGE_FLAGS = 0x0e070003, + PR_MESSAGE_FLAGS_ERROR = 0x0e07000a, + PR_MESSAGE_SIZE = 0x0e080003, + PR_MESSAGE_SIZE_ERROR = 0x0e08000a, + PR_MESSAGE_SIZE_EXTENDED = 0x0e080014, + PR_PARENT_ENTRYID = 0x0e090102, + PR_PARENT_ENTRYID_ERROR = 0x0e09000a, + PR_SENTMAIL_ENTRYID = 0x0e0a0102, + PR_SENTMAIL_ENTRYID_ERROR = 0x0e0a000a, + PR_CORRELATE = 0x0e0c000b, + PR_CORRELATE_ERROR = 0x0e0c000a, + PR_CORRELATE_MTSID = 0x0e0d0102, + PR_CORRELATE_MTSID_ERROR = 0x0e0d000a, + PR_DISCRETE_VALUES = 0x0e0e000b, + PR_DISCRETE_VALUES_ERROR = 0x0e0e000a, + PR_RESPONSIBILITY = 0x0e0f000b, + PR_RESPONSIBILITY_ERROR = 0x0e0f000a, + PR_SPOOLER_STATUS = 0x0e100003, + PR_SPOOLER_STATUS_ERROR = 0x0e10000a, + PR_TRANSPORT_STATUS = 0x0e110003, + PR_TRANSPORT_STATUS_ERROR = 0x0e11000a, + PR_MESSAGE_RECIPIENTS = 0x0e12000d, + PR_MESSAGE_RECIPIENTS_ERROR = 0x0e12000a, + PR_MESSAGE_ATTACHMENTS = 0x0e13000d, + PR_MESSAGE_ATTACHMENTS_ERROR = 0x0e13000a, + PR_SUBMIT_FLAGS = 0x0e140003, + PR_SUBMIT_FLAGS_ERROR = 0x0e14000a, + PR_RECIPIENT_STATUS = 0x0e150003, + PR_RECIPIENT_STATUS_ERROR = 0x0e15000a, + PR_TRANSPORT_KEY = 0x0e160003, + PR_TRANSPORT_KEY_ERROR = 0x0e16000a, + PR_MSG_STATUS = 0x0e170003, + PR_MSG_STATUS_ERROR = 0x0e17000a, + PR_MESSAGE_DOWNLOAD_TIME = 0x0e180003, + PR_MESSAGE_DOWNLOAD_TIME_ERROR = 0x0e18000a, + PR_CREATION_VERSION = 0x0e190014, + PR_CREATION_VERSION_ERROR = 0x0e19000a, + PR_MODIFY_VERSION = 0x0e1a0014, + PR_MODIFY_VERSION_ERROR = 0x0e1a000a, + PR_HASATTACH = 0x0e1b000b, + PR_HASATTACH_ERROR = 0x0e1b000a, + PR_BODY_CRC = 0x0e1c0003, + PR_BODY_CRC_ERROR = 0x0e1c000a, + PR_NORMALIZED_SUBJECT = 0x0e1d001e, + PR_NORMALIZED_SUBJECT_UNICODE = 0x0e1d001f, + PR_NORMALIZED_SUBJECT_ERROR = 0x0e1d000a, + PR_RTF_IN_SYNC = 0x0e1f000b, + PR_RTF_IN_SYNC_ERROR = 0x0e1f000a, + PR_ATTACH_SIZE = 0x0e200003, + PR_ATTACH_SIZE_ERROR = 0x0e20000a, + PR_ATTACH_NUM = 0x0e210003, + PR_ATTACH_NUM_ERROR = 0x0e21000a, + PR_PREPROCESS = 0x0e22000b, + PR_PREPROCESS_ERROR = 0x0e22000a, + PR_INTERNET_ARTICLE_NUMBER = 0x0e230003, + PR_INTERNET_ARTICLE_NUMBER_ERROR = 0x0e23000a, + PR_NEWSGROUP_NAME = 0x0e24001e, + PR_NEWSGROUP_NAME_UNICODE = 0x0e24001f, + PR_NEWSGROUP_NAME_ERROR = 0x0e24000a, + PR_ORIGINATING_MTA_CERTIFICATE = 0x0e250102, + PR_ORIGINATING_MTA_CERTIFICATE_ERROR = 0x0e25000a, + PR_PROOF_OF_SUBMISSION = 0x0e260102, + PR_PROOF_OF_SUBMISSION_ERROR = 0x0e26000a, + PR_NT_SECURITY_DESCRIPTOR = 0x0e270102, + PR_NT_SECURITY_DESCRIPTOR_ERROR = 0x0e27000a, + PR_CREATOR_SID = 0x0e580102, + PR_CREATOR_SID_ERROR = 0x0e58000a, + PR_LAST_MODIFIER_SID = 0x0e590102, + PR_LAST_MODIFIER_SID_ERROR = 0x0e59000a, + PR_MIME_HANDLER_CLASSIDS = 0x0e5e0048, + PR_MIME_HANDLER_CLASSIDS_ERROR = 0x0e5e000a, + PR_URL_COMP_NAME_POSTFIX = 0x0e610003, + PR_URL_COMP_NAME_POSTFIX_ERROR = 0x0e61000a, + PR_URL_COMP_NAME_SET = 0x0e62000b, + PR_URL_COMP_NAME_SET_ERROR = 0x0e62000a, + PR_SUBFOLDER_CT = 0x0e630003, + PR_SUBFOLDER_CT_ERROR = 0x0e63000a, + PR_DELETED_SUBFOLDER_CT = 0x0e640003, + PR_DELETED_SUBFOLDER_CT_ERROR = 0x0e64000a, + PR_DELETE_TIME = 0x0e660040, + PR_DELETE_TIME_ERROR = 0x0e66000a, + PR_AGE_LIMIT = 0x0e670102, + PR_AGE_LIMIT_ERROR = 0x0e67000a, + PR_TRUST_SENDER = 0x0e790003, + PR_TRUST_SENDER_ERROR = 0x0e79000a, + PR_ATTACH_VIRUS_SCAN_INFO = 0x0e960102, + PR_ATTACH_VIRUS_SCAN_INFO_ERROR = 0x0e96000a, + PR_ACCESS = 0x0ff40003, + PR_ACCESS_ERROR = 0x0ff4000a, + PR_ROW_TYPE = 0x0ff50003, + PR_ROW_TYPE_ERROR = 0x0ff5000a, + PR_INSTANCE_KEY = 0x0ff60102, + PR_INSTANCE_KEY_ERROR = 0x0ff6000a, + PR_ACCESS_LEVEL = 0x0ff70003, + PR_ACCESS_LEVEL_ERROR = 0x0ff7000a, + PR_MAPPING_SIGNATURE = 0x0ff80102, + PR_MAPPING_SIGNATURE_ERROR = 0x0ff8000a, + PR_RECORD_KEY = 0x0ff90102, + PR_RECORD_KEY_ERROR = 0x0ff9000a, + PR_STORE_RECORD_KEY = 0x0ffa0102, + PR_STORE_RECORD_KEY_ERROR = 0x0ffa000a, + PR_STORE_ENTRYID = 0x0ffb0102, + PR_STORE_ENTRYID_ERROR = 0x0ffb000a, + PR_MINI_ICON = 0x0ffc0102, + PR_MINI_ICON_ERROR = 0x0ffc000a, + PR_ICON = 0x0ffd0102, + PR_ICON_ERROR = 0x0ffd000a, + PR_OBJECT_TYPE = 0x0ffe0003, + PR_OBJECT_TYPE_ERROR = 0x0ffe000a, + PR_ENTRYID = 0x0fff0102, + PR_ENTRYID_ERROR = 0x0fff000a, + PR_BODY = 0x1000001e, + PR_BODY_UNICODE = 0x1000001f, + PR_BODY_ERROR = 0x1000000a, + PR_REPORT_TEXT = 0x1001001e, + PR_REPORT_TEXT_UNICODE = 0x1001001f, + PR_REPORT_TEXT_ERROR = 0x1001000a, + PR_ORIGINATOR_AND_DL_EXPANSION_HISTORY = 0x10020102, + PR_ORIGINATOR_AND_DL_EXPANSION_HISTORY_ERROR = 0x1002000a, + PR_REPORTING_DL_NAME = 0x10030102, + PR_REPORTING_DL_NAME_ERROR = 0x1003000a, + PR_REPORTING_MTA_CERTIFICATE = 0x10040102, + PR_REPORTING_MTA_CERTIFICATE_ERROR = 0x1004000a, + PR_RTF_SYNC_BODY_CRC = 0x10060003, + PR_RTF_SYNC_BODY_CRC_ERROR = 0x1006000a, + PR_RTF_SYNC_BODY_COUNT = 0x10070003, + PR_RTF_SYNC_BODY_COUNT_ERROR = 0x1007000a, + PR_RTF_SYNC_BODY_TAG = 0x1008001e, + PR_RTF_SYNC_BODY_TAG_UNICODE = 0x1008001f, + PR_RTF_SYNC_BODY_TAG_ERROR = 0x1008000a, + PR_RTF_COMPRESSED = 0x10090102, + PR_RTF_COMPRESSED_ERROR = 0x1009000a, + PR_RTF_SYNC_PREFIX_COUNT = 0x10100003, + PR_RTF_SYNC_PREFIX_COUNT_ERROR = 0x1010000a, + PR_RTF_SYNC_TRAILING_COUNT = 0x10110003, + PR_RTF_SYNC_TRAILING_COUNT_ERROR = 0x1011000a, + PR_ORIGINALLY_INTENDED_RECIP_ENTRYID = 0x10120102, + PR_ORIGINALLY_INTENDED_RECIP_ENTRYID_ERROR = 0x1012000a, + PR_HTML = 0x10130102, + PR_HTML_ERROR = 0x1013000a, + PR_INTERNET_APPROVED = 0x1030001e, + PR_INTERNET_APPROVED_UNICODE = 0x1030001f, + PR_INTERNET_APPROVED_ERROR = 0x1030000a, + PR_INTERNET_CONTROL = 0x1031001e, + PR_INTERNET_CONTROL_UNICODE = 0x1031001f, + PR_INTERNET_CONTROL_ERROR = 0x1031000a, + PR_INTERNET_DISTRIBUTION = 0x1032001e, + PR_INTERNET_DISTRIBUTION_UNICODE = 0x1032001f, + PR_INTERNET_DISTRIBUTION_ERROR = 0x1032000a, + PR_INTERNET_FOLLOWUP_TO = 0x1033001e, + PR_INTERNET_FOLLOWUP_TO_UNICODE = 0x1033001f, + PR_INTERNET_FOLLOWUP_TO_ERROR = 0x1033000a, + PR_INTERNET_LINES = 0x10340003, + PR_INTERNET_LINES_ERROR = 0x1034000a, + PR_INTERNET_MESSAGE_ID = 0x1035001e, + PR_INTERNET_MESSAGE_ID_UNICODE = 0x1035001f, + PR_INTERNET_MESSAGE_ID_ERROR = 0x1035000a, + PR_INTERNET_NEWSGROUPS = 0x1036001e, + PR_INTERNET_NEWSGROUPS_UNICODE = 0x1036001f, + PR_INTERNET_NEWSGROUPS_ERROR = 0x1036000a, + PR_INTERNET_ORGANIZATION = 0x1037001e, + PR_INTERNET_ORGANIZATION_UNICODE = 0x1037001f, + PR_INTERNET_ORGANIZATION_ERROR = 0x1037000a, + PR_INTERNET_NNTP_PATH = 0x1038001e, + PR_INTERNET_NNTP_PATH_UNICODE = 0x1038001f, + PR_INTERNET_NNTP_PATH_ERROR = 0x1038000a, + PR_INTERNET_REFERENCES = 0x1039001e, + PR_INTERNET_REFERENCES_UNICODE = 0x1039001f, + PR_INTERNET_REFERENCES_ERROR = 0x1039000a, + PR_SUPERSEDES = 0x103a001e, + PR_SUPERSEDES_UNICODE = 0x103a001f, + PR_SUPERSEDES_ERROR = 0x103a000a, + PR_POST_FOLDER_ENTRIES = 0x103b0102, + PR_POST_FOLDER_ENTRIES_ERROR = 0x103b000a, + PR_POST_FOLDER_NAMES = 0x103c001e, + PR_POST_FOLDER_NAMES_UNICODE = 0x103c001f, + PR_POST_FOLDER_NAMES_ERROR = 0x103c000a, + PR_POST_REPLY_FOLDER_ENTRIES = 0x103d0102, + PR_POST_REPLY_FOLDER_ENTRIES_ERROR = 0x103d000a, + PR_POST_REPLY_FOLDER_NAMES = 0x103e001e, + PR_POST_REPLY_FOLDER_NAMES_UNICODE = 0x103e001f, + PR_POST_REPLY_FOLDER_NAMES_ERROR = 0x103e000a, + PR_POST_REPLY_DENIED = 0x103f0102, + PR_POST_REPLY_DENIED_ERROR = 0x103f000a, + PR_NNTP_XREF = 0x1040001e, + PR_NNTP_XREF_UNICODE = 0x1040001f, + PR_NNTP_XREF_ERROR = 0x1040000a, + PR_INTERNET_PRECEDENCE = 0x1041001e, + PR_INTERNET_PRECEDENCE_UNICODE = 0x1041001f, + PR_INTERNET_PRECEDENCE_ERROR = 0x1041000a, + PR_IN_REPLY_TO_ID = 0x1042001e, + PR_IN_REPLY_TO_ID_UNICODE = 0x1042001f, + PR_IN_REPLY_TO_ID_ERROR = 0x1042000a, + PR_LIST_HELP = 0x1043001e, + PR_LIST_HELP_UNICODE = 0x1043001f, + PR_LIST_HELP_ERROR = 0x1043000a, + PR_LIST_SUBSCRIBE = 0x1044001e, + PR_LIST_SUBSCRIBE_UNICODE = 0x1044001f, + PR_LIST_SUBSCRIBE_ERROR = 0x1044000a, + PR_LIST_UNSUBSCRIBE = 0x1045001e, + PR_LIST_UNSUBSCRIBE_UNICODE = 0x1045001f, + PR_LIST_UNSUBSCRIBE_ERROR = 0x1045000a, + PR_ACTION = 0x10800003, + PR_ACTION_ERROR = 0x1080000a, + PR_ACTION_FLAG = 0x10810003, + PR_ACTION_FLAG_ERROR = 0x1081000a, + PR_ACTION_DATE = 0x10820040, + PR_ACTION_DATE_ERROR = 0x1082000a, + PR_FLAG_STATUS = 0x10900003, + PR_FLAG_STATUS_ERROR = 0x1090000a, + PR_FLAG_COMPLETE = 0x10910040, + PR_FLAG_COMPLETE_ERROR = 0x1091000a, + PR_SMTP_TEMP_TBL_DATA = 0x10c00102, + PR_SMTP_TEMP_TBL_DATA_ERROR = 0x10c0000a, + PR_SMTP_TEMP_TBL_DATA_2 = 0x10c10003, + PR_SMTP_TEMP_TBL_DATA_2_ERROR = 0x10c1000a, + PR_SMTP_TEMP_TBL_DATA_3 = 0x10c20102, + PR_SMTP_TEMP_TBL_DATA_3_ERROR = 0x10c2000a, + PR_CAL_START_TIME = 0x10c30040, + PR_CAL_START_TIME_ERROR = 0x10c3000a, + PR_CAL_END_TIME = 0x10c40040, + PR_CAL_END_TIME_ERROR = 0x10c4000a, + PR_CAL_RECURRING_ID = 0x10c50040, + PR_CAL_RECURRING_ID_ERROR = 0x10c5000a, + PR_DAV_SUBMIT_DATA = 0x10c6001e, + PR_DAV_SUBMIT_DATA_UNICODE = 0x10c6001f, + PR_DAV_SUBMIT_DATA_ERROR = 0x10c6000a, + PR_CDO_EXPANSION_INDEX = 0x10c70003, + PR_CDO_EXPANSION_INDEX_ERROR = 0x10c7000a, + PR_IFS_INTERNAL_DATA = 0x10c80102, + PR_IFS_INTERNAL_DATA_ERROR = 0x10c8000a, + PR_CAL_REMINDER_NEXT_TIME = 0x10ca0040, + PR_CAL_REMINDER_NEXT_TIME_ERROR = 0x10ca000a, + PR_OWA_URL = 0x10f1001e, + PR_OWA_URL_UNICODE = 0x10f1001f, + PR_OWA_URL_ERROR = 0x10f1000a, + PR_DISABLE_FULL_FIDELITY = 0x10f2000b, + PR_DISABLE_FULL_FIDELITY_ERROR = 0x10f2000a, + PR_URL_COMP_NAME = 0x10f3001e, + PR_URL_COMP_NAME_UNICODE = 0x10f3001f, + PR_URL_COMP_NAME_ERROR = 0x10f3000a, + PR_ATTR_HIDDEN = 0x10f4000b, + PR_ATTR_HIDDEN_ERROR = 0x10f4000a, + PR_ATTR_SYSTEM = 0x10f5000b, + PR_ATTR_SYSTEM_ERROR = 0x10f5000a, + PR_ATTR_READONLY = 0x10f6000b, + PR_ATTR_READONLY_ERROR = 0x10f6000a, + PR_P1_CONTENT = 0x11000102, + PR_P1_CONTENT_ERROR = 0x1100000a, + PR_P1_CONTENT_TYPE = 0x11010102, + PR_P1_CONTENT_TYPE_ERROR = 0x1101000a, + PR_ROWID = 0x30000003, + PR_ROWID_ERROR = 0x3000000a, + PR_DISPLAY_NAME = 0x3001001e, + PR_DISPLAY_NAME_UNICODE = 0x3001001f, + PR_DISPLAY_NAME_ERROR = 0x3001000a, + PR_ADDRTYPE = 0x3002001e, + PR_ADDRTYPE_UNICODE = 0x3002001f, + PR_ADDRTYPE_ERROR = 0x3002000a, + PR_EMAIL_ADDRESS = 0x3003001e, + PR_EMAIL_ADDRESS_UNICODE = 0x3003001f, + PR_EMAIL_ADDRESS_ERROR = 0x3003000a, + PR_COMMENT = 0x3004001e, + PR_COMMENT_UNICODE = 0x3004001f, + PR_COMMENT_ERROR = 0x3004000a, + PR_DEPTH = 0x30050003, + PR_DEPTH_ERROR = 0x3005000a, + PR_PROVIDER_DISPLAY = 0x3006001e, + PR_PROVIDER_DISPLAY_UNICODE = 0x3006001f, + PR_PROVIDER_DISPLAY_ERROR = 0x3006000a, + PR_CREATION_TIME = 0x30070040, + PR_CREATION_TIME_ERROR = 0x3007000a, + PR_LAST_MODIFICATION_TIME = 0x30080040, + PR_LAST_MODIFICATION_TIME_ERROR = 0x3008000a, + PR_RESOURCE_FLAGS = 0x30090003, + PR_RESOURCE_FLAGS_ERROR = 0x3009000a, + PR_PROVIDER_DLL_NAME = 0x300a001e, + PR_PROVIDER_DLL_NAME_UNICODE = 0x300a001f, + PR_PROVIDER_DLL_NAME_ERROR = 0x300a000a, + PR_SEARCH_KEY = 0x300b0102, + PR_SEARCH_KEY_ERROR = 0x300b000a, + PR_PROVIDER_UID = 0x300c0102, + PR_PROVIDER_UID_ERROR = 0x300c000a, + PR_PROVIDER_ORDINAL = 0x300d0003, + PR_PROVIDER_ORDINAL_ERROR = 0x300d000a, + PR_FORM_VERSION = 0x3301001e, + PR_FORM_VERSION_UNICODE = 0x3301001f, + PR_FORM_VERSION_ERROR = 0x3301000a, + PR_FORM_CLSID = 0x33020048, + PR_FORM_CLSID_ERROR = 0x3302000a, + PR_FORM_CONTACT_NAME = 0x3303001e, + PR_FORM_CONTACT_NAME_UNICODE = 0x3303001f, + PR_FORM_CONTACT_NAME_ERROR = 0x3303000a, + PR_FORM_CATEGORY = 0x3304001e, + PR_FORM_CATEGORY_UNICODE = 0x3304001f, + PR_FORM_CATEGORY_ERROR = 0x3304000a, + PR_FORM_CATEGORY_SUB = 0x3305001e, + PR_FORM_CATEGORY_SUB_UNICODE = 0x3305001f, + PR_FORM_CATEGORY_SUB_ERROR = 0x3305000a, + PR_FORM_HOST_MAP = 0x33061003, + PR_FORM_HOST_MAP_ERROR = 0x3306000a, + PR_FORM_HIDDEN = 0x3307000b, + PR_FORM_HIDDEN_ERROR = 0x3307000a, + PR_FORM_DESIGNER_NAME = 0x3308001e, + PR_FORM_DESIGNER_NAME_UNICODE = 0x3308001f, + PR_FORM_DESIGNER_NAME_ERROR = 0x3308000a, + PR_FORM_DESIGNER_GUID = 0x33090048, + PR_FORM_DESIGNER_GUID_ERROR = 0x3309000a, + PR_FORM_MESSAGE_BEHAVIOR = 0x330a0003, + PR_FORM_MESSAGE_BEHAVIOR_ERROR = 0x330a000a, + PR_DEFAULT_STORE = 0x3400000b, + PR_DEFAULT_STORE_ERROR = 0x3400000a, + PR_STORE_SUPPORT_MASK = 0x340d0003, + PR_STORE_SUPPORT_MASK_ERROR = 0x340d000a, + PR_STORE_STATE = 0x340e0003, + PR_STORE_STATE_ERROR = 0x340e000a, + PR_IPM_SUBTREE_SEARCH_KEY = 0x34100102, + PR_IPM_SUBTREE_SEARCH_KEY_ERROR = 0x3410000a, + PR_IPM_OUTBOX_SEARCH_KEY = 0x34110102, + PR_IPM_OUTBOX_SEARCH_KEY_ERROR = 0x3411000a, + PR_IPM_WASTEBASKET_SEARCH_KEY = 0x34120102, + PR_IPM_WASTEBASKET_SEARCH_KEY_ERROR = 0x3412000a, + PR_IPM_SENTMAIL_SEARCH_KEY = 0x34130102, + PR_IPM_SENTMAIL_SEARCH_KEY_ERROR = 0x3413000a, + PR_MDB_PROVIDER = 0x34140102, + PR_MDB_PROVIDER_ERROR = 0x3414000a, + PR_RECEIVE_FOLDER_SETTINGS = 0x3415000d, + PR_RECEIVE_FOLDER_SETTINGS_ERROR = 0x3415000a, + PR_VALID_FOLDER_MASK = 0x35df0003, + PR_VALID_FOLDER_MASK_ERROR = 0x35df000a, + PR_IPM_SUBTREE_ENTRYID = 0x35e00102, + PR_IPM_SUBTREE_ENTRYID_ERROR = 0x35e0000a, + PR_IPM_OUTBOX_ENTRYID = 0x35e20102, + PR_IPM_OUTBOX_ENTRYID_ERROR = 0x35e2000a, + PR_IPM_WASTEBASKET_ENTRYID = 0x35e30102, + PR_IPM_WASTEBASKET_ENTRYID_ERROR = 0x35e3000a, + PR_IPM_SENTMAIL_ENTRYID = 0x35e40102, + PR_IPM_SENTMAIL_ENTRYID_ERROR = 0x35e4000a, + PR_VIEWS_ENTRYID = 0x35e50102, + PR_VIEWS_ENTRYID_ERROR = 0x35e5000a, + PR_COMMON_VIEWS_ENTRYID = 0x35e60102, + PR_COMMON_VIEWS_ENTRYID_ERROR = 0x35e6000a, + PR_FINDER_ENTRYID = 0x35e70102, + PR_FINDER_ENTRYID_ERROR = 0x35e7000a, + PR_CONTAINER_FLAGS = 0x36000003, + PR_CONTAINER_FLAGS_ERROR = 0x3600000a, + PR_FOLDER_TYPE = 0x36010003, + PR_FOLDER_TYPE_ERROR = 0x3601000a, + PR_CONTENT_COUNT = 0x36020003, + PR_CONTENT_COUNT_ERROR = 0x3602000a, + PR_CONTENT_UNREAD = 0x36030003, + PR_CONTENT_UNREAD_ERROR = 0x3603000a, + PR_CREATE_TEMPLATES = 0x3604000d, + PR_CREATE_TEMPLATES_ERROR = 0x3604000a, + PR_DETAILS_TABLE = 0x3605000d, + PR_DETAILS_TABLE_ERROR = 0x3605000a, + PR_SEARCH = 0x3607000d, + PR_SEARCH_ERROR = 0x3607000a, + PR_SELECTABLE = 0x3609000b, + PR_SELECTABLE_ERROR = 0x3609000a, + PR_SUBFOLDERS = 0x360a000b, + PR_SUBFOLDERS_ERROR = 0x360a000a, + PR_STATUS = 0x360b0003, + PR_STATUS_ERROR = 0x360b000a, + PR_ANR = 0x360c001e, + PR_ANR_UNICODE = 0x360c001f, + PR_ANR_ERROR = 0x360c000a, + PR_CONTENTS_SORT_ORDER = 0x360d1003, + PR_CONTENTS_SORT_ORDER_ERROR = 0x360d000a, + PR_CONTAINER_HIERARCHY = 0x360e000d, + PR_CONTAINER_HIERARCHY_ERROR = 0x360e000a, + PR_CONTAINER_CONTENTS = 0x360f000d, + PR_CONTAINER_CONTENTS_ERROR = 0x360f000a, + PR_FOLDER_ASSOCIATED_CONTENTS = 0x3610000d, + PR_FOLDER_ASSOCIATED_CONTENTS_ERROR = 0x3610000a, + PR_DEF_CREATE_DL = 0x36110102, + PR_DEF_CREATE_DL_ERROR = 0x3611000a, + PR_DEF_CREATE_MAILUSER = 0x36120102, + PR_DEF_CREATE_MAILUSER_ERROR = 0x3612000a, + PR_CONTAINER_CLASS = 0x3613001e, + PR_CONTAINER_CLASS_UNICODE = 0x3613001f, + PR_CONTAINER_CLASS_ERROR = 0x3613000a, + PR_CONTAINER_MODIFY_VERSION = 0x36140014, + PR_CONTAINER_MODIFY_VERSION_ERROR = 0x3614000a, + PR_AB_PROVIDER_ID = 0x36150102, + PR_AB_PROVIDER_ID_ERROR = 0x3615000a, + PR_DEFAULT_VIEW_ENTRYID = 0x36160102, + PR_DEFAULT_VIEW_ENTRYID_ERROR = 0x3616000a, + PR_ASSOC_CONTENT_COUNT = 0x36170003, + PR_ASSOC_CONTENT_COUNT_ERROR = 0x3617000a, + PR_PACKED_NAME_PROPS = 0x361c0102, + PR_PACKED_NAME_PROPS_ERROR = 0x361c000a, + PR_IPM_APPOINTMENT_ENTRYID = 0x36d00102, + PR_IPM_APPOINTMENT_ENTRYID_ERROR = 0x36d0000a, + PR_IPM_CONTACT_ENTRYID = 0x36d10102, + PR_IPM_CONTACT_ENTRYID_ERROR = 0x36d1000a, + PR_IPM_JOURNAL_ENTRYID = 0x36d20102, + PR_IPM_JOURNAL_ENTRYID_ERROR = 0x36d2000a, + PR_IPM_NOTE_ENTRYID = 0x36d30102, + PR_IPM_NOTE_ENTRYID_ERROR = 0x36d3000a, + PR_IPM_TASK_ENTRYID = 0x36d40102, + PR_IPM_TASK_ENTRYID_ERROR = 0x36d4000a, + PR_REMINDERS_ONLINE_ENTRYID = 0x36d50102, + PR_REMINDERS_ONLINE_ENTRYID_ERROR = 0x36d5000a, + PR_REMINDERS_OFFLINE_ENTRYID = 0x36d60102, + PR_REMINDERS_OFFLINE_ENTRYID_ERROR = 0x36d6000a, + PR_IPM_DRAFTS_ENTRYID = 0x36d70102, + PR_IPM_DRAFTS_ENTRYID_ERROR = 0x36d7000a, + PR_OUTLOOK_2003_ENTRYIDS = 0x36d81102, + PR_OUTLOOK_2003_ENTRYIDS_ERROR = 0x36d8000a, + PR_FOLDER_WEBVIEWINFO = 0x36df0102, + PR_FOLDER_WEBVIEWINFO_ERROR = 0x36df000a, + PR_FOLDER_XVIEWINFO_E = 0x36e00102, + PR_FOLDER_XVIEWINFO_E_ERROR = 0x36e0000a, + PR_FOLDER_VIEWS_ONLY = 0x36e10003, + PR_FOLDER_VIEWS_ONLY_ERROR = 0x36e1000a, + PR_FREEBUSY_ENTRYIDS = 0x36e41102, + PR_FREEBUSY_ENTRYIDS_ERROR = 0x36e4000a, + PR_DEF_MSG_CLASS = 0x36e5001e, + PR_DEF_MSG_CLASS_UNICODE = 0x36e5001f, + PR_DEF_MSG_CLASS_ERROR = 0x36e5000a, + PR_DEF_FORM_NAME = 0x36e6001e, + PR_DEF_FORM_NAME_UNICODE = 0x36e6001f, + PR_DEF_FORM_NAME_ERROR = 0x36e6000a, + PR_GENERATE_EXCHANGE_VIEWS = 0x36e9000b, + PR_GENERATE_EXCHANGE_VIEWS_ERROR = 0x36e9000a, + PR_AGING_PERIOD = 0x36ec0003, + PR_AGING_PERIOD_ERROR = 0x36ec000a, + PR_AGING_GRANULARITY = 0x36ee0003, + PR_AGING_GRANULARITY_ERROR = 0x36ee000a, + PR_ATTACHMENT_X400_PARAMETERS = 0x37000102, + PR_ATTACHMENT_X400_PARAMETERS_ERROR = 0x3700000a, + PR_ATTACH_DATA_OBJ = 0x3701000d, + PR_ATTACH_DATA_OBJ_ERROR = 0x3701000a, + PR_ATTACH_DATA_BIN = 0x37010102, + PR_ATTACH_ENCODING = 0x37020102, + PR_ATTACH_ENCODING_ERROR = 0x3702000a, + PR_ATTACH_EXTENSION = 0x3703001e, + PR_ATTACH_EXTENSION_UNICODE = 0x3703001f, + PR_ATTACH_EXTENSION_ERROR = 0x3703000a, + PR_ATTACH_FILENAME = 0x3704001e, + PR_ATTACH_FILENAME_UNICODE = 0x3704001f, + PR_ATTACH_FILENAME_ERROR = 0x3704000a, + PR_ATTACH_METHOD = 0x37050003, + PR_ATTACH_METHOD_ERROR = 0x3705000a, + PR_ATTACH_LONG_FILENAME = 0x3707001e, + PR_ATTACH_LONG_FILENAME_UNICODE = 0x3707001f, + PR_ATTACH_LONG_FILENAME_ERROR = 0x3707000a, + PR_ATTACH_PATHNAME = 0x3708001e, + PR_ATTACH_PATHNAME_UNICODE = 0x3708001f, + PR_ATTACH_PATHNAME_ERROR = 0x3708000a, + PR_ATTACH_RENDERING = 0x37090102, + PR_ATTACH_RENDERING_ERROR = 0x3709000a, + PR_ATTACH_TAG = 0x370a0102, + PR_ATTACH_TAG_ERROR = 0x370a000a, + PR_RENDERING_POSITION = 0x370b0003, + PR_RENDERING_POSITION_ERROR = 0x370b000a, + PR_ATTACH_TRANSPORT_NAME = 0x370c001e, + PR_ATTACH_TRANSPORT_NAME_UNICODE = 0x370c001f, + PR_ATTACH_TRANSPORT_NAME_ERROR = 0x370c000a, + PR_ATTACH_LONG_PATHNAME = 0x370d001e, + PR_ATTACH_LONG_PATHNAME_UNICODE = 0x370d001f, + PR_ATTACH_LONG_PATHNAME_ERROR = 0x370d000a, + PR_ATTACH_MIME_TAG = 0x370e001e, + PR_ATTACH_MIME_TAG_UNICODE = 0x370e001f, + PR_ATTACH_MIME_TAG_ERROR = 0x370e000a, + PR_ATTACH_ADDITIONAL_INFO = 0x370f0102, + PR_ATTACH_ADDITIONAL_INFO_ERROR = 0x370f000a, + PR_ATTACH_CONTENT_ID = 0x3712001e, + PR_ATTACH_CONTENT_ID_UNICODE = 0x3712001f, + PR_ATTACH_CONTENT_ID_ERROR = 0x3712000a, + PR_ATTACH_CONTENT_LOCATION = 0x3713001e, + PR_ATTACH_CONTENT_LOCATION_UNICODE = 0x3713001f, + PR_ATTACH_CONTENT_LOCATION_ERROR = 0x3713000a, + PR_ATTACH_FLAGS = 0x37140003, + PR_ATTACH_FLAGS_ERROR = 0x3714000a, + PR_ATTACH_CONTENT_DISPOSITION = 0x3716001e, + PR_ATTACH_CONTENT_DISPOSITION_UNICODE = 0x3716001f, + PR_ATTACH_CONTENT_DISPOSITION_ERROR = 0x3716000a, + PR_SYNCEVENT_SUPPRESS_GUID = 0x38800102, + PR_SYNCEVENT_SUPPRESS_GUID_ERROR = 0x3880000a, + PR_DISPLAY_TYPE = 0x39000003, + PR_DISPLAY_TYPE_ERROR = 0x3900000a, + PR_TEMPLATEID = 0x39020102, + PR_TEMPLATEID_ERROR = 0x3902000a, + PR_PRIMARY_CAPABILITY = 0x39040102, + PR_PRIMARY_CAPABILITY_ERROR = 0x3904000a, + PR_SMTP_ADDRESS = 0x39fe001e, + PR_SMTP_ADDRESS_UNICODE = 0x39fe001f, + PR_SMTP_ADDRESS_ERROR = 0x39fe000a, + PR_7BIT_DISPLAY_NAME = 0x39ff001e, + PR_7BIT_DISPLAY_NAME_UNICODE = 0x39ff001f, + PR_7BIT_DISPLAY_NAME_ERROR = 0x39ff000a, + PR_ACCOUNT = 0x3a00001e, + PR_ACCOUNT_UNICODE = 0x3a00001f, + PR_ACCOUNT_ERROR = 0x3a00000a, + PR_ALTERNATE_RECIPIENT = 0x3a010102, + PR_ALTERNATE_RECIPIENT_ERROR = 0x3a01000a, + PR_CALLBACK_TELEPHONE_NUMBER = 0x3a02001e, + PR_CALLBACK_TELEPHONE_NUMBER_UNICODE = 0x3a02001f, + PR_CALLBACK_TELEPHONE_NUMBER_ERROR = 0x3a02000a, + PR_CONVERSION_PROHIBITED = 0x3a03000b, + PR_CONVERSION_PROHIBITED_ERROR = 0x3a03000a, + PR_DISCLOSE_RECIPIENTS = 0x3a04000b, + PR_DISCLOSE_RECIPIENTS_ERROR = 0x3a04000a, + PR_GENERATION = 0x3a05001e, + PR_GENERATION_UNICODE = 0x3a05001f, + PR_GENERATION_ERROR = 0x3a05000a, + PR_GIVEN_NAME = 0x3a06001e, + PR_GIVEN_NAME_UNICODE = 0x3a06001f, + PR_GIVEN_NAME_ERROR = 0x3a06000a, + PR_GOVERNMENT_ID_NUMBER = 0x3a07001e, + PR_GOVERNMENT_ID_NUMBER_UNICODE = 0x3a07001f, + PR_GOVERNMENT_ID_NUMBER_ERROR = 0x3a07000a, + PR_OFFICE_TELEPHONE_NUMBER = 0x3a08001e, + PR_OFFICE_TELEPHONE_NUMBER_UNICODE = 0x3a08001f, + PR_OFFICE_TELEPHONE_NUMBER_ERROR = 0x3a08000a, + PR_HOME_TELEPHONE_NUMBER = 0x3a09001e, + PR_HOME_TELEPHONE_NUMBER_UNICODE = 0x3a09001f, + PR_HOME_TELEPHONE_NUMBER_ERROR = 0x3a09000a, + PR_INITIALS = 0x3a0a001e, + PR_INITIALS_UNICODE = 0x3a0a001f, + PR_INITIALS_ERROR = 0x3a0a000a, + PR_KEYWORD = 0x3a0b001e, + PR_KEYWORD_UNICODE = 0x3a0b001f, + PR_KEYWORD_ERROR = 0x3a0b000a, + PR_LANGUAGE = 0x3a0c001e, + PR_LANGUAGE_UNICODE = 0x3a0c001f, + PR_LANGUAGE_ERROR = 0x3a0c000a, + PR_LOCATION = 0x3a0d001e, + PR_LOCATION_UNICODE = 0x3a0d001f, + PR_LOCATION_ERROR = 0x3a0d000a, + PR_MAIL_PERMISSION = 0x3a0e000b, + PR_MAIL_PERMISSION_ERROR = 0x3a0e000a, + PR_MHS_COMMON_NAME = 0x3a0f001e, + PR_MHS_COMMON_NAME_UNICODE = 0x3a0f001f, + PR_MHS_COMMON_NAME_ERROR = 0x3a0f000a, + PR_ORGANIZATIONAL_ID_NUMBER = 0x3a10001e, + PR_ORGANIZATIONAL_ID_NUMBER_UNICODE = 0x3a10001f, + PR_ORGANIZATIONAL_ID_NUMBER_ERROR = 0x3a10000a, + PR_SURNAME = 0x3a11001e, + PR_SURNAME_UNICODE = 0x3a11001f, + PR_SURNAME_ERROR = 0x3a11000a, + PR_ORIGINAL_ENTRYID = 0x3a120102, + PR_ORIGINAL_ENTRYID_ERROR = 0x3a12000a, + PR_ORIGINAL_DISPLAY_NAME = 0x3a13001e, + PR_ORIGINAL_DISPLAY_NAME_UNICODE = 0x3a13001f, + PR_ORIGINAL_DISPLAY_NAME_ERROR = 0x3a13000a, + PR_ORIGINAL_SEARCH_KEY = 0x3a140102, + PR_ORIGINAL_SEARCH_KEY_ERROR = 0x3a14000a, + PR_POSTAL_ADDRESS = 0x3a15001e, + PR_POSTAL_ADDRESS_UNICODE = 0x3a15001f, + PR_POSTAL_ADDRESS_ERROR = 0x3a15000a, + PR_COMPANY_NAME = 0x3a16001e, + PR_COMPANY_NAME_UNICODE = 0x3a16001f, + PR_COMPANY_NAME_ERROR = 0x3a16000a, + PR_TITLE = 0x3a17001e, + PR_TITLE_UNICODE = 0x3a17001f, + PR_TITLE_ERROR = 0x3a17000a, + PR_DEPARTMENT_NAME = 0x3a18001e, + PR_DEPARTMENT_NAME_UNICODE = 0x3a18001f, + PR_DEPARTMENT_NAME_ERROR = 0x3a18000a, + PR_OFFICE_LOCATION = 0x3a19001e, + PR_OFFICE_LOCATION_UNICODE = 0x3a19001f, + PR_OFFICE_LOCATION_ERROR = 0x3a19000a, + PR_PRIMARY_TELEPHONE_NUMBER = 0x3a1a001e, + PR_PRIMARY_TELEPHONE_NUMBER_UNICODE = 0x3a1a001f, + PR_PRIMARY_TELEPHONE_NUMBER_ERROR = 0x3a1a000a, + PR_OFFICE2_TELEPHONE_NUMBER = 0x3a1b001e, + PR_OFFICE2_TELEPHONE_NUMBER_UNICODE = 0x3a1b001f, + PR_OFFICE2_TELEPHONE_NUMBER_ERROR = 0x3a1b000a, + PR_MOBILE_TELEPHONE_NUMBER = 0x3a1c001e, + PR_MOBILE_TELEPHONE_NUMBER_UNICODE = 0x3a1c001f, + PR_MOBILE_TELEPHONE_NUMBER_ERROR = 0x3a1c000a, + PR_RADIO_TELEPHONE_NUMBER = 0x3a1d001e, + PR_RADIO_TELEPHONE_NUMBER_UNICODE = 0x3a1d001f, + PR_RADIO_TELEPHONE_NUMBER_ERROR = 0x3a1d000a, + PR_CAR_TELEPHONE_NUMBER = 0x3a1e001e, + PR_CAR_TELEPHONE_NUMBER_UNICODE = 0x3a1e001f, + PR_CAR_TELEPHONE_NUMBER_ERROR = 0x3a1e000a, + PR_OTHER_TELEPHONE_NUMBER = 0x3a1f001e, + PR_OTHER_TELEPHONE_NUMBER_UNICODE = 0x3a1f001f, + PR_OTHER_TELEPHONE_NUMBER_ERROR = 0x3a1f000a, + PR_TRANSMITTABLE_DISPLAY_NAME = 0x3a20001e, + PR_TRANSMITTABLE_DISPLAY_NAME_UNICODE = 0x3a20001f, + PR_TRANSMITTABLE_DISPLAY_NAME_ERROR = 0x3a20000a, + PR_PAGER_TELEPHONE_NUMBER = 0x3a21001e, + PR_PAGER_TELEPHONE_NUMBER_UNICODE = 0x3a21001f, + PR_PAGER_TELEPHONE_NUMBER_ERROR = 0x3a21000a, + PR_USER_CERTIFICATE = 0x3a220102, + PR_USER_CERTIFICATE_ERROR = 0x3a22000a, + PR_PRIMARY_FAX_NUMBER = 0x3a23001e, + PR_PRIMARY_FAX_NUMBER_UNICODE = 0x3a23001f, + PR_PRIMARY_FAX_NUMBER_ERROR = 0x3a23000a, + PR_HOME_FAX_NUMBER = 0x3a25001e, + PR_HOME_FAX_NUMBER_UNICODE = 0x3a25001f, + PR_HOME_FAX_NUMBER_ERROR = 0x3a25000a, + PR_COUNTRY = 0x3a26001e, + PR_COUNTRY_UNICODE = 0x3a26001f, + PR_COUNTRY_ERROR = 0x3a26000a, + PR_LOCALITY = 0x3a27001e, + PR_LOCALITY_UNICODE = 0x3a27001f, + PR_LOCALITY_ERROR = 0x3a27000a, + PR_STATE_OR_PROVINCE = 0x3a28001e, + PR_STATE_OR_PROVINCE_UNICODE = 0x3a28001f, + PR_STATE_OR_PROVINCE_ERROR = 0x3a28000a, + PR_STREET_ADDRESS = 0x3a29001e, + PR_STREET_ADDRESS_UNICODE = 0x3a29001f, + PR_STREET_ADDRESS_ERROR = 0x3a29000a, + PR_POSTAL_CODE = 0x3a2a001e, + PR_POSTAL_CODE_UNICODE = 0x3a2a001f, + PR_POSTAL_CODE_ERROR = 0x3a2a000a, + PR_POST_OFFICE_BOX = 0x3a2b001e, + PR_POST_OFFICE_BOX_UNICODE = 0x3a2b001f, + PR_POST_OFFICE_BOX_ERROR = 0x3a2b000a, + PR_TELEX_NUMBER = 0x3a2c001e, + PR_TELEX_NUMBER_UNICODE = 0x3a2c001f, + PR_TELEX_NUMBER_ERROR = 0x3a2c000a, + PR_ISDN_NUMBER = 0x3a2d001e, + PR_ISDN_NUMBER_UNICODE = 0x3a2d001f, + PR_ISDN_NUMBER_ERROR = 0x3a2d000a, + PR_ASSISTANT_TELEPHONE_NUMBER = 0x3a2e001e, + PR_ASSISTANT_TELEPHONE_NUMBER_UNICODE = 0x3a2e001f, + PR_ASSISTANT_TELEPHONE_NUMBER_ERROR = 0x3a2e000a, + PR_HOME2_TELEPHONE_NUMBER = 0x3a2f001e, + PR_HOME2_TELEPHONE_NUMBER_UNICODE = 0x3a2f001f, + PR_HOME2_TELEPHONE_NUMBER_ERROR = 0x3a2f000a, + PR_ASSISTANT = 0x3a30001e, + PR_ASSISTANT_UNICODE = 0x3a30001f, + PR_ASSISTANT_ERROR = 0x3a30000a, + PR_SEND_RICH_INFO = 0x3a40000b, + PR_SEND_RICH_INFO_ERROR = 0x3a40000a, + PR_WEDDING_ANNIVERSARY = 0x3a410040, + PR_WEDDING_ANNIVERSARY_ERROR = 0x3a41000a, + PR_BIRTHDAY = 0x3a420040, + PR_BIRTHDAY_ERROR = 0x3a42000a, + PR_HOBBIES = 0x3a43001e, + PR_HOBBIES_UNICODE = 0x3a43001f, + PR_HOBBIES_ERROR = 0x3a43000a, + PR_MIDDLE_NAME = 0x3a44001e, + PR_MIDDLE_NAME_UNICODE = 0x3a44001f, + PR_MIDDLE_NAME_ERROR = 0x3a44000a, + PR_DISPLAY_NAME_PREFIX = 0x3a45001e, + PR_DISPLAY_NAME_PREFIX_UNICODE = 0x3a45001f, + PR_DISPLAY_NAME_PREFIX_ERROR = 0x3a45000a, + PR_PROFESSION = 0x3a46001e, + PR_PROFESSION_UNICODE = 0x3a46001f, + PR_PROFESSION_ERROR = 0x3a46000a, + PR_PREFERRED_BY_NAME = 0x3a47001e, + PR_PREFERRED_BY_NAME_UNICODE = 0x3a47001f, + PR_PREFERRED_BY_NAME_ERROR = 0x3a47000a, + PR_SPOUSE_NAME = 0x3a48001e, + PR_SPOUSE_NAME_UNICODE = 0x3a48001f, + PR_SPOUSE_NAME_ERROR = 0x3a48000a, + PR_COMPUTER_NETWORK_NAME = 0x3a49001e, + PR_COMPUTER_NETWORK_NAME_UNICODE = 0x3a49001f, + PR_COMPUTER_NETWORK_NAME_ERROR = 0x3a49000a, + PR_CUSTOMER_ID = 0x3a4a001e, + PR_CUSTOMER_ID_UNICODE = 0x3a4a001f, + PR_CUSTOMER_ID_ERROR = 0x3a4a000a, + PR_TTYTDD_PHONE_NUMBER = 0x3a4b001e, + PR_TTYTDD_PHONE_NUMBER_UNICODE = 0x3a4b001f, + PR_TTYTDD_PHONE_NUMBER_ERROR = 0x3a4b000a, + PR_FTP_SITE = 0x3a4c001e, + PR_FTP_SITE_UNICODE = 0x3a4c001f, + PR_FTP_SITE_ERROR = 0x3a4c000a, + PR_GENDER = 0x3a4d0002, + PR_GENDER_ERROR = 0x3a4d000a, + PR_MANAGER_NAME = 0x3a4e001e, + PR_MANAGER_NAME_UNICODE = 0x3a4e001f, + PR_MANAGER_NAME_ERROR = 0x3a4e000a, + PR_NICKNAME = 0x3a4f001e, + PR_NICKNAME_UNICODE = 0x3a4f001f, + PR_NICKNAME_ERROR = 0x3a4f000a, + PR_PERSONAL_HOME_PAGE = 0x3a50001e, + PR_PERSONAL_HOME_PAGE_UNICODE = 0x3a50001f, + PR_PERSONAL_HOME_PAGE_ERROR = 0x3a50000a, + PR_BUSINESS_HOME_PAGE = 0x3a51001e, + PR_BUSINESS_HOME_PAGE_UNICODE = 0x3a51001f, + PR_BUSINESS_HOME_PAGE_ERROR = 0x3a51000a, + PR_CONTACT_VERSION = 0x3a520048, + PR_CONTACT_VERSION_ERROR = 0x3a52000a, + PR_CONTACT_ENTRYIDS = 0x3a531102, + PR_CONTACT_ENTRYIDS_ERROR = 0x3a53000a, + PR_CONTACT_ADDRTYPES = 0x3a54101e, + PR_CONTACT_ADDRTYPES_UNICODE = 0x3a54101f, + PR_CONTACT_ADDRTYPES_ERROR = 0x3a54000a, + PR_CONTACT_DEFAULT_ADDRESS_INDEX = 0x3a550003, + PR_CONTACT_DEFAULT_ADDRESS_INDEX_ERROR = 0x3a55000a, + PR_CONTACT_EMAIL_ADDRESSES = 0x3a56101e, + PR_CONTACT_EMAIL_ADDRESSES_UNICODE = 0x3a56101f, + PR_CONTACT_EMAIL_ADDRESSES_ERROR = 0x3a56000a, + PR_COMPANY_MAIN_PHONE_NUMBER = 0x3a57001e, + PR_COMPANY_MAIN_PHONE_NUMBER_UNICODE = 0x3a57001f, + PR_COMPANY_MAIN_PHONE_NUMBER_ERROR = 0x3a57000a, + PR_CHILDRENS_NAMES = 0x3a58101e, + PR_CHILDRENS_NAMES_UNICODE = 0x3a58101f, + PR_CHILDRENS_NAMES_ERROR = 0x3a58000a, + PR_HOME_ADDRESS_CITY = 0x3a59001e, + PR_HOME_ADDRESS_CITY_UNICODE = 0x3a59001f, + PR_HOME_ADDRESS_CITY_ERROR = 0x3a59000a, + PR_HOME_ADDRESS_COUNTRY = 0x3a5a001e, + PR_HOME_ADDRESS_COUNTRY_UNICODE = 0x3a5a001f, + PR_HOME_ADDRESS_COUNTRY_ERROR = 0x3a5a000a, + PR_HOME_ADDRESS_POSTAL_CODE = 0x3a5b001e, + PR_HOME_ADDRESS_POSTAL_CODE_UNICODE = 0x3a5b001f, + PR_HOME_ADDRESS_POSTAL_CODE_ERROR = 0x3a5b000a, + PR_HOME_ADDRESS_STATE_OR_PROVINCE = 0x3a5c001e, + PR_HOME_ADDRESS_STATE_OR_PROVINCE_UNICODE = 0x3a5c001f, + PR_HOME_ADDRESS_STATE_OR_PROVINCE_ERROR = 0x3a5c000a, + PR_HOME_ADDRESS_STREET = 0x3a5d001e, + PR_HOME_ADDRESS_STREET_UNICODE = 0x3a5d001f, + PR_HOME_ADDRESS_STREET_ERROR = 0x3a5d000a, + PR_HOME_ADDRESS_POST_OFFICE_BOX = 0x3a5e001e, + PR_HOME_ADDRESS_POST_OFFICE_BOX_UNICODE = 0x3a5e001f, + PR_HOME_ADDRESS_POST_OFFICE_BOX_ERROR = 0x3a5e000a, + PR_OTHER_ADDRESS_CITY = 0x3a5f001e, + PR_OTHER_ADDRESS_CITY_UNICODE = 0x3a5f001f, + PR_OTHER_ADDRESS_CITY_ERROR = 0x3a5f000a, + PR_OTHER_ADDRESS_COUNTRY = 0x3a60001e, + PR_OTHER_ADDRESS_COUNTRY_UNICODE = 0x3a60001f, + PR_OTHER_ADDRESS_COUNTRY_ERROR = 0x3a60000a, + PR_OTHER_ADDRESS_POSTAL_CODE = 0x3a61001e, + PR_OTHER_ADDRESS_POSTAL_CODE_UNICODE = 0x3a61001f, + PR_OTHER_ADDRESS_POSTAL_CODE_ERROR = 0x3a61000a, + PR_OTHER_ADDRESS_STATE_OR_PROVINCE = 0x3a62001e, + PR_OTHER_ADDRESS_STATE_OR_PROVINCE_UNICODE = 0x3a62001f, + PR_OTHER_ADDRESS_STATE_OR_PROVINCE_ERROR = 0x3a62000a, + PR_OTHER_ADDRESS_STREET = 0x3a63001e, + PR_OTHER_ADDRESS_STREET_UNICODE = 0x3a63001f, + PR_OTHER_ADDRESS_STREET_ERROR = 0x3a63000a, + PR_OTHER_ADDRESS_POST_OFFICE_BOX = 0x3a64001e, + PR_OTHER_ADDRESS_POST_OFFICE_BOX_UNICODE = 0x3a64001f, + PR_OTHER_ADDRESS_POST_OFFICE_BOX_ERROR = 0x3a64000a, + PR_USER_X509_CERTIFICATE = 0x3a701102, + PR_USER_X509_CERTIFICATE_ERROR = 0x3a70000a, + PR_SEND_INTERNET_ENCODING = 0x3a710003, + PR_SEND_INTERNET_ENCODING_ERROR = 0x3a71000a, + PR_STORE_PROVIDERS = 0x3d000102, + PR_STORE_PROVIDERS_ERROR = 0x3d00000a, + PR_AB_PROVIDERS = 0x3d010102, + PR_AB_PROVIDERS_ERROR = 0x3d01000a, + PR_TRANSPORT_PROVIDERS = 0x3d020102, + PR_TRANSPORT_PROVIDERS_ERROR = 0x3d02000a, + PR_DEFAULT_PROFILE = 0x3d04000b, + PR_DEFAULT_PROFILE_ERROR = 0x3d04000a, + PR_AB_SEARCH_PATH = 0x3d051102, + PR_AB_SEARCH_PATH_ERROR = 0x3d05000a, + PR_AB_DEFAULT_DIR = 0x3d060102, + PR_AB_DEFAULT_DIR_ERROR = 0x3d06000a, + PR_AB_DEFAULT_PAB = 0x3d070102, + PR_AB_DEFAULT_PAB_ERROR = 0x3d07000a, + PR_FILTERING_HOOKS = 0x3d080102, + PR_FILTERING_HOOKS_ERROR = 0x3d08000a, + PR_SERVICE_NAME = 0x3d09001e, + PR_SERVICE_NAME_UNICODE = 0x3d09001f, + PR_SERVICE_NAME_ERROR = 0x3d09000a, + PR_SERVICE_DLL_NAME = 0x3d0a001e, + PR_SERVICE_DLL_NAME_UNICODE = 0x3d0a001f, + PR_SERVICE_DLL_NAME_ERROR = 0x3d0a000a, + PR_SERVICE_ENTRY_NAME = 0x3d0b001e, + PR_SERVICE_ENTRY_NAME_UNICODE = 0x3d0b001f, + PR_SERVICE_ENTRY_NAME_ERROR = 0x3d0b000a, + PR_SERVICE_UID = 0x3d0c0102, + PR_SERVICE_UID_ERROR = 0x3d0c000a, + PR_SERVICE_EXTRA_UIDS = 0x3d0d0102, + PR_SERVICE_EXTRA_UIDS_ERROR = 0x3d0d000a, + PR_SERVICES = 0x3d0e0102, + PR_SERVICES_ERROR = 0x3d0e000a, + PR_SERVICE_SUPPORT_FILES = 0x3d0f101e, + PR_SERVICE_SUPPORT_FILES_UNICODE = 0x3d0f101f, + PR_SERVICE_SUPPORT_FILES_ERROR = 0x3d0f000a, + PR_SERVICE_DELETE_FILES = 0x3d10101e, + PR_SERVICE_DELETE_FILES_UNICODE = 0x3d10101f, + PR_SERVICE_DELETE_FILES_ERROR = 0x3d10000a, + PR_AB_SEARCH_PATH_UPDATE = 0x3d110102, + PR_AB_SEARCH_PATH_UPDATE_ERROR = 0x3d11000a, + PR_PROFILE_NAME = 0x3d12001e, + PR_PROFILE_NAME_UNICODE = 0x3d12001f, + PR_PROFILE_NAME_ERROR = 0x3d12000a, + PR_SERVICE_INSTALL_ID = 0x3d13001e, + PR_SERVICE_INSTALL_ID_UNICODE = 0x3d13001f, + PR_SERVICE_INSTALL_ID_ERROR = 0x3d13000a, + PR_ADMIN_SECURITY_DESCRIPTOR = 0x3d210102, + PR_ADMIN_SECURITY_DESCRIPTOR_ERROR = 0x3d21000a, + PR_IDENTITY_DISPLAY = 0x3e00001e, + PR_IDENTITY_DISPLAY_UNICODE = 0x3e00001f, + PR_IDENTITY_DISPLAY_ERROR = 0x3e00000a, + PR_IDENTITY_ENTRYID = 0x3e010102, + PR_IDENTITY_ENTRYID_ERROR = 0x3e01000a, + PR_RESOURCE_METHODS = 0x3e020003, + PR_RESOURCE_METHODS_ERROR = 0x3e02000a, + PR_RESOURCE_TYPE = 0x3e030003, + PR_RESOURCE_TYPE_ERROR = 0x3e03000a, + PR_STATUS_CODE = 0x3e040003, + PR_STATUS_CODE_ERROR = 0x3e04000a, + PR_IDENTITY_SEARCH_KEY = 0x3e050102, + PR_IDENTITY_SEARCH_KEY_ERROR = 0x3e05000a, + PR_OWN_STORE_ENTRYID = 0x3e060102, + PR_OWN_STORE_ENTRYID_ERROR = 0x3e06000a, + PR_RESOURCE_PATH = 0x3e07001e, + PR_RESOURCE_PATH_UNICODE = 0x3e07001f, + PR_RESOURCE_PATH_ERROR = 0x3e07000a, + PR_STATUS_STRING = 0x3e08001e, + PR_STATUS_STRING_UNICODE = 0x3e08001f, + PR_STATUS_STRING_ERROR = 0x3e08000a, + PR_X400_DEFERRED_DELIVERY_CANCEL = 0x3e09000b, + PR_X400_DEFERRED_DELIVERY_CANCEL_ERROR = 0x3e09000a, + PR_HEADER_FOLDER_ENTRYID = 0x3e0a0102, + PR_HEADER_FOLDER_ENTRYID_ERROR = 0x3e0a000a, + PR_REMOTE_PROGRESS = 0x3e0b0003, + PR_REMOTE_PROGRESS_ERROR = 0x3e0b000a, + PR_REMOTE_PROGRESS_TEXT = 0x3e0c001e, + PR_REMOTE_PROGRESS_TEXT_UNICODE = 0x3e0c001f, + PR_REMOTE_PROGRESS_TEXT_ERROR = 0x3e0c000a, + PR_REMOTE_VALIDATE_OK = 0x3e0d000b, + PR_REMOTE_VALIDATE_OK_ERROR = 0x3e0d000a, + PR_CONTROL_FLAGS = 0x3f000003, + PR_CONTROL_FLAGS_ERROR = 0x3f00000a, + PR_CONTROL_STRUCTURE = 0x3f010102, + PR_CONTROL_STRUCTURE_ERROR = 0x3f01000a, + PR_CONTROL_TYPE = 0x3f020003, + PR_CONTROL_TYPE_ERROR = 0x3f02000a, + PR_DELTAX = 0x3f030003, + PR_DELTAX_ERROR = 0x3f03000a, + PR_DELTAY = 0x3f040003, + PR_DELTAY_ERROR = 0x3f04000a, + PR_XPOS = 0x3f050003, + PR_XPOS_ERROR = 0x3f05000a, + PR_YPOS = 0x3f060003, + PR_YPOS_ERROR = 0x3f06000a, + PR_CONTROL_ID = 0x3f070102, + PR_CONTROL_ID_ERROR = 0x3f07000a, + PR_INITIAL_DETAILS_PANE = 0x3f080003, + PR_INITIAL_DETAILS_PANE_ERROR = 0x3f08000a, + PR_DID = 0x3f800014, + PR_DID_ERROR = 0x3f80000a, + PR_SEQID = 0x3f810014, + PR_SEQID_ERROR = 0x3f81000a, + PR_DRAFTID = 0x3f820014, + PR_DRAFTID_ERROR = 0x3f82000a, + PR_CHECK_IN_TIME = 0x3f830040, + PR_CHECK_IN_TIME_ERROR = 0x3f83000a, + PR_CHECK_IN_COMMENT = 0x3f84001e, + PR_CHECK_IN_COMMENT_UNICODE = 0x3f84001f, + PR_CHECK_IN_COMMENT_ERROR = 0x3f84000a, + PR_VERSION_OP_CODE = 0x3f850003, + PR_VERSION_OP_CODE_ERROR = 0x3f85000a, + PR_VERSION_OP_DATA = 0x3f860102, + PR_VERSION_OP_DATA_ERROR = 0x3f86000a, + PR_VERSION_SEQUENCE_NUMBER = 0x3f870003, + PR_VERSION_SEQUENCE_NUMBER_ERROR = 0x3f87000a, + PR_ATTACH_ID = 0x3f880014, + PR_ATTACH_ID_ERROR = 0x3f88000a, + PR_PKM_DOC_STATUS = 0x3f8d001e, + PR_PKM_DOC_STATUS_UNICODE = 0x3f8d001f, + PR_PKM_DOC_STATUS_ERROR = 0x3f8d000a, + PR_MV_PKM_OPERATION_REQ = 0x3f8e101e, + PR_MV_PKM_OPERATION_REQ_UNICODE = 0x3f8e101f, + PR_MV_PKM_OPERATION_REQ_ERROR = 0x3f8e000a, + PR_PKM_DOC_INTERNAL_STATE = 0x3f8f001e, + PR_PKM_DOC_INTERNAL_STATE_UNICODE = 0x3f8f001f, + PR_PKM_DOC_INTERNAL_STATE_ERROR = 0x3f8f000a, + PR_VERSIONING_FLAGS = 0x3f900002, + PR_VERSIONING_FLAGS_ERROR = 0x3f90000a, + PR_PKM_LAST_UNAPPROVED_VID = 0x3f910102, + PR_PKM_LAST_UNAPPROVED_VID_ERROR = 0x3f91000a, + PR_MV_PKM_VERSION_LABELS = 0x3f92101e, + PR_MV_PKM_VERSION_LABELS_UNICODE = 0x3f92101f, + PR_MV_PKM_VERSION_LABELS_ERROR = 0x3f92000a, + PR_MV_PKM_VERSION_STATUS = 0x3f93101e, + PR_MV_PKM_VERSION_STATUS_UNICODE = 0x3f93101f, + PR_MV_PKM_VERSION_STATUS_ERROR = 0x3f93000a, + PR_PKM_INTERNAL_DATA = 0x3f940102, + PR_PKM_INTERNAL_DATA_ERROR = 0x3f94000a, + PR_LAST_CONFLICT = 0x3fc90102, + PR_LAST_CONFLICT_ERROR = 0x3fc9000a, + PR_CONFLICT_MSG_KEY = 0x3fca0102, + PR_CONFLICT_MSG_KEY_ERROR = 0x3fca000a, + PR_REPL_HEADER = 0x3fd00102, + PR_REPL_HEADER_ERROR = 0x3fd0000a, + PR_REPL_STATUS = 0x3fd10102, + PR_REPL_STATUS_ERROR = 0x3fd1000a, + PR_REPL_CHANGES = 0x3fd20102, + PR_REPL_CHANGES_ERROR = 0x3fd2000a, + PR_REPL_RGM = 0x3fd30102, + PR_REPL_RGM_ERROR = 0x3fd3000a, + PR_RMI = 0x3fd40102, + PR_RMI_ERROR = 0x3fd4000a, + PR_INTERNAL_POST_REPLY = 0x3fd50102, + PR_INTERNAL_POST_REPLY_ERROR = 0x3fd5000a, + PR_NTSD_MODIFICATION_TIME = 0x3fd60040, + PR_NTSD_MODIFICATION_TIME_ERROR = 0x3fd6000a, + PR_PREVIEW_UNREAD = 0x3fd8001e, + PR_PREVIEW_UNREAD_UNICODE = 0x3fd8001f, + PR_PREVIEW_UNREAD_ERROR = 0x3fd8000a, + PR_PREVIEW = 0x3fd9001e, + PR_PREVIEW_UNICODE = 0x3fd9001f, + PR_PREVIEW_ERROR = 0x3fd9000a, + PR_ABSTRACT = 0x3fda001e, + PR_ABSTRACT_UNICODE = 0x3fda001f, + PR_ABSTRACT_ERROR = 0x3fda000a, + PR_DL_REPORT_FLAGS = 0x3fdb0003, + PR_DL_REPORT_FLAGS_ERROR = 0x3fdb000a, + PR_BILATERAL_INFO = 0x3fdc0102, + PR_BILATERAL_INFO_ERROR = 0x3fdc000a, + PR_MSG_BODY_ID = 0x3fdd0003, + PR_MSG_BODY_ID_ERROR = 0x3fdd000a, + PR_INTERNET_CPID = 0x3fde0003, + PR_INTERNET_CPID_ERROR = 0x3fde000a, + PR_AUTO_RESPONSE_SUPPRESS = 0x3fdf0003, + PR_AUTO_RESPONSE_SUPPRESS_ERROR = 0x3fdf000a, + PR_ACL_TABLE = 0x3fe0000d, + PR_ACL_TABLE_ERROR = 0x3fe0000a, + PR_ACL_DATA = 0x3fe00102, + PR_RULES_TABLE = 0x3fe1000d, + PR_RULES_TABLE_ERROR = 0x3fe1000a, + PR_RULES_DATA = 0x3fe10102, + PR_FOLDER_DESIGN_FLAGS = 0x3fe20003, + PR_FOLDER_DESIGN_FLAGS_ERROR = 0x3fe2000a, + PR_DELEGATED_BY_RULE = 0x3fe3000b, + PR_DELEGATED_BY_RULE_ERROR = 0x3fe3000a, + PR_DESIGN_IN_PROGRESS = 0x3fe4000b, + PR_DESIGN_IN_PROGRESS_ERROR = 0x3fe4000a, + PR_SECURE_ORIGINATION = 0x3fe5000b, + PR_SECURE_ORIGINATION_ERROR = 0x3fe5000a, + PR_PUBLISH_IN_ADDRESS_BOOK = 0x3fe6000b, + PR_PUBLISH_IN_ADDRESS_BOOK_ERROR = 0x3fe6000a, + PR_RESOLVE_METHOD = 0x3fe70003, + PR_RESOLVE_METHOD_ERROR = 0x3fe7000a, + PR_ADDRESS_BOOK_DISPLAY_NAME = 0x3fe8001e, + PR_ADDRESS_BOOK_DISPLAY_NAME_UNICODE = 0x3fe8001f, + PR_ADDRESS_BOOK_DISPLAY_NAME_ERROR = 0x3fe8000a, + PR_EFORMS_LOCALE_ID = 0x3fe90003, + PR_EFORMS_LOCALE_ID_ERROR = 0x3fe9000a, + PR_HAS_DAMS = 0x3fea000b, + PR_HAS_DAMS_ERROR = 0x3fea000a, + PR_DEFERRED_SEND_NUMBER = 0x3feb0003, + PR_DEFERRED_SEND_NUMBER_ERROR = 0x3feb000a, + PR_DEFERRED_SEND_UNITS = 0x3fec0003, + PR_DEFERRED_SEND_UNITS_ERROR = 0x3fec000a, + PR_EXPIRY_NUMBER = 0x3fed0003, + PR_EXPIRY_NUMBER_ERROR = 0x3fed000a, + PR_EXPIRY_UNITS = 0x3fee0003, + PR_EXPIRY_UNITS_ERROR = 0x3fee000a, + PR_DEFERRED_SEND_TIME = 0x3fef0040, + PR_DEFERRED_SEND_TIME_ERROR = 0x3fef000a, + PR_CONFLICT_ENTRYID = 0x3ff00102, + PR_CONFLICT_ENTRYID_ERROR = 0x3ff0000a, + PR_MESSAGE_LOCALE_ID = 0x3ff10003, + PR_MESSAGE_LOCALE_ID_ERROR = 0x3ff1000a, + PR_RULE_TRIGGER_HISTORY = 0x3ff20102, + PR_RULE_TRIGGER_HISTORY_ERROR = 0x3ff2000a, + PR_MOVE_TO_STORE_ENTRYID = 0x3ff30102, + PR_MOVE_TO_STORE_ENTRYID_ERROR = 0x3ff3000a, + PR_MOVE_TO_FOLDER_ENTRYID = 0x3ff40102, + PR_MOVE_TO_FOLDER_ENTRYID_ERROR = 0x3ff4000a, + PR_STORAGE_QUOTA_LIMIT = 0x3ff50003, + PR_STORAGE_QUOTA_LIMIT_ERROR = 0x3ff5000a, + PR_EXCESS_STORAGE_USED = 0x3ff60003, + PR_EXCESS_STORAGE_USED_ERROR = 0x3ff6000a, + PR_SVR_GENERATING_QUOTA_MSG = 0x3ff7001e, + PR_SVR_GENERATING_QUOTA_MSG_UNICODE = 0x3ff7001f, + PR_SVR_GENERATING_QUOTA_MSG_ERROR = 0x3ff7000a, + PR_CREATOR_NAME = 0x3ff8001e, + PR_CREATOR_NAME_UNICODE = 0x3ff8001f, + PR_CREATOR_NAME_ERROR = 0x3ff8000a, + PR_CREATOR_ENTRYID = 0x3ff90102, + PR_CREATOR_ENTRYID_ERROR = 0x3ff9000a, + PR_LAST_MODIFIER_NAME = 0x3ffa001e, + PR_LAST_MODIFIER_NAME_UNICODE = 0x3ffa001f, + PR_LAST_MODIFIER_NAME_ERROR = 0x3ffa000a, + PR_LAST_MODIFIER_ENTRYID = 0x3ffb0102, + PR_LAST_MODIFIER_ENTRYID_ERROR = 0x3ffb000a, + PR_REPLY_RECIPIENT_SMTP_PROXIES = 0x3ffc001e, + PR_REPLY_RECIPIENT_SMTP_PROXIES_UNICODE = 0x3ffc001f, + PR_REPLY_RECIPIENT_SMTP_PROXIES_ERROR = 0x3ffc000a, + PR_MESSAGE_CODEPAGE = 0x3ffd0003, + PR_MESSAGE_CODEPAGE_ERROR = 0x3ffd000a, + PR_EXTENDED_ACL_DATA = 0x3ffe0102, + PR_EXTENDED_ACL_DATA_ERROR = 0x3ffe000a, + PR_FROM_I_HAVE = 0x3fff000b, + PR_FROM_I_HAVE_ERROR = 0x3fff000a, + PR_NEW_ATTACH = 0x40000003, + PR_NEW_ATTACH_ERROR = 0x4000000a, + PR_START_EMBED = 0x40010003, + PR_START_EMBED_ERROR = 0x4001000a, + PR_END_EMBED = 0x40020003, + PR_END_EMBED_ERROR = 0x4002000a, + PR_START_RECIP = 0x40030003, + PR_START_RECIP_ERROR = 0x4003000a, + PR_END_RECIP = 0x40040003, + PR_END_RECIP_ERROR = 0x4004000a, + PR_END_CC_RECIP = 0x40050003, + PR_END_CC_RECIP_ERROR = 0x4005000a, + PR_END_BCC_RECIP = 0x40060003, + PR_END_BCC_RECIP_ERROR = 0x4006000a, + PR_END_P1_RECIP = 0x40070003, + PR_END_P1_RECIP_ERROR = 0x4007000a, + PR_START_TOP_FLD = 0x40090003, + PR_START_TOP_FLD_ERROR = 0x4009000a, + PR_START_SUB_FLD = 0x400a0003, + PR_START_SUB_FLD_ERROR = 0x400a000a, + PR_END_FOLDER = 0x400b0003, + PR_END_FOLDER_ERROR = 0x400b000a, + PR_START_MESSAGE = 0x400c0003, + PR_START_MESSAGE_ERROR = 0x400c000a, + PR_END_MESSAGE = 0x400d0003, + PR_END_MESSAGE_ERROR = 0x400d000a, + PR_END_ATTACH = 0x400e0003, + PR_END_ATTACH_ERROR = 0x400e000a, + PR_EC_WARNING = 0x400f0003, + PR_EC_WARNING_ERROR = 0x400f000a, + PR_START_FAI_MSG = 0x40100003, + PR_START_FAI_MSG_ERROR = 0x4010000a, + PR_NEW_FX_FOLDER = 0x40110102, + PR_NEW_FX_FOLDER_ERROR = 0x4011000a, + PR_INCR_SYNC_CHG = 0x40120003, + PR_INCR_SYNC_CHG_ERROR = 0x4012000a, + PR_INCR_SYNC_DEL = 0x40130003, + PR_INCR_SYNC_DEL_ERROR = 0x4013000a, + PR_INCR_SYNC_END = 0x40140003, + PR_INCR_SYNC_END_ERROR = 0x4014000a, + PR_INCR_SYNC_MSG = 0x40150003, + PR_INCR_SYNC_MSG_ERROR = 0x4015000a, + PR_FX_DEL_PROP = 0x40160003, + PR_FX_DEL_PROP_ERROR = 0x4016000a, + PR_IDSET_GIVEN = 0x40170003, + PR_IDSET_GIVEN_ERROR = 0x4017000a, + PR_SENDER_FLAGS = 0x40190003, + PR_SENDER_FLAGS_ERROR = 0x4019000a, + PR_SENT_REPRESENTING_FLAGS = 0x401a0003, + PR_SENT_REPRESENTING_FLAGS_ERROR = 0x401a000a, + PR_RCVD_BY_FLAGS = 0x401b0003, + PR_RCVD_BY_FLAGS_ERROR = 0x401b000a, + PR_RCVD_REPRESENTING_FLAGS = 0x401c0003, + PR_RCVD_REPRESENTING_FLAGS_ERROR = 0x401c000a, + PR_ORIGINAL_SENDER_FLAGS = 0x401d0003, + PR_ORIGINAL_SENDER_FLAGS_ERROR = 0x401d000a, + PR_ORIGINAL_SENT_REPRESENTING_FLAGS = 0x401e0003, + PR_ORIGINAL_SENT_REPRESENTING_FLAGS_ERROR = 0x401e000a, + PR_REPORT_FLAGS = 0x401f0003, + PR_REPORT_FLAGS_ERROR = 0x401f000a, + PR_READ_RECEIPT_FLAGS = 0x40200003, + PR_READ_RECEIPT_FLAGS_ERROR = 0x4020000a, + PR_SOFT_DELETES = 0x4021000b, + PR_SOFT_DELETES_ERROR = 0x4021000a, + PR_MESSAGE_SUBMISSION_ID_FROM_CLIENT = 0x402c0102, + PR_MESSAGE_SUBMISSION_ID_FROM_CLIENT_ERROR = 0x402c000a, + PR_SENDER_SIMPLE_DISP_NAME = 0x4030001e, + PR_SENDER_SIMPLE_DISP_NAME_UNICODE = 0x4030001f, + PR_SENDER_SIMPLE_DISP_NAME_ERROR = 0x4030000a, + PR_SENT_REPRESENTING_SIMPLE_DISP_NAME = 0x4031001e, + PR_SENT_REPRESENTING_SIMPLE_DISP_NAME_UNICODE = 0x4031001f, + PR_SENT_REPRESENTING_SIMPLE_DISP_NAME_ERROR = 0x4031000a, + PR_CREATOR_SIMPLE_DISP_NAME = 0x4038001e, + PR_CREATOR_SIMPLE_DISP_NAME_UNICODE = 0x4038001f, + PR_CREATOR_SIMPLE_DISP_NAME_ERROR = 0x4038000a, + PR_ORG_ADDR_TYPE = 0x403d001e, + PR_ORG_ADDR_TYPE_UNICODE = 0x403d001f, + PR_ORG_ADDR_TYPE_ERROR = 0x403d000a, + PR_ORG_EMAIL_ADDR = 0x403e001e, + PR_ORG_EMAIL_ADDR_UNICODE = 0x403e001f, + PR_ORG_EMAIL_ADDR_ERROR = 0x403e000a, + PR_CREATOR_FLAGS = 0x40590003, + PR_CREATOR_FLAGS_ERROR = 0x4059000a, + PR_MODIFIER_FLAGS = 0x405a0003, + PR_MODIFIER_FLAGS_ERROR = 0x405a000a, + PR_ORIGINATOR_FLAGS = 0x405b0003, + PR_ORIGINATOR_FLAGS_ERROR = 0x405b000a, + PR_REPORT_DESTINATION_FLAGS = 0x405c0003, + PR_REPORT_DESTINATION_FLAGS_ERROR = 0x405c000a, + PR_ORIGINAL_AUTHOR_FLAGS = 0x405d0003, + PR_ORIGINAL_AUTHOR_FLAGS_ERROR = 0x405d000a, + PR_ORIGINATOR_SEARCH_KEY = 0x40610102, + PR_ORIGINATOR_SEARCH_KEY_ERROR = 0x4061000a, + PR_REPORT_DESTINATION_SEARCH_KEY = 0x40640102, + PR_REPORT_DESTINATION_SEARCH_KEY_ERROR = 0x4064000a, + PR_ER_FLAG = 0x40650003, + PR_ER_FLAG_ERROR = 0x4065000a, + PR_INTERNET_SUBJECT = 0x40680102, + PR_INTERNET_SUBJECT_ERROR = 0x4068000a, + PR_INTERNET_SENT_REPRESENTING_NAME = 0x40690102, + PR_INTERNET_SENT_REPRESENTING_NAME_ERROR = 0x4069000a, + PR_INET_MAIL_OVERRIDE_FORMAT = 0x59020003, + PR_INET_MAIL_OVERRIDE_FORMAT_ERROR = 0x5902000a, + PR_MSG_EDITOR_FORMAT = 0x59090003, + PR_MSG_EDITOR_FORMAT_ERROR = 0x5909000a, + PR_DOTSTUFF_STATE = 0x60010003, + PR_DOTSTUFF_STATE_ERROR = 0x6001000a, + PR_RULE_SERVER_RULE_ID = 0x65a00014, + PR_RULE_SERVER_RULE_ID_ERROR = 0x65a0000a, + PR_REPLY_TEMPLATE_ID = 0x65c20102, + PR_REPLY_TEMPLATE_ID_ERROR = 0x65c2000a, + PR_SOURCE_KEY = 0x65e00102, + PR_SOURCE_KEY_ERROR = 0x65e0000a, + PR_PARENT_SOURCE_KEY = 0x65e10102, + PR_PARENT_SOURCE_KEY_ERROR = 0x65e1000a, + PR_CHANGE_KEY = 0x65e20102, + PR_CHANGE_KEY_ERROR = 0x65e2000a, + PR_PREDECESSOR_CHANGE_LIST = 0x65e30102, + PR_PREDECESSOR_CHANGE_LIST_ERROR = 0x65e3000a, + PR_SYNCHRONIZE_FLAGS = 0x65e40003, + PR_SYNCHRONIZE_FLAGS_ERROR = 0x65e4000a, + PR_AUTO_ADD_NEW_SUBS = 0x65e5000b, + PR_AUTO_ADD_NEW_SUBS_ERROR = 0x65e5000a, + PR_NEW_SUBS_GET_AUTO_ADD = 0x65e6000b, + PR_NEW_SUBS_GET_AUTO_ADD_ERROR = 0x65e6000a, + PR_MESSAGE_SITE_NAME = 0x65e7001e, + PR_MESSAGE_SITE_NAME_UNICODE = 0x65e7001f, + PR_MESSAGE_SITE_NAME_ERROR = 0x65e7000a, + PR_MESSAGE_PROCESSED = 0x65e8000b, + PR_MESSAGE_PROCESSED_ERROR = 0x65e8000a, + PR_RULE_MSG_STATE = 0x65e90003, + PR_RULE_MSG_STATE_ERROR = 0x65e9000a, + PR_RULE_MSG_USER_FLAGS = 0x65ea0003, + PR_RULE_MSG_USER_FLAGS_ERROR = 0x65ea000a, + PR_RULE_MSG_PROVIDER = 0x65eb001e, + PR_RULE_MSG_PROVIDER_UNICODE = 0x65eb001f, + PR_RULE_MSG_PROVIDER_ERROR = 0x65eb000a, + PR_RULE_MSG_NAME = 0x65ec001e, + PR_RULE_MSG_NAME_UNICODE = 0x65ec001f, + PR_RULE_MSG_NAME_ERROR = 0x65ec000a, + PR_RULE_MSG_LEVEL = 0x65ed0003, + PR_RULE_MSG_LEVEL_ERROR = 0x65ed000a, + PR_RULE_MSG_PROVIDER_DATA = 0x65ee0102, + PR_RULE_MSG_PROVIDER_DATA_ERROR = 0x65ee000a, + PR_RULE_MSG_ACTIONS = 0x65ef0102, + PR_RULE_MSG_ACTIONS_ERROR = 0x65ef000a, + PR_RULE_MSG_CONDITION = 0x65f00102, + PR_RULE_MSG_CONDITION_ERROR = 0x65f0000a, + PR_RULE_MSG_CONDITION_LCID = 0x65f10003, + PR_RULE_MSG_CONDITION_LCID_ERROR = 0x65f1000a, + PR_RULE_MSG_VERSION = 0x65f20002, + PR_RULE_MSG_VERSION_ERROR = 0x65f2000a, + PR_RULE_MSG_SEQUENCE = 0x65f30003, + PR_RULE_MSG_SEQUENCE_ERROR = 0x65f3000a, + PR_PREVENT_MSG_CREATE = 0x65f4000b, + PR_PREVENT_MSG_CREATE_ERROR = 0x65f4000a, + PR_IMAP_INTERNAL_DATE = 0x65f50040, + PR_IMAP_INTERNAL_DATE_ERROR = 0x65f5000a, + PR_PROFILE_VERSION = 0x66000003, + PR_PROFILE_VERSION_ERROR = 0x6600000a, + PR_PROFILE_CONFIG_FLAGS = 0x66010003, + PR_PROFILE_CONFIG_FLAGS_ERROR = 0x6601000a, + PR_PROFILE_HOME_SERVER = 0x6602001e, + PR_PROFILE_HOME_SERVER_UNICODE = 0x6602001f, + PR_PROFILE_HOME_SERVER_ERROR = 0x6602000a, + PR_PROFILE_USER = 0x6603001e, + PR_PROFILE_USER_UNICODE = 0x6603001f, + PR_PROFILE_USER_ERROR = 0x6603000a, + PR_PROFILE_CONNECT_FLAGS = 0x66040003, + PR_PROFILE_CONNECT_FLAGS_ERROR = 0x6604000a, + PR_PROFILE_TRANSPORT_FLAGS = 0x66050003, + PR_PROFILE_TRANSPORT_FLAGS_ERROR = 0x6605000a, + PR_PROFILE_UI_STATE = 0x66060003, + PR_PROFILE_UI_STATE_ERROR = 0x6606000a, + PR_PROFILE_UNRESOLVED_NAME = 0x6607001e, + PR_PROFILE_UNRESOLVED_NAME_UNICODE = 0x6607001f, + PR_PROFILE_UNRESOLVED_NAME_ERROR = 0x6607000a, + PR_PROFILE_UNRESOLVED_SERVER = 0x6608001e, + PR_PROFILE_UNRESOLVED_SERVER_UNICODE = 0x6608001f, + PR_PROFILE_UNRESOLVED_SERVER_ERROR = 0x6608000a, + PR_PROFILE_OPEN_FLAGS = 0x66090003, + PR_PROFILE_OPEN_FLAGS_ERROR = 0x6609000a, + PR_PROFILE_BINDING_ORDER = 0x6609001e, + PR_PROFILE_BINDING_ORDER_UNICODE = 0x6609001f, + PR_PROFILE_TYPE = 0x660a0003, + PR_PROFILE_TYPE_ERROR = 0x660a000a, + PR_PROFILE_MAILBOX = 0x660b001e, + PR_PROFILE_MAILBOX_UNICODE = 0x660b001f, + PR_PROFILE_MAILBOX_ERROR = 0x660b000a, + PR_PROFILE_SERVER = 0x660c001e, + PR_PROFILE_SERVER_UNICODE = 0x660c001f, + PR_PROFILE_SERVER_ERROR = 0x660c000a, + PR_PROFILE_MAX_RESTRICT = 0x660d0003, + PR_PROFILE_MAX_RESTRICT_ERROR = 0x660d000a, + PR_PROFILE_AB_FILES_PATH = 0x660e001e, + PR_PROFILE_AB_FILES_PATH_UNICODE = 0x660e001f, + PR_PROFILE_AB_FILES_PATH_ERROR = 0x660e000a, + PR_PROFILE_FAVFLD_DISPLAY_NAME = 0x660f001e, + PR_PROFILE_FAVFLD_DISPLAY_NAME_UNICODE = 0x660f001f, + PR_PROFILE_FAVFLD_DISPLAY_NAME_ERROR = 0x660f000a, + PR_PROFILE_OFFLINE_STORE_PATH = 0x6610001e, + PR_PROFILE_OFFLINE_STORE_PATH_UNICODE = 0x6610001f, + PR_PROFILE_OFFLINE_STORE_PATH_ERROR = 0x6610000a, + PR_PROFILE_OFFLINE_INFO = 0x66110102, + PR_PROFILE_OFFLINE_INFO_ERROR = 0x6611000a, + PR_PROFILE_HOME_SERVER_DN = 0x6612001e, + PR_PROFILE_HOME_SERVER_DN_UNICODE = 0x6612001f, + PR_PROFILE_HOME_SERVER_DN_ERROR = 0x6612000a, + PR_PROFILE_HOME_SERVER_ADDRS = 0x6613101e, + PR_PROFILE_HOME_SERVER_ADDRS_UNICODE = 0x6613101f, + PR_PROFILE_HOME_SERVER_ADDRS_ERROR = 0x6613000a, + PR_PROFILE_SERVER_DN = 0x6614001e, + PR_PROFILE_SERVER_DN_UNICODE = 0x6614001f, + PR_PROFILE_SERVER_DN_ERROR = 0x6614000a, + PR_PROFILE_FAVFLD_COMMENT = 0x6615001e, + PR_PROFILE_FAVFLD_COMMENT_UNICODE = 0x6615001f, + PR_PROFILE_FAVFLD_COMMENT_ERROR = 0x6615000a, + PR_PROFILE_ALLPUB_DISPLAY_NAME = 0x6616001e, + PR_PROFILE_ALLPUB_DISPLAY_NAME_UNICODE = 0x6616001f, + PR_PROFILE_ALLPUB_DISPLAY_NAME_ERROR = 0x6616000a, + PR_PROFILE_ALLPUB_COMMENT = 0x6617001e, + PR_PROFILE_ALLPUB_COMMENT_UNICODE = 0x6617001f, + PR_PROFILE_ALLPUB_COMMENT_ERROR = 0x6617000a, + PR_DISABLE_WINSOCK = 0x66180003, + PR_DISABLE_WINSOCK_ERROR = 0x6618000a, + PR_IN_TRANSIT = 0x6618000b, + PR_PROFILE_AUTH_PACKAGE = 0x66190003, + PR_PROFILE_AUTH_PACKAGE_ERROR = 0x6619000a, + PR_USER_ENTRYID = 0x66190102, + PR_USER_NAME = 0x661a001e, + PR_USER_NAME_UNICODE = 0x661a001f, + PR_USER_NAME_ERROR = 0x661a000a, + PR_MAILBOX_OWNER_ENTRYID = 0x661b0102, + PR_MAILBOX_OWNER_ENTRYID_ERROR = 0x661b000a, + PR_MAILBOX_OWNER_NAME = 0x661c001e, + PR_MAILBOX_OWNER_NAME_UNICODE = 0x661c001f, + PR_MAILBOX_OWNER_NAME_ERROR = 0x661c000a, + PR_OOF_STATE = 0x661d000b, + PR_OOF_STATE_ERROR = 0x661d000a, + PR_SCHEDULE_FOLDER_ENTRYID = 0x661e0102, + PR_SCHEDULE_FOLDER_ENTRYID_ERROR = 0x661e000a, + PR_IPM_DAF_ENTRYID = 0x661f0102, + PR_IPM_DAF_ENTRYID_ERROR = 0x661f000a, + PR_NON_IPM_SUBTREE_ENTRYID = 0x66200102, + PR_NON_IPM_SUBTREE_ENTRYID_ERROR = 0x6620000a, + PR_EFORMS_REGISTRY_ENTRYID = 0x66210102, + PR_EFORMS_REGISTRY_ENTRYID_ERROR = 0x6621000a, + PR_SPLUS_FREE_BUSY_ENTRYID = 0x66220102, + PR_SPLUS_FREE_BUSY_ENTRYID_ERROR = 0x6622000a, + PR_HIERARCHY_SERVER = 0x6623001e, + PR_HIERARCHY_SERVER_UNICODE = 0x6623001f, + PR_HIERARCHY_SERVER_ERROR = 0x6623000a, + PR_OFFLINE_ADDRBOOK_ENTRYID = 0x66230102, + PR_EFORMS_FOR_LOCALE_ENTRYID = 0x66240102, + PR_EFORMS_FOR_LOCALE_ENTRYID_ERROR = 0x6624000a, + PR_FREE_BUSY_FOR_LOCAL_SITE_ENTRYID = 0x66250102, + PR_FREE_BUSY_FOR_LOCAL_SITE_ENTRYID_ERROR = 0x6625000a, + PR_ADDRBOOK_FOR_LOCAL_SITE_ENTRYID = 0x66260102, + PR_ADDRBOOK_FOR_LOCAL_SITE_ENTRYID_ERROR = 0x6626000a, + PR_OFFLINE_MESSAGE_ENTRYID = 0x66270102, + PR_OFFLINE_MESSAGE_ENTRYID_ERROR = 0x6627000a, + PR_GW_MTSIN_ENTRYID = 0x66280102, + PR_GW_MTSIN_ENTRYID_ERROR = 0x6628000a, + PR_GW_MTSOUT_ENTRYID = 0x66290102, + PR_GW_MTSOUT_ENTRYID_ERROR = 0x6629000a, + PR_TRANSFER_ENABLED = 0x662a000b, + PR_TRANSFER_ENABLED_ERROR = 0x662a000a, + PR_TEST_LINE_SPEED = 0x662b0102, + PR_TEST_LINE_SPEED_ERROR = 0x662b000a, + PR_HIERARCHY_SYNCHRONIZER = 0x662c000d, + PR_HIERARCHY_SYNCHRONIZER_ERROR = 0x662c000a, + PR_CONTENTS_SYNCHRONIZER = 0x662d000d, + PR_CONTENTS_SYNCHRONIZER_ERROR = 0x662d000a, + PR_COLLECTOR = 0x662e000d, + PR_COLLECTOR_ERROR = 0x662e000a, + PR_FAST_TRANSFER = 0x662f000d, + PR_FAST_TRANSFER_ERROR = 0x662f000a, + PR_IPM_FAVORITES_ENTRYID = 0x66300102, + PR_IPM_FAVORITES_ENTRYID_ERROR = 0x6630000a, + PR_IPM_PUBLIC_FOLDERS_ENTRYID = 0x66310102, + PR_IPM_PUBLIC_FOLDERS_ENTRYID_ERROR = 0x6631000a, + PR_STORE_OFFLINE = 0x6632000b, + PR_STORE_OFFLINE_ERROR = 0x6632000a, + PR_CHANGE_ADVISOR = 0x6634000d, + PR_CHANGE_ADVISOR_ERROR = 0x6634000a, + PR_FAVORITES_DEFAULT_NAME = 0x6635001e, + PR_FAVORITES_DEFAULT_NAME_UNICODE = 0x6635001f, + PR_FAVORITES_DEFAULT_NAME_ERROR = 0x6635000a, + PR_SYS_CONFIG_FOLDER_ENTRYID = 0x66360102, + PR_SYS_CONFIG_FOLDER_ENTRYID_ERROR = 0x6636000a, + PR_CHANGE_NOTIFICATION_GUID = 0x66370048, + PR_CHANGE_NOTIFICATION_GUID_ERROR = 0x6637000a, + PR_FOLDER_CHILD_COUNT = 0x66380003, + PR_FOLDER_CHILD_COUNT_ERROR = 0x6638000a, + PR_RIGHTS = 0x66390003, + PR_RIGHTS_ERROR = 0x6639000a, + PR_HAS_RULES = 0x663a000b, + PR_HAS_RULES_ERROR = 0x663a000a, + PR_ADDRESS_BOOK_ENTRYID = 0x663b0102, + PR_ADDRESS_BOOK_ENTRYID_ERROR = 0x663b000a, + PR_PUBLIC_FOLDER_ENTRYID = 0x663c0102, + PR_PUBLIC_FOLDER_ENTRYID_ERROR = 0x663c000a, + PR_OFFLINE_FLAGS = 0x663d0003, + PR_OFFLINE_FLAGS_ERROR = 0x663d000a, + PR_HIERARCHY_CHANGE_NUM = 0x663e0003, + PR_HIERARCHY_CHANGE_NUM_ERROR = 0x663e000a, + PR_HAS_MODERATOR_RULES = 0x663f000b, + PR_HAS_MODERATOR_RULES_ERROR = 0x663f000a, + PR_DELETED_MSG_COUNT = 0x66400003, + PR_DELETED_MSG_COUNT_ERROR = 0x6640000a, + PR_DELETED_FOLDER_COUNT = 0x66410003, + PR_DELETED_FOLDER_COUNT_ERROR = 0x6641000a, + PR_OLDEST_DELETED_ON = 0x66420040, + PR_OLDEST_DELETED_ON_ERROR = 0x6642000a, + PR_DELETED_ASSOC_MSG_COUNT = 0x66430003, + PR_DELETED_ASSOC_MSG_COUNT_ERROR = 0x6643000a, + PR_REPLICA_SERVER = 0x6644001e, + PR_REPLICA_SERVER_UNICODE = 0x6644001f, + PR_REPLICA_SERVER_ERROR = 0x6644000a, + PR_CLIENT_ACTIONS = 0x66450102, + PR_CLIENT_ACTIONS_ERROR = 0x6645000a, + PR_DAM_ORIGINAL_ENTRYID = 0x66460102, + PR_DAM_ORIGINAL_ENTRYID_ERROR = 0x6646000a, + PR_DAM_BACK_PATCHED = 0x6647000b, + PR_DAM_BACK_PATCHED_ERROR = 0x6647000a, + PR_RULE_ERROR = 0x66480003, + PR_RULE_ERROR_ERROR = 0x6648000a, + PR_RULE_ACTION_TYPE = 0x66490003, + PR_RULE_ACTION_TYPE_ERROR = 0x6649000a, + PR_HAS_NAMED_PROPERTIES = 0x664a000b, + PR_HAS_NAMED_PROPERTIES_ERROR = 0x664a000a, + PR_REPLICA_VERSION = 0x664b0014, + PR_REPLICA_VERSION_ERROR = 0x664b000a, + PR_RULE_ACTION_NUMBER = 0x66500003, + PR_RULE_ACTION_NUMBER_ERROR = 0x6650000a, + PR_RULE_FOLDER_ENTRYID = 0x66510102, + PR_RULE_FOLDER_ENTRYID_ERROR = 0x6651000a, + PR_ACTIVE_USER_ENTRYID = 0x66520102, + PR_ACTIVE_USER_ENTRYID_ERROR = 0x6652000a, + PR_0X400_ENVELOPE_TYPE = 0x66530003, + PR_0X400_ENVELOPE_TYPE_ERROR = 0x6653000a, + PR_MSG_FOLD_TIME = 0x66540040, + PR_MSG_FOLD_TIME_ERROR = 0x6654000a, + PR_ICS_CHANGE_KEY = 0x66550102, + PR_ICS_CHANGE_KEY_ERROR = 0x6655000a, + PR_GW_ADMIN_OPERATIONS = 0x66580003, + PR_GW_ADMIN_OPERATIONS_ERROR = 0x6658000a, + PR_INTERNET_CONTENT = 0x66590102, + PR_INTERNET_CONTENT_ERROR = 0x6659000a, + PR_HAS_ATTACH_FROM_IMAIL = 0x665a000b, + PR_HAS_ATTACH_FROM_IMAIL_ERROR = 0x665a000a, + PR_ORIGINATOR_NAME = 0x665b001e, + PR_ORIGINATOR_NAME_UNICODE = 0x665b001f, + PR_ORIGINATOR_NAME_ERROR = 0x665b000a, + PR_ORIGINATOR_ADDR = 0x665c001e, + PR_ORIGINATOR_ADDR_UNICODE = 0x665c001f, + PR_ORIGINATOR_ADDR_ERROR = 0x665c000a, + PR_ORIGINATOR_ADDRTYPE = 0x665d001e, + PR_ORIGINATOR_ADDRTYPE_UNICODE = 0x665d001f, + PR_ORIGINATOR_ADDRTYPE_ERROR = 0x665d000a, + PR_ORIGINATOR_ENTRYID = 0x665e0102, + PR_ORIGINATOR_ENTRYID_ERROR = 0x665e000a, + PR_ARRIVAL_TIME = 0x665f0040, + PR_ARRIVAL_TIME_ERROR = 0x665f000a, + PR_TRACE_INFO = 0x66600102, + PR_TRACE_INFO_ERROR = 0x6660000a, + PR_SUBJECT_TRACE_INFO = 0x66610102, + PR_SUBJECT_TRACE_INFO_ERROR = 0x6661000a, + PR_RECIPIENT_NUMBER = 0x66620003, + PR_RECIPIENT_NUMBER_ERROR = 0x6662000a, + PR_MTS_SUBJECT_ID = 0x66630102, + PR_MTS_SUBJECT_ID_ERROR = 0x6663000a, + PR_REPORT_DESTINATION_NAME = 0x6664001e, + PR_REPORT_DESTINATION_NAME_UNICODE = 0x6664001f, + PR_REPORT_DESTINATION_NAME_ERROR = 0x6664000a, + PR_REPORT_DESTINATION_ENTRYID = 0x66650102, + PR_REPORT_DESTINATION_ENTRYID_ERROR = 0x6665000a, + PR_CONTENT_SEARCH_KEY = 0x66660102, + PR_CONTENT_SEARCH_KEY_ERROR = 0x6666000a, + PR_FOREIGN_ID = 0x66670102, + PR_FOREIGN_ID_ERROR = 0x6667000a, + PR_FOREIGN_REPORT_ID = 0x66680102, + PR_FOREIGN_REPORT_ID_ERROR = 0x6668000a, + PR_FOREIGN_SUBJECT_ID = 0x66690102, + PR_FOREIGN_SUBJECT_ID_ERROR = 0x6669000a, + PR_INTERNAL_TRACE_INFO = 0x666a0102, + PR_INTERNAL_TRACE_INFO_ERROR = 0x666a000a, + PR_IN_CONFLICT = 0x666c000b, + PR_IN_CONFLICT_ERROR = 0x666c000a, + PR_LONGTERM_ENTRYID_FROM_TABLE = 0x66700102, + PR_LONGTERM_ENTRYID_FROM_TABLE_ERROR = 0x6670000a, + PR_MEMBER_ID = 0x66710014, + PR_MEMBER_ID_ERROR = 0x6671000a, + PR_MEMBER_NAME = 0x6672001e, + PR_MEMBER_NAME_UNICODE = 0x6672001f, + PR_MEMBER_NAME_ERROR = 0x6672000a, + PR_MEMBER_RIGHTS = 0x66730003, + PR_MEMBER_RIGHTS_ERROR = 0x6673000a, + PR_RULE_ID = 0x66740014, + PR_RULE_ID_ERROR = 0x6674000a, + PR_RULE_IDS = 0x66750102, + PR_RULE_IDS_ERROR = 0x6675000a, + PR_RULE_SEQUENCE = 0x66760003, + PR_RULE_SEQUENCE_ERROR = 0x6676000a, + PR_RULE_STATE = 0x66770003, + PR_RULE_STATE_ERROR = 0x6677000a, + PR_RULE_USER_FLAGS = 0x66780003, + PR_RULE_USER_FLAGS_ERROR = 0x6678000a, + PR_RULE_CONDITION = 0x667900fd, + PR_RULE_CONDITION_ERROR = 0x6679000a, + PR_PROFILE_MOAB = 0x667b001e, + PR_PROFILE_MOAB_UNICODE = 0x667b001f, + PR_PROFILE_MOAB_ERROR = 0x667b000a, + PR_PROFILE_MOAB_GUID = 0x667c001e, + PR_PROFILE_MOAB_GUID_UNICODE = 0x667c001f, + PR_PROFILE_MOAB_GUID_ERROR = 0x667c000a, + PR_PROFILE_MOAB_SEQ = 0x667d0003, + PR_PROFILE_MOAB_SEQ_ERROR = 0x667d000a, + PR_IMPLIED_RESTRICTIONS = 0x667f1102, + PR_IMPLIED_RESTRICTIONS_ERROR = 0x667f000a, + PR_RULE_ACTIONS = 0x668000fe, + PR_RULE_ACTIONS_ERROR = 0x6680000a, + PR_RULE_PROVIDER = 0x6681001e, + PR_RULE_PROVIDER_UNICODE = 0x6681001f, + PR_RULE_PROVIDER_ERROR = 0x6681000a, + PR_RULE_NAME = 0x6682001e, + PR_RULE_NAME_UNICODE = 0x6682001f, + PR_RULE_NAME_ERROR = 0x6682000a, + PR_RULE_LEVEL = 0x66830003, + PR_RULE_LEVEL_ERROR = 0x6683000a, + PR_RULE_PROVIDER_DATA = 0x66840102, + PR_RULE_PROVIDER_DATA_ERROR = 0x6684000a, + PR_LAST_FULL_BACKUP = 0x66850040, + PR_LAST_FULL_BACKUP_ERROR = 0x6685000a, + PR_PROFILE_ADDR_INFO = 0x66870102, + PR_PROFILE_ADDR_INFO_ERROR = 0x6687000a, + PR_PROFILE_OPTIONS_DATA = 0x66890102, + PR_PROFILE_OPTIONS_DATA_ERROR = 0x6689000a, + PR_EVENTS_ROOT_FOLDER_ENTRYID = 0x668a0102, + PR_EVENTS_ROOT_FOLDER_ENTRYID_ERROR = 0x668a000a, + PR_INBOUND_NEWSFEED_DN = 0x668d001e, + PR_INBOUND_NEWSFEED_DN_UNICODE = 0x668d001f, + PR_INBOUND_NEWSFEED_DN_ERROR = 0x668d000a, + PR_OUTBOUND_NEWSFEED_DN = 0x668e001e, + PR_OUTBOUND_NEWSFEED_DN_UNICODE = 0x668e001f, + PR_OUTBOUND_NEWSFEED_DN_ERROR = 0x668e000a, + PR_DELETED_ON = 0x668f0040, + PR_DELETED_ON_ERROR = 0x668f000a, + PR_REPLICATION_STYLE = 0x66900003, + PR_REPLICATION_STYLE_ERROR = 0x6690000a, + PR_REPLICATION_SCHEDULE = 0x66910102, + PR_REPLICATION_SCHEDULE_ERROR = 0x6691000a, + PR_REPLICATION_MESSAGE_PRIORITY = 0x66920003, + PR_REPLICATION_MESSAGE_PRIORITY_ERROR = 0x6692000a, + PR_OVERALL_MSG_AGE_LIMIT = 0x66930003, + PR_OVERALL_MSG_AGE_LIMIT_ERROR = 0x6693000a, + PR_REPLICATION_ALWAYS_INTERVAL = 0x66940003, + PR_REPLICATION_ALWAYS_INTERVAL_ERROR = 0x6694000a, + PR_REPLICATION_MSG_SIZE = 0x66950003, + PR_REPLICATION_MSG_SIZE_ERROR = 0x6695000a, + PR_IS_NEWSGROUP_ANCHOR = 0x6696000b, + PR_IS_NEWSGROUP_ANCHOR_ERROR = 0x6696000a, + PR_IS_NEWSGROUP = 0x6697000b, + PR_IS_NEWSGROUP_ERROR = 0x6697000a, + PR_REPLICA_LIST = 0x66980102, + PR_REPLICA_LIST_ERROR = 0x6698000a, + PR_OVERALL_AGE_LIMIT = 0x66990003, + PR_OVERALL_AGE_LIMIT_ERROR = 0x6699000a, + PR_INTERNET_CHARSET = 0x669a001e, + PR_INTERNET_CHARSET_UNICODE = 0x669a001f, + PR_INTERNET_CHARSET_ERROR = 0x669a000a, + PR_DELETED_MESSAGE_SIZE_EXTENDED = 0x669b0014, + PR_DELETED_MESSAGE_SIZE_EXTENDED_ERROR = 0x669b000a, + PR_DELETED_NORMAL_MESSAGE_SIZE_EXTENDED = 0x669c0014, + PR_DELETED_NORMAL_MESSAGE_SIZE_EXTENDED_ERROR = 0x669c000a, + PR_DELETED_ASSOC_MESSAGE_SIZE_EXTENDED = 0x669d0014, + PR_DELETED_ASSOC_MESSAGE_SIZE_EXTENDED_ERROR = 0x669d000a, + PR_SECURE_IN_SITE = 0x669e000b, + PR_SECURE_IN_SITE_ERROR = 0x669e000a, + PR_NT_USER_NAME = 0x66a0001e, + PR_NT_USER_NAME_UNICODE = 0x66a0001f, + PR_NT_USER_NAME_ERROR = 0x66a0000a, + PR_LOCALE_ID = 0x66a10003, + PR_LOCALE_ID_ERROR = 0x66a1000a, + PR_LAST_LOGON_TIME = 0x66a20040, + PR_LAST_LOGON_TIME_ERROR = 0x66a2000a, + PR_LAST_LOGOFF_TIME = 0x66a30040, + PR_LAST_LOGOFF_TIME_ERROR = 0x66a3000a, + PR_STORAGE_LIMIT_INFORMATION = 0x66a40003, + PR_STORAGE_LIMIT_INFORMATION_ERROR = 0x66a4000a, + PR_NEWSGROUP_COMPONENT = 0x66a5001e, + PR_NEWSGROUP_COMPONENT_UNICODE = 0x66a5001f, + PR_NEWSGROUP_COMPONENT_ERROR = 0x66a5000a, + PR_NEWSFEED_INFO = 0x66a60102, + PR_NEWSFEED_INFO_ERROR = 0x66a6000a, + PR_INTERNET_NEWSGROUP_NAME = 0x66a7001e, + PR_INTERNET_NEWSGROUP_NAME_UNICODE = 0x66a7001f, + PR_INTERNET_NEWSGROUP_NAME_ERROR = 0x66a7000a, + PR_FOLDER_FLAGS = 0x66a80003, + PR_FOLDER_FLAGS_ERROR = 0x66a8000a, + PR_LAST_ACCESS_TIME = 0x66a90040, + PR_LAST_ACCESS_TIME_ERROR = 0x66a9000a, + PR_RESTRICTION_COUNT = 0x66aa0003, + PR_RESTRICTION_COUNT_ERROR = 0x66aa000a, + PR_CATEG_COUNT = 0x66ab0003, + PR_CATEG_COUNT_ERROR = 0x66ab000a, + PR_CACHED_COLUMN_COUNT = 0x66ac0003, + PR_CACHED_COLUMN_COUNT_ERROR = 0x66ac000a, + PR_NORMAL_MSG_W_ATTACH_COUNT = 0x66ad0003, + PR_NORMAL_MSG_W_ATTACH_COUNT_ERROR = 0x66ad000a, + PR_ASSOC_MSG_W_ATTACH_COUNT = 0x66ae0003, + PR_ASSOC_MSG_W_ATTACH_COUNT_ERROR = 0x66ae000a, + PR_RECIPIENT_ON_NORMAL_MSG_COUNT = 0x66af0003, + PR_RECIPIENT_ON_NORMAL_MSG_COUNT_ERROR = 0x66af000a, + PR_RECIPIENT_ON_ASSOC_MSG_COUNT = 0x66b00003, + PR_RECIPIENT_ON_ASSOC_MSG_COUNT_ERROR = 0x66b0000a, + PR_ATTACH_ON_NORMAL_MSG_COUNT = 0x66b10003, + PR_ATTACH_ON_NORMAL_MSG_COUNT_ERROR = 0x66b1000a, + PR_ATTACH_ON_ASSOC_MSG_COUNT = 0x66b20003, + PR_ATTACH_ON_ASSOC_MSG_COUNT_ERROR = 0x66b2000a, + PR_NORMAL_MESSAGE_SIZE = 0x66b30003, + PR_NORMAL_MESSAGE_SIZE_ERROR = 0x66b3000a, + PR_NORMAL_MESSAGE_SIZE_EXTENDED = 0x66b30014, + PR_ASSOC_MESSAGE_SIZE = 0x66b40003, + PR_ASSOC_MESSAGE_SIZE_ERROR = 0x66b4000a, + PR_ASSOC_MESSAGE_SIZE_EXTENDED = 0x66b40014, + PR_FOLDER_PATHNAME = 0x66b5001e, + PR_FOLDER_PATHNAME_UNICODE = 0x66b5001f, + PR_FOLDER_PATHNAME_ERROR = 0x66b5000a, + PR_OWNER_COUNT = 0x66b60003, + PR_OWNER_COUNT_ERROR = 0x66b6000a, + PR_CONTACT_COUNT = 0x66b70003, + PR_CONTACT_COUNT_ERROR = 0x66b7000a, + PR_CODE_PAGE_ID = 0x66c30003, + PR_CODE_PAGE_ID_ERROR = 0x66c3000a, + PR_RETENTION_AGE_LIMIT = 0x66c40003, + PR_RETENTION_AGE_LIMIT_ERROR = 0x66c4000a, + PR_DISABLE_PERUSER_READ = 0x66c5000b, + PR_DISABLE_PERUSER_READ_ERROR = 0x66c5000a, + PR_INTERNET_PARSE_STATE = 0x66c60102, + PR_INTERNET_PARSE_STATE_ERROR = 0x66c6000a, + PR_INTERNET_MESSAGE_INFO = 0x66c70102, + PR_INTERNET_MESSAGE_INFO_ERROR = 0x66c7000a, + PR_PST_PATH = 0x6700001e, + PR_PST_PATH_UNICODE = 0x6700001f, + PR_PST_PATH_ERROR = 0x6700000a, + PR_PST_REMEMBER_PW = 0x6701000b, + PR_PST_REMEMBER_PW_ERROR = 0x6701000a, + PR_OST_ENCRYPTION = 0x67020003, + PR_OST_ENCRYPTION_ERROR = 0x6702000a, + PR_PST_PW_SZ_OLD = 0x6703001e, + PR_PST_PW_SZ_OLD_UNICODE = 0x6703001f, + PR_PST_PW_SZ_OLD_ERROR = 0x6703000a, + PR_PST_PW_SZ_NEW = 0x6704001e, + PR_PST_PW_SZ_NEW_UNICODE = 0x6704001f, + PR_PST_PW_SZ_NEW_ERROR = 0x6704000a, + PR_SORT_LOCALE_ID = 0x67050003, + PR_SORT_LOCALE_ID_ERROR = 0x6705000a, + PR_URL_NAME = 0x6707001e, + PR_URL_NAME_UNICODE = 0x6707001f, + PR_URL_NAME_ERROR = 0x6707000a, + PR_LOCAL_COMMIT_TIME = 0x67090040, + PR_LOCAL_COMMIT_TIME_ERROR = 0x6709000a, + PR_LOCAL_COMMIT_TIME_MAX = 0x670a0040, + PR_LOCAL_COMMIT_TIME_MAX_ERROR = 0x670a000a, + PR_DELETED_COUNT_TOTAL = 0x670b0003, + PR_DELETED_COUNT_TOTAL_ERROR = 0x670b000a, + PR_AUTO_RESET = 0x670c0048, + PR_AUTO_RESET_ERROR = 0x670c000a, + PR_URL_COMP_NAME_HASH = 0x67100003, + PR_URL_COMP_NAME_HASH_ERROR = 0x6710000a, + PR_MSG_FOLDER_TEMPLATE_RES_2 = 0x67110003, + PR_MSG_FOLDER_TEMPLATE_RES_2_ERROR = 0x6711000a, + PR_RANK = 0x67120003, + PR_RANK_ERROR = 0x6712000a, + PR_MSG_FOLDER_TEMPLATE_RES_4 = 0x6713000b, + PR_MSG_FOLDER_TEMPLATE_RES_4_ERROR = 0x6713000a, + PR_MSG_FOLDER_TEMPLATE_RES_5 = 0x6714000b, + PR_MSG_FOLDER_TEMPLATE_RES_5_ERROR = 0x6714000a, + PR_MSG_FOLDER_TEMPLATE_RES_6 = 0x6715000b, + PR_MSG_FOLDER_TEMPLATE_RES_6_ERROR = 0x6715000a, + PR_MSG_FOLDER_TEMPLATE_RES_7 = 0x67160102, + PR_MSG_FOLDER_TEMPLATE_RES_7_ERROR = 0x6716000a, + PR_MSG_FOLDER_TEMPLATE_RES_8 = 0x67170102, + PR_MSG_FOLDER_TEMPLATE_RES_8_ERROR = 0x6717000a, + PR_MSG_FOLDER_TEMPLATE_RES_9 = 0x67180102, + PR_MSG_FOLDER_TEMPLATE_RES_9_ERROR = 0x6718000a, + PR_MSG_FOLDER_TEMPLATE_RES_10 = 0x6719001e, + PR_MSG_FOLDER_TEMPLATE_RES_10_UNICODE = 0x6719001f, + PR_MSG_FOLDER_TEMPLATE_RES_10_ERROR = 0x6719000a, + PR_MSG_FOLDER_TEMPLATE_RES_11 = 0x671a001e, + PR_MSG_FOLDER_TEMPLATE_RES_11_UNICODE = 0x671a001f, + PR_MSG_FOLDER_TEMPLATE_RES_11_ERROR = 0x671a000a, + PR_MSG_FOLDER_TEMPLATE_RES_12 = 0x671b001e, + PR_MSG_FOLDER_TEMPLATE_RES_12_UNICODE = 0x671b001f, + PR_MSG_FOLDER_TEMPLATE_RES_12_ERROR = 0x671b000a, + PR_PF_PLATINUM_HOME_MDB = 0x671e000b, + PR_PF_PLATINUM_HOME_MDB_ERROR = 0x671e000a, + PR_PF_PROXY_REQUIRED = 0x671f000b, + PR_PF_PROXY_REQUIRED_ERROR = 0x671f000a, + PR_INTERNET_FREE_DOC_INFO = 0x67200102, + PR_INTERNET_FREE_DOC_INFO_ERROR = 0x6720000a, + PR_PF_OVER_HARD_QUOTA_LIMIT = 0x67210003, + PR_PF_OVER_HARD_QUOTA_LIMIT_ERROR = 0x6721000a, + PR_PF_MSG_SIZE_LIMIT = 0x67220003, + PR_PF_MSG_SIZE_LIMIT_ERROR = 0x6722000a, + PR_CONNECTION_MODULUS = 0x67430003, + PR_CONNECTION_MODULUS_ERROR = 0x6743000a, + PR_DELIVER_TO_DN = 0x6744001e, + PR_DELIVER_TO_DN_UNICODE = 0x6744001f, + PR_DELIVER_TO_DN_ERROR = 0x6744000a, + PR_MIME_SIZE = 0x67460003, + PR_MIME_SIZE_ERROR = 0x6746000a, + PR_FILE_SIZE_EXTENDED = 0x67470014, + PR_FILE_SIZE_EXTENDED_ERROR = 0x6747000a, + PR_FID = 0x67480014, + PR_FID_ERROR = 0x6748000a, + PR_PARENT_FID = 0x67490014, + PR_PARENT_FID_ERROR = 0x6749000a, + PR_MID = 0x674a0014, + PR_MID_ERROR = 0x674a000a, + PR_CATEG_ID = 0x674b0014, + PR_CATEG_ID_ERROR = 0x674b000a, + PR_PARENT_CATEG_ID = 0x674c0014, + PR_PARENT_CATEG_ID_ERROR = 0x674c000a, + PR_INST_ID = 0x674d0014, + PR_INST_ID_ERROR = 0x674d000a, + PR_INSTANCE_NUM = 0x674e0003, + PR_INSTANCE_NUM_ERROR = 0x674e000a, + PR_ADDRBOOK_MID = 0x674f0014, + PR_ADDRBOOK_MID_ERROR = 0x674f000a, + PR_ICS_NOTIF = 0x67500003, + PR_ICS_NOTIF_ERROR = 0x6750000a, + PR_ARTICLE_NUM_NEXT = 0x67510003, + PR_ARTICLE_NUM_NEXT_ERROR = 0x6751000a, + PR_IMAP_LAST_ARTICLE_ID = 0x67520003, + PR_IMAP_LAST_ARTICLE_ID_ERROR = 0x6752000a, + PR_NOT_822_RENDERABLE = 0x6753000b, + PR_NOT_822_RENDERABLE_ERROR = 0x6753000a, + PR_LTID = 0x67580102, + PR_LTID_ERROR = 0x6758000a, + PR_CN_EXPORT = 0x67590102, + PR_CN_EXPORT_ERROR = 0x6759000a, + PR_PCL_EXPORT = 0x675a0102, + PR_PCL_EXPORT_ERROR = 0x675a000a, + PR_CN_MV_EXPORT = 0x675b1102, + PR_CN_MV_EXPORT_ERROR = 0x675b000a, + PR_PF_QUOTA_STYLE = 0x67790003, + PR_PF_QUOTA_STYLE_ERROR = 0x6779000a, + PR_PF_STORAGE_QUOTA = 0x677b0003, + PR_PF_STORAGE_QUOTA_ERROR = 0x677b000a, + PR_SEARCH_FLAGS = 0x67830003, + PR_SEARCH_FLAGS_ERROR = 0x6783000a, + PR_ASSOCIATED = 0x67aa000b, + PR_ASSOCIATED_ERROR = 0x67aa000a, + PR_PROFILE_SECURE_MAILBOX = 0x67f00102, + PR_PROFILE_SECURE_MAILBOX_ERROR = 0x67f0000a, + PR_MAILBEAT_BOUNCE_SERVER = 0x6800001e, + PR_MAILBEAT_BOUNCE_SERVER_UNICODE = 0x6800001f, + PR_MAILBEAT_BOUNCE_SERVER_ERROR = 0x6800000a, + PR_MAILBEAT_REQUEST_SENT = 0x68010040, + PR_MAILBEAT_REQUEST_SENT_ERROR = 0x6801000a, + PR_USENET_SITE_NAME = 0x6802001e, + PR_USENET_SITE_NAME_UNICODE = 0x6802001f, + PR_USENET_SITE_NAME_ERROR = 0x6802000a, + PR_MAILBEAT_REQUEST_RECEIVED = 0x68030040, + PR_MAILBEAT_REQUEST_RECEIVED_ERROR = 0x6803000a, + PR_MAILBEAT_REQUEST_PROCESSED = 0x68040040, + PR_MAILBEAT_REQUEST_PROCESSED_ERROR = 0x6804000a, + PR_MAILBEAT_REPLY_SENT = 0x68060040, + PR_MAILBEAT_REPLY_SENT_ERROR = 0x6806000a, + PR_MAILBEAT_REPLY_SUBMIT = 0x68070040, + PR_MAILBEAT_REPLY_SUBMIT_ERROR = 0x6807000a, + PR_MAILBEAT_REPLY_RECEIVED = 0x68080040, + PR_MAILBEAT_REPLY_RECEIVED_ERROR = 0x6808000a, + PR_MAILBEAT_REPLY_PROCESSED = 0x68090040, + PR_MAILBEAT_REPLY_PROCESSED_ERROR = 0x6809000a, + PR_DELEGATES_DISPLAY_NAMES = 0x6844101e, + PR_DELEGATES_DISPLAY_NAMES_UNICODE = 0x6844101f, + PR_DELEGATES_DISPLAY_NAMES_ERROR = 0x6844000a, + PR_DELEGATES_ENTRYIDS = 0x68451102, + PR_DELEGATES_ENTRYIDS_ERROR = 0x6845000a, + PR_FREEBUSY_START_RANGE = 0x68470003, + PR_FREEBUSY_START_RANGE_ERROR = 0x6847000a, + PR_FREEBUSY_END_RANGE = 0x68480003, + PR_FREEBUSY_END_RANGE_ERROR = 0x6848000a, + PR_FREEBUSY_EMAIL_ADDRESS = 0x6849001e, + PR_FREEBUSY_EMAIL_ADDRESS_UNICODE = 0x6849001f, + PR_FREEBUSY_EMAIL_ADDRESS_ERROR = 0x6849000a, + PR_FREEBUSY_ALL_MONTHS = 0x684f1003, + PR_FREEBUSY_ALL_MONTHS_ERROR = 0x684f000a, + PR_FREEBUSY_ALL_EVENTS = 0x68501102, + PR_FREEBUSY_ALL_EVENTS_ERROR = 0x6850000a, + PR_FREEBUSY_TENTATIVE_MONTHS = 0x68511003, + PR_FREEBUSY_TENTATIVE_MONTHS_ERROR = 0x6851000a, + PR_FREEBUSY_TENTATIVE_EVENTS = 0x68521102, + PR_FREEBUSY_TENTATIVE_EVENTS_ERROR = 0x6852000a, + PR_FREEBUSY_BUSY_MONTHS = 0x68531003, + PR_FREEBUSY_BUSY_MONTHS_ERROR = 0x6853000a, + PR_FREEBUSY_BUSY_EVENTS = 0x68541102, + PR_FREEBUSY_BUSY_EVENTS_ERROR = 0x6854000a, + PR_FREEBUSY_OOF_MONTHS = 0x68551003, + PR_FREEBUSY_OOF_MONTHS_ERROR = 0x6855000a, + PR_FREEBUSY_OOF_EVENTS = 0x68561102, + PR_FREEBUSY_OOF_EVENTS_ERROR = 0x6856000a, + PR_FREEBUSY_LAST_MODIFIED = 0x68680040, + PR_FREEBUSY_LAST_MODIFIED_ERROR = 0x6868000a, + PR_FREEBUSY_NUM_MONTHS = 0x68690003, + PR_FREEBUSY_NUM_MONTHS_ERROR = 0x6869000a, + PR_DELEGATES_SEE_PRIVATE = 0x686b1003, + PR_DELEGATES_SEE_PRIVATE_ERROR = 0x686b000a, + PR_PERSONAL_FREEBUSY = 0x686c0102, + PR_PERSONAL_FREEBUSY_ERROR = 0x686c000a, + PR_PROCESS_MEETING_REQUESTS = 0x686d000b, + PR_PROCESS_MEETING_REQUESTS_ERROR = 0x686d000a, + PR_DECLINE_RECURRING_MEETING_REQUESTS = 0x686e000b, + PR_DECLINE_RECURRING_MEETING_REQUESTS_ERROR = 0x686e000a, + PR_DECLINE_CONFLICTING_MEETING_REQUESTS = 0x686f000b, + PR_DECLINE_CONFLICTING_MEETING_REQUESTS_ERROR = 0x686f000a, + PR_VD_BINARY = 0x70010102, + PR_VD_BINARY_ERROR = 0x7001000a, + PR_VD_STRINGS = 0x7002001e, + PR_VD_STRINGS_UNICODE = 0x7002001f, + PR_VD_STRINGS_ERROR = 0x7002000a, + PR_VD_FLAGS = 0x70030003, + PR_VD_FLAGS_ERROR = 0x7003000a, + PR_VD_LINK_TO = 0x70040102, + PR_VD_LINK_TO_ERROR = 0x7004000a, + PR_VD_VIEW_FOLDER = 0x70050102, + PR_VD_VIEW_FOLDER_ERROR = 0x7005000a, + PR_VD_NAME = 0x7006001e, + PR_VD_NAME_UNICODE = 0x7006001f, + PR_VD_NAME_ERROR = 0x7006000a, + PR_VD_VERSION = 0x70070003, + PR_VD_VERSION_ERROR = 0x7007000a, + PR_FAV_DISPLAY_NAME_A = 0x7c00001e, + PR_FAV_DISPLAY_NAME_A_UNICODE = 0x7c00001f, + PR_FAV_DISPLAY_NAME_A_ERROR = 0x7c00000a, + PR_FAV_PUBLIC_SOURCE_KEY = 0x7c020102, + PR_FAV_PUBLIC_SOURCE_KEY_ERROR = 0x7c02000a, + PR_OST_OSTID = 0x7c040102, + PR_OST_OSTID_ERROR = 0x7c04000a, + PR_STORE_SLOWLINK = 0x7c0a000b, + PR_STORE_SLOWLINK_ERROR = 0x7c0a000a, + PR_FAV_AUTOSUBFOLDERS = 0x7d010003, + PR_FAV_AUTOSUBFOLDERS_ERROR = 0x7d01000a, + PR_FAV_PARENT_SOURCE_KEY = 0x7d020102, + PR_FAV_PARENT_SOURCE_KEY_ERROR = 0x7d02000a, + PR_FAV_LEVEL_MASK = 0x7d030003, + PR_FAV_LEVEL_MASK_ERROR = 0x7d03000a, + PR_FAV_INHERIT_AUTO = 0x7d070003, + PR_FAV_INHERIT_AUTO_ERROR = 0x7d07000a, + PR_FAV_DEL_SUBS = 0x7d080102, + PR_FAV_DEL_SUBS_ERROR = 0x7d08000a, + PR_ATTACHMENT_LINKID = 0x7ffa0003, + PR_ATTACHMENT_LINKID_ERROR = 0x7ffa000a, + PR_EXCEPTION_STARTTIME = 0x7ffb0040, + PR_EXCEPTION_STARTTIME_ERROR = 0x7ffb000a, + PR_EXCEPTION_ENDTIME = 0x7ffc0040, + PR_EXCEPTION_ENDTIME_ERROR = 0x7ffc000a, + PR_ATTACHMENT_FLAGS = 0x7ffd0003, + PR_ATTACHMENT_FLAGS_ERROR = 0x7ffd000a, + PR_ATTACHMENT_HIDDEN = 0x7ffe000b, + PR_ATTACHMENT_HIDDEN_ERROR = 0x7ffe000a, + PR_EMS_AB_DISPLAY_NAME_OVERRIDE = 0x8001000b, + PR_EMS_AB_DISPLAY_NAME_OVERRIDE_ERROR = 0x8001000a, + PR_EMS_AB_CA_CERTIFICATE = 0x80031102, + PR_EMS_AB_CA_CERTIFICATE_ERROR = 0x8003000a, + PR_EMS_AB_FOLDER_PATHNAME = 0x8004001e, + PR_EMS_AB_FOLDER_PATHNAME_UNICODE = 0x8004001f, + PR_EMS_AB_FOLDER_PATHNAME_ERROR = 0x8004000a, + PR_EMS_AB_MANAGER = 0x8005000d, + PR_EMS_AB_MANAGER_ERROR = 0x8005000a, + PR_EMS_AB_MANAGER_T = 0x8005001e, + PR_EMS_AB_MANAGER_T_UNICODE = 0x8005001f, + PR_EMS_AB_HOME_MDB_O = 0x8006000d, + PR_EMS_AB_HOME_MDB_O_ERROR = 0x8006000a, + PR_EMS_AB_HOME_MDB = 0x8006001e, + PR_EMS_AB_HOME_MDB_UNICODE = 0x8006001f, + PR_EMS_AB_HOME_MTA_O = 0x8007000d, + PR_EMS_AB_HOME_MTA_O_ERROR = 0x8007000a, + PR_EMS_AB_HOME_MTA = 0x8007001e, + PR_EMS_AB_HOME_MTA_UNICODE = 0x8007001f, + PR_EMS_AB_IS_MEMBER_OF_DL = 0x8008000d, + PR_EMS_AB_IS_MEMBER_OF_DL_ERROR = 0x8008000a, + PR_EMS_AB_IS_MEMBER_OF_DL_T = 0x8008001e, + PR_EMS_AB_IS_MEMBER_OF_DL_T_UNICODE = 0x8008001f, + PR_EMS_AB_MEMBER = 0x8009000d, + PR_EMS_AB_MEMBER_ERROR = 0x8009000a, + PR_EMS_AB_MEMBER_T = 0x8009001e, + PR_EMS_AB_MEMBER_T_UNICODE = 0x8009001f, + PR_EMS_AB_AUTOREPLY_MESSAGE = 0x800a001e, + PR_EMS_AB_AUTOREPLY_MESSAGE_UNICODE = 0x800a001f, + PR_EMS_AB_AUTOREPLY_MESSAGE_ERROR = 0x800a000a, + PR_EMS_AB_AUTOREPLY = 0x800b000b, + PR_EMS_AB_AUTOREPLY_ERROR = 0x800b000a, + PR_EMS_AB_OWNER_O = 0x800c000d, + PR_EMS_AB_OWNER_O_ERROR = 0x800c000a, + PR_EMS_AB_OWNER = 0x800c001e, + PR_EMS_AB_OWNER_UNICODE = 0x800c001f, + PR_EMS_AB_KM_SERVER_O = 0x800d000d, + PR_EMS_AB_KM_SERVER_O_ERROR = 0x800d000a, + PR_EMS_AB_KM_SERVER = 0x800d001e, + PR_EMS_AB_KM_SERVER_UNICODE = 0x800d001f, + PR_EMS_AB_REPORTS = 0x800e000d, + PR_EMS_AB_REPORTS_ERROR = 0x800e000a, + PR_EMS_AB_PROXY_ADDRESSES = 0x800f101e, + PR_EMS_AB_PROXY_ADDRESSES_UNICODE = 0x800f101f, + PR_EMS_AB_PROXY_ADDRESSES_ERROR = 0x800f000a, + PR_EMS_AB_HELP_DATA32 = 0x80100102, + PR_EMS_AB_HELP_DATA32_ERROR = 0x8010000a, + PR_EMS_AB_TARGET_ADDRESS = 0x8011001e, + PR_EMS_AB_TARGET_ADDRESS_UNICODE = 0x8011001f, + PR_EMS_AB_TARGET_ADDRESS_ERROR = 0x8011000a, + PR_EMS_AB_TELEPHONE_NUMBER = 0x8012101e, + PR_EMS_AB_TELEPHONE_NUMBER_UNICODE = 0x8012101f, + PR_EMS_AB_TELEPHONE_NUMBER_ERROR = 0x8012000a, + PR_EMS_AB_NT_SECURITY_DESCRIPTOR = 0x80130102, + PR_EMS_AB_NT_SECURITY_DESCRIPTOR_ERROR = 0x8013000a, + PR_EMS_AB_HOME_MDB_BL_O = 0x8014000d, + PR_EMS_AB_HOME_MDB_BL_O_ERROR = 0x8014000a, + PR_EMS_AB_HOME_MDB_BL = 0x8014101e, + PR_EMS_AB_HOME_MDB_BL_UNICODE = 0x8014101f, + PR_EMS_AB_PUBLIC_DELEGATES = 0x8015000d, + PR_EMS_AB_PUBLIC_DELEGATES_ERROR = 0x8015000a, + PR_EMS_AB_PUBLIC_DELEGATES_T = 0x8015001e, + PR_EMS_AB_PUBLIC_DELEGATES_T_UNICODE = 0x8015001f, + PR_EMS_AB_CERTIFICATE_REVOCATION_LIST = 0x80160102, + PR_EMS_AB_CERTIFICATE_REVOCATION_LIST_ERROR = 0x8016000a, + PR_EMS_AB_ADDRESS_ENTRY_DISPLAY_TABLE = 0x80170102, + PR_EMS_AB_ADDRESS_ENTRY_DISPLAY_TABLE_ERROR = 0x8017000a, + PR_EMS_AB_ADDRESS_SYNTAX = 0x80180102, + PR_EMS_AB_ADDRESS_SYNTAX_ERROR = 0x8018000a, + PR_EMS_AB_BUSINESS_ROLES = 0x80230102, + PR_EMS_AB_BUSINESS_ROLES_ERROR = 0x8023000a, + PR_EMS_AB_OWNER_BL_O = 0x8024000d, + PR_EMS_AB_OWNER_BL_O_ERROR = 0x8024000a, + PR_EMS_AB_OWNER_BL = 0x8024101e, + PR_EMS_AB_OWNER_BL_UNICODE = 0x8024101f, + PR_EMS_AB_CROSS_CERTIFICATE_PAIR = 0x80251102, + PR_EMS_AB_CROSS_CERTIFICATE_PAIR_ERROR = 0x8025000a, + PR_EMS_AB_AUTHORITY_REVOCATION_LIST = 0x80261102, + PR_EMS_AB_AUTHORITY_REVOCATION_LIST_ERROR = 0x8026000a, + PR_EMS_AB_ASSOC_NT_ACCOUNT = 0x80270102, + PR_EMS_AB_ASSOC_NT_ACCOUNT_ERROR = 0x8027000a, + PR_EMS_AB_EXPIRATION_TIME = 0x80280040, + PR_EMS_AB_EXPIRATION_TIME_ERROR = 0x8028000a, + PR_EMS_AB_USN_CHANGED = 0x80290003, + PR_EMS_AB_USN_CHANGED_ERROR = 0x8029000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_1 = 0x802d001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_1_UNICODE = 0x802d001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_1_ERROR = 0x802d000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_2 = 0x802e001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_2_UNICODE = 0x802e001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_2_ERROR = 0x802e000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_3 = 0x802f001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_3_UNICODE = 0x802f001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_3_ERROR = 0x802f000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_4 = 0x8030001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_4_UNICODE = 0x8030001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_4_ERROR = 0x8030000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_5 = 0x8031001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_5_UNICODE = 0x8031001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_5_ERROR = 0x8031000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_6 = 0x8032001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_6_UNICODE = 0x8032001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_6_ERROR = 0x8032000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_7 = 0x8033001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_7_UNICODE = 0x8033001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_7_ERROR = 0x8033000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_8 = 0x8034001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_8_UNICODE = 0x8034001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_8_ERROR = 0x8034000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_9 = 0x8035001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_9_UNICODE = 0x8035001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_9_ERROR = 0x8035000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_10 = 0x8036001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_10_UNICODE = 0x8036001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_10_ERROR = 0x8036000a, + PR_EMS_AB_SECURITY_PROTOCOL = 0x80371102, + PR_EMS_AB_SECURITY_PROTOCOL_ERROR = 0x8037000a, + PR_EMS_AB_PF_CONTACTS_O = 0x8038000d, + PR_EMS_AB_PF_CONTACTS_O_ERROR = 0x8038000a, + PR_EMS_AB_PF_CONTACTS = 0x8038101e, + PR_EMS_AB_PF_CONTACTS_UNICODE = 0x8038101f, + PR_EMS_AB_HELP_DATA16 = 0x803a0102, + PR_EMS_AB_HELP_DATA16_ERROR = 0x803a000a, + PR_EMS_AB_HELP_FILE_NAME = 0x803b001e, + PR_EMS_AB_HELP_FILE_NAME_UNICODE = 0x803b001f, + PR_EMS_AB_HELP_FILE_NAME_ERROR = 0x803b000a, + PR_EMS_AB_OBJ_DIST_NAME_O = 0x803c000d, + PR_EMS_AB_OBJ_DIST_NAME_O_ERROR = 0x803c000a, + PR_EMS_AB_OBJ_DIST_NAME = 0x803c001e, + PR_EMS_AB_OBJ_DIST_NAME_UNICODE = 0x803c001f, + PR_EMS_AB_ENCRYPT_ALG_SELECTED_OTHER = 0x803d001e, + PR_EMS_AB_ENCRYPT_ALG_SELECTED_OTHER_UNICODE = 0x803d001f, + PR_EMS_AB_ENCRYPT_ALG_SELECTED_OTHER_ERROR = 0x803d000a, + PR_EMS_AB_AUTOREPLY_SUBJECT = 0x803e001e, + PR_EMS_AB_AUTOREPLY_SUBJECT_UNICODE = 0x803e001f, + PR_EMS_AB_AUTOREPLY_SUBJECT_ERROR = 0x803e000a, + PR_EMS_AB_HOME_PUBLIC_SERVER_O = 0x803f000d, + PR_EMS_AB_HOME_PUBLIC_SERVER_O_ERROR = 0x803f000a, + PR_EMS_AB_HOME_PUBLIC_SERVER = 0x803f001e, + PR_EMS_AB_HOME_PUBLIC_SERVER_UNICODE = 0x803f001f, + PR_EMS_AB_ENCRYPT_ALG_LIST_NA = 0x8040101e, + PR_EMS_AB_ENCRYPT_ALG_LIST_NA_UNICODE = 0x8040101f, + PR_EMS_AB_ENCRYPT_ALG_LIST_NA_ERROR = 0x8040000a, + PR_EMS_AB_ENCRYPT_ALG_LIST_OTHER = 0x8041101e, + PR_EMS_AB_ENCRYPT_ALG_LIST_OTHER_UNICODE = 0x8041101f, + PR_EMS_AB_ENCRYPT_ALG_LIST_OTHER_ERROR = 0x8041000a, + PR_EMS_AB_IMPORTED_FROM = 0x8042001e, + PR_EMS_AB_IMPORTED_FROM_UNICODE = 0x8042001f, + PR_EMS_AB_IMPORTED_FROM_ERROR = 0x8042000a, + PR_EMS_AB_ENCRYPT_ALG_SELECTED_NA = 0x8043001e, + PR_EMS_AB_ENCRYPT_ALG_SELECTED_NA_UNICODE = 0x8043001f, + PR_EMS_AB_ENCRYPT_ALG_SELECTED_NA_ERROR = 0x8043000a, + PR_EMS_AB_ACCESS_CATEGORY = 0x80440003, + PR_EMS_AB_ACCESS_CATEGORY_ERROR = 0x8044000a, + PR_EMS_AB_ACTIVATION_SCHEDULE = 0x80450102, + PR_EMS_AB_ACTIVATION_SCHEDULE_ERROR = 0x8045000a, + PR_EMS_AB_ACTIVATION_STYLE = 0x80460003, + PR_EMS_AB_ACTIVATION_STYLE_ERROR = 0x8046000a, + PR_EMS_AB_ADDRESS_ENTRY_DISPLAY_TABLE_MSDOS = 0x80470102, + PR_EMS_AB_ADDRESS_ENTRY_DISPLAY_TABLE_MSDOS_ERROR = 0x8047000a, + PR_EMS_AB_ADDRESS_TYPE = 0x8048001e, + PR_EMS_AB_ADDRESS_TYPE_UNICODE = 0x8048001f, + PR_EMS_AB_ADDRESS_TYPE_ERROR = 0x8048000a, + PR_EMS_AB_ADMD = 0x8049001e, + PR_EMS_AB_ADMD_UNICODE = 0x8049001f, + PR_EMS_AB_ADMD_ERROR = 0x8049000a, + PR_EMS_AB_ADMIN_DESCRIPTION = 0x804a001e, + PR_EMS_AB_ADMIN_DESCRIPTION_UNICODE = 0x804a001f, + PR_EMS_AB_ADMIN_DESCRIPTION_ERROR = 0x804a000a, + PR_EMS_AB_ADMIN_DISPLAY_NAME = 0x804b001e, + PR_EMS_AB_ADMIN_DISPLAY_NAME_UNICODE = 0x804b001f, + PR_EMS_AB_ADMIN_DISPLAY_NAME_ERROR = 0x804b000a, + PR_EMS_AB_ADMIN_EXTENSION_DLL = 0x804c001e, + PR_EMS_AB_ADMIN_EXTENSION_DLL_UNICODE = 0x804c001f, + PR_EMS_AB_ADMIN_EXTENSION_DLL_ERROR = 0x804c000a, + PR_EMS_AB_ALIASED_OBJECT_NAME_O = 0x804d000d, + PR_EMS_AB_ALIASED_OBJECT_NAME_O_ERROR = 0x804d000a, + PR_EMS_AB_ALIASED_OBJECT_NAME = 0x804d001e, + PR_EMS_AB_ALIASED_OBJECT_NAME_UNICODE = 0x804d001f, + PR_EMS_AB_ALT_RECIPIENT_O = 0x804e000d, + PR_EMS_AB_ALT_RECIPIENT_O_ERROR = 0x804e000a, + PR_EMS_AB_ALT_RECIPIENT = 0x804e001e, + PR_EMS_AB_ALT_RECIPIENT_UNICODE = 0x804e001f, + PR_EMS_AB_ALT_RECIPIENT_BL_O = 0x804f000d, + PR_EMS_AB_ALT_RECIPIENT_BL_O_ERROR = 0x804f000a, + PR_EMS_AB_ALT_RECIPIENT_BL = 0x804f101e, + PR_EMS_AB_ALT_RECIPIENT_BL_UNICODE = 0x804f101f, + PR_EMS_AB_ANCESTOR_ID = 0x80500102, + PR_EMS_AB_ANCESTOR_ID_ERROR = 0x8050000a, + PR_EMS_AB_ASSOC_REMOTE_DXA_O = 0x8051000d, + PR_EMS_AB_ASSOC_REMOTE_DXA_O_ERROR = 0x8051000a, + PR_EMS_AB_ASSOC_REMOTE_DXA = 0x8051101e, + PR_EMS_AB_ASSOC_REMOTE_DXA_UNICODE = 0x8051101f, + PR_EMS_AB_ASSOCIATION_LIFETIME = 0x80520003, + PR_EMS_AB_ASSOCIATION_LIFETIME_ERROR = 0x8052000a, + PR_EMS_AB_AUTH_ORIG_BL_O = 0x8053000d, + PR_EMS_AB_AUTH_ORIG_BL_O_ERROR = 0x8053000a, + PR_EMS_AB_AUTH_ORIG_BL = 0x8053101e, + PR_EMS_AB_AUTH_ORIG_BL_UNICODE = 0x8053101f, + PR_EMS_AB_AUTHORIZED_DOMAIN = 0x8054001e, + PR_EMS_AB_AUTHORIZED_DOMAIN_UNICODE = 0x8054001f, + PR_EMS_AB_AUTHORIZED_DOMAIN_ERROR = 0x8054000a, + PR_EMS_AB_AUTHORIZED_PASSWORD = 0x80550102, + PR_EMS_AB_AUTHORIZED_PASSWORD_ERROR = 0x8055000a, + PR_EMS_AB_AUTHORIZED_USER = 0x8056001e, + PR_EMS_AB_AUTHORIZED_USER_UNICODE = 0x8056001f, + PR_EMS_AB_AUTHORIZED_USER_ERROR = 0x8056000a, + PR_EMS_AB_BUSINESS_CATEGORY = 0x8057101e, + PR_EMS_AB_BUSINESS_CATEGORY_UNICODE = 0x8057101f, + PR_EMS_AB_BUSINESS_CATEGORY_ERROR = 0x8057000a, + PR_EMS_AB_CAN_CREATE_PF_O = 0x8058000d, + PR_EMS_AB_CAN_CREATE_PF_O_ERROR = 0x8058000a, + PR_EMS_AB_CAN_CREATE_PF = 0x8058101e, + PR_EMS_AB_CAN_CREATE_PF_UNICODE = 0x8058101f, + PR_EMS_AB_CAN_CREATE_PF_BL_O = 0x8059000d, + PR_EMS_AB_CAN_CREATE_PF_BL_O_ERROR = 0x8059000a, + PR_EMS_AB_CAN_CREATE_PF_BL = 0x8059101e, + PR_EMS_AB_CAN_CREATE_PF_BL_UNICODE = 0x8059101f, + PR_EMS_AB_CAN_CREATE_PF_DL_O = 0x805a000d, + PR_EMS_AB_CAN_CREATE_PF_DL_O_ERROR = 0x805a000a, + PR_EMS_AB_CAN_CREATE_PF_DL = 0x805a101e, + PR_EMS_AB_CAN_CREATE_PF_DL_UNICODE = 0x805a101f, + PR_EMS_AB_CAN_CREATE_PF_DL_BL_O = 0x805b000d, + PR_EMS_AB_CAN_CREATE_PF_DL_BL_O_ERROR = 0x805b000a, + PR_EMS_AB_CAN_CREATE_PF_DL_BL = 0x805b101e, + PR_EMS_AB_CAN_CREATE_PF_DL_BL_UNICODE = 0x805b101f, + PR_EMS_AB_CAN_NOT_CREATE_PF_O = 0x805c000d, + PR_EMS_AB_CAN_NOT_CREATE_PF_O_ERROR = 0x805c000a, + PR_EMS_AB_CAN_NOT_CREATE_PF = 0x805c101e, + PR_EMS_AB_CAN_NOT_CREATE_PF_UNICODE = 0x805c101f, + PR_EMS_AB_CAN_NOT_CREATE_PF_BL_O = 0x805d000d, + PR_EMS_AB_CAN_NOT_CREATE_PF_BL_O_ERROR = 0x805d000a, + PR_EMS_AB_CAN_NOT_CREATE_PF_BL = 0x805d101e, + PR_EMS_AB_CAN_NOT_CREATE_PF_BL_UNICODE = 0x805d101f, + PR_EMS_AB_CAN_NOT_CREATE_PF_DL_O = 0x805e000d, + PR_EMS_AB_CAN_NOT_CREATE_PF_DL_O_ERROR = 0x805e000a, + PR_EMS_AB_CAN_NOT_CREATE_PF_DL = 0x805e101e, + PR_EMS_AB_CAN_NOT_CREATE_PF_DL_UNICODE = 0x805e101f, + PR_EMS_AB_CAN_NOT_CREATE_PF_DL_BL_O = 0x805f000d, + PR_EMS_AB_CAN_NOT_CREATE_PF_DL_BL_O_ERROR = 0x805f000a, + PR_EMS_AB_CAN_NOT_CREATE_PF_DL_BL = 0x805f101e, + PR_EMS_AB_CAN_NOT_CREATE_PF_DL_BL_UNICODE = 0x805f101f, + PR_EMS_AB_CAN_PRESERVE_DNS = 0x8060000b, + PR_EMS_AB_CAN_PRESERVE_DNS_ERROR = 0x8060000a, + PR_EMS_AB_CLOCK_ALERT_OFFSET = 0x80610003, + PR_EMS_AB_CLOCK_ALERT_OFFSET_ERROR = 0x8061000a, + PR_EMS_AB_CLOCK_ALERT_REPAIR = 0x8062000b, + PR_EMS_AB_CLOCK_ALERT_REPAIR_ERROR = 0x8062000a, + PR_EMS_AB_CLOCK_WARNING_OFFSET = 0x80630003, + PR_EMS_AB_CLOCK_WARNING_OFFSET_ERROR = 0x8063000a, + PR_EMS_AB_CLOCK_WARNING_REPAIR = 0x8064000b, + PR_EMS_AB_CLOCK_WARNING_REPAIR_ERROR = 0x8064000a, + PR_EMS_AB_COMPUTER_NAME = 0x8065001e, + PR_EMS_AB_COMPUTER_NAME_UNICODE = 0x8065001f, + PR_EMS_AB_COMPUTER_NAME_ERROR = 0x8065000a, + PR_EMS_AB_CONNECTED_DOMAINS = 0x8066101e, + PR_EMS_AB_CONNECTED_DOMAINS_UNICODE = 0x8066101f, + PR_EMS_AB_CONNECTED_DOMAINS_ERROR = 0x8066000a, + PR_EMS_AB_CONTAINER_INFO = 0x80670003, + PR_EMS_AB_CONTAINER_INFO_ERROR = 0x8067000a, + PR_EMS_AB_COST = 0x80680003, + PR_EMS_AB_COST_ERROR = 0x8068000a, + PR_EMS_AB_COUNTRY_NAME = 0x8069001e, + PR_EMS_AB_COUNTRY_NAME_UNICODE = 0x8069001f, + PR_EMS_AB_COUNTRY_NAME_ERROR = 0x8069000a, + PR_EMS_AB_DELIV_CONT_LENGTH = 0x806a0003, + PR_EMS_AB_DELIV_CONT_LENGTH_ERROR = 0x806a000a, + PR_EMS_AB_DELIV_EITS = 0x806b1102, + PR_EMS_AB_DELIV_EITS_ERROR = 0x806b000a, + PR_EMS_AB_DELIV_EXT_CONT_TYPES = 0x806c1102, + PR_EMS_AB_DELIV_EXT_CONT_TYPES_ERROR = 0x806c000a, + PR_EMS_AB_DELIVER_AND_REDIRECT = 0x806d000b, + PR_EMS_AB_DELIVER_AND_REDIRECT_ERROR = 0x806d000a, + PR_EMS_AB_DELIVERY_MECHANISM = 0x806e0003, + PR_EMS_AB_DELIVERY_MECHANISM_ERROR = 0x806e000a, + PR_EMS_AB_DESCRIPTION = 0x806f101e, + PR_EMS_AB_DESCRIPTION_UNICODE = 0x806f101f, + PR_EMS_AB_DESCRIPTION_ERROR = 0x806f000a, + PR_EMS_AB_DESTINATION_INDICATOR = 0x8070101e, + PR_EMS_AB_DESTINATION_INDICATOR_UNICODE = 0x8070101f, + PR_EMS_AB_DESTINATION_INDICATOR_ERROR = 0x8070000a, + PR_EMS_AB_DIAGNOSTIC_REG_KEY = 0x8071001e, + PR_EMS_AB_DIAGNOSTIC_REG_KEY_UNICODE = 0x8071001f, + PR_EMS_AB_DIAGNOSTIC_REG_KEY_ERROR = 0x8071000a, + PR_EMS_AB_DL_MEM_REJECT_PERMS_BL_O = 0x8072000d, + PR_EMS_AB_DL_MEM_REJECT_PERMS_BL_O_ERROR = 0x8072000a, + PR_EMS_AB_DL_MEM_REJECT_PERMS_BL = 0x8072101e, + PR_EMS_AB_DL_MEM_REJECT_PERMS_BL_UNICODE = 0x8072101f, + PR_EMS_AB_DL_MEM_SUBMIT_PERMS_BL_O = 0x8073000d, + PR_EMS_AB_DL_MEM_SUBMIT_PERMS_BL_O_ERROR = 0x8073000a, + PR_EMS_AB_DL_MEM_SUBMIT_PERMS_BL = 0x8073101e, + PR_EMS_AB_DL_MEM_SUBMIT_PERMS_BL_UNICODE = 0x8073101f, + PR_EMS_AB_DL_MEMBER_RULE = 0x80741102, + PR_EMS_AB_DL_MEMBER_RULE_ERROR = 0x8074000a, + PR_EMS_AB_DOMAIN_DEF_ALT_RECIP_O = 0x8075000d, + PR_EMS_AB_DOMAIN_DEF_ALT_RECIP_O_ERROR = 0x8075000a, + PR_EMS_AB_DOMAIN_DEF_ALT_RECIP = 0x8075001e, + PR_EMS_AB_DOMAIN_DEF_ALT_RECIP_UNICODE = 0x8075001f, + PR_EMS_AB_DOMAIN_NAME = 0x8076001e, + PR_EMS_AB_DOMAIN_NAME_UNICODE = 0x8076001f, + PR_EMS_AB_DOMAIN_NAME_ERROR = 0x8076000a, + PR_EMS_AB_DSA_SIGNATURE = 0x80770102, + PR_EMS_AB_DSA_SIGNATURE_ERROR = 0x8077000a, + PR_EMS_AB_DXA_ADMIN_COPY = 0x8078000b, + PR_EMS_AB_DXA_ADMIN_COPY_ERROR = 0x8078000a, + PR_EMS_AB_DXA_ADMIN_FORWARD = 0x8079000b, + PR_EMS_AB_DXA_ADMIN_FORWARD_ERROR = 0x8079000a, + PR_EMS_AB_DXA_ADMIN_UPDATE = 0x807a0003, + PR_EMS_AB_DXA_ADMIN_UPDATE_ERROR = 0x807a000a, + PR_EMS_AB_DXA_APPEND_REQCN = 0x807b000b, + PR_EMS_AB_DXA_APPEND_REQCN_ERROR = 0x807b000a, + PR_EMS_AB_DXA_CONF_CONTAINER_LIST_O = 0x807c000d, + PR_EMS_AB_DXA_CONF_CONTAINER_LIST_O_ERROR = 0x807c000a, + PR_EMS_AB_DXA_CONF_CONTAINER_LIST = 0x807c101e, + PR_EMS_AB_DXA_CONF_CONTAINER_LIST_UNICODE = 0x807c101f, + PR_EMS_AB_DXA_CONF_REQ_TIME = 0x807d0040, + PR_EMS_AB_DXA_CONF_REQ_TIME_ERROR = 0x807d000a, + PR_EMS_AB_DXA_CONF_SEQ = 0x807e001e, + PR_EMS_AB_DXA_CONF_SEQ_UNICODE = 0x807e001f, + PR_EMS_AB_DXA_CONF_SEQ_ERROR = 0x807e000a, + PR_EMS_AB_DXA_CONF_SEQ_USN = 0x807f0003, + PR_EMS_AB_DXA_CONF_SEQ_USN_ERROR = 0x807f000a, + PR_EMS_AB_DXA_EXCHANGE_OPTIONS = 0x80800003, + PR_EMS_AB_DXA_EXCHANGE_OPTIONS_ERROR = 0x8080000a, + PR_EMS_AB_DXA_EXPORT_NOW = 0x8081000b, + PR_EMS_AB_DXA_EXPORT_NOW_ERROR = 0x8081000a, + PR_EMS_AB_DXA_FLAGS = 0x80820003, + PR_EMS_AB_DXA_FLAGS_ERROR = 0x8082000a, + PR_EMS_AB_DXA_IMP_SEQ = 0x8083001e, + PR_EMS_AB_DXA_IMP_SEQ_UNICODE = 0x8083001f, + PR_EMS_AB_DXA_IMP_SEQ_ERROR = 0x8083000a, + PR_EMS_AB_DXA_IMP_SEQ_TIME = 0x80840040, + PR_EMS_AB_DXA_IMP_SEQ_TIME_ERROR = 0x8084000a, + PR_EMS_AB_DXA_IMP_SEQ_USN = 0x80850003, + PR_EMS_AB_DXA_IMP_SEQ_USN_ERROR = 0x8085000a, + PR_EMS_AB_DXA_IMPORT_NOW = 0x8086000b, + PR_EMS_AB_DXA_IMPORT_NOW_ERROR = 0x8086000a, + PR_EMS_AB_DXA_IN_TEMPLATE_MAP = 0x8087101e, + PR_EMS_AB_DXA_IN_TEMPLATE_MAP_UNICODE = 0x8087101f, + PR_EMS_AB_DXA_IN_TEMPLATE_MAP_ERROR = 0x8087000a, + PR_EMS_AB_DXA_LOCAL_ADMIN_O = 0x8088000d, + PR_EMS_AB_DXA_LOCAL_ADMIN_O_ERROR = 0x8088000a, + PR_EMS_AB_DXA_LOCAL_ADMIN = 0x8088001e, + PR_EMS_AB_DXA_LOCAL_ADMIN_UNICODE = 0x8088001f, + PR_EMS_AB_DXA_LOGGING_LEVEL = 0x80890003, + PR_EMS_AB_DXA_LOGGING_LEVEL_ERROR = 0x8089000a, + PR_EMS_AB_DXA_NATIVE_ADDRESS_TYPE = 0x808a001e, + PR_EMS_AB_DXA_NATIVE_ADDRESS_TYPE_UNICODE = 0x808a001f, + PR_EMS_AB_DXA_NATIVE_ADDRESS_TYPE_ERROR = 0x808a000a, + PR_EMS_AB_DXA_OUT_TEMPLATE_MAP = 0x808b101e, + PR_EMS_AB_DXA_OUT_TEMPLATE_MAP_UNICODE = 0x808b101f, + PR_EMS_AB_DXA_OUT_TEMPLATE_MAP_ERROR = 0x808b000a, + PR_EMS_AB_DXA_PASSWORD = 0x808c001e, + PR_EMS_AB_DXA_PASSWORD_UNICODE = 0x808c001f, + PR_EMS_AB_DXA_PASSWORD_ERROR = 0x808c000a, + PR_EMS_AB_DXA_PREV_EXCHANGE_OPTIONS = 0x808d0003, + PR_EMS_AB_DXA_PREV_EXCHANGE_OPTIONS_ERROR = 0x808d000a, + PR_EMS_AB_DXA_PREV_EXPORT_NATIVE_ONLY = 0x808e000b, + PR_EMS_AB_DXA_PREV_EXPORT_NATIVE_ONLY_ERROR = 0x808e000a, + PR_EMS_AB_DXA_PREV_IN_EXCHANGE_SENSITIVITY = 0x808f0003, + PR_EMS_AB_DXA_PREV_IN_EXCHANGE_SENSITIVITY_ERROR = 0x808f000a, + PR_EMS_AB_DXA_PREV_REMOTE_ENTRIES_O = 0x8090000d, + PR_EMS_AB_DXA_PREV_REMOTE_ENTRIES_O_ERROR = 0x8090000a, + PR_EMS_AB_DXA_PREV_REMOTE_ENTRIES = 0x8090001e, + PR_EMS_AB_DXA_PREV_REMOTE_ENTRIES_UNICODE = 0x8090001f, + PR_EMS_AB_DXA_PREV_REPLICATION_SENSITIVITY = 0x80910003, + PR_EMS_AB_DXA_PREV_REPLICATION_SENSITIVITY_ERROR = 0x8091000a, + PR_EMS_AB_DXA_PREV_TEMPLATE_OPTIONS = 0x80920003, + PR_EMS_AB_DXA_PREV_TEMPLATE_OPTIONS_ERROR = 0x8092000a, + PR_EMS_AB_DXA_PREV_TYPES = 0x80930003, + PR_EMS_AB_DXA_PREV_TYPES_ERROR = 0x8093000a, + PR_EMS_AB_DXA_RECIPIENT_CP = 0x8094001e, + PR_EMS_AB_DXA_RECIPIENT_CP_UNICODE = 0x8094001f, + PR_EMS_AB_DXA_RECIPIENT_CP_ERROR = 0x8094000a, + PR_EMS_AB_DXA_REMOTE_CLIENT_O = 0x8095000d, + PR_EMS_AB_DXA_REMOTE_CLIENT_O_ERROR = 0x8095000a, + PR_EMS_AB_DXA_REMOTE_CLIENT = 0x8095001e, + PR_EMS_AB_DXA_REMOTE_CLIENT_UNICODE = 0x8095001f, + PR_EMS_AB_DXA_REQ_SEQ = 0x8096001e, + PR_EMS_AB_DXA_REQ_SEQ_UNICODE = 0x8096001f, + PR_EMS_AB_DXA_REQ_SEQ_ERROR = 0x8096000a, + PR_EMS_AB_DXA_REQ_SEQ_TIME = 0x80970040, + PR_EMS_AB_DXA_REQ_SEQ_TIME_ERROR = 0x8097000a, + PR_EMS_AB_DXA_REQ_SEQ_USN = 0x80980003, + PR_EMS_AB_DXA_REQ_SEQ_USN_ERROR = 0x8098000a, + PR_EMS_AB_DXA_REQNAME = 0x8099001e, + PR_EMS_AB_DXA_REQNAME_UNICODE = 0x8099001f, + PR_EMS_AB_DXA_REQNAME_ERROR = 0x8099000a, + PR_EMS_AB_DXA_SVR_SEQ = 0x809a001e, + PR_EMS_AB_DXA_SVR_SEQ_UNICODE = 0x809a001f, + PR_EMS_AB_DXA_SVR_SEQ_ERROR = 0x809a000a, + PR_EMS_AB_DXA_SVR_SEQ_TIME = 0x809b0040, + PR_EMS_AB_DXA_SVR_SEQ_TIME_ERROR = 0x809b000a, + PR_EMS_AB_DXA_SVR_SEQ_USN = 0x809c0003, + PR_EMS_AB_DXA_SVR_SEQ_USN_ERROR = 0x809c000a, + PR_EMS_AB_DXA_TASK = 0x809d0003, + PR_EMS_AB_DXA_TASK_ERROR = 0x809d000a, + PR_EMS_AB_DXA_TEMPLATE_OPTIONS = 0x809e0003, + PR_EMS_AB_DXA_TEMPLATE_OPTIONS_ERROR = 0x809e000a, + PR_EMS_AB_DXA_TEMPLATE_TIMESTAMP = 0x809f0040, + PR_EMS_AB_DXA_TEMPLATE_TIMESTAMP_ERROR = 0x809f000a, + PR_EMS_AB_DXA_TYPES = 0x80a00003, + PR_EMS_AB_DXA_TYPES_ERROR = 0x80a0000a, + PR_EMS_AB_DXA_UNCONF_CONTAINER_LIST_O = 0x80a1000d, + PR_EMS_AB_DXA_UNCONF_CONTAINER_LIST_O_ERROR = 0x80a1000a, + PR_EMS_AB_DXA_UNCONF_CONTAINER_LIST = 0x80a1101e, + PR_EMS_AB_DXA_UNCONF_CONTAINER_LIST_UNICODE = 0x80a1101f, + PR_EMS_AB_ENCAPSULATION_METHOD = 0x80a20003, + PR_EMS_AB_ENCAPSULATION_METHOD_ERROR = 0x80a2000a, + PR_EMS_AB_ENCRYPT = 0x80a3000b, + PR_EMS_AB_ENCRYPT_ERROR = 0x80a3000a, + PR_EMS_AB_EXPAND_DLS_LOCALLY = 0x80a4000b, + PR_EMS_AB_EXPAND_DLS_LOCALLY_ERROR = 0x80a4000a, + PR_EMS_AB_EXPORT_CONTAINERS_O = 0x80a5000d, + PR_EMS_AB_EXPORT_CONTAINERS_O_ERROR = 0x80a5000a, + PR_EMS_AB_EXPORT_CONTAINERS = 0x80a5101e, + PR_EMS_AB_EXPORT_CONTAINERS_UNICODE = 0x80a5101f, + PR_EMS_AB_EXPORT_CUSTOM_RECIPIENTS = 0x80a6000b, + PR_EMS_AB_EXPORT_CUSTOM_RECIPIENTS_ERROR = 0x80a6000a, + PR_EMS_AB_EXTENDED_CHARS_ALLOWED = 0x80a7000b, + PR_EMS_AB_EXTENDED_CHARS_ALLOWED_ERROR = 0x80a7000a, + PR_EMS_AB_EXTENSION_DATA = 0x80a81102, + PR_EMS_AB_EXTENSION_DATA_ERROR = 0x80a8000a, + PR_EMS_AB_EXTENSION_NAME = 0x80a9101e, + PR_EMS_AB_EXTENSION_NAME_UNICODE = 0x80a9101f, + PR_EMS_AB_EXTENSION_NAME_ERROR = 0x80a9000a, + PR_EMS_AB_EXTENSION_NAME_INHERITED = 0x80aa101e, + PR_EMS_AB_EXTENSION_NAME_INHERITED_UNICODE = 0x80aa101f, + PR_EMS_AB_EXTENSION_NAME_INHERITED_ERROR = 0x80aa000a, + PR_EMS_AB_FACSIMILE_TELEPHONE_NUMBER = 0x80ab1102, + PR_EMS_AB_FACSIMILE_TELEPHONE_NUMBER_ERROR = 0x80ab000a, + PR_EMS_AB_FILE_VERSION = 0x80ac0102, + PR_EMS_AB_FILE_VERSION_ERROR = 0x80ac000a, + PR_EMS_AB_FILTER_LOCAL_ADDRESSES = 0x80ad000b, + PR_EMS_AB_FILTER_LOCAL_ADDRESSES_ERROR = 0x80ad000a, + PR_EMS_AB_FOLDERS_CONTAINER_O = 0x80ae000d, + PR_EMS_AB_FOLDERS_CONTAINER_O_ERROR = 0x80ae000a, + PR_EMS_AB_FOLDERS_CONTAINER = 0x80ae001e, + PR_EMS_AB_FOLDERS_CONTAINER_UNICODE = 0x80ae001f, + PR_EMS_AB_GARBAGE_COLL_PERIOD = 0x80af0003, + PR_EMS_AB_GARBAGE_COLL_PERIOD_ERROR = 0x80af000a, + PR_EMS_AB_GATEWAY_LOCAL_CRED = 0x80b0001e, + PR_EMS_AB_GATEWAY_LOCAL_CRED_UNICODE = 0x80b0001f, + PR_EMS_AB_GATEWAY_LOCAL_CRED_ERROR = 0x80b0000a, + PR_EMS_AB_GATEWAY_LOCAL_DESIG = 0x80b1001e, + PR_EMS_AB_GATEWAY_LOCAL_DESIG_UNICODE = 0x80b1001f, + PR_EMS_AB_GATEWAY_LOCAL_DESIG_ERROR = 0x80b1000a, + PR_EMS_AB_GATEWAY_PROXY = 0x80b2101e, + PR_EMS_AB_GATEWAY_PROXY_UNICODE = 0x80b2101f, + PR_EMS_AB_GATEWAY_PROXY_ERROR = 0x80b2000a, + PR_EMS_AB_GATEWAY_ROUTING_TREE = 0x80b30102, + PR_EMS_AB_GATEWAY_ROUTING_TREE_ERROR = 0x80b3000a, + PR_EMS_AB_GWART_LAST_MODIFIED = 0x80b40040, + PR_EMS_AB_GWART_LAST_MODIFIED_ERROR = 0x80b4000a, + PR_EMS_AB_HAS_FULL_REPLICA_NCS_O = 0x80b5000d, + PR_EMS_AB_HAS_FULL_REPLICA_NCS_O_ERROR = 0x80b5000a, + PR_EMS_AB_HAS_FULL_REPLICA_NCS = 0x80b5101e, + PR_EMS_AB_HAS_FULL_REPLICA_NCS_UNICODE = 0x80b5101f, + PR_EMS_AB_HAS_MASTER_NCS_O = 0x80b6000d, + PR_EMS_AB_HAS_MASTER_NCS_O_ERROR = 0x80b6000a, + PR_EMS_AB_HAS_MASTER_NCS = 0x80b6101e, + PR_EMS_AB_HAS_MASTER_NCS_UNICODE = 0x80b6101f, + PR_EMS_AB_HEURISTICS = 0x80b70003, + PR_EMS_AB_HEURISTICS_ERROR = 0x80b7000a, + PR_EMS_AB_HIDE_DL_MEMBERSHIP = 0x80b8000b, + PR_EMS_AB_HIDE_DL_MEMBERSHIP_ERROR = 0x80b8000a, + PR_EMS_AB_HIDE_FROM_ADDRESS_BOOK = 0x80b9000b, + PR_EMS_AB_HIDE_FROM_ADDRESS_BOOK_ERROR = 0x80b9000a, + PR_EMS_AB_IMPORT_CONTAINER_O = 0x80ba000d, + PR_EMS_AB_IMPORT_CONTAINER_O_ERROR = 0x80ba000a, + PR_EMS_AB_IMPORT_CONTAINER = 0x80ba001e, + PR_EMS_AB_IMPORT_CONTAINER_UNICODE = 0x80ba001f, + PR_EMS_AB_IMPORT_SENSITIVITY = 0x80bb0003, + PR_EMS_AB_IMPORT_SENSITIVITY_ERROR = 0x80bb000a, + PR_EMS_AB_INBOUND_SITES_O = 0x80bc000d, + PR_EMS_AB_INBOUND_SITES_O_ERROR = 0x80bc000a, + PR_EMS_AB_INBOUND_SITES = 0x80bc101e, + PR_EMS_AB_INBOUND_SITES_UNICODE = 0x80bc101f, + PR_EMS_AB_INSTANCE_TYPE = 0x80bd0003, + PR_EMS_AB_INSTANCE_TYPE_ERROR = 0x80bd000a, + PR_EMS_AB_INTERNATIONAL_ISDN_NUMBER = 0x80be101e, + PR_EMS_AB_INTERNATIONAL_ISDN_NUMBER_UNICODE = 0x80be101f, + PR_EMS_AB_INTERNATIONAL_ISDN_NUMBER_ERROR = 0x80be000a, + PR_EMS_AB_INVOCATION_ID = 0x80bf0102, + PR_EMS_AB_INVOCATION_ID_ERROR = 0x80bf000a, + PR_EMS_AB_IS_DELETED = 0x80c0000b, + PR_EMS_AB_IS_DELETED_ERROR = 0x80c0000a, + PR_EMS_AB_IS_SINGLE_VALUED = 0x80c1000b, + PR_EMS_AB_IS_SINGLE_VALUED_ERROR = 0x80c1000a, + PR_EMS_AB_KCC_STATUS = 0x80c21102, + PR_EMS_AB_KCC_STATUS_ERROR = 0x80c2000a, + PR_EMS_AB_KNOWLEDGE_INFORMATION = 0x80c3101e, + PR_EMS_AB_KNOWLEDGE_INFORMATION_UNICODE = 0x80c3101f, + PR_EMS_AB_KNOWLEDGE_INFORMATION_ERROR = 0x80c3000a, + PR_EMS_AB_LINE_WRAP = 0x80c40003, + PR_EMS_AB_LINE_WRAP_ERROR = 0x80c4000a, + PR_EMS_AB_LINK_ID = 0x80c50003, + PR_EMS_AB_LINK_ID_ERROR = 0x80c5000a, + PR_EMS_AB_LOCAL_BRIDGE_HEAD = 0x80c6001e, + PR_EMS_AB_LOCAL_BRIDGE_HEAD_UNICODE = 0x80c6001f, + PR_EMS_AB_LOCAL_BRIDGE_HEAD_ERROR = 0x80c6000a, + PR_EMS_AB_LOCAL_BRIDGE_HEAD_ADDRESS = 0x80c7001e, + PR_EMS_AB_LOCAL_BRIDGE_HEAD_ADDRESS_UNICODE = 0x80c7001f, + PR_EMS_AB_LOCAL_BRIDGE_HEAD_ADDRESS_ERROR = 0x80c7000a, + PR_EMS_AB_LOCAL_INITIAL_TURN = 0x80c8000b, + PR_EMS_AB_LOCAL_INITIAL_TURN_ERROR = 0x80c8000a, + PR_EMS_AB_LOCAL_SCOPE_O = 0x80c9000d, + PR_EMS_AB_LOCAL_SCOPE_O_ERROR = 0x80c9000a, + PR_EMS_AB_LOCAL_SCOPE = 0x80c9101e, + PR_EMS_AB_LOCAL_SCOPE_UNICODE = 0x80c9101f, + PR_EMS_AB_LOG_FILENAME = 0x80ca001e, + PR_EMS_AB_LOG_FILENAME_UNICODE = 0x80ca001f, + PR_EMS_AB_LOG_FILENAME_ERROR = 0x80ca000a, + PR_EMS_AB_LOG_ROLLOVER_INTERVAL = 0x80cb0003, + PR_EMS_AB_LOG_ROLLOVER_INTERVAL_ERROR = 0x80cb000a, + PR_EMS_AB_MAINTAIN_AUTOREPLY_HISTORY = 0x80cc000b, + PR_EMS_AB_MAINTAIN_AUTOREPLY_HISTORY_ERROR = 0x80cc000a, + PR_EMS_AB_MAPI_DISPLAY_TYPE = 0x80cd0003, + PR_EMS_AB_MAPI_DISPLAY_TYPE_ERROR = 0x80cd000a, + PR_EMS_AB_MAPI_ID = 0x80ce0003, + PR_EMS_AB_MAPI_ID_ERROR = 0x80ce000a, + PR_EMS_AB_MDB_BACKOFF_INTERVAL = 0x80cf0003, + PR_EMS_AB_MDB_BACKOFF_INTERVAL_ERROR = 0x80cf000a, + PR_EMS_AB_MDB_MSG_TIME_OUT_PERIOD = 0x80d00003, + PR_EMS_AB_MDB_MSG_TIME_OUT_PERIOD_ERROR = 0x80d0000a, + PR_EMS_AB_MDB_OVER_QUOTA_LIMIT = 0x80d10003, + PR_EMS_AB_MDB_OVER_QUOTA_LIMIT_ERROR = 0x80d1000a, + PR_EMS_AB_MDB_STORAGE_QUOTA = 0x80d20003, + PR_EMS_AB_MDB_STORAGE_QUOTA_ERROR = 0x80d2000a, + PR_EMS_AB_MDB_UNREAD_LIMIT = 0x80d30003, + PR_EMS_AB_MDB_UNREAD_LIMIT_ERROR = 0x80d3000a, + PR_EMS_AB_MDB_USE_DEFAULTS = 0x80d4000b, + PR_EMS_AB_MDB_USE_DEFAULTS_ERROR = 0x80d4000a, + PR_EMS_AB_MESSAGE_TRACKING_ENABLED = 0x80d5000b, + PR_EMS_AB_MESSAGE_TRACKING_ENABLED_ERROR = 0x80d5000a, + PR_EMS_AB_MONITOR_CLOCK = 0x80d6000b, + PR_EMS_AB_MONITOR_CLOCK_ERROR = 0x80d6000a, + PR_EMS_AB_MONITOR_SERVERS = 0x80d7000b, + PR_EMS_AB_MONITOR_SERVERS_ERROR = 0x80d7000a, + PR_EMS_AB_MONITOR_SERVICES = 0x80d8000b, + PR_EMS_AB_MONITOR_SERVICES_ERROR = 0x80d8000a, + PR_EMS_AB_MONITORED_CONFIGURATIONS_O = 0x80d9000d, + PR_EMS_AB_MONITORED_CONFIGURATIONS_O_ERROR = 0x80d9000a, + PR_EMS_AB_MONITORED_CONFIGURATIONS = 0x80d9101e, + PR_EMS_AB_MONITORED_CONFIGURATIONS_UNICODE = 0x80d9101f, + PR_EMS_AB_MONITORED_SERVERS_O = 0x80da000d, + PR_EMS_AB_MONITORED_SERVERS_O_ERROR = 0x80da000a, + PR_EMS_AB_MONITORED_SERVERS = 0x80da101e, + PR_EMS_AB_MONITORED_SERVERS_UNICODE = 0x80da101f, + PR_EMS_AB_MONITORED_SERVICES = 0x80db101e, + PR_EMS_AB_MONITORED_SERVICES_UNICODE = 0x80db101f, + PR_EMS_AB_MONITORED_SERVICES_ERROR = 0x80db000a, + PR_EMS_AB_MONITORING_ALERT_DELAY = 0x80dc0003, + PR_EMS_AB_MONITORING_ALERT_DELAY_ERROR = 0x80dc000a, + PR_EMS_AB_MONITORING_ALERT_UNITS = 0x80dd0003, + PR_EMS_AB_MONITORING_ALERT_UNITS_ERROR = 0x80dd000a, + PR_EMS_AB_MONITORING_AVAILABILITY_STYLE = 0x80de0003, + PR_EMS_AB_MONITORING_AVAILABILITY_STYLE_ERROR = 0x80de000a, + PR_EMS_AB_MONITORING_AVAILABILITY_WINDOW = 0x80df0102, + PR_EMS_AB_MONITORING_AVAILABILITY_WINDOW_ERROR = 0x80df000a, + PR_EMS_AB_MONITORING_CACHED_VIA_MAIL_O = 0x80e0000d, + PR_EMS_AB_MONITORING_CACHED_VIA_MAIL_O_ERROR = 0x80e0000a, + PR_EMS_AB_MONITORING_CACHED_VIA_MAIL = 0x80e0101e, + PR_EMS_AB_MONITORING_CACHED_VIA_MAIL_UNICODE = 0x80e0101f, + PR_EMS_AB_MONITORING_CACHED_VIA_RPC_O = 0x80e1000d, + PR_EMS_AB_MONITORING_CACHED_VIA_RPC_O_ERROR = 0x80e1000a, + PR_EMS_AB_MONITORING_CACHED_VIA_RPC = 0x80e1101e, + PR_EMS_AB_MONITORING_CACHED_VIA_RPC_UNICODE = 0x80e1101f, + PR_EMS_AB_MONITORING_ESCALATION_PROCEDURE = 0x80e21102, + PR_EMS_AB_MONITORING_ESCALATION_PROCEDURE_ERROR = 0x80e2000a, + PR_EMS_AB_MONITORING_HOTSITE_POLL_INTERVAL = 0x80e30003, + PR_EMS_AB_MONITORING_HOTSITE_POLL_INTERVAL_ERROR = 0x80e3000a, + PR_EMS_AB_MONITORING_HOTSITE_POLL_UNITS = 0x80e40003, + PR_EMS_AB_MONITORING_HOTSITE_POLL_UNITS_ERROR = 0x80e4000a, + PR_EMS_AB_MONITORING_MAIL_UPDATE_INTERVAL = 0x80e50003, + PR_EMS_AB_MONITORING_MAIL_UPDATE_INTERVAL_ERROR = 0x80e5000a, + PR_EMS_AB_MONITORING_MAIL_UPDATE_UNITS = 0x80e60003, + PR_EMS_AB_MONITORING_MAIL_UPDATE_UNITS_ERROR = 0x80e6000a, + PR_EMS_AB_MONITORING_NORMAL_POLL_INTERVAL = 0x80e70003, + PR_EMS_AB_MONITORING_NORMAL_POLL_INTERVAL_ERROR = 0x80e7000a, + PR_EMS_AB_MONITORING_NORMAL_POLL_UNITS = 0x80e80003, + PR_EMS_AB_MONITORING_NORMAL_POLL_UNITS_ERROR = 0x80e8000a, + PR_EMS_AB_MONITORING_RECIPIENTS_O = 0x80e9000d, + PR_EMS_AB_MONITORING_RECIPIENTS_O_ERROR = 0x80e9000a, + PR_EMS_AB_MONITORING_RECIPIENTS = 0x80e9101e, + PR_EMS_AB_MONITORING_RECIPIENTS_UNICODE = 0x80e9101f, + PR_EMS_AB_MONITORING_RECIPIENTS_NDR_O = 0x80ea000d, + PR_EMS_AB_MONITORING_RECIPIENTS_NDR_O_ERROR = 0x80ea000a, + PR_EMS_AB_MONITORING_RECIPIENTS_NDR = 0x80ea101e, + PR_EMS_AB_MONITORING_RECIPIENTS_NDR_UNICODE = 0x80ea101f, + PR_EMS_AB_MONITORING_RPC_UPDATE_INTERVAL = 0x80eb0003, + PR_EMS_AB_MONITORING_RPC_UPDATE_INTERVAL_ERROR = 0x80eb000a, + PR_EMS_AB_MONITORING_RPC_UPDATE_UNITS = 0x80ec0003, + PR_EMS_AB_MONITORING_RPC_UPDATE_UNITS_ERROR = 0x80ec000a, + PR_EMS_AB_MONITORING_WARNING_DELAY = 0x80ed0003, + PR_EMS_AB_MONITORING_WARNING_DELAY_ERROR = 0x80ed000a, + PR_EMS_AB_MONITORING_WARNING_UNITS = 0x80ee0003, + PR_EMS_AB_MONITORING_WARNING_UNITS_ERROR = 0x80ee000a, + PR_EMS_AB_MTA_LOCAL_CRED = 0x80ef001e, + PR_EMS_AB_MTA_LOCAL_CRED_UNICODE = 0x80ef001f, + PR_EMS_AB_MTA_LOCAL_CRED_ERROR = 0x80ef000a, + PR_EMS_AB_MTA_LOCAL_DESIG = 0x80f0001e, + PR_EMS_AB_MTA_LOCAL_DESIG_UNICODE = 0x80f0001f, + PR_EMS_AB_MTA_LOCAL_DESIG_ERROR = 0x80f0000a, + PR_EMS_AB_N_ADDRESS = 0x80f10102, + PR_EMS_AB_N_ADDRESS_ERROR = 0x80f1000a, + PR_EMS_AB_N_ADDRESS_TYPE = 0x80f20003, + PR_EMS_AB_N_ADDRESS_TYPE_ERROR = 0x80f2000a, + PR_EMS_AB_NT_MACHINE_NAME = 0x80f3001e, + PR_EMS_AB_NT_MACHINE_NAME_UNICODE = 0x80f3001f, + PR_EMS_AB_NT_MACHINE_NAME_ERROR = 0x80f3000a, + PR_EMS_AB_NUM_OF_OPEN_RETRIES = 0x80f40003, + PR_EMS_AB_NUM_OF_OPEN_RETRIES_ERROR = 0x80f4000a, + PR_EMS_AB_NUM_OF_TRANSFER_RETRIES = 0x80f50003, + PR_EMS_AB_NUM_OF_TRANSFER_RETRIES_ERROR = 0x80f5000a, + PR_EMS_AB_OBJECT_CLASS_CATEGORY = 0x80f60003, + PR_EMS_AB_OBJECT_CLASS_CATEGORY_ERROR = 0x80f6000a, + PR_EMS_AB_OBJECT_VERSION = 0x80f70003, + PR_EMS_AB_OBJECT_VERSION_ERROR = 0x80f7000a, + PR_EMS_AB_OFF_LINE_AB_CONTAINERS_O = 0x80f8000d, + PR_EMS_AB_OFF_LINE_AB_CONTAINERS_O_ERROR = 0x80f8000a, + PR_EMS_AB_OFF_LINE_AB_CONTAINERS = 0x80f8101e, + PR_EMS_AB_OFF_LINE_AB_CONTAINERS_UNICODE = 0x80f8101f, + PR_EMS_AB_OFF_LINE_AB_SCHEDULE = 0x80f90102, + PR_EMS_AB_OFF_LINE_AB_SCHEDULE_ERROR = 0x80f9000a, + PR_EMS_AB_OFF_LINE_AB_SERVER_O = 0x80fa000d, + PR_EMS_AB_OFF_LINE_AB_SERVER_O_ERROR = 0x80fa000a, + PR_EMS_AB_OFF_LINE_AB_SERVER = 0x80fa001e, + PR_EMS_AB_OFF_LINE_AB_SERVER_UNICODE = 0x80fa001f, + PR_EMS_AB_OFF_LINE_AB_STYLE = 0x80fb0003, + PR_EMS_AB_OFF_LINE_AB_STYLE_ERROR = 0x80fb000a, + PR_EMS_AB_OID_TYPE = 0x80fc0003, + PR_EMS_AB_OID_TYPE_ERROR = 0x80fc000a, + PR_EMS_AB_OM_OBJECT_CLASS = 0x80fd0102, + PR_EMS_AB_OM_OBJECT_CLASS_ERROR = 0x80fd000a, + PR_EMS_AB_OM_SYNTAX = 0x80fe0003, + PR_EMS_AB_OM_SYNTAX_ERROR = 0x80fe000a, + PR_EMS_AB_OOF_REPLY_TO_ORIGINATOR = 0x80ff000b, + PR_EMS_AB_OOF_REPLY_TO_ORIGINATOR_ERROR = 0x80ff000a, + PR_EMS_AB_OPEN_RETRY_INTERVAL = 0x81000003, + PR_EMS_AB_OPEN_RETRY_INTERVAL_ERROR = 0x8100000a, + PR_EMS_AB_ORGANIZATION_NAME = 0x8101101e, + PR_EMS_AB_ORGANIZATION_NAME_UNICODE = 0x8101101f, + PR_EMS_AB_ORGANIZATION_NAME_ERROR = 0x8101000a, + PR_EMS_AB_ORGANIZATIONAL_UNIT_NAME = 0x8102101e, + PR_EMS_AB_ORGANIZATIONAL_UNIT_NAME_UNICODE = 0x8102101f, + PR_EMS_AB_ORGANIZATIONAL_UNIT_NAME_ERROR = 0x8102000a, + PR_EMS_AB_ORIGINAL_DISPLAY_TABLE = 0x81030102, + PR_EMS_AB_ORIGINAL_DISPLAY_TABLE_ERROR = 0x8103000a, + PR_EMS_AB_ORIGINAL_DISPLAY_TABLE_MSDOS = 0x81040102, + PR_EMS_AB_ORIGINAL_DISPLAY_TABLE_MSDOS_ERROR = 0x8104000a, + PR_EMS_AB_OUTBOUND_SITES_O = 0x8105000d, + PR_EMS_AB_OUTBOUND_SITES_O_ERROR = 0x8105000a, + PR_EMS_AB_OUTBOUND_SITES = 0x8105101e, + PR_EMS_AB_OUTBOUND_SITES_UNICODE = 0x8105101f, + PR_EMS_AB_P_SELECTOR = 0x81060102, + PR_EMS_AB_P_SELECTOR_ERROR = 0x8106000a, + PR_EMS_AB_P_SELECTOR_INBOUND = 0x81070102, + PR_EMS_AB_P_SELECTOR_INBOUND_ERROR = 0x8107000a, + PR_EMS_AB_PER_MSG_DIALOG_DISPLAY_TABLE = 0x81080102, + PR_EMS_AB_PER_MSG_DIALOG_DISPLAY_TABLE_ERROR = 0x8108000a, + PR_EMS_AB_PER_RECIP_DIALOG_DISPLAY_TABLE = 0x81090102, + PR_EMS_AB_PER_RECIP_DIALOG_DISPLAY_TABLE_ERROR = 0x8109000a, + PR_EMS_AB_PERIOD_REP_SYNC_TIMES = 0x810a0102, + PR_EMS_AB_PERIOD_REP_SYNC_TIMES_ERROR = 0x810a000a, + PR_EMS_AB_PERIOD_REPL_STAGGER = 0x810b0003, + PR_EMS_AB_PERIOD_REPL_STAGGER_ERROR = 0x810b000a, + PR_EMS_AB_POSTAL_ADDRESS = 0x810c1102, + PR_EMS_AB_POSTAL_ADDRESS_ERROR = 0x810c000a, + PR_EMS_AB_PREFERRED_DELIVERY_METHOD = 0x810d1003, + PR_EMS_AB_PREFERRED_DELIVERY_METHOD_ERROR = 0x810d000a, + PR_EMS_AB_PRMD = 0x810e001e, + PR_EMS_AB_PRMD_UNICODE = 0x810e001f, + PR_EMS_AB_PRMD_ERROR = 0x810e000a, + PR_EMS_AB_PROXY_GENERATOR_DLL = 0x810f001e, + PR_EMS_AB_PROXY_GENERATOR_DLL_UNICODE = 0x810f001f, + PR_EMS_AB_PROXY_GENERATOR_DLL_ERROR = 0x810f000a, + PR_EMS_AB_PUBLIC_DELEGATES_BL_O = 0x8110000d, + PR_EMS_AB_PUBLIC_DELEGATES_BL_O_ERROR = 0x8110000a, + PR_EMS_AB_PUBLIC_DELEGATES_BL = 0x8110101e, + PR_EMS_AB_PUBLIC_DELEGATES_BL_UNICODE = 0x8110101f, + PR_EMS_AB_QUOTA_NOTIFICATION_SCHEDULE = 0x81110102, + PR_EMS_AB_QUOTA_NOTIFICATION_SCHEDULE_ERROR = 0x8111000a, + PR_EMS_AB_QUOTA_NOTIFICATION_STYLE = 0x81120003, + PR_EMS_AB_QUOTA_NOTIFICATION_STYLE_ERROR = 0x8112000a, + PR_EMS_AB_RANGE_LOWER = 0x81130003, + PR_EMS_AB_RANGE_LOWER_ERROR = 0x8113000a, + PR_EMS_AB_RANGE_UPPER = 0x81140003, + PR_EMS_AB_RANGE_UPPER_ERROR = 0x8114000a, + PR_EMS_AB_RAS_CALLBACK_NUMBER = 0x8115001e, + PR_EMS_AB_RAS_CALLBACK_NUMBER_UNICODE = 0x8115001f, + PR_EMS_AB_RAS_CALLBACK_NUMBER_ERROR = 0x8115000a, + PR_EMS_AB_RAS_PHONE_NUMBER = 0x8116001e, + PR_EMS_AB_RAS_PHONE_NUMBER_UNICODE = 0x8116001f, + PR_EMS_AB_RAS_PHONE_NUMBER_ERROR = 0x8116000a, + PR_EMS_AB_RAS_PHONEBOOK_ENTRY_NAME = 0x8117001e, + PR_EMS_AB_RAS_PHONEBOOK_ENTRY_NAME_UNICODE = 0x8117001f, + PR_EMS_AB_RAS_PHONEBOOK_ENTRY_NAME_ERROR = 0x8117000a, + PR_EMS_AB_RAS_REMOTE_SRVR_NAME = 0x8118001e, + PR_EMS_AB_RAS_REMOTE_SRVR_NAME_UNICODE = 0x8118001f, + PR_EMS_AB_RAS_REMOTE_SRVR_NAME_ERROR = 0x8118000a, + PR_EMS_AB_REGISTERED_ADDRESS = 0x81191102, + PR_EMS_AB_REGISTERED_ADDRESS_ERROR = 0x8119000a, + PR_EMS_AB_REMOTE_BRIDGE_HEAD = 0x811a001e, + PR_EMS_AB_REMOTE_BRIDGE_HEAD_UNICODE = 0x811a001f, + PR_EMS_AB_REMOTE_BRIDGE_HEAD_ERROR = 0x811a000a, + PR_EMS_AB_REMOTE_BRIDGE_HEAD_ADDRESS = 0x811b001e, + PR_EMS_AB_REMOTE_BRIDGE_HEAD_ADDRESS_UNICODE = 0x811b001f, + PR_EMS_AB_REMOTE_BRIDGE_HEAD_ADDRESS_ERROR = 0x811b000a, + PR_EMS_AB_REMOTE_OUT_BH_SERVER_O = 0x811c000d, + PR_EMS_AB_REMOTE_OUT_BH_SERVER_O_ERROR = 0x811c000a, + PR_EMS_AB_REMOTE_OUT_BH_SERVER = 0x811c001e, + PR_EMS_AB_REMOTE_OUT_BH_SERVER_UNICODE = 0x811c001f, + PR_EMS_AB_REMOTE_SITE_O = 0x811d000d, + PR_EMS_AB_REMOTE_SITE_O_ERROR = 0x811d000a, + PR_EMS_AB_REMOTE_SITE = 0x811d001e, + PR_EMS_AB_REMOTE_SITE_UNICODE = 0x811d001f, + PR_EMS_AB_REPLICATION_SENSITIVITY = 0x811e0003, + PR_EMS_AB_REPLICATION_SENSITIVITY_ERROR = 0x811e000a, + PR_EMS_AB_REPLICATION_STAGGER = 0x811f0003, + PR_EMS_AB_REPLICATION_STAGGER_ERROR = 0x811f000a, + PR_EMS_AB_REPORT_TO_ORIGINATOR = 0x8120000b, + PR_EMS_AB_REPORT_TO_ORIGINATOR_ERROR = 0x8120000a, + PR_EMS_AB_REPORT_TO_OWNER = 0x8121000b, + PR_EMS_AB_REPORT_TO_OWNER_ERROR = 0x8121000a, + PR_EMS_AB_REQ_SEQ = 0x81220003, + PR_EMS_AB_REQ_SEQ_ERROR = 0x8122000a, + PR_EMS_AB_RESPONSIBLE_LOCAL_DXA_O = 0x8123000d, + PR_EMS_AB_RESPONSIBLE_LOCAL_DXA_O_ERROR = 0x8123000a, + PR_EMS_AB_RESPONSIBLE_LOCAL_DXA = 0x8123001e, + PR_EMS_AB_RESPONSIBLE_LOCAL_DXA_UNICODE = 0x8123001f, + PR_EMS_AB_RID_SERVER_O = 0x8124000d, + PR_EMS_AB_RID_SERVER_O_ERROR = 0x8124000a, + PR_EMS_AB_RID_SERVER = 0x8124001e, + PR_EMS_AB_RID_SERVER_UNICODE = 0x8124001f, + PR_EMS_AB_ROLE_OCCUPANT_O = 0x8125000d, + PR_EMS_AB_ROLE_OCCUPANT_O_ERROR = 0x8125000a, + PR_EMS_AB_ROLE_OCCUPANT = 0x8125101e, + PR_EMS_AB_ROLE_OCCUPANT_UNICODE = 0x8125101f, + PR_EMS_AB_ROUTING_LIST = 0x8126101e, + PR_EMS_AB_ROUTING_LIST_UNICODE = 0x8126101f, + PR_EMS_AB_ROUTING_LIST_ERROR = 0x8126000a, + PR_EMS_AB_RTS_CHECKPOINT_SIZE = 0x81270003, + PR_EMS_AB_RTS_CHECKPOINT_SIZE_ERROR = 0x8127000a, + PR_EMS_AB_RTS_RECOVERY_TIMEOUT = 0x81280003, + PR_EMS_AB_RTS_RECOVERY_TIMEOUT_ERROR = 0x8128000a, + PR_EMS_AB_RTS_WINDOW_SIZE = 0x81290003, + PR_EMS_AB_RTS_WINDOW_SIZE_ERROR = 0x8129000a, + PR_EMS_AB_RUNS_ON_O = 0x812a000d, + PR_EMS_AB_RUNS_ON_O_ERROR = 0x812a000a, + PR_EMS_AB_RUNS_ON = 0x812a101e, + PR_EMS_AB_RUNS_ON_UNICODE = 0x812a101f, + PR_EMS_AB_S_SELECTOR = 0x812b0102, + PR_EMS_AB_S_SELECTOR_ERROR = 0x812b000a, + PR_EMS_AB_S_SELECTOR_INBOUND = 0x812c0102, + PR_EMS_AB_S_SELECTOR_INBOUND_ERROR = 0x812c000a, + PR_EMS_AB_SEARCH_FLAGS = 0x812d0003, + PR_EMS_AB_SEARCH_FLAGS_ERROR = 0x812d000a, + PR_EMS_AB_SEARCH_GUIDE = 0x812e1102, + PR_EMS_AB_SEARCH_GUIDE_ERROR = 0x812e000a, + PR_EMS_AB_SEE_ALSO_O = 0x812f000d, + PR_EMS_AB_SEE_ALSO_O_ERROR = 0x812f000a, + PR_EMS_AB_SEE_ALSO = 0x812f101e, + PR_EMS_AB_SEE_ALSO_UNICODE = 0x812f101f, + PR_EMS_AB_SERIAL_NUMBER = 0x8130101e, + PR_EMS_AB_SERIAL_NUMBER_UNICODE = 0x8130101f, + PR_EMS_AB_SERIAL_NUMBER_ERROR = 0x8130000a, + PR_EMS_AB_SERVICE_ACTION_FIRST = 0x81310003, + PR_EMS_AB_SERVICE_ACTION_FIRST_ERROR = 0x8131000a, + PR_EMS_AB_SERVICE_ACTION_OTHER = 0x81320003, + PR_EMS_AB_SERVICE_ACTION_OTHER_ERROR = 0x8132000a, + PR_EMS_AB_SERVICE_ACTION_SECOND = 0x81330003, + PR_EMS_AB_SERVICE_ACTION_SECOND_ERROR = 0x8133000a, + PR_EMS_AB_SERVICE_RESTART_DELAY = 0x81340003, + PR_EMS_AB_SERVICE_RESTART_DELAY_ERROR = 0x8134000a, + PR_EMS_AB_SERVICE_RESTART_MESSAGE = 0x8135001e, + PR_EMS_AB_SERVICE_RESTART_MESSAGE_UNICODE = 0x8135001f, + PR_EMS_AB_SERVICE_RESTART_MESSAGE_ERROR = 0x8135000a, + PR_EMS_AB_SESSION_DISCONNECT_TIMER = 0x81360003, + PR_EMS_AB_SESSION_DISCONNECT_TIMER_ERROR = 0x8136000a, + PR_EMS_AB_SITE_AFFINITY = 0x8137101e, + PR_EMS_AB_SITE_AFFINITY_UNICODE = 0x8137101f, + PR_EMS_AB_SITE_AFFINITY_ERROR = 0x8137000a, + PR_EMS_AB_SITE_PROXY_SPACE = 0x8138101e, + PR_EMS_AB_SITE_PROXY_SPACE_UNICODE = 0x8138101f, + PR_EMS_AB_SITE_PROXY_SPACE_ERROR = 0x8138000a, + PR_EMS_AB_SPACE_LAST_COMPUTED = 0x81390040, + PR_EMS_AB_SPACE_LAST_COMPUTED_ERROR = 0x8139000a, + PR_EMS_AB_STREET_ADDRESS = 0x813a001e, + PR_EMS_AB_STREET_ADDRESS_UNICODE = 0x813a001f, + PR_EMS_AB_STREET_ADDRESS_ERROR = 0x813a000a, + PR_EMS_AB_SUB_REFS_O = 0x813b000d, + PR_EMS_AB_SUB_REFS_O_ERROR = 0x813b000a, + PR_EMS_AB_SUB_REFS = 0x813b101e, + PR_EMS_AB_SUB_REFS_UNICODE = 0x813b101f, + PR_EMS_AB_SUBMISSION_CONT_LENGTH = 0x813c0003, + PR_EMS_AB_SUBMISSION_CONT_LENGTH_ERROR = 0x813c000a, + PR_EMS_AB_SUPPORTED_APPLICATION_CONTEXT = 0x813d1102, + PR_EMS_AB_SUPPORTED_APPLICATION_CONTEXT_ERROR = 0x813d000a, + PR_EMS_AB_SUPPORTING_STACK_O = 0x813e000d, + PR_EMS_AB_SUPPORTING_STACK_O_ERROR = 0x813e000a, + PR_EMS_AB_SUPPORTING_STACK = 0x813e101e, + PR_EMS_AB_SUPPORTING_STACK_UNICODE = 0x813e101f, + PR_EMS_AB_SUPPORTING_STACK_BL_O = 0x813f000d, + PR_EMS_AB_SUPPORTING_STACK_BL_O_ERROR = 0x813f000a, + PR_EMS_AB_SUPPORTING_STACK_BL = 0x813f101e, + PR_EMS_AB_SUPPORTING_STACK_BL_UNICODE = 0x813f101f, + PR_EMS_AB_T_SELECTOR = 0x81400102, + PR_EMS_AB_T_SELECTOR_ERROR = 0x8140000a, + PR_EMS_AB_T_SELECTOR_INBOUND = 0x81410102, + PR_EMS_AB_T_SELECTOR_INBOUND_ERROR = 0x8141000a, + PR_EMS_AB_TARGET_MTAS = 0x8142101e, + PR_EMS_AB_TARGET_MTAS_UNICODE = 0x8142101f, + PR_EMS_AB_TARGET_MTAS_ERROR = 0x8142000a, + PR_EMS_AB_TELETEX_TERMINAL_IDENTIFIER = 0x81431102, + PR_EMS_AB_TELETEX_TERMINAL_IDENTIFIER_ERROR = 0x8143000a, + PR_EMS_AB_TEMP_ASSOC_THRESHOLD = 0x81440003, + PR_EMS_AB_TEMP_ASSOC_THRESHOLD_ERROR = 0x8144000a, + PR_EMS_AB_TOMBSTONE_LIFETIME = 0x81450003, + PR_EMS_AB_TOMBSTONE_LIFETIME_ERROR = 0x8145000a, + PR_EMS_AB_TRACKING_LOG_PATH_NAME = 0x8146001e, + PR_EMS_AB_TRACKING_LOG_PATH_NAME_UNICODE = 0x8146001f, + PR_EMS_AB_TRACKING_LOG_PATH_NAME_ERROR = 0x8146000a, + PR_EMS_AB_TRANS_RETRY_MINS = 0x81470003, + PR_EMS_AB_TRANS_RETRY_MINS_ERROR = 0x8147000a, + PR_EMS_AB_TRANS_TIMEOUT_MINS = 0x81480003, + PR_EMS_AB_TRANS_TIMEOUT_MINS_ERROR = 0x8148000a, + PR_EMS_AB_TRANSFER_RETRY_INTERVAL = 0x81490003, + PR_EMS_AB_TRANSFER_RETRY_INTERVAL_ERROR = 0x8149000a, + PR_EMS_AB_TRANSFER_TIMEOUT_NON_URGENT = 0x814a0003, + PR_EMS_AB_TRANSFER_TIMEOUT_NON_URGENT_ERROR = 0x814a000a, + PR_EMS_AB_TRANSFER_TIMEOUT_NORMAL = 0x814b0003, + PR_EMS_AB_TRANSFER_TIMEOUT_NORMAL_ERROR = 0x814b000a, + PR_EMS_AB_TRANSFER_TIMEOUT_URGENT = 0x814c0003, + PR_EMS_AB_TRANSFER_TIMEOUT_URGENT_ERROR = 0x814c000a, + PR_EMS_AB_TRANSLATION_TABLE_USED = 0x814d0003, + PR_EMS_AB_TRANSLATION_TABLE_USED_ERROR = 0x814d000a, + PR_EMS_AB_TRANSPORT_EXPEDITED_DATA = 0x814e000b, + PR_EMS_AB_TRANSPORT_EXPEDITED_DATA_ERROR = 0x814e000a, + PR_EMS_AB_TRUST_LEVEL = 0x814f0003, + PR_EMS_AB_TRUST_LEVEL_ERROR = 0x814f000a, + PR_EMS_AB_TURN_REQUEST_THRESHOLD = 0x81500003, + PR_EMS_AB_TURN_REQUEST_THRESHOLD_ERROR = 0x8150000a, + PR_EMS_AB_TWO_WAY_ALTERNATE_FACILITY = 0x8151000b, + PR_EMS_AB_TWO_WAY_ALTERNATE_FACILITY_ERROR = 0x8151000a, + PR_EMS_AB_UNAUTH_ORIG_BL_O = 0x8152000d, + PR_EMS_AB_UNAUTH_ORIG_BL_O_ERROR = 0x8152000a, + PR_EMS_AB_UNAUTH_ORIG_BL = 0x8152101e, + PR_EMS_AB_UNAUTH_ORIG_BL_UNICODE = 0x8152101f, + PR_EMS_AB_USER_PASSWORD = 0x81531102, + PR_EMS_AB_USER_PASSWORD_ERROR = 0x8153000a, + PR_EMS_AB_USN_CREATED = 0x81540003, + PR_EMS_AB_USN_CREATED_ERROR = 0x8154000a, + PR_EMS_AB_USN_DSA_LAST_OBJ_REMOVED = 0x81550003, + PR_EMS_AB_USN_DSA_LAST_OBJ_REMOVED_ERROR = 0x8155000a, + PR_EMS_AB_USN_LAST_OBJ_REM = 0x81560003, + PR_EMS_AB_USN_LAST_OBJ_REM_ERROR = 0x8156000a, + PR_EMS_AB_USN_SOURCE = 0x81570003, + PR_EMS_AB_USN_SOURCE_ERROR = 0x8157000a, + PR_EMS_AB_X121_ADDRESS = 0x8158101e, + PR_EMS_AB_X121_ADDRESS_UNICODE = 0x8158101f, + PR_EMS_AB_X121_ADDRESS_ERROR = 0x8158000a, + PR_EMS_AB_X25_CALL_USER_DATA_INCOMING = 0x81590102, + PR_EMS_AB_X25_CALL_USER_DATA_INCOMING_ERROR = 0x8159000a, + PR_EMS_AB_X25_CALL_USER_DATA_OUTGOING = 0x815a0102, + PR_EMS_AB_X25_CALL_USER_DATA_OUTGOING_ERROR = 0x815a000a, + PR_EMS_AB_X25_FACILITIES_DATA_INCOMING = 0x815b0102, + PR_EMS_AB_X25_FACILITIES_DATA_INCOMING_ERROR = 0x815b000a, + PR_EMS_AB_X25_FACILITIES_DATA_OUTGOING = 0x815c0102, + PR_EMS_AB_X25_FACILITIES_DATA_OUTGOING_ERROR = 0x815c000a, + PR_EMS_AB_X25_LEASED_LINE_PORT = 0x815d0102, + PR_EMS_AB_X25_LEASED_LINE_PORT_ERROR = 0x815d000a, + PR_EMS_AB_X25_LEASED_OR_SWITCHED = 0x815e000b, + PR_EMS_AB_X25_LEASED_OR_SWITCHED_ERROR = 0x815e000a, + PR_EMS_AB_X25_REMOTE_MTA_PHONE = 0x815f001e, + PR_EMS_AB_X25_REMOTE_MTA_PHONE_UNICODE = 0x815f001f, + PR_EMS_AB_X25_REMOTE_MTA_PHONE_ERROR = 0x815f000a, + PR_EMS_AB_X400_ATTACHMENT_TYPE = 0x81600102, + PR_EMS_AB_X400_ATTACHMENT_TYPE_ERROR = 0x8160000a, + PR_EMS_AB_X400_SELECTOR_SYNTAX = 0x81610003, + PR_EMS_AB_X400_SELECTOR_SYNTAX_ERROR = 0x8161000a, + PR_EMS_AB_X500_ACCESS_CONTROL_LIST = 0x81620102, + PR_EMS_AB_X500_ACCESS_CONTROL_LIST_ERROR = 0x8162000a, + PR_EMS_AB_XMIT_TIMEOUT_NON_URGENT = 0x81630003, + PR_EMS_AB_XMIT_TIMEOUT_NON_URGENT_ERROR = 0x8163000a, + PR_EMS_AB_XMIT_TIMEOUT_NORMAL = 0x81640003, + PR_EMS_AB_XMIT_TIMEOUT_NORMAL_ERROR = 0x8164000a, + PR_EMS_AB_XMIT_TIMEOUT_URGENT = 0x81650003, + PR_EMS_AB_XMIT_TIMEOUT_URGENT_ERROR = 0x8165000a, + PR_EMS_AB_SITE_FOLDER_GUID = 0x81660102, + PR_EMS_AB_SITE_FOLDER_GUID_ERROR = 0x8166000a, + PR_EMS_AB_SITE_FOLDER_SERVER_O = 0x8167000d, + PR_EMS_AB_SITE_FOLDER_SERVER_O_ERROR = 0x8167000a, + PR_EMS_AB_SITE_FOLDER_SERVER = 0x8167001e, + PR_EMS_AB_SITE_FOLDER_SERVER_UNICODE = 0x8167001f, + PR_EMS_AB_REPLICATION_MAIL_MSG_SIZE = 0x81680003, + PR_EMS_AB_REPLICATION_MAIL_MSG_SIZE_ERROR = 0x8168000a, + PR_EMS_AB_MAXIMUM_OBJECT_ID = 0x81690102, + PR_EMS_AB_MAXIMUM_OBJECT_ID_ERROR = 0x8169000a, + PR_EMS_AB_NETWORK_ADDRESS = 0x8170101e, + PR_EMS_AB_NETWORK_ADDRESS_UNICODE = 0x8170101f, + PR_EMS_AB_NETWORK_ADDRESS_ERROR = 0x8170000a, + PR_EMS_AB_LDAP_DISPLAY_NAME = 0x8171101e, + PR_EMS_AB_LDAP_DISPLAY_NAME_UNICODE = 0x8171101f, + PR_EMS_AB_LDAP_DISPLAY_NAME_ERROR = 0x8171000a, + PR_EMS_AB_SCHEMA_FLAGS = 0x81730003, + PR_EMS_AB_SCHEMA_FLAGS_ERROR = 0x8173000a, + PR_EMS_AB_BRIDGEHEAD_SERVERS_O = 0x8174000d, + PR_EMS_AB_BRIDGEHEAD_SERVERS_O_ERROR = 0x8174000a, + PR_EMS_AB_BRIDGEHEAD_SERVERS = 0x8174101e, + PR_EMS_AB_BRIDGEHEAD_SERVERS_UNICODE = 0x8174101f, + PR_EMS_AB_WWW_HOME_PAGE = 0x8175001e, + PR_EMS_AB_WWW_HOME_PAGE_UNICODE = 0x8175001f, + PR_EMS_AB_WWW_HOME_PAGE_ERROR = 0x8175000a, + PR_EMS_AB_NNTP_CONTENT_FORMAT = 0x8176001e, + PR_EMS_AB_NNTP_CONTENT_FORMAT_UNICODE = 0x8176001f, + PR_EMS_AB_NNTP_CONTENT_FORMAT_ERROR = 0x8176000a, + PR_EMS_AB_POP_CONTENT_FORMAT = 0x8177001e, + PR_EMS_AB_POP_CONTENT_FORMAT_UNICODE = 0x8177001f, + PR_EMS_AB_POP_CONTENT_FORMAT_ERROR = 0x8177000a, + PR_EMS_AB_LANGUAGE = 0x81780003, + PR_EMS_AB_LANGUAGE_ERROR = 0x8178000a, + PR_EMS_AB_POP_CHARACTER_SET = 0x8179001e, + PR_EMS_AB_POP_CHARACTER_SET_UNICODE = 0x8179001f, + PR_EMS_AB_POP_CHARACTER_SET_ERROR = 0x8179000a, + PR_EMS_AB_USN_INTERSITE = 0x817a0003, + PR_EMS_AB_USN_INTERSITE_ERROR = 0x817a000a, + PR_EMS_AB_SUB_SITE = 0x817b001e, + PR_EMS_AB_SUB_SITE_UNICODE = 0x817b001f, + PR_EMS_AB_SUB_SITE_ERROR = 0x817b000a, + PR_EMS_AB_SCHEMA_VERSION = 0x817c1003, + PR_EMS_AB_SCHEMA_VERSION_ERROR = 0x817c000a, + PR_EMS_AB_NNTP_CHARACTER_SET = 0x817d001e, + PR_EMS_AB_NNTP_CHARACTER_SET_UNICODE = 0x817d001f, + PR_EMS_AB_NNTP_CHARACTER_SET_ERROR = 0x817d000a, + PR_EMS_AB_USE_SERVER_VALUES = 0x817e000b, + PR_EMS_AB_USE_SERVER_VALUES_ERROR = 0x817e000a, + PR_EMS_AB_ENABLED_PROTOCOLS = 0x817f0003, + PR_EMS_AB_ENABLED_PROTOCOLS_ERROR = 0x817f000a, + PR_EMS_AB_CONNECTION_LIST_FILTER = 0x81800102, + PR_EMS_AB_CONNECTION_LIST_FILTER_ERROR = 0x8180000a, + PR_EMS_AB_AVAILABLE_AUTHORIZATION_PACKAGES = 0x8181101e, + PR_EMS_AB_AVAILABLE_AUTHORIZATION_PACKAGES_UNICODE = 0x8181101f, + PR_EMS_AB_AVAILABLE_AUTHORIZATION_PACKAGES_ERROR = 0x8181000a, + PR_EMS_AB_CHARACTER_SET_LIST = 0x8182101e, + PR_EMS_AB_CHARACTER_SET_LIST_UNICODE = 0x8182101f, + PR_EMS_AB_CHARACTER_SET_LIST_ERROR = 0x8182000a, + PR_EMS_AB_USE_SITE_VALUES = 0x8183000b, + PR_EMS_AB_USE_SITE_VALUES_ERROR = 0x8183000a, + PR_EMS_AB_ENABLED_AUTHORIZATION_PACKAGES = 0x8184101e, + PR_EMS_AB_ENABLED_AUTHORIZATION_PACKAGES_UNICODE = 0x8184101f, + PR_EMS_AB_ENABLED_AUTHORIZATION_PACKAGES_ERROR = 0x8184000a, + PR_EMS_AB_CHARACTER_SET = 0x8185001e, + PR_EMS_AB_CHARACTER_SET_UNICODE = 0x8185001f, + PR_EMS_AB_CHARACTER_SET_ERROR = 0x8185000a, + PR_EMS_AB_CONTENT_TYPE = 0x81860003, + PR_EMS_AB_CONTENT_TYPE_ERROR = 0x8186000a, + PR_EMS_AB_ANONYMOUS_ACCESS = 0x8187000b, + PR_EMS_AB_ANONYMOUS_ACCESS_ERROR = 0x8187000a, + PR_EMS_AB_CONTROL_MSG_FOLDER_ID = 0x81880102, + PR_EMS_AB_CONTROL_MSG_FOLDER_ID_ERROR = 0x8188000a, + PR_EMS_AB_USENET_SITE_NAME = 0x8189001e, + PR_EMS_AB_USENET_SITE_NAME_UNICODE = 0x8189001f, + PR_EMS_AB_USENET_SITE_NAME_ERROR = 0x8189000a, + PR_EMS_AB_CONTROL_MSG_RULES = 0x818a0102, + PR_EMS_AB_CONTROL_MSG_RULES_ERROR = 0x818a000a, + PR_EMS_AB_AVAILABLE_DISTRIBUTIONS = 0x818b001e, + PR_EMS_AB_AVAILABLE_DISTRIBUTIONS_UNICODE = 0x818b001f, + PR_EMS_AB_AVAILABLE_DISTRIBUTIONS_ERROR = 0x818b000a, + PR_EMS_AB_OUTBOUND_HOST = 0x818d0102, + PR_EMS_AB_OUTBOUND_HOST_ERROR = 0x818d000a, + PR_EMS_AB_INBOUND_HOST = 0x818e101e, + PR_EMS_AB_INBOUND_HOST_UNICODE = 0x818e101f, + PR_EMS_AB_INBOUND_HOST_ERROR = 0x818e000a, + PR_EMS_AB_OUTGOING_MSG_SIZE_LIMIT = 0x818f0003, + PR_EMS_AB_OUTGOING_MSG_SIZE_LIMIT_ERROR = 0x818f000a, + PR_EMS_AB_INCOMING_MSG_SIZE_LIMIT = 0x81900003, + PR_EMS_AB_INCOMING_MSG_SIZE_LIMIT_ERROR = 0x8190000a, + PR_EMS_AB_SEND_TNEF = 0x8191000b, + PR_EMS_AB_SEND_TNEF_ERROR = 0x8191000a, + PR_EMS_AB_AUTHORIZED_PASSWORD_CONFIRM = 0x81920102, + PR_EMS_AB_AUTHORIZED_PASSWORD_CONFIRM_ERROR = 0x8192000a, + PR_EMS_AB_INBOUND_NEWSFEED = 0x8193001e, + PR_EMS_AB_INBOUND_NEWSFEED_UNICODE = 0x8193001f, + PR_EMS_AB_INBOUND_NEWSFEED_ERROR = 0x8193000a, + PR_EMS_AB_NEWSFEED_TYPE = 0x81940003, + PR_EMS_AB_NEWSFEED_TYPE_ERROR = 0x8194000a, + PR_EMS_AB_OUTBOUND_NEWSFEED = 0x8195001e, + PR_EMS_AB_OUTBOUND_NEWSFEED_UNICODE = 0x8195001f, + PR_EMS_AB_OUTBOUND_NEWSFEED_ERROR = 0x8195000a, + PR_EMS_AB_NEWSGROUP_LIST = 0x81960102, + PR_EMS_AB_NEWSGROUP_LIST_ERROR = 0x8196000a, + PR_EMS_AB_NNTP_DISTRIBUTIONS = 0x8197101e, + PR_EMS_AB_NNTP_DISTRIBUTIONS_UNICODE = 0x8197101f, + PR_EMS_AB_NNTP_DISTRIBUTIONS_ERROR = 0x8197000a, + PR_EMS_AB_NEWSGROUP = 0x8198001e, + PR_EMS_AB_NEWSGROUP_UNICODE = 0x8198001f, + PR_EMS_AB_NEWSGROUP_ERROR = 0x8198000a, + PR_EMS_AB_MODERATOR = 0x8199001e, + PR_EMS_AB_MODERATOR_UNICODE = 0x8199001f, + PR_EMS_AB_MODERATOR_ERROR = 0x8199000a, + PR_EMS_AB_AUTHENTICATION_TO_USE = 0x819a001e, + PR_EMS_AB_AUTHENTICATION_TO_USE_UNICODE = 0x819a001f, + PR_EMS_AB_AUTHENTICATION_TO_USE_ERROR = 0x819a000a, + PR_EMS_AB_HTTP_PUB_GAL = 0x819b000b, + PR_EMS_AB_HTTP_PUB_GAL_ERROR = 0x819b000a, + PR_EMS_AB_HTTP_PUB_GAL_LIMIT = 0x819c0003, + PR_EMS_AB_HTTP_PUB_GAL_LIMIT_ERROR = 0x819c000a, + PR_EMS_AB_HTTP_PUB_PF = 0x819e1102, + PR_EMS_AB_HTTP_PUB_PF_ERROR = 0x819e000a, + PR_EMS_AB_X500_RDN = 0x81a1001e, + PR_EMS_AB_X500_RDN_UNICODE = 0x81a1001f, + PR_EMS_AB_X500_RDN_ERROR = 0x81a1000a, + PR_EMS_AB_X500_NC = 0x81a2001e, + PR_EMS_AB_X500_NC_UNICODE = 0x81a2001f, + PR_EMS_AB_X500_NC_ERROR = 0x81a2000a, + PR_EMS_AB_REFERRAL_LIST = 0x81a3101e, + PR_EMS_AB_REFERRAL_LIST_UNICODE = 0x81a3101f, + PR_EMS_AB_REFERRAL_LIST_ERROR = 0x81a3000a, + PR_EMS_AB_NNTP_DISTRIBUTIONS_FLAG = 0x81a4000b, + PR_EMS_AB_NNTP_DISTRIBUTIONS_FLAG_ERROR = 0x81a4000a, + PR_EMS_AB_ASSOC_PROTOCOL_CFG_NNTP_O = 0x81a5000d, + PR_EMS_AB_ASSOC_PROTOCOL_CFG_NNTP_O_ERROR = 0x81a5000a, + PR_EMS_AB_ASSOC_PROTOCOL_CFG_NNTP = 0x81a5001e, + PR_EMS_AB_ASSOC_PROTOCOL_CFG_NNTP_UNICODE = 0x81a5001f, + PR_EMS_AB_NNTP_NEWSFEEDS_O = 0x81a6000d, + PR_EMS_AB_NNTP_NEWSFEEDS_O_ERROR = 0x81a6000a, + PR_EMS_AB_NNTP_NEWSFEEDS = 0x81a6101e, + PR_EMS_AB_NNTP_NEWSFEEDS_UNICODE = 0x81a6101f, + PR_EMS_AB_ENABLED_PROTOCOL_CFG = 0x81a8000b, + PR_EMS_AB_ENABLED_PROTOCOL_CFG_ERROR = 0x81a8000a, + PR_EMS_AB_HTTP_PUB_AB_ATTRIBUTES = 0x81a9101e, + PR_EMS_AB_HTTP_PUB_AB_ATTRIBUTES_UNICODE = 0x81a9101f, + PR_EMS_AB_HTTP_PUB_AB_ATTRIBUTES_ERROR = 0x81a9000a, + PR_EMS_AB_HTTP_SERVERS = 0x81ab101e, + PR_EMS_AB_HTTP_SERVERS_UNICODE = 0x81ab101f, + PR_EMS_AB_HTTP_SERVERS_ERROR = 0x81ab000a, + PR_EMS_AB_MODERATED = 0x81ac000b, + PR_EMS_AB_MODERATED_ERROR = 0x81ac000a, + PR_EMS_AB_RAS_ACCOUNT = 0x81ad001e, + PR_EMS_AB_RAS_ACCOUNT_UNICODE = 0x81ad001f, + PR_EMS_AB_RAS_ACCOUNT_ERROR = 0x81ad000a, + PR_EMS_AB_RAS_PASSWORD = 0x81ae0102, + PR_EMS_AB_RAS_PASSWORD_ERROR = 0x81ae000a, + PR_EMS_AB_INCOMING_PASSWORD = 0x81af0102, + PR_EMS_AB_INCOMING_PASSWORD_ERROR = 0x81af000a, + PR_EMS_AB_OUTBOUND_HOST_TYPE = 0x81b0000b, + PR_EMS_AB_OUTBOUND_HOST_TYPE_ERROR = 0x81b0000a, + PR_EMS_AB_PROXY_GENERATION_ENABLED = 0x81b1000b, + PR_EMS_AB_PROXY_GENERATION_ENABLED_ERROR = 0x81b1000a, + PR_EMS_AB_ROOT_NEWSGROUPS_FOLDER_ID = 0x81b20102, + PR_EMS_AB_ROOT_NEWSGROUPS_FOLDER_ID_ERROR = 0x81b2000a, + PR_EMS_AB_CONNECTION_TYPE = 0x81b3000b, + PR_EMS_AB_CONNECTION_TYPE_ERROR = 0x81b3000a, + PR_EMS_AB_CONNECTION_LIST_FILTER_TYPE = 0x81b40003, + PR_EMS_AB_CONNECTION_LIST_FILTER_TYPE_ERROR = 0x81b4000a, + PR_EMS_AB_PORT_NUMBER = 0x81b50003, + PR_EMS_AB_PORT_NUMBER_ERROR = 0x81b5000a, + PR_EMS_AB_PROTOCOL_SETTINGS = 0x81b6101e, + PR_EMS_AB_PROTOCOL_SETTINGS_UNICODE = 0x81b6101f, + PR_EMS_AB_PROTOCOL_SETTINGS_ERROR = 0x81b6000a, + PR_EMS_AB_GROUP_BY_ATTR_1 = 0x81b7001e, + PR_EMS_AB_GROUP_BY_ATTR_1_UNICODE = 0x81b7001f, + PR_EMS_AB_GROUP_BY_ATTR_1_ERROR = 0x81b7000a, + PR_EMS_AB_GROUP_BY_ATTR_2 = 0x81b8001e, + PR_EMS_AB_GROUP_BY_ATTR_2_UNICODE = 0x81b8001f, + PR_EMS_AB_GROUP_BY_ATTR_2_ERROR = 0x81b8000a, + PR_EMS_AB_GROUP_BY_ATTR_3 = 0x81b9001e, + PR_EMS_AB_GROUP_BY_ATTR_3_UNICODE = 0x81b9001f, + PR_EMS_AB_GROUP_BY_ATTR_3_ERROR = 0x81b9000a, + PR_EMS_AB_GROUP_BY_ATTR_4 = 0x81ba001e, + PR_EMS_AB_GROUP_BY_ATTR_4_UNICODE = 0x81ba001f, + PR_EMS_AB_GROUP_BY_ATTR_4_ERROR = 0x81ba000a, + PR_EMS_AB_VIEW_SITE = 0x81be001e, + PR_EMS_AB_VIEW_SITE_UNICODE = 0x81be001f, + PR_EMS_AB_VIEW_SITE_ERROR = 0x81be000a, + PR_EMS_AB_VIEW_CONTAINER_1 = 0x81bf001e, + PR_EMS_AB_VIEW_CONTAINER_1_UNICODE = 0x81bf001f, + PR_EMS_AB_VIEW_CONTAINER_1_ERROR = 0x81bf000a, + PR_EMS_AB_VIEW_CONTAINER_2 = 0x81c0001e, + PR_EMS_AB_VIEW_CONTAINER_2_UNICODE = 0x81c0001f, + PR_EMS_AB_VIEW_CONTAINER_2_ERROR = 0x81c0000a, + PR_EMS_AB_VIEW_CONTAINER_3 = 0x81c1001e, + PR_EMS_AB_VIEW_CONTAINER_3_UNICODE = 0x81c1001f, + PR_EMS_AB_VIEW_CONTAINER_3_ERROR = 0x81c1000a, + PR_EMS_AB_PROMO_EXPIRATION = 0x81c20040, + PR_EMS_AB_PROMO_EXPIRATION_ERROR = 0x81c2000a, + PR_EMS_AB_DISABLED_GATEWAY_PROXY = 0x81c3101e, + PR_EMS_AB_DISABLED_GATEWAY_PROXY_UNICODE = 0x81c3101f, + PR_EMS_AB_DISABLED_GATEWAY_PROXY_ERROR = 0x81c3000a, + PR_EMS_AB_COMPROMISED_KEY_LIST = 0x81c40102, + PR_EMS_AB_COMPROMISED_KEY_LIST_ERROR = 0x81c4000a, + PR_EMS_AB_INSADMIN_O = 0x81c5000d, + PR_EMS_AB_INSADMIN_O_ERROR = 0x81c5000a, + PR_EMS_AB_INSADMIN = 0x81c5001e, + PR_EMS_AB_INSADMIN_UNICODE = 0x81c5001f, + PR_EMS_AB_OVERRIDE_NNTP_CONTENT_FORMAT = 0x81c6000b, + PR_EMS_AB_OVERRIDE_NNTP_CONTENT_FORMAT_ERROR = 0x81c6000a, + PR_EMS_AB_OBJ_VIEW_CONTAINERS_O = 0x81c7000d, + PR_EMS_AB_OBJ_VIEW_CONTAINERS_O_ERROR = 0x81c7000a, + PR_EMS_AB_OBJ_VIEW_CONTAINERS = 0x81c7101e, + PR_EMS_AB_OBJ_VIEW_CONTAINERS_UNICODE = 0x81c7101f, + PR_EMS_AB_VIEW_FLAGS = 0x8c180003, + PR_EMS_AB_VIEW_FLAGS_ERROR = 0x8c18000a, + PR_EMS_AB_GROUP_BY_ATTR_VALUE_STR = 0x8c19001e, + PR_EMS_AB_GROUP_BY_ATTR_VALUE_STR_UNICODE = 0x8c19001f, + PR_EMS_AB_GROUP_BY_ATTR_VALUE_STR_ERROR = 0x8c19000a, + PR_EMS_AB_GROUP_BY_ATTR_VALUE_DN_O = 0x8c1a000d, + PR_EMS_AB_GROUP_BY_ATTR_VALUE_DN_O_ERROR = 0x8c1a000a, + PR_EMS_AB_GROUP_BY_ATTR_VALUE_DN = 0x8c1a001e, + PR_EMS_AB_GROUP_BY_ATTR_VALUE_DN_UNICODE = 0x8c1a001f, + PR_EMS_AB_VIEW_DEFINITION = 0x8c1b1102, + PR_EMS_AB_VIEW_DEFINITION_ERROR = 0x8c1b000a, + PR_EMS_AB_MIME_TYPES = 0x8c1c0102, + PR_EMS_AB_MIME_TYPES_ERROR = 0x8c1c000a, + PR_EMS_AB_LDAP_SEARCH_CFG = 0x8c1d0003, + PR_EMS_AB_LDAP_SEARCH_CFG_ERROR = 0x8c1d000a, + PR_EMS_AB_INBOUND_DN_O = 0x8c1e000d, + PR_EMS_AB_INBOUND_DN_O_ERROR = 0x8c1e000a, + PR_EMS_AB_INBOUND_DN = 0x8c1e001e, + PR_EMS_AB_INBOUND_DN_UNICODE = 0x8c1e001f, + PR_EMS_AB_INBOUND_NEWSFEED_TYPE = 0x8c1f000b, + PR_EMS_AB_INBOUND_NEWSFEED_TYPE_ERROR = 0x8c1f000a, + PR_EMS_AB_INBOUND_ACCEPT_ALL = 0x8c20000b, + PR_EMS_AB_INBOUND_ACCEPT_ALL_ERROR = 0x8c20000a, + PR_EMS_AB_ENABLED = 0x8c21000b, + PR_EMS_AB_ENABLED_ERROR = 0x8c21000a, + PR_EMS_AB_PRESERVE_INTERNET_CONTENT = 0x8c22000b, + PR_EMS_AB_PRESERVE_INTERNET_CONTENT_ERROR = 0x8c22000a, + PR_EMS_AB_DISABLE_DEFERRED_COMMIT = 0x8c23000b, + PR_EMS_AB_DISABLE_DEFERRED_COMMIT_ERROR = 0x8c23000a, + PR_EMS_AB_CLIENT_ACCESS_ENABLED = 0x8c24000b, + PR_EMS_AB_CLIENT_ACCESS_ENABLED_ERROR = 0x8c24000a, + PR_EMS_AB_REQUIRE_SSL = 0x8c25000b, + PR_EMS_AB_REQUIRE_SSL_ERROR = 0x8c25000a, + PR_EMS_AB_ANONYMOUS_ACCOUNT = 0x8c26001e, + PR_EMS_AB_ANONYMOUS_ACCOUNT_UNICODE = 0x8c26001f, + PR_EMS_AB_ANONYMOUS_ACCOUNT_ERROR = 0x8c26000a, + PR_EMS_AB_CERTIFICATE_CHAIN_V3 = 0x8c270102, + PR_EMS_AB_CERTIFICATE_CHAIN_V3_ERROR = 0x8c27000a, + PR_EMS_AB_CERTIFICATE_REVOCATION_LIST_V3 = 0x8c280102, + PR_EMS_AB_CERTIFICATE_REVOCATION_LIST_V3_ERROR = 0x8c28000a, + PR_EMS_AB_CERTIFICATE_REVOCATION_LIST_V1 = 0x8c290102, + PR_EMS_AB_CERTIFICATE_REVOCATION_LIST_V1_ERROR = 0x8c29000a, + PR_EMS_AB_CROSS_CERTIFICATE_CRL = 0x8c301102, + PR_EMS_AB_CROSS_CERTIFICATE_CRL_ERROR = 0x8c30000a, + PR_EMS_AB_SEND_EMAIL_MESSAGE = 0x8c31000b, + PR_EMS_AB_SEND_EMAIL_MESSAGE_ERROR = 0x8c31000a, + PR_EMS_AB_ENABLE_COMPATIBILITY = 0x8c32000b, + PR_EMS_AB_ENABLE_COMPATIBILITY_ERROR = 0x8c32000a, + PR_EMS_AB_SMIME_ALG_LIST_NA = 0x8c33101e, + PR_EMS_AB_SMIME_ALG_LIST_NA_UNICODE = 0x8c33101f, + PR_EMS_AB_SMIME_ALG_LIST_NA_ERROR = 0x8c33000a, + PR_EMS_AB_SMIME_ALG_LIST_OTHER = 0x8c34101e, + PR_EMS_AB_SMIME_ALG_LIST_OTHER_UNICODE = 0x8c34101f, + PR_EMS_AB_SMIME_ALG_LIST_OTHER_ERROR = 0x8c34000a, + PR_EMS_AB_SMIME_ALG_SELECTED_NA = 0x8c35001e, + PR_EMS_AB_SMIME_ALG_SELECTED_NA_UNICODE = 0x8c35001f, + PR_EMS_AB_SMIME_ALG_SELECTED_NA_ERROR = 0x8c35000a, + PR_EMS_AB_SMIME_ALG_SELECTED_OTHER = 0x8c36001e, + PR_EMS_AB_SMIME_ALG_SELECTED_OTHER_UNICODE = 0x8c36001f, + PR_EMS_AB_SMIME_ALG_SELECTED_OTHER_ERROR = 0x8c36000a, + PR_EMS_AB_DEFAULT_MESSAGE_FORMAT = 0x8c37000b, + PR_EMS_AB_DEFAULT_MESSAGE_FORMAT_ERROR = 0x8c37000a, + PR_EMS_AB_TYPE = 0x8c38001e, + PR_EMS_AB_TYPE_UNICODE = 0x8c38001f, + PR_EMS_AB_TYPE_ERROR = 0x8c38000a, + PR_EMS_AB_DO_OAB_VERSION = 0x8c3a0003, + PR_EMS_AB_DO_OAB_VERSION_ERROR = 0x8c3a000a, + PR_EMS_AB_VOICE_MAIL_SYSTEM_GUID = 0x8c3b0102, + PR_EMS_AB_VOICE_MAIL_SYSTEM_GUID_ERROR = 0x8c3b000a, + PR_EMS_AB_VOICE_MAIL_USER_ID = 0x8c3c001e, + PR_EMS_AB_VOICE_MAIL_USER_ID_UNICODE = 0x8c3c001f, + PR_EMS_AB_VOICE_MAIL_USER_ID_ERROR = 0x8c3c000a, + PR_EMS_AB_VOICE_MAIL_PASSWORD = 0x8c3d001e, + PR_EMS_AB_VOICE_MAIL_PASSWORD_UNICODE = 0x8c3d001f, + PR_EMS_AB_VOICE_MAIL_PASSWORD_ERROR = 0x8c3d000a, + PR_EMS_AB_VOICE_MAIL_RECORDED_NAME = 0x8c3e0102, + PR_EMS_AB_VOICE_MAIL_RECORDED_NAME_ERROR = 0x8c3e000a, + PR_EMS_AB_VOICE_MAIL_GREETINGS = 0x8c3f101e, + PR_EMS_AB_VOICE_MAIL_GREETINGS_UNICODE = 0x8c3f101f, + PR_EMS_AB_VOICE_MAIL_GREETINGS_ERROR = 0x8c3f000a, + PR_EMS_AB_VOICE_MAIL_FLAGS = 0x8c401102, + PR_EMS_AB_VOICE_MAIL_FLAGS_ERROR = 0x8c40000a, + PR_EMS_AB_VOICE_MAIL_VOLUME = 0x8c410003, + PR_EMS_AB_VOICE_MAIL_VOLUME_ERROR = 0x8c41000a, + PR_EMS_AB_VOICE_MAIL_SPEED = 0x8c420003, + PR_EMS_AB_VOICE_MAIL_SPEED_ERROR = 0x8c42000a, + PR_EMS_AB_VOICE_MAIL_RECORDING_LENGTH = 0x8c431003, + PR_EMS_AB_VOICE_MAIL_RECORDING_LENGTH_ERROR = 0x8c43000a, + PR_EMS_AB_DISPLAY_NAME_SUFFIX = 0x8c44001e, + PR_EMS_AB_DISPLAY_NAME_SUFFIX_UNICODE = 0x8c44001f, + PR_EMS_AB_DISPLAY_NAME_SUFFIX_ERROR = 0x8c44000a, + PR_EMS_AB_ATTRIBUTE_CERTIFICATE = 0x8c451102, + PR_EMS_AB_ATTRIBUTE_CERTIFICATE_ERROR = 0x8c45000a, + PR_EMS_AB_DELTA_REVOCATION_LIST = 0x8c461102, + PR_EMS_AB_DELTA_REVOCATION_LIST_ERROR = 0x8c46000a, + PR_EMS_AB_SECURITY_POLICY = 0x8c471102, + PR_EMS_AB_SECURITY_POLICY_ERROR = 0x8c47000a, + PR_EMS_AB_SUPPORT_SMIME_SIGNATURES = 0x8c48000b, + PR_EMS_AB_SUPPORT_SMIME_SIGNATURES_ERROR = 0x8c48000a, + PR_EMS_AB_DELEGATE_USER = 0x8c49000b, + PR_EMS_AB_DELEGATE_USER_ERROR = 0x8c49000a, + PR_EMS_AB_LIST_PUBLIC_FOLDERS = 0x8c50000b, + PR_EMS_AB_LIST_PUBLIC_FOLDERS_ERROR = 0x8c50000a, + PR_EMS_AB_LABELEDURI = 0x8c51001e, + PR_EMS_AB_LABELEDURI_UNICODE = 0x8c51001f, + PR_EMS_AB_LABELEDURI_ERROR = 0x8c51000a, + PR_EMS_AB_RETURN_EXACT_MSG_SIZE = 0x8c52000b, + PR_EMS_AB_RETURN_EXACT_MSG_SIZE_ERROR = 0x8c52000a, + PR_EMS_AB_GENERATION_QUALIFIER = 0x8c53001e, + PR_EMS_AB_GENERATION_QUALIFIER_UNICODE = 0x8c53001f, + PR_EMS_AB_GENERATION_QUALIFIER_ERROR = 0x8c53000a, + PR_EMS_AB_HOUSE_IDENTIFIER = 0x8c54001e, + PR_EMS_AB_HOUSE_IDENTIFIER_UNICODE = 0x8c54001f, + PR_EMS_AB_HOUSE_IDENTIFIER_ERROR = 0x8c54000a, + PR_EMS_AB_SUPPORTED_ALGORITHMS = 0x8c550102, + PR_EMS_AB_SUPPORTED_ALGORITHMS_ERROR = 0x8c55000a, + PR_EMS_AB_DMD_NAME = 0x8c56001e, + PR_EMS_AB_DMD_NAME_UNICODE = 0x8c56001f, + PR_EMS_AB_DMD_NAME_ERROR = 0x8c56000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_11 = 0x8c57001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_11_UNICODE = 0x8c57001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_11_ERROR = 0x8c57000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_12 = 0x8c58001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_12_UNICODE = 0x8c58001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_12_ERROR = 0x8c58000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_13 = 0x8c59001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_13_UNICODE = 0x8c59001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_13_ERROR = 0x8c59000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_14 = 0x8c60001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_14_UNICODE = 0x8c60001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_14_ERROR = 0x8c60000a, + PR_EMS_AB_EXTENSION_ATTRIBUTE_15 = 0x8c61001e, + PR_EMS_AB_EXTENSION_ATTRIBUTE_15_UNICODE = 0x8c61001f, + PR_EMS_AB_EXTENSION_ATTRIBUTE_15_ERROR = 0x8c61000a, + PR_EMS_AB_REPLICATED_OBJECT_VERSION = 0x8c620003, + PR_EMS_AB_REPLICATED_OBJECT_VERSION_ERROR = 0x8c62000a, + PR_EMS_AB_MAIL_DROP = 0x8c63001e, + PR_EMS_AB_MAIL_DROP_UNICODE = 0x8c63001f, + PR_EMS_AB_MAIL_DROP_ERROR = 0x8c63000a, + PR_EMS_AB_FORWARDING_ADDRESS = 0x8c64001e, + PR_EMS_AB_FORWARDING_ADDRESS_UNICODE = 0x8c64001f, + PR_EMS_AB_FORWARDING_ADDRESS_ERROR = 0x8c64000a, + PR_EMS_AB_FORM_DATA = 0x8c650102, + PR_EMS_AB_FORM_DATA_ERROR = 0x8c65000a, + PR_EMS_AB_OWA_SERVER = 0x8c66001e, + PR_EMS_AB_OWA_SERVER_UNICODE = 0x8c66001f, + PR_EMS_AB_OWA_SERVER_ERROR = 0x8c66000a, + PR_EMS_AB_EMPLOYEE_NUMBER = 0x8c67001e, + PR_EMS_AB_EMPLOYEE_NUMBER_UNICODE = 0x8c67001f, + PR_EMS_AB_EMPLOYEE_NUMBER_ERROR = 0x8c67000a, + PR_EMS_AB_TELEPHONE_PERSONAL_PAGER = 0x8c68001e, + PR_EMS_AB_TELEPHONE_PERSONAL_PAGER_UNICODE = 0x8c68001f, + PR_EMS_AB_TELEPHONE_PERSONAL_PAGER_ERROR = 0x8c68000a, + PR_EMS_AB_EMPLOYEE_TYPE = 0x8c69001e, + PR_EMS_AB_EMPLOYEE_TYPE_UNICODE = 0x8c69001f, + PR_EMS_AB_EMPLOYEE_TYPE_ERROR = 0x8c69000a, + PR_EMS_AB_TAGGED_X509_CERT = 0x8c6a1102, + PR_EMS_AB_TAGGED_X509_CERT_ERROR = 0x8c6a000a, + PR_EMS_AB_PERSONAL_TITLE = 0x8c6b001e, + PR_EMS_AB_PERSONAL_TITLE_UNICODE = 0x8c6b001f, + PR_EMS_AB_PERSONAL_TITLE_ERROR = 0x8c6b000a, + PR_EMS_AB_LANGUAGE_ISO639 = 0x8c6c001e, + PR_EMS_AB_LANGUAGE_ISO639_UNICODE = 0x8c6c001f, + PR_EMS_AB_LANGUAGE_ISO639_ERROR = 0x8c6c000a, + PR_EMS_AB_OTHER_RECIPS = 0xf000000d, + PR_EMS_AB_OTHER_RECIPS_ERROR = 0xf000000a, + PR_EMS_AB_CHILD_RDNS = 0xfff8101e, + PR_EMS_AB_CHILD_RDNS_UNICODE = 0xfff8101f, + PR_EMS_AB_CHILD_RDNS_ERROR = 0xfff8000a, + PR_EMS_AB_HIERARCHY_PATH = 0xfff9001e, + PR_EMS_AB_HIERARCHY_PATH_UNICODE = 0xfff9001f, + PR_EMS_AB_HIERARCHY_PATH_ERROR = 0xfff9000a, + PR_EMS_AB_OBJECT_OID = 0xfffa0102, + PR_EMS_AB_OBJECT_OID_ERROR = 0xfffa000a, + PR_EMS_AB_IS_MASTER = 0xfffb000b, + PR_EMS_AB_IS_MASTER_ERROR = 0xfffb000a, + PR_EMS_AB_PARENT_ENTRYID = 0xfffc0102, + PR_EMS_AB_PARENT_ENTRYID_ERROR = 0xfffc000a, + PR_EMS_AB_CONTAINERID = 0xfffd0003, + PR_EMS_AB_CONTAINERID_ERROR = 0xfffd000a, + PR_EMS_AB_SERVER = 0xfffe001e, + PR_EMS_AB_SERVER_UNICODE = 0xfffe001f, + PR_EMS_AB_SERVER_ERROR = 0xfffe000a, + MAPI_PROP_RESERVED = 0xFFFFFFFF +} MAPITAGS; + diff --git a/epan/dissectors/pidl/mdssvc/mdssvc.cnf b/epan/dissectors/pidl/mdssvc/mdssvc.cnf new file mode 100644 index 00000000..d041f747 --- /dev/null +++ b/epan/dissectors/pidl/mdssvc/mdssvc.cnf @@ -0,0 +1,25 @@ +MANUAL mdssvc_dissect_element_blob_spotlight_blob + +NOEMIT mdssvc_dissect_element_blob_spotlight_blob_ + +CODE START +static int +mdssvc_dissect_element_blob_spotlight_blob(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep _U_) +{ + tvbuff_t *spotlight_tvb; + dissector_handle_t spotlight_handle; + + if (di->conformant_run) { + return offset; + } + + spotlight_handle = find_dissector("afp_spotlight"); + if (spotlight_handle) + { + spotlight_tvb = tvb_new_subset_remaining(tvb, offset + 16); + return (offset + 16 + call_dissector(spotlight_handle, spotlight_tvb, pinfo, tree)); + } + + return offset; +} +CODE END diff --git a/epan/dissectors/pidl/mdssvc/mdssvc.idl b/epan/dissectors/pidl/mdssvc/mdssvc.idl new file mode 100644 index 00000000..3f63e7cd --- /dev/null +++ b/epan/dissectors/pidl/mdssvc/mdssvc.idl @@ -0,0 +1,68 @@ +import "misc/misc.idl"; +[ + uuid("885d85fb-c754-4062-a0e7-6872ce0064f4"), + endpoint("ncacn_np:[\\pipe\\mdssvc]", "ncacn_ip_tcp:", "ncalrpc:"), + version(2.0), + helpstring("Spotlight metadata search service") +] +interface mdssvc +{ + void mdssvc_open( + [in,out,ref] uint32 *device_id, + [in,out,ref] uint32 *unkn2, /* always 0x17 ? */ + [in,out,ref] uint32 *unkn3, /* always 0 ? */ + [in][string,charset(UTF8),size_is(1025)] uint8 share_mount_path[], + [in][string,charset(UTF8),size_is(1025)] uint8 share_name[], + [out,string,charset(UTF8),size_is(1025)] uint8 share_path[], + [out,ref] policy_handle *handle + ); + + void mdssvc_unknown1( + [in] policy_handle *handle, + [in] uint32 unkn1, /* always 0, some status ? */ + [in] uint32 device_id, + [in] uint32 unkn3, /* = mdssvc_open.unkn2 ? */ + [in] uint32 unkn4, /* always 0, some status ? */ + [in] uint32 uid, + [in] uint32 gid, + [out,ref] uint32 *status, + [out,ref] uint32 *flags, /* always 0x6b000001 ? */ + [out,ref] uint32 *unkn7 /* always 0 ? */ + ); + + typedef [public] struct { + uint32 length; + uint32 size; + [size_is(size),length_is(length)] uint8 *spotlight_blob; + } mdssvc_blob; + + void mdssvc_cmd( + [in] policy_handle *handle, + [in] uint32 unkn1, /* always 0, status ? */ + [in] uint32 device_id, + [in] uint32 unkn3, /* = mdssvc_open.unkn2 ? */ + [in] uint32 unkn4, /* always 0 ? */ + [in] uint32 flags, /* always 0x6b000001 ? */ + [in] mdssvc_blob request_blob, + [in] uint32 unkn5, /* always 0 ? */ + [in] uint32 max_fragment_size1, + [in] uint32 unkn6, /* always 1 ? */ + /* always max_fragment_size1 = max_fragment_size2 ? */ + [in] uint32 max_fragment_size2, + [in] uint32 unkn7, /* always 0 ? */ + [in] uint32 unkn8, /* always 0 ? */ + [out,ref] uint32 *fragment, + [out,ref] mdssvc_blob *response_blob, + [out,ref] uint32 *unkn9 /* always 0 ? */ + ); + + void mdssvc_close( + [in] policy_handle *in_handle, + [in] uint32 unkn1, /* always 0, some status ? */ + [in] uint32 device_id, + [in] uint32 unkn2, /* = mdssvc_open.unkn2 ? */ + [in] uint32 unkn3, /* always 0, some status ? */ + [out,ref] policy_handle *out_handle, + [out,ref] uint32 *status + ); +} diff --git a/epan/dissectors/pidl/misc/misc.cnf b/epan/dissectors/pidl/misc/misc.cnf new file mode 100644 index 00000000..f210c385 --- /dev/null +++ b/epan/dissectors/pidl/misc/misc.cnf @@ -0,0 +1 @@ +NOEMIT winreg_Data diff --git a/epan/dissectors/pidl/misc/misc.idl b/epan/dissectors/pidl/misc/misc.idl new file mode 100644 index 00000000..c306f359 --- /dev/null +++ b/epan/dissectors/pidl/misc/misc.idl @@ -0,0 +1,80 @@ +#include "idl_types.h" + +/* + miscellaneous IDL structures +*/ + +[ + uuid("12345678-1234-1234-1234-abcdef123456"), + version(1.0), + pointer_default(unique) +] +interface misc +{ + typedef [public,noprint,gensize] struct { + uint32 time_low; + uint16 time_mid; + uint16 time_hi_and_version; + uint8 clock_seq[2]; + uint8 node[6]; + } GUID; + + typedef [public] struct { + GUID uuid; + /* The major version is encoded in the 16 least significant bits, + the minor in the 16 most significant bits. + http://www.opengroup.org/onlinepubs/9629399/chap12.htm */ + uint32 if_version; + } ndr_syntax_id; + + typedef [public] struct { + uint32 handle_type; + GUID uuid; + } policy_handle; + + /* secure channel types */ + /* Only SEC_CHAN_WKSTA can forward requests to other domains. */ + + typedef [public] enum { + SEC_CHAN_NULL = 0, + SEC_CHAN_LOCAL = 1, + SEC_CHAN_WKSTA = 2, + SEC_CHAN_DNS_DOMAIN = 3, + SEC_CHAN_DOMAIN = 4, + SEC_CHAN_LANMAN = 5, + SEC_CHAN_BDC = 6, + SEC_CHAN_RODC = 7 + } netr_SchannelType; + + typedef [public] struct { + NTSTATUS ntstatus; + uint32 unknown1; + uint32 unknown2; /* 0x00000001 */ + } KRB5_EDATA_NTSTATUS; + + typedef [public,v1_enum] enum { + REG_NONE = 0, + REG_SZ = 1, + REG_EXPAND_SZ = 2, + REG_BINARY = 3, + REG_DWORD = 4, + REG_DWORD_BIG_ENDIAN = 5, + REG_LINK = 6, + REG_MULTI_SZ = 7, + REG_RESOURCE_LIST = 8, + REG_FULL_RESOURCE_DESCRIPTOR = 9, + REG_RESOURCE_REQUIREMENTS_LIST = 10, + REG_QWORD = 11 + } winreg_Type; + + typedef [nodiscriminant,public,flag(NDR_LITTLE_ENDIAN)] union { + [case(REG_NONE)]; + [case(REG_SZ)] nstring string; + [case(REG_EXPAND_SZ)] nstring string; + [case(REG_BINARY),flag(NDR_REMAINING)] DATA_BLOB binary; + [case(REG_DWORD)] uint32 value; + [case(REG_DWORD_BIG_ENDIAN),flag(NDR_BIG_ENDIAN)] uint32 value; + [case(REG_MULTI_SZ)] nstring_array string_array; + [default,flag(NDR_REMAINING)] DATA_BLOB data; + } winreg_Data; +} diff --git a/epan/dissectors/pidl/nspi/README b/epan/dissectors/pidl/nspi/README new file mode 100644 index 00000000..6cf79950 --- /dev/null +++ b/epan/dissectors/pidl/nspi/README @@ -0,0 +1,62 @@ +OpenChange Wireshark dissector +------------------------------ + +Author: Julien Kerihuel <j.kerihuel@openchange.org>, November 2006 + +0x0 Content +----------- + 0x1 Installation + 0x2 Overview + 0x3 Developers installation + 0x4 Limitations + 0x5 Links + +0x1 Installation +---------------- + +Copy packet-dcerpc-nspi.c and packet-dcerpc-nspi.h in the dissector +wireshark directory (e.g.: wireshark/epan/dissectors) and compile. + +That's all ;) + +0x2 Overview +------------- + +The NSPI dissector implements the following IDL functions: +(0x1) NspiBind +(0x2) NspiUnbind +(0x3) NspiQueryRows +(0x5) NspiGetMatches +(0x7) NspiDNToEph +(0x9) NspiGetProps +(0xc) NspiGetHierarchyInfo + +0x3 Developers installation +--------------------------- + +The ws-parser directory includes the file used to generate the nspi +dissector. In order to create the dissector, you need to follow this +procedure below: + +1. Install Samba PIDL (>= rev 19559 if installed from samba4 sources) +3. Copy idl_types.h in the current directory +4. run "pidl --ws-parser -- nspi.idl" + + +0x4 Limitations +--------------- + +- We have only implemented the SRestriction_CTR cases we found during +our tests: + * RES_AND + * RES_PROPERTY + +- The current dissector implements the NSPI functions used by +Microsoft Exchange Server 2000/2003 but some functions used by older +versions of Exchange such as NspiUpdateStat may miss. + +0x5 Links +----------- + +* http://www.openchange.org +* http://wiki.openchange.org diff --git a/epan/dissectors/pidl/nspi/README.ws b/epan/dissectors/pidl/nspi/README.ws new file mode 100644 index 00000000..5df05687 --- /dev/null +++ b/epan/dissectors/pidl/nspi/README.ws @@ -0,0 +1,2 @@ +This directory is a copy of the files from: +svn://kb.openchange.org/openchange/tools/dissector diff --git a/epan/dissectors/pidl/nspi/nspi.cnf b/epan/dissectors/pidl/nspi/nspi.cnf new file mode 100644 index 00000000..2f5346c3 --- /dev/null +++ b/epan/dissectors/pidl/nspi/nspi.cnf @@ -0,0 +1,26 @@ +HF_FIELD hf_nspi_handle "Handle" "nspi.handle" FT_BYTES BASE_NONE NULL 0 "" "" "" + +HF_RENAME hf_nspi_NspiBind_handle hf_nspi_handle +HF_RENAME hf_nspi_NspiUnbind_handle hf_nspi_handle +HF_RENAME hf_nspi_NspiQueryRows_handle hf_nspi_handle +HF_RENAME hf_nspi_NspiGetMatches_handle hf_nspi_handle +HF_RENAME hf_nspi_NspiDNToEph_handle hf_nspi_handle +HF_RENAME hf_nspi_NspiGetProps_handle hf_nspi_handle +HF_RENAME hf_nspi_NspiGetHierarchyInfo_handle hf_nspi_handle + +HF_FIELD hf_nspi_property_type "Value" "nspi.SPropValue.value" FT_UINT32 BASE_HEX VALS(nspi_property_types_vals) 0 "" "" +HF_FIELD hf_nspi_SRestriction_PTTYPE "Restriction Type" "nspi.property_type" FT_UINT32 BASE_HEX VALS(nspi_nspi_RestrictionType_vals) 0 "" "" +HF_RENAME hf_nspi_SPropValue_value hf_nspi_property_type +HF_RENAME hf_nspi_SRestriction_res hf_nspi_SRestriction_PTTYPE +HF_RENAME hf_nspi_SRestriction_rt hf_nspi_SRestriction_PTTYPE + +# +# policyhandle tracking +# This block is to specify where a policyhandle is opened and where it is +# closed so that policyhandles when dissected contain nice info such as +# [opened in xxx] [closed in yyy] +# +# Policyhandles are opened in these functions (open==0x0001) +PARAM_VALUE nspi_dissect_element_NspiBind_handle_ 0x0001 +# Policyhandles are closed in these functions (close==0x0002) +PARAM_VALUE nspi_dissect_element_NspiUnbind_handle_ 0x0002 diff --git a/epan/dissectors/pidl/nspi/nspi.idl b/epan/dissectors/pidl/nspi/nspi.idl new file mode 100644 index 00000000..5c893770 --- /dev/null +++ b/epan/dissectors/pidl/nspi/nspi.idl @@ -0,0 +1,377 @@ +/* + NSPI Implementation + + OpenChange Project + + Copyright (C) Julien Kerihuel 2006 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + +#include "idl_types.h" + +[ + uuid("f5cc5a18-4264-101a-8c59-08002b2f8426"), + endpoint("ncacn_np:[\\pipe\\exchange_nsp]", "ncacn_ip_tcp:"), + pointer_default(unique), + version(56.0), + helpstring("Exchange 5.5 Name Service Provider"), + helper("ndr_mapi.h") +] interface nspi +{ + +#include "mapitags_enum.h" +#include "mapicodes_enum.h" + + /*****************/ + /* Function 0x00 */ + + /* + ** MAPIUID explanation: + ** http://msdn.microsoft.com/library/default.asp?url=/library/en-us/mapi/html/c42065c2-b1f5-4930-84a6-6ef90c6162d0.asp + */ + + typedef struct _MAPIUID{ + uint8 ab[16]; + } MAPIUID; + + /* + ** input locale combination: + ** http://www.microsoft.com/globaldev/reference/win2k/setup/lcid.mspx + */ + + typedef struct { + uint32 language; + uint32 method; + } input_locale; + + typedef [flag(NDR_NOALIGN)] struct { + uint32 handle; + uint32 flag; + MAPIUID service_provider; + uint32 codepage; /* CPID */ + input_locale input_locale; /* LCID */ + } MAPI_SETTINGS; + + typedef struct { + [unique, length_is(cValues - 1), size_is(cValues - 1)] MAPITAGS *aulPropTag; + uint32 cValues; + } SPropTagArray; + + typedef struct { + [length_is(cValues - 1), size_is(cValues - 1)] uint32 *value; + uint32 cValues; + } instance_key; + + + + /*****************/ + /* Function 0x00 */ + MAPISTATUS NspiBind( + [in] uint32 unknown, + [in] MAPI_SETTINGS *settings, + [in,out,unique] GUID *mapiuid, + [out] policy_handle *handle + ); + + /*****************/ + /* Function 0x01 */ + MAPISTATUS NspiUnbind( + [in, out] policy_handle *handle, + [in] uint32 status + ); + + + void NspiUpdateStat(); + + /*****************/ + /* Function 0x03 */ + MAPISTATUS NspiQueryRows( + [in] policy_handle *handle, + [in] uint32 flag, + [in,out] MAPI_SETTINGS *settings, + [in] uint32 lRows, + [in][size_is(lRows)][unique] uint32 *instance_key, + [in] uint32 unknown, + [in] SPropTagArray *REQ_properties, + [out] SRowSet **RowSet + ); + + void NspiSeekEntries(); + + /*****************/ + /* Function 0x05 */ + + + + typedef struct { + [unique] MAPIUID *lpguid; + uint32 ulKind; + uint32 lID; /* this is actually a union in mapidefs.h */ + } MAPINAMEID; + + /* Restriction types */ + typedef [v1_enum] enum { + RES_AND = 0, + RES_OR = 1, + RES_NOT = 2, + RES_CONTENT = 3, + RES_PROPERTY = 4, + RES_COMPAREPROPS = 5, + RES_BITMASK = 6, + RES_SIZE = 7, + RES_EXIST = 8, + RES_SUBRESTRICTION = 9, + RES_COMMENT = 10 + } nspi_RestrictionType; + + typedef struct { + uint32 relop; + MAPITAGS ulPropTag; + SPropValue *lpProp; + } SPropertyRestriction; + + typedef struct { + uint32 cRes; + [size_is(cRes)][unique]SRestriction *lpRes; + } SAndRestriction; + + typedef [switch_type(nspi_RestrictionType)] union { + [case(RES_AND) ] SAndRestriction resAnd; +// [case(RES_OR) ] SOrRestriction resOr; +// [case(RES_NOT) ] SNotRestriction resNot; +// [case(RES_CONTENT) ] SContentRestriction resContent; + [case(RES_PROPERTY) ] SPropertyRestriction resProperty; +// [case(RES_COMPAREPROPS) ] SComparePropsRestriction resCompareProps; +// [case(RES_BITMASK) ] SBitMaskRestriction resBitMask; +// [case(RES_SUBRESTRICTION)] SSubRestriction resSub; +// [case(RES_SIZE) ] SSizeRestriction resSize; +// [case(RES_EXIST) ] SExistRestriction resExist; + } SRestriction_CTR; + + typedef [public] struct _SRestriction{ + nspi_RestrictionType rt; + [switch_is(rt)] SRestriction_CTR res; + } SRestriction; + +/* Sort type */ +#define TABLE_SORT_ASCEND 0 +#define TABLE_SORT_DESCEND 0 + + typedef [public] struct _SSortOrder{ + uint32 ulPropTag; + uint32 ulOrder; + } SSortOrder; + + typedef [public] struct _SSortOrderSet{ + uint32 cSorts; + uint32 cCategories; + uint32 cExpanded; + [size_is(cSorts)][unique]SSortOrder *aSort; + } SSortOrderSet; + + MAPISTATUS NspiGetMatches( + [in] policy_handle *handle, + [in] uint32 unknown1, + [in,out] MAPI_SETTINGS *settings, + [in][unique] SPropTagArray *PropTagArray, + [in] uint32 unknown2, + [in][unique] SRestriction *restrictions, + [in] uint32 unknown3, + [out] instance_key *instance_key, + [in][unique] SPropTagArray *REQ_properties, + [out] SRowSet **RowSet + ); + + + void NspiResortRestriction(); + + /*****************/ + /* Function 0x07 */ + + typedef struct { + [string, charset(DOS)] uint8 *str; + } NAME_STRING; + + MAPISTATUS NspiDNToEph( + [in] policy_handle *handle, + [in] uint32 flag, + [in] uint32 size, + [in,ref][size_is(size)] NAME_STRING *server_dn, + [out] instance_key *instance_key + ); + + void NspiGetPropList(); + + /*****************/ + /* Function 0x09 */ + MAPISTATUS NspiGetProps( + [in] policy_handle *handle, + [in] uint32 flag, + [in] MAPI_SETTINGS *settings, + [in] SPropTagArray *REQ_properties, + [out] SRow **REPL_values + ); + + + void NspiCompareDNTs(); + void NspiModProps(); + + typedef [v1_enum] enum { + PT_UNSPECIFIED = 0x0000, + PT_NULL = 0x0001, + PT_I2 = 0x0002, + PT_LONG = 0x0003, + PT_R4 = 0x0004, + PT_DOUBLE = 0x0005, + PT_CURRENCY = 0x0006, + PT_APPTIME = 0x0007, + PT_ERROR = 0x000a, /* means the given attr contains no value */ + PT_BOOLEAN = 0x000b, + PT_OBJECT = 0x000d, + PT_I8 = 0x0014, + PT_STRING8 = 0x001e, + PT_UNICODE = 0x001f, + PT_SYSTIME = 0x0040, + PT_CLSID = 0x0048, + PT_BINARY = 0x0102, + + /* Multi-valued properties */ + + PT_MV_I2 = 0x1002, + PT_MV_LONG = 0x1003, + PT_MV_R4 = 0x1004, + PT_MV_DOUBLE = 0x1005, + PT_MV_CURRENCY = 0x1006, + PT_MV_APPTIME = 0x1007, + PT_MV_I8 = 0x1014, + PT_MV_STRING8 = 0x101e, +// PT_MV_TSTRING = 0x101e, + PT_MV_UNICODE = 0x101f, + PT_MV_SYSTIME = 0x1040, + PT_MV_CLSID = 0x1048, + PT_MV_BINARY = 0x1102 + } property_types; + + + /*****************/ + /* Function 0x0c */ + + typedef struct { + uint32 cb; + [size_is(cb)][unique] uint8 *lpb; + } SBinary; + + typedef struct { + uint32 dwLowDateTime; + uint32 dwHighDateTime; + } FILETIME; + + typedef struct { + uint32 cValues; + [size_is(cValues)] uint16 *lpi; + } SShortArray; + + typedef struct { + uint32 cValues; + [size_is(cValues)] uint32 *lpl; + } MV_LONG_STRUCT; + + typedef struct { + ascstr_noterm lppszA; + } LPSTR; + + typedef struct { + uint32 cValues; + [size_is(cValues)] LPSTR **strings; + } SLPSTRArray; + + typedef struct { + uint32 cValues; + [size_is(cValues)] SBinary *lpbin; + } SBinaryArray; + + typedef [flag(NDR_NOALIGN)] struct { + uint32 cValues; + [size_is(cValues)] uint32 *lpguid; + } SGuidArray; + + typedef struct { + uint32 cValues; + [size_is(cValues)] uint32 *lpi; + } MV_UNICODE_STRUCT; + + typedef struct { + uint32 cValues; + [size_is(cValues)] FILETIME *lpft; + } SDateTimeArray; + + typedef [switch_type(property_types)] union { + [case(PT_I2)] uint16 i; + [case(PT_LONG)] uint32 l; + [case(PT_BOOLEAN)] uint16 b; + [case(PT_STRING8)][unique][string,charset(DOS)] uint8 *lpszA; + [case(PT_BINARY)] SBinary bin; + [case(PT_UNICODE)] [string,charset(UTF16)] uint16 *lpszW; + [case(PT_CLSID)] MAPIUID *lpguid; + [case(PT_SYSTIME)] FILETIME ft; + [case(PT_ERROR)] MAPISTATUS err; + [case(PT_MV_I2)] SShortArray MVi; + [case(PT_MV_LONG)] MV_LONG_STRUCT MVl; + [case(PT_MV_STRING8)] SLPSTRArray MVszA; + [case(PT_MV_BINARY)] SBinaryArray MVbin; + [case(PT_MV_CLSID)] SGuidArray MVguid; + [case(PT_MV_UNICODE)] MV_UNICODE_STRUCT MVszW; + [case(PT_MV_SYSTIME)] SDateTimeArray MVft; + [case(PT_NULL)] uint32 null; + [case(PT_OBJECT)] uint32 object; + } SPropValue_CTR; + + typedef [public]struct { + MAPITAGS ulPropTag; + uint32 dwAlignPad; + [switch_is(ulPropTag & 0xFFFF)] SPropValue_CTR value; + } SPropValue; + + typedef struct { + uint32 ulAdrEntryPad; + uint32 cValues; + [size_is(cValues)][unique] SPropValue *lpProps; + } SRow; + + + typedef [public] struct { + uint32 cRows; + [size_is(cRows)] SRow aRow[*]; + } SRowSet; + + MAPISTATUS NspiGetHierarchyInfo( + [in] policy_handle *handle, + [in] uint32 unknown1, + [in] MAPI_SETTINGS *settings, + [in,out] uint32 *unknown2, + [out] SRowSet **RowSet + ); + + void NspiGetTemplateInfo(); + void NspiModLInkAtt(); + void NspiDeleteEntries(); + void NspiQueryColumns(); + void NspiGetNamesFromIDs(); + void NspiGetIDsFromNames(); + void NspiResolveNames(); + void NspiResolveNamesW(); +} diff --git a/epan/dissectors/pidl/rfr/rfr.cnf b/epan/dissectors/pidl/rfr/rfr.cnf new file mode 100644 index 00000000..07dbd738 --- /dev/null +++ b/epan/dissectors/pidl/rfr/rfr.cnf @@ -0,0 +1 @@ +# Conformance file for RFR diff --git a/epan/dissectors/pidl/rfr/rfr.idl b/epan/dissectors/pidl/rfr/rfr.idl new file mode 100644 index 00000000..da2ec2bd --- /dev/null +++ b/epan/dissectors/pidl/rfr/rfr.idl @@ -0,0 +1,53 @@ +/* + RFR Implementation + + OpenChange Project + + Copyright (C) Julien Kerihuel 2008. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "idl_types.h" + +[ + uuid("1544f5e0-613c-11d1-93df-00c04fd7bd09"), + endpoint("ncacn_np:[\\pipe\\lsass]","ncacn_np:[\\pipe\\protected_storage]","ncacn_ip_tcp:[]"), + pointer_default(unique), + version(1.0), + helpstring("Exchange 2003 Directory Request For Response") +] interface rfr +{ + +#include "mapicodes_enum.h" + + /*****************/ + /* Function 0x00 */ + MAPISTATUS RfrGetNewDSA( + [in] uint32 ulFlags, + [in,string,charset(DOS)] uint8 *pUserDN, + [in,out,unique,string,charset(DOS)] uint8 **ppszUnused, + [in,out,unique,string,charset(DOS)] uint8 **ppszServer + ); + + /*****************/ + /* Function 0x01 */ + MAPISTATUS RfrGetFQDNFromLegacyDN( + [in] uint32 ulFlags, + [in,range(10,1024)] uint32 cbMailboxServerDN, + [in,string,charset(DOS),size_is(cbMailboxServerDN)] uint8 *szMailboxServerDN, + [out,ref,string,charset(DOS)] uint8 **ppszServerFQDN + ); +} diff --git a/epan/dissectors/pidl/samr/samr.cnf b/epan/dissectors/pidl/samr/samr.cnf new file mode 100644 index 00000000..07ca73de --- /dev/null +++ b/epan/dissectors/pidl/samr/samr.cnf @@ -0,0 +1,501 @@ +# +# policyhandle tracking +# This block is to specify where a policyhandle is opened and where it is +# closed so that policyhandles when dissected contain nice info such as +# [opened in xxx] [closed in yyy] +# +# Policyhandles are opened in these functions +PARAM_VALUE samr_dissect_element_Connect_connect_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_SAMR_CONNECT +PARAM_VALUE samr_dissect_element_OpenDomain_domain_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_SAMR_DOMAIN +PARAM_VALUE samr_dissect_element_CreateDomainGroup_group_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_SAMR_GROUP +PARAM_VALUE samr_dissect_element_CreateUser_user_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_SAMR_USER +PARAM_VALUE samr_dissect_element_CreateDomAlias_alias_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_SAMR_ALIAS +PARAM_VALUE samr_dissect_element_OpenGroup_group_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_SAMR_GROUP +PARAM_VALUE samr_dissect_element_OpenAlias_alias_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_SAMR_ALIAS +PARAM_VALUE samr_dissect_element_OpenUser_user_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_SAMR_USER +PARAM_VALUE samr_dissect_element_CreateUser2_user_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_SAMR_USER +PARAM_VALUE samr_dissect_element_Connect2_connect_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_SAMR_CONNECT +PARAM_VALUE samr_dissect_element_Connect3_connect_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_SAMR_CONNECT +PARAM_VALUE samr_dissect_element_Connect4_connect_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_SAMR_CONNECT +PARAM_VALUE samr_dissect_element_Connect5_connect_handle_ PIDL_POLHND_OPEN|PIDL_POLHND_TYPE_SAMR_CONNECT +# Policyhandles are closed in these functions +PARAM_VALUE samr_dissect_element_Close_handle_ PIDL_POLHND_CLOSE +PARAM_VALUE samr_dissect_element_Shutdown_connect_handle_ PIDL_POLHND_CLOSE +PARAM_VALUE samr_dissect_element_DeleteDomainGroup_group_handle_ PIDL_POLHND_CLOSE +PARAM_VALUE samr_dissect_element_DeleteDomAlias_alias_handle_ PIDL_POLHND_CLOSE +PARAM_VALUE samr_dissect_element_DeleteUser_user_handle_ PIDL_POLHND_CLOSE + + + +# +# make sure all policy handles of the same type use the same filter name +# +HF_FIELD hf_samr_handle "Handle" "samr.handle" FT_BYTES BASE_NONE NULL 0 "" "" "" +HF_RENAME hf_samr_samr_Close_handle hf_samr_handle +HF_RENAME hf_samr_samr_SetSecurity_handle hf_samr_handle +HF_RENAME hf_samr_samr_QuerySecurity_handle hf_samr_handle + +HF_FIELD hf_samr_connect_handle "Connect Handle" "samr.connect_handle" FT_BYTES BASE_NONE NULL 0 "" "" "" +HF_RENAME hf_samr_samr_Connect_connect_handle hf_samr_connect_handle +HF_RENAME hf_samr_samr_LookupDomain_connect_handle hf_samr_connect_handle +HF_RENAME hf_samr_samr_EnumDomain_connect_handle hf_samr_connect_handle +HF_RENAME hf_samr_samr_OpenDomain_connect_handle hf_samr_connect_handle +HF_RENAME hf_samr_samr_Shutdown_handle hf_samr_connect_handle +HF_RENAME hf_samr_samr_Connect2_connect_handle hf_samr_connect_handle +HF_RENAME hf_samr_samr_SetBootKeyInformation_connect_handle hf_samr_connect_handle +HF_RENAME hf_samr_samr_GetBootKeyInformation_connect_handle hf_samr_connect_handle +HF_RENAME hf_samr_samr_Connect3_connect_handle hf_samr_connect_handle +HF_RENAME hf_samr_samr_Connect4_connect_handle hf_samr_connect_handle +HF_RENAME hf_samr_samr_Connect5_connect_handle hf_samr_connect_handle + +HF_FIELD hf_samr_domain_handle "Domain Handle" "samr.domain_handle" FT_BYTES BASE_NONE NULL 0 "" "" "" +HF_RENAME hf_samr_samr_OpenDomain_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_QueryDomainInfo_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_SetDomainInfo_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_CreateDomainGroup_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_EnumDomainGroups_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_CreateUser_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_EnumDomainUsers_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_CreateDomAlias_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_EnumDomainAliases_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_GetAliasMembership_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_LookupNames_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_LookupRids_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_OpenGroup_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_OpenAlias_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_OpenUser_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_QueryDisplayInfo_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_GetDisplayEnumerationIndex_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_TestPrivateFunctionsDomain_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_RemoveMemberFromForeignDomain_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_QueryDomainInfo2_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_QueryDisplayInfo2_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_GetDisplayEnumerationIndex2_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_CreateUser2_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_QueryDisplayInfo3_domain_handle hf_samr_domain_handle +HF_RENAME hf_samr_samr_RidToSid_domain_handle hf_samr_domain_handle + +HF_FIELD hf_samr_group_handle "Group Handle" "samr.group_handle" FT_BYTES BASE_NONE NULL 0 "" "" "" +HF_RENAME hf_samr_samr_CreateDomainGroup_group_handle hf_samr_group_handle +HF_RENAME hf_samr_samr_OpenGroup_group_handle hf_samr_group_handle +HF_RENAME hf_samr_samr_QueryGroupInfo_group_handle hf_samr_group_handle +HF_RENAME hf_samr_samr_SetGroupInfo_group_handle hf_samr_group_handle +HF_RENAME hf_samr_samr_AddGroupMember_group_handle hf_samr_group_handle +HF_RENAME hf_samr_samr_DeleteDomainGroup_group_handle hf_samr_group_handle +HF_RENAME hf_samr_samr_DeleteGroupMember_group_handle hf_samr_group_handle +HF_RENAME hf_samr_samr_QueryGroupMember_group_handle hf_samr_group_handle +HF_RENAME hf_samr_samr_SetMemberAttributesOfGroup_group_handle hf_samr_group_handle + +HF_FIELD hf_samr_user_handle "User Handle" "samr.user_handle" FT_BYTES BASE_NONE NULL 0 "" "" "" +HF_RENAME hf_samr_samr_CreateUser_user_handle hf_samr_user_handle +HF_RENAME hf_samr_samr_OpenUser_user_handle hf_samr_user_handle +HF_RENAME hf_samr_samr_DeleteUser_user_handle hf_samr_user_handle +HF_RENAME hf_samr_samr_QueryUserInfo_user_handle hf_samr_user_handle +HF_RENAME hf_samr_samr_SetUserInfo_user_handle hf_samr_user_handle +HF_RENAME hf_samr_samr_ChangePasswordUser_user_handle hf_samr_user_handle +HF_RENAME hf_samr_samr_GetGroupsForUser_user_handle hf_samr_user_handle +HF_RENAME hf_samr_samr_TestPrivateFunctionsUser_user_handle hf_samr_user_handle +HF_RENAME hf_samr_samr_GetUserPwInfo_user_handle hf_samr_user_handle +HF_RENAME hf_samr_samr_QueryUserInfo2_user_handle hf_samr_user_handle +HF_RENAME hf_samr_samr_CreateUser2_user_handle hf_samr_user_handle +HF_RENAME hf_samr_samr_SetUserInfo2_user_handle hf_samr_user_handle + +HF_FIELD hf_samr_alias_handle "Alias Handle" "samr.alias_handle" FT_BYTES BASE_NONE NULL 0 "" "" "" +HF_RENAME hf_samr_samr_CreateDomAlias_alias_handle hf_samr_alias_handle +HF_RENAME hf_samr_samr_OpenAlias_alias_handle hf_samr_alias_handle +HF_RENAME hf_samr_samr_QueryAliasInfo_alias_handle hf_samr_alias_handle +HF_RENAME hf_samr_samr_SetAliasInfo_alias_handle hf_samr_alias_handle +HF_RENAME hf_samr_samr_DeleteDomAlias_alias_handle hf_samr_alias_handle +HF_RENAME hf_samr_samr_AddAliasMember_alias_handle hf_samr_alias_handle +HF_RENAME hf_samr_samr_DeleteAliasMember_alias_handle hf_samr_alias_handle +HF_RENAME hf_samr_samr_GetMembersInAlias_alias_handle hf_samr_alias_handle +HF_RENAME hf_samr_samr_AddMultipleMembersToAlias_alias_handle hf_samr_alias_handle +HF_RENAME hf_samr_samr_RemoveMultipleMembersFromAlias_alias_handle hf_samr_alias_handle + + + +# +# make all rids use the same hf field +# +HF_FIELD hf_samr_rid "RID" "samr.rid" FT_UINT32 BASE_DEC NULL 0 "" "" "" +HF_RENAME hf_samr_samr_CreateDomainGroup_rid hf_samr_rid +HF_RENAME hf_samr_samr_CreateUser_rid hf_samr_rid +HF_RENAME hf_samr_samr_CreateDomAlias_rid hf_samr_rid +HF_RENAME hf_samr_samr_Ids_ids hf_samr_rid +HF_RENAME hf_samr_samr_LookupRids_rids hf_samr_rid +HF_RENAME hf_samr_samr_OpenGroup_rid hf_samr_rid +HF_RENAME hf_samr_samr_AddGroupMember_rid hf_samr_rid +HF_RENAME hf_samr_samr_DeleteGroupMember_rid hf_samr_rid +HF_RENAME hf_samr_samr_RidTypeArray_rids hf_samr_rid +HF_RENAME hf_samr_samr_OpenAlias_rid hf_samr_rid +HF_RENAME hf_samr_samr_OpenUser_rid hf_samr_rid +HF_RENAME hf_samr_samr_UserInfo3_rid hf_samr_rid +HF_RENAME hf_samr_samr_UserInfo5_rid hf_samr_rid +HF_RENAME hf_samr_samr_UserInfo21_rid hf_samr_rid +HF_RENAME hf_samr_samr_RidWithAttribute_rid hf_samr_rid +HF_RENAME hf_samr_samr_DispEntryGeneral_rid hf_samr_rid +HF_RENAME hf_samr_samr_DispEntryFull_rid hf_samr_rid +HF_RENAME hf_samr_samr_DispEntryFullGroup_rid hf_samr_rid +HF_RENAME hf_samr_samr_CreateUser2_rid hf_samr_rid +HF_RENAME hf_samr_samr_RidToSid_rid hf_samr_rid + + + +# +# Prettification the summary line and the dissection tree +# +PARAM_VALUE samr_dissect_element_SamArray_entries__ 3|PIDL_SET_COL_INFO +PARAM_VALUE samr_dissect_element_LookupDomain_domain_name_ 3|PIDL_SET_COL_INFO +PARAM_VALUE samr_dissect_element_GetDomPwInfo_domain_name_ 3|PIDL_SET_COL_INFO +PARAM_VALUE samr_dissect_element_CreateUser_account_name_ 3|PIDL_SET_COL_INFO|PIDL_STR_SAVE +PARAM_VALUE samr_dissect_element_CreateUser2_account_name_ 3|PIDL_SET_COL_INFO|PIDL_STR_SAVE + +TYPE lsa_String "offset=dissect_ndr_lsa_String(tvb, offset, pinfo, tree, di, drep, @PARAM@, @HF@);" FT_STRING BASE_NONE 0 NULL 5 +TYPE lsa_AsciiString "offset=cnf_dissect_lsa_AsciiString(tvb, offset, pinfo, tree, di, drep, @PARAM@, @HF@);" FT_STRING BASE_NONE 0 NULL 5 +TYPE lsa_StringLarge "offset=dissect_ndr_lsa_String(tvb, offset, pinfo, tree, di, drep, @PARAM@, @HF@);" FT_STRING BASE_NONE 0 NULL 5 +TYPE lsa_AsciiStringLarge "offset=cnf_dissect_lsa_AsciiString(tvb, offset, pinfo, tree, di, drep, @PARAM@, @HF@);" FT_STRING BASE_NONE 0 NULL 5 +TYPE hyper "offset=cnf_dissect_hyper(tvb, offset, pinfo, tree, di, drep, @PARAM@, @HF@);" FT_UINT64 BASE_DEC 0 NULL 8 + + +TYPE sec_desc_buf "offset=cnf_dissect_sec_desc_buf(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL 4 +HF_FIELD hf_samr_sec_desc_buf_len "Sec Desc Buf Len" "samr.sec_desc_buf_len" FT_UINT32 BASE_DEC NULL 0 "" "" "" + +TYPE dom_sid2 "offset=cnf_dissect_dom_sid2(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL 4 + +TYPE lsa_SidArray "offset=cnf_dissect_lsa_SidArray(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL 4 + +TYPE security_secinfo "offset=cnf_dissect_samr_security_secinfo(tvb, offset, pinfo, tree, drep);" FT_NONE BASE_NONE 0 NULL 4 + +# +# ConnectX access masks +# +MANUAL samr_dissect_bitmap_ConnectAccessMask +HF_FIELD hf_samr_connect_access_mask "Access Mask" "samr.connect.access_mask" FT_UINT32 BASE_HEX NULL 0 "" "" "" +HF_RENAME hf_samr_samr_Connect_access_mask hf_samr_connect_access_mask +HF_RENAME hf_samr_samr_Connect2_access_mask hf_samr_connect_access_mask +HF_RENAME hf_samr_samr_Connect3_access_mask hf_samr_connect_access_mask +HF_RENAME hf_samr_samr_Connect4_access_mask hf_samr_connect_access_mask +HF_RENAME hf_samr_samr_Connect5_access_mask hf_samr_connect_access_mask +# +# User access masks +# +MANUAL samr_dissect_bitmap_UserAccessMask +HF_FIELD hf_samr_user_access_mask "Access Mask" "samr.user.access_mask" FT_UINT32 BASE_HEX NULL 0 "" "" "" +HF_RENAME hf_samr_samr_CreateUser_access_mask hf_samr_user_access_mask +HF_RENAME hf_samr_samr_OpenUser_access_mask hf_samr_user_access_mask +HF_RENAME hf_samr_samr_CreateUser2_access_mask hf_samr_user_access_mask +# +# Domain access masks +# +MANUAL samr_dissect_bitmap_DomainAccessMask +HF_FIELD hf_samr_domain_access_mask "Access Mask" "samr.domain.access_mask" FT_UINT32 BASE_HEX NULL 0 "" "" "" +HF_RENAME hf_samr_samr_OpenDomain_access_mask hf_samr_domain_access_mask +# +# Group access masks +# +MANUAL samr_dissect_bitmap_GroupAccessMask +HF_FIELD hf_samr_group_access_mask "Access Mask" "samr.group.access_mask" FT_UINT32 BASE_HEX NULL 0 "" "" "" +HF_RENAME hf_samr_samr_CreateDomainGroup_access_mask hf_samr_group_access_mask +HF_RENAME hf_samr_samr_OpenGroup_access_mask hf_samr_group_access_mask +# +# Alias access masks +# +MANUAL samr_dissect_bitmap_AliasAccessMask +HF_FIELD hf_samr_alias_access_mask "Access Mask" "samr.alias.access_mask" FT_UINT32 BASE_HEX NULL 0 "" "" "" +HF_RENAME hf_samr_samr_CreateDomAlias_access_mask hf_samr_alias_access_mask +HF_RENAME hf_samr_samr_OpenAlias_access_mask hf_samr_alias_access_mask + + +CODE START + +static void +samr_connect_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 access) +{ + static int* const access_flags[] = { + &hf_samr_samr_ConnectAccessMask_SAMR_ACCESS_LOOKUP_DOMAIN, + &hf_samr_samr_ConnectAccessMask_SAMR_ACCESS_ENUM_DOMAINS, + &hf_samr_samr_ConnectAccessMask_SAMR_ACCESS_CREATE_DOMAIN, + &hf_samr_samr_ConnectAccessMask_SAMR_ACCESS_INITIALIZE_SERVER, + &hf_samr_samr_ConnectAccessMask_SAMR_ACCESS_SHUTDOWN_SERVER, + &hf_samr_samr_ConnectAccessMask_SAMR_ACCESS_CONNECT_TO_SERVER, + NULL + }; + + proto_tree_add_bitmask_list_value(tree, tvb, offset, 4, access_flags, access); +} + +struct access_mask_info samr_connect_access_mask_info = { + "SAMR Connect", /* Name of specific rights */ + samr_connect_specific_rights, /* Dissection function */ + NULL, /* Generic mapping table */ + NULL /* Standard mapping table */ +}; + +int +samr_dissect_bitmap_ConnectAccessMask(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, int hf_index _U_, guint32 param _U_) +{ + offset = dissect_nt_access_mask( + tvb, offset, pinfo, tree, di, drep, hf_samr_connect_access_mask, + &samr_connect_access_mask_info, NULL); + return offset; +} + + +static void +samr_alias_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 access) +{ + static int* const access_flags[] = { + &hf_samr_samr_AliasAccessMask_SAMR_ALIAS_ACCESS_ADD_MEMBER, + &hf_samr_samr_AliasAccessMask_SAMR_ALIAS_ACCESS_REMOVE_MEMBER, + &hf_samr_samr_AliasAccessMask_SAMR_ALIAS_ACCESS_GET_MEMBERS, + &hf_samr_samr_AliasAccessMask_SAMR_ALIAS_ACCESS_LOOKUP_INFO, + &hf_samr_samr_AliasAccessMask_SAMR_ALIAS_ACCESS_SET_INFO, + NULL + }; + + proto_tree_add_bitmask_list_value(tree, tvb, offset, 4, access_flags, access); +} + +struct access_mask_info samr_alias_access_mask_info = { + "SAMR Alias", /* Name of specific rights */ + samr_alias_specific_rights, /* Dissection function */ + NULL, /* Generic mapping table */ + NULL /* Standard mapping table */ +}; + +int +samr_dissect_bitmap_AliasAccessMask(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, int hf_index _U_, guint32 param _U_) +{ + offset = dissect_nt_access_mask( + tvb, offset, pinfo, tree, di, drep, hf_samr_alias_access_mask, + &samr_alias_access_mask_info, NULL); + return offset; +} + + +static void +samr_group_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 access) +{ + static int* const access_flags[] = { + &hf_samr_samr_GroupAccessMask_SAMR_GROUP_ACCESS_GET_MEMBERS, + &hf_samr_samr_GroupAccessMask_SAMR_GROUP_ACCESS_REMOVE_MEMBER, + &hf_samr_samr_GroupAccessMask_SAMR_GROUP_ACCESS_ADD_MEMBER, + &hf_samr_samr_GroupAccessMask_SAMR_GROUP_ACCESS_SET_INFO, + &hf_samr_samr_GroupAccessMask_SAMR_GROUP_ACCESS_LOOKUP_INFO, + NULL + }; + + proto_tree_add_bitmask_list_value(tree, tvb, offset, 4, access_flags, access); +} + +struct access_mask_info samr_group_access_mask_info = { + "SAMR Group", /* Name of specific rights */ + samr_group_specific_rights, /* Dissection function */ + NULL, /* Generic mapping table */ + NULL /* Standard mapping table */ +}; + +int +samr_dissect_bitmap_GroupAccessMask(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, int hf_index _U_, guint32 param _U_) +{ + offset = dissect_nt_access_mask( + tvb, offset, pinfo, tree, di, drep, hf_samr_group_access_mask, + &samr_group_access_mask_info, NULL); + return offset; +} + + +static void +samr_domain_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 access) +{ + static int* const access_flags[] = { + &hf_samr_samr_DomainAccessMask_SAMR_DOMAIN_ACCESS_LOOKUP_INFO_1, + &hf_samr_samr_DomainAccessMask_SAMR_DOMAIN_ACCESS_SET_INFO_1, + &hf_samr_samr_DomainAccessMask_SAMR_DOMAIN_ACCESS_LOOKUP_INFO_2, + &hf_samr_samr_DomainAccessMask_SAMR_DOMAIN_ACCESS_SET_INFO_2, + &hf_samr_samr_DomainAccessMask_SAMR_DOMAIN_ACCESS_CREATE_USER, + &hf_samr_samr_DomainAccessMask_SAMR_DOMAIN_ACCESS_CREATE_GROUP, + &hf_samr_samr_DomainAccessMask_SAMR_DOMAIN_ACCESS_CREATE_ALIAS, + &hf_samr_samr_DomainAccessMask_SAMR_DOMAIN_ACCESS_LOOKUP_ALIAS, + &hf_samr_samr_DomainAccessMask_SAMR_DOMAIN_ACCESS_ENUM_ACCOUNTS, + &hf_samr_samr_DomainAccessMask_SAMR_DOMAIN_ACCESS_OPEN_ACCOUNT, + &hf_samr_samr_DomainAccessMask_SAMR_DOMAIN_ACCESS_SET_INFO_3, + NULL + }; + + proto_tree_add_bitmask_list_value(tree, tvb, offset, 4, access_flags, access); +} + +struct access_mask_info samr_domain_access_mask_info = { + "SAMR Domain", /* Name of specific rights */ + samr_domain_specific_rights, /* Dissection function */ + NULL, /* Generic mapping table */ + NULL /* Standard mapping table */ +}; + +int +samr_dissect_bitmap_DomainAccessMask(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, int hf_index _U_, guint32 param _U_) +{ + offset = dissect_nt_access_mask( + tvb, offset, pinfo, tree, di, drep, hf_samr_domain_access_mask, + &samr_domain_access_mask_info, NULL); + return offset; +} + + +static void +samr_user_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 access) +{ + static int* const access_flags[] = { + &hf_samr_samr_UserAccessMask_SAMR_USER_ACCESS_CHANGE_GROUP_MEMBERSHIP, + &hf_samr_samr_UserAccessMask_SAMR_USER_ACCESS_GET_GROUP_MEMBERSHIP, + &hf_samr_samr_UserAccessMask_SAMR_USER_ACCESS_GET_GROUPS, + &hf_samr_samr_UserAccessMask_SAMR_USER_ACCESS_SET_PASSWORD, + &hf_samr_samr_UserAccessMask_SAMR_USER_ACCESS_CHANGE_PASSWORD, + &hf_samr_samr_UserAccessMask_SAMR_USER_ACCESS_SET_ATTRIBUTES, + &hf_samr_samr_UserAccessMask_SAMR_USER_ACCESS_GET_ATTRIBUTES, + &hf_samr_samr_UserAccessMask_SAMR_USER_ACCESS_GET_LOGONINFO, + &hf_samr_samr_UserAccessMask_SAMR_USER_ACCESS_SET_LOC_COM, + &hf_samr_samr_UserAccessMask_SAMR_USER_ACCESS_GET_LOCALE, + &hf_samr_samr_UserAccessMask_SAMR_USER_ACCESS_GET_NAME_ETC, + NULL + }; + + proto_tree_add_bitmask_list_value(tree, tvb, offset, 4, access_flags, access); +} + +struct access_mask_info samr_user_access_mask_info = { + "SAMR User", /* Name of specific rights */ + samr_user_specific_rights, /* Dissection function */ + NULL, /* Generic mapping table */ + NULL /* Standard mapping table */ +}; + +int +samr_dissect_bitmap_UserAccessMask(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, int hf_index _U_, guint32 param _U_) +{ + offset = dissect_nt_access_mask( + tvb, offset, pinfo, tree, di, drep, hf_samr_user_access_mask, + &samr_user_access_mask_info, NULL); + return offset; +} + + +static int +cnf_dissect_lsa_AsciiString(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, guint32 param _U_, int hfindex) +{ + offset = dissect_ndr_counted_ascii_string(tvb, offset, pinfo, tree, di, drep, + hfindex, 0); + + return offset; +} + +static int +cnf_dissect_hyper(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, guint32 param _U_, int hfindex) +{ + offset = dissect_ndr_uint64(tvb, offset, pinfo, tree, di, drep, hfindex, NULL); + + return offset; +} + + + + +static int +cnf_dissect_sec_desc_buf_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + guint64 len; + e_ctx_hnd *polhnd = NULL; + dcerpc_call_value *dcv = NULL; + guint32 type=0; + struct access_mask_info *ami=NULL; + + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + offset = dissect_ndr_uint3264 (tvb, offset, pinfo, tree, di, drep, + hf_samr_sec_desc_buf_len, &len); + + dcv = (dcerpc_call_value *)di->call_data; + if(dcv){ + polhnd = dcv->pol; + } + if(polhnd){ + dcerpc_fetch_polhnd_data(polhnd, NULL, &type, NULL, NULL, + pinfo->num); + } + switch(type){ + case PIDL_POLHND_TYPE_SAMR_USER: + ami=&samr_user_access_mask_info; + break; + case PIDL_POLHND_TYPE_SAMR_CONNECT: + ami=&samr_connect_access_mask_info; + break; + case PIDL_POLHND_TYPE_SAMR_DOMAIN: + ami=&samr_domain_access_mask_info; + break; + case PIDL_POLHND_TYPE_SAMR_GROUP: + ami=&samr_group_access_mask_info; + break; + case PIDL_POLHND_TYPE_SAMR_ALIAS: + ami=&samr_alias_access_mask_info; + break; + } + + dissect_nt_sec_desc(tvb, offset, pinfo, tree, drep, TRUE, (int)len, ami); + + offset += (int)len; + + return offset; +} + +static int +cnf_dissect_sec_desc_buf(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + guint64 len; + + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + offset = dissect_ndr_uint3264 (tvb, offset, pinfo, tree, di, drep, + hf_samr_sec_desc_buf_len, &len); + + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, + cnf_dissect_sec_desc_buf_, NDR_POINTER_UNIQUE, + "SAM SECURITY DESCRIPTOR data:", -1); + + return offset; +} + + + +static int +cnf_dissect_dom_sid2(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + offset = dissect_ndr_nt_SID(tvb, offset, pinfo, tree, di, drep); + + return offset; +} + +static int +cnf_dissect_lsa_SidArray(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + offset = dissect_ndr_nt_PSID_ARRAY(tvb, offset, pinfo, tree, di, drep); + + return offset; +} + + +static int +cnf_dissect_samr_security_secinfo(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, guint8 *drep _U_) +{ + offset = dissect_nt_security_information(tvb, offset, tree); + + return offset; +} + +CODE END diff --git a/epan/dissectors/pidl/samr/samr.idl b/epan/dissectors/pidl/samr/samr.idl new file mode 100644 index 00000000..18e3d601 --- /dev/null +++ b/epan/dissectors/pidl/samr/samr.idl @@ -0,0 +1,1542 @@ +#include "idl_types.h" + +/* + samr interface definition +*/ +/* import "misc.idl", "lsa.idl", "security.idl";*/ + +/* + Thanks to Todd Sabin for some information from his samr.idl in acltools +*/ + +[ uuid("12345778-1234-abcd-ef00-0123456789ac"), + version(1.0), + endpoint("ncacn_np:[\\pipe\\samr]","ncacn_ip_tcp:", "ncalrpc:"), + pointer_default(unique) +] interface samr +{ + + typedef [public] struct { + uint32 count; + [size_is(count)] lsa_String *names; + } lsa_Strings; + + + typedef [v1_enum] enum { + SID_NAME_USE_NONE = 0,/* NOTUSED */ + SID_NAME_USER = 1, /* user */ + SID_NAME_DOM_GRP = 2, /* domain group */ + SID_NAME_DOMAIN = 3, /* domain: don't know what this is */ + SID_NAME_ALIAS = 4, /* local group */ + SID_NAME_WKN_GRP = 5, /* well-known group */ + SID_NAME_DELETED = 6, /* deleted account: needed for c2 rating */ + SID_NAME_INVALID = 7, /* invalid account */ + SID_NAME_UNKNOWN = 8, /* oops. */ + SID_NAME_COMPUTER = 9 /* machine */ + } lsa_SidType; + + typedef [public,v1_enum] enum { + SAMR_REJECT_OTHER = 0, + SAMR_REJECT_TOO_SHORT = 1, + SAMR_REJECT_IN_HISTORY = 2, + SAMR_REJECT_COMPLEXITY = 5 + } samr_RejectReason; + + + + /* account control (acct_flags) bits */ + typedef [public,bitmap32bit] bitmap { + ACB_DISABLED = 0x00000001, /* 1 = User account disabled */ + ACB_HOMDIRREQ = 0x00000002, /* 1 = Home directory required */ + ACB_PWNOTREQ = 0x00000004, /* 1 = User password not required */ + ACB_TEMPDUP = 0x00000008, /* 1 = Temporary duplicate account */ + ACB_NORMAL = 0x00000010, /* 1 = Normal user account */ + ACB_MNS = 0x00000020, /* 1 = MNS logon user account */ + ACB_DOMTRUST = 0x00000040, /* 1 = Interdomain trust account */ + ACB_WSTRUST = 0x00000080, /* 1 = Workstation trust account */ + ACB_SVRTRUST = 0x00000100, /* 1 = Server trust account */ + ACB_PWNOEXP = 0x00000200, /* 1 = User password does not expire */ + ACB_AUTOLOCK = 0x00000400, /* 1 = Account auto locked */ + ACB_ENC_TXT_PWD_ALLOWED = 0x00000800, /* 1 = Encryped text password is allowed */ + ACB_SMARTCARD_REQUIRED = 0x00001000, /* 1 = Smart Card required */ + ACB_TRUSTED_FOR_DELEGATION = 0x00002000, /* 1 = Trusted for Delegation */ + ACB_NOT_DELEGATED = 0x00004000, /* 1 = Not delegated */ + ACB_USE_DES_KEY_ONLY = 0x00008000, /* 1 = Use DES key only */ + ACB_DONT_REQUIRE_PREAUTH = 0x00010000, /* 1 = Preauth not required */ + ACB_PW_EXPIRED = 0x00020000, /* 1 = Password Expired */ + ACB_TRUST_AUTH_DELEGAT = 0x00040000, /* 1 = Trusted to authenticate for delegation */ + ACB_NO_AUTH_DATA_REQD = 0x00080000 /* 1 = No authorization data required */ + } samr_AcctFlags; + + /* SAM server specific access rights */ + + typedef [bitmap32bit] bitmap { + SAMR_ACCESS_CONNECT_TO_SERVER = 0x00000001, + SAMR_ACCESS_SHUTDOWN_SERVER = 0x00000002, + SAMR_ACCESS_INITIALIZE_SERVER = 0x00000004, + SAMR_ACCESS_CREATE_DOMAIN = 0x00000008, + SAMR_ACCESS_ENUM_DOMAINS = 0x00000010, + SAMR_ACCESS_LOOKUP_DOMAIN = 0x00000020 + } samr_ConnectAccessMask; + + const int SAMR_ACCESS_ALL_ACCESS = 0x0000003F; + + const int GENERIC_RIGHTS_SAM_ALL_ACCESS = + (STANDARD_RIGHTS_REQUIRED_ACCESS | + SAMR_ACCESS_ALL_ACCESS); + + const int GENERIC_RIGHTS_SAM_READ = + (STANDARD_RIGHTS_READ_ACCESS | + SAMR_ACCESS_ENUM_DOMAINS); + + const int GENERIC_RIGHTS_SAM_WRITE = + (STANDARD_RIGHTS_WRITE_ACCESS | + SAMR_ACCESS_CREATE_DOMAIN | + SAMR_ACCESS_INITIALIZE_SERVER | + SAMR_ACCESS_SHUTDOWN_SERVER); + + const int GENERIC_RIGHTS_SAM_EXECUTE = + (STANDARD_RIGHTS_EXECUTE_ACCESS | + SAMR_ACCESS_LOOKUP_DOMAIN | + SAMR_ACCESS_CONNECT_TO_SERVER); + + /* User Object specific access rights */ + + typedef [bitmap32bit] bitmap { + SAMR_USER_ACCESS_GET_NAME_ETC = 0x00000001, + SAMR_USER_ACCESS_GET_LOCALE = 0x00000002, + SAMR_USER_ACCESS_SET_LOC_COM = 0x00000004, + SAMR_USER_ACCESS_GET_LOGONINFO = 0x00000008, + SAMR_USER_ACCESS_GET_ATTRIBUTES = 0x00000010, + SAMR_USER_ACCESS_SET_ATTRIBUTES = 0x00000020, + SAMR_USER_ACCESS_CHANGE_PASSWORD = 0x00000040, + SAMR_USER_ACCESS_SET_PASSWORD = 0x00000080, + SAMR_USER_ACCESS_GET_GROUPS = 0x00000100, + SAMR_USER_ACCESS_GET_GROUP_MEMBERSHIP = 0x00000200, + SAMR_USER_ACCESS_CHANGE_GROUP_MEMBERSHIP = 0x00000400 + } samr_UserAccessMask; + + typedef [bitmap32bit] bitmap { + SAMR_DOMAIN_ACCESS_LOOKUP_INFO_1 = 0x00000001, + SAMR_DOMAIN_ACCESS_SET_INFO_1 = 0x00000002, + SAMR_DOMAIN_ACCESS_LOOKUP_INFO_2 = 0x00000004, + SAMR_DOMAIN_ACCESS_SET_INFO_2 = 0x00000008, + SAMR_DOMAIN_ACCESS_CREATE_USER = 0x00000010, + SAMR_DOMAIN_ACCESS_CREATE_GROUP = 0x00000020, + SAMR_DOMAIN_ACCESS_CREATE_ALIAS = 0x00000040, + SAMR_DOMAIN_ACCESS_LOOKUP_ALIAS = 0x00000080, + SAMR_DOMAIN_ACCESS_ENUM_ACCOUNTS = 0x00000100, + SAMR_DOMAIN_ACCESS_OPEN_ACCOUNT = 0x00000200, + SAMR_DOMAIN_ACCESS_SET_INFO_3 = 0x00000400 + } samr_DomainAccessMask; + + typedef [bitmap32bit] bitmap { + SAMR_GROUP_ACCESS_LOOKUP_INFO = 0x00000001, + SAMR_GROUP_ACCESS_SET_INFO = 0x00000002, + SAMR_GROUP_ACCESS_ADD_MEMBER = 0x00000004, + SAMR_GROUP_ACCESS_REMOVE_MEMBER = 0x00000008, + SAMR_GROUP_ACCESS_GET_MEMBERS = 0x00000010 + } samr_GroupAccessMask; + /* these bits are invalid and return ACCESS_DENIED */ + const int SAMR_GROUP_ACCESS_MASK_INVALID = 0x0000ffe0; + /* generic access */ + const int SAMR_GROUP_ACCESS_ALL_ACCESS = 0x000f001f; + const int SAMR_GROUP_ACCESS_ALL_READ = 0x00020010; + const int SAMR_GROUP_ACCESS_ALL_WRITE = 0x0002000e; + const int SAMR_GROUP_ACCESS_ALL_EXECUTE = 0x00020001; + + typedef [bitmap32bit] bitmap { + SAMR_ALIAS_ACCESS_ADD_MEMBER = 0x00000001, + SAMR_ALIAS_ACCESS_REMOVE_MEMBER = 0x00000002, + SAMR_ALIAS_ACCESS_GET_MEMBERS = 0x00000004, + SAMR_ALIAS_ACCESS_LOOKUP_INFO = 0x00000008, + SAMR_ALIAS_ACCESS_SET_INFO = 0x00000010 + } samr_AliasAccessMask; + + /******************/ + /* Function: 0x00 */ + NTSTATUS samr_Connect ( + /* notice the lack of [string] */ + [in,unique] uint16 *system_name, + [in] samr_ConnectAccessMask access_mask, + [out,ref] policy_handle *connect_handle + ); + + + /******************/ + /* Function: 0x01 */ + [public] NTSTATUS samr_Close ( + [in,out,ref] policy_handle *handle + ); + + /******************/ + /* Function: 0x02 */ + + NTSTATUS samr_SetSecurity ( + [in,ref] policy_handle *handle, + [in] security_secinfo sec_info, + [in,ref] sec_desc_buf *sdbuf + ); + + /******************/ + /* Function: 0x03 */ + + NTSTATUS samr_QuerySecurity ( + [in,ref] policy_handle *handle, + [in] security_secinfo sec_info, + [out,ref] sec_desc_buf **sdbuf + ); + + /******************/ + /* Function: 0x04 */ + + /* + shutdown the SAM - once you call this the SAM will be dead + */ + NTSTATUS samr_Shutdown ( + [in,ref] policy_handle *connect_handle + ); + + /******************/ + /* Function: 0x05 */ + NTSTATUS samr_LookupDomain ( + [in,ref] policy_handle *connect_handle, + [in,ref] lsa_String *domain_name, + [out,ref] dom_sid2 **sid + ); + + + /******************/ + /* Function: 0x06 */ + + typedef struct { + uint32 idx; + lsa_String name; + } samr_SamEntry; + + typedef struct { + uint32 count; + [size_is(count)] samr_SamEntry *entries; + } samr_SamArray; + + NTSTATUS samr_EnumDomains ( + [in,ref] policy_handle *connect_handle, + [in,out,ref] uint32 *resume_handle, + [out,ref] samr_SamArray **sam, + [in] uint32 buf_size, + [out,ref] uint32 *num_entries + ); + + + /************************/ + /* Function 0x07 */ + [public] NTSTATUS samr_OpenDomain( + [in,ref] policy_handle *connect_handle, + [in] samr_DomainAccessMask access_mask, + [in,ref] dom_sid2 *sid, + [out,ref] policy_handle *domain_handle + ); + + /************************/ + /* Function 0x08 */ + + typedef enum { + DomainPasswordInformation = 1, + DomainGeneralInformation = 2, + DomainLogoffInformation = 3, + DomainOemInformation = 4, + DomainNameInformation = 5, + DomainReplicationInformation = 6, + DomainServerRoleInformation = 7, + DomainModifiedInformation = 8, + DomainStateInformation = 9, + DomainUasInformation = 10, + DomainGeneralInformation2 = 11, + DomainLockoutInformation = 12, + DomainModifiedInformation2 = 13 + } samr_DomainInfoClass; + + /* server roles */ + typedef [v1_enum] enum { + SAMR_ROLE_STANDALONE = 0, + SAMR_ROLE_DOMAIN_MEMBER = 1, + SAMR_ROLE_DOMAIN_BDC = 2, + SAMR_ROLE_DOMAIN_PDC = 3 + } samr_Role; + + /* password properties flags */ + typedef [public,bitmap32bit] bitmap { + DOMAIN_PASSWORD_COMPLEX = 0x00000001, + DOMAIN_PASSWORD_NO_ANON_CHANGE = 0x00000002, + DOMAIN_PASSWORD_NO_CLEAR_CHANGE = 0x00000004, + DOMAIN_PASSWORD_LOCKOUT_ADMINS = 0x00000008, + DOMAIN_PASSWORD_STORE_CLEARTEXT = 0x00000010, + DOMAIN_REFUSE_PASSWORD_CHANGE = 0x00000020 + } samr_PasswordProperties; + + typedef [v1_enum] enum { + DOMAIN_SERVER_ENABLED = 1, + DOMAIN_SERVER_DISABLED = 2 + } samr_DomainServerState; + + typedef struct { + uint16 min_password_length; + uint16 password_history_length; + samr_PasswordProperties password_properties; + /* yes, these are signed. They are in negative 100ns */ + dlong max_password_age; + dlong min_password_age; + } samr_DomInfo1; + + typedef struct { + NTTIME force_logoff_time; + lsa_String oem_information; /* comment */ + lsa_String domain_name; + lsa_String primary; /* PDC name if this is a BDC */ + udlong sequence_num; + samr_DomainServerState domain_server_state; + samr_Role role; + uint32 unknown3; + uint32 num_users; + uint32 num_groups; + uint32 num_aliases; + } samr_DomGeneralInformation; + + typedef struct { + NTTIME force_logoff_time; + } samr_DomInfo3; + + typedef struct { + lsa_String oem_information; /* comment */ + } samr_DomOEMInformation; + + typedef struct { + lsa_String domain_name; + } samr_DomInfo5; + + typedef struct { + lsa_String primary; + } samr_DomInfo6; + + typedef struct { + samr_Role role; + } samr_DomInfo7; + + typedef struct { + hyper sequence_num; + NTTIME domain_create_time; + } samr_DomInfo8; + + typedef struct { + samr_DomainServerState domain_server_state; + } samr_DomInfo9; + + typedef struct { + samr_DomGeneralInformation general; + hyper lockout_duration; + hyper lockout_window; + uint16 lockout_threshold; + } samr_DomGeneralInformation2; + + typedef struct { + hyper lockout_duration; + hyper lockout_window; + uint16 lockout_threshold; + } samr_DomInfo12; + + typedef struct { + hyper sequence_num; + NTTIME domain_create_time; + hyper modified_count_at_last_promotion; + } samr_DomInfo13; + + typedef [switch_type(uint16)] union { + [case(1)] samr_DomInfo1 info1; + [case(2)] samr_DomGeneralInformation general; + [case(3)] samr_DomInfo3 info3; + [case(4)] samr_DomOEMInformation oem; + [case(5)] samr_DomInfo5 info5; + [case(6)] samr_DomInfo6 info6; + [case(7)] samr_DomInfo7 info7; + [case(8)] samr_DomInfo8 info8; + [case(9)] samr_DomInfo9 info9; + [case(11)] samr_DomGeneralInformation2 general2; + [case(12)] samr_DomInfo12 info12; + [case(13)] samr_DomInfo13 info13; + } samr_DomainInfo; + + NTSTATUS samr_QueryDomainInfo( + [in,ref] policy_handle *domain_handle, + [in] samr_DomainInfoClass level, + [out,ref,switch_is(level)] samr_DomainInfo **info + ); + + /************************/ + /* Function 0x09 */ + /* + only levels 1, 3, 4, 6, 7, 9, 12 are valid for this + call in w2k3 + */ + NTSTATUS samr_SetDomainInfo( + [in,ref] policy_handle *domain_handle, + [in] samr_DomainInfoClass level, + [in,switch_is(level),ref] samr_DomainInfo *info + ); + + + /************************/ + /* Function 0x0a */ + NTSTATUS samr_CreateDomainGroup( + [in,ref] policy_handle *domain_handle, + [in,ref] lsa_String *name, + [in] samr_GroupAccessMask access_mask, + [out,ref] policy_handle *group_handle, + [out,ref] uint32 *rid + ); + + + /************************/ + /* Function 0x0b */ + NTSTATUS samr_EnumDomainGroups( + [in] policy_handle *domain_handle, + [in,out,ref] uint32 *resume_handle, + [out,ref] samr_SamArray **sam, + [in] uint32 max_size, + [out,ref] uint32 *num_entries + ); + + /************************/ + /* Function 0x0c */ + NTSTATUS samr_CreateUser( + [in,ref] policy_handle *domain_handle, + [in,ref] lsa_String *account_name, + [in] samr_UserAccessMask access_mask, + [out,ref] policy_handle *user_handle, + [out,ref] uint32 *rid + ); + + /************************/ + /* Function 0x0d */ + + + /* w2k3 treats max_size as max_users*54 and sets the + resume_handle as the rid of the last user sent + */ + const int SAMR_ENUM_USERS_MULTIPLIER = 54; + + NTSTATUS samr_EnumDomainUsers( + [in] policy_handle *domain_handle, + [in,out,ref] uint32 *resume_handle, + [in] samr_AcctFlags acct_flags, + [out,ref] samr_SamArray **sam, + [in] uint32 max_size, + [out,ref] uint32 *num_entries + ); + + /************************/ + /* Function 0x0e */ + NTSTATUS samr_CreateDomAlias( + [in,ref] policy_handle *domain_handle, + [in,ref] lsa_String *alias_name, + [in] samr_AliasAccessMask access_mask, + [out,ref] policy_handle *alias_handle, + [out,ref] uint32 *rid + ); + + /************************/ + /* Function 0x0f */ + NTSTATUS samr_EnumDomainAliases( + [in] policy_handle *domain_handle, + [in,out,ref] uint32 *resume_handle, + [out,ref] samr_SamArray **sam, + [in] uint32 max_size, + [out,ref] uint32 *num_entries + ); + + /************************/ + /* Function 0x10 */ + + typedef struct { + [range(0,1024)] uint32 count; + [size_is(count)] uint32 *ids; + } samr_Ids; + + NTSTATUS samr_GetAliasMembership( + [in,ref] policy_handle *domain_handle, + [in,ref] lsa_SidArray *sids, + [out,ref] samr_Ids *rids + ); + + /************************/ + /* Function 0x11 */ + + [public] NTSTATUS samr_LookupNames( + [in,ref] policy_handle *domain_handle, + [in,range(0,1000)] uint32 num_names, + [in,size_is(1000),length_is(num_names),ref] lsa_String *names, + [out,ref] samr_Ids *rids, + [out,ref] samr_Ids *types + ); + + + /************************/ + /* Function 0x12 */ + NTSTATUS samr_LookupRids( + [in,ref] policy_handle *domain_handle, + [in,range(0,1000)] uint32 num_rids, + [in,size_is(1000),length_is(num_rids)] uint32 *rids, + [out,ref] lsa_Strings *names, + [out,ref] samr_Ids *types + ); + + /************************/ + /* Function 0x13 */ + NTSTATUS samr_OpenGroup( + [in,ref] policy_handle *domain_handle, + [in] samr_GroupAccessMask access_mask, + [in] uint32 rid, + [out,ref] policy_handle *group_handle + ); + + /* Group attributes */ + typedef [public,bitmap32bit] bitmap { + SE_GROUP_MANDATORY = 0x00000001, + SE_GROUP_ENABLED_BY_DEFAULT = 0x00000002, + SE_GROUP_ENABLED = 0x00000004, + SE_GROUP_OWNER = 0x00000008, + SE_GROUP_USE_FOR_DENY_ONLY = 0x00000010, + SE_GROUP_RESOURCE = 0x20000000, + SE_GROUP_LOGON_ID = 0xC0000000 + } samr_GroupAttrs; + + /************************/ + /* Function 0x14 */ + + typedef struct { + lsa_String name; + samr_GroupAttrs attributes; + uint32 num_members; + lsa_String description; + } samr_GroupInfoAll; + + typedef struct { + samr_GroupAttrs attributes; + } samr_GroupInfoAttributes; + + typedef struct { + lsa_String description; + } samr_GroupInfoDescription; + + typedef enum { + GROUPINFOALL = 1, + GROUPINFONAME = 2, + GROUPINFOATTRIBUTES = 3, + GROUPINFODESCRIPTION = 4, + GROUPINFOALL2 = 5 + } samr_GroupInfoEnum; + + typedef [switch_type(samr_GroupInfoEnum)] union { + [case(GROUPINFOALL)] samr_GroupInfoAll all; + [case(GROUPINFONAME)] lsa_String name; + [case(GROUPINFOATTRIBUTES)] samr_GroupInfoAttributes attributes; + [case(GROUPINFODESCRIPTION)] lsa_String description; + [case(GROUPINFOALL2)] samr_GroupInfoAll all2; + } samr_GroupInfo; + + NTSTATUS samr_QueryGroupInfo( + [in,ref] policy_handle *group_handle, + [in] samr_GroupInfoEnum level, + [out,ref,switch_is(level)] samr_GroupInfo **info + ); + + /************************/ + /* Function 0x15 */ + NTSTATUS samr_SetGroupInfo( + [in,ref] policy_handle *group_handle, + [in] samr_GroupInfoEnum level, + [in,switch_is(level),ref] samr_GroupInfo *info + ); + + /************************/ + /* Function 0x16 */ + NTSTATUS samr_AddGroupMember( + [in,ref] policy_handle *group_handle, + [in] uint32 rid, + [in] uint32 flags + ); + + /************************/ + /* Function 0x17 */ + NTSTATUS samr_DeleteDomainGroup( + [in,out,ref] policy_handle *group_handle + ); + + /************************/ + /* Function 0x18 */ + NTSTATUS samr_DeleteGroupMember( + [in,ref] policy_handle *group_handle, + [in] uint32 rid + ); + + + /************************/ + /* Function 0x19 */ + typedef struct { + uint32 count; + [size_is(count)] uint32 *rids; + [size_is(count)] uint32 *types; + } samr_RidTypeArray; + + NTSTATUS samr_QueryGroupMember( + [in,ref] policy_handle *group_handle, + [out,ref] samr_RidTypeArray **rids + ); + + + /************************/ + /* Function 0x1a */ + + /* + win2003 seems to accept any data at all for the two integers + below, and doesn't seem to do anything with them that I can + see. Weird. I really expected the first integer to be a rid + and the second to be the attributes for that rid member. + */ + NTSTATUS samr_SetMemberAttributesOfGroup( + [in,ref] policy_handle *group_handle, + [in] uint32 unknown1, + [in] uint32 unknown2 + ); + + + /************************/ + /* Function 0x1b */ + NTSTATUS samr_OpenAlias ( + [in,ref] policy_handle *domain_handle, + [in] samr_AliasAccessMask access_mask, + [in] uint32 rid, + [out,ref] policy_handle *alias_handle + ); + + + /************************/ + /* Function 0x1c */ + + typedef struct { + lsa_String name; + uint32 num_members; + lsa_String description; + } samr_AliasInfoAll; + + typedef enum { + ALIASINFOALL = 1, + ALIASINFONAME = 2, + ALIASINFODESCRIPTION = 3 + } samr_AliasInfoEnum; + + typedef [switch_type(samr_AliasInfoEnum)] union { + [case(ALIASINFOALL)] samr_AliasInfoAll all; + [case(ALIASINFONAME)] lsa_String name; + [case(ALIASINFODESCRIPTION)] lsa_String description; + } samr_AliasInfo; + + NTSTATUS samr_QueryAliasInfo( + [in,ref] policy_handle *alias_handle, + [in] samr_AliasInfoEnum level, + [out,ref,switch_is(level)] samr_AliasInfo **info + ); + + /************************/ + /* Function 0x1d */ + NTSTATUS samr_SetAliasInfo( + [in,ref] policy_handle *alias_handle, + [in] samr_AliasInfoEnum level, + [in,switch_is(level),ref] samr_AliasInfo *info + ); + + /************************/ + /* Function 0x1e */ + NTSTATUS samr_DeleteDomAlias( + [in,out,ref] policy_handle *alias_handle + ); + + /************************/ + /* Function 0x1f */ + NTSTATUS samr_AddAliasMember( + [in,ref] policy_handle *alias_handle, + [in,ref] dom_sid2 *sid + ); + + /************************/ + /* Function 0x20 */ + NTSTATUS samr_DeleteAliasMember( + [in,ref] policy_handle *alias_handle, + [in,ref] dom_sid2 *sid + ); + + /************************/ + /* Function 0x21 */ + NTSTATUS samr_GetMembersInAlias( + [in,ref] policy_handle *alias_handle, + [out,ref] lsa_SidArray *sids + ); + + /************************/ + /* Function 0x22 */ + [public] NTSTATUS samr_OpenUser( + [in,ref] policy_handle *domain_handle, + [in] samr_UserAccessMask access_mask, + [in] uint32 rid, + [out,ref] policy_handle *user_handle + ); + + /************************/ + /* Function 0x23 */ + NTSTATUS samr_DeleteUser( + [in,out,ref] policy_handle *user_handle + ); + + /************************/ + /* Function 0x24 */ + + typedef enum { + UserGeneralInformation = 1, + UserPreferencesInformation = 2, + UserLogonInformation = 3, + UserLogonHoursInformation = 4, + UserAccountInformation = 5, + UserNameInformation = 6, + UserAccountNameInformation = 7, + UserFullNameInformation = 8, + UserPrimaryGroupInformation = 9, + UserHomeInformation = 10, + UserScriptInformation = 11, + UserProfileInformation = 12, + UserAdminCommentInformation = 13, + UserWorkStationsInformation = 14, + UserControlInformation = 16, + UserExpiresInformation = 17, + UserInternal1Information = 18, + UserParametersInformation = 20, + UserAllInformation = 21, + UserInternal4Information = 23, + UserInternal5Information = 24, + UserInternal4InformationNew = 25, + UserInternal5InformationNew = 26 + } samr_UserInfoLevel; + + typedef struct { + lsa_String account_name; + lsa_String full_name; + uint32 primary_gid; + lsa_String description; + lsa_String comment; + } samr_UserInfo1; + + typedef struct { + lsa_String comment; + lsa_String unknown; /* settable, but doesn't stick. probably obsolete */ + uint16 country_code; + uint16 code_page; + } samr_UserInfo2; + + /* this is also used in samr and netlogon */ + typedef [public, flag(NDR_PAHEX)] struct { + uint16 units_per_week; + [size_is(1260), length_is(units_per_week/8)] uint8 *bits; + } samr_LogonHours; + + typedef struct { + lsa_String account_name; + lsa_String full_name; + uint32 rid; + uint32 primary_gid; + lsa_String home_directory; + lsa_String home_drive; + lsa_String logon_script; + lsa_String profile_path; + lsa_String workstations; + NTTIME last_logon; + NTTIME last_logoff; + NTTIME last_password_change; + NTTIME allow_password_change; + NTTIME force_password_change; + samr_LogonHours logon_hours; + uint16 bad_password_count; + uint16 logon_count; + samr_AcctFlags acct_flags; + } samr_UserInfo3; + + typedef struct { + samr_LogonHours logon_hours; + } samr_UserInfo4; + + typedef struct { + lsa_String account_name; + lsa_String full_name; + uint32 rid; + uint32 primary_gid; + lsa_String home_directory; + lsa_String home_drive; + lsa_String logon_script; + lsa_String profile_path; + lsa_String description; + lsa_String workstations; + NTTIME last_logon; + NTTIME last_logoff; + samr_LogonHours logon_hours; + uint16 bad_password_count; + uint16 logon_count; + NTTIME last_password_change; + NTTIME acct_expiry; + samr_AcctFlags acct_flags; + } samr_UserInfo5; + + typedef struct { + lsa_String account_name; + lsa_String full_name; + } samr_UserInfo6; + + typedef struct { + lsa_String account_name; + } samr_UserInfo7; + + typedef struct { + lsa_String full_name; + } samr_UserInfo8; + + typedef struct { + uint32 primary_gid; + } samr_UserInfo9; + + typedef struct { + lsa_String home_directory; + lsa_String home_drive; + } samr_UserInfo10; + + typedef struct { + lsa_String logon_script; + } samr_UserInfo11; + + typedef struct { + lsa_String profile_path; + } samr_UserInfo12; + + typedef struct { + lsa_String description; + } samr_UserInfo13; + + typedef struct { + lsa_String workstations; + } samr_UserInfo14; + + typedef struct { + samr_AcctFlags acct_flags; + } samr_UserInfo16; + + typedef struct { + NTTIME acct_expiry; + } samr_UserInfo17; + + typedef [public, flag(NDR_PAHEX)] struct { + uint8 hash[16]; + } samr_Password; + + typedef struct { + samr_Password nt_pwd; + samr_Password lm_pwd; + boolean8 nt_pwd_active; + boolean8 lm_pwd_active; + uint8 password_expired; + } samr_UserInfo18; + + typedef struct { + lsa_String parameters; + } samr_UserInfo20; + + /* this defines the bits used for fields_present in info21 */ + typedef [bitmap32bit] bitmap { + SAMR_FIELD_ACCOUNT_NAME = 0x00000001, + SAMR_FIELD_FULL_NAME = 0x00000002, + SAMR_FIELD_RID = 0x00000004, + SAMR_FIELD_PRIMARY_GID = 0x00000008, + SAMR_FIELD_DESCRIPTION = 0x00000010, + SAMR_FIELD_COMMENT = 0x00000020, + SAMR_FIELD_HOME_DIRECTORY = 0x00000040, + SAMR_FIELD_HOME_DRIVE = 0x00000080, + SAMR_FIELD_LOGON_SCRIPT = 0x00000100, + SAMR_FIELD_PROFILE_PATH = 0x00000200, + SAMR_FIELD_WORKSTATIONS = 0x00000400, + SAMR_FIELD_LAST_LOGON = 0x00000800, + SAMR_FIELD_LAST_LOGOFF = 0x00001000, + SAMR_FIELD_LOGON_HOURS = 0x00002000, + SAMR_FIELD_BAD_PWD_COUNT = 0x00004000, + SAMR_FIELD_NUM_LOGONS = 0x00008000, + SAMR_FIELD_ALLOW_PWD_CHANGE = 0x00010000, + SAMR_FIELD_FORCE_PWD_CHANGE = 0x00020000, + SAMR_FIELD_LAST_PWD_CHANGE = 0x00040000, + SAMR_FIELD_ACCT_EXPIRY = 0x00080000, + SAMR_FIELD_ACCT_FLAGS = 0x00100000, + SAMR_FIELD_PARAMETERS = 0x00200000, + SAMR_FIELD_COUNTRY_CODE = 0x00400000, + SAMR_FIELD_CODE_PAGE = 0x00800000, + SAMR_FIELD_NT_PASSWORD_PRESENT = 0x01000000, /* either of these */ + SAMR_FIELD_LM_PASSWORD_PRESENT = 0x02000000, /* two bits seems to work */ + SAMR_FIELD_PRIVATE_DATA = 0x04000000, + SAMR_FIELD_EXPIRED_FLAG = 0x08000000, + SAMR_FIELD_SEC_DESC = 0x10000000, + SAMR_FIELD_OWF_PWD = 0x20000000 + } samr_FieldsPresent; + + /* used for 'password_expired' in samr_UserInfo21 */ + const int PASS_MUST_CHANGE_AT_NEXT_LOGON = 0x01; + const int PASS_DONT_CHANGE_AT_NEXT_LOGON = 0x00; + + typedef struct { + NTTIME last_logon; + NTTIME last_logoff; + NTTIME last_password_change; + NTTIME acct_expiry; + NTTIME allow_password_change; + NTTIME force_password_change; + lsa_String account_name; + lsa_String full_name; + lsa_String home_directory; + lsa_String home_drive; + lsa_String logon_script; + lsa_String profile_path; + lsa_String description; + lsa_String workstations; + lsa_String comment; + lsa_String parameters; + lsa_String lm_password; + lsa_String nt_password; + lsa_String private; + uint32 buf_count; + [size_is(buf_count)] uint8 *buffer; + uint32 rid; + uint32 primary_gid; + samr_AcctFlags acct_flags; + samr_FieldsPresent fields_present; + samr_LogonHours logon_hours; + uint16 bad_password_count; + uint16 logon_count; + uint16 country_code; + uint16 code_page; + uint8 lm_password_set; + uint8 nt_password_set; + uint8 password_expired; + uint8 unknown4; + } samr_UserInfo21; + + typedef [public, flag(NDR_PAHEX)] struct { + uint8 data[516]; + } samr_CryptPassword; + + typedef struct { + samr_UserInfo21 info; + samr_CryptPassword password; + } samr_UserInfo23; + + typedef struct { + samr_CryptPassword password; + uint8 password_expired; + } samr_UserInfo24; + + typedef [flag(NDR_PAHEX)] struct { + uint8 data[532]; + } samr_CryptPasswordEx; + + typedef struct { + samr_UserInfo21 info; + samr_CryptPasswordEx password; + } samr_UserInfo25; + + typedef struct { + samr_CryptPasswordEx password; + uint8 password_expired; + } samr_UserInfo26; + + typedef [switch_type(uint16)] union { + [case(1)] samr_UserInfo1 info1; + [case(2)] samr_UserInfo2 info2; + [case(3)] samr_UserInfo3 info3; + [case(4)] samr_UserInfo4 info4; + [case(5)] samr_UserInfo5 info5; + [case(6)] samr_UserInfo6 info6; + [case(7)] samr_UserInfo7 info7; + [case(8)] samr_UserInfo8 info8; + [case(9)] samr_UserInfo9 info9; + [case(10)] samr_UserInfo10 info10; + [case(11)] samr_UserInfo11 info11; + [case(12)] samr_UserInfo12 info12; + [case(13)] samr_UserInfo13 info13; + [case(14)] samr_UserInfo14 info14; + [case(16)] samr_UserInfo16 info16; + [case(17)] samr_UserInfo17 info17; + [case(18)] samr_UserInfo18 info18; + [case(20)] samr_UserInfo20 info20; + [case(21)] samr_UserInfo21 info21; + [case(23)] samr_UserInfo23 info23; + [case(24)] samr_UserInfo24 info24; + [case(25)] samr_UserInfo25 info25; + [case(26)] samr_UserInfo26 info26; + } samr_UserInfo; + + [public] NTSTATUS samr_QueryUserInfo( + [in,ref] policy_handle *user_handle, + [in] samr_UserInfoLevel level, + [out,ref,switch_is(level)] samr_UserInfo **info + ); + + + /************************/ + /* Function 0x25 */ + [public] NTSTATUS samr_SetUserInfo( + [in,ref] policy_handle *user_handle, + [in] samr_UserInfoLevel level, + [in,ref,switch_is(level)] samr_UserInfo *info + ); + + /************************/ + /* Function 0x26 */ + /* + this is a password change interface that doesn't give + the server the plaintext password. Depricated. + */ + NTSTATUS samr_ChangePasswordUser( + [in,ref] policy_handle *user_handle, + [in] boolean8 lm_present, + [in,unique] samr_Password *old_lm_crypted, + [in,unique] samr_Password *new_lm_crypted, + [in] boolean8 nt_present, + [in,unique] samr_Password *old_nt_crypted, + [in,unique] samr_Password *new_nt_crypted, + [in] boolean8 cross1_present, + [in,unique] samr_Password *nt_cross, + [in] boolean8 cross2_present, + [in,unique] samr_Password *lm_cross + ); + + /************************/ + /* Function 0x27 */ + + typedef [public] struct { + uint32 rid; + samr_GroupAttrs attributes; + } samr_RidWithAttribute; + + typedef [public] struct { + uint32 count; + [size_is(count)] samr_RidWithAttribute *rids; + } samr_RidWithAttributeArray; + + NTSTATUS samr_GetGroupsForUser( + [in,ref] policy_handle *user_handle, + [out,ref] samr_RidWithAttributeArray **rids + ); + + /************************/ + /* Function 0x28 */ + + typedef struct { + uint32 idx; + uint32 rid; + samr_AcctFlags acct_flags; + lsa_String account_name; + lsa_String description; + lsa_String full_name; + } samr_DispEntryGeneral; + + typedef struct { + uint32 count; + [size_is(count)] samr_DispEntryGeneral *entries; + } samr_DispInfoGeneral; + + typedef struct { + uint32 idx; + uint32 rid; + samr_AcctFlags acct_flags; + lsa_String account_name; + lsa_String description; + } samr_DispEntryFull; + + typedef struct { + uint32 count; + [size_is(count)] samr_DispEntryFull *entries; + } samr_DispInfoFull; + + typedef struct { + uint32 idx; + uint32 rid; + samr_GroupAttrs acct_flags; + lsa_String account_name; + lsa_String description; + } samr_DispEntryFullGroup; + + typedef struct { + uint32 count; + [size_is(count)] samr_DispEntryFullGroup *entries; + } samr_DispInfoFullGroups; + + typedef struct { + uint32 idx; + lsa_AsciiStringLarge account_name; + } samr_DispEntryAscii; + + typedef struct { + uint32 count; + [size_is(count)] samr_DispEntryAscii *entries; + } samr_DispInfoAscii; + + typedef enum { + SAMR_DOMAIN_DISPLAY_USER = 1, + SAMR_DOMAIN_DISPLAY_MACHINE = 2, + SAMR_DOMAIN_DISPLAY_GROUP = 3, + SAMR_DOMAIN_DISPLAY_OEM_USER = 4, + SAMR_DOMAIN_DISPLAY_OEM_GROUP = 5 + } samr_DomainDisplayInformation; + + typedef [switch_type(uint16)] union { + [case(SAMR_DOMAIN_DISPLAY_USER)] samr_DispInfoGeneral info1;/* users */ + [case(SAMR_DOMAIN_DISPLAY_MACHINE)] samr_DispInfoFull info2; /* trust accounts? */ + [case(SAMR_DOMAIN_DISPLAY_GROUP)] samr_DispInfoFullGroups info3; /* groups */ + [case(SAMR_DOMAIN_DISPLAY_OEM_USER)] samr_DispInfoAscii info4; /* users */ + [case(SAMR_DOMAIN_DISPLAY_OEM_GROUP)] samr_DispInfoAscii info5; /* groups */ + } samr_DispInfo; + + NTSTATUS samr_QueryDisplayInfo( + [in,ref] policy_handle *domain_handle, + [in] samr_DomainDisplayInformation level, + [in] uint32 start_idx, + [in] uint32 max_entries, + [in] uint32 buf_size, + [out,ref] uint32 *total_size, + [out,ref] uint32 *returned_size, + [out,ref,switch_is(level)] samr_DispInfo *info + ); + + + /************************/ + /* Function 0x29 */ + + /* + this seems to be an alphabetic search function. The returned index + is the index for samr_QueryDisplayInfo needed to get names occurring + after the specified name. The supplied name does not need to exist + in the database (for example you can supply just a first letter for + searching starting at that letter) + + The level corresponds to the samr_QueryDisplayInfo level + */ + NTSTATUS samr_GetDisplayEnumerationIndex( + [in,ref] policy_handle *domain_handle, + [in] uint16 level, + [in,ref] lsa_String *name, + [out,ref] uint32 *idx + ); + + + + /************************/ + /* Function 0x2a */ + + /* + w2k3 returns NT_STATUS_NOT_IMPLEMENTED for this + */ + NTSTATUS samr_TestPrivateFunctionsDomain( + [in,ref] policy_handle *domain_handle + ); + + + /************************/ + /* Function 0x2b */ + + /* + w2k3 returns NT_STATUS_NOT_IMPLEMENTED for this + */ + NTSTATUS samr_TestPrivateFunctionsUser( + [in,ref] policy_handle *user_handle + ); + + + /************************/ + /* Function 0x2c */ + + typedef struct { + uint16 min_password_length; + samr_PasswordProperties password_properties; + } samr_PwInfo; + + [public] NTSTATUS samr_GetUserPwInfo( + [in,ref] policy_handle *user_handle, + [out,ref] samr_PwInfo *info + ); + + /************************/ + /* Function 0x2d */ + NTSTATUS samr_RemoveMemberFromForeignDomain( + [in,ref] policy_handle *domain_handle, + [in,ref] dom_sid2 *sid + ); + + /************************/ + /* Function 0x2e */ + + /* + how is this different from QueryDomainInfo ?? + */ + NTSTATUS samr_QueryDomainInfo2( + [in,ref] policy_handle *domain_handle, + [in] samr_DomainInfoClass level, + [out,ref,switch_is(level)] samr_DomainInfo **info + ); + + /************************/ + /* Function 0x2f */ + + /* + how is this different from QueryUserInfo ?? + */ + NTSTATUS samr_QueryUserInfo2( + [in,ref] policy_handle *user_handle, + [in] samr_UserInfoLevel level, + [out,ref,switch_is(level)] samr_UserInfo **info + ); + + /************************/ + /* Function 0x30 */ + + /* + how is this different from QueryDisplayInfo?? + */ + NTSTATUS samr_QueryDisplayInfo2( + [in,ref] policy_handle *domain_handle, + [in] samr_DomainDisplayInformation level, + [in] uint32 start_idx, + [in] uint32 max_entries, + [in] uint32 buf_size, + [out,ref] uint32 *total_size, + [out,ref] uint32 *returned_size, + [out,ref,switch_is(level)] samr_DispInfo *info + ); + + /************************/ + /* Function 0x31 */ + + /* + how is this different from GetDisplayEnumerationIndex ?? + */ + NTSTATUS samr_GetDisplayEnumerationIndex2( + [in,ref] policy_handle *domain_handle, + [in] samr_DomainDisplayInformation level, + [in,ref] lsa_String *name, + [out,ref] uint32 *idx + ); + + + /************************/ + /* Function 0x32 */ + NTSTATUS samr_CreateUser2( + [in,ref] policy_handle *domain_handle, + [in,ref] lsa_String *account_name, + [in] samr_AcctFlags acct_flags, + [in] samr_UserAccessMask access_mask, + [out,ref] policy_handle *user_handle, + [out,ref] uint32 *access_granted, + [out,ref] uint32 *rid + ); + + + /************************/ + /* Function 0x33 */ + + /* + another duplicate. There must be a reason .... + */ + NTSTATUS samr_QueryDisplayInfo3( + [in,ref] policy_handle *domain_handle, + [in] samr_DomainDisplayInformation level, + [in] uint32 start_idx, + [in] uint32 max_entries, + [in] uint32 buf_size, + [out,ref] uint32 *total_size, + [out,ref] uint32 *returned_size, + [out,ref,switch_is(level)] samr_DispInfo *info + ); + + /************************/ + /* Function 0x34 */ + NTSTATUS samr_AddMultipleMembersToAlias( + [in,ref] policy_handle *alias_handle, + [in,ref] lsa_SidArray *sids + ); + + /************************/ + /* Function 0x35 */ + NTSTATUS samr_RemoveMultipleMembersFromAlias( + [in,ref] policy_handle *alias_handle, + [in,ref] lsa_SidArray *sids + ); + + /************************/ + /* Function 0x36 */ + + NTSTATUS samr_OemChangePasswordUser2( + [in,unique] lsa_AsciiString *server, + [in,ref] lsa_AsciiString *account, + [in,unique] samr_CryptPassword *password, + [in,unique] samr_Password *hash + ); + + /************************/ + /* Function 0x37 */ + NTSTATUS samr_ChangePasswordUser2( + [in,unique] lsa_String *server, + [in,ref] lsa_String *account, + [in,unique] samr_CryptPassword *nt_password, + [in,unique] samr_Password *nt_verifier, + [in] boolean8 lm_change, + [in,unique] samr_CryptPassword *lm_password, + [in,unique] samr_Password *lm_verifier + ); + + /************************/ + /* Function 0x38 */ + NTSTATUS samr_GetDomPwInfo( + [in,unique] lsa_String *domain_name, + [out,ref] samr_PwInfo *info + ); + + /************************/ + /* Function 0x39 */ + NTSTATUS samr_Connect2( + [in,unique,string,charset(UTF16)] uint16 *system_name, + [in] samr_ConnectAccessMask access_mask, + [out,ref] policy_handle *connect_handle + ); + + /************************/ + /* Function 0x3a */ + /* + seems to be an exact alias for samr_SetUserInfo() + */ + [public] NTSTATUS samr_SetUserInfo2( + [in,ref] policy_handle *user_handle, + [in] samr_UserInfoLevel level, + [in,ref,switch_is(level)] samr_UserInfo *info + ); + + /************************/ + /* Function 0x3b */ + /* + this one is mysterious. I have a few guesses, but nothing working yet + */ + NTSTATUS samr_SetBootKeyInformation( + [in,ref] policy_handle *connect_handle, + [in] uint32 unknown1, + [in] uint32 unknown2, + [in] uint32 unknown3 + ); + + /************************/ + /* Function 0x3c */ + NTSTATUS samr_GetBootKeyInformation( + [in,ref] policy_handle *domain_handle, + [out,ref] uint32 *unknown + ); + + /************************/ + /* Function 0x3d */ + NTSTATUS samr_Connect3( + [in,unique,string,charset(UTF16)] uint16 *system_name, + /* this unknown value seems to be completely ignored by w2k3 */ + [in] uint32 unknown, + [in] samr_ConnectAccessMask access_mask, + [out,ref] policy_handle *connect_handle + ); + + /************************/ + /* Function 0x3e */ + + typedef [v1_enum] enum { + SAMR_CONNECT_PRE_W2K = 1, + SAMR_CONNECT_W2K = 2, + SAMR_CONNECT_AFTER_W2K = 3 + } samr_ConnectVersion; + + NTSTATUS samr_Connect4( + [in,unique,string,charset(UTF16)] uint16 *system_name, + [in] samr_ConnectVersion client_version, + [in] samr_ConnectAccessMask access_mask, + [out,ref] policy_handle *connect_handle + ); + + /************************/ + /* Function 0x3f */ + + typedef struct { + samr_RejectReason reason; + uint32 unknown1; + uint32 unknown2; + } samr_ChangeReject; + + NTSTATUS samr_ChangePasswordUser3( + [in,unique] lsa_String *server, + [in,ref] lsa_String *account, + [in,unique] samr_CryptPassword *nt_password, + [in,unique] samr_Password *nt_verifier, + [in] boolean8 lm_change, + [in,unique] samr_CryptPassword *lm_password, + [in,unique] samr_Password *lm_verifier, + [in,unique] samr_CryptPassword *password3, + [out,ref] samr_DomInfo1 **dominfo, + [out,ref] samr_ChangeReject **reject + ); + + /************************/ + /* Function 0x40 */ + + typedef struct { + samr_ConnectVersion client_version; /* w2k3 gives 3 */ + uint32 unknown2; /* w2k3 gives 0 */ + } samr_ConnectInfo1; + + typedef union { + [case(1)] samr_ConnectInfo1 info1; + } samr_ConnectInfo; + + [public] NTSTATUS samr_Connect5( + [in,unique,string,charset(UTF16)] uint16 *system_name, + [in] samr_ConnectAccessMask access_mask, + [in] uint32 level_in, + [in,ref,switch_is(level_in)] samr_ConnectInfo *info_in, + [out,ref] uint32 *level_out, + [out,ref,switch_is(*level_out)] samr_ConnectInfo *info_out, + [out,ref] policy_handle *connect_handle + ); + + /************************/ + /* Function 0x41 */ + NTSTATUS samr_RidToSid( + [in,ref] policy_handle *domain_handle, + [in] uint32 rid, + [out,ref] dom_sid2 **sid + ); + + /************************/ + /* Function 0x42 */ + + /* + this should set the DSRM password for the server, which is used + when booting into Directory Services Recovery Mode on a DC. Win2003 + gives me NT_STATUS_NOT_SUPPORTED + */ + + NTSTATUS samr_SetDsrmPassword( + [in,unique] lsa_String *name, + [in] uint32 unknown, + [in,unique] samr_Password *hash + ); + + + /************************/ + /* Function 0x43 */ + /************************/ + typedef [bitmap32bit] bitmap { + SAMR_VALIDATE_FIELD_PASSWORD_LAST_SET = 0x00000001, + SAMR_VALIDATE_FIELD_BAD_PASSWORD_TIME = 0x00000002, + SAMR_VALIDATE_FIELD_LOCKOUT_TIME = 0x00000004, + SAMR_VALIDATE_FIELD_BAD_PASSWORD_COUNT = 0x00000008, + SAMR_VALIDATE_FIELD_PASSWORD_HISTORY_LENGTH = 0x00000010, + SAMR_VALIDATE_FIELD_PASSWORD_HISTORY = 0x00000020 + } samr_ValidateFieldsPresent; + + typedef enum { + NetValidateAuthentication = 1, + NetValidatePasswordChange= 2, + NetValidatePasswordReset = 3 + } samr_ValidatePasswordLevel; + + /* NetApi maps samr_ValidationStatus errors to WERRORs. Haven't + * identified the mapping of + * - NERR_PasswordFilterError + * - NERR_PasswordExpired and + * - NERR_PasswordCantChange + * yet - Guenther + */ + + typedef enum { + SAMR_VALIDATION_STATUS_SUCCESS = 0, + SAMR_VALIDATION_STATUS_PASSWORD_MUST_CHANGE = 1, + SAMR_VALIDATION_STATUS_ACCOUNT_LOCKED_OUT = 2, + SAMR_VALIDATION_STATUS_PASSWORD_EXPIRED = 3, + SAMR_VALIDATION_STATUS_BAD_PASSWORD = 4, + SAMR_VALIDATION_STATUS_PWD_HISTORY_CONFLICT = 5, + SAMR_VALIDATION_STATUS_PWD_TOO_SHORT = 6, + SAMR_VALIDATION_STATUS_PWD_TOO_LONG = 7, + SAMR_VALIDATION_STATUS_NOT_COMPLEX_ENOUGH = 8, + SAMR_VALIDATION_STATUS_PASSWORD_TOO_RECENT = 9, + SAMR_VALIDATION_STATUS_PASSWORD_FILTER_ERROR = 10 + } samr_ValidationStatus; + + typedef struct { + uint32 length; + [size_is(length)] uint8 *data; + } samr_ValidationBlob; + + typedef struct { + samr_ValidateFieldsPresent fields_present; + NTTIME_hyper last_password_change; + NTTIME_hyper bad_password_time; + NTTIME_hyper lockout_time; + uint32 bad_pwd_count; + uint32 pwd_history_len; + [size_is(pwd_history_len)] samr_ValidationBlob *pwd_history; + } samr_ValidatePasswordInfo; + + typedef struct { + samr_ValidatePasswordInfo info; + samr_ValidationStatus status; + } samr_ValidatePasswordRepCtr; + + typedef [switch_type(uint16)] union { + [case(1)] samr_ValidatePasswordRepCtr ctr1; + [case(2)] samr_ValidatePasswordRepCtr ctr2; + [case(3)] samr_ValidatePasswordRepCtr ctr3; + } samr_ValidatePasswordRep; + + typedef struct { + samr_ValidatePasswordInfo info; + lsa_StringLarge password; + lsa_StringLarge account; + samr_ValidationBlob hash; + boolean8 pwd_must_change_at_next_logon; + boolean8 clear_lockout; + } samr_ValidatePasswordReq3; + + typedef struct { + samr_ValidatePasswordInfo info; + lsa_StringLarge password; + lsa_StringLarge account; + samr_ValidationBlob hash; + boolean8 password_matched; + } samr_ValidatePasswordReq2; + + typedef struct { + samr_ValidatePasswordInfo info; + boolean8 password_matched; + } samr_ValidatePasswordReq1; + + typedef [switch_type(uint16)] union { + [case(1)] samr_ValidatePasswordReq1 req1; + [case(2)] samr_ValidatePasswordReq2 req2; + [case(3)] samr_ValidatePasswordReq3 req3; + } samr_ValidatePasswordReq; + + NTSTATUS samr_ValidatePassword( + [in] samr_ValidatePasswordLevel level, + [in,switch_is(level)] samr_ValidatePasswordReq *req, + [out,ref,switch_is(level)] samr_ValidatePasswordRep **rep + ); +} diff --git a/epan/dissectors/pidl/srvsvc/srvsvc.cnf b/epan/dissectors/pidl/srvsvc/srvsvc.cnf new file mode 100644 index 00000000..0b0333d4 --- /dev/null +++ b/epan/dissectors/pidl/srvsvc/srvsvc.cnf @@ -0,0 +1,151 @@ +# conformance file for SRVSVC +# + +MANUAL srvsvc_dissect_element_NetShareInfo_info1501_ +MANUAL srvsvc_dissect_element_NetGetFileSecurity_sd_buf_ +MANUAL srvsvc_dissect_element_NetSetFileSecurity_sd_buf +MANUAL srvsvc_dissect_element_NetShareCtr1501_array__ +MANUAL srvsvc_dissect_element_NetShareInfo502_sd_ +NOEMIT srvsvc_dissect_element_NetShareInfo502_sd__ +# we wont need to manually define servertype once svcctl is autogenerated +MANUAL srvsvc_dissect_element_NetSrvInfo101_server_type +MANUAL srvsvc_dissect_element_NetSrvInfo102_server_type +# until we get secinfo +MANUAL srvsvc_dissect_element_NetGetFileSecurity_securityinformation +MANUAL srvsvc_dissect_element_NetSetFileSecurity_securityinformation +MANUAL srvsvc_dissect_element_NetShareInfo502_sd_buf +MANUAL srvsvc_dissect_element_NetShareInfoCtr_ctr +NOEMIT srvsvc_dissect_element_NetGetFileSecurity_sd_buf__ +NOEMIT srvsvc_dissect_element_NetSetFileSecurity_sd_buf_ + +HF_FIELD hf_srvsvc_sec_desc_buf_len "Sec Desc Buf Len" "srvsvc.sec_desc_buf_len" FT_UINT32 BASE_DEC NULL 0 "" "" "" + +# +# +# Prettifications +PARAM_VALUE srvsvc_dissect_element_NetCharDevEnum_server_unc_ 1|PIDL_SET_COL_INFO +PARAM_VALUE srvsvc_dissect_element_NetCharDevEnum_level_ PIDL_SET_COL_INFO + +PARAM_VALUE srvsvc_dissect_element_NetCharDevQEnum_server_unc_ 1|PIDL_SET_COL_INFO +PARAM_VALUE srvsvc_dissect_element_NetCharDevQEnum_user_ 1|PIDL_SET_COL_INFO +PARAM_VALUE srvsvc_dissect_element_NetCharDevQEnum_level_ PIDL_SET_COL_INFO + +PARAM_VALUE srvsvc_dissect_element_NetConnEnum_server_unc_ 1|PIDL_SET_COL_INFO +PARAM_VALUE srvsvc_dissect_element_NetConnEnum_path_ 1|PIDL_SET_COL_INFO +PARAM_VALUE srvsvc_dissect_element_NetConnEnum_level_ PIDL_SET_COL_INFO + +PARAM_VALUE srvsvc_dissect_element_NetFileEnum_server_unc_ 1|PIDL_SET_COL_INFO +PARAM_VALUE srvsvc_dissect_element_NetFileEnum_level_ PIDL_SET_COL_INFO + + +CODE START + #include "packet-smb.h" + #include "packet-smb-browse.h" + +static int +srvsvc_dissect_NetShareCtr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_); +static int +srvsvc_dissect_element_NetShareInfoCtr_ctr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, guint32 *level) +{ + ALIGN_TO_5_BYTES + offset = srvsvc_dissect_NetShareCtr(tvb, offset, pinfo, tree, di, drep, hf_srvsvc_srvsvc_NetShareInfoCtr_ctr, *level); + + return offset; +} + + +static int +srvsvc_dissect_sec_desc_buf(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, int hf_index); +static int +srvsvc_dissect_sec_desc_buf(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, int hf_index _U_) +{ + guint32 len; + + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_srvsvc_sec_desc_buf_len, &len); + + dissect_nt_sec_desc(tvb, offset, pinfo, tree, drep, TRUE, len, + NULL); + + offset += len; + + return offset; +} +static int +srvsvc_dissect_element_NetShareInfo_info1501_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + return srvsvc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, di, drep, hf_srvsvc_srvsvc_NetShareInfo_info1501); +} +static int +srvsvc_dissect_element_NetGetFileSecurity_sd_buf_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + return srvsvc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, di, drep, hf_srvsvc_srvsvc_NetGetFileSecurity_sd_buf); +} +static int +srvsvc_dissect_element_NetSetFileSecurity_sd_buf(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + return srvsvc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, di, drep, hf_srvsvc_srvsvc_NetSetFileSecurity_sd_buf); +} +static int +srvsvc_dissect_element_NetShareCtr1501_array__(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + return srvsvc_dissect_sec_desc_buf(tvb, offset, pinfo, tree, di, drep, hf_srvsvc_srvsvc_NetShareCtr1501_array); +} +static int +srvsvc_dissect_element_NetShareInfo502_sd_buf(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + return srvsvc_dissect_sec_desc_buf(tvb,offset,pinfo,tree,di,drep, hf_srvsvc_srvsvc_NetShareInfo502_sd_buf); +} +static int +srvsvc_dissect_ServerType(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + offset=dissect_smb_server_type_flags(tvb, offset, pinfo, tree, drep, 0); + + return offset; +} +static int +srvsvc_dissect_element_NetSrvInfo101_server_type(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + return srvsvc_dissect_ServerType(tvb, offset, pinfo, tree, di, drep); +} + +static int +srvsvc_dissect_element_NetSrvInfo102_server_type(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + return srvsvc_dissect_ServerType(tvb, offset, pinfo, tree, di, drep); +} +static int +srvsvc_dissect_secinfo(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, dcerpc_info* di, guint8 *drep _U_, int hf_index _U_) +{ + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + offset=dissect_security_information_mask(tvb, tree, offset); + + return offset; +} +static int +srvsvc_dissect_element_NetGetFileSecurity_securityinformation(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + return srvsvc_dissect_secinfo(tvb, offset, pinfo, tree, di, drep, hf_srvsvc_srvsvc_NetGetFileSecurity_securityinformation); +} +static int +srvsvc_dissect_element_NetSetFileSecurity_securityinformation(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + return srvsvc_dissect_secinfo(tvb, offset, pinfo, tree, di, drep, hf_srvsvc_srvsvc_NetSetFileSecurity_securityinformation); +} + +CODE END + diff --git a/epan/dissectors/pidl/srvsvc/srvsvc.idl b/epan/dissectors/pidl/srvsvc/srvsvc.idl new file mode 100644 index 00000000..93282d07 --- /dev/null +++ b/epan/dissectors/pidl/srvsvc/srvsvc.idl @@ -0,0 +1,1567 @@ +#include "idl_types.h" + +/* + srvsvc interface definitions +*/ +/* import "misc.idl", "security.idl", "svcctl.idl"; */ + +[ uuid("4b324fc8-1670-01d3-1278-5a47bf6ee188"), + version(3.0), + endpoint("ncacn_np:[\\pipe\\srvsvc]", "ncacn_ip_tcp:", "ncalrpc:"), + pointer_default(unique), + helpstring("Server Service") +] interface srvsvc +{ + typedef bitmap svcctl_ServerType svcctl_ServerType; + typedef bitmap security_secinfo security_secinfo; + +/**************************/ +/* srvsvc_NetCharDev */ +/**************************/ + typedef struct { + [string,charset(UTF16)] uint16 *device; + } srvsvc_NetCharDevInfo0; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetCharDevInfo0 *array; + } srvsvc_NetCharDevCtr0; + + typedef struct { + [string,charset(UTF16)] uint16 *device; + uint32 status; + [string,charset(UTF16)] uint16 *user; + uint32 time; + } srvsvc_NetCharDevInfo1; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetCharDevInfo1 *array; + } srvsvc_NetCharDevCtr1; + + typedef union { + [case(0)] srvsvc_NetCharDevInfo0 *info0; + [case(1)] srvsvc_NetCharDevInfo1 *info1; + [default] ; + } srvsvc_NetCharDevInfo; + + typedef union { + [case(0)] srvsvc_NetCharDevCtr0 *ctr0; + [case(1)] srvsvc_NetCharDevCtr1 *ctr1; + [default] ; + } srvsvc_NetCharDevCtr; + + typedef struct { + uint32 level; + [switch_is(level)] srvsvc_NetCharDevCtr ctr; + } srvsvc_NetCharDevInfoCtr; + + /******************/ + /* Function: 0x00 */ + WERROR srvsvc_NetCharDevEnum( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,out,ref] srvsvc_NetCharDevInfoCtr *info_ctr, + [in] uint32 max_buffer, + [out,ref] uint32 *totalentries, + [in,out,unique] uint32 *resume_handle + ); + + /******************/ + /* Function: 0x01 */ + WERROR srvsvc_NetCharDevGetInfo( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 device_name[], + [in] uint32 level, + [out,ref,switch_is(level)] srvsvc_NetCharDevInfo *info + ); + + /******************/ + /* Function: 0x02 */ + WERROR srvsvc_NetCharDevControl( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 device_name[], + [in] uint32 opcode + ); + +/**************************/ +/* srvsvc_NetCharDevQ */ +/**************************/ + typedef struct { + [string,charset(UTF16)] uint16 *device; + } srvsvc_NetCharDevQInfo0; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetCharDevQInfo0 *array; + } srvsvc_NetCharDevQCtr0; + + typedef struct { + [string,charset(UTF16)] uint16 *device; + uint32 priority; + [string,charset(UTF16)] uint16 *devices; + uint32 users; + uint32 num_ahead; + } srvsvc_NetCharDevQInfo1; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetCharDevQInfo1 *array; + } srvsvc_NetCharDevQCtr1; + + typedef union { + [case(0)] srvsvc_NetCharDevQInfo0 *info0; + [case(1)] srvsvc_NetCharDevQInfo1 *info1; + [default] ; + } srvsvc_NetCharDevQInfo; + + typedef union { + [case(0)] srvsvc_NetCharDevQCtr0 *ctr0; + [case(1)] srvsvc_NetCharDevQCtr1 *ctr1; + [default] ; + } srvsvc_NetCharDevQCtr; + + typedef struct { + uint32 level; + [switch_is(level)] srvsvc_NetCharDevQCtr ctr; + } srvsvc_NetCharDevQInfoCtr; + + /******************/ + /* Function: 0x03 */ + WERROR srvsvc_NetCharDevQEnum( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,unique] [string,charset(UTF16)] uint16 *user, + [in,out,ref] srvsvc_NetCharDevQInfoCtr *info_ctr, + [in] uint32 max_buffer, + [out,ref] uint32 *totalentries, + [in,out,unique] uint32 *resume_handle + ); + + /******************/ + /* Function: 0x04 */ + WERROR srvsvc_NetCharDevQGetInfo( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 queue_name[], + [in] [string,charset(UTF16)] uint16 user[], + [in] uint32 level, + [out,switch_is(level),ref] srvsvc_NetCharDevQInfo *info + ); + + /******************/ + /* Function: 0x05 */ + WERROR srvsvc_NetCharDevQSetInfo( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 queue_name[], + [in] uint32 level, + [in,switch_is(level)] srvsvc_NetCharDevQInfo info, + [in,out,unique] uint32 *parm_error + ); + + /******************/ + /* Function: 0x06 */ + WERROR srvsvc_NetCharDevQPurge( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 queue_name[] + ); + + /******************/ + /* Function: 0x07 */ + WERROR srvsvc_NetCharDevQPurgeSelf( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 queue_name[], + [in] [string,charset(UTF16)] uint16 computer_name[] + ); + +/**************************/ +/* srvsvc_NetConn */ +/**************************/ + typedef struct { + uint32 conn_id; + } srvsvc_NetConnInfo0; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetConnInfo0 *array; + } srvsvc_NetConnCtr0; + + typedef struct { + uint32 conn_id; + uint32 conn_type; + uint32 num_open; + uint32 num_users; + uint32 conn_time; + [string,charset(UTF16)] uint16 *user; + [string,charset(UTF16)] uint16 *share; + } srvsvc_NetConnInfo1; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetConnInfo1 *array; + } srvsvc_NetConnCtr1; + + typedef union { + [case(0)] srvsvc_NetConnCtr0 *ctr0; + [case(1)] srvsvc_NetConnCtr1 *ctr1; + [default] ; + } srvsvc_NetConnCtr; + + typedef struct { + uint32 level; + [switch_is(level)] srvsvc_NetConnCtr ctr; + } srvsvc_NetConnInfoCtr; + + /******************/ + /* Function: 0x08 */ + WERROR srvsvc_NetConnEnum( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,unique] [string,charset(UTF16)] uint16 *path, + [in,out,ref] srvsvc_NetConnInfoCtr *info_ctr, + [in] uint32 max_buffer, + [out,ref] uint32 *totalentries, + [in,out,unique] uint32 *resume_handle + ); + +/**************************/ +/* srvsvc_NetFile */ +/**************************/ + typedef struct { + uint32 fid; + } srvsvc_NetFileInfo2; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetFileInfo2 *array; + } srvsvc_NetFileCtr2; + + typedef struct { + uint32 fid; + uint32 permissions; + uint32 num_locks; + [string,charset(UTF16)] uint16 *path; + [string,charset(UTF16)] uint16 *user; + } srvsvc_NetFileInfo3; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetFileInfo3 *array; + } srvsvc_NetFileCtr3; + + typedef union { + [case(2)] srvsvc_NetFileInfo2 *info2; + [case(3)] srvsvc_NetFileInfo3 *info3; + [default] ; + } srvsvc_NetFileInfo; + + typedef union { + [case(2)] srvsvc_NetFileCtr2 *ctr2; + [case(3)] srvsvc_NetFileCtr3 *ctr3; + [default] ; + } srvsvc_NetFileCtr; + + typedef struct { + uint32 level; + [switch_is(level)] srvsvc_NetFileCtr ctr; + } srvsvc_NetFileInfoCtr; + + /******************/ + /* Function: 0x09 */ + WERROR srvsvc_NetFileEnum( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,unique] [string,charset(UTF16)] uint16 *path, + [in,unique] [string,charset(UTF16)] uint16 *user, + [in,out,ref] srvsvc_NetFileInfoCtr *info_ctr, + [in] uint32 max_buffer, + [out,ref] uint32 *totalentries, + [in,out,unique] uint32 *resume_handle + ); + + /******************/ + /* Function: 0x0a */ + WERROR srvsvc_NetFileGetInfo( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] uint32 fid, + [in] uint32 level, + [out,switch_is(level),ref] srvsvc_NetFileInfo *info + ); + + /******************/ + /* Function: 0x0b */ + WERROR srvsvc_NetFileClose( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] uint32 fid + ); + +/**************************/ +/* srvsvc_NetSess */ +/**************************/ + typedef struct { + [string,charset(UTF16)] uint16 *client; + } srvsvc_NetSessInfo0; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetSessInfo0 *array; + } srvsvc_NetSessCtr0; + + typedef struct { + [string,charset(UTF16)] uint16 *client; + [string,charset(UTF16)] uint16 *user; + uint32 num_open; + uint32 time; + uint32 idle_time; + uint32 user_flags; + } srvsvc_NetSessInfo1; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetSessInfo1 *array; + } srvsvc_NetSessCtr1; + + typedef struct { + [string,charset(UTF16)] uint16 *client; + [string,charset(UTF16)] uint16 *user; + uint32 num_open; + uint32 time; + uint32 idle_time; + uint32 user_flags; + [string,charset(UTF16)] uint16 *client_type; + } srvsvc_NetSessInfo2; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetSessInfo2 *array; + } srvsvc_NetSessCtr2; + + typedef struct { + [string,charset(UTF16)] uint16 *client; + [string,charset(UTF16)] uint16 *user; + uint32 time; + uint32 idle_time; + } srvsvc_NetSessInfo10; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetSessInfo10 *array; + } srvsvc_NetSessCtr10; + + typedef struct { + [string,charset(UTF16)] uint16 *client; + [string,charset(UTF16)] uint16 *user; + uint32 num_open; + uint32 time; + uint32 idle_time; + uint32 user_flags; + [string,charset(UTF16)] uint16 *client_type; + [string,charset(UTF16)] uint16 *transport; + } srvsvc_NetSessInfo502; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetSessInfo502 *array; + } srvsvc_NetSessCtr502; + + typedef enum { + SESSION_INFO_0_CONTAINER = 0, + SESSION_INFO_1_CONTAINER = 1, + SESSION_INFO_2_CONTAINER = 2, + SESSION_INFO_10_CONTAINER = 10, + SESSION_INFO_502_CONTAINER = 502 + } SESSION_INFO_LEVEL; + + typedef [switch_type(SESSION_INFO_LEVEL)] union { + [case(0)] srvsvc_NetSessCtr0 *ctr0; + [case(1)] srvsvc_NetSessCtr1 *ctr1; + [case(2)] srvsvc_NetSessCtr2 *ctr2; + [case(10)] srvsvc_NetSessCtr10 *ctr10; + [case(502)] srvsvc_NetSessCtr502 *ctr502; + } srvsvc_NetSessCtr; + + /******************/ + /* Function: 0x0c */ + + typedef struct { + SESSION_INFO_LEVEL level; + [flag(LIBNDR_FLAG_ALIGN5)][switch_is(level)] srvsvc_NetSessCtr ctr; + } srvsvc_NetSessInfoCtr; + + WERROR srvsvc_NetSessEnum( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,unique] [string,charset(UTF16)] uint16 *client, + [in,unique] [string,charset(UTF16)] uint16 *user, + [in,out] srvsvc_NetSessInfoCtr *info_ctr, + [in] uint32 max_buffer, + [out,ref] uint32 *totalentries, + [in,out,unique] uint32 *resume_handle + ); + + /******************/ + /* Function: 0x0d */ + WERROR srvsvc_NetSessDel( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,unique] [string,charset(UTF16)] uint16 *client, + [in,unique] [string,charset(UTF16)] uint16 *user + ); + +/**************************/ +/* srvsvc_NetShare */ +/**************************/ + + /* share types */ + const uint32 STYPE_TEMPORARY = 0x40000000; /* share is a temporary one */ + const uint32 STYPE_HIDDEN = 0x80000000; /* share is a hidden one */ + + typedef [v1_enum, flag(NDR_PAHEX)] enum { + STYPE_DISKTREE = 0, + STYPE_DISKTREE_TEMPORARY = STYPE_DISKTREE|STYPE_TEMPORARY, + STYPE_DISKTREE_HIDDEN = STYPE_DISKTREE|STYPE_HIDDEN, + STYPE_PRINTQ = 1, + STYPE_PRINTQ_TEMPORARY = STYPE_PRINTQ|STYPE_TEMPORARY, + STYPE_PRINTQ_HIDDEN = STYPE_PRINTQ|STYPE_HIDDEN, + STYPE_DEVICE = 2, /* Serial device */ + STYPE_DEVICE_TEMPORARY = STYPE_DEVICE|STYPE_TEMPORARY, + STYPE_DEVICE_HIDDEN = STYPE_DEVICE|STYPE_HIDDEN, + STYPE_IPC = 3, /* Interprocess communication (IPC) */ + STYPE_IPC_TEMPORARY = STYPE_IPC|STYPE_TEMPORARY, + STYPE_IPC_HIDDEN = STYPE_IPC|STYPE_HIDDEN, + STYPE_CLUSTER_FS = 0x02000000, /* A cluster share */ + STYPE_CLUSTER_FS_TEMPORARY = STYPE_CLUSTER_FS|STYPE_TEMPORARY, + STYPE_CLUSTER_FS_HIDDEN = STYPE_CLUSTER_FS|STYPE_HIDDEN, + STYPE_CLUSTER_SOFS = 0x04000000, /* A Scale-Out cluster share */ + STYPE_CLUSTER_SOFS_TEMPORARY = STYPE_CLUSTER_SOFS|STYPE_TEMPORARY, + STYPE_CLUSTER_SOFS_HIDDEN = STYPE_CLUSTER_SOFS|STYPE_HIDDEN, + STYPE_CLUSTER_DFS = 0x08000000, /* A DFS share in a cluster */ + STYPE_CLUSTER_DFS_TEMPORARY = STYPE_CLUSTER_DFS|STYPE_TEMPORARY, + STYPE_CLUSTER_DFS_HIDDEN = STYPE_CLUSTER_DFS|STYPE_HIDDEN + } srvsvc_ShareType; + + typedef struct { + [string,charset(UTF16)] uint16 *name; + } srvsvc_NetShareInfo0; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetShareInfo0 *array; + } srvsvc_NetShareCtr0; + + typedef struct { + [string,charset(UTF16)] uint16 *name; + srvsvc_ShareType type; + [string,charset(UTF16)] uint16 *comment; + } srvsvc_NetShareInfo1; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetShareInfo1 *array; + } srvsvc_NetShareCtr1; + + typedef struct { + [string,charset(UTF16)] uint16 *name; + srvsvc_ShareType type; + [string,charset(UTF16)] uint16 *comment; + uint32 permissions; + uint32 max_users; + uint32 current_users; + [string,charset(UTF16)] uint16 *path; + [string,charset(UTF16)] uint16 *password; + } srvsvc_NetShareInfo2; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetShareInfo2 *array; + } srvsvc_NetShareCtr2; + + typedef struct { + [string,charset(UTF16)] uint16 *name; + srvsvc_ShareType type; + [string,charset(UTF16)] uint16 *comment; + uint32 csc_policy; + } srvsvc_NetShareInfo501; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetShareInfo501 *array; + } srvsvc_NetShareCtr501; + + typedef struct { + [string,charset(UTF16)] uint16 *name; + srvsvc_ShareType type; + [string,charset(UTF16)] uint16 *comment; + uint32 permissions; + uint32 max_users; + uint32 current_users; + [string,charset(UTF16)] uint16 *path; + [string,charset(UTF16)] uint16 *password; + sec_desc_buf sd_buf; + } srvsvc_NetShareInfo502; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetShareInfo502 *array; + } srvsvc_NetShareCtr502; + + typedef struct { + [string,charset(UTF16)] uint16 *comment; + } srvsvc_NetShareInfo1004; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetShareInfo1004 *array; + } srvsvc_NetShareCtr1004; + + const uint32 SHARE_1005_CSC_CACHE_MANUAL_REINT = 0x00000000; + + typedef bitmap { + SHARE_1005_IN_DFS = 0x00000001, + SHARE_1005_DFS_ROOT = 0x00000002, + SHARE_1005_CSC_CACHE_AUTO_REINT = 0x00000010, + SHARE_1005_CSC_CACHE_VDO = 0x00000020, + SHARE_1005_CSC_CACHE_NONE = 0x00000030, + SHARE_1005_RESTRICT_EXCLUSIVE_OPENS = 0x00000100, + SHARE_1005_FORCE_SHARED_DELETE = 0x00000200, + SHARE_1005_ALLOW_NAMESPACE_CACHING = 0x00000400, + SHARE_1005_ACCESS_BASED_DIRECTORY_ENUM = 0x00000800, + SHARE_1005_FORCE_LEVELII_OPLOCK = 0x00001000, + SHARE_1005_ENABLE_HASH = 0x00002000, + SHARE_1005_ENABLE_CA = 0x00004000, + SHARE_1005_ENCRYPT_DATA = 0x00008000 + } NetShareInfo1005Flags; + + const uint32 SHARE_1005_CSC_POLICY_MASK = 0x00000030; + const uint32 SHARE_1005_CSC_POLICY_SHIFT = 4; + + typedef struct { + NetShareInfo1005Flags dfs_flags; + } srvsvc_NetShareInfo1005; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetShareInfo1005 *array; + } srvsvc_NetShareCtr1005; + + typedef struct { + uint32 max_users; + } srvsvc_NetShareInfo1006; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetShareInfo1006 *array; + } srvsvc_NetShareCtr1006; + + typedef struct { + uint32 flags; + [string,charset(UTF16)] uint16 *alternate_directory_name; + } srvsvc_NetShareInfo1007; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetShareInfo1007 *array; + } srvsvc_NetShareCtr1007; + + typedef struct { + uint32 count; + [size_is(count)] sec_desc_buf *array; + } srvsvc_NetShareCtr1501; + + typedef union { + [case(0)] srvsvc_NetShareInfo0 *info0; + [case(1)] srvsvc_NetShareInfo1 *info1; + [case(2)] srvsvc_NetShareInfo2 *info2; + [case(501)] srvsvc_NetShareInfo501 *info501; + [case(502)] srvsvc_NetShareInfo502 *info502; + [case(1004)] srvsvc_NetShareInfo1004 *info1004; + [case(1005)] srvsvc_NetShareInfo1005 *info1005; + [case(1006)] srvsvc_NetShareInfo1006 *info1006; + [case(1007)] srvsvc_NetShareInfo1007 *info1007; + [case(1501)] sec_desc_buf *info1501; + [default] ; + } srvsvc_NetShareInfo; + + typedef union { + [case(0)] srvsvc_NetShareCtr0 *ctr0; + [case(1)] srvsvc_NetShareCtr1 *ctr1; + [case(2)] srvsvc_NetShareCtr2 *ctr2; + [case(501)] srvsvc_NetShareCtr501 *ctr501; + [case(502)] srvsvc_NetShareCtr502 *ctr502; + [case(1004)] srvsvc_NetShareCtr1004 *ctr1004; + [case(1005)] srvsvc_NetShareCtr1005 *ctr1005; + [case(1006)] srvsvc_NetShareCtr1006 *ctr1006; + [case(1007)] srvsvc_NetShareCtr1007 *ctr1007; + [case(1501)] srvsvc_NetShareCtr1501 *ctr1501; + [default] ; + } srvsvc_NetShareCtr; + + typedef struct { + uint32 level; + [switch_is(level)] srvsvc_NetShareCtr ctr; + } srvsvc_NetShareInfoCtr; + + /******************/ + /* Function: 0x0e */ + WERROR srvsvc_NetShareAdd( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] uint32 level, + [in,ref,switch_is(level)] srvsvc_NetShareInfo *info, + [in,out,unique] uint32 *parm_error + ); + + /******************/ + /* Function: 0x0f */ + WERROR srvsvc_NetShareEnumAll ( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,out,ref] srvsvc_NetShareInfoCtr *info_ctr, + [in] uint32 max_buffer, + [out,ref] uint32 *totalentries, + [in,out,unique] uint32 *resume_handle + ); + + /******************/ + /* Function: 0x10 */ + WERROR srvsvc_NetShareGetInfo( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 share_name[], + [in] uint32 level, + [out,ref,switch_is(level)] srvsvc_NetShareInfo *info + ); + + /******************/ + /* Function: 0x11 */ + WERROR srvsvc_NetShareSetInfo( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 share_name[], + [in] uint32 level, + [in,ref,switch_is(level)] srvsvc_NetShareInfo *info, + [in,out,unique] uint32 *parm_error + ); + + /******************/ + /* Function: 0x12 */ + WERROR srvsvc_NetShareDel( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 share_name[], + [in] uint32 reserved + ); + + /******************/ + /* Function: 0x13 */ + WERROR srvsvc_NetShareDelSticky( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 share_name[], + [in] uint32 reserved + ); + + /******************/ + /* Function: 0x14 */ + WERROR srvsvc_NetShareCheck( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 device_name[], + [out,ref] srvsvc_ShareType *type + ); + +/**************************/ +/* srvsvc_NetSrv */ +/**************************/ + typedef [public,v1_enum] enum { + PLATFORM_ID_DOS = 300, + PLATFORM_ID_OS2 = 400, + PLATFORM_ID_NT = 500, + PLATFORM_ID_OSF = 600, + PLATFORM_ID_VMS = 700 + } srvsvc_PlatformId; + + typedef [public] struct { + srvsvc_PlatformId platform_id; + [string,charset(UTF16)] uint16 *server_name; + } srvsvc_NetSrvInfo100; + + typedef [public] struct { + srvsvc_PlatformId platform_id; + [string,charset(UTF16)] uint16 *server_name; + uint32 version_major; + uint32 version_minor; + svcctl_ServerType server_type; + [string,charset(UTF16)] uint16 *comment; + } srvsvc_NetSrvInfo101; + + typedef struct { + srvsvc_PlatformId platform_id; + [string,charset(UTF16)] uint16 *server_name; + uint32 version_major; + uint32 version_minor; + svcctl_ServerType server_type; + [string,charset(UTF16)] uint16 *comment; + uint32 users; + uint32 disc; + uint32 hidden; + uint32 announce; + uint32 anndelta; + uint32 licenses; + [string,charset(UTF16)] uint16 *userpath; + } srvsvc_NetSrvInfo102; + + typedef struct { + uint32 ulist_mtime; + uint32 glist_mtime; + uint32 alist_mtime; + [string,charset(UTF16)] uint16 *alerts; + uint32 security; + uint32 numadmin; + uint32 lanmask; + [string,charset(UTF16)] uint16 *guestaccount; + uint32 chdevs; + uint32 chdevqs; + uint32 chdevjobs; + uint32 connections; + uint32 shares; + uint32 openfiles; + uint32 sessopen; + uint32 sesssvc; + uint32 sessreqs; + uint32 opensearch; + uint32 activelocks; + uint32 numreqbufs; + uint32 sizereqbufs; + uint32 numbigbufs; + uint32 numfiletasks; + uint32 alertsched; + uint32 erroralert; + uint32 logonalert; + uint32 accessalert; + uint32 diskalert; + uint32 netioalert; + uint32 maxaudits; + [string,charset(UTF16)] uint16 *srvheuristics; + } srvsvc_NetSrvInfo402; + + typedef struct { + uint32 ulist_mtime; + uint32 glist_mtime; + uint32 alist_mtime; + [string,charset(UTF16)] uint16 *alerts; + uint32 security; + uint32 numadmin; + uint32 lanmask; + [string,charset(UTF16)] uint16 *guestaccount; + uint32 chdevs; + uint32 chdevqs; + uint32 chdevjobs; + uint32 connections; + uint32 shares; + uint32 openfiles; + uint32 sessopen; + uint32 sesssvc; + uint32 sessreqs; + uint32 opensearch; + uint32 activelocks; + uint32 numreqbufs; + uint32 sizereqbufs; + uint32 numbigbufs; + uint32 numfiletasks; + uint32 alertsched; + uint32 erroralert; + uint32 logonalert; + uint32 accessalert; + uint32 diskalert; + uint32 netioalert; + uint32 maxaudits; + [string,charset(UTF16)] uint16 *srvheuristics; + uint32 auditedevents; + uint32 auditprofile; + [string,charset(UTF16)] uint16 *autopath; + } srvsvc_NetSrvInfo403; + + typedef struct { + uint32 sessopen; + uint32 sesssvc; + uint32 opensearch; + uint32 sizereqbufs; + uint32 initworkitems; + uint32 maxworkitems; + uint32 rawworkitems; + uint32 irpstacksize; + uint32 maxrawbuflen; + uint32 sessusers; + uint32 sessconns; + uint32 maxpagedmemoryusage; + uint32 maxnonpagedmemoryusage; + uint32 enablesoftcompat; + uint32 enableforcedlogoff; + uint32 timesource; + uint32 acceptdownlevelapis; + uint32 lmannounce; + } srvsvc_NetSrvInfo502; + + typedef struct{ + uint32 sessopen; + uint32 sesssvc; + uint32 opensearch; + uint32 sizereqbufs; + uint32 initworkitems; + uint32 maxworkitems; + uint32 rawworkitems; + uint32 irpstacksize; + uint32 maxrawbuflen; + uint32 sessusers; + uint32 sessconns; + uint32 maxpagedmemoryusage; + uint32 maxnonpagedmemoryusage; + uint32 enablesoftcompat; + uint32 enableforcedlogoff; + uint32 timesource; + uint32 acceptdownlevelapis; + uint32 lmannounce; + [string,charset(UTF16)] uint16 *domain; + uint32 maxcopyreadlen; + uint32 maxcopywritelen; + uint32 minkeepsearch; + uint32 maxkeepsearch; + uint32 minkeepcomplsearch; + uint32 maxkeepcomplsearch; + uint32 threadcountadd; + uint32 numlockthreads; + uint32 scavtimeout; + uint32 minrcvqueue; + uint32 minfreeworkitems; + uint32 xactmemsize; + uint32 threadpriority; + uint32 maxmpxct; + uint32 oplockbreakwait; + uint32 oplockbreakresponsewait; + uint32 enableoplocks; + uint32 enableoplockforceclose; + uint32 enablefcbopens; + uint32 enableraw; + uint32 enablesharednetdrives; + uint32 minfreeconnections; + uint32 maxfreeconnections; + } srvsvc_NetSrvInfo503; + + typedef struct{ + uint32 sessopen; + uint32 sesssvc; + uint32 opensearch; + uint32 sizereqbufs; + uint32 initworkitems; + uint32 maxworkitems; + uint32 rawworkitems; + uint32 irpstacksize; + uint32 maxrawbuflen; + uint32 sessusers; + uint32 sessconns; + uint32 maxpagedmemoryusage; + uint32 maxnonpagedmemoryusage; + uint32 enablesoftcompat; + uint32 enableforcedlogoff; + uint32 timesource; + uint32 acceptdownlevelapis; + uint32 lmannounce; + [string,charset(UTF16)] uint16 *domain; + uint32 maxcopyreadlen; + uint32 maxcopywritelen; + uint32 minkeepsearch; + uint32 minkeepcomplsearch; + uint32 maxkeepcomplsearch; + uint32 threadcountadd; + uint32 numlockthreads; + uint32 scavtimeout; + uint32 minrcvqueue; + uint32 minfreeworkitems; + uint32 xactmemsize; + uint32 threadpriority; + uint32 maxmpxct; + uint32 oplockbreakwait; + uint32 oplockbreakresponsewait; + uint32 enableoplocks; + uint32 enableoplockforceclose; + uint32 enablefcbopens; + uint32 enableraw; + uint32 enablesharednetdrives; + uint32 minfreeconnections; + uint32 maxfreeconnections; + uint32 initsesstable; + uint32 initconntable; + uint32 initfiletable; + uint32 initsearchtable; + uint32 alertsched; + uint32 errortreshold; + uint32 networkerrortreshold; + uint32 diskspacetreshold; + uint32 reserved; + uint32 maxlinkdelay; + uint32 minlinkthroughput; + uint32 linkinfovalidtime; + uint32 scavqosinfoupdatetime; + uint32 maxworkitemidletime; + } srvsvc_NetSrvInfo599; + + typedef struct{ + [string,charset(UTF16)] uint16 *comment; + } srvsvc_NetSrvInfo1005; + + typedef struct{ + uint32 disc; + } srvsvc_NetSrvInfo1010; + + typedef struct{ + uint32 hidden; + } srvsvc_NetSrvInfo1016; + + typedef struct{ + uint32 announce; + } srvsvc_NetSrvInfo1017; + + typedef struct{ + uint32 anndelta; + } srvsvc_NetSrvInfo1018; + + typedef struct{ + uint32 users; + } srvsvc_NetSrvInfo1107; + + typedef struct{ + uint32 sessopens; + } srvsvc_NetSrvInfo1501; + + typedef struct{ + uint32 sessvcs; + } srvsvc_NetSrvInfo1502; + + typedef struct{ + uint32 opensearch; + } srvsvc_NetSrvInfo1503; + + typedef struct{ + uint32 maxworkitems; + } srvsvc_NetSrvInfo1506; + + typedef struct{ + uint32 maxrawbuflen; + } srvsvc_NetSrvInfo1509; + + typedef struct{ + uint32 sessusers; + } srvsvc_NetSrvInfo1510; + + typedef struct{ + uint32 sesscons; + } srvsvc_NetSrvInfo1511; + + typedef struct{ + uint32 maxnonpagedmemoryusage; + } srvsvc_NetSrvInfo1512; + + typedef struct{ + uint32 maxpagedmemoryusage; + } srvsvc_NetSrvInfo1513; + + typedef struct{ + uint32 enablesoftcompat; + } srvsvc_NetSrvInfo1514; + + typedef struct{ + uint32 enableforcedlogoff; + } srvsvc_NetSrvInfo1515; + + typedef struct{ + uint32 timesource; + } srvsvc_NetSrvInfo1516; + + typedef struct{ + uint32 lmannounce; + } srvsvc_NetSrvInfo1518; + + typedef struct{ + uint32 maxcopyreadlen; + } srvsvc_NetSrvInfo1520; + + typedef struct{ + uint32 maxcopywritelen; + } srvsvc_NetSrvInfo1521; + + typedef struct{ + uint32 minkeepsearch; + } srvsvc_NetSrvInfo1522; + + typedef struct{ + uint32 maxkeepsearch; + } srvsvc_NetSrvInfo1523; + + typedef struct{ + uint32 minkeepcomplsearch; + } srvsvc_NetSrvInfo1524; + + typedef struct{ + uint32 maxkeepcomplsearch; + } srvsvc_NetSrvInfo1525; + + typedef struct{ + uint32 scavtimeout; + } srvsvc_NetSrvInfo1528; + + typedef struct{ + uint32 minrcvqueue; + } srvsvc_NetSrvInfo1529; + + typedef struct{ + uint32 minfreeworkitems; + } srvsvc_NetSrvInfo1530; + + typedef struct{ + uint32 maxmpxct; + } srvsvc_NetSrvInfo1533; + + typedef struct{ + uint32 oplockbreakwait; + } srvsvc_NetSrvInfo1534; + + typedef struct{ + uint32 oplockbreakresponsewait; + } srvsvc_NetSrvInfo1535; + + typedef struct{ + uint32 enableoplocks; + } srvsvc_NetSrvInfo1536; + + typedef struct{ + uint32 enableoplockforceclose; + } srvsvc_NetSrvInfo1537; + + typedef struct{ + uint32 enablefcbopens; + } srvsvc_NetSrvInfo1538; + + typedef struct{ + uint32 enableraw; + } srvsvc_NetSrvInfo1539; + + typedef struct{ + uint32 enablesharednetdrives; + } srvsvc_NetSrvInfo1540; + + typedef struct{ + uint32 minfreeconnections; + } srvsvc_NetSrvInfo1541; + + typedef struct{ + uint32 maxfreeconnections; + } srvsvc_NetSrvInfo1542; + + typedef struct{ + uint32 initsesstable; + } srvsvc_NetSrvInfo1543; + + typedef struct{ + uint32 initconntable; + } srvsvc_NetSrvInfo1544; + + typedef struct{ + uint32 initfiletable; + } srvsvc_NetSrvInfo1545; + + typedef struct{ + uint32 initsearchtable; + } srvsvc_NetSrvInfo1546; + + typedef struct{ + uint32 alertsched; + } srvsvc_NetSrvInfo1547; + + typedef struct{ + uint32 errortreshold; + } srvsvc_NetSrvInfo1548; + + typedef struct{ + uint32 networkerrortreshold; + } srvsvc_NetSrvInfo1549; + + typedef struct{ + uint32 diskspacetreshold; + } srvsvc_NetSrvInfo1550; + + typedef struct{ + uint32 maxlinkdelay; + } srvsvc_NetSrvInfo1552; + + typedef struct{ + uint32 minlinkthroughput; + } srvsvc_NetSrvInfo1553; + + typedef struct{ + uint32 linkinfovalidtime; + } srvsvc_NetSrvInfo1554; + + typedef struct{ + uint32 scavqosinfoupdatetime; + } srvsvc_NetSrvInfo1555; + + typedef struct{ + uint32 maxworkitemidletime; + } srvsvc_NetSrvInfo1556; + + + typedef union{ + [case(100)] srvsvc_NetSrvInfo100 *info100; + [case(101)] srvsvc_NetSrvInfo101 *info101; + [case(102)] srvsvc_NetSrvInfo102 *info102; + [case(402)] srvsvc_NetSrvInfo402 *info402; + [case(403)] srvsvc_NetSrvInfo403 *info403; + [case(502)] srvsvc_NetSrvInfo502 *info502; + [case(503)] srvsvc_NetSrvInfo503 *info503; + [case(599)] srvsvc_NetSrvInfo599 *info599; + [case(1005)] srvsvc_NetSrvInfo1005 *info1005; + [case(1010)] srvsvc_NetSrvInfo1010 *info1010; + [case(1016)] srvsvc_NetSrvInfo1016 *info1016; + [case(1017)] srvsvc_NetSrvInfo1017 *info1017; + [case(1018)] srvsvc_NetSrvInfo1018 *info1018; + [case(1107)] srvsvc_NetSrvInfo1107 *info1107; + [case(1501)] srvsvc_NetSrvInfo1501 *info1501; + [case(1502)] srvsvc_NetSrvInfo1502 *info1502; + [case(1503)] srvsvc_NetSrvInfo1503 *info1503; + [case(1506)] srvsvc_NetSrvInfo1506 *info1506; + [case(1509)] srvsvc_NetSrvInfo1509 *info1509; + [case(1510)] srvsvc_NetSrvInfo1510 *info1510; + [case(1511)] srvsvc_NetSrvInfo1511 *info1511; + [case(1512)] srvsvc_NetSrvInfo1512 *info1512; + [case(1513)] srvsvc_NetSrvInfo1513 *info1513; + [case(1514)] srvsvc_NetSrvInfo1514 *info1514; + [case(1515)] srvsvc_NetSrvInfo1515 *info1515; + [case(1516)] srvsvc_NetSrvInfo1516 *info1516; + [case(1518)] srvsvc_NetSrvInfo1518 *info1518; + [case(1520)] srvsvc_NetSrvInfo1520 *info1520; + [case(1521)] srvsvc_NetSrvInfo1521 *info1521; + [case(1522)] srvsvc_NetSrvInfo1522 *info1522; + [case(1523)] srvsvc_NetSrvInfo1523 *info1523; + [case(1524)] srvsvc_NetSrvInfo1524 *info1524; + [case(1525)] srvsvc_NetSrvInfo1525 *info1525; + [case(1528)] srvsvc_NetSrvInfo1528 *info1528; + [case(1529)] srvsvc_NetSrvInfo1529 *info1529; + [case(1530)] srvsvc_NetSrvInfo1530 *info1530; + [case(1533)] srvsvc_NetSrvInfo1533 *info1533; + [case(1534)] srvsvc_NetSrvInfo1534 *info1534; + [case(1535)] srvsvc_NetSrvInfo1535 *info1535; + [case(1536)] srvsvc_NetSrvInfo1536 *info1536; + [case(1537)] srvsvc_NetSrvInfo1537 *info1537; + [case(1538)] srvsvc_NetSrvInfo1538 *info1538; + [case(1539)] srvsvc_NetSrvInfo1539 *info1539; + [case(1540)] srvsvc_NetSrvInfo1540 *info1540; + [case(1541)] srvsvc_NetSrvInfo1541 *info1541; + [case(1542)] srvsvc_NetSrvInfo1542 *info1542; + [case(1543)] srvsvc_NetSrvInfo1543 *info1543; + [case(1544)] srvsvc_NetSrvInfo1544 *info1544; + [case(1545)] srvsvc_NetSrvInfo1545 *info1545; + [case(1546)] srvsvc_NetSrvInfo1546 *info1546; + [case(1547)] srvsvc_NetSrvInfo1547 *info1547; + [case(1548)] srvsvc_NetSrvInfo1548 *info1548; + [case(1549)] srvsvc_NetSrvInfo1549 *info1549; + [case(1550)] srvsvc_NetSrvInfo1550 *info1550; + [case(1552)] srvsvc_NetSrvInfo1552 *info1552; + [case(1553)] srvsvc_NetSrvInfo1553 *info1553; + [case(1554)] srvsvc_NetSrvInfo1554 *info1554; + [case(1555)] srvsvc_NetSrvInfo1555 *info1555; + [case(1556)] srvsvc_NetSrvInfo1556 *info1556; + [default]; + } srvsvc_NetSrvInfo; + + /******************/ + /* Function: 0x15 */ + WERROR srvsvc_NetSrvGetInfo( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] uint32 level, + [out,ref,switch_is(level)] srvsvc_NetSrvInfo *info + ); + + /******************/ + /* Function: 0x16 */ + WERROR srvsvc_NetSrvSetInfo( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] uint32 level, + [in,ref,switch_is(level)] srvsvc_NetSrvInfo *info, + [in,out,unique] uint32 *parm_error + ); + +/**************************/ +/* srvsvc_NetDisk */ +/**************************/ + typedef struct { + [charset(UTF16),string] uint16 disk[3]; + } srvsvc_NetDiskInfo0; + + typedef struct { + uint32 count; + [size_is(count), length_is(count)] srvsvc_NetDiskInfo0 *disks; + } srvsvc_NetDiskInfo; + + /******************/ + /* Function: 0x17 */ + WERROR srvsvc_NetDiskEnum( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] uint32 level, + [in,out,ref] srvsvc_NetDiskInfo *info, + [in] uint32 maxlen, + [out,ref] uint32 *totalentries, + [in,out,unique] uint32 *resume_handle + ); + +/**************************/ +/* srvsvc_NetStatistics */ +/**************************/ + typedef struct { + uint32 start; + uint32 fopens; + uint32 devopens; + uint32 jobsqueued; + uint32 sopens; + uint32 stimeouts; + uint32 serrorout; + uint32 pwerrors; + uint32 permerrors; + uint32 syserrors; + uint32 bytessent_low; + uint32 bytessent_high; + uint32 bytesrcvd_low; + uint32 bytesrcvd_high; + uint32 avresponse; + uint32 reqbufneed; + uint32 bigbufneed; + } srvsvc_Statistics; + + /******************/ + /* Function: 0x18 */ + WERROR srvsvc_NetServerStatisticsGet( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,unique] [string,charset(UTF16)] uint16 *service, + [in] uint32 level, + [in] uint32 options, + [out,ref] srvsvc_Statistics **stats + ); + +/**************************/ +/* srvsvc_NetTransport */ +/**************************/ + typedef struct { + uint32 vcs; + [string,charset(UTF16)] uint16 *name; + [size_is(addr_len)] uint8 *addr; + uint32 addr_len; + [string,charset(UTF16)] uint16 *net_addr; + } srvsvc_NetTransportInfo0; + + /******************/ + /* Function: 0x19 */ + WERROR srvsvc_NetTransportAdd( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] uint32 level, + [in,switch_is(level)] srvsvc_NetTransportInfo info + ); + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetTransportInfo0 *array; + } srvsvc_NetTransportCtr0; + + typedef struct { + uint32 vcs; + [string,charset(UTF16)] uint16 *name; + [size_is(addr_len)] uint8 *addr; + uint32 addr_len; + [string,charset(UTF16)] uint16 *net_addr; + [string,charset(UTF16)] uint16 *domain; + } srvsvc_NetTransportInfo1; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetTransportInfo1 *array; + } srvsvc_NetTransportCtr1; + + typedef struct { + uint32 vcs; + [string,charset(UTF16)] uint16 *name; + [size_is(addr_len)] uint8 *addr; + uint32 addr_len; + [string,charset(UTF16)] uint16 *net_addr; + [string,charset(UTF16)] uint16 *domain; + uint32 unknown; + } srvsvc_NetTransportInfo2; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetTransportInfo2 *array; + } srvsvc_NetTransportCtr2; + + typedef struct { + uint32 vcs; + [string,charset(UTF16)] uint16 *name; + [size_is(addr_len)] uint8 *addr; + uint32 addr_len; + [string,charset(UTF16)] uint16 *net_addr; + [string,charset(UTF16)] uint16 *domain; + uint32 unknown1; + uint32 unknown2; + uint8 unknown3[256]; + } srvsvc_NetTransportInfo3; + + typedef struct { + uint32 count; + [size_is(count)] srvsvc_NetTransportInfo3 *array; + } srvsvc_NetTransportCtr3; + + typedef union { + [case(0)] srvsvc_NetTransportCtr0 *ctr0; + [case(1)] srvsvc_NetTransportCtr1 *ctr1; + [case(2)] srvsvc_NetTransportCtr2 *ctr2; + [case(3)] srvsvc_NetTransportCtr3 *ctr3; + [default]; + } srvsvc_NetTransportCtr; + + typedef struct { + uint32 level; + [switch_is(level)] srvsvc_NetTransportCtr ctr; + } srvsvc_NetTransportInfoCtr; + + /******************/ + /* Function: 0x1a */ + WERROR srvsvc_NetTransportEnum( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,out,ref] srvsvc_NetTransportInfoCtr *transports, + [in] uint32 max_buffer, + [out,ref] uint32 *totalentries, + [in,out,unique] uint32 *resume_handle + ); + + /******************/ + /* Function: 0x1b */ + WERROR srvsvc_NetTransportDel( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] uint32 level, + [in] srvsvc_NetTransportInfo0 *info0 + ); + +/**************************/ +/* srvsvc_NetRemoteTOD */ +/**************************/ + typedef struct { + uint32 elapsed; /* time(NULL) */ + uint32 msecs; /* milliseconds till system reboot (uptime) */ + uint32 hours; + uint32 mins; + uint32 secs; + uint32 hunds; + int32 timezone; /* in minutes */ + uint32 tinterval; /* clock tick interval in 0.0001 second units; 310 on windows */ + uint32 day; + uint32 month; + uint32 year; + uint32 weekday; + } srvsvc_NetRemoteTODInfo; + + /******************/ + /* Function: 0x1c */ + WERROR srvsvc_NetRemoteTOD( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [out,ref] srvsvc_NetRemoteTODInfo **info + ); + +/**************************/ +/* srvsvc_NetServiceBits */ +/**************************/ + /******************/ + /* Function: 0x1d */ + WERROR srvsvc_NetSetServiceBits( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,unique] [string,charset(UTF16)] uint16 *transport, + [in] uint32 servicebits, + [in] uint32 updateimmediately + ); + +/**************************/ +/* srvsvc_NetPath */ +/**************************/ + /******************/ + /* Function: 0x1e */ + WERROR srvsvc_NetPathType( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 path[], + [in] uint32 pathflags, + [out,ref] uint32 *pathtype + ); + + /******************/ + /* Function: 0x1f */ + WERROR srvsvc_NetPathCanonicalize( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 path[], + [out] [size_is(maxbuf)] uint8 can_path[], + [in] uint32 maxbuf, + [in] [string,charset(UTF16)] uint16 prefix[], + [in,out,ref] uint32 *pathtype, + [in] uint32 pathflags + ); + + /******************/ + /* Function: 0x20 */ + WERROR srvsvc_NetPathCompare( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 path1[], + [in] [string,charset(UTF16)] uint16 path2[], + [in] uint32 pathtype, + [in] uint32 pathflags + ); + +/**************************/ +/* srvsvc_NetName */ +/**************************/ + /******************/ + /* Function: 0x21 */ + WERROR srvsvc_NetNameValidate( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 name[], + [in] uint32 name_type, + [in] uint32 flags + ); + + /******************/ + /* Function: 0x22 */ + WERROR srvsvc_NETRPRNAMECANONICALIZE( + ); + + /******************/ + /* Function: 0x23 */ + WERROR srvsvc_NetPRNameCompare( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] [string,charset(UTF16)] uint16 name1[], + [in] [string,charset(UTF16)] uint16 name2[], + [in] uint32 name_type, + [in] uint32 flags + ); + +/**************************/ +/* srvsvc_NetShare ... */ +/**************************/ + /******************/ + /* Function: 0x24 */ + /* Note, there must be some way to return entries read vs + total entries ... */ + WERROR srvsvc_NetShareEnum( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,out,ref] srvsvc_NetShareInfoCtr *info_ctr, + [in] uint32 max_buffer, + [out,ref] uint32 *totalentries, + [in,out,unique] uint32 *resume_handle + ); + + /******************/ + /* Function: 0x25 */ + WERROR srvsvc_NetShareDelStart( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,unique] [string,charset(UTF16)] uint16 *share, + [in] uint32 reserved, + [out,ref] policy_handle *hnd + ); + + /******************/ + /* Function: 0x26 */ + WERROR srvsvc_NetShareDelCommit( + [in, out,unique] policy_handle *hnd + ); + + /******************/ + /* Function: 0x27 */ + WERROR srvsvc_NetGetFileSecurity( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,unique] [string,charset(UTF16)] uint16 *share, + [in] [string,charset(UTF16)] uint16 file[], + [in] security_secinfo securityinformation, + [out,ref] sec_desc_buf **sd_buf + ); + + /******************/ + /* Function: 0x28 */ + WERROR srvsvc_NetSetFileSecurity( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,unique] [string,charset(UTF16)] uint16 *share, + [in] [string,charset(UTF16)] uint16 file[], + [in] security_secinfo securityinformation, + [in,ref] sec_desc_buf *sd_buf + ); + + + + typedef [switch_type(uint32)] union { + [case(0)] srvsvc_NetTransportInfo0 info0; + [case(1)] srvsvc_NetTransportInfo1 info1; + [case(2)] srvsvc_NetTransportInfo2 info2; + [case(3)] srvsvc_NetTransportInfo3 info3; + } srvsvc_NetTransportInfo; + + /******************/ + /* Function: 0x29 */ + WERROR srvsvc_NetServerTransportAddEx( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in] uint32 level, + [in,switch_is(level)] srvsvc_NetTransportInfo info + ); + + /******************/ + /* Function: 0x2a */ + WERROR srvsvc_NetServerSetServiceBitsEx( + [in,unique] [string,charset(UTF16)] uint16 *server_unc, + [in,unique] [string,charset(UTF16)] uint16 *emulated_server_unc, + [in,unique] [string,charset(UTF16)] uint16 *transport, + [in] uint32 servicebitsofinterest, + [in] uint32 servicebits, + [in] uint32 updateimmediately + ); + + /******************/ + /* Function: 0x2b */ + WERROR srvsvc_NETRDFSGETVERSION( + ); + + /******************/ + /* Function: 0x2c */ + WERROR srvsvc_NETRDFSCREATELOCALPARTITION( + ); + + /******************/ + /* Function: 0x2d */ + WERROR srvsvc_NETRDFSDELETELOCALPARTITION( + ); + + /******************/ + /* Function: 0x2e */ + WERROR srvsvc_NETRDFSSETLOCALVOLUMESTATE( + ); + + /******************/ + /* Function: 0x2f */ + WERROR srvsvc_NETRDFSSETSERVERINFO( + ); + + /******************/ + /* Function: 0x30 */ + WERROR srvsvc_NETRDFSCREATEEXITPOINT( + ); + + /******************/ + /* Function: 0x31 */ + WERROR srvsvc_NETRDFSDELETEEXITPOINT( + ); + + /******************/ + /* Function: 0x32 */ + WERROR srvsvc_NETRDFSMODIFYPREFIX( + ); + + /******************/ + /* Function: 0x33 */ + WERROR srvsvc_NETRDFSFIXLOCALVOLUME( + ); + + /******************/ + /* Function: 0x34 */ + WERROR srvsvc_NETRDFSMANAGERREPORTSITEINFO( + ); + + /******************/ + /* Function: 0x35 */ + WERROR srvsvc_NETRSERVERTRANSPORTDELEX( + ); +} diff --git a/epan/dissectors/pidl/svcctl/svcctl.cnf b/epan/dissectors/pidl/svcctl/svcctl.cnf new file mode 100644 index 00000000..ce624d55 --- /dev/null +++ b/epan/dissectors/pidl/svcctl/svcctl.cnf @@ -0,0 +1,127 @@ +# Conformance file for svcctl + +HF_FIELD hf_svcctl_service_buffer_size "Buffer Size" "svcctl.services.buffer_size" FT_UINT32 BASE_DEC NULL 0 NULL HFILL +HF_FIELD hf_svcctl_service_referent_id "Referent ID(offset)" "svcctl.ENUM_SERVICE_STATUSW.referent_id" FT_UINT32 BASE_DEC NULL 0 NULL HFILL + +MANUAL svcctl_dissect_EnumServicesStatusW_response + +ETT_FIELD ett_svcctl_service +ETT_FIELD ett_svcctl_service_name +ETT_FIELD ett_svcctl_display_name + +NOEMIT svcctl_dissect_element_EnumServicesStatusW_services +NOEMIT svcctl_dissect_element_EnumServicesStatusW_bytes_needed +NOEMIT svcctl_dissect_element_EnumServicesStatusW_services_returned + +CODE START + +/* ENUM_SERVICE_STATUSW Caveats + https://github.com/fortra/impacket/blob/4888172ce638910104da4bda2c3301c24e17564c/impacket/dcerpc/v5/scmr.py#L1274 +*/ +static int +svcctl_dissect_struct_ENUM_SERVICE_STATUSW_ptr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info* di, guint8 *drep, int hf_index, gint starting_offset); +static int +svcctl_dissect_struct_ENUM_SERVICE_STATUSW_ptr(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info* di, guint8 *drep, int hf_index, gint starting_offset) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + proto_tree *tr = NULL; + int old_offset; + guint32 _referent_id = 0; + + ALIGN_TO_5_BYTES; + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_svcctl_ENUM_SERVICE_STATUSW); + } + + // Service Name + tr = proto_tree_add_subtree(tree, tvb, offset, 4, ett_svcctl_service_name, NULL, "Pointer to Service Name"); + offset = PIDL_dissect_uint32_val(tvb, offset, pinfo, tr, di, drep, hf_svcctl_service_referent_id, 0, &_referent_id); + dissect_null_term_wstring(tvb, starting_offset + _referent_id, pinfo, tr, drep, hf_svcctl_ENUM_SERVICE_STATUSW_service_name , 0); + + // Display Name + tr = proto_tree_add_subtree(tree, tvb, offset, 4, ett_svcctl_display_name, NULL, "Pointer to Display Name"); + offset = PIDL_dissect_uint32_val(tvb, offset, pinfo, tr, di, drep, hf_svcctl_service_referent_id, 0, &_referent_id); + dissect_null_term_wstring(tvb, starting_offset + _referent_id, pinfo, tr, drep, hf_svcctl_ENUM_SERVICE_STATUSW_display_name , 0); + + // Status + offset = svcctl_dissect_element_ENUM_SERVICE_STATUSW_status(tvb, offset, pinfo, tree, di, drep); + + proto_item_set_len(item, offset-old_offset); + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_5_BYTES; + } + + return offset; +} + +/* REnumServicesStatusW + https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/22b4ff3d-29c6-481f-b598-8ce66a46944a +*/ +static int +svcctl_dissect_EnumServicesStatusW_response(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + guint32 status; + guint32 services_returned= 0; + proto_item *item; + proto_tree *tr = NULL; + gint services_buffer_offset; + gint payload_starting_offset = offset; + guint64 buffer_size = 0; + + ALIGN_TO_5_BYTES + + di->dcerpc_procedure_name="EnumServicesStatusW"; + + tr = proto_tree_add_subtree(tree, tvb, offset, 0, ett_svcctl_service, &item, "Pointer to Services Status"); + + // Services Buffer Size + offset = dissect_ndr_uint3264(tvb, offset, pinfo, tr, di, drep, hf_svcctl_service_buffer_size, &buffer_size); + services_buffer_offset = offset; + + offset += (int)buffer_size; + + proto_item_set_len(item, offset-payload_starting_offset); + + ALIGN_TO_4_BYTES + + // Bytes Needed + offset = PIDL_dissect_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_svcctl_EnumServicesStatusW_bytes_needed, 0); + + // Services Returned + offset = PIDL_dissect_uint32_val( tvb, offset, pinfo, tree, di, drep + , hf_svcctl_svcctl_EnumServicesStatusW_services_returned + , 0, &services_returned); + + // Services + if (services_returned > 0){ + payload_starting_offset = services_buffer_offset; + for(unsigned idx = 0; idx < services_returned ; ++idx){ + services_buffer_offset = svcctl_dissect_struct_ENUM_SERVICE_STATUSW_ptr( tvb, services_buffer_offset + , pinfo, tr, di, drep + , hf_svcctl_svcctl_EnumDependentServicesW_service_status + , payload_starting_offset); + } + dissect_deferred_pointers(pinfo, tvb, services_buffer_offset, di, drep); + } + + // Resume Index + offset = svcctl_dissect_element_EnumServicesStatusW_resume_index(tvb, offset, pinfo, tree, di, drep); + + offset = dissect_deferred_pointers(pinfo, tvb, offset, di, drep); + + // Return status + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_svcctl_werror, &status); + + if (status != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, ", Error: %s", val_to_str(status, WERR_errors, "Unknown DOS error 0x%08x")); + + return offset; +} + +CODE END diff --git a/epan/dissectors/pidl/svcctl/svcctl.idl b/epan/dissectors/pidl/svcctl/svcctl.idl new file mode 100644 index 00000000..b6d2118d --- /dev/null +++ b/epan/dissectors/pidl/svcctl/svcctl.idl @@ -0,0 +1,868 @@ +#include "idl_types.h" + +/* + svcctl interface definitions +*/ +[ uuid("367abb81-9844-35f1-ad32-98f038001003"), + version(2.0), + pointer_default(unique), + endpoint("ncacn_np:[\\pipe\\svcctl]", "ncalrpc:"), + helpstring("Service Control") +] +interface svcctl +{ + typedef bitmap security_secinfo security_secinfo; + + const int MAX_SERVICE_NAME_LENGTH = 256; + const short SC_MAX_DEPEND_SIZE = 4 * 1024; + const short SC_MAX_NAME_LENGTH = MAX_SERVICE_NAME_LENGTH + 1; + const short SC_MAX_PATH_LENGTH = 32 * 1024; + const short SC_MAX_PWD_SIZE = 514; + const short SC_MAX_COMPUTER_NAME_LENGTH = 1024; + const short SC_MAX_ACCOUNT_NAME_LENGTH = 2 * 1024; + const short SC_MAX_COMMENT_LENGTH = 128; + const short SC_MAX_ARGUMENT_LENGTH = 1024; + const short SC_MAX_ARGUMENTS = 1024; + + typedef struct { + uint32 is_locked; + [string,charset(UTF16)] uint16 *lock_owner; + uint32 lock_duration; + } SERVICE_LOCK_STATUS; + + typedef [v1_enum] enum { + SVCCTL_STOPPED = 0x00000001, + SVCCTL_START_PENDING = 0x00000002, + SVCCTL_STOP_PENDING = 0x00000003, + SVCCTL_RUNNING = 0x00000004, + SVCCTL_CONTINUE_PENDING = 0x00000005, + SVCCTL_PAUSE_PENDING = 0x00000006, + SVCCTL_PAUSED = 0x00000007 + } svcctl_ServiceStatus; + + typedef [v1_enum] enum { + SERVICE_TYPE_KERNEL_DRIVER = 0x00000001, + SERVICE_TYPE_FS_DRIVER = 0x00000002, + SERVICE_TYPE_ADAPTER = 0x00000004, + SERVICE_TYPE_RECOGNIZER_DRIVER = 0x00000008, + SERVICE_TYPE_DRIVER=SERVICE_TYPE_KERNEL_DRIVER|SERVICE_TYPE_FS_DRIVER|SERVICE_TYPE_RECOGNIZER_DRIVER, + SERVICE_TYPE_WIN32_OWN_PROCESS = 0x00000010, + SERVICE_TYPE_WIN32_SHARE_PROCESS = 0x00000020, + SERVICE_TYPE_USER_OWN_PROCESS = 0x00000050, + SERVICE_TYPE_USER_SHARE_PROCESS = 0x00000060, + SERVICE_TYPE_WIN32=SERVICE_TYPE_WIN32_OWN_PROCESS|SERVICE_TYPE_WIN32_SHARE_PROCESS, + SERVICE_TYPE_INTERACTIVE_PROCESS = 0x00000100 + } svcctl_ServiceType; + + const int SVCCTL_ACCEPT_NONE = 0x00000000; + + typedef [bitmap32bit] bitmap { + SERVICE_ACCEPT_STOP = 0x00000001, + SERVICE_ACCEPT_PAUSE_CONTINUE = 0x00000002, + SERVICE_ACCEPT_SHUTDOWN = 0x00000004, + SERVICE_ACCEPT_PARAMCHANGE = 0x00000008, + SERVICE_ACCEPT_NETBINDCHANGE = 0x00000010, + SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 0x00000020, + SERVICE_ACCEPT_POWEREVENT = 0x00000040, + SERVICE_ACCEPT_SESSIONCHANGE = 0x00000080, + SERVICE_ACCEPT_PRESHUTDOWN = 0x00000100, + SERVICE_ACCEPT_TIMECHANGE = 0x00000200, + SERVICE_ACCEPT_TRIGGEREVENT = 0x00000400, + SERVICE_ACCEPT_USERMODEREBOOT = 0x00000800 + } svcctl_ControlsAccepted; + + typedef struct { + svcctl_ServiceType type; + svcctl_ServiceStatus state; + svcctl_ControlsAccepted controls_accepted; + WERROR win32_exit_code; + uint32 service_exit_code; + uint32 check_point; + uint32 wait_hint; + } SERVICE_STATUS; + + typedef [v1_enum] enum { + SERVICE_RUNS_IN_NONSYSTEM_ORNOTRUNNING = 0x00000000, + SERVICE_RUNS_IN_SYSTEM_PROCESS = 0x00000001 + } svcctl_ServiceFlags; + + typedef [public] struct { + svcctl_ServiceType type; + svcctl_ServiceStatus state; + svcctl_ControlsAccepted controls_accepted; + WERROR win32_exit_code; + uint32 service_exit_code; + uint32 check_point; + uint32 wait_hint; + uint32 process_id; + svcctl_ServiceFlags service_flags; + } SERVICE_STATUS_PROCESS; + + /* ENUM_SERVICE_STATUSW + https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-scmr/79f17326-c138-4fbc-8170-5c11c4b3ca79 + */ + typedef [public,gensize] struct { + nstring *service_name; + nstring *display_name; + SERVICE_STATUS status; + } ENUM_SERVICE_STATUSW; + + typedef [public,gensize] struct { + astring *service_name; + astring *display_name; + SERVICE_STATUS status; + } ENUM_SERVICE_STATUSA; + + /* Service Controls + https://learn.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-controlservice + Range 128 to 255 - User-defined control code + */ + typedef [v1_enum] enum { + SVCCTL_CONTROL_STOP = 0x00000001, + SVCCTL_CONTROL_PAUSE = 0x00000002, + SVCCTL_CONTROL_CONTINUE = 0x00000003, + SVCCTL_CONTROL_INTERROGATE = 0x00000004, + SVCCTL_CONTROL_SHUTDOWN = 0x00000005, + SERVICE_CONTROL_PARAMCHANGE = 0x00000006, + SERVICE_CONTROL_NETBINDADD = 0x00000007, + SERVICE_CONTROL_NETBINDREMOVE = 0x00000008, + SERVICE_CONTROL_NETBINDENABLE = 0x00000009, + SERVICE_CONTROL_NETBINDDISABLE = 0x0000000A + } SERVICE_CONTROL; + + typedef [v1_enum] enum { + SVCCTL_SVC_ERROR_IGNORE = 0x00000000, + SVCCTL_SVC_ERROR_NORMAL = 0x00000001, + SVCCTL_SVC_ERROR_CRITICAL = 0x00000002, + SVCCTL_SVC_ERROR_SEVERE = 0x00000003 + } svcctl_ErrorControl; + + typedef [v1_enum] enum { + SVCCTL_BOOT_START = 0x00000000, + SVCCTL_SYSTEM_START = 0x00000001, + SVCCTL_AUTO_START = 0x00000002, + SVCCTL_DEMAND_START = 0x00000003, + SVCCTL_DISABLED = 0x00000004 + } svcctl_StartType; + + typedef [v1_enum] enum { + SERVICE_STATE_ACTIVE = 0x00000001, + SERVICE_STATE_INACTIVE = 0x00000002, + SERVICE_STATE_ALL = ( SERVICE_STATE_ACTIVE | SERVICE_STATE_INACTIVE ) + } svcctl_ServiceState; + + /* Service Control Manager Bits */ + typedef [bitmap32bit] bitmap { + SC_RIGHT_MGR_CONNECT = 0x00000001, + SC_RIGHT_MGR_CREATE_SERVICE = 0x00000002, + SC_RIGHT_MGR_ENUMERATE_SERVICE = 0x00000004, + SC_RIGHT_MGR_LOCK = 0x00000008, + SC_RIGHT_MGR_QUERY_LOCK_STATUS = 0x00000010, + SC_RIGHT_MGR_MODIFY_BOOT_CONFIG = 0x00000020, + SC_RIGHT_MGR_ALL_ACCESS = 0x000F003F + } svcctl_MgrAccessMask; + + const int SC_MANAGER_READ_ACCESS = + (SEC_STD_READ_CONTROL | + SC_RIGHT_MGR_CONNECT | + SC_RIGHT_MGR_ENUMERATE_SERVICE | + SC_RIGHT_MGR_QUERY_LOCK_STATUS); + + const int SC_MANAGER_EXECUTE_ACCESS = SC_MANAGER_READ_ACCESS; + + const int SC_MANAGER_WRITE_ACCESS = + (SEC_STD_REQUIRED | + SC_MANAGER_READ_ACCESS | + SC_RIGHT_MGR_CREATE_SERVICE | + SC_RIGHT_MGR_LOCK | + SC_RIGHT_MGR_MODIFY_BOOT_CONFIG); + + const int SC_MANAGER_ALL_ACCESS = SC_MANAGER_WRITE_ACCESS; + + + /* Service Object Bits */ + typedef [bitmap32bit] bitmap { + SC_RIGHT_SVC_QUERY_CONFIG = 0x00000001, + SC_RIGHT_SVC_CHANGE_CONFIG = 0x00000002, + SC_RIGHT_SVC_QUERY_STATUS = 0x00000004, + SC_RIGHT_SVC_ENUMERATE_DEPENDENTS = 0x00000008, + SC_RIGHT_SVC_START = 0x00000010, + SC_RIGHT_SVC_STOP = 0x00000020, + SC_RIGHT_SVC_PAUSE_CONTINUE = 0x00000040, + SC_RIGHT_SVC_INTERROGATE = 0x00000080, + SC_RIGHT_SVC_USER_DEFINED_CONTROL = 0x00000100 + } svcctl_ServiceAccessMask; + + const int SERVICE_READ_ACCESS = + (SEC_STD_READ_CONTROL | + SC_RIGHT_SVC_ENUMERATE_DEPENDENTS | + SC_RIGHT_SVC_INTERROGATE | + SC_RIGHT_SVC_QUERY_CONFIG | + SC_RIGHT_SVC_QUERY_STATUS | + SC_RIGHT_SVC_USER_DEFINED_CONTROL); + + const int SERVICE_EXECUTE_ACCESS = + (SERVICE_READ_ACCESS | + SC_RIGHT_SVC_START | + SC_RIGHT_SVC_STOP | + SC_RIGHT_SVC_PAUSE_CONTINUE); + + const int SERVICE_WRITE_ACCESS = + (SEC_STD_REQUIRED | + SERVICE_READ_ACCESS | + SERVICE_EXECUTE_ACCESS | + SC_RIGHT_SVC_CHANGE_CONFIG); + + const int SERVICE_ALL_ACCESS = SERVICE_WRITE_ACCESS; + + typedef [public,gensize] struct { + svcctl_ServiceType service_type; + svcctl_StartType start_type; + svcctl_ErrorControl error_control; + [string,charset(UTF16),range(0,8192)] uint16 *executablepath; + [string,charset(UTF16),range(0,8192)] uint16 *loadordergroup; + uint32 tag_id; + [string,charset(UTF16),range(0,8192)] uint16 *dependencies; + [string,charset(UTF16),range(0,8192)] uint16 *startname; + [string,charset(UTF16),range(0,8192)] uint16 *displayname; + } QUERY_SERVICE_CONFIG; + + const int SC_MAX_ARGUMENT_LENGTH = 1024; + const int SC_MAX_ARGUMENTS = 1024; + + typedef struct { + [string,charset(UTF16),range(0,SC_MAX_ARGUMENT_LENGTH)] uint16 *string; + } svcctl_ArgumentString; + + typedef struct { + [string,charset(ASCII),range(0,SC_MAX_ARGUMENT_LENGTH)] uint8 *string; + } svcctl_ArgumentStringA; + + typedef [v1_enum] enum { + SERVICE_CONFIG_DESCRIPTION = 0x00000001, + SERVICE_CONFIG_FAILURE_ACTIONS = 0x00000002 + } svcctl_ConfigLevel; + + typedef [v1_enum] enum { + SVC_STATUS_PROCESS_INFO = 0x00000000 + } svcctl_StatusLevel; + + /*****************/ + /* Function 0x00 */ + WERROR svcctl_CloseServiceHandle( + [in,out,ref] policy_handle *object_handle + ); + + /*****************/ + /* Function 0x01 */ + WERROR svcctl_ControlService( + [in,ref] policy_handle *service_handle, + [in] SERVICE_CONTROL control, + [out,ref] SERVICE_STATUS *service_status + ); + + /*****************/ + /* Function 0x02 */ + WERROR svcctl_DeleteService( + [in,ref] policy_handle *service_handle + ); + + /*****************/ + /* Function 0x03 */ + WERROR svcctl_LockServiceDatabase( + [in,ref] policy_handle *scm_handle, + [out,ref] policy_handle *lock_handle + ); + + /*****************/ + /* Function 0x04 */ + WERROR svcctl_QueryServiceObjectSecurity( + [in] policy_handle *service_handle, + [in] security_secinfo security_flags, + [out,ref,size_is(offered)] uint8 *security_descriptor, + [in,range(0,0x40000)] uint32 offered, + [out,ref,range(0,0x40000)] uint32 *bytes_needed + ); + + /*****************/ + /* Function 0x05 */ + WERROR svcctl_SetServiceObjectSecurity( + [in] policy_handle *service_handle, + [in] security_secinfo security_flags, + [in,ref,size_is(offered)] uint8 *security_descriptor, + [in] uint32 offered + ); + + /*****************/ + /* Function 0x06 */ + WERROR svcctl_QueryServiceStatus( + [in,ref] policy_handle *service_handle, + [out,ref] SERVICE_STATUS *service_status + ); + + /*****************/ + /* Function 0x07 */ + WERROR svcctl_SetServiceStatus( + [in,ref] policy_handle *service_handle, + [in,ref] SERVICE_STATUS *service_status + ); + + /*****************/ + /* Function 0x08 */ + WERROR svcctl_UnlockServiceDatabase( + [in,out,ref] policy_handle *lock_handle + ); + + /*****************/ + /* Function 0x09 */ + WERROR svcctl_NotifyBootConfigStatus( + [in, string, unique, charset(UTF16)] uint16 *machine_name, + [in] boolean32 boot_acceptable + ); + + /*****************/ + /* Internal Function 0x0a */ + WERROR svcctl_SCSetServiceBitsW( + [in,ref] policy_handle *service_handle, + [in] uint32 service_bits, + [in] boolean32 set_bits_on, + [in] boolean32 update_immediately, + [in, string, unique, charset(UTF16)] uint16 *lpString + ); + + /*****************/ + /* Function 0x0b */ + WERROR svcctl_ChangeServiceConfigW( + [in,ref] policy_handle *service_handle, + [in] svcctl_ServiceType service_type, + [in] svcctl_StartType start_type, + [in] svcctl_ErrorControl error_control, + [in,unique,string,charset(UTF16)] uint16 *binary_path, + [in,unique,string,charset(UTF16)] uint16 *load_order_group, + [in,out,unique] uint32 *tag_id, + [in,unique,size_is(dwDependSize),string,charset(UTF16)] uint16 *dependencies, + [in,range(0, SC_MAX_DEPEND_SIZE)] uint32 dwDependSize, + [in,unique,range(0, SC_MAX_ACCOUNT_NAME_LENGTH),string,charset(UTF16)] uint16 *service_start_name, + [in,unique,size_is(dwPwSize),string,charset(UTF16)] uint16 *password, + [in,range(0, SC_MAX_PWD_SIZE)] uint32 dwPwSize, + [in,unique,range(0, SC_MAX_NAME_LENGTH),string,charset(UTF16)] uint16 *display_name + ); + + /*****************/ + /* Function 0x0c */ + WERROR svcctl_CreateServiceW( + [in,ref] policy_handle *scm_handle, + [in,string,charset(UTF16)] uint16 ServiceName[], + [in,unique,string,charset(UTF16)] uint16 *DisplayName, + [in] uint32 desired_access, + [in] svcctl_ServiceType service_type, + [in] svcctl_StartType start_type, + [in] svcctl_ErrorControl error_control, + [in,string,charset(UTF16)] uint16 binary_path[], + [in,unique,string,charset(UTF16)] uint16 *LoadOrderGroup, + [in,out,unique] uint32 *tag_id, + [in,unique,size_is(dependencies_size)] uint8 *dependencies, + [in] uint32 dependencies_size, + [in,unique,string,charset(UTF16)] uint16 *service_start_name, + [in,unique,size_is(password_size)] uint8 *password, + [in] uint32 password_size, + [out,ref] policy_handle *service_handle + ); + + /*****************/ + /* Function 0x0d */ + WERROR svcctl_EnumDependentServicesW( + [in,ref] policy_handle *service_handle, + [in] svcctl_ServiceState service_state, + [out,ref,size_is(offered)] ENUM_SERVICE_STATUSW *service_status, + [in,range(0,0x40000)] uint32 offered, + [out,ref,range(0,0x40000)] uint32 *bytesneeded, + [out,ref,range(0,0x40000)] uint32 *services_returned + ); + + /*****************/ + /* Function 0x0e */ + WERROR svcctl_EnumServicesStatusW( + [in,ref] policy_handle *scm_handle, + [in] svcctl_ServiceType service_type, + [in] svcctl_ServiceState service_state, + [out,ref,size_is(offered)] uint8 *services, + [in,range(0,0x40000)] uint32 offered, + [out,ref,range(0,0x40000)] uint32 *bytes_needed, + [out,ref,range(0,0x40000)] uint32 *services_returned, + [in,out,unique] uint32 *resume_index + ); + + /*****************/ + /* Function 0x0f */ + WERROR svcctl_OpenSCManagerW( + [in,unique,string,charset(UTF16)] uint16 *MachineName, + [in,unique,string,charset(UTF16)] uint16 *DatabaseName, + [in] svcctl_MgrAccessMask access_mask, + [out,ref] policy_handle *scm_handle + ); + + /*****************/ + /* Function 0x10 */ + WERROR svcctl_OpenServiceW( + [in,ref] policy_handle *scm_handle, + [in,string,charset(UTF16)] uint16 ServiceName[], + [in] svcctl_ServiceAccessMask access_mask, + [out,ref] policy_handle *service_handle + ); + + /*****************/ + /* Function 0x11 */ + WERROR svcctl_QueryServiceConfigW( + [in,ref] policy_handle *service_handle, + [out] QUERY_SERVICE_CONFIG *service_config, + [in,range(0,8192)] uint32 offered, + [out,ref,range(0,8192)] uint32 *needed + ); + + /*****************/ + /* Function 0x12 */ + WERROR svcctl_QueryServiceLockStatusW( + [in,ref] policy_handle *scm_handle, + [out,ref] SERVICE_LOCK_STATUS *lock_status, + [in] uint32 offered, + [out,ref] uint32 *needed + ); + + /*****************/ + /* Function 0x13 */ + WERROR svcctl_StartServiceW( + [in,ref] policy_handle *service_handle, + [in,range(0,SC_MAX_ARGUMENTS)] uint32 NumArgs, + [in,unique,size_is(NumArgs)] svcctl_ArgumentString *Arguments + ); + + /*****************/ + /* Function 0x14 */ + WERROR svcctl_GetServiceDisplayNameW( + [in,ref] policy_handle *scm_handle, + [in,unique,string,charset(UTF16)] uint16 *service_name, + [out,ref,string,charset(UTF16)] uint16 **display_name, + [in,out,unique] uint32 *display_name_length + ); + + /*****************/ + /* Function 0x15 */ + WERROR svcctl_GetServiceKeyNameW( + [in,ref] policy_handle *scm_handle, + [in,unique,string,charset(UTF16)] uint16 *display_name, + [out,ref,string,charset(UTF16)] uint16 **service_name, + [in,out,unique] uint32 *service_name_length + ); + + /*****************/ + /* Function 0x16 */ + WERROR svcctl_SCSetServiceBitsA( + [in,ref] policy_handle *handle, + [in] uint32 service_bits, + [in] boolean32 set_bits_on, + [in] boolean32 update_immediately, + [in, string, unique, charset(UTF16)] uint16 *lpString + ); + + /*****************/ + /* Function 0x17 */ + WERROR svcctl_ChangeServiceConfigA( + [in,ref] policy_handle *service_handle, + [in] svcctl_ServiceType service_type, + [in] svcctl_StartType start_type, + [in] svcctl_ErrorControl error_control, + [in,unique] astring *binary_path, + [in,unique] astring *load_order_group, + [in,out,unique] uint32 *tag_id, + [in,unique] astring *dependencies, + [in,unique] astring *service_start_name, + [in,unique] astring *password, + [in,unique] astring *display_name + ); + + /*****************/ + /* Function 0x18 */ + WERROR svcctl_CreateServiceA( + [in,ref] policy_handle *scm_handle, + [in,string,charset(ASCII)] uint8 ServiceName[], + [in,unique,string,charset(ASCII)] uint8 *DisplayName, + [in] uint32 desired_access, + [in] svcctl_ServiceType service_type, + [in] svcctl_StartType start_type, + [in] svcctl_ErrorControl error_control, + [in,string,charset(ASCII)] uint8 binary_path[], + [in,unique,string,charset(ASCII)] uint8 *LoadOrderGroupKey, + [in,out,unique] uint32 *tag_id, + [in,unique,size_is(dependencies_size)] astring *dependencies, + [in] uint32 dependencies_size, + [in,string,unique,charset(ASCII)] uint8 *service_start_name, + [in,unique,size_is(password_size)] uint8 *password, + [in] uint32 password_size, + [out,ref] policy_handle *service_handle + ); + + /*****************/ + /* Function 0x19 */ + WERROR svcctl_EnumDependentServicesA( + [in,ref] policy_handle *service_handle, + [in] svcctl_ServiceState state, + [out,ref] ENUM_SERVICE_STATUSA *service_status, + [in] uint32 offered, + [out,ref] uint32 *needed, + [out,ref] uint32 *services_returned + ); + + /*****************/ + /* Function 0x1a */ + WERROR svcctl_EnumServicesStatusA( + [in,ref] policy_handle *scm_handle, + [in] svcctl_ServiceType service_type, + [in] svcctl_ServiceState service_state, + [in] uint32 offered, + [out,size_is(offered)] uint8 service[*], + [out,ref] uint32 *needed, + [out,ref] uint32 *services_returned, + [in,out,unique] uint32 *resume_handle + ); + + /*****************/ + /* Function 0x1b */ + WERROR svcctl_OpenSCManagerA( + [in,unique,string,charset(ASCII)] uint8 *MachineName, + [in,unique,string,charset(ASCII)] uint8 *DatabaseName, + [in] svcctl_MgrAccessMask access_mask, + [out,ref] policy_handle *scm_handle + ); + + /*****************/ + /* Function 0x1c */ + WERROR svcctl_OpenServiceA( + [in,ref] policy_handle *scm_handle, + [in,string,charset(ASCII)] uint8 ServiceName[], + [in] svcctl_MgrAccessMask access_mask, + [out,ref] policy_handle *service_handle + ); + + /*****************/ + /* Function 0x1d */ + WERROR svcctl_QueryServiceConfigA( + [in,ref] policy_handle *service_handle, + [out, size_is(cbBufSize)] uint8 query[], /* TODO: QUERYU_SERVICE_CONFIG */ + [in] uint32 offered, + [out,ref] uint32 *needed + ); + + /*****************/ + /* Function 0x1e */ + WERROR svcctl_QueryServiceLockStatusA( + [in,ref] policy_handle *scm_handle, + [out,ref] SERVICE_LOCK_STATUS *lock_status, + [in] uint32 offered, + [out,ref] uint32 *needed + ); + + /*****************/ + /* Function 0x1f */ + WERROR svcctl_StartServiceA( + [in,ref] policy_handle *service_handle, + [in] uint32 NumArgs, + [in,unique,size_is(NumArgs)] svcctl_ArgumentStringA *Arguments + ); + + /*****************/ + /* Function 0x20 */ + WERROR svcctl_GetServiceDisplayNameA( + [in,ref] policy_handle *handle, + [in,unique] astring *service_name, + [out,ref,string,charset(ASCII)] uint8 **display_name, + [in,out,unique] uint32 *display_name_length + ); + + /*****************/ + /* Function 0x21 */ + WERROR svcctl_GetServiceKeyNameA( + [in,ref] policy_handle *scm_handle, + [in,unique] astring *service_name, + [out,ref,string,charset(ASCII)] uint8 **key_name, + [in,out,unique] uint32 *display_name_length + ); + + /*****************/ + /* Function 0x22 */ + WERROR svcctl_GetCurrentGroupeStateW( + [in,ref] policy_handle *handle, + [in, string, unique, charset(UTF16)] uint16 *lpLoadOrderGroup, + [out,ref] uint32 *state + ); + + /*****************/ + /* Function 0x23 */ + WERROR svcctl_EnumServiceGroupW( + [in] policy_handle *scm_handle, + [in] svcctl_ServiceType service_type, + [in] svcctl_ServiceState service_state, + [out, size_is(cbBufSize)] uint8 lpBuffer[], + [in, range(0, 1024 * 256)] uint32 cbBufSize, + [out,range(0, 1024 * 256)] uint32 *pcbBytesNeeded, + [out,range(0, 1024 * 256)] uint32 *lpServicesReturned, + [in,out,unique] uint32 *ResumeIndex, + [in,string,unique,range(0, SC_MAX_NAME_LENGTH),charset(UTF16)] uint16 *pszGroupName + ); + + /*****************/ + /* Function 0x24 */ + WERROR svcctl_ChangeServiceConfig2A( + [in,ref] policy_handle *service_handle, + [in] uint32 info_level, + [in,unique] uint8 *info /* TODO */ + ); + + /*****************/ + /* Function 0x25 */ + WERROR svcctl_ChangeServiceConfig2W( + [in,ref] policy_handle *handle, + [in] uint32 info_level, + [in,unique] uint8 *info /* TODO */ + ); + + /*****************/ + /* Function 0x26 */ + WERROR svcctl_QueryServiceConfig2A( + [in,ref] policy_handle *handle, + [in] svcctl_ConfigLevel info_level, + [out, size_is(offered)] uint8 buffer[], /* TODO */ + [in] uint32 offered, + [out,ref] uint32 *needed + ); + + /*****************/ + /* Function 0x27 */ + WERROR svcctl_QueryServiceConfig2W( + [in,ref] policy_handle *handle, + [in] svcctl_ConfigLevel info_level, + [out,ref,size_is(offered)] uint8 *buffer, /* TODO */ + [in,range(0,8192)] uint32 offered, + [out,ref,range(0,8192)] uint32 *needed + ); + + /*****************/ + /* Function 0x28 */ + WERROR svcctl_QueryServiceStatusEx( + [in,ref] policy_handle *handle, + [in] svcctl_StatusLevel info_level, + [out,ref,size_is(offered)] uint8 *buffer, /* TODO */ + [in,range(0,8192)] uint32 offered, + [out,ref,range(0,8192)] uint32 *needed + ); + + /*****************/ + /* Function 0x29 */ + WERROR EnumServicesStatusExA( + [in,ref] policy_handle *scm_handle, + [in] uint32 info_level, /* TODO */ + [in] svcctl_ServiceType service_type, + [in] svcctl_ServiceState state, + [out, size_is(offered)] uint8 services[], + [in] uint32 offered, + [out,ref] uint32 *needed, + [out,ref] uint32 *service_returned, + [in,out,unique] uint32 *resume_handle, + [out,ref,string,charset(UTF16)] uint16 **group_name + ); + + /*****************/ + /* Function 0x2a */ + WERROR EnumServicesStatusExW( + [in,ref] policy_handle *scmanager, + [in] uint32 info_level, /* TODO */ + [in] svcctl_ServiceType service_type, + [in] svcctl_ServiceState state, + [out,ref,size_is(offered)] uint8 *services, + [in,range(0,0x40000)] uint32 offered, + [out,ref,range(0,0x40000)] uint32 *needed, + [out,ref,range(0,0x40000)] uint32 *service_returned, + [in,out,unique,range(0,0x40000)] uint32 *resume_handle, + [in,unique,string,charset(UTF16)] uint16 *group_name + ); + + /*****************/ + /* Function 0x2b */ + [todo] WERROR svcctl_ScBroadcastServiceControlMessage( + ); + + /*****************/ + /* Function 0x2c */ + WERROR svcctl_CreateServiceWOW64A( + [in,ref] policy_handle *scm_handle, + [in,string,charset(ASCII)] uint8 ServiceName[], + [in,unique,string,charset(ASCII)] uint8 *DisplayName, + [in] uint32 desired_access, + [in] svcctl_ServiceType service_type, + [in] svcctl_StartType start_type, + [in] svcctl_ErrorControl error_control, + [in,string,charset(ASCII)] uint8 binary_path[], + [in,unique,string,charset(ASCII)] uint8 *LoadOrderGroupKey, + [in,out,unique] uint32 *tag_id, + [in,unique,size_is(dependencies_size)] astring *dependencies, + [in] uint32 dependencies_size, + [in,unique,string,charset(ASCII)] uint8 *service_start_name, + [in,unique,size_is(password_size)] uint8 *password, + [in] uint32 password_size, + [out,ref] policy_handle *handle + ); + + /*****************/ + /* Function 0x2d */ + WERROR svcctl_CreateServiceWOW64W( + [in,ref] policy_handle *scm_handle, + [in,string,charset(UTF16)] uint16 ServiceName[], + [in,unique,string,charset(UTF16)] uint16 *DisplayName, + [in] uint32 desired_access, + [in] svcctl_ServiceType service_type, + [in] svcctl_StartType start_type, + [in] svcctl_ErrorControl error_control, + [in,string,charset(UTF16)] uint16 binary_path[], + [in,unique,string,charset(UTF16)] uint16 *LoadOrderGroupKey, + [in,out,unique] uint32 *tag_id, + [in,unique,size_is(dependencies_size)] uint8 *dependencies, + [in] uint32 dependencies_size, + [in,unique,string,charset(UTF16)] uint16 *service_start_name, + [in,unique,size_is(password_size)] uint8 *password, + [in] uint32 password_size, + [out,ref] policy_handle *handle + ); + + /*****************/ + /* Function 0x2e */ + [todo] WERROR svcctl_ScQueryServiceTagInfo( + ); + + /*****************/ + /* Function 0x2f */ + [todo] WERROR svcctl_NotifyServiceStatusChange( + ); + + /*****************/ + /* Function 0x30 */ + [todo] WERROR svcctl_GetNotifyResults( + ); + + /*****************/ + /* Function 0x31 */ + [todo] WERROR svcctl_CloseNotifyHandle( + ); + + /*****************/ + /* Function 0x32 */ + [todo] WERROR svcctl_ControlServiceExA( + ); + + /*****************/ + /* Function 0x33 */ + [todo] WERROR svcctl_ControlServiceExW( + ); + + /*****************/ + /* Function 0x34 */ + [todo] WERROR svcctl_ScSendPnPMessage( + ); + + /*****************/ + /* Function 0x35 */ + [todo] WERROR svcctl_ScValidatePnPService( + ); + + /*****************/ + /* Function 0x36 */ + [todo] WERROR svcctl_ScOpenServiceStatusHandle( + ); + + /*****************/ + /* Function 0x37 */ + [todo] WERROR svcctl_ScQueryServiceConfig( + ); + + /*****************/ + /* Function 0x38 */ + WERROR svcctl_QueryServiceConfigEx( + [in,ref] policy_handle *service_handle, + [in] uint32 info_level + /*[out] SC_RPC_CONFIG_INFOW *pInfo - TODO */ + ); + + /*****************/ + /* Function 0x39 */ + [todo] WERROR svcctl_ScRegisterPreshutdownRestart( + ); + + /*****************/ + /* Function 0x3a */ + [todo] WERROR svcctl_ScReparseServiceDatabase( + ); + + /*****************/ + /* Function 0x3b */ + [todo] WERROR svcctl_QueryUserServiceName( + ); + + /*****************/ + /* Function 0x3c */ + WERROR svcctl_CreateWowService( + [in,ref] policy_handle *scm_handle, + [in,string,charset(UTF16)] uint16 ServiceName[], + [in,unique,string,charset(UTF16)] uint16 *DisplayName, + [in] uint32 desired_access, + [in] uint32 service_type, + [in] svcctl_StartType start_type, + [in] svcctl_ErrorControl error_control, + [in,string,charset(UTF16)] uint16 binary_path[], + [in,unique,string,charset(UTF16)] uint16 *LoadOrderGroupKey, + [in,out,unique] uint32 *tag_id, + [in,unique,size_is(dependencies_size)] uint8 *dependencies, + [in] uint32 dependencies_size, + [in,unique,string,charset(UTF16)] uint16 *service_start_name, + [in,unique,size_is(password_size)] uint8 *password, + [in] uint32 password_size, + [in] uint16 service_wow_type, + [out,ref] policy_handle *handle + ); + + /*****************/ + /* Function 0x3d */ + [todo] WERROR svcctl_GetServiceRegistryStateKey( + ); + + /*****************/ + /* Function 0x3e */ + [todo] WERROR svcctl_GetServiceDirectory( + ); + + /*****************/ + /* Function 0x3f */ + [todo] WERROR svcctl_GetServiceProcessToken( + ); + + /*****************/ + /* Function 0x40 */ + + /* https://learn.microsoft.com/en-us/windows/win32/midl/handle-t + * Parameters of type handle_t (primitive handle parameters) are not transmitted on the network. + */ + WERROR svcctl_OpenSCManager2( + /*[in,ref] handle_t *binding_handle,*/ + [in,string,unique,charset(UTF16)] uint16 *database_name, + [in] uint32 desired_access, + [out,ref] policy_handle *handle + ); + + /*****************/ + /* Function 0x41 */ + [todo] WERROR svcctl_GetSharedServiceRegistryStateKey( + ); + + /*****************/ + /* Function 0x42 */ + [todo] WERROR svcctl_GetSharedServiceDirectory( + ); +} diff --git a/epan/dissectors/pidl/winreg/winreg.cnf b/epan/dissectors/pidl/winreg/winreg.cnf new file mode 100644 index 00000000..1a0fa396 --- /dev/null +++ b/epan/dissectors/pidl/winreg/winreg.cnf @@ -0,0 +1,234 @@ +TYPE lsa_StringLarge "offset=lsarpc_dissect_struct_lsa_StringLarge(tvb, offset, pinfo, tree, di, drep, @HF@, @PARAM@);" FT_NONE BASE_NONE 0 NULL NULL +TYPE winreg_Type "offset=misc_dissect_enum_winreg_Type(tvb, offset, pinfo, tree, di, drep, @HF@, @PARAM@);" FT_NONE BASE_NONE 0 NULL NULL +IMPORT security_secinfo offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_winreg_winreg_GetKeySecurity_sec_info, NULL); + +# +# Make all instances of an access mask use the same hf field display filter +# name +# +HF_FIELD hf_winreg_access_mask "Access Mask" "winreg.access_mask" FT_UINT32 BASE_HEX NULL 0 "" "" "" +HF_RENAME hf_winreg_winreg_OpenHKCR_access_mask hf_winreg_access_mask +HF_RENAME hf_winreg_winreg_OpenHKLM_access_mask hf_winreg_access_mask +HF_RENAME hf_winreg_winreg_OpenHKU_access_mask hf_winreg_access_mask +HF_RENAME hf_winreg_winreg_CreateKey_access_mask hf_winreg_access_mask +HF_RENAME hf_winreg_winreg_OpenHKCC_access_mask hf_winreg_access_mask +HF_RENAME hf_winreg_winreg_OpenHKDD_access_mask hf_winreg_access_mask +HF_RENAME hf_winreg_winreg_OpenHKPT_access_mask hf_winreg_access_mask +HF_RENAME hf_winreg_winreg_OpenHKPN_access_mask hf_winreg_access_mask + + +# +# Make all instances of a system name use the same hf display filter name +# +HF_FIELD hf_winreg_system_name "System Name" "winreg.system_name" FT_UINT16 BASE_DEC NULL 0 "" "" "" +HF_RENAME hf_winreg_winreg_OpenHKCR_system_name hf_winreg_system_name +HF_RENAME hf_winreg_winreg_OpenHKCU_system_name hf_winreg_system_name +HF_RENAME hf_winreg_winreg_OpenHKLM_system_name hf_winreg_system_name +HF_RENAME hf_winreg_winreg_OpenHKPD_system_name hf_winreg_system_name +HF_RENAME hf_winreg_winreg_OpenHKU_system_name hf_winreg_system_name +HF_RENAME hf_winreg_winreg_OpenHKCC_system_name hf_winreg_system_name +HF_RENAME hf_winreg_winreg_OpenHKDD_system_name hf_winreg_system_name +HF_RENAME hf_winreg_winreg_OpenHKPT_system_name hf_winreg_system_name +HF_RENAME hf_winreg_winreg_OpenHKPN_system_name hf_winreg_system_name + + +# +# make all policyhandles use the same hf display filter name +# +HF_FIELD hf_winreg_handle "Handle" "winreg.handle" FT_BYTES BASE_NONE NULL 0 "" "" "" +HF_RENAME hf_winreg_winreg_OpenHKCR_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_OpenHKCU_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_OpenHKLM_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_OpenHKPD_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_OpenHKU_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_CloseKey_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_CreateKey_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_DeleteKey_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_DeleteValue_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_EnumKey_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_EnumValue_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_FlushKey_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_GetKeySecurity_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_LoadKey_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_NotifyChangeKeyValue_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_OpenKey_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_QueryInfoKey_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_QueryValue_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_SetKeySecurity_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_SetValue_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_GetVersion_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_OpenHKCC_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_OpenHKDD_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_OpenHKPT_handle hf_winreg_handle +HF_RENAME hf_winreg_winreg_OpenHKPN_handle hf_winreg_handle + + + +# +# Make both instances of KeySecurityData resolve to the same +# hf display filter field. +# +HF_FIELD hf_winreg_sd "KeySecurityData" "winreg.sd" FT_NONE BASE_NONE NULL 0 "" "" "" +HF_RENAME hf_winreg_winreg_GetKeySecurity_sd hf_winreg_sd +HF_RENAME hf_winreg_winreg_SetKeySecurity_sd hf_winreg_sd + + + +# +# policyhandle tracking +# This block is to specify where a policyhandle is opened and where it is +# closed so that policyhandles when dissected contain nice info such as +# [opened in xxx] [closed in yyy] +# +# Policyhandles are opened in these functions +PARAM_VALUE winreg_dissect_element_OpenHKCR_handle_ PIDL_POLHND_OPEN +PARAM_VALUE winreg_dissect_element_OpenHKCU_handle_ PIDL_POLHND_OPEN +PARAM_VALUE winreg_dissect_element_OpenHKLM_handle_ PIDL_POLHND_OPEN +PARAM_VALUE winreg_dissect_element_OpenHKPD_handle_ PIDL_POLHND_OPEN +PARAM_VALUE winreg_dissect_element_OpenHKU_handle_ PIDL_POLHND_OPEN +PARAM_VALUE winreg_dissect_element_OpenHKCC_handle_ PIDL_POLHND_OPEN +PARAM_VALUE winreg_dissect_element_OpenHKDD_handle_ PIDL_POLHND_OPEN +PARAM_VALUE winreg_dissect_element_OpenHKPT_handle_ PIDL_POLHND_OPEN +PARAM_VALUE winreg_dissect_element_OpenHKPN_handle_ PIDL_POLHND_OPEN +PARAM_VALUE winreg_dissect_element_CreateKey_new_handle_ PIDL_POLHND_OPEN +PARAM_VALUE winreg_dissect_element_OpenKey_handle_ PIDL_POLHND_OPEN +# Policyhandles are closed in these functions +PARAM_VALUE winreg_dissect_element_CloseKey_handle_ PIDL_POLHND_CLOSE + + +# winreg_String +# +# Create a new type to handle winreg_String so that we can get nice and +# pretty dissection of the strings contained within winreg +TYPE winreg_String "offset=cnf_dissect_winreg_String(tvb, offset, pinfo, tree, di, drep, @PARAM@, @HF@);" FT_STRING BASE_NONE 0 NULL 4 +# +# +# +PARAM_VALUE winreg_dissect_element_CreateKey_name 2|PIDL_SET_COL_INFO +PARAM_VALUE winreg_dissect_element_DeleteKey_key 2|PIDL_SET_COL_INFO +PARAM_VALUE winreg_dissect_element_LoadKey_keyname 2|PIDL_SET_COL_INFO +PARAM_VALUE winreg_dissect_element_OpenKey_keyname 2|PIDL_SET_COL_INFO|PIDL_STR_SAVE +PARAM_VALUE winreg_dissect_element_QueryValue_value_name 2|PIDL_SET_COL_INFO +PARAM_VALUE winreg_dissect_element_SaveKey_filename 2|PIDL_SET_COL_INFO +PARAM_VALUE winreg_dissect_element_SetValue_name 2|PIDL_SET_COL_INFO + +# +# Override the generation of dissectors of the security descriptor and the +# access mask. +# The security descriptor is just an array of bytes in the idl file +# so we override generation of it and calls the proper wireshark dissector +# after manually eating the 12 bytes of conformance data. +# +# Same for the access mask dissector since the idl would only define those +# flag bits that are specific to WINREG therefore we set up the appropriate +# structures and then call the wireshark accessmask dissector instead. +# +# +HF_FIELD hf_winreg_sd_max_size "Max Size" "winreg.sd.max_size" FT_UINT32 BASE_DEC NULL 0 "" "" "" +HF_FIELD hf_winreg_sd_offset "Offset" "winreg.sd.offset" FT_UINT32 BASE_DEC NULL 0 "" "" "" +HF_FIELD hf_winreg_sd_actual_size "Actual Size" "winreg.sd.actual_size" FT_UINT32 BASE_DEC NULL 0 "" "" "" +NOEMIT winreg_dissect_element_KeySecurityData_data__ +MANUAL winreg_dissect_element_KeySecurityData_data_ +MANUAL winreg_dissect_bitmap_AccessMask + + + +CODE START + #include "packet-dcerpc-lsa.h" +static void +winreg_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 access) +{ + static int* const access_flags[] = { + &hf_winreg_winreg_AccessMask_KEY_WOW64_32KEY, + &hf_winreg_winreg_AccessMask_KEY_WOW64_64KEY, + &hf_winreg_winreg_AccessMask_KEY_CREATE_LINK, + &hf_winreg_winreg_AccessMask_KEY_NOTIFY, + &hf_winreg_winreg_AccessMask_KEY_ENUMERATE_SUB_KEYS, + &hf_winreg_winreg_AccessMask_KEY_CREATE_SUB_KEY, + &hf_winreg_winreg_AccessMask_KEY_SET_VALUE, + &hf_winreg_winreg_AccessMask_KEY_QUERY_VALUE, + NULL + }; + + proto_tree_add_bitmask_list_value(tree, tvb, offset, 4, access_flags, access); +} + +struct access_mask_info winreg_access_mask_info = { + "WINREG", /* Name of specific rights */ + winreg_specific_rights, /* Dissection function */ + NULL, /* Generic mapping table */ + NULL /* Standard mapping table */ +}; + +static int +winreg_dissect_element_KeySecurityData_data_(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + guint32 len; + + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + /* this is a varying and conformant array */ + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_winreg_sd_max_size, NULL); + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_winreg_sd_offset, NULL); + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_winreg_sd_actual_size, &len); + + dissect_nt_sec_desc(tvb, offset, pinfo, tree, drep, TRUE, len, + &winreg_access_mask_info); + + offset += len; + + return offset; +} + +int +winreg_dissect_bitmap_AccessMask(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, int hf_index _U_, guint32 param _U_) +{ + offset = dissect_nt_access_mask( + tvb, offset, pinfo, tree, di, drep, hf_winreg_access_mask, + &winreg_access_mask_info, NULL); + return offset; +} + +/* winreg_String : + * typedef [public,noejs] struct { + * [value(strlen_m_term(name)*2)] uint16 name_len; + * [value(strlen_m_term(name)*2)] uint16 name_size; + * [string,charset(UTF16)] uint16 *name; + * } winreg_String; + */ +static int +cnf_dissect_winreg_String(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info* di, guint8 *drep, guint32 param, int hfindex) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + header_field_info *hf_info; + + ALIGN_TO_4_BYTES; + + old_offset = offset; + hf_info=proto_registrar_get_nth(hfindex); + + if (parent_tree) { + tree = proto_tree_add_subtree_format(parent_tree, tvb, offset, 0, ett_winreg_winreg_String, &item, "%s: ", hf_info->name); + } + + offset = winreg_dissect_element_String_name_len(tvb, offset, pinfo, tree, di, drep); + + offset = winreg_dissect_element_String_name_size(tvb, offset, pinfo, tree, di, drep); + + offset = dissect_ndr_pointer_cb( + tvb, offset, pinfo, tree, di, drep, + dissect_ndr_wchar_cvstring, NDR_POINTER_UNIQUE, + hf_info->name, hfindex, cb_wstr_postprocess, + GINT_TO_POINTER(param)); + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +CODE END diff --git a/epan/dissectors/pidl/winreg/winreg.idl b/epan/dissectors/pidl/winreg/winreg.idl new file mode 100644 index 00000000..1fd40848 --- /dev/null +++ b/epan/dissectors/pidl/winreg/winreg.idl @@ -0,0 +1,460 @@ +/* + winreg interface definition +*/ + +/*import "lsa.idl", "security.idl",*/ +import "misc/misc.idl"; + +[ + uuid("338cd001-2244-31f1-aaaa-900038001003"), + version(1.0), + endpoint("ncacn_np:[\\pipe\\winreg]","ncacn_ip_tcp:","ncalrpc:"), + pointer_default(unique), + helpstring("Remote Registry Service") +] interface winreg +{ + typedef bitmap security_secinfo security_secinfo; + + /* + * Access Bits for registry ACLS + */ + + typedef [bitmap32bit] bitmap { + KEY_QUERY_VALUE = 0x00001, + KEY_SET_VALUE = 0x00002, + KEY_CREATE_SUB_KEY = 0x00004, + KEY_ENUMERATE_SUB_KEYS = 0x00008, + KEY_NOTIFY = 0x00010, + KEY_CREATE_LINK = 0x00020, + KEY_WOW64_64KEY = 0x00100, + KEY_WOW64_32KEY = 0x00200 + } winreg_AccessMask; + + const int REG_KEY_READ = ( STANDARD_RIGHTS_READ_ACCESS | + KEY_QUERY_VALUE | + KEY_ENUMERATE_SUB_KEYS | + KEY_NOTIFY); + + const int REG_KEY_EXECUTE = REG_KEY_READ; + + const int REG_KEY_WRITE = ( STANDARD_RIGHTS_WRITE_ACCESS | + KEY_SET_VALUE | + KEY_CREATE_SUB_KEY); + + const int REG_KEY_ALL = ( STANDARD_RIGHTS_REQUIRED_ACCESS | + REG_KEY_READ | + REG_KEY_WRITE | + KEY_CREATE_LINK); + + typedef [public] struct { + [value(strlen_m_term(name)*2)] uint16 name_len; + [value(strlen_m_term(name)*2)] uint16 name_size; + [string,charset(UTF16)] uint16 *name; + } winreg_String; + + /******************/ + /* Function: 0x00 */ + WERROR winreg_OpenHKCR( + [in,unique] uint16 *system_name, + [in] winreg_AccessMask access_mask, + [out,ref] policy_handle *handle + ); + + /******************/ + /* Function: 0x01 */ + WERROR winreg_OpenHKCU( + [in,unique] uint16 *system_name, + [in] winreg_AccessMask access_mask, + [out,ref] policy_handle *handle + ); + + /******************/ + /* Function: 0x02 */ + [public] WERROR winreg_OpenHKLM( + [in,unique] uint16 *system_name, + [in] winreg_AccessMask access_mask, + [out,ref] policy_handle *handle + ); + + /******************/ + /* Function: 0x03 */ + WERROR winreg_OpenHKPD( + [in,unique] uint16 *system_name, + [in] winreg_AccessMask access_mask, + [out,ref] policy_handle *handle + ); + + /******************/ + /* Function: 0x04 */ + WERROR winreg_OpenHKU( + [in,unique] uint16 *system_name, + [in] winreg_AccessMask access_mask, + [out,ref] policy_handle *handle + ); + + /******************/ + /* Function: 0x05 */ + [public] WERROR winreg_CloseKey( + [in,out,ref] policy_handle *handle + ); + + /******************/ + /* Function: 0x06 */ + + typedef struct { + [size_is(size),length_is(len)] uint8 *data; + uint32 size; + uint32 len; + } KeySecurityData; + + typedef struct { + uint32 length; + KeySecurityData sd; + boolean8 inherit; + } winreg_SecBuf; + + const int REG_OPTION_NON_VOLATILE = 0x00000000; + + typedef [bitmap32bit] bitmap { + REG_OPTION_VOLATILE = 0x00000001, + REG_OPTION_CREATE_LINK = 0x00000002, + REG_OPTION_BACKUP_RESTORE = 0x00000004, + REG_OPTION_OPEN_LINK = 0x00000008 + } winreg_KeyOptions; + + typedef [v1_enum] enum { + REG_ACTION_NONE = 0, /* used by caller */ + REG_CREATED_NEW_KEY = 1, + REG_OPENED_EXISTING_KEY = 2 + } winreg_CreateAction; + + [public] WERROR winreg_CreateKey( + [in,ref] policy_handle *handle, + [in] winreg_String name, + [in] winreg_String keyclass, + [in] winreg_KeyOptions options, + [in] winreg_AccessMask access_mask, + [in,unique] winreg_SecBuf *secdesc, + [out,ref] policy_handle *new_handle, + [in,out,unique] winreg_CreateAction *action_taken + ); + + /******************/ + /* Function: 0x07 */ + [public] WERROR winreg_DeleteKey( + [in,ref] policy_handle *handle, + [in] winreg_String key + ); + + /******************/ + /* Function: 0x08 */ + WERROR winreg_DeleteValue( + [in,ref] policy_handle *handle, + [in] winreg_String value + ); + + typedef struct { + [value(strlen_m_term_null(name)*2)] uint16 length; + /* size cannot be auto-set by value() as it is the + amount of space the server is allowed to use for this + string in the reply, not its current size */ + uint16 size; + [size_is(size/2),length_is(length/2),charset(UTF16)] uint16 *name; + } winreg_StringBuf; + + /******************/ + /* Function: 0x09 */ + [public] WERROR winreg_EnumKey( + [in,ref] policy_handle *handle, + [in] uint32 enum_index, + [in,out,ref] winreg_StringBuf *name, + [in,out,unique] winreg_StringBuf *keyclass, + [in,out,unique] NTTIME *last_changed_time + ); + + typedef struct { + [value(strlen_m_term(name)*2)] uint16 length; + /* size cannot be auto-set by value() as it is the + amount of space the server is allowed to use for this + string in the reply, not its current size */ + uint16 size; + [size_is(size/2),length_is(length/2),charset(UTF16)] uint16 *name; + } winreg_ValNameBuf; + + /******************/ + /* Function: 0x0a */ + + [public] WERROR winreg_EnumValue( + [in,ref] policy_handle *handle, + [in] uint32 enum_index, + [in,out,ref] winreg_ValNameBuf *name, + [in,out,unique] winreg_Type *type, + [in,out,unique,size_is(size ? *size : 0),length_is(length ? *length : 0),range(0,0x4000000)] uint8 *value, + [in,out,unique] uint32 *size, + [in,out,unique] uint32 *length + ); + + /******************/ + /* Function: 0x0b */ + [public] WERROR winreg_FlushKey( + [in,ref] policy_handle *handle + ); + + /******************/ + /* Function: 0x0c */ + [public] WERROR winreg_GetKeySecurity( + [in,ref] policy_handle *handle, + [in] security_secinfo sec_info, + [in,out,ref] KeySecurityData *sd + ); + + /******************/ + /* Function: 0x0d */ + WERROR winreg_LoadKey( + [in,ref] policy_handle *handle, + [in,unique] winreg_String *keyname, + [in,unique] winreg_String *filename + ); + + /******************/ + /* Function: 0x0e */ + typedef [public,bitmap32bit] bitmap { + REG_NOTIFY_CHANGE_NAME = 0x00000001, + REG_NOTIFY_CHANGE_ATTRIBUTES = 0x00000002, + REG_NOTIFY_CHANGE_LAST_SET = 0x00000004, + REG_NOTIFY_CHANGE_SECURITY = 0x00000008 + } winreg_NotifyChangeType; + + [public] WERROR winreg_NotifyChangeKeyValue( + [in,ref] policy_handle *handle, + [in] boolean8 watch_subtree, + [in] winreg_NotifyChangeType notify_filter, + [in] uint32 unknown, + [in] winreg_String string1, + [in] winreg_String string2, + [in] uint32 unknown2 + ); + + /******************/ + /* Function: 0x0f */ + [public] WERROR winreg_OpenKey( + [in,ref] policy_handle *parent_handle, + [in] winreg_String keyname, + [in] winreg_KeyOptions options, + [in] winreg_AccessMask access_mask, + [out,ref] policy_handle *handle + ); + + /******************/ + /* Function: 0x10 */ + [public] WERROR winreg_QueryInfoKey( + [in,ref] policy_handle *handle, + [in,out,ref] winreg_String *classname, + [out,ref] uint32 *num_subkeys, + [out,ref] uint32 *max_subkeylen, + [out,ref] uint32 *max_classlen, + [out,ref] uint32 *num_values, + [out,ref] uint32 *max_valnamelen, + [out,ref] uint32 *max_valbufsize, + [out,ref] uint32 *secdescsize, + [out,ref] NTTIME *last_changed_time + ); + + /******************/ + /* Function: 0x11 */ + [public] WERROR winreg_QueryValue( + [in,ref] policy_handle *handle, + [in,ref] winreg_String *value_name, + [in,out,unique] winreg_Type *type, + [in,out,unique,size_is(data_size ? *data_size : 0),length_is(data_length ? *data_length : 0),range(0,0x4000000)] uint8 *data, + [in,out,unique] uint32 *data_size, + [in,out,unique] uint32 *data_length + ); + + /******************/ + /* Function: 0x12 */ + WERROR winreg_ReplaceKey( + [in,ref] policy_handle *handle, + [in,ref] winreg_String *subkey, + [in,ref] winreg_String *new_file, + [in,ref] winreg_String *old_file + ); + + /******************/ + /* Function: 0x13 */ + + typedef [public,bitmap32bit] bitmap { + REG_WHOLE_HIVE_VOLATILE = 0x00000001, + REG_REFRESH_HIVE = 0x00000002, + REG_NO_LAZY_FLUSH = 0x00000004, + REG_FORCE_RESTORE = 0x00000008 + } winreg_RestoreKeyFlags; + + WERROR winreg_RestoreKey( + [in,ref] policy_handle *handle, + [in,ref] winreg_String *filename, + [in] winreg_RestoreKeyFlags flags + ); + + /******************/ + /* Function: 0x14 */ + + typedef struct { + uint32 data_size; + KeySecurityData sec_data; + uint8 inherit; + } KeySecurityAttribute; + + WERROR winreg_SaveKey( + [in,ref] policy_handle *handle, + [in,ref] winreg_String *filename, + [in,unique] KeySecurityAttribute *sec_attrib + ); + + /******************/ + /* Function: 0x15 */ + WERROR winreg_SetKeySecurity( + [in,ref] policy_handle *handle, + [in] security_secinfo sec_info, + [in,ref] KeySecurityData *sd + ); + + /******************/ + /* Function: 0x16 */ + WERROR winreg_SetValue( + [in,ref] policy_handle *handle, + [in] winreg_String name, + [in] winreg_Type type, + [in,size_is(size),ref] uint8 *data, + [in] uint32 size + ); + + /******************/ + /* Function: 0x17 */ + WERROR winreg_UnLoadKey( + [in,ref] policy_handle *handle, + [in,ref] winreg_String *subkey + ); + + /******************/ + /* Function: 0x18 */ + WERROR winreg_InitiateSystemShutdown( + [in,unique] uint16 *hostname, + /* + * Note: lsa_String and winreg_String both result + * in WERR_INVALID_PARAM + */ + [in,unique] lsa_StringLarge *message, + [in] uint32 timeout, + [in] uint8 force_apps, + [in] uint8 do_reboot + ); + + /******************/ + /* Function: 0x19 */ + WERROR winreg_AbortSystemShutdown( + [in,unique] uint16 *server + ); + + /******************/ + /* Function: 0x1a */ + [public] WERROR winreg_GetVersion( + [in,ref] policy_handle *handle, + [out,ref] uint32 *version + ); + + /******************/ + /* Function: 0x1b */ + WERROR winreg_OpenHKCC( + [in,unique] uint16 *system_name, + [in] winreg_AccessMask access_mask, + [out,ref] policy_handle *handle + ); + + /******************/ + /* Function: 0x1c */ + WERROR winreg_OpenHKDD( + [in,unique] uint16 *system_name, + [in] winreg_AccessMask access_mask, + [out,ref] policy_handle *handle + ); + + typedef struct { + winreg_ValNameBuf *ve_valuename; + uint32 ve_valuelen; + uint32 ve_valueptr; + winreg_Type ve_type; + } QueryMultipleValue; + + /******************/ + /* Function: 0x1d */ + [public] WERROR winreg_QueryMultipleValues( + [in,ref] policy_handle *key_handle, + [in,ref,size_is(num_values),length_is(num_values)] QueryMultipleValue *values_in, + [out,ref,size_is(num_values),length_is(num_values)] QueryMultipleValue *values_out, + [in] uint32 num_values, + [in,out,unique,size_is(*buffer_size),length_is(*buffer_size)] uint8 *buffer, + [in,out,ref] uint32 *buffer_size + ); + + /******************/ + /* Function: 0x1e */ + WERROR winreg_InitiateSystemShutdownEx( + [in,unique] uint16 *hostname, + /* + * Note: lsa_String and winreg_String both result + * in WERR_INVALID_PARAM + */ + [in,unique] lsa_StringLarge *message, + [in] uint32 timeout, + [in] uint8 force_apps, + [in] uint8 do_reboot, + [in] uint32 reason + ); + + /******************/ + /* Function: 0x1f */ + WERROR winreg_SaveKeyEx( + [in,ref] policy_handle *handle, + [in,ref] winreg_String *filename, + [in,unique] KeySecurityAttribute *sec_attrib, + [in] uint32 flags + ); + + /******************/ + /* Function: 0x20 */ + WERROR winreg_OpenHKPT( + [in,unique] uint16 *system_name, + [in] winreg_AccessMask access_mask, + [out,ref] policy_handle *handle + ); + + /******************/ + /* Function: 0x21 */ + WERROR winreg_OpenHKPN( + [in,unique] uint16 *system_name, + [in] winreg_AccessMask access_mask, + [out,ref] policy_handle *handle + ); + + /******************/ + /* Function: 0x22 */ + [public] WERROR winreg_QueryMultipleValues2( + [in,ref] policy_handle *key_handle, + [in,ref,size_is(num_values),length_is(num_values)] QueryMultipleValue *values_in, + [out,ref,size_is(num_values),length_is(num_values)] QueryMultipleValue *values_out, + [in] uint32 num_values, + [in,out,unique,size_is(*offered),length_is(*offered)] uint8 *buffer, + [in,ref] uint32 *offered, + [out,ref] uint32 *needed + ); + + /******************/ + /* Function: 0x23 */ + WERROR winreg_DeleteKeyEx( + [in,ref] policy_handle *handle, + [in,ref] winreg_String *key, + [in] winreg_AccessMask access_mask, + [in] uint32 reserved + ); +} diff --git a/epan/dissectors/pidl/winspool/winspool.cnf b/epan/dissectors/pidl/winspool/winspool.cnf new file mode 100644 index 00000000..9a2fdd6c --- /dev/null +++ b/epan/dissectors/pidl/winspool/winspool.cnf @@ -0,0 +1,58 @@ +# Conformance file for winspool + +#iremotewinspool_dissect_struct_sec_desc_buf +HF_FIELD hf_iremotewinspool_sec_desc_buf_len "Sec Desc Buf Len" "iremotewinspool.sec_desc_buf_len" FT_UINT32 BASE_DEC NULL 0 "" "" "" + +#TYPE winreg_AccessMask "offset = winreg_dissect_bitmap_AccessMask(tvb, offset, pinfo, tree, di, drep, @HF@, @PARAM@);" FT_NONE BASE_NONE 0 NULL NULL +TYPE sec_desc_buf "offset = iremotewinspool_dissect_sec_desc_buf(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_UserLevelCtr "offset = dissect_USER_LEVEL_CTR(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_NotifyInfo "offset = dissect_NOTIFY_INFO(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_NotifyOption "offset = dissect_NOTIFY_OPTIONS_ARRAY_CTR(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_DevmodeContainer "offset = dissect_DEVMODE_CTR(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_SetPrinterInfoCtr "offset = dissect_SPOOL_PRINTER_INFO(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_DocumentInfoCtr "offset = dissect_spoolss_doc_info_ctr(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_AddFormInfoCtr "offset = dissect_FORM_CTR(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL + +# these are all TODO! +TYPE spoolss_TimeCtr "offset = dissect_ndr_byte_array(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_JobInfoContainer "offset = dissect_ndr_byte_array(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE RPC_BIDI_REQUEST_CONTAINER "offset = dissect_ndr_byte_array(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE RPC_BIDI_RESPONSE_CONTAINER "offset = dissect_ndr_byte_array(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_AddDriverInfoCtr "offset = dissect_ndr_byte_array(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_SetPortInfoContainer "offset = dissect_ndr_byte_array(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_PortVarContainer "offset = dissect_ndr_byte_array(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_MonitorContainer "offset = dissect_ndr_byte_array(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_CorePrinterDriver "offset = dissect_ndr_byte_array(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_PrintPropertyValue "offset = dissect_ndr_byte_array(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_PrintNamedProperty "offset = dissect_ndr_byte_array(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL +TYPE spoolss_BranchOfficeJobDataContainer "offset = dissect_ndr_byte_array(tvb, offset, pinfo, tree, di, drep);" FT_NONE BASE_NONE 0 NULL NULL + +CODE START + #include "packet-smb.h" + #include "packet-smb-browse.h" + +extern struct access_mask_info spoolss_printer_access_mask_info; + +static int +iremotewinspool_dissect_sec_desc_buf(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep) +{ + guint32 len; + + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, + hf_iremotewinspool_sec_desc_buf_len, &len); + + dissect_nt_sec_desc( + tvb, offset, pinfo, tree, drep, TRUE, len, + &spoolss_printer_access_mask_info); + + offset += len; + + return offset; +} + +CODE END diff --git a/epan/dissectors/pidl/winspool/winspool.idl b/epan/dissectors/pidl/winspool/winspool.idl new file mode 100644 index 00000000..09d6506a --- /dev/null +++ b/epan/dissectors/pidl/winspool/winspool.idl @@ -0,0 +1,878 @@ +#include "idl_types.h" + +/* + * IRemoteWinspool interface definitions + * + * This IDL defines the "Print System Asynchronous Remote Protocol" MS-PAR + * interface. + * + * Currently only eight functions in this interface have no matching functions + * in the "spoolss" interface. All other functions have a 1-to-1 match but + * different opcodes than the spoolss interface. + * + * Every request on this interface requires a object uuid of + * "9940CA8E-512F-4C58-88A9-61098D6896BD" to be sent along with the DCE/RPC + * header. + * + * On Windows, this interface uses [ncacn_ip_tcp] transport and requires + * DCERPC_AUTH_TYPE_SPNEGO and at least DCERPC_AUTH_LEVEL_PACKET authentication. + * + * + */ + +import "misc.idl", "winreg.idl", "spoolss.idl"; + +[ + uuid("76f03f96-cdfd-44fc-a22c-64950A001209"), + version(1.0), + endpoint("ncacn_ip_tcp:"), + pointer_default(unique), + helpstring("IRemoteWinspool SubSystem") +] + interface iremotewinspool +{ +#if 0 + /* + * pidl does not yet have a real [context_handle] implementation, so we + * just use some defines here. + */ + + typedef [context_handle] void *GDI_HANDLE; + typedef [context_handle] void *PRINTER_HANDLE; + typedef [context_handle] void *RMTNTFY_HANDLE; +#else +#define GDI_HANDLE policy_handle +#define PRINTER_HANDLE policy_handle +#define RMTNTFY_HANDLE policy_handle +#endif + + const string IREMOTEWINSPOOL_OBJECT_GUID = "9940CA8E-512F-4C58-88A9-61098D6896BD"; + + /******************/ + /* Function: 0x00 */ + + typedef struct { + spoolss_NotifyInfo *pInfo; + } winspool_NOTIFY_REPLY_CONTAINER; + + typedef struct { + spoolss_NotifyOption *pOptions; + } winspool_NOTIFY_OPTIONS_CONTAINER; + + [public] WERROR winspool_AsyncOpenPrinter( + [in,unique] [string,charset(UTF16)] uint16 *pPrinterName, + [out] PRINTER_HANDLE *pHandle, + [in,unique] [string,charset(UTF16)] uint16 *pDatatype, + [in] spoolss_DevmodeContainer *pDevModeContainer, + [in] uint32 AccessRequired, + [in] spoolss_UserLevelCtr *pClientInfo + ); + + /******************/ + /* Function: 0x01 */ + + WERROR winspool_AsyncAddPrinter( + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in] spoolss_SetPrinterInfoCtr *pPrinterContainer, + [in] spoolss_DevmodeContainer *pDevModeContainer, + [in] sec_desc_buf *pSecurityContainer, + [in] spoolss_UserLevelCtr *pClientInfo, + [out] PRINTER_HANDLE *pHandle + ); + + /******************/ + /* Function: 0x02 */ + + WERROR winspool_AsyncSetJob( + [in] PRINTER_HANDLE hPrinter, + [in] uint32 JobId, + [in, unique] spoolss_JobInfoContainer *pJobContainer, + [in] uint32 Command + ); + + /******************/ + /* Function: 0x03 */ + + WERROR winspool_AsyncGetJob( + [in] PRINTER_HANDLE hPrinter, + [in] uint32 JobId, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pJob, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded + ); + + /******************/ + /* Function: 0x04 */ + + WERROR winspool_AsyncEnumJobs( + [in] PRINTER_HANDLE hPrinter, + [in] uint32 FirstJob, + [in] uint32 NoJobs, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pJob, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded, + [out] uint32 *pcReturned + ); + + /******************/ + /* Function: 0x05 */ + + WERROR winspool_AsyncAddJob( + [in] PRINTER_HANDLE hPrinter, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pAddJob, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded + ); + + /******************/ + /* Function: 0x06 */ + + WERROR winspool_AsyncScheduleJob( + [in] PRINTER_HANDLE hPrinter, + [in] uint32 JobId + ); + + /******************/ + /* Function: 0x07 */ + + WERROR winspool_AsyncDeletePrinter( + [in] PRINTER_HANDLE hPrinter + ); + + /******************/ + /* Function: 0x08 */ + + [public] WERROR winspool_AsyncSetPrinter( + [in] PRINTER_HANDLE hPrinter, + [in] spoolss_SetPrinterInfoCtr *pPrinterContainer, + [in] spoolss_DevmodeContainer *pDevModeContainer, + [in] sec_desc_buf *pSecurityContainer, + [in] uint32 Command + ); + + /******************/ + /* Function: 0x09 */ + + [public] WERROR winspool_AsyncGetPrinter( + [in] PRINTER_HANDLE hPrinter, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pPrinter, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded + ); + + /******************/ + /* Function: 0x0a */ + + WERROR winspool_AsyncStartDocPrinter( + [in] PRINTER_HANDLE hPrinter, + [in] spoolss_DocumentInfoCtr *pDocInfoContainer, + [out] uint32 *pJobId + ); + + /******************/ + /* Function: 0x0b */ + + WERROR winspool_AsyncStartPagePrinter( + [in] PRINTER_HANDLE hPrinter + ); + + /******************/ + /* Function: 0x0c */ + + WERROR winspool_AsyncWritePrinter( + [in] PRINTER_HANDLE hPrinter, + [in, size_is(cbBuf)] uint8 *pBuf, + [in] uint32 cbBuf, + [out] uint32 *pcWritten + ); + + /******************/ + /* Function: 0x0d */ + + WERROR winspool_AsyncEndPagePrinter( + [in] PRINTER_HANDLE hPrinter + ); + + /******************/ + /* Function: 0x0e */ + + WERROR winspool_AsyncEndDocPrinter( + [in] PRINTER_HANDLE hPrinter + ); + + /******************/ + /* Function: 0x0f */ + + WERROR winspool_AsyncAbortPrinter( + [in] PRINTER_HANDLE hPrinter + ); + + /******************/ + /* Function: 0x10 */ + + [public] WERROR winspool_AsyncGetPrinterData( + [in] PRINTER_HANDLE hPrinter, + [in] [string,charset(UTF16)] uint16 *pValueName, + [out] uint32 *pType, + [out, size_is(nSize)] uint8 *pData, + [in] uint32 nSize, + [out] uint32 *pcbNeeded + ); + + /******************/ + /* Function: 0x11 */ + + WERROR winspool_AsyncGetPrinterDataEx( + [in] PRINTER_HANDLE hPrinter, + [in] [string,charset(UTF16)] uint16 *pKeyName, + [in] [string,charset(UTF16)] uint16 *pValueName, + [out] uint32 *pType, + [out, size_is(nSize)] uint8 *pData, + [in] uint32 nSize, + [out] uint32 *pcbNeeded + ); + + /******************/ + /* Function: 0x12 */ + + WERROR winspool_AsyncSetPrinterData( + [in] PRINTER_HANDLE hPrinter, + [in] [string,charset(UTF16)] uint16 *pValueName, + [in] uint32 Type, + [in, size_is(cbData)] uint8 *pData, + [in] uint32 cbData + ); + + /******************/ + /* Function: 0x13 */ + + WERROR winspool_AsyncSetPrinterDataEx( + [in] PRINTER_HANDLE hPrinter, + [in] [string,charset(UTF16)] uint16 *pKeyName, + [in] [string,charset(UTF16)] uint16 *pValueName, + [in] uint32 Type, + [in, size_is(cbData)] uint8 *pData, + [in] uint32 cbData + ); + + /******************/ + /* Function: 0x14 */ + + [public] WERROR winspool_AsyncClosePrinter( + [in, out] PRINTER_HANDLE *phPrinter + ); + + /******************/ + /* Function: 0x15 */ + + WERROR winspool_AsyncAddForm( + [in] PRINTER_HANDLE hPrinter, + [in] spoolss_AddFormInfoCtr *pFormInfoContainer + ); + + /******************/ + /* Function: 0x16 */ + + WERROR winspool_AsyncDeleteForm( + [in] PRINTER_HANDLE hPrinter, + [in] [string,charset(UTF16)] uint16 *pFormName + ); + + /******************/ + /* Function: 0x17 */ + + WERROR winspool_AsyncGetForm( + [in] PRINTER_HANDLE hPrinter, + [in] [string,charset(UTF16)] uint16 *pFormName, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pForm, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded + ); + + /******************/ + /* Function: 0x18 */ + + WERROR winspool_AsyncSetForm( + [in] PRINTER_HANDLE hPrinter, + [in] [string,charset(UTF16)] uint16 *pFormName, + [in] spoolss_AddFormInfoCtr *pFormInfoContainer + ); + + /******************/ + /* Function: 0x19 */ + + [public] WERROR winspool_AsyncEnumForms( + [in] PRINTER_HANDLE hPrinter, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pForm, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded, + [out] uint32 *pcReturned + ); + + /******************/ + /* Function: 0x1a */ + + [public] WERROR winspool_AsyncGetPrinterDriver( + [in] PRINTER_HANDLE hPrinter, + [in,unique] [string,charset(UTF16)] uint16 *pEnvironment, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pDriver, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded, + [in] uint32 dwClientMajorVersion, + [in] uint32 dwClientMinorVersion, + [out] uint32 *pdwServerMaxVersion, + [out] uint32 *pdwServerMinVersion + ); + + /******************/ + /* Function: 0x1b */ + + WERROR winspool_AsyncEnumPrinterData( + [in] PRINTER_HANDLE hPrinter, + [in] uint32 dwIndex, + [out, size_is(cbValueName/2)] uint16 *pValueName, + [in] uint32 cbValueName, + [out] uint32 *pcbValueName, + [out] uint32 *pType, + [out, size_is(cbData)] uint8 *pData, + [in] uint32 cbData, + [out] uint32 *pcbData + ); + + /******************/ + /* Function: 0x1c */ + + [public] WERROR winspool_AsyncEnumPrinterDataEx( + [in] PRINTER_HANDLE hPrinter, + [in] [string,charset(UTF16)] uint16 *pKeyName, + [out, size_is(cbEnumValues)] uint8 *pEnumValues, + [in] uint32 cbEnumValues, + [out] uint32 *pcbEnumValues, + [out] uint32 *pnEnumValues + ); + + /******************/ + /* Function: 0x1d */ + + [public] WERROR winspool_AsyncEnumPrinterKey( + [in] PRINTER_HANDLE hPrinter, + [in] [string,charset(UTF16)] uint16 *pKeyName, + [out, size_is(cbSubkey/2)] uint16 *pSubkey, + [in] uint32 cbSubkey, + [out] uint32 *pcbSubkey + ); + + /******************/ + /* Function: 0x1e */ + + WERROR winspool_AsyncDeletePrinterData( + [in] PRINTER_HANDLE hPrinter, + [in] [string,charset(UTF16)] uint16 *pValueName + ); + + /******************/ + /* Function: 0x1f */ + + WERROR winspool_AsyncDeletePrinterDataEx( + [in] PRINTER_HANDLE hPrinter, + [in] [string,charset(UTF16)] uint16 *pKeyName, + [in] [string,charset(UTF16)] uint16 *pValueName + ); + + /******************/ + /* Function: 0x20 */ + + WERROR winspool_AsyncDeletePrinterKey( + [in] PRINTER_HANDLE hPrinter, + [in] [string,charset(UTF16)] uint16 *pKeyName + ); + + /******************/ + /* Function: 0x21 */ + + WERROR winspool_AsyncXcvData( + [in] PRINTER_HANDLE hXcv, + [in] [string,charset(UTF16)] uint16 *pszDataName, + [in, size_is(cbInputData)] uint8 *pInputData, + [in] uint32 cbInputData, + [out, size_is(cbOutputData)] uint8 *pOutputData, + [in] uint32 cbOutputData, + [out] uint32 *pcbOutputNeeded, + [in, out] uint32 *pdwStatus + ); + + /******************/ + /* Function: 0x22 */ + + WERROR winspool_AsyncSendRecvBidiData ( + [in] PRINTER_HANDLE hPrinter, + [in,unique] [string,charset(UTF16)] uint16 *pAction, + [in] RPC_BIDI_REQUEST_CONTAINER* pReqData, + [out] RPC_BIDI_RESPONSE_CONTAINER** ppRespData + ); + + /******************/ + /* Function: 0x23 */ + + WERROR winspool_AsyncCreatePrinterIC( + [in] PRINTER_HANDLE hPrinter, + [out] GDI_HANDLE *pHandle, + [in] spoolss_DevmodeContainer *pDevModeContainer + ); + + /******************/ + /* Function: 0x24 */ + + WERROR winspool_AsyncPlayGdiScriptOnPrinterIC( + [in] GDI_HANDLE hPrinterIC, + [in, size_is(cIn)] uint8 *pIn, + [in] uint32 cIn, + [out, size_is(cOut)] uint8 *pOut, + [in] uint32 cOut, + [in] uint32 ul + ); + + /******************/ + /* Function: 0x25 */ + + WERROR winspool_AsyncDeletePrinterIC( + [in, out] GDI_HANDLE *phPrinterIC + ); + + /******************/ + /* Function: 0x26 */ + + WERROR winspool_AsyncEnumPrinters( + [in] uint32 Flags, + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pPrinterEnum, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded, + [out] uint32 *pcReturned + ); + + /******************/ + /* Function: 0x27 */ + + [public] WERROR winspool_AsyncAddPrinterDriver( + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in] spoolss_AddDriverInfoCtr *pDriverContainer, + [in] uint32 dwFileCopyFlags + ); + + /******************/ + /* Function: 0x28 */ + + WERROR winspool_AsyncEnumPrinterDrivers( + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in,unique] [string,charset(UTF16)] uint16 *pEnvironment, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pDrivers, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded, + [out] uint32 *pcReturned + ); + + /******************/ + /* Function: 0x29 */ + + [public] WERROR winspool_AsyncGetPrinterDriverDirectory( + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in,unique] [string,charset(UTF16)] uint16 *pEnvironment, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pDriverDirectory, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded + ); + + /******************/ + /* Function: 0x2a */ + + WERROR winspool_AsyncDeletePrinterDriver( + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in] [string,charset(UTF16)] uint16 *pEnvironment, + [in] [string,charset(UTF16)] uint16 *pDriverName + ); + + /******************/ + /* Function: 0x2b */ + + WERROR winspool_AsyncDeletePrinterDriverEx( + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in] [string,charset(UTF16)] uint16 *pEnvironment, + [in] [string,charset(UTF16)] uint16 *pDriverName, + [in] uint32 dwDeleteFlag, + [in] uint32 dwVersionNum + ); + + /******************/ + /* Function: 0x2c */ + + WERROR winspool_AsyncAddPrintProcessor( + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in] [string,charset(UTF16)] uint16 *pEnvironment, + [in] [string,charset(UTF16)] uint16 *pPathName, + [in] [string,charset(UTF16)] uint16 *pPrintProcessorName + ); + + /******************/ + /* Function: 0x2d */ + + WERROR winspool_AsyncEnumPrintProcessors( + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in,unique] [string,charset(UTF16)] uint16 *pEnvironment, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pPrintProcessorInfo, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded, + [out] uint32 *pcReturned + ); + + /******************/ + /* Function: 0x2e */ + + WERROR winspool_AsyncGetPrintProcessorDirectory( + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in,unique] [string,charset(UTF16)] uint16 *pEnvironment, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pPrintProcessorDirectory, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded + ); + + /******************/ + /* Function: 0x2f */ + + WERROR winspool_AsyncEnumPorts( + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pPort, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded, + [out] uint32 *pcReturned + ); + + /******************/ + /* Function: 0x30 */ + + WERROR winspool_AsyncEnumMonitors( + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pMonitor, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded, + [out] uint32 *pcReturned + ); + + /******************/ + /* Function: 0x31 */ + + WERROR winspool_AsyncAddPort( + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in] spoolss_SetPortInfoContainer *pPortContainer, + [in] spoolss_PortVarContainer *pPortVarContainer, + [in] [string,charset(UTF16)] uint16 *pMonitorName + ); + + /******************/ + /* Function: 0x32 */ + + WERROR winspool_AsyncSetPort( + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in,unique] [string,charset(UTF16)] uint16 *pPortName, + [in] spoolss_SetPortInfoContainer *pPortContainer + ); + + /******************/ + /* Function: 0x33 */ + + WERROR winspool_AsyncAddMonitor( + [in,unique] [string,charset(UTF16)] uint16 *Name, + [in] spoolss_MonitorContainer *pMonitorContainer + ); + + /******************/ + /* Function: 0x34 */ + + WERROR winspool_AsyncDeleteMonitor( + [in,unique] [string,charset(UTF16)] uint16 *Name, + [in,unique] [string,charset(UTF16)] uint16 *pEnvironment, + [in] [string,charset(UTF16)] uint16 *pMonitorName + ); + + /******************/ + /* Function: 0x35 */ + + WERROR winspool_AsyncDeletePrintProcessor( + [in,unique] [string,charset(UTF16)] uint16 *Name, + [in,unique] [string,charset(UTF16)] uint16 *pEnvironment, + [in] [string,charset(UTF16)] uint16 *pPrintProcessorName + ); + + /******************/ + /* Function: 0x36 */ + + WERROR winspool_AsyncEnumPrintProcessorDatatypes( + [in,unique] [string,charset(UTF16)] uint16 *pName, + [in,unique] [string,charset(UTF16)] uint16 *pPrintProcessorName, + [in] uint32 Level, + [in, out, unique, size_is(cbBuf)] uint8 *pDatatypes, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded, + [out] uint32 *pcReturned + ); + + /******************/ + /* Function: 0x37 */ + + WERROR winspool_AsyncAddPerMachineConnection( + [in,unique] [string,charset(UTF16)] uint16 *pServer, + [in] [string,charset(UTF16)] uint16 *pPrinterName, + [in] [string,charset(UTF16)] uint16 *pPrintServer, + [in] [string,charset(UTF16)] uint16 *pProvider + ); + + /******************/ + /* Function: 0x38 */ + + WERROR winspool_AsyncDeletePerMachineConnection( + [in,unique] [string,charset(UTF16)] uint16 *pServer, + [in] [string,charset(UTF16)] uint16 *pPrinterName + ); + + /******************/ + /* Function: 0x39 */ + + WERROR winspool_AsyncEnumPerMachineConnections( + [in,unique] [string,charset(UTF16)] uint16 *pServer, + [in, out, unique, size_is(cbBuf)] uint8 *pPrinterEnum, + [in] uint32 cbBuf, + [out] uint32 *pcbNeeded, + [out] uint32 *pcReturned + ); + + /******************/ + /* Function: 0x3a */ + + typedef enum { + winspool_PropertyTypeString = 1, + winspool_PropertyTypeInt32 = 2, + winspool_PropertyTypeInt64 = 3, + winspool_PropertyTypeByte = 4, + winspool_PropertyTypeTime = 5, + winspool_PropertyTypeDevMode = 6, + winspool_PropertyTypeSD = 7, + winspool_PropertyTypeNotificationReply = 8, + winspool_PropertyTypeNotificationOptions = 9 + } winspool_PrintPropertyType; + + typedef [ms_union,switch_type(winspool_PrintPropertyType)] union { + [case(winspool_PropertyTypeString)] [string,charset(UTF16)] uint16 *propertyString; + [case(winspool_PropertyTypeInt32)] uint32 propertyInt32; + [case(winspool_PropertyTypeInt64)] hyper propertyInt64; + [case(winspool_PropertyTypeByte)] uint8 propertyByte; + [case(winspool_PropertyTypeTime)] spoolss_TimeCtr propertyTimeContainer; + [case(winspool_PropertyTypeDevMode)] spoolss_DevmodeContainer propertyDevModeContainer; + [case(winspool_PropertyTypeSD)] sec_desc_buf propertySDContainer; + [case(winspool_PropertyTypeNotificationReply)] winspool_NOTIFY_REPLY_CONTAINER propertyReplyContainer; + [case(winspool_PropertyTypeNotificationOptions)] winspool_NOTIFY_OPTIONS_CONTAINER propertyOptionsContainer; + } winspool_PrintPropertyValueUnion; + + typedef struct { + winspool_PrintPropertyType PropertyType; + [switch_is(PropertyType)] winspool_PrintPropertyValueUnion value; + } winspool_PrintPropertyValue; + + typedef struct { + [string,charset(UTF16)] uint16 *propertyName; + winspool_PrintPropertyValue propertyValue; + } winspool_PrintNamedProperty; + + typedef struct { + [range(0,50)] uint32 numberOfProperties; + [size_is(numberOfProperties), unique] winspool_PrintNamedProperty *propertiesCollection; + } winspool_PrintPropertiesCollection; + + [public] HRESULT winspool_SyncRegisterForRemoteNotifications( + [in] PRINTER_HANDLE hPrinter, + [in] winspool_PrintPropertiesCollection *pNotifyFilter, + [out] RMTNTFY_HANDLE *phRpcHandle + ); + + /******************/ + /* Function: 0x3b */ + + HRESULT winspool_SyncUnRegisterForRemoteNotifications( + [in, out] RMTNTFY_HANDLE *phRpcHandle + ); + + /******************/ + /* Function: 0x3c */ + + HRESULT winspool_SyncRefreshRemoteNotifications( + [in] RMTNTFY_HANDLE hRpcHandle, + [in] winspool_PrintPropertiesCollection *pNotifyFilter, + [out] winspool_PrintPropertiesCollection **ppNotifyData + ); + + /******************/ + /* Function: 0x3d */ + + HRESULT winspool_AsyncGetRemoteNotifications( + [in] RMTNTFY_HANDLE hRpcHandle, + [out] winspool_PrintPropertiesCollection **ppNotifyData + ); + + /******************/ + /* Function: 0x3e */ + + typedef [bitmap32bit] bitmap { + IPDFP_FLAG_NONE = 0x00000000, + IPDFP_COPY_ALL_FILES = 0x00000001 + } winspool_InstallPrinterDriverFromPackageFlags; + + HRESULT winspool_AsyncInstallPrinterDriverFromPackage( + [in,unique] [string,charset(UTF16)] uint16 *pszServer, + [in,unique] [string,charset(UTF16)] uint16 *pszInfPath, + [in] [string,charset(UTF16)] uint16 *pszDriverName, + [in] [string,charset(UTF16)] uint16 *pszEnvironment, + [in] winspool_InstallPrinterDriverFromPackageFlags dwFlags + ); + + /******************/ + /* Function: 0x3f */ + + typedef [bitmap32bit] bitmap { + UPDP_FLAG_NONE = 0x00000000, + UPDP_UPLOAD_ALWAYS = 0x00000002, + UPDP_CHECK_DRIVERSTORE = 0x00000004 + } winspool_UploadPrinterDriverPackageFlags; + + HRESULT winspool_AsyncUploadPrinterDriverPackage( + [in,unique] [string,charset(UTF16)] uint16 *pszServer, + [in] [string,charset(UTF16)] uint16 *pszInfPath, + [in] [string,charset(UTF16)] uint16 *pszEnvironment, + [in] winspool_UploadPrinterDriverPackageFlags dwFlags, + [in, out, unique, size_is(*pcchDestInfPath)] [charset(UTF16)] uint16 *pszDestInfPath, + [in, out] uint32 *pcchDestInfPath + ); + + /******************/ + /* Function: 0x40 */ + + [public] HRESULT winspool_AsyncGetCorePrinterDrivers( + [in,unique] [string,charset(UTF16)] uint16 *pszServer, + [in] [string,charset(UTF16)] uint16 *pszEnvironment, + [in] uint32 cchCoreDrivers, + [in, size_is(cchCoreDrivers)] uint16 *pszzCoreDriverDependencies, + [in] uint32 cCorePrinterDrivers, + [out, size_is(cCorePrinterDrivers)] spoolss_CorePrinterDriver *pCorePrinterDrivers + ); + + /******************/ + /* Function: 0x41 */ + + HRESULT winspool_AsyncCorePrinterDriverInstalled( + [in,unique] [string,charset(UTF16)] uint16 *pszServer, + [in] [string,charset(UTF16)] uint16 *pszEnvironment, + [in] GUID CoreDriverGUID, + [in] NTTIME ftDriverDate, + [in] hyper dwlDriverVersion, + [out] int *pbDriverInstalled + ); + + /******************/ + /* Function: 0x42 */ + + HRESULT winspool_AsyncGetPrinterDriverPackagePath( + [in,unique] [string,charset(UTF16)] uint16 *pszServer, + [in] [string,charset(UTF16)] uint16 *pszEnvironment, + [in,unique] [string,charset(UTF16)] uint16 *pszLanguage, + [in] [string,charset(UTF16)] uint16 *pszPackageID, + [in, out, unique, size_is(cchDriverPackageCab)] uint16 *pszDriverPackageCab, + [in] uint32 cchDriverPackageCab, + [out] uint32 *pcchRequiredSize + ); + + /******************/ + /* Function: 0x43 */ + + HRESULT winspool_AsyncDeletePrinterDriverPackage( + [in,unique] [string,charset(UTF16)] uint16 *pszServer, + [in] [string,charset(UTF16)] uint16 *pszInfPath, + [in] [string,charset(UTF16)] uint16 *pszEnvironment + ); + + /******************/ + /* Function: 0x44 */ + + WERROR winspool_AsyncReadPrinter( + [in] PRINTER_HANDLE hPrinter, + [out, size_is(cbBuf)] uint8 *pBuf, + [in] uint32 cbBuf, + [out] uint32 *pcNoBytesRead + ); + + /******************/ + /* Function: 0x45 */ + + WERROR winspool_AsyncResetPrinter( + [in] PRINTER_HANDLE hPrinter, + [in,unique] [string,charset(UTF16)] uint16 *pDatatype, + [in] spoolss_DevmodeContainer *pDevModeContainer + ); + + /******************/ + /* Function: 0x46 */ + + WERROR winspool_AsyncGetJobNamedPropertyValue( + [in] PRINTER_HANDLE hPrinter, + [in] uint32 JobId, + [in] [string,charset(UTF16)] uint16 *pszName, + [out] spoolss_PrintPropertyValue *pValue + ); + + /******************/ + /* Function: 0x47 */ + + [public] WERROR winspool_AsyncSetJobNamedProperty( + [in] PRINTER_HANDLE hPrinter, + [in] uint32 JobId, + [in] spoolss_PrintNamedProperty *pProperty + ); + + /******************/ + /* Function: 0x48 */ + + WERROR winspool_AsyncDeleteJobNamedProperty( + [in] PRINTER_HANDLE hPrinter, + [in] uint32 JobId, + [in] [string,charset(UTF16)] uint16 *pszName + ); + + /******************/ + /* Function: 0x49 */ + + WERROR winspool_AsyncEnumJobNamedProperties( + [in] PRINTER_HANDLE hPrinter, + [in] uint32 JobId, + [out] uint32 *pcProperties, + [out, size_is(,*pcProperties)] spoolss_PrintNamedProperty **ppProperties + ); + + /******************/ + /* Function: 0x4a */ + + WERROR winspool_AsyncLogJobInfoForBranchOffice( + [in] PRINTER_HANDLE hPrinter, + [in,ref] spoolss_BranchOfficeJobDataContainer *pBranchOfficeJobDataContainer + ); +} diff --git a/epan/dissectors/pidl/witness/witness.cnf b/epan/dissectors/pidl/witness/witness.cnf new file mode 100644 index 00000000..76d255e4 --- /dev/null +++ b/epan/dissectors/pidl/witness/witness.cnf @@ -0,0 +1,240 @@ +MANUAL witness_dissect_element_interfaceInfo_group_name +NOEMIT witness_dissect_element_interfaceInfo_group_name +MANUAL witness_dissect_struct_notifyResponse +MANUAL witness_dissect_element_notifyResponse_messages +NOEMIT witness_dissect_element_notifyResponse_messages +MANUAL witness_dissect_struct_IPaddrInfoList +NOEMIT witness_dissect_struct_IPaddrInfoList +NOEMIT witness_dissect_element_IPaddrInfoList_addr + +HF_FIELD hf_witness_witness_notifyResponse_messages_ "Messages" "witness.witness_notifyResponse.messages_" FT_NONE BASE_NONE NULL 0 "" "" "" + +TYPE ipv4address "offset=PIDL_dissect_ipv4address(tvb, offset, pinfo, tree, di, drep, @HF@, PIDL_SET_COL_INFO);" FT_IPv4 BASE_NONE 0 NULL 4 + +TYPE ipv6address "offset=PIDL_dissect_ipv6address(tvb, offset, pinfo, tree, di, drep, @HF@, PIDL_SET_COL_INFO);" FT_IPv6 BASE_NONE 0 NULL 2 + +CODE START + + #include "to_str.h" + +static int +witness_dissect_notifyResponse_message(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_); + +static int +witness_dissect_notifyResponse_message_(tvbuff_t *tvb, int offset, int length _U_, packet_info *pinfo, + proto_tree *tree, dcerpc_info *di, guint8 *drep _U_) +{ + guint32 *type = (guint32 *)di->private_data; + guint8 le_drep[4] = { DREP_LITTLE_ENDIAN, }; + return witness_dissect_notifyResponse_message(tvb, offset, pinfo, tree, di, le_drep, + hf_witness_witness_notifyResponse_messages_, *type); +} + +static int +witness_dissect_element_notifyResponse_messages(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info *di _U_, guint8 *drep _U_) +{ + offset = dissect_ndr_ucarray_block(tvb, offset, pinfo, tree, di, drep, + witness_dissect_notifyResponse_message_); + return offset; +} + +int +witness_dissect_struct_notifyResponse(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + guint32 *type = NULL; + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + + ALIGN_TO_4_BYTES; + + ALIGN_TO_4_BYTES; + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_witness_witness_notifyResponse); + } + + type = wmem_new0(pinfo->pool, guint32); + + offset = witness_dissect_element_notifyResponse_type(tvb, offset, pinfo, tree, di, drep, type); + + offset = witness_dissect_element_notifyResponse_length(tvb, offset, pinfo, tree, di, drep); + + offset = witness_dissect_element_notifyResponse_num(tvb, offset, pinfo, tree, di, drep); + + di->private_data = type; + offset = dissect_ndr_embedded_pointer(tvb, offset, pinfo, tree, di, drep, + witness_dissect_element_notifyResponse_messages, + NDR_POINTER_UNIQUE, "Pointer to Message Buffer (uint8)", + hf_witness_witness_notifyResponse_messages); + + proto_item_set_len(item, offset-old_offset); + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_4_BYTES; + } + + return offset; +} + +static int +witness_dissect_element_IPaddrInfoList_addr(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_) +{ + offset = witness_dissect_struct_IPaddrInfo(tvb,offset,pinfo,tree,di,drep,hf_witness_witness_IPaddrInfoList_addr,0); + + return offset; +} + +int +witness_dissect_struct_IPaddrInfoList(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + gboolean oldalign = di->no_align; + int old_offset; + guint32 i, num; + + di->no_align = TRUE; + + old_offset = offset; + + if (parent_tree) { + item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, -1, ENC_NA); + tree = proto_item_add_subtree(item, ett_witness_witness_IPaddrInfoList); + } + + offset = witness_dissect_element_IPaddrInfoList_length(tvb, offset, pinfo, tree, di, drep); + + offset = witness_dissect_element_IPaddrInfoList_reserved(tvb, offset, pinfo, tree, di, drep); + + num = tvb_get_letohl(tvb, offset); + + offset = witness_dissect_element_IPaddrInfoList_num(tvb, offset, pinfo, tree, di, drep); + + for (i = 0; i < num; i++) { + offset = witness_dissect_element_IPaddrInfoList_addr(tvb, offset, pinfo, tree, di, drep); + } + + proto_item_set_len(item, offset-old_offset); + + di->no_align = oldalign; + + return offset; +} + +static int +witness_dissect_element_interfaceInfo_group_name(tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *parent_tree, dcerpc_info *di _U_, guint8 *drep _U_) +{ + int totlen, stringlen; + char *str; + proto_item *pi; + + /* + * XXX - this is described as + * + * [charset(UTF16),to_null] uint16 group_name[260]; + * + * I haven't found any documentation for what "to_null" means + * in PIDL; is this a null-padded 260*2-byte array, so that + * strings can be up to 260 16-bit units in length, or is + * it a null-*terminated* string, so that it can be up to 259 + * 16-bit units in length? + * + * We assume it's null-padded, for now, and scan for a 2-byte + * null terminator within the 260 2-byte units, and use + * that as the length, with the length being 2*260 if there + * isn't one. + * + * This will result in totlen being the total length, in + * bytes, of the string, including the null terminator, if + * present, and stringlen being the total length, in bytes. + * not counting any null terminator. + */ + totlen = 0; + stringlen = 0; + while (totlen < 2*260) { + /* + * These 2 bytes are either part of the string + * or part of the null terminator, so count + * them. + */ + totlen += 2; + if (tvb_get_letohs(tvb, offset + stringlen) == 0) + break; + /* + * Those 2 bytes are part of the string, so + * count them. + */ + stringlen += 2; + } + pi = proto_tree_add_item_ret_display_string(parent_tree, + hf_witness_witness_interfaceInfo_group_name, tvb, offset, stringlen, + ENC_UTF_16|ENC_LITTLE_ENDIAN, + pinfo->pool, &str); + proto_item_append_text(pi, " [%d]", totlen); + proto_item_append_text(parent_tree, ": %s", str); + + /* + * All 260 16-bit units are part of the field, as they're always + * there even if they don't need to be. + */ + return offset + 2*260; +} + +static int +PIDL_dissect_ipv4address(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info *di, guint8 *drep _U_, int hfindex, guint32 param) +{ + if (di->conformant_run) { + /* just a run to handle conformant arrays, no scalars to dissect */ + return offset; + } + + + if (!di->no_align && (offset % 4)) { + offset += 4 - (offset % 4); + } + + proto_tree_add_item(tree, hfindex, tvb, offset, 4, ENC_BIG_ENDIAN); + + if (param & PIDL_SET_COL_INFO) { + const char *ip = tvb_ip_to_str(pinfo->pool, tvb, offset); + header_field_info *hf_info = proto_registrar_get_nth(hfindex); + + proto_item_append_text(proto_tree_get_parent(tree), " %s:%s", hf_info->name, ip); + + col_append_fstr(pinfo->cinfo, COL_INFO," %s:%s", hf_info->name, ip); + } + return offset + 4; +} + +static int +PIDL_dissect_ipv6address(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info *di, guint8 *drep _U_, int hfindex, guint32 param) +{ + if (di->conformant_run) { + /* just a run to handle conformant arrays, no scalars to dissect */ + return offset; + } + + + if (!di->no_align && (offset % 2)) { + offset += 2 - (offset % 2); + } + + proto_tree_add_item(tree, hfindex, tvb, offset, 16, ENC_BIG_ENDIAN); + + if (param & PIDL_SET_COL_INFO) { + const char *ip = tvb_ip6_to_str(pinfo->pool, tvb, offset); + header_field_info *hf_info = proto_registrar_get_nth(hfindex); + + proto_item_append_text(proto_tree_get_parent(tree), " %s:%s", hf_info->name, ip); + + col_append_fstr(pinfo->cinfo, COL_INFO," %s:%s", hf_info->name, ip); + } + + return offset + 16; +} + +CODE END diff --git a/epan/dissectors/pidl/witness/witness.idl b/epan/dissectors/pidl/witness/witness.idl new file mode 100644 index 00000000..ecfa1af8 --- /dev/null +++ b/epan/dissectors/pidl/witness/witness.idl @@ -0,0 +1,152 @@ +#include "idl_types.h" + +import "misc/misc.idl"; + +[ + uuid("ccd8c074-d0e5-4a40-92b4-d074faa6ba28"), + version(1.1), + pointer_default(unique), + helpstring("SMB Witness Service"), + helper("../librpc/ndr/ndr_witness.h"), + endpoint("ncacn_ip_tcp:") +] +interface witness +{ + typedef [v1_enum] enum { + WITNESS_V1 = 0x00010001, + WITNESS_V2 = 0x00020000, + WITNESS_UNSPECIFIED_VERSION = 0xFFFFFFFF + } witness_version; + + /*****************/ + /* Function 0x00 */ + + typedef [enum16bit] enum { + WITNESS_STATE_UNKNOWN = 0x00, + WITNESS_STATE_AVAILABLE = 0x01, + WITNESS_STATE_UNAVAILABLE = 0xff + } witness_interfaceInfo_state; + + typedef [bitmap32bit] bitmap { + WITNESS_INFO_IPv4_VALID = 0x01, + WITNESS_INFO_IPv6_VALID = 0x02, + WITNESS_INFO_WITNESS_IF = 0x04 + } witness_interfaceInfo_flags; + + typedef struct { + [charset(UTF16),to_null] uint16 group_name[260]; + witness_version version; + witness_interfaceInfo_state state; + [flag(NDR_BIG_ENDIAN)] ipv4address ipv4; + [flag(NDR_BIG_ENDIAN)] ipv6address ipv6; + witness_interfaceInfo_flags flags; + } witness_interfaceInfo; + + typedef struct { + uint32 num_interfaces; + [size_is(num_interfaces)] witness_interfaceInfo *interfaces; + } witness_interfaceList; + + [public] WERROR witness_GetInterfaceList( + [out] witness_interfaceList **interface_list + ); + + /*****************/ + /* Function 0x01 */ + + [public] WERROR witness_Register( + [out,ref] policy_handle *context_handle, + [in] witness_version version, + [in,unique,string,charset(UTF16)] uint16 *net_name, + [in,unique,string,charset(UTF16)] uint16 *ip_address, + [in,unique,string,charset(UTF16)] uint16 *client_computer_name + ); + + /*****************/ + /* Function 0x02 */ + + [public] WERROR witness_UnRegister( + [in] policy_handle context_handle + ); + + /*****************/ + /* Function 0x03 */ + + typedef [v1_enum,public] enum { + WITNESS_NOTIFY_RESOURCE_CHANGE = 1, + WITNESS_NOTIFY_CLIENT_MOVE = 2, + WITNESS_NOTIFY_SHARE_MOVE = 3, + WITNESS_NOTIFY_IP_CHANGE = 4 + } witness_notifyResponse_type; + + typedef [v1_enum] enum { + WITNESS_RESOURCE_STATE_UNKNOWN = 0x00, + WITNESS_RESOURCE_STATE_AVAILABLE = 0x01, + WITNESS_RESOURCE_STATE_UNAVAILABLE = 0xff + } witness_ResourceChange_type; + + typedef [flag(NDR_NOALIGN|NDR_LITTLE_ENDIAN),gensize,public] struct { + [value(ndr_size_witness_ResourceChange(r,ndr->flags))] uint32 length; + witness_ResourceChange_type type; + nstring name; + } witness_ResourceChange; + + typedef [bitmap32bit] bitmap { + WITNESS_IPADDR_V4 = 0x01, + WITNESS_IPADDR_V6 = 0x02, + WITNESS_IPADDR_ONLINE = 0x08, + WITNESS_IPADDR_OFFLINE = 0x10 + } witness_IPaddrInfo_flags; + + typedef [flag(NDR_NOALIGN|NDR_LITTLE_ENDIAN),gensize] struct { + witness_IPaddrInfo_flags flags; + ipv4address ipv4; + ipv6address ipv6; + } witness_IPaddrInfo; + + typedef [flag(NDR_NOALIGN|NDR_LITTLE_ENDIAN)] struct { + [value(r->num*ndr_size_witness_IPaddrInfo(r->addr, ndr->flags))] uint32 length; + [value(0)] uint32 reserved; + uint32 num; + witness_IPaddrInfo addr[num]; + } witness_IPaddrInfoList; + + typedef [public,switch_type(witness_notifyResponse_type),nodiscriminant, flag(NDR_NOALIGN|NDR_LITTLE_ENDIAN)] union { + [case(WITNESS_NOTIFY_RESOURCE_CHANGE)] witness_ResourceChange resource_change; + [case(WITNESS_NOTIFY_CLIENT_MOVE)] witness_IPaddrInfoList client_move; + [case(WITNESS_NOTIFY_SHARE_MOVE)] witness_IPaddrInfoList share_move; + [case(WITNESS_NOTIFY_IP_CHANGE)] witness_IPaddrInfoList ip_change; + [default,flag(NDR_REMAINING)] DATA_BLOB data; + } witness_notifyResponse_message; + + typedef [flag(NDR_PAHEX),gensize,public,nopush,nopull] struct { + witness_notifyResponse_type type; + [value(ndr_size_witness_notifyResponse(r, ndr->flags)-20)] uint32 length; + uint32 num; + [subcontext(4), subcontext_size(length), flag(NDR_REMAINING), switch_is(type)] witness_notifyResponse_message messages[num]; + } witness_notifyResponse; + + [public] WERROR witness_AsyncNotify( + [in] policy_handle context_handle, + [out] witness_notifyResponse **response + ); + + /*****************/ + /* Function 0x04 */ + + typedef [bitmap32bit] bitmap { + WITNESS_REGISTER_NONE = 0x00, + WITNESS_REGISTER_IP_NOTIFICATION = 0x01 + } witness_RegisterEx_flags; + + WERROR witness_RegisterEx( + [out,ref] policy_handle *context_handle, + [in] witness_version version, + [in,unique,string,charset(UTF16)] uint16 *net_name, + [in,unique,string,charset(UTF16)] uint16 *share_name, + [in,unique,string,charset(UTF16)] uint16 *ip_address, + [in,unique,string,charset(UTF16)] uint16 *client_computer_name, + [in] witness_RegisterEx_flags flags, + [in] uint32 timeout + ); +} diff --git a/epan/dissectors/pidl/wkssvc/wkssvc.cnf b/epan/dissectors/pidl/wkssvc/wkssvc.cnf new file mode 100644 index 00000000..ba15ffaa --- /dev/null +++ b/epan/dissectors/pidl/wkssvc/wkssvc.cnf @@ -0,0 +1,79 @@ +TFS hf_wkssvc_wkssvc_joinflags_WKSSVC_JOIN_FLAGS_DEFER_SPN "Defer setting of servicePrincipalName and dNSHostName attributes on the computer object until a rename operation" "Set servicePrincipalName and dNSHostName attributes on the computer object" + +TFS hf_wkssvc_wkssvc_joinflags_WKSSVC_JOIN_FLAGS_MACHINE_PWD_PASSED "Set the machine password after domain join to passed password" "Do not set the machine password after domain join to passed password" + +TFS hf_wkssvc_wkssvc_joinflags_WKSSVC_JOIN_FLAGS_JOIN_UNSECURE "Performs an unsecured join" "Perform a secured join" + +TFS hf_wkssvc_wkssvc_joinflags_WKSSVC_JOIN_FLAGS_DOMAIN_JOIN_IF_JOINED "Allow a join to a new domain even if the computer is already joined to a domain" "Do not allow join to a new domain if the computer is already joined to a domain" + +TFS hf_wkssvc_wkssvc_joinflags_WKSSVC_JOIN_FLAGS_WIN9X_UPGRADE "The join operation is occurring as part of an upgrade of Windows 9x" "The join operation is not part of a Windows 9x upgrade" + +TFS hf_wkssvc_wkssvc_joinflags_WKSSVC_JOIN_FLAGS_ACCOUNT_DELETE "Delete the account when a domain is left" "Do not delete the account when a domain is left" + +TFS hf_wkssvc_wkssvc_joinflags_WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE "Create the account on the domain" "Do not create the account" + +TFS hf_wkssvc_wkssvc_joinflags_WKSSVC_JOIN_FLAGS_JOIN_TYPE "Join the computer to a domain" "Join the computer to a workgroup" + + +HF_FIELD hf_wkssvc_platform_id "Platform Id" "wkssvc.platform_id" FT_UINT32 BASE_DEC VALS(srvsvc_srvsvc_PlatformId_vals) 0 "" "" "" + +# +# +# Prettifications +PARAM_VALUE wkssvc_dissect_element_NetWkstaGetInfo_server_name_ 1|PIDL_SET_COL_INFO +PARAM_VALUE wkssvc_dissect_element_NetWkstaGetInfo_level PIDL_SET_COL_INFO +PARAM_VALUE wkssvc_dissect_element_NetWkstaInfo100_server_name_ 5|PIDL_SET_COL_INFO +PARAM_VALUE wkssvc_dissect_element_NetWkstaInfo100_domain_name_ 5 +PARAM_VALUE wkssvc_dissect_element_NetWkstaInfo101_server_name_ 5|PIDL_SET_COL_INFO +PARAM_VALUE wkssvc_dissect_element_NetWkstaInfo101_domain_name_ 5 +PARAM_VALUE wkssvc_dissect_element_NetWkstaInfo102_server_name_ 5|PIDL_SET_COL_INFO +PARAM_VALUE wkssvc_dissect_element_NetWkstaInfo102_domain_name_ 5 + +PARAM_VALUE wkssvc_dissect_element_NetWkstaTransportEnum_server_name_ 1|PIDL_SET_COL_INFO + + +TYPE lsa_String "offset=cnf_dissect_lsa_String(tvb, offset, pinfo, tree, di, drep, @PARAM@, @HF@);" FT_STRING BASE_NONE 0 NULL 4 +TYPE hyper "offset=cnf_dissect_hyper(tvb, offset, pinfo, tree, di, drep, @PARAM@, @HF@);" FT_UINT64 BASE_DEC 0 NULL 8 + +CODE START + +static int +cnf_dissect_lsa_String(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info* di, guint8 *drep, guint32 param, int hfindex) +{ + proto_item *item = NULL; + proto_tree *tree = NULL; + int old_offset; + header_field_info *hf_info; + + ALIGN_TO_4_BYTES; + + old_offset = offset; + hf_info=proto_registrar_get_nth(hfindex); + + if (parent_tree) { + tree = proto_tree_add_subtree_format(parent_tree, tvb, offset, 0, ett_wkssvc_lsa_String, &item, "%s: ", hf_info->name); + } + + offset = wkssvc_dissect_element_lsa_String_name_len(tvb, offset, pinfo, tree, di, drep); + offset = wkssvc_dissect_element_lsa_String_name_size(tvb, offset, pinfo, tree, di, drep); + + offset = dissect_ndr_pointer_cb( + tvb, offset, pinfo, tree, di, drep, + dissect_ndr_wchar_cvstring, NDR_POINTER_UNIQUE, + hf_info->name, hfindex, cb_wstr_postprocess, + GINT_TO_POINTER(param)); + + proto_item_set_len(item, offset-old_offset); + + return offset; +} + +static int +cnf_dissect_hyper(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, dcerpc_info* di, guint8 *drep, guint32 param _U_, int hfindex) +{ + offset = dissect_ndr_uint64(tvb, offset, pinfo, tree, di, drep, hfindex, NULL); + + return offset; +} + +CODE END diff --git a/epan/dissectors/pidl/wkssvc/wkssvc.idl b/epan/dissectors/pidl/wkssvc/wkssvc.idl new file mode 100644 index 00000000..3f283e5e --- /dev/null +++ b/epan/dissectors/pidl/wkssvc/wkssvc.idl @@ -0,0 +1,793 @@ +#include "idl_types.h" + +/* + wkssvc interface definitions +*/ + +import "srvsvc.idl", "lsa.idl"; + +[ uuid("6bffd098-a112-3610-9833-46c3f87e345a"), + version(1.0), + pointer_default(unique), + helpstring("Workstation Service"), + endpoint("ncacn_np:[\\pipe\\wkssvc]","ncacn_ip_tcp:","ncalrpc:") +] interface wkssvc +{ + typedef [v1_enum] enum srvsvc_PlatformId srvsvc_PlatformId; + +#define BOOL uint32 + + typedef [public] struct { + [value(strlen_m_term(name)*2)] uint16 name_len; + [value(strlen_m_term(name)*2)] uint16 name_size; + [string,charset(UTF16)] uint16 *name; + } lsa_String; + + /******************/ + /* Function: 0x00 */ + + typedef struct { + srvsvc_PlatformId platform_id; + [string,charset(UTF16)] uint16 *server_name; + [string,charset(UTF16)] uint16 *domain_name; + uint32 version_major; + uint32 version_minor; + } wkssvc_NetWkstaInfo100; + + typedef struct { + srvsvc_PlatformId platform_id; + [string,charset(UTF16)] uint16 *server_name; + [string,charset(UTF16)] uint16 *domain_name; + uint32 version_major; + uint32 version_minor; + [string,charset(UTF16)] uint16 *lan_root; + } wkssvc_NetWkstaInfo101; + + typedef struct { + srvsvc_PlatformId platform_id; + [string,charset(UTF16)] uint16 *server_name; + [string,charset(UTF16)] uint16 *domain_name; + uint32 version_major; + uint32 version_minor; + [string,charset(UTF16)] uint16 *lan_root; + uint32 logged_on_users; + } wkssvc_NetWkstaInfo102; + + /* FIXME: 302, 402 */ + + typedef struct { + uint32 char_wait; + uint32 collection_time; + uint32 maximum_collection_count; + uint32 keep_connection; + uint32 max_commands; + uint32 session_timeout; + uint32 size_char_buf; + uint32 max_threads; + uint32 lock_quota; + uint32 lock_increment; + uint32 lock_maximum; + uint32 pipe_increment; + uint32 pipe_maximum; + uint32 cache_file_timeout; + uint32 dormant_file_limit; + uint32 read_ahead_throughput; + uint32 num_mailslot_buffers; + uint32 num_srv_announce_buffers; + uint32 max_illegal_dgram_events; + uint32 dgram_event_reset_freq; + BOOL log_election_packets; + BOOL use_opportunistic_locking; + BOOL use_unlock_behind; + BOOL use_close_behind; + BOOL buf_named_pipes; + BOOL use_lock_read_unlock; + BOOL utilize_nt_caching; + BOOL use_raw_read; + BOOL use_raw_write; + BOOL use_write_raw_data; + BOOL use_encryption; + BOOL buf_files_deny_write; + BOOL buf_read_only_files; + BOOL force_core_create_mode; + BOOL use_512_byte_max_transfer; + } wkssvc_NetWkstaInfo502; + + typedef struct { + uint32 char_wait; + } wkssvc_NetWkstaInfo1010; + + typedef struct { + uint32 collection_time; + } wkssvc_NetWkstaInfo1011; + + typedef struct { + uint32 maximum_collection_count; + } wkssvc_NetWkstaInfo1012; + + typedef struct { + uint32 keep_connection; + } wkssvc_NetWkstaInfo1013; + + typedef struct { + uint32 session_timeout; + } wkssvc_NetWkstaInfo1018; + + typedef struct { + uint32 size_char_buf; + } wkssvc_NetWkstaInfo1023; + + typedef struct { + uint32 errorlog_sz; + } wkssvc_NetWkstaInfo1027; + + /* downlevel */ + typedef struct { + uint32 print_buf_time; + } wkssvc_NetWkstaInfo1028; + + /* downlevel */ + typedef struct { + uint32 wrk_heuristics; + } wkssvc_NetWkstaInfo1032; + + typedef struct { + uint32 max_threads; + } wkssvc_NetWkstaInfo1033; + + typedef struct { + uint32 lock_quota; + } wkssvc_NetWkstaInfo1041; + + typedef struct { + uint32 lock_increment; + } wkssvc_NetWkstaInfo1042; + + typedef struct { + uint32 lock_maximum; + } wkssvc_NetWkstaInfo1043; + + typedef struct { + uint32 pipe_increment; + } wkssvc_NetWkstaInfo1044; + + typedef struct { + uint32 pipe_maximum; + } wkssvc_NetWkstaInfo1045; + + typedef struct { + uint32 dormant_file_limit; + } wkssvc_NetWkstaInfo1046; + + typedef struct { + uint32 cache_file_timeout; + } wkssvc_NetWkstaInfo1047; + + typedef struct { + uint32 use_opportunistic_locking; + } wkssvc_NetWkstaInfo1048; + + typedef struct { + uint32 use_unlock_behind; + } wkssvc_NetWkstaInfo1049; + + typedef struct { + uint32 use_close_behind; + } wkssvc_NetWkstaInfo1050; + + typedef struct { + uint32 buf_named_pipes; + } wkssvc_NetWkstaInfo1051; + + typedef struct { + uint32 use_lock_read_unlock; + } wkssvc_NetWkstaInfo1052; + + typedef struct { + uint32 utilize_nt_caching; + } wkssvc_NetWkstaInfo1053; + + typedef struct { + uint32 use_raw_read; + } wkssvc_NetWkstaInfo1054; + + typedef struct { + uint32 use_raw_write; + } wkssvc_NetWkstaInfo1055; + + typedef struct { + uint32 use_write_raw_data; + } wkssvc_NetWkstaInfo1056; + + typedef struct { + uint32 use_encryption; + } wkssvc_NetWkstaInfo1057; + + typedef struct { + uint32 buf_files_deny_write; + } wkssvc_NetWkstaInfo1058; + + typedef struct { + uint32 buf_read_only_files; + } wkssvc_NetWkstaInfo1059; + + typedef struct { + uint32 force_core_create_mode; + } wkssvc_NetWkstaInfo1060; + + typedef struct { + uint32 use_512_byte_max_transfer; + } wkssvc_NetWkstaInfo1061; + + typedef struct { + uint32 read_ahead_throughput; + } wkssvc_NetWkstaInfo1062; + + typedef union { + [case(100)] wkssvc_NetWkstaInfo100 *info100; + [case(101)] wkssvc_NetWkstaInfo101 *info101; + [case(102)] wkssvc_NetWkstaInfo102 *info102; + [case(502)] wkssvc_NetWkstaInfo502 *info502; + [case(1010)] wkssvc_NetWkstaInfo1010 *info1010; + [case(1011)] wkssvc_NetWkstaInfo1011 *info1011; + [case(1012)] wkssvc_NetWkstaInfo1012 *info1012; + [case(1013)] wkssvc_NetWkstaInfo1013 *info1013; + [case(1018)] wkssvc_NetWkstaInfo1018 *info1018; + [case(1023)] wkssvc_NetWkstaInfo1023 *info1023; + [case(1027)] wkssvc_NetWkstaInfo1027 *info1027; + [case(1028)] wkssvc_NetWkstaInfo1028 *info1028; + [case(1032)] wkssvc_NetWkstaInfo1032 *info1032; + [case(1033)] wkssvc_NetWkstaInfo1033 *info1033; + [case(1041)] wkssvc_NetWkstaInfo1041 *info1041; + [case(1042)] wkssvc_NetWkstaInfo1042 *info1042; + [case(1043)] wkssvc_NetWkstaInfo1043 *info1043; + [case(1044)] wkssvc_NetWkstaInfo1044 *info1044; + [case(1045)] wkssvc_NetWkstaInfo1045 *info1045; + [case(1046)] wkssvc_NetWkstaInfo1046 *info1046; + [case(1047)] wkssvc_NetWkstaInfo1047 *info1047; + [case(1048)] wkssvc_NetWkstaInfo1048 *info1048; + [case(1049)] wkssvc_NetWkstaInfo1049 *info1049; + [case(1050)] wkssvc_NetWkstaInfo1050 *info1050; + [case(1051)] wkssvc_NetWkstaInfo1051 *info1051; + [case(1052)] wkssvc_NetWkstaInfo1052 *info1052; + [case(1053)] wkssvc_NetWkstaInfo1053 *info1053; + [case(1054)] wkssvc_NetWkstaInfo1054 *info1054; + [case(1055)] wkssvc_NetWkstaInfo1055 *info1055; + [case(1056)] wkssvc_NetWkstaInfo1056 *info1056; + [case(1057)] wkssvc_NetWkstaInfo1057 *info1057; + [case(1058)] wkssvc_NetWkstaInfo1058 *info1058; + [case(1059)] wkssvc_NetWkstaInfo1059 *info1059; + [case(1060)] wkssvc_NetWkstaInfo1060 *info1060; + [case(1061)] wkssvc_NetWkstaInfo1061 *info1061; + [case(1062)] wkssvc_NetWkstaInfo1062 *info1062; + [default] ; + } wkssvc_NetWkstaInfo; + + WERROR wkssvc_NetWkstaGetInfo( + [in] [string,charset(UTF16)] uint16 *server_name, + [in] uint32 level, + [out,switch_is(level),ref] wkssvc_NetWkstaInfo *info + ); + + + /******************/ + /* Function: 0x01 */ + WERROR wkssvc_NetWkstaSetInfo( + [in] [string,charset(UTF16)] uint16 *server_name, + [in] uint32 level, + [in,switch_is(level),ref] wkssvc_NetWkstaInfo *info, + [in,out,ref] uint32 *parm_error + ); + + + /*****************************/ + /* Function 0x02 */ + typedef struct { + [string,charset(UTF16)] uint16 *user_name; + } wkssvc_NetrWkstaUserInfo0; + + typedef struct { + uint32 entries_read; + [size_is(entries_read)] wkssvc_NetrWkstaUserInfo0 *user0; + } wkssvc_NetWkstaEnumUsersCtr0; + + typedef struct { + [string,charset(UTF16)] uint16 *user_name; + [string,charset(UTF16)] uint16 *logon_domain; + [string,charset(UTF16)] uint16 *other_domains; + [string,charset(UTF16)] uint16 *logon_server; + } wkssvc_NetrWkstaUserInfo1; + + typedef struct { + uint32 entries_read; + [size_is(entries_read)] wkssvc_NetrWkstaUserInfo1 *user1; + } wkssvc_NetWkstaEnumUsersCtr1; + + typedef [switch_type(uint32)] union { + [case(0)] wkssvc_NetWkstaEnumUsersCtr0 *user0; + [case(1)] wkssvc_NetWkstaEnumUsersCtr1 *user1; + } wkssvc_NetWkstaEnumUsersCtr; + + typedef struct { + uint32 level; + [switch_is(level), flag(LIBNDR_FLAG_ALIGN5)] wkssvc_NetWkstaEnumUsersCtr ctr; + } wkssvc_NetWkstaEnumUsersInfo; + + WERROR wkssvc_NetWkstaEnumUsers( + [in] [unique,string,charset(UTF16)] uint16 *server_name, + [in,out,ref] wkssvc_NetWkstaEnumUsersInfo *info, + [in] uint32 prefmaxlen, + [out,ref] uint32 *entries_read, + [in,out, unique] uint32 *resume_handle + ); + + /*****************************/ + /* Function 0x03 */ + typedef struct { + [string,charset(UTF16)] uint16 *other_domains; + } wkssvc_NetrWkstaUserInfo1101; + + typedef [switch_type(uint32)] union { + [case(0)] wkssvc_NetrWkstaUserInfo0 *info0; + [case(1)] wkssvc_NetrWkstaUserInfo1 *info1; + [case(1101)] wkssvc_NetrWkstaUserInfo1101 *info1101; + } wkssvc_NetrWkstaUserInfo; + + WERROR wkssvc_NetrWkstaUserGetInfo( + [in] [string,charset(UTF16)] uint16 *unknown, + [in] uint32 level, + [out,ref] [switch_is(level)] wkssvc_NetrWkstaUserInfo *info + ); + + /*****************************/ + /* Function 0x04 */ + WERROR wkssvc_NetrWkstaUserSetInfo( + [in] [string,charset(UTF16)] uint16 *unknown, + [in] uint32 level, + [in,ref] [switch_is(level)] wkssvc_NetrWkstaUserInfo *info, + [in,out] uint32 *parm_err + ); + + /*****************************/ + /* Function 0x05 */ + + typedef struct { + uint32 quality_of_service; + uint32 vc_count; + [string,charset(UTF16)] uint16 *name; + [string,charset(UTF16)] uint16 *address; + uint32 wan_link; + } wkssvc_NetWkstaTransportInfo0; + + typedef struct { + uint32 count; + [size_is(count)] wkssvc_NetWkstaTransportInfo0 *array; + } wkssvc_NetWkstaTransportCtr0; + + typedef union { + [case(0)] wkssvc_NetWkstaTransportCtr0 *ctr0; + } wkssvc_NetWkstaTransportCtr; + + typedef struct { + uint32 level; + [switch_is(level)] wkssvc_NetWkstaTransportCtr ctr; + } wkssvc_NetWkstaTransportInfo; + + WERROR wkssvc_NetWkstaTransportEnum ( + [in] [string,charset(UTF16)] uint16 *server_name, + [in,out,ref] wkssvc_NetWkstaTransportInfo *info, + [in] uint32 max_buffer, + [out,ref] uint32 *total_entries, + [in,out] uint32 *resume_handle + ); + + /*****************************/ + /* Function 0x06 */ + /* only supported on NT */ + WERROR wkssvc_NetrWkstaTransportAdd( + [in] [string,charset(UTF16)] uint16 *server_name, + [in] uint32 level, /* must be 0 */ + [in,ref] wkssvc_NetWkstaTransportInfo0 *info0, + [in,out] uint32 *parm_err + ); + + /*****************************/ + /* Function 0x07 */ + /* only supported on NT */ + WERROR wkssvc_NetrWkstaTransportDel( + [in] [string,charset(UTF16)] uint16 *server_name, + [in] [string,charset(UTF16)] uint16 *transport_name, + [in] uint32 unknown3 + ); + + /*****************************/ + /* Function 0x08 */ + typedef struct { + [string,charset(UTF16)] uint16 *unknown1; + [string,charset(UTF16)] uint16 *unknown2; + } wkssvc_NetrUseInfo3; + + typedef struct { + [string,charset(UTF16)] uint16 *local; + [string,charset(UTF16)] uint16 *remote; + [string,charset(UTF16)] uint16 *password; + uint32 status; + uint32 asg_type; + uint32 ref_count; + uint32 use_count; + [string,charset(UTF16)] uint16 *user_name; + [string,charset(UTF16)] uint16 *domain_name; + } wkssvc_NetrUseInfo2; + + typedef struct { + [string,charset(UTF16)] uint16 *local; + [string,charset(UTF16)] uint16 *remote; + [string,charset(UTF16)] uint16 *password; + uint32 status; + uint32 asg_type; + uint32 ref_count; + uint32 use_count; + } wkssvc_NetrUseInfo1; + + typedef struct { + [string,charset(UTF16)] uint16 *local; + [string,charset(UTF16)] uint16 *remote; + } wkssvc_NetrUseInfo0; + + typedef [switch_type(uint32)] union { + [case(0)] wkssvc_NetrUseInfo0 *info0; + [case(1)] wkssvc_NetrUseInfo1 *info1; + [case(2)] wkssvc_NetrUseInfo2 *info2; + [case(3)] wkssvc_NetrUseInfo3 *info3; + } wkssvc_NetrUseGetInfoCtr; + + WERROR wkssvc_NetrUseAdd( + [in] [string,charset(UTF16)] uint16 *server_name, + [in] uint32 level, + [in,ref] [switch_is(level)] wkssvc_NetrUseGetInfoCtr *ctr, + [in,out] uint32 *parm_err + ); + + /*****************************/ + /* Function 0x09 */ + WERROR wkssvc_NetrUseGetInfo( + [in] [string,charset(UTF16)] uint16 *server_name, + [in,ref] [string,charset(UTF16)] uint16 *use_name, + [in] uint32 level, + [out,ref] [switch_is(level)] wkssvc_NetrUseGetInfoCtr *ctr + ); + + /*****************************/ + /* Function 0x0a */ + WERROR wkssvc_NetrUseDel( + [in] [string,charset(UTF16)] uint16 *server_name, + [in,ref] [string,charset(UTF16)] uint16 *use_name, + [in] uint32 force_cond + ); + + /*****************************/ + /* Function 0x0b */ + typedef struct { + uint32 count; + [size_is(count)] wkssvc_NetrUseInfo2 *array; + } wkssvc_NetrUseEnumCtr2; + + typedef struct { + uint32 count; + [size_is(count)] wkssvc_NetrUseInfo1 *array; + } wkssvc_NetrUseEnumCtr1; + + typedef struct { + uint32 count; + [size_is(count)] wkssvc_NetrUseInfo0 *array; + } wkssvc_NetrUseEnumCtr0; + + typedef [switch_type(uint32)] union { + [case(0)] wkssvc_NetrUseEnumCtr0 *ctr0; + [case(1)] wkssvc_NetrUseEnumCtr1 *ctr1; + [case(2)] wkssvc_NetrUseEnumCtr2 *ctr2; + } wkssvc_NetrUseEnumCtr; + + typedef struct { + uint32 level; + [switch_is(level)] wkssvc_NetrUseEnumCtr ctr; + } wkssvc_NetrUseEnumInfo; + + WERROR wkssvc_NetrUseEnum( + [in] [string,charset(UTF16)] uint16 *server_name, + [in,out,ref] wkssvc_NetrUseEnumInfo *info, + [in] uint32 prefmaxlen, + [out,ref] uint32 *entries_read, + [in,out] uint32 *resume_handle + ); + + /*****************************/ + /* Function 0x0c */ + WERROR wkssvc_NetrMessageBufferSend( + [in] [string,charset(UTF16)] uint16 *server_name, + [in,ref] [string,charset(UTF16)] uint16 *message_name, + [in] [string,charset(UTF16)] uint16 *message_sender_name, + [in,ref] [size_is(message_size)] uint8 *message_buffer, + [in] uint32 message_size + ); + + /*****************************/ + /* Function 0x0d */ + typedef struct { + hyper unknown1; + hyper unknown2; + hyper unknown3; + hyper unknown4; + hyper unknown5; + hyper unknown6; + hyper unknown7; + hyper unknown8; + hyper unknown9; + hyper unknown10; + hyper unknown11; + hyper unknown12; + hyper unknown13; + uint32 unknown14; + uint32 unknown15; + uint32 unknown16; + uint32 unknown17; + uint32 unknown18; + uint32 unknown19; + uint32 unknown20; + uint32 unknown21; + uint32 unknown22; + uint32 unknown23; + uint32 unknown24; + uint32 unknown25; + uint32 unknown26; + uint32 unknown27; + uint32 unknown28; + uint32 unknown29; + uint32 unknown30; + uint32 unknown31; + uint32 unknown32; + uint32 unknown33; + uint32 unknown34; + uint32 unknown35; + uint32 unknown36; + uint32 unknown37; + uint32 unknown38; + uint32 unknown39; + uint32 unknown40; + } wkssvc_NetrWorkstationStatistics; + + WERROR wkssvc_NetrWorkstationStatisticsGet( + [in] [string,charset(UTF16)] uint16 *server_name, + [in] [string,charset(UTF16)] uint16 *unknown2, + [in] uint32 unknown3, + [in] uint32 unknown4, + [out,ref] wkssvc_NetrWorkstationStatistics **info + ); + + /*****************************/ + /* Function 0x0e */ + WERROR wkssvc_NetrLogonDomainNameAdd( + [in,ref] [string,charset(UTF16)] uint16 *domain_name + ); + + /*****************************/ + /* Function 0x0f */ + WERROR wkssvc_NetrLogonDomainNameDel( + [in,ref] [string,charset(UTF16)] uint16 *domain_name + ); + + /*****************************/ + /* Function 0x10 */ + WERROR wkssvc_NetrJoinDomain( + [in] [string,charset(UTF16)] uint16 *server_name, + [in,ref] [string,charset(UTF16)] uint16 *domain_name, + [in] [string,charset(UTF16)] uint16 *account_ou, + [in] [string,charset(UTF16)] uint16 *Account, + [in] [string,charset(UTF16)] uint16 *unknown, + [in] wkssvc_joinflags join_flags + ); + + /*****************************/ + /* Function 0x11 */ + WERROR wkssvc_NetrUnjoinDomain( + [in] [string,charset(UTF16)] uint16 *server_name, + [in] [string,charset(UTF16)] uint16 *Account, + [in] [string,charset(UTF16)] uint16 *password, + [in] wkssvc_joinflags unjoin_flags + ); + + /*****************************/ + /* Function 0x12 */ + typedef [bitmap32bit] bitmap { + /* TRUE: create the account in the domain */ + WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE = 0x00000002 + } wkssvc_renameflags; + + WERROR wkssvc_NetrRenameMachineInDomain( + [in] [string,charset(UTF16)] uint16 *server_name, + [in] [string,charset(UTF16)] uint16 *NewMachineName, + [in] [string,charset(UTF16)] uint16 *Account, + [in] [string,charset(UTF16)] uint16 *password, + [in] wkssvc_renameflags RenameOptions + ); + + /*****************************/ + /* Function 0x13 */ + typedef enum { + NetSetupUnknown = 0, + NetSetupMachine = 1, + NetSetupWorkgroup = 2, + NetSetupDomain = 3, + NetSetupNonExistentDomain = 4, + NetSetupDnsMachine = 5 + } wkssvc_NetValidateNameType; + + WERROR wkssvc_NetrValidateName( + [in] [string,charset(UTF16)] uint16 *server_name, + [in,ref] [string,charset(UTF16)] uint16 *name, + [in] [string,charset(UTF16)] uint16 *Account, + [in] [string,charset(UTF16)] uint16 *Password, + [in] wkssvc_NetValidateNameType name_type + ); + + /*****************************/ + /* Function 0x14 */ + typedef enum { + NetSetupUnknownStatus = 0, + NetSetupUnjoined = 1, + NetSetupWorkgroupName = 2, + NetSetupDomainName = 3 + } wkssvc_NetJoinStatus; + + WERROR wkssvc_NetrGetJoinInformation( + [in] [string,charset(UTF16)] uint16 *server_name, + [in,out,ref] [string,charset(UTF16)] uint16 **name_buffer, + [out,ref] wkssvc_NetJoinStatus *name_type + ); + + /*****************************/ + /* Function 0x15 */ + WERROR wkssvc_NetrGetJoinableOus( + [in] [string,charset(UTF16)] uint16 *server_name, + [in,ref] [string,charset(UTF16)] uint16 *domain_name, + [in] [string,charset(UTF16)] uint16 *Account, + [in] [string,charset(UTF16)] uint16 *unknown, + [in,out,ref] uint32 *num_ous, + [out,ref] [size_is(*num_ous)] [string,charset(UTF16)] uint16 ***ous + ); + + typedef [flag(NDR_PAHEX)] struct { + uint8 data[524]; + } wkssvc_PasswordBuffer; + + typedef [bitmap32bit] bitmap { + WKSSVC_JOIN_FLAGS_JOIN_WITH_NEW_NAME = 0x00000400, + WKSSVC_JOIN_FLAGS_JOIN_DC_ACCOUNT = 0x00000200, + /* TRUE: defer setting the SPN and dNSHostName until a rename operation */ + WKSSVC_JOIN_FLAGS_DEFER_SPN = 0x00000100, + + /* TRUE: set the machine password to the provided one after the join completes */ + WKSSVC_JOIN_FLAGS_MACHINE_PWD_PASSED = 0x00000080, + + /* TRUE: perform an unsecured join */ + WKSSVC_JOIN_FLAGS_JOIN_UNSECURE = 0x00000040, + + /* TRUE: allow the join to complete even if the account already exists */ + WKSSVC_JOIN_FLAGS_DOMAIN_JOIN_IF_JOINED = 0x00000020, + + /* TRUE: this join is part of a w9x upgrade */ + WKSSVC_JOIN_FLAGS_WIN9X_UPGRADE = 0x00000010, + + /* TRUE: delete the account when the domain is left */ + WKSSVC_JOIN_FLAGS_ACCOUNT_DELETE = 0x00000004, + + /* TRUE: create the account in the domain */ + WKSSVC_JOIN_FLAGS_ACCOUNT_CREATE = 0x00000002, + + /* TRUE: join domain FALSE: join workgroup */ + WKSSVC_JOIN_FLAGS_JOIN_TYPE = 0x00000001 + + } wkssvc_joinflags; + + /*****************************/ + /* Function 0x16 */ + WERROR wkssvc_NetrJoinDomain2 ( + [in] [string,charset(UTF16)] uint16 *server_name, + [in,ref] [string,charset(UTF16)] uint16 *domain_name, + [in] [string,charset(UTF16)] uint16 *account_name, + [in] [string,charset(UTF16)] uint16 *admin_account, + [in] wkssvc_PasswordBuffer *encrypted_password, + [in] wkssvc_joinflags join_flags + ); + + /*****************************/ + /* Function 0x17 */ + WERROR wkssvc_NetrUnjoinDomain2 ( + [in] [string,charset(UTF16)] uint16 *server_name, + [in] [string,charset(UTF16)] uint16 *account, + [in] wkssvc_PasswordBuffer *encrypted_password, + [in] wkssvc_joinflags unjoin_flags + ); + + /*****************************/ + /* Function 0x18 */ + WERROR wkssvc_NetrRenameMachineInDomain2( + [in] [string,charset(UTF16)] uint16 *server_name, + [in] [string,charset(UTF16)] uint16 *NewMachineName, + [in] [string,charset(UTF16)] uint16 *Account, + [in] wkssvc_PasswordBuffer *EncryptedPassword, + [in] wkssvc_renameflags RenameOptions + ); + + /*****************************/ + /* Function 0x19 */ + WERROR wkssvc_NetrValidateName2( + [in] [string,charset(UTF16)] uint16 *server_name, + [in,ref] [string,charset(UTF16)] uint16 *name, + [in] [string,charset(UTF16)] uint16 *Account, + [in] wkssvc_PasswordBuffer *EncryptedPassword, + [in] wkssvc_NetValidateNameType name_type + ); + + /*****************************/ + /* Function 0x1a */ + WERROR wkssvc_NetrGetJoinableOus2( + [in] [string,charset(UTF16)] uint16 *server_name, + [in,ref] [string,charset(UTF16)] uint16 *domain_name, + [in] [string,charset(UTF16)] uint16 *Account, + [in] wkssvc_PasswordBuffer *EncryptedPassword, + [in,out,ref] uint32 *num_ous, + [out,ref] [size_is(*num_ous)] [string,charset(UTF16)] uint16 ***ous + ); + + /*****************************/ + /* Function 0x1b */ + WERROR wkssvc_NetrAddAlternateComputerName( + [in] [string,charset(UTF16)] uint16 *server_name, + [in] [string,charset(UTF16)] uint16 *NewAlternateMachineName, + [in] [string,charset(UTF16)] uint16 *Account, + [in] wkssvc_PasswordBuffer *EncryptedPassword, + [in] uint32 Reserved + ); + + /*****************************/ + /* Function 0x1c */ + WERROR wkssvc_NetrRemoveAlternateComputerName( + [in] [string,charset(UTF16)] uint16 *server_name, + [in] [string,charset(UTF16)] uint16 *AlternateMachineNameToRemove, + [in] [string,charset(UTF16)] uint16 *Account, + [in] wkssvc_PasswordBuffer *EncryptedPassword, + [in] uint32 Reserved + ); + + /*****************************/ + /* Function 0x1d */ + WERROR wkssvc_NetrSetPrimaryComputername( + [in] [string,charset(UTF16)] uint16 *server_name, + [in] [string,charset(UTF16)] uint16 *primary_name, + [in] [string,charset(UTF16)] uint16 *Account, + [in] wkssvc_PasswordBuffer *EncryptedPassword, + [in] uint32 Reserved + ); + + /*****************************/ + /* Function 0x1e */ + typedef enum { + NetPrimaryComputerName = 0, + NetAlternateComputerNames = 1, + NetAllComputerNames = 2, + NetComputerNameTypeMax = 3 + } wkssvc_ComputerNameType; + + typedef struct { + uint32 count; + [size_is(count)] lsa_String *computer_name; + } wkssvc_ComputerNamesCtr; + + WERROR wkssvc_NetrEnumerateComputerNames( + [in] [string,charset(UTF16)] uint16 *server_name, + [in] wkssvc_ComputerNameType name_type, + [in] uint32 Reserved, + [out,ref] wkssvc_ComputerNamesCtr **ctr + ); +} diff --git a/epan/dissectors/pidl/wzcsvc/wzcsvc.cnf b/epan/dissectors/pidl/wzcsvc/wzcsvc.cnf new file mode 100644 index 00000000..3187c6b5 --- /dev/null +++ b/epan/dissectors/pidl/wzcsvc/wzcsvc.cnf @@ -0,0 +1,2 @@ +# Conformance file + diff --git a/epan/dissectors/pidl/wzcsvc/wzcsvc.idl b/epan/dissectors/pidl/wzcsvc/wzcsvc.idl new file mode 100644 index 00000000..b403c079 --- /dev/null +++ b/epan/dissectors/pidl/wzcsvc/wzcsvc.idl @@ -0,0 +1,31 @@ +/* + wireless configuration service +*/ + +[ + uuid("621dff68-3c39-4c6c-aae3-e68e2c6503ad"), + version(1.0), + helpstring("Wireless Configuration Service") +] +interface wzcsvc +{ + + void wzcsvc_EnumInterfaces(); + void wzcsvc_QueryInterface(); + void wzcsvc_SetInterface(); + void wzcsvc_RefreshInterface(); + void wzcsvc_QueryContext(); + void wzcsvc_SetContext(); + void wzcsvc_EapolUIResponse(); + void wzcsvc_EapolGetCustomAuthData(); + void wzcsvc_EapolSetCustomAuthData(); + void wzcsvc_EapolGetInterfaceParams(); + void wzcsvc_EapolSetInterfaceParams(); + void wzcsvc_EapolReAuthenticateInterface(); + void wzcsvc_EapolQueryInterfaceState(); + void wzcsvc_OpenWZCDbLogSession(); + void wzcsvc_CloseWZCDbLogSession(); + void wzcsvc_EnumWZCDbLogRecords(); + void wzcsvc_FlushWZCdbLog(); + void wzcsvc_GetWZCDbLogRecord(); +} |