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