1#include "idl_types.h" 2 3import "misc/misc.idl"; 4 5[ 6 uuid("ccd8c074-d0e5-4a40-92b4-d074faa6ba28"), 7 version(1.1), 8 pointer_default(unique), 9 helpstring("SMB Witness Service"), 10 helper("../librpc/ndr/ndr_witness.h"), 11 endpoint("ncacn_ip_tcp:") 12] 13interface witness 14{ 15 typedef [v1_enum] enum { 16 WITNESS_V1 = 0x00010001, 17 WITNESS_V2 = 0x00020000, 18 WITNESS_UNSPECIFIED_VERSION = 0xFFFFFFFF 19 } witness_version; 20 21 /*****************/ 22 /* Function 0x00 */ 23 24 typedef [enum16bit] enum { 25 WITNESS_STATE_UNKNOWN = 0x00, 26 WITNESS_STATE_AVAILABLE = 0x01, 27 WITNESS_STATE_UNAVAILABLE = 0xff 28 } witness_interfaceInfo_state; 29 30 typedef [bitmap32bit] bitmap { 31 WITNESS_INFO_IPv4_VALID = 0x01, 32 WITNESS_INFO_IPv6_VALID = 0x02, 33 WITNESS_INFO_WITNESS_IF = 0x04 34 } witness_interfaceInfo_flags; 35 36 typedef struct { 37 [charset(UTF16),to_null] uint16 group_name[260]; 38 witness_version version; 39 witness_interfaceInfo_state state; 40 [flag(NDR_BIG_ENDIAN)] ipv4address ipv4; 41 [flag(NDR_BIG_ENDIAN)] ipv6address ipv6; 42 witness_interfaceInfo_flags flags; 43 } witness_interfaceInfo; 44 45 typedef struct { 46 uint32 num_interfaces; 47 [size_is(num_interfaces)] witness_interfaceInfo *interfaces; 48 } witness_interfaceList; 49 50 [public] WERROR witness_GetInterfaceList( 51 [out] witness_interfaceList **interface_list 52 ); 53 54 /*****************/ 55 /* Function 0x01 */ 56 57 [public] WERROR witness_Register( 58 [out,ref] policy_handle *context_handle, 59 [in] witness_version version, 60 [in,unique,string,charset(UTF16)] uint16 *net_name, 61 [in,unique,string,charset(UTF16)] uint16 *ip_address, 62 [in,unique,string,charset(UTF16)] uint16 *client_computer_name 63 ); 64 65 /*****************/ 66 /* Function 0x02 */ 67 68 [public] WERROR witness_UnRegister( 69 [in] policy_handle context_handle 70 ); 71 72 /*****************/ 73 /* Function 0x03 */ 74 75 typedef [v1_enum,public] enum { 76 WITNESS_NOTIFY_RESOURCE_CHANGE = 1, 77 WITNESS_NOTIFY_CLIENT_MOVE = 2, 78 WITNESS_NOTIFY_SHARE_MOVE = 3, 79 WITNESS_NOTIFY_IP_CHANGE = 4 80 } witness_notifyResponse_type; 81 82 typedef [v1_enum] enum { 83 WITNESS_RESOURCE_STATE_UNKNOWN = 0x00, 84 WITNESS_RESOURCE_STATE_AVAILABLE = 0x01, 85 WITNESS_RESOURCE_STATE_UNAVAILABLE = 0xff 86 } witness_ResourceChange_type; 87 88 typedef [flag(NDR_NOALIGN|NDR_LITTLE_ENDIAN),gensize,public] struct { 89 [value(ndr_size_witness_ResourceChange(r,ndr->flags))] uint32 length; 90 witness_ResourceChange_type type; 91 nstring name; 92 } witness_ResourceChange; 93 94 typedef [bitmap32bit] bitmap { 95 WITNESS_IPADDR_V4 = 0x01, 96 WITNESS_IPADDR_V6 = 0x02, 97 WITNESS_IPADDR_ONLINE = 0x08, 98 WITNESS_IPADDR_OFFLINE = 0x10 99 } witness_IPaddrInfo_flags; 100 101 typedef [flag(NDR_NOALIGN|NDR_LITTLE_ENDIAN),gensize] struct { 102 witness_IPaddrInfo_flags flags; 103 ipv4address ipv4; 104 ipv6address ipv6; 105 } witness_IPaddrInfo; 106 107 typedef [flag(NDR_NOALIGN|NDR_LITTLE_ENDIAN)] struct { 108 [value(r->num*ndr_size_witness_IPaddrInfo(r->addr, ndr->flags))] uint32 length; 109 [value(0)] uint32 reserved; 110 uint32 num; 111 witness_IPaddrInfo addr[num]; 112 } witness_IPaddrInfoList; 113 114 typedef [public,switch_type(witness_notifyResponse_type),nodiscriminant, flag(NDR_NOALIGN|NDR_LITTLE_ENDIAN)] union { 115 [case(WITNESS_NOTIFY_RESOURCE_CHANGE)] witness_ResourceChange resource_change; 116 [case(WITNESS_NOTIFY_CLIENT_MOVE)] witness_IPaddrInfoList client_move; 117 [case(WITNESS_NOTIFY_SHARE_MOVE)] witness_IPaddrInfoList share_move; 118 [case(WITNESS_NOTIFY_IP_CHANGE)] witness_IPaddrInfoList ip_change; 119 [default,flag(NDR_REMAINING)] DATA_BLOB data; 120 } witness_notifyResponse_message; 121 122 typedef [flag(NDR_PAHEX),gensize,public,nopush,nopull] struct { 123 witness_notifyResponse_type type; 124 [value(ndr_size_witness_notifyResponse(r, ndr->flags)-20)] uint32 length; 125 uint32 num; 126 [subcontext(4), subcontext_size(length), flag(NDR_REMAINING), switch_is(type)] witness_notifyResponse_message messages[num]; 127 } witness_notifyResponse; 128 129 [public] WERROR witness_AsyncNotify( 130 [in] policy_handle context_handle, 131 [out] witness_notifyResponse **response 132 ); 133 134 /*****************/ 135 /* Function 0x04 */ 136 137 typedef [bitmap32bit] bitmap { 138 WITNESS_REGISTER_NONE = 0x00, 139 WITNESS_REGISTER_IP_NOTIFICATION = 0x01 140 } witness_RegisterEx_flags; 141 142 WERROR witness_RegisterEx( 143 [out,ref] policy_handle *context_handle, 144 [in] witness_version version, 145 [in,unique,string,charset(UTF16)] uint16 *net_name, 146 [in,unique,string,charset(UTF16)] uint16 *share_name, 147 [in,unique,string,charset(UTF16)] uint16 *ip_address, 148 [in,unique,string,charset(UTF16)] uint16 *client_computer_name, 149 [in] witness_RegisterEx_flags flags, 150 [in] uint32 timeout 151 ); 152} 153