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