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