#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 { typedef [v1_enum] enum { WITNESS_V1 = 0x00010001, WITNESS_V2 = 0x00020000 } 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; WERROR witness_GetInterfaceList( [out] witness_interfaceList **interface_list ); /*****************/ /* Function 0x01 */ 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 */ WERROR witness_UnRegister( [in] policy_handle context_handle ); /*****************/ /* Function 0x03 */ typedef [v1_enum] 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 struct { witness_notifyResponse_type 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 ); /*****************/ /* 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 ); }