6 uuid("ccd8c074-d0e5-4a40-92b4-d074faa6ba28"),
8 pointer_default(unique),
9 helpstring("SMB Witness Service"),
10 endpoint("ncacn_ip_tcp:")
14 typedef [v1_enum] enum {
15 WITNESS_V1
= 0x00010001,
16 WITNESS_V2
= 0x00020000,
17 WITNESS_UNSPECIFIED_VERSION
= 0xFFFFFFFF
23 typedef [enum16bit
] enum {
24 WITNESS_STATE_UNKNOWN
= 0x00,
25 WITNESS_STATE_AVAILABLE
= 0x01,
26 WITNESS_STATE_UNAVAILABLE
= 0xff
27 } witness_interfaceInfo_state
;
29 typedef [bitmap32bit
] bitmap
{
30 WITNESS_INFO_IPv4_VALID
= 0x01,
31 WITNESS_INFO_IPv6_VALID
= 0x02,
32 WITNESS_INFO_WITNESS_IF
= 0x04
33 } witness_interfaceInfo_flags
;
36 [charset
(UTF16
),to_null
] uint16 group_name
[260];
37 witness_version
version;
38 witness_interfaceInfo_state state
;
39 [flag
(NDR_BIG_ENDIAN
)] ipv4address ipv4
;
40 [flag
(NDR_BIG_ENDIAN
)] ipv6address ipv6
;
41 witness_interfaceInfo_flags flags
;
42 } witness_interfaceInfo
;
45 uint32 num_interfaces
;
46 [size_is(num_interfaces
)] witness_interfaceInfo
*interfaces
;
47 } witness_interfaceList
;
49 [public] WERROR witness_GetInterfaceList
(
50 [out] witness_interfaceList
**interface_list
56 [public] WERROR witness_Register
(
57 [out,ref] policy_handle
*context_handle,
58 [in] witness_version
version,
59 [in,unique,string,charset
(UTF16
)] uint16
*net_name
,
60 [in,unique,string,charset
(UTF16
)] uint16
*ip_address
,
61 [in,unique,string,charset
(UTF16
)] uint16
*client_computer_name
67 [public] WERROR witness_UnRegister
(
68 [in] policy_handle
context_handle
74 typedef [v1_enum] enum {
75 WITNESS_NOTIFY_RESOURCE_CHANGE
= 1,
76 WITNESS_NOTIFY_CLIENT_MOVE
= 2,
77 WITNESS_NOTIFY_SHARE_MOVE
= 3,
78 WITNESS_NOTIFY_IP_CHANGE
= 4
79 } witness_notifyResponse_type
;
81 typedef [v1_enum] enum {
82 WITNESS_RESOURCE_STATE_UNKNOWN
= 0x00,
83 WITNESS_RESOURCE_STATE_AVAILABLE
= 0x01,
84 WITNESS_RESOURCE_STATE_UNAVAILABLE
= 0xff
85 } witness_ResourceChange_type
;
87 typedef [flag
(NDR_NOALIGN|NDR_LITTLE_ENDIAN
),gensize
,public] struct {
88 [value
(ndr_size_witness_ResourceChange
(r
,ndr
->flags
))] uint32 length
;
89 witness_ResourceChange_type type
;
91 } witness_ResourceChange
;
93 typedef [bitmap32bit
] bitmap
{
94 WITNESS_IPADDR_V4
= 0x01,
95 WITNESS_IPADDR_V6
= 0x02,
96 WITNESS_IPADDR_ONLINE
= 0x08,
97 WITNESS_IPADDR_OFFLINE
= 0x10
98 } witness_IPaddrInfo_flags
;
100 typedef [flag
(NDR_NOALIGN|NDR_LITTLE_ENDIAN
),gensize
] struct {
101 witness_IPaddrInfo_flags flags
;
104 } witness_IPaddrInfo
;
106 typedef [flag
(NDR_NOALIGN|NDR_LITTLE_ENDIAN
)] struct {
107 [value
(r
->num
*ndr_size_witness_IPaddrInfo
(r
->addr
, ndr
->flags
))] uint32 length
;
108 [value
(0)] uint32 reserved
;
110 witness_IPaddrInfo addr
[num
];
111 } witness_IPaddrInfoList
;
113 typedef [public,switch_type(witness_notifyResponse_type
),nodiscriminant
, flag
(NDR_NOALIGN|NDR_LITTLE_ENDIAN
)] union {
114 [case(WITNESS_NOTIFY_RESOURCE_CHANGE
)] witness_ResourceChange resource_change
;
115 [case(WITNESS_NOTIFY_CLIENT_MOVE
)] witness_IPaddrInfoList client_move
;
116 [case(WITNESS_NOTIFY_SHARE_MOVE
)] witness_IPaddrInfoList share_move
;
117 [case(WITNESS_NOTIFY_IP_CHANGE
)] witness_IPaddrInfoList ip_change
;
118 } witness_notifyResponse_message
;
120 typedef [flag
(NDR_PAHEX
)] struct {
121 witness_notifyResponse_type type
;
122 [value
(messages
->length
)] uint32 length
;
124 /* [switch_is(type), size_is(num)] witness_notifyResponse_message *messages; */
125 /* [size_is(length)] uint8 *messages; */
126 [subcontext
(4), subcontext_size
(length
), flag
(NDR_REMAINING
)] DATA_BLOB
*messages
;
127 } witness_notifyResponse
;
129 [public] WERROR witness_AsyncNotify
(
130 [in] policy_handle
context_handle,
131 [out] witness_notifyResponse
**response
137 typedef [bitmap32bit
] bitmap
{
138 WITNESS_REGISTER_NONE
= 0x00,
139 WITNESS_REGISTER_IP_NOTIFICATION
= 0x01
140 } witness_RegisterEx_flags
;
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
,