1 // Copyright © 2015, Peter Atashian 2 // Licensed under the MIT License <LICENSE.md> 3 //! Security Support Provider Interface Prototypes and structure definitions 4 pub type SEC_WCHAR = ::WCHAR; 5 pub type SEC_CHAR = ::CHAR; 6 pub type SECURITY_STATUS = ::LONG; 7 STRUCT!{struct SecHandle { 8 dwLower: ::ULONG_PTR, 9 dwUpper: ::ULONG_PTR, 10 }} 11 pub type PSecHandle = *mut SecHandle; 12 pub const SEC_DELETED_HANDLE: ::ULONG_PTR = 2; 13 pub type CredHandle = SecHandle; 14 pub type PCredHandle = PSecHandle; 15 pub type CtxtHandle = SecHandle; 16 pub type PCtxtHandle = PSecHandle; 17 pub type SECURITY_INTEGER = ::LARGE_INTEGER; 18 pub type PSECURITY_INTEGER = *mut ::LARGE_INTEGER; 19 pub type TimeStamp = SECURITY_INTEGER; 20 pub type PTimeStamp = *mut SECURITY_INTEGER; 21 STRUCT!{struct SECURITY_STRING { 22 Length: ::c_ushort, 23 MaximumLength: ::c_ushort, 24 Buffer: *mut ::c_ushort, 25 }} 26 pub type PSECURITY_STRING = *mut SECURITY_STRING; 27 STRUCT!{struct SecPkgInfoW { 28 fCapabilities: ::c_ulong, 29 wVersion: ::c_ushort, 30 wRPCID: ::c_ushort, 31 cbMaxToken: ::c_ulong, 32 Name: *mut SEC_WCHAR, 33 Comment: *mut SEC_WCHAR, 34 }} 35 pub type PSecPkgInfoW = *mut SecPkgInfoW; 36 STRUCT!{struct SecPkgInfoA { 37 fCapabilities: ::c_ulong, 38 wVersion: ::c_ushort, 39 wRPCID: ::c_ushort, 40 cbMaxToken: ::c_ulong, 41 Name: *mut SEC_CHAR, 42 Comment: *mut SEC_CHAR, 43 }} 44 pub type PSecPkgInfoA = *mut SecPkgInfoA; 45 pub const SECPKG_FLAG_INTEGRITY: ::c_ulong = 0x00000001; 46 pub const SECPKG_FLAG_PRIVACY: ::c_ulong = 0x00000002; 47 pub const SECPKG_FLAG_TOKEN_ONLY: ::c_ulong = 0x00000004; 48 pub const SECPKG_FLAG_DATAGRAM: ::c_ulong = 0x00000008; 49 pub const SECPKG_FLAG_CONNECTION: ::c_ulong = 0x00000010; 50 pub const SECPKG_FLAG_MULTI_REQUIRED: ::c_ulong = 0x00000020; 51 pub const SECPKG_FLAG_CLIENT_ONLY: ::c_ulong = 0x00000040; 52 pub const SECPKG_FLAG_EXTENDED_ERROR: ::c_ulong = 0x00000080; 53 pub const SECPKG_FLAG_IMPERSONATION: ::c_ulong = 0x00000100; 54 pub const SECPKG_FLAG_ACCEPT_WIN32_NAME: ::c_ulong = 0x00000200; 55 pub const SECPKG_FLAG_STREAM: ::c_ulong = 0x00000400; 56 pub const SECPKG_FLAG_NEGOTIABLE: ::c_ulong = 0x00000800; 57 pub const SECPKG_FLAG_GSS_COMPATIBLE: ::c_ulong = 0x00001000; 58 pub const SECPKG_FLAG_LOGON: ::c_ulong = 0x00002000; 59 pub const SECPKG_FLAG_ASCII_BUFFERS: ::c_ulong = 0x00004000; 60 pub const SECPKG_FLAG_FRAGMENT: ::c_ulong = 0x00008000; 61 pub const SECPKG_FLAG_MUTUAL_AUTH: ::c_ulong = 0x00010000; 62 pub const SECPKG_FLAG_DELEGATION: ::c_ulong = 0x00020000; 63 pub const SECPKG_FLAG_READONLY_WITH_CHECKSUM: ::c_ulong = 0x00040000; 64 pub const SECPKG_FLAG_RESTRICTED_TOKENS: ::c_ulong = 0x00080000; 65 pub const SECPKG_FLAG_NEGO_EXTENDER: ::c_ulong = 0x00100000; 66 pub const SECPKG_FLAG_NEGOTIABLE2: ::c_ulong = 0x00200000; 67 pub const SECPKG_FLAG_APPCONTAINER_PASSTHROUGH: ::c_ulong = 0x00400000; 68 pub const SECPKG_FLAG_APPCONTAINER_CHECKS: ::c_ulong = 0x00800000; 69 pub const SECPKG_ID_NONE: ::c_ulong = 0xFFFF; 70 pub const SECPKG_CALLFLAGS_APPCONTAINER: ::c_ulong = 0x00000001; 71 pub const SECPKG_CALLFLAGS_APPCONTAINER_AUTHCAPABLE: ::c_ulong = 0x00000002; 72 pub const SECPKG_CALLFLAGS_FORCE_SUPPLIED: ::c_ulong = 0x00000004; 73 STRUCT!{struct SecBuffer { 74 cbBuffer: ::c_ulong, 75 BufferType: ::c_ulong, 76 pvBuffer: *mut ::c_void, 77 }} 78 pub type PSecBuffer = *mut SecBuffer; 79 STRUCT!{struct SecBufferDesc { 80 ulVersion: ::c_ulong, 81 cBuffers: ::c_ulong, 82 pBuffers: PSecBuffer, 83 }} 84 pub type PSecBufferDesc = *mut SecBufferDesc; 85 pub const SECBUFFER_VERSION: ::c_ulong = 0; 86 pub const SECBUFFER_EMPTY: ::c_ulong = 0; 87 pub const SECBUFFER_DATA: ::c_ulong = 1; 88 pub const SECBUFFER_TOKEN: ::c_ulong = 2; 89 pub const SECBUFFER_PKG_PARAMS: ::c_ulong = 3; 90 pub const SECBUFFER_MISSING: ::c_ulong = 4; 91 pub const SECBUFFER_EXTRA: ::c_ulong = 5; 92 pub const SECBUFFER_STREAM_TRAILER: ::c_ulong = 6; 93 pub const SECBUFFER_STREAM_HEADER: ::c_ulong = 7; 94 pub const SECBUFFER_NEGOTIATION_INFO: ::c_ulong = 8; 95 pub const SECBUFFER_PADDING: ::c_ulong = 9; 96 pub const SECBUFFER_STREAM: ::c_ulong = 10; 97 pub const SECBUFFER_MECHLIST: ::c_ulong = 11; 98 pub const SECBUFFER_MECHLIST_SIGNATURE: ::c_ulong = 12; 99 pub const SECBUFFER_TARGET: ::c_ulong = 13; 100 pub const SECBUFFER_CHANNEL_BINDINGS: ::c_ulong = 14; 101 pub const SECBUFFER_CHANGE_PASS_RESPONSE: ::c_ulong = 15; 102 pub const SECBUFFER_TARGET_HOST: ::c_ulong = 16; 103 pub const SECBUFFER_ALERT: ::c_ulong = 17; 104 pub const SECBUFFER_APPLICATION_PROTOCOLS: ::c_ulong = 18; 105 pub const SECBUFFER_ATTRMASK: ::c_ulong = 0xF0000000; 106 pub const SECBUFFER_READONLY: ::c_ulong = 0x80000000; 107 pub const SECBUFFER_READONLY_WITH_CHECKSUM: ::c_ulong = 0x10000000; 108 pub const SECBUFFER_RESERVED: ::c_ulong = 0x60000000; 109 STRUCT!{struct SEC_NEGOTIATION_INFO { 110 Size: ::c_ulong, 111 NameLength: ::c_ulong, 112 Name: *mut SEC_WCHAR, 113 Reserved: *mut ::c_void, 114 }} 115 pub type PSEC_NEGOTIATION_INFO = *mut SEC_NEGOTIATION_INFO; 116 STRUCT!{struct SEC_CHANNEL_BINDINGS { 117 dwInitiatorAddrType: ::c_ulong, 118 cbInitiatorLength: ::c_ulong, 119 dwInitiatorOffset: ::c_ulong, 120 dwAcceptorAddrType: ::c_ulong, 121 cbAcceptorLength: ::c_ulong, 122 dwAcceptorOffset: ::c_ulong, 123 cbApplicationDataLength: ::c_ulong, 124 dwApplicationDataOffset: ::c_ulong, 125 }} 126 pub type PSEC_CHANNEL_BINDINGS = *mut SEC_CHANNEL_BINDINGS; 127 ENUM!{enum SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT { 128 SecApplicationProtocolNegotiationExt_None, 129 SecApplicationProtocolNegotiationExt_NPN, 130 SecApplicationProtocolNegotiationExt_ALPN, 131 }} 132 pub type PSEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT = *mut SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT; 133 STRUCT!{struct SEC_APPLICATION_PROTOCOL_LIST { 134 ProtoNegoExt: ::SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT, 135 ProtocolListSize: ::c_ushort, 136 ProtocolList: [::c_uchar; 0], 137 }} 138 STRUCT!{struct SEC_APPLICATION_PROTOCOLS { 139 ProtocolListsSize: ::c_ulong, 140 ProtocolLists: [SEC_APPLICATION_PROTOCOL_LIST; 0], 141 }} 142 pub type PSEC_APPLICATION_PROTOCOLS = *mut SEC_APPLICATION_PROTOCOLS; 143 pub const SECURITY_NATIVE_DREP: ::c_ulong = 0x00000010; 144 pub const SECURITY_NETWORK_DREP: ::c_ulong = 0x00000000; 145 pub const SECPKG_CRED_INBOUND: ::c_ulong = 0x00000001; 146 pub const SECPKG_CRED_OUTBOUND: ::c_ulong = 0x00000002; 147 pub const SECPKG_CRED_BOTH: ::c_ulong = 0x00000003; 148 pub const SECPKG_CRED_DEFAULT: ::c_ulong = 0x00000004; 149 pub const SECPKG_CRED_RESERVED: ::c_ulong = 0xF0000000; 150 pub const SECPKG_CRED_AUTOLOGON_RESTRICTED: ::c_ulong = 0x00000010; 151 pub const SECPKG_CRED_PROCESS_POLICY_ONLY: ::c_ulong = 0x00000020; 152 pub const ISC_REQ_DELEGATE: ::c_ulong = 0x00000001; 153 pub const ISC_REQ_MUTUAL_AUTH: ::c_ulong = 0x00000002; 154 pub const ISC_REQ_REPLAY_DETECT: ::c_ulong = 0x00000004; 155 pub const ISC_REQ_SEQUENCE_DETECT: ::c_ulong = 0x00000008; 156 pub const ISC_REQ_CONFIDENTIALITY: ::c_ulong = 0x00000010; 157 pub const ISC_REQ_USE_SESSION_KEY: ::c_ulong = 0x00000020; 158 pub const ISC_REQ_PROMPT_FOR_CREDS: ::c_ulong = 0x00000040; 159 pub const ISC_REQ_USE_SUPPLIED_CREDS: ::c_ulong = 0x00000080; 160 pub const ISC_REQ_ALLOCATE_MEMORY: ::c_ulong = 0x00000100; 161 pub const ISC_REQ_USE_DCE_STYLE: ::c_ulong = 0x00000200; 162 pub const ISC_REQ_DATAGRAM: ::c_ulong = 0x00000400; 163 pub const ISC_REQ_CONNECTION: ::c_ulong = 0x00000800; 164 pub const ISC_REQ_CALL_LEVEL: ::c_ulong = 0x00001000; 165 pub const ISC_REQ_FRAGMENT_SUPPLIED: ::c_ulong = 0x00002000; 166 pub const ISC_REQ_EXTENDED_ERROR: ::c_ulong = 0x00004000; 167 pub const ISC_REQ_STREAM: ::c_ulong = 0x00008000; 168 pub const ISC_REQ_INTEGRITY: ::c_ulong = 0x00010000; 169 pub const ISC_REQ_IDENTIFY: ::c_ulong = 0x00020000; 170 pub const ISC_REQ_NULL_SESSION: ::c_ulong = 0x00040000; 171 pub const ISC_REQ_MANUAL_CRED_VALIDATION: ::c_ulong = 0x00080000; 172 pub const ISC_REQ_RESERVED1: ::c_ulong = 0x00100000; 173 pub const ISC_REQ_FRAGMENT_TO_FIT: ::c_ulong = 0x00200000; 174 pub const ISC_REQ_FORWARD_CREDENTIALS: ::c_ulong = 0x00400000; 175 pub const ISC_REQ_NO_INTEGRITY: ::c_ulong = 0x00800000; 176 pub const ISC_REQ_USE_HTTP_STYLE: ::c_ulong = 0x01000000; 177 pub const ISC_REQ_UNVERIFIED_TARGET_NAME: ::c_ulong = 0x20000000; 178 pub const ISC_REQ_CONFIDENTIALITY_ONLY: ::c_ulong = 0x40000000; 179 pub const ISC_RET_DELEGATE: ::c_ulong = 0x00000001; 180 pub const ISC_RET_MUTUAL_AUTH: ::c_ulong = 0x00000002; 181 pub const ISC_RET_REPLAY_DETECT: ::c_ulong = 0x00000004; 182 pub const ISC_RET_SEQUENCE_DETECT: ::c_ulong = 0x00000008; 183 pub const ISC_RET_CONFIDENTIALITY: ::c_ulong = 0x00000010; 184 pub const ISC_RET_USE_SESSION_KEY: ::c_ulong = 0x00000020; 185 pub const ISC_RET_USED_COLLECTED_CREDS: ::c_ulong = 0x00000040; 186 pub const ISC_RET_USED_SUPPLIED_CREDS: ::c_ulong = 0x00000080; 187 pub const ISC_RET_ALLOCATED_MEMORY: ::c_ulong = 0x00000100; 188 pub const ISC_RET_USED_DCE_STYLE: ::c_ulong = 0x00000200; 189 pub const ISC_RET_DATAGRAM: ::c_ulong = 0x00000400; 190 pub const ISC_RET_CONNECTION: ::c_ulong = 0x00000800; 191 pub const ISC_RET_INTERMEDIATE_RETURN: ::c_ulong = 0x00001000; 192 pub const ISC_RET_CALL_LEVEL: ::c_ulong = 0x00002000; 193 pub const ISC_RET_EXTENDED_ERROR: ::c_ulong = 0x00004000; 194 pub const ISC_RET_STREAM: ::c_ulong = 0x00008000; 195 pub const ISC_RET_INTEGRITY: ::c_ulong = 0x00010000; 196 pub const ISC_RET_IDENTIFY: ::c_ulong = 0x00020000; 197 pub const ISC_RET_NULL_SESSION: ::c_ulong = 0x00040000; 198 pub const ISC_RET_MANUAL_CRED_VALIDATION: ::c_ulong = 0x00080000; 199 pub const ISC_RET_RESERVED1: ::c_ulong = 0x00100000; 200 pub const ISC_RET_FRAGMENT_ONLY: ::c_ulong = 0x00200000; 201 pub const ISC_RET_FORWARD_CREDENTIALS: ::c_ulong = 0x00400000; 202 pub const ISC_RET_USED_HTTP_STYLE: ::c_ulong = 0x01000000; 203 pub const ISC_RET_NO_ADDITIONAL_TOKEN: ::c_ulong = 0x02000000; 204 pub const ISC_RET_REAUTHENTICATION: ::c_ulong = 0x08000000; 205 pub const ISC_RET_CONFIDENTIALITY_ONLY: ::c_ulong = 0x40000000; 206 pub const ASC_REQ_DELEGATE: ::c_ulong = 0x00000001; 207 pub const ASC_REQ_MUTUAL_AUTH: ::c_ulong = 0x00000002; 208 pub const ASC_REQ_REPLAY_DETECT: ::c_ulong = 0x00000004; 209 pub const ASC_REQ_SEQUENCE_DETECT: ::c_ulong = 0x00000008; 210 pub const ASC_REQ_CONFIDENTIALITY: ::c_ulong = 0x00000010; 211 pub const ASC_REQ_USE_SESSION_KEY: ::c_ulong = 0x00000020; 212 pub const ASC_REQ_SESSION_TICKET: ::c_ulong = 0x00000040; 213 pub const ASC_REQ_ALLOCATE_MEMORY: ::c_ulong = 0x00000100; 214 pub const ASC_REQ_USE_DCE_STYLE: ::c_ulong = 0x00000200; 215 pub const ASC_REQ_DATAGRAM: ::c_ulong = 0x00000400; 216 pub const ASC_REQ_CONNECTION: ::c_ulong = 0x00000800; 217 pub const ASC_REQ_CALL_LEVEL: ::c_ulong = 0x00001000; 218 pub const ASC_REQ_EXTENDED_ERROR: ::c_ulong = 0x00008000; 219 pub const ASC_REQ_STREAM: ::c_ulong = 0x00010000; 220 pub const ASC_REQ_INTEGRITY: ::c_ulong = 0x00020000; 221 pub const ASC_REQ_LICENSING: ::c_ulong = 0x00040000; 222 pub const ASC_REQ_IDENTIFY: ::c_ulong = 0x00080000; 223 pub const ASC_REQ_ALLOW_NULL_SESSION: ::c_ulong = 0x00100000; 224 pub const ASC_REQ_ALLOW_NON_USER_LOGONS: ::c_ulong = 0x00200000; 225 pub const ASC_REQ_ALLOW_CONTEXT_REPLAY: ::c_ulong = 0x00400000; 226 pub const ASC_REQ_FRAGMENT_TO_FIT: ::c_ulong = 0x00800000; 227 pub const ASC_REQ_FRAGMENT_SUPPLIED: ::c_ulong = 0x00002000; 228 pub const ASC_REQ_NO_TOKEN: ::c_ulong = 0x01000000; 229 pub const ASC_REQ_PROXY_BINDINGS: ::c_ulong = 0x04000000; 230 pub const ASC_REQ_ALLOW_MISSING_BINDINGS: ::c_ulong = 0x10000000; 231 pub const ASC_RET_DELEGATE: ::c_ulong = 0x00000001; 232 pub const ASC_RET_MUTUAL_AUTH: ::c_ulong = 0x00000002; 233 pub const ASC_RET_REPLAY_DETECT: ::c_ulong = 0x00000004; 234 pub const ASC_RET_SEQUENCE_DETECT: ::c_ulong = 0x00000008; 235 pub const ASC_RET_CONFIDENTIALITY: ::c_ulong = 0x00000010; 236 pub const ASC_RET_USE_SESSION_KEY: ::c_ulong = 0x00000020; 237 pub const ASC_RET_SESSION_TICKET: ::c_ulong = 0x00000040; 238 pub const ASC_RET_ALLOCATED_MEMORY: ::c_ulong = 0x00000100; 239 pub const ASC_RET_USED_DCE_STYLE: ::c_ulong = 0x00000200; 240 pub const ASC_RET_DATAGRAM: ::c_ulong = 0x00000400; 241 pub const ASC_RET_CONNECTION: ::c_ulong = 0x00000800; 242 pub const ASC_RET_CALL_LEVEL: ::c_ulong = 0x00002000; 243 pub const ASC_RET_THIRD_LEG_FAILED: ::c_ulong = 0x00004000; 244 pub const ASC_RET_EXTENDED_ERROR: ::c_ulong = 0x00008000; 245 pub const ASC_RET_STREAM: ::c_ulong = 0x00010000; 246 pub const ASC_RET_INTEGRITY: ::c_ulong = 0x00020000; 247 pub const ASC_RET_LICENSING: ::c_ulong = 0x00040000; 248 pub const ASC_RET_IDENTIFY: ::c_ulong = 0x00080000; 249 pub const ASC_RET_NULL_SESSION: ::c_ulong = 0x00100000; 250 pub const ASC_RET_ALLOW_NON_USER_LOGONS: ::c_ulong = 0x00200000; 251 pub const ASC_RET_ALLOW_CONTEXT_REPLAY: ::c_ulong = 0x00400000; 252 pub const ASC_RET_FRAGMENT_ONLY: ::c_ulong = 0x00800000; 253 pub const ASC_RET_NO_TOKEN: ::c_ulong = 0x01000000; 254 pub const ASC_RET_NO_ADDITIONAL_TOKEN: ::c_ulong = 0x02000000; 255 pub const SECPKG_CRED_ATTR_NAMES: ::c_ulong = 1; 256 pub const SECPKG_CRED_ATTR_SSI_PROVIDER: ::c_ulong = 2; 257 pub const SECPKG_CRED_ATTR_KDC_PROXY_SETTINGS: ::c_ulong = 3; 258 pub const SECPKG_CRED_ATTR_CERT: ::c_ulong = 4; 259 STRUCT!{struct SecPkgCredentials_NamesW { 260 sUserName: *mut SEC_WCHAR, 261 }} 262 pub type PSecPkgCredentials_NamesW = *mut SecPkgCredentials_NamesW; 263 STRUCT!{struct SecPkgCredentials_NamesA { 264 sUserName: *mut SEC_CHAR, 265 }} 266 pub type PSecPkgCredentials_NamesA = *mut SecPkgCredentials_NamesA; 267 STRUCT!{struct SecPkgCredentials_SSIProviderW { 268 sProviderName: *mut SEC_WCHAR, 269 ProviderInfoLength: ::c_ulong, 270 ProviderInfo: *mut ::c_char, 271 }} 272 pub type PSecPkgCredentials_SSIProviderW = *mut SecPkgCredentials_SSIProviderW; 273 STRUCT!{struct SecPkgCredentials_SSIProviderA { 274 sProviderName: *mut SEC_CHAR, 275 ProviderInfoLength: ::c_ulong, 276 ProviderInfo: *mut ::c_char, 277 }} 278 pub type PSecPkgCredentials_SSIProviderA = *mut SecPkgCredentials_SSIProviderA; 279 pub const KDC_PROXY_SETTINGS_V1: ::ULONG = 1; 280 pub const KDC_PROXY_SETTINGS_FLAGS_FORCEPROXY: ::ULONG = 0x1; 281 STRUCT!{struct SecPkgCredentials_KdcProxySettingsW { 282 Version: ::ULONG, 283 Flags: ::ULONG, 284 ProxyServerOffset: ::USHORT, 285 ProxyServerLength: ::USHORT, 286 ClientTlsCredOffset: ::USHORT, 287 ClientTlsCredLength: ::USHORT, 288 }} 289 pub type PSecPkgCredentials_KdcProxySettingsW = *mut SecPkgCredentials_KdcProxySettingsW; 290 STRUCT!{struct SecPkgCredentials_Cert { 291 EncodedCertSize: ::c_ulong, 292 EncodedCert: *mut ::c_uchar, 293 }} 294 pub type PSecPkgCredentials_Cert = *mut SecPkgCredentials_Cert; 295 pub const SECPKG_ATTR_SIZES: ::c_ulong = 0; 296 pub const SECPKG_ATTR_NAMES: ::c_ulong = 1; 297 pub const SECPKG_ATTR_LIFESPAN: ::c_ulong = 2; 298 pub const SECPKG_ATTR_DCE_INFO: ::c_ulong = 3; 299 pub const SECPKG_ATTR_STREAM_SIZES: ::c_ulong = 4; 300 pub const SECPKG_ATTR_KEY_INFO: ::c_ulong = 5; 301 pub const SECPKG_ATTR_AUTHORITY: ::c_ulong = 6; 302 pub const SECPKG_ATTR_PROTO_INFO: ::c_ulong = 7; 303 pub const SECPKG_ATTR_PASSWORD_EXPIRY: ::c_ulong = 8; 304 pub const SECPKG_ATTR_SESSION_KEY: ::c_ulong = 9; 305 pub const SECPKG_ATTR_PACKAGE_INFO: ::c_ulong = 10; 306 pub const SECPKG_ATTR_USER_FLAGS: ::c_ulong = 11; 307 pub const SECPKG_ATTR_NEGOTIATION_INFO: ::c_ulong = 12; 308 pub const SECPKG_ATTR_NATIVE_NAMES: ::c_ulong = 13; 309 pub const SECPKG_ATTR_FLAGS: ::c_ulong = 14; 310 pub const SECPKG_ATTR_USE_VALIDATED: ::c_ulong = 15; 311 pub const SECPKG_ATTR_CREDENTIAL_NAME: ::c_ulong = 16; 312 pub const SECPKG_ATTR_TARGET_INFORMATION: ::c_ulong = 17; 313 pub const SECPKG_ATTR_ACCESS_TOKEN: ::c_ulong = 18; 314 pub const SECPKG_ATTR_TARGET: ::c_ulong = 19; 315 pub const SECPKG_ATTR_AUTHENTICATION_ID: ::c_ulong = 20; 316 pub const SECPKG_ATTR_LOGOFF_TIME: ::c_ulong = 21; 317 pub const SECPKG_ATTR_NEGO_KEYS: ::c_ulong = 22; 318 pub const SECPKG_ATTR_PROMPTING_NEEDED: ::c_ulong = 24; 319 pub const SECPKG_ATTR_UNIQUE_BINDINGS: ::c_ulong = 25; 320 pub const SECPKG_ATTR_ENDPOINT_BINDINGS: ::c_ulong = 26; 321 pub const SECPKG_ATTR_CLIENT_SPECIFIED_TARGET: ::c_ulong = 27; 322 pub const SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS: ::c_ulong = 30; 323 pub const SECPKG_ATTR_NEGO_PKG_INFO: ::c_ulong = 31; 324 pub const SECPKG_ATTR_NEGO_STATUS: ::c_ulong = 32; 325 pub const SECPKG_ATTR_CONTEXT_DELETED: ::c_ulong = 33; 326 pub const SECPKG_ATTR_DTLS_MTU: ::c_ulong = 34; 327 pub const SECPKG_ATTR_DATAGRAM_SIZES: ::c_ulong = SECPKG_ATTR_STREAM_SIZES; 328 pub const SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES: ::c_ulong = 128; 329 pub const SECPKG_ATTR_APPLICATION_PROTOCOL: ::c_ulong = 35; 330 STRUCT!{struct SecPkgContext_SubjectAttributes { 331 AttributeInfo: *mut ::c_void, 332 }} 333 pub type PSecPkgContext_SubjectAttributes = *mut SecPkgContext_SubjectAttributes; 334 pub const SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS: ::c_ulong = 0x1; 335 pub const SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM: ::c_ulong = 0x2; 336 ENUM!{enum SECPKG_CRED_CLASS { 337 SecPkgCredClass_None = 0, 338 SecPkgCredClass_Ephemeral = 10, 339 SecPkgCredClass_PersistedGeneric = 20, 340 SecPkgCredClass_PersistedSpecific = 30, 341 SecPkgCredClass_Explicit = 40, 342 }} 343 pub type PSECPKG_CRED_CLASS = *mut SECPKG_CRED_CLASS; 344 STRUCT!{struct SecPkgContext_CredInfo { 345 CredClass: SECPKG_CRED_CLASS, 346 IsPromptingNeeded: ::c_ulong, 347 }} 348 pub type PSecPkgContext_CredInfo = *mut SecPkgContext_CredInfo; 349 STRUCT!{struct SecPkgContext_NegoPackageInfo { 350 PackageMask: ::c_ulong, 351 }} 352 pub type PSecPkgContext_NegoPackageInfo = *mut SecPkgContext_NegoPackageInfo; 353 STRUCT!{struct SecPkgContext_NegoStatus { 354 LastStatus: ::c_ulong, 355 }} 356 pub type PSecPkgContext_NegoStatus = *mut SecPkgContext_NegoStatus; 357 STRUCT!{struct SecPkgContext_Sizes { 358 cbMaxToken: ::c_ulong, 359 cbMaxSignature: ::c_ulong, 360 cbBlockSize: ::c_ulong, 361 cbSecurityTrailer: ::c_ulong, 362 }} 363 pub type PSecPkgContext_Sizes = *mut SecPkgContext_Sizes; 364 STRUCT!{struct SecPkgContext_StreamSizes { 365 cbHeader: ::c_ulong, 366 cbTrailer: ::c_ulong, 367 cbMaximumMessage: ::c_ulong, 368 cBuffers: ::c_ulong, 369 cbBlockSize: ::c_ulong, 370 }} 371 pub type PSecPkgContext_StreamSizes = *mut SecPkgContext_StreamSizes; 372 pub type SecPkgContext_DatagramSizes = SecPkgContext_StreamSizes; 373 pub type PSecPkgContext_DatagramSizes = PSecPkgContext_StreamSizes; 374 STRUCT!{struct SecPkgContext_NamesW { 375 sUserName: *mut SEC_WCHAR, 376 }} 377 pub type PSecPkgContext_NamesW = *mut SecPkgContext_NamesW; 378 ENUM!{enum SECPKG_ATTR_LCT_STATUS { 379 SecPkgAttrLastClientTokenYes, 380 SecPkgAttrLastClientTokenNo, 381 SecPkgAttrLastClientTokenMaybe, 382 }} 383 pub type PSECPKG_ATTR_LCT_STATUS = *mut SECPKG_ATTR_LCT_STATUS; 384 STRUCT!{struct SecPkgContext_LastClientTokenStatus { 385 LastClientTokenStatus: SECPKG_ATTR_LCT_STATUS, 386 }} 387 pub type PSecPkgContext_LastClientTokenStatus = *mut SecPkgContext_LastClientTokenStatus; 388 STRUCT!{struct SecPkgContext_NamesA { 389 sUserName: *mut SEC_CHAR, 390 }} 391 pub type PSecPkgContext_NamesA = *mut SecPkgContext_NamesA; 392 STRUCT!{struct SecPkgContext_Lifespan { 393 tsStart: TimeStamp, 394 tsExpiry: TimeStamp, 395 }} 396 pub type PSecPkgContext_Lifespan = *mut SecPkgContext_Lifespan; 397 STRUCT!{struct SecPkgContext_DceInfo { 398 AuthzSvc: ::c_ulong, 399 pPac: *mut ::c_void, 400 }} 401 pub type PSecPkgContext_DceInfo = *mut SecPkgContext_DceInfo; 402 STRUCT!{struct SecPkgContext_KeyInfoA { 403 sSignatureAlgorithmName: *mut ::SEC_CHAR, 404 sEncryptAlgorithmName: *mut ::SEC_CHAR, 405 KeySize: ::c_ulong, 406 SignatureAlgorithm: ::c_ulong, 407 EncryptAlgorithm: ::c_ulong, 408 }} 409 pub type PSecPkgContext_KeyInfoA = *mut SecPkgContext_KeyInfoA; 410 STRUCT!{struct SecPkgContext_KeyInfoW { 411 sSignatureAlgorithmName: *mut ::SEC_WCHAR, 412 sEncryptAlgorithmName: *mut ::SEC_WCHAR, 413 KeySize: ::c_ulong, 414 SignatureAlgorithm: ::c_ulong, 415 EncryptAlgorithm: ::c_ulong, 416 }} 417 pub type PSecPkgContext_KeyInfoW = *mut SecPkgContext_KeyInfoW; 418 STRUCT!{struct SecPkgContext_AuthorityA { 419 sAuthorityName: *mut SEC_CHAR, 420 }} 421 pub type PSecPkgContext_AuthorityA = *mut SecPkgContext_AuthorityA; 422 STRUCT!{struct SecPkgContext_AuthorityW { 423 sAuthorityName: *mut SEC_WCHAR, 424 }} 425 pub type PSecPkgContext_AuthorityW = *mut SecPkgContext_AuthorityW; 426 STRUCT!{struct SecPkgContext_ProtoInfoA { 427 sProtocolName: *mut SEC_CHAR, 428 majorVersion: ::c_ulong, 429 minorVersion: ::c_ulong, 430 }} 431 pub type PSecPkgContext_ProtoInfoA = *mut SecPkgContext_ProtoInfoA; 432 STRUCT!{struct SecPkgContext_ProtoInfoW { 433 sProtocolName: *mut SEC_WCHAR, 434 majorVersion: ::c_ulong, 435 minorVersion: ::c_ulong, 436 }} 437 pub type PSecPkgContext_ProtoInfoW = *mut SecPkgContext_ProtoInfoW; 438 STRUCT!{struct SecPkgContext_PasswordExpiry { 439 tsPasswordExpires: TimeStamp, 440 }} 441 pub type PSecPkgContext_PasswordExpiry = *mut SecPkgContext_PasswordExpiry; 442 STRUCT!{struct SecPkgContext_LogoffTime { 443 tsLogoffTime: TimeStamp, 444 }} 445 pub type PSecPkgContext_LogoffTime = *mut SecPkgContext_LogoffTime; 446 STRUCT!{struct SecPkgContext_SessionKey { 447 SessionKeyLength: ::c_ulong, 448 SessionKey: *mut ::c_uchar, 449 }} 450 pub type PSecPkgContext_SessionKey = *mut SecPkgContext_SessionKey; 451 STRUCT!{struct SecPkgContext_NegoKeys { 452 KeyType: ::c_ulong, 453 KeyLength: ::c_ushort, 454 KeyValue: *mut ::c_uchar, 455 VerifyKeyType: ::c_ulong, 456 VerifyKeyLength: ::c_ushort, 457 VerifyKeyValue: *mut ::c_uchar, 458 }} 459 pub type PSecPkgContext_NegoKeys = *mut SecPkgContext_NegoKeys; 460 STRUCT!{struct SecPkgContext_PackageInfoW { 461 PackageInfo: PSecPkgInfoW, 462 }} 463 pub type PSecPkgContext_PackageInfoW = *mut SecPkgContext_PackageInfoW; 464 STRUCT!{struct SecPkgContext_PackageInfoA { 465 PackageInfo: PSecPkgInfoA, 466 }} 467 pub type PSecPkgContext_PackageInfoA = *mut SecPkgContext_PackageInfoA; 468 STRUCT!{struct SecPkgContext_UserFlags { 469 UserFlags: ::c_ulong, 470 }} 471 pub type PSecPkgContext_UserFlags = *mut SecPkgContext_UserFlags; 472 STRUCT!{struct SecPkgContext_Flags { 473 Flags: ::c_ulong, 474 }} 475 pub type PSecPkgContext_Flags = *mut SecPkgContext_Flags; 476 STRUCT!{struct SecPkgContext_NegotiationInfoA { 477 PackageInfo: PSecPkgInfoA, 478 NegotiationState: ::c_ulong, 479 }} 480 pub type PSecPkgContext_NegotiationInfoA = *mut SecPkgContext_NegotiationInfoA; 481 STRUCT!{struct SecPkgContext_NegotiationInfoW { 482 PackageInfo: PSecPkgInfoW, 483 NegotiationState: ::c_ulong, 484 }} 485 pub type PSecPkgContext_NegotiationInfoW = *mut SecPkgContext_NegotiationInfoW; 486 pub const SECPKG_NEGOTIATION_COMPLETE: ::c_ulong = 0; 487 pub const SECPKG_NEGOTIATION_OPTIMISTIC: ::c_ulong = 1; 488 pub const SECPKG_NEGOTIATION_IN_PROGRESS: ::c_ulong = 2; 489 pub const SECPKG_NEGOTIATION_DIRECT: ::c_ulong = 3; 490 pub const SECPKG_NEGOTIATION_TRY_MULTICRED: ::c_ulong = 4; 491 STRUCT!{struct SecPkgContext_NativeNamesW { 492 sClientName: SEC_WCHAR, 493 sServerName: SEC_WCHAR, 494 }} 495 pub type PSecPkgContext_NativeNamesW = *mut SecPkgContext_NativeNamesW; 496 STRUCT!{struct SecPkgContext_NativeNamesA { 497 sClientName: SEC_CHAR, 498 sServerName: SEC_CHAR, 499 }} 500 pub type PSecPkgContext_NativeNamesA = *mut SecPkgContext_NativeNamesA; 501 STRUCT!{struct SecPkgContext_CredentialNameW { 502 CredentialType: ::c_ulong, 503 sCredentialName: *mut SEC_WCHAR, 504 }} 505 pub type PSecPkgContext_CredentialNameW = *mut SecPkgContext_CredentialNameW; 506 STRUCT!{struct SecPkgContext_CredentialNameA { 507 CredentialType: ::c_ulong, 508 sCredentialName: *mut SEC_CHAR, 509 }} 510 pub type PSecPkgContext_CredentialNameA = *mut SecPkgContext_CredentialNameA; 511 STRUCT!{struct SecPkgContext_AccessToken { 512 AccessToken: *mut ::c_void, 513 }} 514 pub type PSecPkgContext_AccessToken = *mut SecPkgContext_AccessToken; 515 STRUCT!{struct SecPkgContext_TargetInformation { 516 MarshalledTargetInfoLength: ::c_ulong, 517 MarshalledTargetInfo: *mut ::c_uchar, 518 }} 519 pub type PSecPkgContext_TargetInformation = *mut SecPkgContext_TargetInformation; 520 STRUCT!{struct SecPkgContext_AuthzID { 521 AuthzIDLength: ::c_ulong, 522 AuthzID: *mut ::c_char, 523 }} 524 pub type PSecPkgContext_AuthzID = *mut SecPkgContext_AuthzID; 525 STRUCT!{struct SecPkgContext_Target { 526 TargetLength: ::c_ulong, 527 Target: *mut ::c_char, 528 }} 529 pub type PSecPkgContext_Target = *mut SecPkgContext_Target; 530 STRUCT!{struct SecPkgContext_ClientSpecifiedTarget { 531 sTargetName: *mut SEC_WCHAR, 532 }} 533 pub type PSecPkgContext_ClientSpecifiedTarget = *mut SecPkgContext_ClientSpecifiedTarget; 534 STRUCT!{struct SecPkgContext_Bindings { 535 BindingsLength: ::c_ulong, 536 Bindings: *mut SEC_CHANNEL_BINDINGS, 537 }} 538 pub type PSecPkgContext_Bindings = *mut SecPkgContext_Bindings; 539 ENUM!{enum SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS { 540 SecApplicationProtocolNegotiationStatus_None, 541 SecApplicationProtocolNegotiationStatus_Success, 542 SecApplicationProtocolNegotiationStatus_SelectedClientOnly, 543 }} 544 pub type PSEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS = 545 *mut SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS; 546 pub const MAX_PROTOCOL_ID_SIZE: usize = 0xff; 547 STRUCT!{nodebug struct SecPkgContext_ApplicationProtocol { 548 ProtoNegoStatus: SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS, 549 ProtoNegoExt: SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT, 550 ProtocolIdSize: ::c_uchar, 551 ProtocolId: [::c_uchar; MAX_PROTOCOL_ID_SIZE], 552 }} 553 pub type PSecPkgContext_ApplicationProtocol = *mut SecPkgContext_ApplicationProtocol; 554 pub type SEC_GET_KEY_FN = Option<unsafe extern "system" fn( 555 Arg: *mut ::c_void, Principal: *mut ::c_void, KeyVer: ::c_ulong, Key: *mut *mut ::c_void, 556 Status: *mut SECURITY_STATUS, 557 )>; 558 pub const SECPKG_CONTEXT_EXPORT_RESET_NEW: ::c_ulong = 0x00000001; 559 pub const SECPKG_CONTEXT_EXPORT_DELETE_OLD: ::c_ulong = 0x00000002; 560 pub const SECPKG_CONTEXT_EXPORT_TO_KERNEL: ::c_ulong = 0x00000004; 561 pub type ACQUIRE_CREDENTIALS_HANDLE_FN_W = Option<unsafe extern "system" fn( 562 *mut SEC_WCHAR, *mut SEC_WCHAR, ::c_ulong, *mut ::c_void, *mut ::c_void, SEC_GET_KEY_FN, 563 *mut ::c_void, PCredHandle, PTimeStamp, 564 ) -> SECURITY_STATUS>; 565 pub type ACQUIRE_CREDENTIALS_HANDLE_FN_A = Option<unsafe extern "system" fn( 566 *mut SEC_CHAR, *mut SEC_CHAR, ::c_ulong, *mut ::c_void, *mut ::c_void, SEC_GET_KEY_FN, 567 *mut ::c_void, PCredHandle, PTimeStamp, 568 ) -> SECURITY_STATUS>; 569 pub type FREE_CREDENTIALS_HANDLE_FN = Option<unsafe extern "system" fn( 570 PCredHandle, 571 ) -> SECURITY_STATUS>; 572 pub type ADD_CREDENTIALS_FN_W = Option<unsafe extern "system" fn( 573 PCredHandle, *mut SEC_WCHAR, *mut SEC_WCHAR, ::c_ulong, *mut ::c_void, SEC_GET_KEY_FN, 574 *mut ::c_void, PTimeStamp, 575 ) -> SECURITY_STATUS>; 576 pub type ADD_CREDENTIALS_FN_A = Option<unsafe extern "system" fn( 577 PCredHandle, *mut SEC_CHAR, *mut SEC_CHAR, ::c_ulong, *mut ::c_void, SEC_GET_KEY_FN, 578 *mut ::c_void, PTimeStamp, 579 ) -> SECURITY_STATUS>; 580 pub type CHANGE_PASSWORD_FN_W = Option<unsafe extern "system" fn( 581 *mut SEC_WCHAR, *mut SEC_WCHAR, *mut SEC_WCHAR, *mut SEC_WCHAR, *mut SEC_WCHAR, ::BOOLEAN, 582 ::c_ulong, PSecBufferDesc, 583 ) -> SECURITY_STATUS>; 584 pub type CHANGE_PASSWORD_FN_A = Option<unsafe extern "system" fn( 585 *mut SEC_CHAR, *mut SEC_CHAR, *mut SEC_CHAR, *mut SEC_CHAR, *mut SEC_CHAR, ::BOOLEAN, 586 ::c_ulong, PSecBufferDesc, 587 ) -> SECURITY_STATUS>; 588 //1844 589 ENUM!{enum SecDelegationType { 590 SecFull, 591 SecService, 592 SecTree, 593 SecDirectory, 594 SecObject, 595 }} 596 pub type PSecDelegationType = *mut SecDelegationType; 597 STRUCT!{struct SEC_WINNT_AUTH_BYTE_VECTOR { 598 ByteArrayOffset: ::c_ulong, 599 ByteArrayLength: ::c_ushort, 600 }} 601 pub type PSEC_WINNT_AUTH_BYTE_VECTOR = *mut SEC_WINNT_AUTH_BYTE_VECTOR; 602 STRUCT!{struct SEC_WINNT_AUTH_DATA { 603 CredType: ::GUID, 604 CredData: SEC_WINNT_AUTH_BYTE_VECTOR, 605 }} 606 pub type PSEC_WINNT_AUTH_DATA = *mut SEC_WINNT_AUTH_DATA; 607 STRUCT!{struct SEC_WINNT_AUTH_PACKED_CREDENTIALS { 608 cbHeaderLength: ::c_ushort, 609 cbStructureLength: ::c_ushort, 610 AuthData: SEC_WINNT_AUTH_DATA, 611 }} 612 pub type PSEC_WINNT_AUTH_PACKED_CREDENTIALS = *mut SEC_WINNT_AUTH_PACKED_CREDENTIALS; 613 DEFINE_GUID!(SEC_WINNT_AUTH_DATA_TYPE_PASSWORD, 0x28bfc32f, 0x10f6, 0x4738, 614 0x98, 0xd1, 0x1a, 0xc0, 0x61, 0xdf, 0x71, 0x6a); 615 DEFINE_GUID!(SEC_WINNT_AUTH_DATA_TYPE_CERT, 0x235f69ad, 0x73fb, 0x4dbc, 616 0x82, 0x3, 0x6, 0x29, 0xe7, 0x39, 0x33, 0x9b); 617 STRUCT!{struct SEC_WINNT_AUTH_DATA_PASSWORD { 618 UnicodePassword: SEC_WINNT_AUTH_BYTE_VECTOR, 619 }} 620 pub type PSEC_WINNT_AUTH_DATA_PASSWORD = *mut SEC_WINNT_AUTH_DATA_PASSWORD; 621 DEFINE_GUID!(SEC_WINNT_AUTH_DATA_TYPE_CSP_DATA, 0x68fd9879, 0x79c, 0x4dfe, 622 0x82, 0x81, 0x57, 0x8a, 0xad, 0xc1, 0xc1, 0x0); 623 STRUCT!{struct SEC_WINNT_AUTH_CERTIFICATE_DATA { 624 cbHeaderLength: ::c_ushort, 625 cbStructureLength: ::c_ushort, 626 Certificate: SEC_WINNT_AUTH_BYTE_VECTOR, 627 }} 628 pub type PSEC_WINNT_AUTH_CERTIFICATE_DATA = *mut SEC_WINNT_AUTH_CERTIFICATE_DATA; 629 STRUCT!{struct SEC_WINNT_CREDUI_CONTEXT_VECTOR { 630 CredUIContextArrayOffset: ::ULONG, 631 CredUIContextCount: ::USHORT, 632 }} 633 pub type PSEC_WINNT_CREDUI_CONTEXT_VECTOR = *mut SEC_WINNT_CREDUI_CONTEXT_VECTOR; 634 STRUCT!{struct SEC_WINNT_AUTH_SHORT_VECTOR { 635 ShortArrayOffset: ::ULONG, 636 ShortArrayCount: ::USHORT, 637 }} 638 pub type PSEC_WINNT_AUTH_SHORT_VECTOR = *mut SEC_WINNT_AUTH_SHORT_VECTOR; 639 STRUCT!{struct CREDUIWIN_MARSHALED_CONTEXT { 640 StructureType: ::GUID, 641 cbHeaderLength: ::USHORT, 642 LogonId: ::LUID, 643 MarshaledDataType: ::GUID, 644 MarshaledDataOffset: ::ULONG, 645 MarshaledDataLength: ::USHORT, 646 }} 647 pub type PCREDUIWIN_MARSHALED_CONTEXT = *mut CREDUIWIN_MARSHALED_CONTEXT; 648 STRUCT!{struct SEC_WINNT_CREDUI_CONTEXT { 649 cbHeaderLength: ::USHORT, 650 CredUIContextHandle: ::HANDLE, 651 UIInfo: ::PCREDUI_INFOW, 652 dwAuthError: ::ULONG, 653 pInputAuthIdentity: PSEC_WINNT_AUTH_IDENTITY_OPAQUE, 654 TargetName: ::PUNICODE_STRING, 655 }} 656 pub type PSEC_WINNT_CREDUI_CONTEXT = *mut SEC_WINNT_CREDUI_CONTEXT; 657 pub type PSEC_WINNT_AUTH_IDENTITY_OPAQUE = ::PVOID; 658