--- /dev/null
+MANUAL witness_dissect_element_interfaceInfo_group_name
+TYPE ipv4address "offset=PIDL_dissect_uint32(tvb, offset, pinfo, tree, drep, @HF@, @PARAM@);" FT_BYTES BASE_NONE 0 NULL 4
+TYPE ipv6address "offset += 16;" FT_NONE BASE_NONE 0 NULL 2
+HF_FIELD hf_witness_witness_interfaceInfo_group_name "Group Name" "witness.witness_interfaceInfo.group_name" FT_STRING BASE_NONE NULL 0 "" "" ""
+CODE START
+CODE END
--- /dev/null
+#include "idl_types.h"
+
+import "misc.idl";
+
+[
+ uuid("ccd8c074-d0e5-4a40-92b4-d074faa6ba28"),
+ version(1.1),
+ pointer_default(unique),
+ helpstring("SMB Witness Service"),
+ endpoint("ncacn_ip_tcp:")
+]
+interface witness
+{
+ /*****************/
+ /* Function 0x00 */
+
+ typedef struct {
+ [charset(UTF16),to_null] uint16 group_name[260];
+ uint32 version;
+ uint16 state;
+ [flag(NDR_BIG_ENDIAN)] ipv4address ipv4;
+ [flag(NDR_BIG_ENDIAN)] ipv6address ipv6;
+ uint32 flags;
+ } witness_interfaceInfo;
+
+ typedef struct {
+ uint32 num_interfaces;
+ [size_is(num_interfaces)] witness_interfaceInfo *interfaces;
+ } witness_interfaceList;
+
+ WERROR witness_GetInterfaceList(
+ //[in,flag(NDR_REMAINING)] DATA_BLOB in_blob,
+ [out] witness_interfaceList **interface_list
+ );
+
+ /*****************/
+ /* Function 0x01 */
+
+ WERROR witness_Register(
+ [out,ref] policy_handle *context_handle,
+ [in] uint32 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 */
+
+ WERROR witness_UnRegister(
+ [in] policy_handle context_handle
+ );
+
+ /*****************/
+ /* Function 0x03 */
+
+ typedef struct {
+ uint32 message_type;
+ uint32 length;
+ uint32 num_messages;
+ [size_is(length)] uint8 *message_buffer;
+ } witness_notifyResponse;
+
+ WERROR witness_AsyncNotify(
+ [in] policy_handle context_handle,
+ [out] witness_notifyResponse **response
+ );
+}