1 // Copyright © 2015, Brian Vincent
2 // Licensed under the MIT License <LICENSE.md>
3 // This module contains the DCE RPC runtime APIs.
4 pub type RPC_CSTR = *mut ::c_uchar;
5 pub type RPC_WSTR = *mut ::wchar_t;
6 pub type RPC_CWSTR = *const ::wchar_t;
7 pub type RPC_BINDING_HANDLE = ::I_RPC_HANDLE;
8 pub type handle_t = RPC_BINDING_HANDLE;
9 pub type rpc_binding_handle_t = RPC_BINDING_HANDLE;
10 pub type UUID = ::GUID;
11 pub type uuid_t = UUID;
12 STRUCT!{struct RPC_BINDING_VECTOR {
13     Count: ::c_ulong,
14     BindingH: [RPC_BINDING_HANDLE; 1],
15 }}
16 pub type rpc_binding_vector_t = RPC_BINDING_VECTOR;
17 STRUCT!{struct UUID_VECTOR {
18     Count: ::c_ulong,
19     Uuid: [*mut UUID; 1],
20 }}
21 pub type uuid_vector_t = UUID_VECTOR;
22 pub type RPC_IF_HANDLE = *mut ::c_void;
23 STRUCT!{struct RPC_IF_ID {
24     Uuid: UUID,
25     VersMajor: ::c_ushort,
26     VersMinor: ::c_ushort,
27 }}
28 pub const RPC_C_BINDING_INFINITE_TIMEOUT: ::DWORD = 10;
29 pub const RPC_C_BINDING_MIN_TIMEOUT: ::DWORD = 0;
30 pub const RPC_C_BINDING_DEFAULT_TIMEOUT: ::DWORD = 5;
31 pub const RPC_C_BINDING_MAX_TIMEOUT: ::DWORD = 9;
32 pub const RPC_C_CANCEL_INFINITE_TIMEOUT: ::c_int = -1;
33 pub const RPC_C_LISTEN_MAX_CALLS_DEFAULT: ::DWORD = 1234;
34 pub const RPC_C_PROTSEQ_MAX_REQS_DEFAULT: ::DWORD = 10;
35 pub const RPC_C_BIND_TO_ALL_NICS: ::DWORD = 1;
36 pub const RPC_C_USE_INTERNET_PORT: ::DWORD = 0x1;
37 pub const RPC_C_USE_INTRANET_PORT: ::DWORD = 0x2;
38 pub const RPC_C_DONT_FAIL: ::DWORD = 0x4;
39 pub const RPC_C_RPCHTTP_USE_LOAD_BALANCE: ::DWORD = 0x8;
40 pub const RPC_C_MQ_TEMPORARY: ::DWORD = 0x0000;
41 pub const RPC_C_MQ_PERMANENT: ::DWORD = 0x0001;
42 pub const RPC_C_MQ_CLEAR_ON_OPEN: ::DWORD = 0x0002;
43 pub const RPC_C_MQ_USE_EXISTING_SECURITY: ::DWORD = 0x0004;
44 pub const RPC_C_MQ_AUTHN_LEVEL_NONE: ::DWORD = 0x0000;
45 pub const RPC_C_MQ_AUTHN_LEVEL_PKT_INTEGRITY: ::DWORD = 0x0008;
46 pub const RPC_C_MQ_AUTHN_LEVEL_PKT_PRIVACY: ::DWORD = 0x0010;
47 pub const RPC_C_OPT_MQ_DELIVERY: ::DWORD = 1;
48 pub const RPC_C_OPT_MQ_PRIORITY: ::DWORD = 2;
49 pub const RPC_C_OPT_MQ_JOURNAL: ::DWORD = 3;
50 pub const RPC_C_OPT_MQ_ACKNOWLEDGE: ::DWORD = 4;
51 pub const RPC_C_OPT_MQ_AUTHN_SERVICE: ::DWORD = 5;
52 pub const RPC_C_OPT_MQ_AUTHN_LEVEL: ::DWORD = 6;
53 pub const RPC_C_OPT_MQ_TIME_TO_REACH_QUEUE: ::DWORD = 7;
54 pub const RPC_C_OPT_MQ_TIME_TO_BE_RECEIVED: ::DWORD = 8;
55 pub const RPC_C_OPT_BINDING_NONCAUSAL: ::DWORD = 9;
56 pub const RPC_C_OPT_SECURITY_CALLBACK: ::DWORD = 10;
57 pub const RPC_C_OPT_UNIQUE_BINDING: ::DWORD = 11;
58 pub const RPC_C_OPT_CALL_TIMEOUT: ::DWORD = 12;
59 pub const RPC_C_OPT_DONT_LINGER: ::DWORD = 13;
60 pub const RPC_C_OPT_TRUST_PEER: ::DWORD = 14;
61 pub const RPC_C_OPT_ASYNC_BLOCK: ::DWORD = 15;
62 pub const RPC_C_OPT_OPTIMIZE_TIME: ::DWORD = 16;
63 pub const RPC_C_OPT_MAX_OPTIONS: ::DWORD = 17;
64 pub const RPC_C_MQ_EXPRESS: ::DWORD = 0;
65 pub const RPC_C_MQ_RECOVERABLE: ::DWORD = 1;
66 pub const RPC_C_MQ_JOURNAL_NONE: ::DWORD = 0;
67 pub const RPC_C_MQ_JOURNAL_DEADLETTER: ::DWORD = 1;
68 pub const RPC_C_MQ_JOURNAL_ALWAYS: ::DWORD = 2;
69 pub const RPC_C_FULL_CERT_CHAIN: ::DWORD = 0x0001;
70 STRUCT!{struct RPC_PROTSEQ_VECTORA {
71     Count: ::c_uint,
72     Protseq: [*mut ::c_uchar; 1],
73 }}
74 STRUCT!{struct RPC_PROTSEQ_VECTORW {
75     Count: ::c_uint,
76     Protseq: [*mut ::c_ushort; 1],
77 }}
78 STRUCT!{struct RPC_POLICY {
79     Length: ::c_uint,
80     EndpointFlags: ::c_ulong,
81     NICFlags: ::c_ulong,
82 }}
83 pub type PRPC_POLICY = *mut RPC_POLICY;
84 pub type RPC_OBJECT_INQ_FN = Option<unsafe extern "system" fn(
85     ObjectUuid: *mut UUID, TypeUuid: *mut UUID, Status: *mut ::RPC_STATUS,
86 )>;
87 pub type RPC_IF_CALLBACK_FN = Option<unsafe extern "system" fn(
88     InterfaceUuid: RPC_IF_HANDLE, Context: *mut ::c_void,
89 ) -> ::RPC_STATUS>;
90 pub type RPC_SECURITY_CALLBACK_FN = Option<unsafe extern "system" fn(Context: *mut ::c_void)>;
91 pub type RPC_MGR_EPV = ::c_void;
92 STRUCT!{struct RPC_STATS_VECTOR {
93     Count: ::c_uint,
94     Stats: [::c_ulong; 1],
95 }}
96 pub const RPC_C_STATS_CALLS_IN: ::c_ulong = 0;
97 pub const RPC_C_STATS_CALLS_OUT: ::c_ulong = 1;
98 pub const RPC_C_STATS_PKTS_IN: ::c_ulong = 2;
99 pub const RPC_C_STATS_PKTS_OUT: ::c_ulong = 3;
100 STRUCT!{struct RPC_IF_ID_VECTOR {
101     Count: ::c_ulong,
102     IfId: [*mut RPC_IF_ID; 1],
103 }}
104 pub type RPC_AUTH_IDENTITY_HANDLE = *mut ::c_void;
105 pub type RPC_AUTHZ_HANDLE = *mut ::c_void;
106 pub const RPC_C_AUTHN_LEVEL_DEFAULT: ::DWORD = 0;
107 pub const RPC_C_AUTHN_LEVEL_NONE: ::DWORD = 1;
108 pub const RPC_C_AUTHN_LEVEL_CONNECT: ::DWORD = 2;
109 pub const RPC_C_AUTHN_LEVEL_CALL: ::DWORD = 3;
110 pub const RPC_C_AUTHN_LEVEL_PKT: ::DWORD = 4;
111 pub const RPC_C_AUTHN_LEVEL_PKT_INTEGRITY: ::DWORD = 5;
112 pub const RPC_C_AUTHN_LEVEL_PKT_PRIVACY: ::DWORD = 6;
113 pub const RPC_C_IMP_LEVEL_DEFAULT: ::DWORD = 0;
114 pub const RPC_C_IMP_LEVEL_ANONYMOUS: ::DWORD = 1;
115 pub const RPC_C_IMP_LEVEL_IDENTIFY: ::DWORD = 2;
116 pub const RPC_C_IMP_LEVEL_IMPERSONATE: ::DWORD = 3;
117 pub const RPC_C_IMP_LEVEL_DELEGATE: ::DWORD = 4;
118 pub const RPC_C_QOS_IDENTITY_STATIC: ::DWORD = 0;
119 pub const RPC_C_QOS_IDENTITY_DYNAMIC: ::DWORD = 1;
120 pub const RPC_C_QOS_CAPABILITIES_DEFAULT: ::DWORD = 0x0;
121 pub const RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH: ::DWORD = 0x1;
122 pub const RPC_C_QOS_CAPABILITIES_MAKE_FULLSIC: ::DWORD = 0x2;
123 pub const RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY: ::DWORD = 0x4;
124 pub const RPC_C_QOS_CAPABILITIES_IGNORE_DELEGATE_FAILURE: ::DWORD = 0x8;
125 pub const RPC_C_QOS_CAPABILITIES_LOCAL_MA_HINT: ::DWORD = 0x10;
126 pub const RPC_C_QOS_CAPABILITIES_SCHANNEL_FULL_AUTH_IDENTITY: ::DWORD = 0x20;
127 pub const RPC_C_PROTECT_LEVEL_DEFAULT: ::DWORD = RPC_C_AUTHN_LEVEL_DEFAULT;
128 pub const RPC_C_PROTECT_LEVEL_NONE: ::DWORD = RPC_C_AUTHN_LEVEL_NONE;
129 pub const RPC_C_PROTECT_LEVEL_CONNECT: ::DWORD = RPC_C_AUTHN_LEVEL_CONNECT;
130 pub const RPC_C_PROTECT_LEVEL_CALL: ::DWORD = RPC_C_AUTHN_LEVEL_CALL;
131 pub const RPC_C_PROTECT_LEVEL_PKT: ::DWORD = RPC_C_AUTHN_LEVEL_PKT;
132 pub const RPC_C_PROTECT_LEVEL_PKT_INTEGRITY: ::DWORD = RPC_C_AUTHN_LEVEL_PKT_INTEGRITY;
133 pub const RPC_C_PROTECT_LEVEL_PKT_PRIVACY: ::DWORD = RPC_C_AUTHN_LEVEL_PKT_PRIVACY;
134 pub const RPC_C_AUTHN_NONE: ::DWORD = 0;
135 pub const RPC_C_AUTHN_DCE_PRIVATE: ::DWORD = 1;
136 pub const RPC_C_AUTHN_DCE_PUBLIC: ::DWORD = 2;
137 pub const RPC_C_AUTHN_DEC_PUBLIC: ::DWORD = 4;
138 pub const RPC_C_AUTHN_GSS_NEGOTIATE: ::DWORD = 9;
139 pub const RPC_C_AUTHN_WINNT: ::DWORD = 10;
140 pub const RPC_C_AUTHN_GSS_SCHANNEL: ::DWORD = 14;
141 pub const RPC_C_AUTHN_GSS_KERBEROS: ::DWORD = 16;
142 pub const RPC_C_AUTHN_DPA: ::DWORD = 17;
143 pub const RPC_C_AUTHN_MSN: ::DWORD = 18;
144 pub const RPC_C_AUTHN_DIGEST: ::DWORD = 21;
145 pub const RPC_C_AUTHN_KERNEL: ::DWORD = 20;
146 pub const RPC_C_AUTHN_NEGO_EXTENDER: ::DWORD = 30;
147 pub const RPC_C_AUTHN_PKU2U: ::DWORD = 31;
148 pub const RPC_C_AUTHN_LIVE_SSP: ::DWORD = 32;
149 pub const RPC_C_AUTHN_LIVEXP_SSP: ::DWORD = 35;
150 pub const RPC_C_AUTHN_MSONLINE: ::DWORD = 82;
151 pub const RPC_C_AUTHN_MQ: ::DWORD = 100;
152 pub const RPC_C_AUTHN_DEFAULT: ::DWORD = 0xFFFFFFFF;
153 pub const RPC_C_NO_CREDENTIALS: ::DWORD = 0xFFFFFFFF;
154 pub const RPC_C_SECURITY_QOS_VERSION: ::DWORD = 1;
155 pub const RPC_C_SECURITY_QOS_VERSION_1: ::DWORD = 1;
156 STRUCT!{struct RPC_SECURITY_QOS {
157     Version: ::c_ulong,
158     Capabilities: ::c_ulong,
159     IdentityTracking: ::c_ulong,
160     ImpersonationType: ::c_ulong,
161 }}
162 pub type PRPC_SECURITY_QOS = *mut RPC_SECURITY_QOS;
163 STRUCT!{struct SEC_WINNT_AUTH_IDENTITY_W {
164     User: *mut ::c_ushort,
165     UserLength: ::c_ulong,
166     Domain: *mut ::c_ushort,
167     DomainLength: ::c_ulong,
168     Password: *mut ::c_ushort,
169     PasswordLength: ::c_ulong,
170     Flags: ::c_ulong,
171 }}
172 pub type PSEC_WINNT_AUTH_IDENTITY_W = *mut SEC_WINNT_AUTH_IDENTITY_W;
173 STRUCT!{struct SEC_WINNT_AUTH_IDENTITY_A {
174     User: *mut ::c_uchar,
175     UserLength: ::c_ulong,
176     Domain: *mut ::c_uchar,
177     DomainLength: ::c_ulong,
178     Password: *mut ::c_uchar,
179     PasswordLength: ::c_ulong,
180     Flags: ::c_ulong,
181 }}
182 pub type PSEC_WINNT_AUTH_IDENTITY_A = *mut SEC_WINNT_AUTH_IDENTITY_A;
183 pub const RPC_C_AUTHN_INFO_TYPE_HTTP: ::c_ulong = 1;
184 pub const RPC_C_HTTP_AUTHN_TARGET_SERVER: ::c_ulong = 1;
185 pub const RPC_C_HTTP_AUTHN_TARGET_PROXY: ::c_ulong = 2;
186 pub const RPC_C_HTTP_AUTHN_SCHEME_BASIC: ::c_ulong = 0x00000001;
187 pub const RPC_C_HTTP_AUTHN_SCHEME_NTLM: ::c_ulong = 0x00000002;
188 pub const RPC_C_HTTP_AUTHN_SCHEME_PASSPORT: ::c_ulong = 0x00000004;
189 pub const RPC_C_HTTP_AUTHN_SCHEME_DIGEST: ::c_ulong = 0x00000008;
190 pub const RPC_C_HTTP_AUTHN_SCHEME_NEGOTIATE: ::c_ulong = 0x00000010;
191 pub const RPC_C_HTTP_AUTHN_SCHEME_CERT: ::c_ulong = 0x00010000;
192 pub const RPC_C_HTTP_FLAG_USE_SSL: ::c_ulong = 1;
193 pub const RPC_C_HTTP_FLAG_USE_FIRST_AUTH_SCHEME: ::c_ulong = 2;
194 pub const RPC_C_HTTP_FLAG_IGNORE_CERT_CN_INVALID: ::c_ulong = 8;
195 pub const RPC_C_HTTP_FLAG_ENABLE_CERT_REVOCATION_CHECK: ::c_ulong = 16;
196 STRUCT!{struct RPC_HTTP_TRANSPORT_CREDENTIALS_W {
197     TransportCredentials: *mut SEC_WINNT_AUTH_IDENTITY_W,
198     Flags: ::c_ulong,
199     AuthenticationTarget: ::c_ulong,
200     NumberOfAuthnSchemes: ::c_ulong,
201     AuthnSchemes: *mut ::c_ulong,
202     ServerCertificateSubject: *mut ::c_ushort,
203 }}
204 pub type PRPC_HTTP_TRANSPORT_CREDENTIALS_W = *mut RPC_HTTP_TRANSPORT_CREDENTIALS_W;
205 STRUCT!{struct RPC_HTTP_TRANSPORT_CREDENTIALS_A {
206     TransportCredentials: *mut SEC_WINNT_AUTH_IDENTITY_A,
207     Flags: ::c_ulong,
208     AuthenticationTarget: ::c_ulong,
209     NumberOfAuthnSchemes: ::c_ulong,
210     AuthnSchemes: *mut ::c_ulong,
211     ServerCertificateSubject: *mut ::c_uchar,
212 }}
213 pub type PRPC_HTTP_TRANSPORT_CREDENTIALS_A = *mut RPC_HTTP_TRANSPORT_CREDENTIALS_A;
214 STRUCT!{struct RPC_HTTP_TRANSPORT_CREDENTIALS_V2_W {
215     TransportCredentials: *mut SEC_WINNT_AUTH_IDENTITY_W,
216     Flags: ::c_ulong,
217     AuthenticationTarget: ::c_ulong,
218     NumberOfAuthnSchemes: ::c_ulong,
219     AuthnSchemes: *mut ::c_ulong,
220     ServerCertificateSubject: *mut ::c_ushort,
221     ProxyCredentials: *mut SEC_WINNT_AUTH_IDENTITY_W,
222     NumberOfProxyAuthnSchemes: ::c_ulong,
223     ProxyAuthnSchemes: *mut ::c_ulong,
224 }}
225 pub type PRPC_HTTP_TRANSPORT_CREDENTIALS_V2_W = *mut RPC_HTTP_TRANSPORT_CREDENTIALS_V2_W;
226 STRUCT!{struct RPC_HTTP_TRANSPORT_CREDENTIALS_V2_A {
227     TransportCredentials: *mut SEC_WINNT_AUTH_IDENTITY_A,
228     Flags: ::c_ulong,
229     AuthenticationTarget: ::c_ulong,
230     NumberOfAuthnSchemes: ::c_ulong,
231     AuthnSchemes: *mut ::c_ulong,
232     ServerCertificateSubject: *mut ::c_uchar,
233     ProxyCredentials: *mut SEC_WINNT_AUTH_IDENTITY_A,
234     NumberOfProxyAuthnSchemes: ::c_ulong,
235     ProxyAuthnSchemes: *mut ::c_ulong,
236 }}
237 pub type PRPC_HTTP_TRANSPORT_CREDENTIALS_V2_A = *mut RPC_HTTP_TRANSPORT_CREDENTIALS_V2_A;
238 STRUCT!{struct RPC_HTTP_TRANSPORT_CREDENTIALS_V3_W {
239     TransportCredentials: RPC_AUTH_IDENTITY_HANDLE,
240     Flags: ::c_ulong,
241     AuthenticationTarget: ::c_ulong,
242     NumberOfAuthnSchemes: ::c_ulong,
243     AuthnSchemes: *mut ::c_ulong,
244     ServerCertificateSubject: *mut ::c_ushort,
245     ProxyCredentials: *mut RPC_AUTH_IDENTITY_HANDLE,
246     NumberOfProxyAuthnSchemes: ::c_ulong,
247     ProxyAuthnSchemes: *mut ::c_ulong,
248 }}
249 pub type PRPC_HTTP_TRANSPORT_CREDENTIALS_V3_W = *mut RPC_HTTP_TRANSPORT_CREDENTIALS_V3_W;
250 STRUCT!{struct RPC_HTTP_TRANSPORT_CREDENTIALS_V3_A {
251     TransportCredentials: RPC_AUTH_IDENTITY_HANDLE,
252     Flags: ::c_ulong,
253     AuthenticationTarget: ::c_ulong,
254     NumberOfAuthnSchemes: ::c_ulong,
255     AuthnSchemes: *mut ::c_ulong,
256     ServerCertificateSubject: *mut ::c_uchar,
257     ProxyCredentials: *mut RPC_AUTH_IDENTITY_HANDLE,
258     NumberOfProxyAuthnSchemes: ::c_ulong,
259     ProxyAuthnSchemes: *mut ::c_ulong,
260 }}
261 pub type PRPC_HTTP_TRANSPORT_CREDENTIALS_V3_A = *mut RPC_HTTP_TRANSPORT_CREDENTIALS_V3_A;
262 STRUCT!{struct RPC_SECURITY_QOS_V2_W_union {
263     HttpCredentials: *mut RPC_HTTP_TRANSPORT_CREDENTIALS_W,
264 }}
265 STRUCT!{struct RPC_SECURITY_QOS_V2_W {
266     Version: ::c_ulong,
267     Capabilities: ::c_ulong,
268     IdentityTracking: ::c_ulong,
269     ImpersonationType: ::c_ulong,
270     AdditionalSecurityInfoType: ::c_ulong,
271     u: RPC_SECURITY_QOS_V2_W_union,
272 }}
273 pub type PRPC_SECURITY_QOS_V2_W = *mut RPC_SECURITY_QOS_V2_W;
274 STRUCT!{struct RPC_SECURITY_QOS_V2_A_union {
275     HttpCredentials: *mut RPC_HTTP_TRANSPORT_CREDENTIALS_A,
276 }}
277 STRUCT!{struct RPC_SECURITY_QOS_V2_A {
278     Version: ::c_ulong,
279     Capabilities: ::c_ulong,
280     IdentityTracking: ::c_ulong,
281     ImpersonationType: ::c_ulong,
282     AdditionalSecurityInfoType: ::c_ulong,
283     u: RPC_SECURITY_QOS_V2_A_union,
284 }}
285 pub type PRPC_SECURITY_QOS_V2_A = *mut RPC_SECURITY_QOS_V2_A;
286 STRUCT!{struct RPC_SECURITY_QOS_V3_W_union {
287     HttpCredentials: *mut RPC_HTTP_TRANSPORT_CREDENTIALS_W,
288 }}
289 STRUCT!{struct RPC_SECURITY_QOS_V3_W {
290     Version: ::c_ulong,
291     Capabilities: ::c_ulong,
292     IdentityTracking: ::c_ulong,
293     ImpersonationType: ::c_ulong,
294     AdditionalSecurityInfoType: ::c_ulong,
295     u: RPC_SECURITY_QOS_V3_W_union,
296     Sid: *mut ::c_void,
297 }}
298 pub type PRPC_SECURITY_QOS_V3_W = *mut RPC_SECURITY_QOS_V3_W;
299 STRUCT!{struct RPC_SECURITY_QOS_V3_A_union {
300     HttpCredentials: *mut RPC_HTTP_TRANSPORT_CREDENTIALS_A,
301 }}
302 STRUCT!{struct RPC_SECURITY_QOS_V3_A {
303     Version: ::c_ulong,
304     Capabilities: ::c_ulong,
305     IdentityTracking: ::c_ulong,
306     ImpersonationType: ::c_ulong,
307     AdditionalSecurityInfoType: ::c_ulong,
308     u: RPC_SECURITY_QOS_V3_A_union,
309     Sid: *mut ::c_void,
310 }}
311 pub type PRPC_SECURITY_QOS_V3_A = *mut RPC_SECURITY_QOS_V3_A;
312 STRUCT!{struct RPC_SECURITY_QOS_V4_W_union {
313     HttpCredentials: *mut RPC_HTTP_TRANSPORT_CREDENTIALS_W,
314 }}
315 STRUCT!{struct RPC_SECURITY_QOS_V4_W {
316     Version: ::c_ulong,
317     Capabilities: ::c_ulong,
318     IdentityTracking: ::c_ulong,
319     ImpersonationType: ::c_ulong,
320     AdditionalSecurityInfoType: ::c_ulong,
321     u: RPC_SECURITY_QOS_V4_W_union,
322     Sid: *mut ::c_void,
323     EffectiveOnly: ::c_uint,
324 }}
325 pub type PRPC_SECURITY_QOS_V4_W = *mut RPC_SECURITY_QOS_V4_W;
326 STRUCT!{struct RPC_SECURITY_QOS_V4_A_union {
327     HttpCredentials: *mut RPC_HTTP_TRANSPORT_CREDENTIALS_A,
328 }}
329 STRUCT!{struct RPC_SECURITY_QOS_V4_A {
330     Version: ::c_ulong,
331     Capabilities: ::c_ulong,
332     IdentityTracking: ::c_ulong,
333     ImpersonationType: ::c_ulong,
334     AdditionalSecurityInfoType: ::c_ulong,
335     u: RPC_SECURITY_QOS_V4_A_union,
336     Sid: *mut ::c_void,
337     EffectiveOnly: ::c_uint,
338 }}
339 pub type PRPC_SECURITY_QOS_V4_A = *mut RPC_SECURITY_QOS_V4_A;
340 STRUCT!{struct RPC_SECURITY_QOS_V5_W_union {
341     HttpCredentials: *mut RPC_HTTP_TRANSPORT_CREDENTIALS_W,
342 }}
343 STRUCT!{struct RPC_SECURITY_QOS_V5_W {
344     Version: ::c_ulong,
345     Capabilities: ::c_ulong,
346     IdentityTracking: ::c_ulong,
347     ImpersonationType: ::c_ulong,
348     AdditionalSecurityInfoType: ::c_ulong,
349     u: RPC_SECURITY_QOS_V5_W_union,
350     Sid: *mut ::c_void,
351     EffectiveOnly: ::c_uint,
352     ServerSecurityDescriptor: *mut ::c_void,
353 }}
354 pub type PRPC_SECURITY_QOS_V5_W = *mut RPC_SECURITY_QOS_V5_W;
355 STRUCT!{struct RPC_SECURITY_QOS_V5_A_union {
356     HttpCredentials: *mut RPC_HTTP_TRANSPORT_CREDENTIALS_A,
357 }}
358 STRUCT!{struct RPC_SECURITY_QOS_V5_A {
359     Version: ::c_ulong,
360     Capabilities: ::c_ulong,
361     IdentityTracking: ::c_ulong,
362     ImpersonationType: ::c_ulong,
363     AdditionalSecurityInfoType: ::c_ulong,
364     u: RPC_SECURITY_QOS_V5_A_union,
365     Sid: *mut ::c_void,
366     EffectiveOnly: ::c_uint,
367     ServerSecurityDescriptor: *mut ::c_void,
368 }}
369 pub type PRPC_SECURITY_QOS_V5_A = *mut RPC_SECURITY_QOS_V5_A;
370 pub const RPC_PROTSEQ_TCP: ::c_ulong = 0x1;
371 pub const RPC_PROTSEQ_NMP: ::c_ulong = 0x2;
372 pub const RPC_PROTSEQ_LRPC: ::c_ulong = 0x3;
373 pub const RPC_PROTSEQ_HTTP: ::c_ulong = 0x4;
374 pub const RPC_BHT_OBJECT_UUID_VALID: ::c_ulong = 0x1;
375 pub const RPC_BHO_NONCAUSAL: ::c_ulong = 0x1;
376 pub const RPC_BHO_DONTLINGER: ::c_ulong = 0x2;
377 pub const RPC_BHO_EXCLUSIVE_AND_GUARANTEED: ::c_ulong = 0x4;
378 STRUCT!{struct RPC_BINDING_HANDLE_TEMPLATE_V1_W_union {
379     Reserved: *mut ::c_ushort,
380 }}
381 STRUCT!{struct RPC_BINDING_HANDLE_TEMPLATE_V1_W {
382     Version: ::c_ulong,
383     Flags: ::c_ulong,
384     ProtocolSequence: ::c_ulong,
385     NetworkAddress: *mut ::c_ushort,
386     StringEndpoint: *mut ::c_ushort,
387     u1: RPC_BINDING_HANDLE_TEMPLATE_V1_W_union,
388     ObjectUuid: UUID,
389 }}
390 pub type PRPC_BINDING_HANDLE_TEMPLATE_V1_W = *mut RPC_BINDING_HANDLE_TEMPLATE_V1_W;
391 STRUCT!{struct RPC_BINDING_HANDLE_TEMPLATE_V1_A_union {
392     Reserved: *mut ::c_uchar,
393 }}
394 STRUCT!{struct RPC_BINDING_HANDLE_TEMPLATE_V1_A {
395     Version: ::c_ulong,
396     Flags: ::c_ulong,
397     ProtocolSequence: ::c_ulong,
398     NetworkAddress: *mut ::c_uchar,
399     StringEndpoint: *mut ::c_uchar,
400     u1: RPC_BINDING_HANDLE_TEMPLATE_V1_A_union,
401     ObjectUuid: UUID,
402 }}
403 pub type PRPC_BINDING_HANDLE_TEMPLATE_V1_A = *mut RPC_BINDING_HANDLE_TEMPLATE_V1_A;
404 STRUCT!{struct RPC_BINDING_HANDLE_SECURITY_V1_W {
405     Version: ::c_ulong,
406     ServerPrincName: *mut ::c_ushort,
407     AuthnLevel: ::c_ulong,
408     AuthnSvc: ::c_ulong,
409     AuthIdentity: *mut SEC_WINNT_AUTH_IDENTITY_W,
410     SecurityQos: *mut RPC_SECURITY_QOS,
411 }}
412 pub type PRPC_BINDING_HANDLE_SECURITY_V1_W = *mut RPC_BINDING_HANDLE_SECURITY_V1_W;
413 STRUCT!{struct RPC_BINDING_HANDLE_SECURITY_V1_A {
414     Version: ::c_ulong,
415     ServerPrincName: *mut ::c_uchar,
416     AuthnLevel: ::c_ulong,
417     AuthnSvc: ::c_ulong,
418     AuthIdentity: *mut SEC_WINNT_AUTH_IDENTITY_A,
419     SecurityQos: *mut RPC_SECURITY_QOS,
420 }}
421 pub type PRPC_BINDING_HANDLE_SECURITY_V1_A = *mut RPC_BINDING_HANDLE_SECURITY_V1_A;
422 STRUCT!{struct RPC_BINDING_HANDLE_OPTIONS_V1 {
423     Version: ::c_ulong,
424     Flags: ::c_ulong,
425     ComTimeout: ::c_ulong,
426     CallTimeout: ::c_ulong,
427 }}
428 pub type PRPC_BINDING_HANDLE_OPTIONS_V1 = *mut RPC_BINDING_HANDLE_OPTIONS_V1;
429 ENUM!{enum RPC_HTTP_REDIRECTOR_STAGE {
430     RPCHTTP_RS_REDIRECT = 1,
431     RPCHTTP_RS_ACCESS_1,
432     RPCHTTP_RS_SESSION,
433     RPCHTTP_RS_ACCESS_2,
434     RPCHTTP_RS_INTERFACE,
435 }}
436 pub type RPC_NEW_HTTP_PROXY_CHANNEL = Option<unsafe extern "system" fn(
437     RedirectorStage: RPC_HTTP_REDIRECTOR_STAGE, ServerName: RPC_WSTR, ServerPort: RPC_WSTR,
438     RemoteUser: RPC_WSTR, AuthType: RPC_WSTR, ResourceUuid: *mut ::c_void,
439     SessionId: *mut ::c_void, Interface: *mut ::c_void, Reserved: *mut ::c_void, Flags: ::c_ulong,
440     NewServerName: *mut RPC_WSTR, NewServerPort: *mut RPC_WSTR,
441 ) -> ::RPC_STATUS>;
442 pub type RPC_HTTP_PROXY_FREE_STRING = Option<unsafe extern "system" fn(String: RPC_WSTR)>;
443 pub const RPC_C_AUTHZ_NONE: ::DWORD = 0;
444 pub const RPC_C_AUTHZ_NAME: ::DWORD = 1;
445 pub const RPC_C_AUTHZ_DCE: ::DWORD = 2;
446 pub const RPC_C_AUTHZ_DEFAULT: ::DWORD = 0xffffffff;
447 pub type RPC_AUTH_KEY_RETRIEVAL_FN = Option<unsafe extern "system" fn(
448     Arg: *mut ::c_void, ServerPrincName: RPC_WSTR, KeyVer: ::c_ulong, Key: *mut *mut ::c_void,
449     Status: *mut ::RPC_STATUS,
450 )>;
451 STRUCT!{struct RPC_CLIENT_INFORMATION1 {
452     UserName: *mut ::c_uchar,
453     ComputerName: *mut ::c_uchar,
454     Privilege: ::c_ushort,
455     AuthFlags: ::c_ulong,
456 }}
457 pub type PRPC_CLIENT_INFORMATION1 = *mut RPC_CLIENT_INFORMATION1;
458 pub type RPC_EP_INQ_HANDLE = *mut ::I_RPC_HANDLE;
459 pub const  RPC_C_EP_ALL_ELTS: ::c_ulong = 0;
460 pub const  RPC_C_EP_MATCH_BY_IF: ::c_ulong = 1;
461 pub const  RPC_C_EP_MATCH_BY_OBJ: ::c_ulong = 2;
462 pub const  RPC_C_EP_MATCH_BY_BOTH: ::c_ulong = 3;
463 pub const  RPC_C_VERS_ALL: ::c_ulong = 1;
464 pub const  RPC_C_VERS_COMPATIBLE: ::c_ulong = 2;
465 pub const  RPC_C_VERS_EXACT: ::c_ulong = 3;
466 pub const  RPC_C_VERS_MAJOR_ONLY: ::c_ulong = 4;
467 pub const  RPC_C_VERS_UPTO: ::c_ulong = 5;
468 pub type RPC_MGMT_AUTHORIZATION_FN = Option<unsafe extern "system" fn(
469     ClientBinding: RPC_BINDING_HANDLE, RequestedMgmtOperation: ::c_ulong,
470     Status: *mut ::RPC_STATUS,
471 ) -> ::c_int>;
472 pub const RPC_C_MGMT_INQ_IF_IDS: ::c_ulong = 0;
473 pub const RPC_C_MGMT_INQ_PRINC_NAME: ::c_ulong = 1;
474 pub const RPC_C_MGMT_INQ_STATS: ::c_ulong = 2;
475 pub const RPC_C_MGMT_IS_SERVER_LISTEN: ::c_ulong = 3;
476 pub const RPC_C_MGMT_STOP_SERVER_LISTEN: ::c_ulong = 4;
477 pub const RPC_IF_AUTOLISTEN: ::c_uint = 0x0001;
478 pub const RPC_IF_OLE: ::c_uint = 0x0002;
479 pub const RPC_IF_ALLOW_UNKNOWN_AUTHORITY: ::c_uint = 0x0004;
480 pub const RPC_IF_ALLOW_SECURE_ONLY: ::c_uint = 0x0008;
481 pub const RPC_IF_ALLOW_CALLBACKS_WITH_NO_AUTH: ::c_uint = 0x0010;
482 pub const RPC_IF_ALLOW_LOCAL_ONLY: ::c_uint = 0x0020;
483 pub const RPC_IF_SEC_NO_CACHE: ::c_uint = 0x0040;
484 pub const RPC_IF_SEC_CACHE_PER_PROC: ::c_uint = 0x0080;
485 pub const RPC_IF_ASYNC_CALLBACK: ::c_uint = 0x0100;
486 pub const RPC_FW_IF_FLAG_DCOM: ::c_uint = 0x0001;
487 pub type RPC_INTERFACE_GROUP = *mut ::c_void;
488 pub type PRPC_INTERFACE_GROUP = *mut *mut ::c_void;
489 STRUCT!{struct RPC_ENDPOINT_TEMPLATEW {
490     Version: ::c_ulong,
491     ProtSeq: RPC_WSTR,
492     Endpoint: RPC_WSTR,
493     SecurityDescriptor: *mut ::c_void,
494     Backlog: ::c_ulong,
495 }}
496 pub type PRPC_ENDPOINT_TEMPLATEW = *mut RPC_ENDPOINT_TEMPLATEW;
497 STRUCT!{struct RPC_ENDPOINT_TEMPLATEA {
498     Version: ::c_ulong,
499     ProtSeq: RPC_CSTR,
500     Endpoint: RPC_CSTR,
501     SecurityDescriptor: *mut ::c_void,
502     Backlog: ::c_ulong,
503 }}
504 pub type PRPC_ENDPOINT_TEMPLATEA = *mut RPC_ENDPOINT_TEMPLATEA;
505 STRUCT!{struct RPC_INTERFACE_TEMPLATEA {
506     Version: ::c_ulong,
507     IfSpec: RPC_IF_HANDLE,
508     MgrTypeUuid: *mut UUID,
509     MgrEpv: *mut RPC_MGR_EPV,
510     Flags: ::c_uint,
511     MaxCalls: ::c_uint,
512     MaxRpcSize: ::c_uint,
513     IfCallback: *mut RPC_IF_CALLBACK_FN,
514     UuidVector: *mut UUID_VECTOR,
515     Annotation: RPC_CSTR,
516     SecurityDescriptor: *mut ::c_void,
517 }}
518 pub type PRPC_INTERFACE_TEMPLATEA = *mut RPC_INTERFACE_TEMPLATEA;
519 STRUCT!{struct RPC_INTERFACE_TEMPLATEW {
520     Version: ::c_ulong,
521     IfSpec: RPC_IF_HANDLE,
522     MgrTypeUuid: *mut UUID,
523     MgrEpv: *mut RPC_MGR_EPV,
524     Flags: ::c_uint,
525     MaxCalls: ::c_uint,
526     MaxRpcSize: ::c_uint,
527     IfCallback: *mut RPC_IF_CALLBACK_FN,
528     UuidVector: *mut UUID_VECTOR,
529     Annotation: RPC_WSTR,
530     SecurityDescriptor: *mut ::c_void,
531 }}
532 pub type PRPC_INTERFACE_TEMPLATEW = *mut RPC_INTERFACE_TEMPLATEW;
533 pub type RPC_INTERFACE_GROUP_IDLE_CALLBACK_FN = Option<unsafe extern "system" fn(
534     IfGroup: RPC_INTERFACE_GROUP, IdleCallbackContext: *mut ::c_void, IsGroupIdle: ::c_ulong,
535 )>;
536