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