1 // Copyright © 2016-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 //! Security Support Provider Interface Prototypes and structure definitions 8 9 use ctypes::{c_char, c_int, c_uchar, c_ulong, c_ushort, c_void}; 10 use shared::basetsd::{ULONG_PTR}; 11 use shared::guiddef::GUID; 12 use shared::minwindef::{PUCHAR, ULONG, USHORT}; 13 use um::subauth::PUNICODE_STRING; 14 use um::wincred::{PCREDUI_INFOA, PCREDUI_INFOW}; 15 use um::winnt::{ 16 BOOLEAN, CHAR, HANDLE, LARGE_INTEGER, LONG, LPSTR, LPWSTR, LUID, PCSTR, PCWSTR, PVOID, WCHAR 17 }; 18 19 pub type SEC_WCHAR = WCHAR; 20 pub type SEC_CHAR = CHAR; 21 pub type SECURITY_STATUS = LONG; 22 STRUCT!{struct SecHandle { 23 dwLower: ULONG_PTR, 24 dwUpper: ULONG_PTR, 25 }} 26 pub type PSecHandle = *mut SecHandle; 27 pub const SEC_DELETED_HANDLE: ULONG_PTR = 2; 28 pub type CredHandle = SecHandle; 29 pub type PCredHandle = PSecHandle; 30 pub type CtxtHandle = SecHandle; 31 pub type PCtxtHandle = PSecHandle; 32 pub type SECURITY_INTEGER = LARGE_INTEGER; 33 pub type PSECURITY_INTEGER = *mut LARGE_INTEGER; 34 pub type TimeStamp = SECURITY_INTEGER; 35 pub type PTimeStamp = *mut SECURITY_INTEGER; 36 STRUCT!{struct SECURITY_STRING { 37 Length: c_ushort, 38 MaximumLength: c_ushort, 39 Buffer: *mut c_ushort, 40 }} 41 pub type PSECURITY_STRING = *mut SECURITY_STRING; 42 STRUCT!{struct SecPkgInfoW { 43 fCapabilities: c_ulong, 44 wVersion: c_ushort, 45 wRPCID: c_ushort, 46 cbMaxToken: c_ulong, 47 Name: *mut SEC_WCHAR, 48 Comment: *mut SEC_WCHAR, 49 }} 50 pub type PSecPkgInfoW = *mut SecPkgInfoW; 51 STRUCT!{struct SecPkgInfoA { 52 fCapabilities: c_ulong, 53 wVersion: c_ushort, 54 wRPCID: c_ushort, 55 cbMaxToken: c_ulong, 56 Name: *mut SEC_CHAR, 57 Comment: *mut SEC_CHAR, 58 }} 59 pub type PSecPkgInfoA = *mut SecPkgInfoA; 60 pub const SECPKG_FLAG_INTEGRITY: c_ulong = 0x00000001; 61 pub const SECPKG_FLAG_PRIVACY: c_ulong = 0x00000002; 62 pub const SECPKG_FLAG_TOKEN_ONLY: c_ulong = 0x00000004; 63 pub const SECPKG_FLAG_DATAGRAM: c_ulong = 0x00000008; 64 pub const SECPKG_FLAG_CONNECTION: c_ulong = 0x00000010; 65 pub const SECPKG_FLAG_MULTI_REQUIRED: c_ulong = 0x00000020; 66 pub const SECPKG_FLAG_CLIENT_ONLY: c_ulong = 0x00000040; 67 pub const SECPKG_FLAG_EXTENDED_ERROR: c_ulong = 0x00000080; 68 pub const SECPKG_FLAG_IMPERSONATION: c_ulong = 0x00000100; 69 pub const SECPKG_FLAG_ACCEPT_WIN32_NAME: c_ulong = 0x00000200; 70 pub const SECPKG_FLAG_STREAM: c_ulong = 0x00000400; 71 pub const SECPKG_FLAG_NEGOTIABLE: c_ulong = 0x00000800; 72 pub const SECPKG_FLAG_GSS_COMPATIBLE: c_ulong = 0x00001000; 73 pub const SECPKG_FLAG_LOGON: c_ulong = 0x00002000; 74 pub const SECPKG_FLAG_ASCII_BUFFERS: c_ulong = 0x00004000; 75 pub const SECPKG_FLAG_FRAGMENT: c_ulong = 0x00008000; 76 pub const SECPKG_FLAG_MUTUAL_AUTH: c_ulong = 0x00010000; 77 pub const SECPKG_FLAG_DELEGATION: c_ulong = 0x00020000; 78 pub const SECPKG_FLAG_READONLY_WITH_CHECKSUM: c_ulong = 0x00040000; 79 pub const SECPKG_FLAG_RESTRICTED_TOKENS: c_ulong = 0x00080000; 80 pub const SECPKG_FLAG_NEGO_EXTENDER: c_ulong = 0x00100000; 81 pub const SECPKG_FLAG_NEGOTIABLE2: c_ulong = 0x00200000; 82 pub const SECPKG_FLAG_APPCONTAINER_PASSTHROUGH: c_ulong = 0x00400000; 83 pub const SECPKG_FLAG_APPCONTAINER_CHECKS: c_ulong = 0x00800000; 84 pub const SECPKG_ID_NONE: c_ulong = 0xFFFF; 85 pub const SECPKG_CALLFLAGS_APPCONTAINER: c_ulong = 0x00000001; 86 pub const SECPKG_CALLFLAGS_APPCONTAINER_AUTHCAPABLE: c_ulong = 0x00000002; 87 pub const SECPKG_CALLFLAGS_FORCE_SUPPLIED: c_ulong = 0x00000004; 88 STRUCT!{struct SecBuffer { 89 cbBuffer: c_ulong, 90 BufferType: c_ulong, 91 pvBuffer: *mut c_void, 92 }} 93 pub type PSecBuffer = *mut SecBuffer; 94 STRUCT!{struct SecBufferDesc { 95 ulVersion: c_ulong, 96 cBuffers: c_ulong, 97 pBuffers: PSecBuffer, 98 }} 99 pub type PSecBufferDesc = *mut SecBufferDesc; 100 pub const SECBUFFER_VERSION: c_ulong = 0; 101 pub const SECBUFFER_EMPTY: c_ulong = 0; 102 pub const SECBUFFER_DATA: c_ulong = 1; 103 pub const SECBUFFER_TOKEN: c_ulong = 2; 104 pub const SECBUFFER_PKG_PARAMS: c_ulong = 3; 105 pub const SECBUFFER_MISSING: c_ulong = 4; 106 pub const SECBUFFER_EXTRA: c_ulong = 5; 107 pub const SECBUFFER_STREAM_TRAILER: c_ulong = 6; 108 pub const SECBUFFER_STREAM_HEADER: c_ulong = 7; 109 pub const SECBUFFER_NEGOTIATION_INFO: c_ulong = 8; 110 pub const SECBUFFER_PADDING: c_ulong = 9; 111 pub const SECBUFFER_STREAM: c_ulong = 10; 112 pub const SECBUFFER_MECHLIST: c_ulong = 11; 113 pub const SECBUFFER_MECHLIST_SIGNATURE: c_ulong = 12; 114 pub const SECBUFFER_TARGET: c_ulong = 13; 115 pub const SECBUFFER_CHANNEL_BINDINGS: c_ulong = 14; 116 pub const SECBUFFER_CHANGE_PASS_RESPONSE: c_ulong = 15; 117 pub const SECBUFFER_TARGET_HOST: c_ulong = 16; 118 pub const SECBUFFER_ALERT: c_ulong = 17; 119 pub const SECBUFFER_APPLICATION_PROTOCOLS: c_ulong = 18; 120 pub const SECBUFFER_ATTRMASK: c_ulong = 0xF0000000; 121 pub const SECBUFFER_READONLY: c_ulong = 0x80000000; 122 pub const SECBUFFER_READONLY_WITH_CHECKSUM: c_ulong = 0x10000000; 123 pub const SECBUFFER_RESERVED: c_ulong = 0x60000000; 124 STRUCT!{struct SEC_NEGOTIATION_INFO { 125 Size: c_ulong, 126 NameLength: c_ulong, 127 Name: *mut SEC_WCHAR, 128 Reserved: *mut c_void, 129 }} 130 pub type PSEC_NEGOTIATION_INFO = *mut SEC_NEGOTIATION_INFO; 131 STRUCT!{struct SEC_CHANNEL_BINDINGS { 132 dwInitiatorAddrType: c_ulong, 133 cbInitiatorLength: c_ulong, 134 dwInitiatorOffset: c_ulong, 135 dwAcceptorAddrType: c_ulong, 136 cbAcceptorLength: c_ulong, 137 dwAcceptorOffset: c_ulong, 138 cbApplicationDataLength: c_ulong, 139 dwApplicationDataOffset: c_ulong, 140 }} 141 pub type PSEC_CHANNEL_BINDINGS = *mut SEC_CHANNEL_BINDINGS; 142 ENUM!{enum SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT { 143 SecApplicationProtocolNegotiationExt_None, 144 SecApplicationProtocolNegotiationExt_NPN, 145 SecApplicationProtocolNegotiationExt_ALPN, 146 }} 147 pub type PSEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT = *mut SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT; 148 STRUCT!{struct SEC_APPLICATION_PROTOCOL_LIST { 149 ProtoNegoExt: SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT, 150 ProtocolListSize: c_ushort, 151 ProtocolList: [c_uchar; 0], 152 }} 153 pub type PSEC_APPLICATION_PROTOCOL_LIST = *mut SEC_APPLICATION_PROTOCOL_LIST; 154 STRUCT!{struct SEC_APPLICATION_PROTOCOLS { 155 ProtocolListsSize: c_ulong, 156 ProtocolLists: [SEC_APPLICATION_PROTOCOL_LIST; 0], 157 }} 158 pub type PSEC_APPLICATION_PROTOCOLS = *mut SEC_APPLICATION_PROTOCOLS; 159 pub const SECURITY_NATIVE_DREP: c_ulong = 0x00000010; 160 pub const SECURITY_NETWORK_DREP: c_ulong = 0x00000000; 161 pub const SECPKG_CRED_INBOUND: c_ulong = 0x00000001; 162 pub const SECPKG_CRED_OUTBOUND: c_ulong = 0x00000002; 163 pub const SECPKG_CRED_BOTH: c_ulong = 0x00000003; 164 pub const SECPKG_CRED_DEFAULT: c_ulong = 0x00000004; 165 pub const SECPKG_CRED_RESERVED: c_ulong = 0xF0000000; 166 pub const SECPKG_CRED_AUTOLOGON_RESTRICTED: c_ulong = 0x00000010; 167 pub const SECPKG_CRED_PROCESS_POLICY_ONLY: c_ulong = 0x00000020; 168 pub const ISC_REQ_DELEGATE: c_ulong = 0x00000001; 169 pub const ISC_REQ_MUTUAL_AUTH: c_ulong = 0x00000002; 170 pub const ISC_REQ_REPLAY_DETECT: c_ulong = 0x00000004; 171 pub const ISC_REQ_SEQUENCE_DETECT: c_ulong = 0x00000008; 172 pub const ISC_REQ_CONFIDENTIALITY: c_ulong = 0x00000010; 173 pub const ISC_REQ_USE_SESSION_KEY: c_ulong = 0x00000020; 174 pub const ISC_REQ_PROMPT_FOR_CREDS: c_ulong = 0x00000040; 175 pub const ISC_REQ_USE_SUPPLIED_CREDS: c_ulong = 0x00000080; 176 pub const ISC_REQ_ALLOCATE_MEMORY: c_ulong = 0x00000100; 177 pub const ISC_REQ_USE_DCE_STYLE: c_ulong = 0x00000200; 178 pub const ISC_REQ_DATAGRAM: c_ulong = 0x00000400; 179 pub const ISC_REQ_CONNECTION: c_ulong = 0x00000800; 180 pub const ISC_REQ_CALL_LEVEL: c_ulong = 0x00001000; 181 pub const ISC_REQ_FRAGMENT_SUPPLIED: c_ulong = 0x00002000; 182 pub const ISC_REQ_EXTENDED_ERROR: c_ulong = 0x00004000; 183 pub const ISC_REQ_STREAM: c_ulong = 0x00008000; 184 pub const ISC_REQ_INTEGRITY: c_ulong = 0x00010000; 185 pub const ISC_REQ_IDENTIFY: c_ulong = 0x00020000; 186 pub const ISC_REQ_NULL_SESSION: c_ulong = 0x00040000; 187 pub const ISC_REQ_MANUAL_CRED_VALIDATION: c_ulong = 0x00080000; 188 pub const ISC_REQ_RESERVED1: c_ulong = 0x00100000; 189 pub const ISC_REQ_FRAGMENT_TO_FIT: c_ulong = 0x00200000; 190 pub const ISC_REQ_FORWARD_CREDENTIALS: c_ulong = 0x00400000; 191 pub const ISC_REQ_NO_INTEGRITY: c_ulong = 0x00800000; 192 pub const ISC_REQ_USE_HTTP_STYLE: c_ulong = 0x01000000; 193 pub const ISC_REQ_UNVERIFIED_TARGET_NAME: c_ulong = 0x20000000; 194 pub const ISC_REQ_CONFIDENTIALITY_ONLY: c_ulong = 0x40000000; 195 pub const ISC_RET_DELEGATE: c_ulong = 0x00000001; 196 pub const ISC_RET_MUTUAL_AUTH: c_ulong = 0x00000002; 197 pub const ISC_RET_REPLAY_DETECT: c_ulong = 0x00000004; 198 pub const ISC_RET_SEQUENCE_DETECT: c_ulong = 0x00000008; 199 pub const ISC_RET_CONFIDENTIALITY: c_ulong = 0x00000010; 200 pub const ISC_RET_USE_SESSION_KEY: c_ulong = 0x00000020; 201 pub const ISC_RET_USED_COLLECTED_CREDS: c_ulong = 0x00000040; 202 pub const ISC_RET_USED_SUPPLIED_CREDS: c_ulong = 0x00000080; 203 pub const ISC_RET_ALLOCATED_MEMORY: c_ulong = 0x00000100; 204 pub const ISC_RET_USED_DCE_STYLE: c_ulong = 0x00000200; 205 pub const ISC_RET_DATAGRAM: c_ulong = 0x00000400; 206 pub const ISC_RET_CONNECTION: c_ulong = 0x00000800; 207 pub const ISC_RET_INTERMEDIATE_RETURN: c_ulong = 0x00001000; 208 pub const ISC_RET_CALL_LEVEL: c_ulong = 0x00002000; 209 pub const ISC_RET_EXTENDED_ERROR: c_ulong = 0x00004000; 210 pub const ISC_RET_STREAM: c_ulong = 0x00008000; 211 pub const ISC_RET_INTEGRITY: c_ulong = 0x00010000; 212 pub const ISC_RET_IDENTIFY: c_ulong = 0x00020000; 213 pub const ISC_RET_NULL_SESSION: c_ulong = 0x00040000; 214 pub const ISC_RET_MANUAL_CRED_VALIDATION: c_ulong = 0x00080000; 215 pub const ISC_RET_RESERVED1: c_ulong = 0x00100000; 216 pub const ISC_RET_FRAGMENT_ONLY: c_ulong = 0x00200000; 217 pub const ISC_RET_FORWARD_CREDENTIALS: c_ulong = 0x00400000; 218 pub const ISC_RET_USED_HTTP_STYLE: c_ulong = 0x01000000; 219 pub const ISC_RET_NO_ADDITIONAL_TOKEN: c_ulong = 0x02000000; 220 pub const ISC_RET_REAUTHENTICATION: c_ulong = 0x08000000; 221 pub const ISC_RET_CONFIDENTIALITY_ONLY: c_ulong = 0x40000000; 222 pub const ASC_REQ_DELEGATE: c_ulong = 0x00000001; 223 pub const ASC_REQ_MUTUAL_AUTH: c_ulong = 0x00000002; 224 pub const ASC_REQ_REPLAY_DETECT: c_ulong = 0x00000004; 225 pub const ASC_REQ_SEQUENCE_DETECT: c_ulong = 0x00000008; 226 pub const ASC_REQ_CONFIDENTIALITY: c_ulong = 0x00000010; 227 pub const ASC_REQ_USE_SESSION_KEY: c_ulong = 0x00000020; 228 pub const ASC_REQ_SESSION_TICKET: c_ulong = 0x00000040; 229 pub const ASC_REQ_ALLOCATE_MEMORY: c_ulong = 0x00000100; 230 pub const ASC_REQ_USE_DCE_STYLE: c_ulong = 0x00000200; 231 pub const ASC_REQ_DATAGRAM: c_ulong = 0x00000400; 232 pub const ASC_REQ_CONNECTION: c_ulong = 0x00000800; 233 pub const ASC_REQ_CALL_LEVEL: c_ulong = 0x00001000; 234 pub const ASC_REQ_EXTENDED_ERROR: c_ulong = 0x00008000; 235 pub const ASC_REQ_STREAM: c_ulong = 0x00010000; 236 pub const ASC_REQ_INTEGRITY: c_ulong = 0x00020000; 237 pub const ASC_REQ_LICENSING: c_ulong = 0x00040000; 238 pub const ASC_REQ_IDENTIFY: c_ulong = 0x00080000; 239 pub const ASC_REQ_ALLOW_NULL_SESSION: c_ulong = 0x00100000; 240 pub const ASC_REQ_ALLOW_NON_USER_LOGONS: c_ulong = 0x00200000; 241 pub const ASC_REQ_ALLOW_CONTEXT_REPLAY: c_ulong = 0x00400000; 242 pub const ASC_REQ_FRAGMENT_TO_FIT: c_ulong = 0x00800000; 243 pub const ASC_REQ_FRAGMENT_SUPPLIED: c_ulong = 0x00002000; 244 pub const ASC_REQ_NO_TOKEN: c_ulong = 0x01000000; 245 pub const ASC_REQ_PROXY_BINDINGS: c_ulong = 0x04000000; 246 pub const ASC_REQ_ALLOW_MISSING_BINDINGS: c_ulong = 0x10000000; 247 pub const ASC_RET_DELEGATE: c_ulong = 0x00000001; 248 pub const ASC_RET_MUTUAL_AUTH: c_ulong = 0x00000002; 249 pub const ASC_RET_REPLAY_DETECT: c_ulong = 0x00000004; 250 pub const ASC_RET_SEQUENCE_DETECT: c_ulong = 0x00000008; 251 pub const ASC_RET_CONFIDENTIALITY: c_ulong = 0x00000010; 252 pub const ASC_RET_USE_SESSION_KEY: c_ulong = 0x00000020; 253 pub const ASC_RET_SESSION_TICKET: c_ulong = 0x00000040; 254 pub const ASC_RET_ALLOCATED_MEMORY: c_ulong = 0x00000100; 255 pub const ASC_RET_USED_DCE_STYLE: c_ulong = 0x00000200; 256 pub const ASC_RET_DATAGRAM: c_ulong = 0x00000400; 257 pub const ASC_RET_CONNECTION: c_ulong = 0x00000800; 258 pub const ASC_RET_CALL_LEVEL: c_ulong = 0x00002000; 259 pub const ASC_RET_THIRD_LEG_FAILED: c_ulong = 0x00004000; 260 pub const ASC_RET_EXTENDED_ERROR: c_ulong = 0x00008000; 261 pub const ASC_RET_STREAM: c_ulong = 0x00010000; 262 pub const ASC_RET_INTEGRITY: c_ulong = 0x00020000; 263 pub const ASC_RET_LICENSING: c_ulong = 0x00040000; 264 pub const ASC_RET_IDENTIFY: c_ulong = 0x00080000; 265 pub const ASC_RET_NULL_SESSION: c_ulong = 0x00100000; 266 pub const ASC_RET_ALLOW_NON_USER_LOGONS: c_ulong = 0x00200000; 267 pub const ASC_RET_ALLOW_CONTEXT_REPLAY: c_ulong = 0x00400000; 268 pub const ASC_RET_FRAGMENT_ONLY: c_ulong = 0x00800000; 269 pub const ASC_RET_NO_TOKEN: c_ulong = 0x01000000; 270 pub const ASC_RET_NO_ADDITIONAL_TOKEN: c_ulong = 0x02000000; 271 pub const SECPKG_CRED_ATTR_NAMES: c_ulong = 1; 272 pub const SECPKG_CRED_ATTR_SSI_PROVIDER: c_ulong = 2; 273 pub const SECPKG_CRED_ATTR_KDC_PROXY_SETTINGS: c_ulong = 3; 274 pub const SECPKG_CRED_ATTR_CERT: c_ulong = 4; 275 STRUCT!{struct SecPkgCredentials_NamesW { 276 sUserName: *mut SEC_WCHAR, 277 }} 278 pub type PSecPkgCredentials_NamesW = *mut SecPkgCredentials_NamesW; 279 STRUCT!{struct SecPkgCredentials_NamesA { 280 sUserName: *mut SEC_CHAR, 281 }} 282 pub type PSecPkgCredentials_NamesA = *mut SecPkgCredentials_NamesA; 283 STRUCT!{struct SecPkgCredentials_SSIProviderW { 284 sProviderName: *mut SEC_WCHAR, 285 ProviderInfoLength: c_ulong, 286 ProviderInfo: *mut c_char, 287 }} 288 pub type PSecPkgCredentials_SSIProviderW = *mut SecPkgCredentials_SSIProviderW; 289 STRUCT!{struct SecPkgCredentials_SSIProviderA { 290 sProviderName: *mut SEC_CHAR, 291 ProviderInfoLength: c_ulong, 292 ProviderInfo: *mut c_char, 293 }} 294 pub type PSecPkgCredentials_SSIProviderA = *mut SecPkgCredentials_SSIProviderA; 295 pub const KDC_PROXY_SETTINGS_V1: ULONG = 1; 296 pub const KDC_PROXY_SETTINGS_FLAGS_FORCEPROXY: ULONG = 0x1; 297 STRUCT!{struct SecPkgCredentials_KdcProxySettingsW { 298 Version: ULONG, 299 Flags: ULONG, 300 ProxyServerOffset: USHORT, 301 ProxyServerLength: USHORT, 302 ClientTlsCredOffset: USHORT, 303 ClientTlsCredLength: USHORT, 304 }} 305 pub type PSecPkgCredentials_KdcProxySettingsW = *mut SecPkgCredentials_KdcProxySettingsW; 306 STRUCT!{struct SecPkgCredentials_Cert { 307 EncodedCertSize: c_ulong, 308 EncodedCert: *mut c_uchar, 309 }} 310 pub type PSecPkgCredentials_Cert = *mut SecPkgCredentials_Cert; 311 pub const SECPKG_ATTR_SIZES: c_ulong = 0; 312 pub const SECPKG_ATTR_NAMES: c_ulong = 1; 313 pub const SECPKG_ATTR_LIFESPAN: c_ulong = 2; 314 pub const SECPKG_ATTR_DCE_INFO: c_ulong = 3; 315 pub const SECPKG_ATTR_STREAM_SIZES: c_ulong = 4; 316 pub const SECPKG_ATTR_KEY_INFO: c_ulong = 5; 317 pub const SECPKG_ATTR_AUTHORITY: c_ulong = 6; 318 pub const SECPKG_ATTR_PROTO_INFO: c_ulong = 7; 319 pub const SECPKG_ATTR_PASSWORD_EXPIRY: c_ulong = 8; 320 pub const SECPKG_ATTR_SESSION_KEY: c_ulong = 9; 321 pub const SECPKG_ATTR_PACKAGE_INFO: c_ulong = 10; 322 pub const SECPKG_ATTR_USER_FLAGS: c_ulong = 11; 323 pub const SECPKG_ATTR_NEGOTIATION_INFO: c_ulong = 12; 324 pub const SECPKG_ATTR_NATIVE_NAMES: c_ulong = 13; 325 pub const SECPKG_ATTR_FLAGS: c_ulong = 14; 326 pub const SECPKG_ATTR_USE_VALIDATED: c_ulong = 15; 327 pub const SECPKG_ATTR_CREDENTIAL_NAME: c_ulong = 16; 328 pub const SECPKG_ATTR_TARGET_INFORMATION: c_ulong = 17; 329 pub const SECPKG_ATTR_ACCESS_TOKEN: c_ulong = 18; 330 pub const SECPKG_ATTR_TARGET: c_ulong = 19; 331 pub const SECPKG_ATTR_AUTHENTICATION_ID: c_ulong = 20; 332 pub const SECPKG_ATTR_LOGOFF_TIME: c_ulong = 21; 333 pub const SECPKG_ATTR_NEGO_KEYS: c_ulong = 22; 334 pub const SECPKG_ATTR_PROMPTING_NEEDED: c_ulong = 24; 335 pub const SECPKG_ATTR_UNIQUE_BINDINGS: c_ulong = 25; 336 pub const SECPKG_ATTR_ENDPOINT_BINDINGS: c_ulong = 26; 337 pub const SECPKG_ATTR_CLIENT_SPECIFIED_TARGET: c_ulong = 27; 338 pub const SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS: c_ulong = 30; 339 pub const SECPKG_ATTR_NEGO_PKG_INFO: c_ulong = 31; 340 pub const SECPKG_ATTR_NEGO_STATUS: c_ulong = 32; 341 pub const SECPKG_ATTR_CONTEXT_DELETED: c_ulong = 33; 342 pub const SECPKG_ATTR_DTLS_MTU: c_ulong = 34; 343 pub const SECPKG_ATTR_DATAGRAM_SIZES: c_ulong = SECPKG_ATTR_STREAM_SIZES; 344 pub const SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES: c_ulong = 128; 345 pub const SECPKG_ATTR_APPLICATION_PROTOCOL: c_ulong = 35; 346 STRUCT!{struct SecPkgContext_SubjectAttributes { 347 AttributeInfo: *mut c_void, 348 }} 349 pub type PSecPkgContext_SubjectAttributes = *mut SecPkgContext_SubjectAttributes; 350 pub const SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS: c_ulong = 0x1; 351 pub const SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM: c_ulong = 0x2; 352 ENUM!{enum SECPKG_CRED_CLASS { 353 SecPkgCredClass_None = 0, 354 SecPkgCredClass_Ephemeral = 10, 355 SecPkgCredClass_PersistedGeneric = 20, 356 SecPkgCredClass_PersistedSpecific = 30, 357 SecPkgCredClass_Explicit = 40, 358 }} 359 pub type PSECPKG_CRED_CLASS = *mut SECPKG_CRED_CLASS; 360 STRUCT!{struct SecPkgContext_CredInfo { 361 CredClass: SECPKG_CRED_CLASS, 362 IsPromptingNeeded: c_ulong, 363 }} 364 pub type PSecPkgContext_CredInfo = *mut SecPkgContext_CredInfo; 365 STRUCT!{struct SecPkgContext_NegoPackageInfo { 366 PackageMask: c_ulong, 367 }} 368 pub type PSecPkgContext_NegoPackageInfo = *mut SecPkgContext_NegoPackageInfo; 369 STRUCT!{struct SecPkgContext_NegoStatus { 370 LastStatus: c_ulong, 371 }} 372 pub type PSecPkgContext_NegoStatus = *mut SecPkgContext_NegoStatus; 373 STRUCT!{struct SecPkgContext_Sizes { 374 cbMaxToken: c_ulong, 375 cbMaxSignature: c_ulong, 376 cbBlockSize: c_ulong, 377 cbSecurityTrailer: c_ulong, 378 }} 379 pub type PSecPkgContext_Sizes = *mut SecPkgContext_Sizes; 380 STRUCT!{struct SecPkgContext_StreamSizes { 381 cbHeader: c_ulong, 382 cbTrailer: c_ulong, 383 cbMaximumMessage: c_ulong, 384 cBuffers: c_ulong, 385 cbBlockSize: c_ulong, 386 }} 387 pub type PSecPkgContext_StreamSizes = *mut SecPkgContext_StreamSizes; 388 pub type SecPkgContext_DatagramSizes = SecPkgContext_StreamSizes; 389 pub type PSecPkgContext_DatagramSizes = PSecPkgContext_StreamSizes; 390 STRUCT!{struct SecPkgContext_NamesW { 391 sUserName: *mut SEC_WCHAR, 392 }} 393 pub type PSecPkgContext_NamesW = *mut SecPkgContext_NamesW; 394 ENUM!{enum SECPKG_ATTR_LCT_STATUS { 395 SecPkgAttrLastClientTokenYes, 396 SecPkgAttrLastClientTokenNo, 397 SecPkgAttrLastClientTokenMaybe, 398 }} 399 pub type PSECPKG_ATTR_LCT_STATUS = *mut SECPKG_ATTR_LCT_STATUS; 400 STRUCT!{struct SecPkgContext_LastClientTokenStatus { 401 LastClientTokenStatus: SECPKG_ATTR_LCT_STATUS, 402 }} 403 pub type PSecPkgContext_LastClientTokenStatus = *mut SecPkgContext_LastClientTokenStatus; 404 STRUCT!{struct SecPkgContext_NamesA { 405 sUserName: *mut SEC_CHAR, 406 }} 407 pub type PSecPkgContext_NamesA = *mut SecPkgContext_NamesA; 408 STRUCT!{struct SecPkgContext_Lifespan { 409 tsStart: TimeStamp, 410 tsExpiry: TimeStamp, 411 }} 412 pub type PSecPkgContext_Lifespan = *mut SecPkgContext_Lifespan; 413 STRUCT!{struct SecPkgContext_DceInfo { 414 AuthzSvc: c_ulong, 415 pPac: *mut c_void, 416 }} 417 pub type PSecPkgContext_DceInfo = *mut SecPkgContext_DceInfo; 418 STRUCT!{struct SecPkgContext_KeyInfoA { 419 sSignatureAlgorithmName: *mut SEC_CHAR, 420 sEncryptAlgorithmName: *mut SEC_CHAR, 421 KeySize: c_ulong, 422 SignatureAlgorithm: c_ulong, 423 EncryptAlgorithm: c_ulong, 424 }} 425 pub type PSecPkgContext_KeyInfoA = *mut SecPkgContext_KeyInfoA; 426 STRUCT!{struct SecPkgContext_KeyInfoW { 427 sSignatureAlgorithmName: *mut SEC_WCHAR, 428 sEncryptAlgorithmName: *mut SEC_WCHAR, 429 KeySize: c_ulong, 430 SignatureAlgorithm: c_ulong, 431 EncryptAlgorithm: c_ulong, 432 }} 433 pub type PSecPkgContext_KeyInfoW = *mut SecPkgContext_KeyInfoW; 434 STRUCT!{struct SecPkgContext_AuthorityA { 435 sAuthorityName: *mut SEC_CHAR, 436 }} 437 pub type PSecPkgContext_AuthorityA = *mut SecPkgContext_AuthorityA; 438 STRUCT!{struct SecPkgContext_AuthorityW { 439 sAuthorityName: *mut SEC_WCHAR, 440 }} 441 pub type PSecPkgContext_AuthorityW = *mut SecPkgContext_AuthorityW; 442 STRUCT!{struct SecPkgContext_ProtoInfoA { 443 sProtocolName: *mut SEC_CHAR, 444 majorVersion: c_ulong, 445 minorVersion: c_ulong, 446 }} 447 pub type PSecPkgContext_ProtoInfoA = *mut SecPkgContext_ProtoInfoA; 448 STRUCT!{struct SecPkgContext_ProtoInfoW { 449 sProtocolName: *mut SEC_WCHAR, 450 majorVersion: c_ulong, 451 minorVersion: c_ulong, 452 }} 453 pub type PSecPkgContext_ProtoInfoW = *mut SecPkgContext_ProtoInfoW; 454 STRUCT!{struct SecPkgContext_PasswordExpiry { 455 tsPasswordExpires: TimeStamp, 456 }} 457 pub type PSecPkgContext_PasswordExpiry = *mut SecPkgContext_PasswordExpiry; 458 STRUCT!{struct SecPkgContext_LogoffTime { 459 tsLogoffTime: TimeStamp, 460 }} 461 pub type PSecPkgContext_LogoffTime = *mut SecPkgContext_LogoffTime; 462 STRUCT!{struct SecPkgContext_SessionKey { 463 SessionKeyLength: c_ulong, 464 SessionKey: *mut c_uchar, 465 }} 466 pub type PSecPkgContext_SessionKey = *mut SecPkgContext_SessionKey; 467 STRUCT!{struct SecPkgContext_NegoKeys { 468 KeyType: c_ulong, 469 KeyLength: c_ushort, 470 KeyValue: *mut c_uchar, 471 VerifyKeyType: c_ulong, 472 VerifyKeyLength: c_ushort, 473 VerifyKeyValue: *mut c_uchar, 474 }} 475 pub type PSecPkgContext_NegoKeys = *mut SecPkgContext_NegoKeys; 476 STRUCT!{struct SecPkgContext_PackageInfoW { 477 PackageInfo: PSecPkgInfoW, 478 }} 479 pub type PSecPkgContext_PackageInfoW = *mut SecPkgContext_PackageInfoW; 480 STRUCT!{struct SecPkgContext_PackageInfoA { 481 PackageInfo: PSecPkgInfoA, 482 }} 483 pub type PSecPkgContext_PackageInfoA = *mut SecPkgContext_PackageInfoA; 484 STRUCT!{struct SecPkgContext_UserFlags { 485 UserFlags: c_ulong, 486 }} 487 pub type PSecPkgContext_UserFlags = *mut SecPkgContext_UserFlags; 488 STRUCT!{struct SecPkgContext_Flags { 489 Flags: c_ulong, 490 }} 491 pub type PSecPkgContext_Flags = *mut SecPkgContext_Flags; 492 STRUCT!{struct SecPkgContext_NegotiationInfoA { 493 PackageInfo: PSecPkgInfoA, 494 NegotiationState: c_ulong, 495 }} 496 pub type PSecPkgContext_NegotiationInfoA = *mut SecPkgContext_NegotiationInfoA; 497 STRUCT!{struct SecPkgContext_NegotiationInfoW { 498 PackageInfo: PSecPkgInfoW, 499 NegotiationState: c_ulong, 500 }} 501 pub type PSecPkgContext_NegotiationInfoW = *mut SecPkgContext_NegotiationInfoW; 502 pub const SECPKG_NEGOTIATION_COMPLETE: c_ulong = 0; 503 pub const SECPKG_NEGOTIATION_OPTIMISTIC: c_ulong = 1; 504 pub const SECPKG_NEGOTIATION_IN_PROGRESS: c_ulong = 2; 505 pub const SECPKG_NEGOTIATION_DIRECT: c_ulong = 3; 506 pub const SECPKG_NEGOTIATION_TRY_MULTICRED: c_ulong = 4; 507 STRUCT!{struct SecPkgContext_NativeNamesW { 508 sClientName: SEC_WCHAR, 509 sServerName: SEC_WCHAR, 510 }} 511 pub type PSecPkgContext_NativeNamesW = *mut SecPkgContext_NativeNamesW; 512 STRUCT!{struct SecPkgContext_NativeNamesA { 513 sClientName: SEC_CHAR, 514 sServerName: SEC_CHAR, 515 }} 516 pub type PSecPkgContext_NativeNamesA = *mut SecPkgContext_NativeNamesA; 517 STRUCT!{struct SecPkgContext_CredentialNameW { 518 CredentialType: c_ulong, 519 sCredentialName: *mut SEC_WCHAR, 520 }} 521 pub type PSecPkgContext_CredentialNameW = *mut SecPkgContext_CredentialNameW; 522 STRUCT!{struct SecPkgContext_CredentialNameA { 523 CredentialType: c_ulong, 524 sCredentialName: *mut SEC_CHAR, 525 }} 526 pub type PSecPkgContext_CredentialNameA = *mut SecPkgContext_CredentialNameA; 527 STRUCT!{struct SecPkgContext_AccessToken { 528 AccessToken: *mut c_void, 529 }} 530 pub type PSecPkgContext_AccessToken = *mut SecPkgContext_AccessToken; 531 STRUCT!{struct SecPkgContext_TargetInformation { 532 MarshalledTargetInfoLength: c_ulong, 533 MarshalledTargetInfo: *mut c_uchar, 534 }} 535 pub type PSecPkgContext_TargetInformation = *mut SecPkgContext_TargetInformation; 536 STRUCT!{struct SecPkgContext_AuthzID { 537 AuthzIDLength: c_ulong, 538 AuthzID: *mut c_char, 539 }} 540 pub type PSecPkgContext_AuthzID = *mut SecPkgContext_AuthzID; 541 STRUCT!{struct SecPkgContext_Target { 542 TargetLength: c_ulong, 543 Target: *mut c_char, 544 }} 545 pub type PSecPkgContext_Target = *mut SecPkgContext_Target; 546 STRUCT!{struct SecPkgContext_ClientSpecifiedTarget { 547 sTargetName: *mut SEC_WCHAR, 548 }} 549 pub type PSecPkgContext_ClientSpecifiedTarget = *mut SecPkgContext_ClientSpecifiedTarget; 550 STRUCT!{struct SecPkgContext_Bindings { 551 BindingsLength: c_ulong, 552 Bindings: *mut SEC_CHANNEL_BINDINGS, 553 }} 554 pub type PSecPkgContext_Bindings = *mut SecPkgContext_Bindings; 555 ENUM!{enum SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS { 556 SecApplicationProtocolNegotiationStatus_None, 557 SecApplicationProtocolNegotiationStatus_Success, 558 SecApplicationProtocolNegotiationStatus_SelectedClientOnly, 559 }} 560 pub type PSEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS = 561 *mut SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS; 562 pub const MAX_PROTOCOL_ID_SIZE: usize = 0xff; 563 STRUCT!{struct SecPkgContext_ApplicationProtocol { 564 ProtoNegoStatus: SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS, 565 ProtoNegoExt: SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT, 566 ProtocolIdSize: c_uchar, 567 ProtocolId: [c_uchar; MAX_PROTOCOL_ID_SIZE], 568 }} 569 pub type PSecPkgContext_ApplicationProtocol = *mut SecPkgContext_ApplicationProtocol; 570 FN!{stdcall SEC_GET_KEY_FN( 571 Arg: *mut c_void, 572 Principal: *mut c_void, 573 KeyVer: c_ulong, 574 Key: *mut *mut c_void, 575 Status: *mut SECURITY_STATUS, 576 ) -> ()} 577 pub const SECPKG_CONTEXT_EXPORT_RESET_NEW: c_ulong = 0x00000001; 578 pub const SECPKG_CONTEXT_EXPORT_DELETE_OLD: c_ulong = 0x00000002; 579 pub const SECPKG_CONTEXT_EXPORT_TO_KERNEL: c_ulong = 0x00000004; 580 extern "system" { AcquireCredentialsHandleW( pszPrincipal: LPWSTR, pszPackage: LPWSTR, fCredentialUse: c_ulong, pvLogonId: *mut c_void, pAuthData: *mut c_void, pGetKeyFn: SEC_GET_KEY_FN, pvGetKeyArgument: *mut c_void, phCredential: PCredHandle, ptsExpiry: PTimeStamp, ) -> SECURITY_STATUS581 pub fn AcquireCredentialsHandleW( 582 pszPrincipal: LPWSTR, 583 pszPackage: LPWSTR, 584 fCredentialUse: c_ulong, 585 pvLogonId: *mut c_void, 586 pAuthData: *mut c_void, 587 pGetKeyFn: SEC_GET_KEY_FN, 588 pvGetKeyArgument: *mut c_void, 589 phCredential: PCredHandle, 590 ptsExpiry: PTimeStamp, 591 ) -> SECURITY_STATUS; 592 } 593 FN!{stdcall ACQUIRE_CREDENTIALS_HANDLE_FN_W( 594 *mut SEC_WCHAR, 595 *mut SEC_WCHAR, 596 c_ulong, 597 *mut c_void, 598 *mut c_void, 599 SEC_GET_KEY_FN, 600 *mut c_void, 601 PCredHandle, 602 PTimeStamp, 603 ) -> SECURITY_STATUS} 604 extern "system" { AcquireCredentialsHandleA( pszPrincipal: LPSTR, pszPackage: LPSTR, fCredentialUse: c_ulong, pvLogonId: *mut c_void, pAuthData: *mut c_void, pGetKeyFn: SEC_GET_KEY_FN, pvGetKeyArgument: *mut c_void, phCredential: PCredHandle, ptsExpiry: PTimeStamp, ) -> SECURITY_STATUS605 pub fn AcquireCredentialsHandleA( 606 pszPrincipal: LPSTR, 607 pszPackage: LPSTR, 608 fCredentialUse: c_ulong, 609 pvLogonId: *mut c_void, 610 pAuthData: *mut c_void, 611 pGetKeyFn: SEC_GET_KEY_FN, 612 pvGetKeyArgument: *mut c_void, 613 phCredential: PCredHandle, 614 ptsExpiry: PTimeStamp, 615 ) -> SECURITY_STATUS; 616 } 617 FN!{stdcall ACQUIRE_CREDENTIALS_HANDLE_FN_A( 618 *mut SEC_CHAR, 619 *mut SEC_CHAR, 620 c_ulong, 621 *mut c_void, 622 *mut c_void, 623 SEC_GET_KEY_FN, 624 *mut c_void, 625 PCredHandle, 626 PTimeStamp, 627 ) -> SECURITY_STATUS} 628 extern "system" { FreeCredentialsHandle( phCredential: PCredHandle, ) -> SECURITY_STATUS629 pub fn FreeCredentialsHandle( 630 phCredential: PCredHandle, 631 ) -> SECURITY_STATUS; 632 } 633 FN!{stdcall FREE_CREDENTIALS_HANDLE_FN( 634 PCredHandle, 635 ) -> SECURITY_STATUS} 636 extern "system" { AddCredentialsW( hCredentials: PCredHandle, pszPrincipal: LPWSTR, pszPackage: LPWSTR, fCredentialUse: c_ulong, pAuthData: *mut c_void, pGetKeyFn: SEC_GET_KEY_FN, pvGetKeyArgument: *mut c_void, ptsExpiry: PTimeStamp, ) -> SECURITY_STATUS637 pub fn AddCredentialsW( 638 hCredentials: PCredHandle, 639 pszPrincipal: LPWSTR, 640 pszPackage: LPWSTR, 641 fCredentialUse: c_ulong, 642 pAuthData: *mut c_void, 643 pGetKeyFn: SEC_GET_KEY_FN, 644 pvGetKeyArgument: *mut c_void, 645 ptsExpiry: PTimeStamp, 646 ) -> SECURITY_STATUS; 647 } 648 FN!{stdcall ADD_CREDENTIALS_FN_W( 649 PCredHandle, 650 *mut SEC_WCHAR, 651 *mut SEC_WCHAR, 652 c_ulong, 653 *mut c_void, 654 SEC_GET_KEY_FN, 655 *mut c_void, 656 PTimeStamp, 657 ) -> SECURITY_STATUS} 658 extern "system" { AddCredentialsA( hCredentials: PCredHandle, pszPrincipal: LPSTR, pszPackage: LPSTR, fCredentialUse: c_ulong, pAuthData: *mut c_void, pGetKeyFn: SEC_GET_KEY_FN, pvGetKeyArgument: *mut c_void, ptsExpiry: PTimeStamp, ) -> SECURITY_STATUS659 pub fn AddCredentialsA( 660 hCredentials: PCredHandle, 661 pszPrincipal: LPSTR, 662 pszPackage: LPSTR, 663 fCredentialUse: c_ulong, 664 pAuthData: *mut c_void, 665 pGetKeyFn: SEC_GET_KEY_FN, 666 pvGetKeyArgument: *mut c_void, 667 ptsExpiry: PTimeStamp, 668 ) -> SECURITY_STATUS; 669 } 670 FN!{stdcall ADD_CREDENTIALS_FN_A( 671 PCredHandle, 672 *mut SEC_CHAR, 673 *mut SEC_CHAR, 674 c_ulong, 675 *mut c_void, 676 SEC_GET_KEY_FN, 677 *mut c_void, 678 PTimeStamp, 679 ) -> SECURITY_STATUS} 680 extern "system" { 681 // pub fn spiCreateAsyncContext(); 682 // pub fn SspiFreeAsyncContext(); 683 // pub fn SspiReinitAsyncContext(); 684 // pub fn SspiSetAsyncNotifyCallback(); 685 // pub fn SspiAsyncContextRequiresNotify(); 686 // pub fn SspiGetAsyncCallStatus(); 687 // pub fn SspiAcquireCredentialsHandleAsyncW(); 688 // pub fn SspiAcquireCredentialsHandleAsyncA(); 689 // pub fn SspiInitializeSecurityContextAsyncW(); 690 // pub fn SspiInitializeSecurityContextAsyncA(); 691 // pub fn SspiAcceptSecurityContextAsync(); 692 // pub fn SspiFreeCredentialsHandleAsync(); 693 // pub fn SspiDeleteSecurityContextAsync(); ChangeAccountPasswordW( pszPackageName: *mut SEC_WCHAR, pszDomainName: *mut SEC_WCHAR, pszAccountName: *mut SEC_WCHAR, pszOldPassword: *mut SEC_WCHAR, pszNewPassword: *mut SEC_WCHAR, bImpersonating: BOOLEAN, dwReserved: c_ulong, pOutput: PSecBufferDesc, ) -> SECURITY_STATUS694 pub fn ChangeAccountPasswordW( 695 pszPackageName: *mut SEC_WCHAR, 696 pszDomainName: *mut SEC_WCHAR, 697 pszAccountName: *mut SEC_WCHAR, 698 pszOldPassword: *mut SEC_WCHAR, 699 pszNewPassword: *mut SEC_WCHAR, 700 bImpersonating: BOOLEAN, 701 dwReserved: c_ulong, 702 pOutput: PSecBufferDesc, 703 ) -> SECURITY_STATUS; 704 } 705 FN!{stdcall CHANGE_PASSWORD_FN_W( 706 *mut SEC_WCHAR, 707 *mut SEC_WCHAR, 708 *mut SEC_WCHAR, 709 *mut SEC_WCHAR, 710 *mut SEC_WCHAR, 711 BOOLEAN, 712 c_ulong, 713 PSecBufferDesc, 714 ) -> SECURITY_STATUS} 715 extern "system" { ChangeAccountPasswordA( pszPackageName: *mut SEC_CHAR, pszDomainName: *mut SEC_CHAR, pszAccountName: *mut SEC_CHAR, pszOldPassword: *mut SEC_CHAR, pszNewPassword: *mut SEC_CHAR, bImpersonating: BOOLEAN, dwReserved: c_ulong, pOutput: PSecBufferDesc, ) -> SECURITY_STATUS716 pub fn ChangeAccountPasswordA( 717 pszPackageName: *mut SEC_CHAR, 718 pszDomainName: *mut SEC_CHAR, 719 pszAccountName: *mut SEC_CHAR, 720 pszOldPassword: *mut SEC_CHAR, 721 pszNewPassword: *mut SEC_CHAR, 722 bImpersonating: BOOLEAN, 723 dwReserved: c_ulong, 724 pOutput: PSecBufferDesc, 725 ) -> SECURITY_STATUS; 726 } 727 FN!{stdcall CHANGE_PASSWORD_FN_A( 728 *mut SEC_CHAR, 729 *mut SEC_CHAR, 730 *mut SEC_CHAR, 731 *mut SEC_CHAR, 732 *mut SEC_CHAR, 733 BOOLEAN, 734 c_ulong, 735 PSecBufferDesc, 736 ) -> SECURITY_STATUS} 737 extern "system" { InitializeSecurityContextW( phCredential: PCredHandle, phContext: PCtxtHandle, pszTargetName: *mut SEC_WCHAR, fContextReq: c_ulong, Reserved1: c_ulong, TargetDataRep: c_ulong, pInput: PSecBufferDesc, Reserved2: c_ulong, phNewContext: PCtxtHandle, pOutput: PSecBufferDesc, pfContextAttr: *mut c_ulong, ptsExpiry: PTimeStamp, ) -> SECURITY_STATUS738 pub fn InitializeSecurityContextW( 739 phCredential: PCredHandle, 740 phContext: PCtxtHandle, 741 pszTargetName: *mut SEC_WCHAR, 742 fContextReq: c_ulong, 743 Reserved1: c_ulong, 744 TargetDataRep: c_ulong, 745 pInput: PSecBufferDesc, 746 Reserved2: c_ulong, 747 phNewContext: PCtxtHandle, 748 pOutput: PSecBufferDesc, 749 pfContextAttr: *mut c_ulong, 750 ptsExpiry: PTimeStamp, 751 ) -> SECURITY_STATUS; 752 } 753 // INITIALIZE_SECURITY_CONTEXT_FN_W 754 extern "system" { InitializeSecurityContextA( phCredential: PCredHandle, phContext: PCtxtHandle, pszTargetName: *mut SEC_CHAR, fContextReq: c_ulong, Reserved1: c_ulong, TargetDataRep: c_ulong, pInput: PSecBufferDesc, Reserved2: c_ulong, phNewContext: PCtxtHandle, pOutput: PSecBufferDesc, pfContextAttr: *mut c_ulong, ptsExpiry: PTimeStamp, ) -> SECURITY_STATUS755 pub fn InitializeSecurityContextA( 756 phCredential: PCredHandle, 757 phContext: PCtxtHandle, 758 pszTargetName: *mut SEC_CHAR, 759 fContextReq: c_ulong, 760 Reserved1: c_ulong, 761 TargetDataRep: c_ulong, 762 pInput: PSecBufferDesc, 763 Reserved2: c_ulong, 764 phNewContext: PCtxtHandle, 765 pOutput: PSecBufferDesc, 766 pfContextAttr: *mut c_ulong, 767 ptsExpiry: PTimeStamp, 768 ) -> SECURITY_STATUS; AcceptSecurityContext( phCredential: PCredHandle, phContext: PCtxtHandle, pInput: PSecBufferDesc, fContextReq: c_ulong, TargetDataRep: c_ulong, phNewContext: PCtxtHandle, pOutput: PSecBufferDesc, pfContextAttr: *mut c_ulong, ptsExpiry: PTimeStamp, ) -> SECURITY_STATUS769 pub fn AcceptSecurityContext( 770 phCredential: PCredHandle, 771 phContext: PCtxtHandle, 772 pInput: PSecBufferDesc, 773 fContextReq: c_ulong, 774 TargetDataRep: c_ulong, 775 phNewContext: PCtxtHandle, 776 pOutput: PSecBufferDesc, 777 pfContextAttr: *mut c_ulong, 778 ptsExpiry: PTimeStamp, 779 ) -> SECURITY_STATUS; CompleteAuthToken( phContext: PCtxtHandle, pToken: PSecBufferDesc, ) -> SECURITY_STATUS780 pub fn CompleteAuthToken( 781 phContext: PCtxtHandle, 782 pToken: PSecBufferDesc, 783 ) -> SECURITY_STATUS; ImpersonateSecurityContext( phContext: PCtxtHandle, ) -> SECURITY_STATUS784 pub fn ImpersonateSecurityContext( 785 phContext: PCtxtHandle, 786 ) -> SECURITY_STATUS; RevertSecurityContext( phContext: PCtxtHandle, ) -> SECURITY_STATUS787 pub fn RevertSecurityContext( 788 phContext: PCtxtHandle, 789 ) -> SECURITY_STATUS; QuerySecurityContextToken( phContext: PCtxtHandle, Token: *mut *mut c_void, ) -> SECURITY_STATUS790 pub fn QuerySecurityContextToken( 791 phContext: PCtxtHandle, 792 Token: *mut *mut c_void, 793 ) -> SECURITY_STATUS; DeleteSecurityContext( phContext: PCtxtHandle, ) -> SECURITY_STATUS794 pub fn DeleteSecurityContext( 795 phContext: PCtxtHandle, 796 ) -> SECURITY_STATUS; ApplyControlToken( phContext: PCtxtHandle, pInput: PSecBufferDesc, ) -> SECURITY_STATUS797 pub fn ApplyControlToken( 798 phContext: PCtxtHandle, 799 pInput: PSecBufferDesc, 800 ) -> SECURITY_STATUS; QueryContextAttributesW( phContext: PCtxtHandle, ulAttribute: c_ulong, pBuffer: *mut c_void, ) -> SECURITY_STATUS801 pub fn QueryContextAttributesW( 802 phContext: PCtxtHandle, 803 ulAttribute: c_ulong, 804 pBuffer: *mut c_void, 805 ) -> SECURITY_STATUS; 806 // pub fn QueryContextAttributesExW(); QueryContextAttributesA( phContext: PCtxtHandle, ulAttribute: c_ulong, pBuffer: *mut c_void, ) -> SECURITY_STATUS807 pub fn QueryContextAttributesA( 808 phContext: PCtxtHandle, 809 ulAttribute: c_ulong, 810 pBuffer: *mut c_void, 811 ) -> SECURITY_STATUS; 812 // pub fn QueryContextAttributesExA(); SetContextAttributesW( phContext: PCtxtHandle, ulAttribute: c_ulong, pBuffer: *mut c_void, cbBuffer: c_ulong, ) -> SECURITY_STATUS813 pub fn SetContextAttributesW( 814 phContext: PCtxtHandle, 815 ulAttribute: c_ulong, 816 pBuffer: *mut c_void, 817 cbBuffer: c_ulong, 818 ) -> SECURITY_STATUS; SetContextAttributesA( phContext: PCtxtHandle, ulAttribute: c_ulong, pBuffer: *mut c_void, cbBuffer: c_ulong, ) -> SECURITY_STATUS819 pub fn SetContextAttributesA( 820 phContext: PCtxtHandle, 821 ulAttribute: c_ulong, 822 pBuffer: *mut c_void, 823 cbBuffer: c_ulong, 824 ) -> SECURITY_STATUS; QueryCredentialsAttributesW( phCredential: PCredHandle, ulAttribute: c_ulong, pBuffer: *mut c_void, ) -> SECURITY_STATUS825 pub fn QueryCredentialsAttributesW( 826 phCredential: PCredHandle, 827 ulAttribute: c_ulong, 828 pBuffer: *mut c_void, 829 ) -> SECURITY_STATUS; 830 // pub fn QueryCredentialsAttributesExW(); QueryCredentialsAttributesA( phCredential: PCredHandle, ulAttribute: c_ulong, pBuffer: *mut c_void, ) -> SECURITY_STATUS831 pub fn QueryCredentialsAttributesA( 832 phCredential: PCredHandle, 833 ulAttribute: c_ulong, 834 pBuffer: *mut c_void, 835 ) -> SECURITY_STATUS; 836 // pub fn QueryCredentialsAttributesExA(); SetCredentialsAttributesW( phCredential: PCredHandle, ulAttribute: c_ulong, pBuffer: *mut c_void, cbBuffer: c_ulong, ) -> SECURITY_STATUS837 pub fn SetCredentialsAttributesW( 838 phCredential: PCredHandle, 839 ulAttribute: c_ulong, 840 pBuffer: *mut c_void, 841 cbBuffer: c_ulong, 842 ) -> SECURITY_STATUS; SetCredentialsAttributesA( phCredential: PCredHandle, ulAttribute: c_ulong, pBuffer: *mut c_void, cbBuffer: c_ulong, ) -> SECURITY_STATUS843 pub fn SetCredentialsAttributesA( 844 phCredential: PCredHandle, 845 ulAttribute: c_ulong, 846 pBuffer: *mut c_void, 847 cbBuffer: c_ulong, 848 ) -> SECURITY_STATUS; FreeContextBuffer( pvContextBuffer: PVOID, ) -> SECURITY_STATUS849 pub fn FreeContextBuffer( 850 pvContextBuffer: PVOID, 851 ) -> SECURITY_STATUS; MakeSignature( phContext: PCtxtHandle, fQOP: c_ulong, pMessage: PSecBufferDesc, MessageSeqNo: c_ulong, ) -> SECURITY_STATUS852 pub fn MakeSignature( 853 phContext: PCtxtHandle, 854 fQOP: c_ulong, 855 pMessage: PSecBufferDesc, 856 MessageSeqNo: c_ulong, 857 ) -> SECURITY_STATUS; VerifySignature( phContext: PCtxtHandle, pMessage: PSecBufferDesc, MessageSeqNo: c_ulong, pfQOP: *mut c_ulong, ) -> SECURITY_STATUS858 pub fn VerifySignature( 859 phContext: PCtxtHandle, 860 pMessage: PSecBufferDesc, 861 MessageSeqNo: c_ulong, 862 pfQOP: *mut c_ulong, 863 ) -> SECURITY_STATUS; EncryptMessage( phContext: PCtxtHandle, fQOP: c_ulong, pMessage: PSecBufferDesc, MessageSeqNo: c_ulong, ) -> SECURITY_STATUS864 pub fn EncryptMessage( 865 phContext: PCtxtHandle, 866 fQOP: c_ulong, 867 pMessage: PSecBufferDesc, 868 MessageSeqNo: c_ulong, 869 ) -> SECURITY_STATUS; DecryptMessage( phContext: PCtxtHandle, pMessage: PSecBufferDesc, MessageSeqNo: c_ulong, pfQOP: *mut c_ulong, ) -> SECURITY_STATUS870 pub fn DecryptMessage( 871 phContext: PCtxtHandle, 872 pMessage: PSecBufferDesc, 873 MessageSeqNo: c_ulong, 874 pfQOP: *mut c_ulong, 875 ) -> SECURITY_STATUS; EnumerateSecurityPackagesW( pcPackages: *mut c_ulong, ppPackageInfo: *mut PSecPkgInfoW, ) -> SECURITY_STATUS876 pub fn EnumerateSecurityPackagesW( 877 pcPackages: *mut c_ulong, 878 ppPackageInfo: *mut PSecPkgInfoW, 879 ) -> SECURITY_STATUS; EnumerateSecurityPackagesA( pcPackages: *mut c_ulong, ppPackageInfo: *mut PSecPkgInfoA, ) -> SECURITY_STATUS880 pub fn EnumerateSecurityPackagesA( 881 pcPackages: *mut c_ulong, 882 ppPackageInfo: *mut PSecPkgInfoA, 883 ) -> SECURITY_STATUS; QuerySecurityPackageInfoW( pszPackageName: LPWSTR, ppPackageInfo: *mut PSecPkgInfoW, ) -> SECURITY_STATUS884 pub fn QuerySecurityPackageInfoW( 885 pszPackageName: LPWSTR, 886 ppPackageInfo: *mut PSecPkgInfoW, 887 ) -> SECURITY_STATUS; QuerySecurityPackageInfoA( pszPackageName: LPSTR, ppPackageInfo: *mut PSecPkgInfoA, ) -> SECURITY_STATUS888 pub fn QuerySecurityPackageInfoA( 889 pszPackageName: LPSTR, 890 ppPackageInfo: *mut PSecPkgInfoA, 891 ) -> SECURITY_STATUS; 892 } 893 ENUM!{enum SecDelegationType { 894 SecFull, 895 SecService, 896 SecTree, 897 SecDirectory, 898 SecObject, 899 }} 900 pub type PSecDelegationType = *mut SecDelegationType; 901 extern "system" { 902 // pub fn DelegateSecurityContext(); ExportSecurityContext( phContext: PCtxtHandle, fFlags: ULONG, pPackedContext: PSecBuffer, pToken: *mut *mut c_void, ) -> SECURITY_STATUS903 pub fn ExportSecurityContext( 904 phContext: PCtxtHandle, 905 fFlags: ULONG, 906 pPackedContext: PSecBuffer, 907 pToken: *mut *mut c_void, 908 ) -> SECURITY_STATUS; ImportSecurityContextW( pszPackage: LPWSTR, pPackedContext: PSecBuffer, Token: *mut c_void, phContext: PCtxtHandle, ) -> SECURITY_STATUS909 pub fn ImportSecurityContextW( 910 pszPackage: LPWSTR, 911 pPackedContext: PSecBuffer, 912 Token: *mut c_void, 913 phContext: PCtxtHandle, 914 ) -> SECURITY_STATUS; ImportSecurityContextA( pszPackage: LPSTR, pPackedContext: PSecBuffer, Token: *mut c_void, phContext: PCtxtHandle, ) -> SECURITY_STATUS915 pub fn ImportSecurityContextA( 916 pszPackage: LPSTR, 917 pPackedContext: PSecBuffer, 918 Token: *mut c_void, 919 phContext: PCtxtHandle, 920 ) -> SECURITY_STATUS; 921 // pub fn SecMakeSPN(); 922 // pub fn SecMakeSPNEx(); 923 // pub fn SecMakeSPNEx2(); 924 // pub fn SecLookupAccountSid(); 925 // pub fn SecLookupAccountName(); 926 // pub fn SecLookupWellKnownSid(); 927 } 928 extern "system" { 929 // pub fn InitSecurityInterfaceA(); 930 // pub fn InitSecurityInterfaceW(); 931 // pub fn SaslEnumerateProfilesA(); 932 // pub fn SaslEnumerateProfilesW(); 933 // pub fn SaslGetProfilePackageA(); 934 // pub fn SaslGetProfilePackageW(); 935 // pub fn SaslIdentifyPackageA(); 936 // pub fn SaslIdentifyPackageW(); 937 // pub fn SaslInitializeSecurityContextW(); 938 // pub fn SaslInitializeSecurityContextA(); 939 // pub fn SaslAcceptSecurityContext(); 940 // pub fn SaslSetContextOption(); 941 // pub fn SaslGetContextOption(); 942 } 943 pub type PSEC_WINNT_AUTH_IDENTITY_OPAQUE = PVOID; 944 extern "system" { SspiPromptForCredentialsW( pszTargetName: PCWSTR, pUiInfo: PCREDUI_INFOW, dwAuthError: c_ulong, pszPackage: PCWSTR, pInputAuthIdentity: PSEC_WINNT_AUTH_IDENTITY_OPAQUE, ppAuthIdentity: *mut PSEC_WINNT_AUTH_IDENTITY_OPAQUE, pfSave: *mut c_int, dwFlags: c_ulong, ) -> c_ulong945 pub fn SspiPromptForCredentialsW( 946 pszTargetName: PCWSTR, 947 pUiInfo: PCREDUI_INFOW, 948 dwAuthError: c_ulong, 949 pszPackage: PCWSTR, 950 pInputAuthIdentity: PSEC_WINNT_AUTH_IDENTITY_OPAQUE, 951 ppAuthIdentity: *mut PSEC_WINNT_AUTH_IDENTITY_OPAQUE, 952 pfSave: *mut c_int, 953 dwFlags: c_ulong, 954 ) -> c_ulong; SspiPromptForCredentialsA( pszTargetName: PCSTR, pUiInfo: PCREDUI_INFOA, dwAuthError: c_ulong, pszPackage: PCSTR, pInputAuthIdentity: PSEC_WINNT_AUTH_IDENTITY_OPAQUE, ppAuthIdentity: *mut PSEC_WINNT_AUTH_IDENTITY_OPAQUE, pfSave: *mut c_int, dwFlags: c_ulong, ) -> c_ulong955 pub fn SspiPromptForCredentialsA( 956 pszTargetName: PCSTR, 957 pUiInfo: PCREDUI_INFOA, 958 dwAuthError: c_ulong, 959 pszPackage: PCSTR, 960 pInputAuthIdentity: PSEC_WINNT_AUTH_IDENTITY_OPAQUE, 961 ppAuthIdentity: *mut PSEC_WINNT_AUTH_IDENTITY_OPAQUE, 962 pfSave: *mut c_int, 963 dwFlags: c_ulong, 964 ) -> c_ulong; 965 } 966 STRUCT!{struct SEC_WINNT_AUTH_BYTE_VECTOR { 967 ByteArrayOffset: c_ulong, 968 ByteArrayLength: c_ushort, 969 }} 970 pub type PSEC_WINNT_AUTH_BYTE_VECTOR = *mut SEC_WINNT_AUTH_BYTE_VECTOR; 971 STRUCT!{struct SEC_WINNT_AUTH_DATA { 972 CredType: GUID, 973 CredData: SEC_WINNT_AUTH_BYTE_VECTOR, 974 }} 975 pub type PSEC_WINNT_AUTH_DATA = *mut SEC_WINNT_AUTH_DATA; 976 STRUCT!{struct SEC_WINNT_AUTH_PACKED_CREDENTIALS { 977 cbHeaderLength: c_ushort, 978 cbStructureLength: c_ushort, 979 AuthData: SEC_WINNT_AUTH_DATA, 980 }} 981 pub type PSEC_WINNT_AUTH_PACKED_CREDENTIALS = *mut SEC_WINNT_AUTH_PACKED_CREDENTIALS; 982 DEFINE_GUID!(SEC_WINNT_AUTH_DATA_TYPE_PASSWORD, 983 0x28bfc32f, 0x10f6, 0x4738, 0x98, 0xd1, 0x1a, 0xc0, 0x61, 0xdf, 0x71, 0x6a); 984 DEFINE_GUID!(SEC_WINNT_AUTH_DATA_TYPE_CERT, 985 0x235f69ad, 0x73fb, 0x4dbc, 0x82, 0x3, 0x6, 0x29, 0xe7, 0x39, 0x33, 0x9b); 986 STRUCT!{struct SEC_WINNT_AUTH_DATA_PASSWORD { 987 UnicodePassword: SEC_WINNT_AUTH_BYTE_VECTOR, 988 }} 989 pub type PSEC_WINNT_AUTH_DATA_PASSWORD = *mut SEC_WINNT_AUTH_DATA_PASSWORD; 990 DEFINE_GUID!(SEC_WINNT_AUTH_DATA_TYPE_CSP_DATA, 991 0x68fd9879, 0x79c, 0x4dfe, 0x82, 0x81, 0x57, 0x8a, 0xad, 0xc1, 0xc1, 0x0); 992 // GUID SEC_WINNT_AUTH_DATA_TYPE_SMARTCARD_CONTEXTS 993 STRUCT!{struct SEC_WINNT_AUTH_CERTIFICATE_DATA { 994 cbHeaderLength: c_ushort, 995 cbStructureLength: c_ushort, 996 Certificate: SEC_WINNT_AUTH_BYTE_VECTOR, 997 }} 998 pub type PSEC_WINNT_AUTH_CERTIFICATE_DATA = *mut SEC_WINNT_AUTH_CERTIFICATE_DATA; 999 STRUCT!{struct SEC_WINNT_CREDUI_CONTEXT_VECTOR { 1000 CredUIContextArrayOffset: ULONG, 1001 CredUIContextCount: USHORT, 1002 }} 1003 pub type PSEC_WINNT_CREDUI_CONTEXT_VECTOR = *mut SEC_WINNT_CREDUI_CONTEXT_VECTOR; 1004 STRUCT!{struct SEC_WINNT_AUTH_SHORT_VECTOR { 1005 ShortArrayOffset: ULONG, 1006 ShortArrayCount: USHORT, 1007 }} 1008 pub type PSEC_WINNT_AUTH_SHORT_VECTOR = *mut SEC_WINNT_AUTH_SHORT_VECTOR; 1009 extern "system" { SspiGetCredUIContext( ContextHandle: HANDLE, CredType: *mut GUID, LogonId: *mut LUID, CredUIContexts: *mut PSEC_WINNT_CREDUI_CONTEXT_VECTOR, TokenHandle: *mut HANDLE, ) -> SECURITY_STATUS1010 pub fn SspiGetCredUIContext( 1011 ContextHandle: HANDLE, 1012 CredType: *mut GUID, 1013 LogonId: *mut LUID, 1014 CredUIContexts: *mut PSEC_WINNT_CREDUI_CONTEXT_VECTOR, 1015 TokenHandle: *mut HANDLE, 1016 ) -> SECURITY_STATUS; SspiUpdateCredentials( ContextHandle: HANDLE, CredType: *mut GUID, FlatCredUIContextLength: ULONG, FlatCredUIContext: PUCHAR, ) -> SECURITY_STATUS1017 pub fn SspiUpdateCredentials( 1018 ContextHandle: HANDLE, 1019 CredType: *mut GUID, 1020 FlatCredUIContextLength: ULONG, 1021 FlatCredUIContext: PUCHAR, 1022 ) -> SECURITY_STATUS; 1023 } 1024 STRUCT!{struct CREDUIWIN_MARSHALED_CONTEXT { 1025 StructureType: GUID, 1026 cbHeaderLength: USHORT, 1027 LogonId: LUID, 1028 MarshaledDataType: GUID, 1029 MarshaledDataOffset: ULONG, 1030 MarshaledDataLength: USHORT, 1031 }} 1032 pub type PCREDUIWIN_MARSHALED_CONTEXT = *mut CREDUIWIN_MARSHALED_CONTEXT; 1033 STRUCT!{struct SEC_WINNT_CREDUI_CONTEXT { 1034 cbHeaderLength: USHORT, 1035 CredUIContextHandle: HANDLE, 1036 UIInfo: PCREDUI_INFOW, 1037 dwAuthError: ULONG, 1038 pInputAuthIdentity: PSEC_WINNT_AUTH_IDENTITY_OPAQUE, 1039 TargetName: PUNICODE_STRING, 1040 }} 1041 pub type PSEC_WINNT_CREDUI_CONTEXT = *mut SEC_WINNT_CREDUI_CONTEXT; 1042 // GUID CREDUIWIN_STRUCTURE_TYPE_SSPIPFC 1043 // GUID SSPIPFC_STRUCTURE_TYPE_CREDUI_CONTEXT 1044 extern "system" { SspiUnmarshalCredUIContext( MarshaledCredUIContext: PUCHAR, MarshaledCredUIContextLength: ULONG, CredUIContext: *mut PSEC_WINNT_CREDUI_CONTEXT, ) -> SECURITY_STATUS1045 pub fn SspiUnmarshalCredUIContext( 1046 MarshaledCredUIContext: PUCHAR, 1047 MarshaledCredUIContextLength: ULONG, 1048 CredUIContext: *mut PSEC_WINNT_CREDUI_CONTEXT, 1049 ) -> SECURITY_STATUS; 1050 // pub fn SspiPrepareForCredRead(); 1051 // pub fn SspiPrepareForCredWrite(); 1052 // pub fn SspiEncryptAuthIdentity(); 1053 // pub fn SspiEncryptAuthIdentityEx(); 1054 // pub fn SspiDecryptAuthIdentity(); 1055 // pub fn SspiDecryptAuthIdentityEx(); 1056 // pub fn SspiIsAuthIdentityEncrypted(); 1057 // pub fn SspiEncodeAuthIdentityAsStrings(); 1058 // pub fn SspiValidateAuthIdentity(); 1059 // pub fn SspiCopyAuthIdentity(); 1060 // pub fn SspiFreeAuthIdentity(); 1061 // pub fn SspiZeroAuthIdentity(); 1062 // pub fn SspiLocalFree(); 1063 // pub fn SspiEncodeStringsAsAuthIdentity(); 1064 // pub fn SspiCompareAuthIdentities(); 1065 // pub fn SspiMarshalAuthIdentity(); 1066 // pub fn SspiUnmarshalAuthIdentity(); SspiIsPromptingNeeded( ErrorOrNtStatus: c_ulong, ) -> BOOLEAN1067 pub fn SspiIsPromptingNeeded( 1068 ErrorOrNtStatus: c_ulong, 1069 ) -> BOOLEAN; 1070 // pub fn SspiGetTargetHostName(); 1071 // pub fn SspiExcludePackage(); 1072 // pub fn AddSecurityPackageA(); 1073 // pub fn AddSecurityPackageW(); 1074 // pub fn DeleteSecurityPackageA(); 1075 // pub fn DeleteSecurityPackageW(); 1076 } 1077