| // Licensed under the Apache License, Version 2.0 |
| // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license |
| // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. |
| // All files in the project carrying such notice may not be copied, modified, or distributed |
| // except according to those terms. |
| //! Security Support Provider Interface Prototypes and structure definitions |
| use ctypes::{c_char, c_int, c_uchar, c_ulong, c_ushort, c_void}; |
| use shared::basetsd::ULONG_PTR; |
| use shared::guiddef::GUID; |
| use shared::minwindef::{PUCHAR, ULONG, USHORT}; |
| use um::subauth::PUNICODE_STRING; |
| use um::wincred::{PCREDUI_INFOA, PCREDUI_INFOW}; |
| use um::winnt::{ |
| ANYSIZE_ARRAY, BOOLEAN, CHAR, HANDLE, LARGE_INTEGER, LONG, LPSTR, LPWSTR, LUID, PCSTR, PCWSTR, |
| PVOID, WCHAR |
| }; |
| pub type SEC_WCHAR = WCHAR; |
| pub type SEC_CHAR = CHAR; |
| pub type SECURITY_STATUS = LONG; |
| STRUCT!{struct SecHandle { |
| dwLower: ULONG_PTR, |
| dwUpper: ULONG_PTR, |
| }} |
| pub type PSecHandle = *mut SecHandle; |
| pub const SEC_DELETED_HANDLE: ULONG_PTR = 2; |
| pub type CredHandle = SecHandle; |
| pub type PCredHandle = PSecHandle; |
| pub type CtxtHandle = SecHandle; |
| pub type PCtxtHandle = PSecHandle; |
| pub type SECURITY_INTEGER = LARGE_INTEGER; |
| pub type PSECURITY_INTEGER = *mut LARGE_INTEGER; |
| pub type TimeStamp = SECURITY_INTEGER; |
| pub type PTimeStamp = *mut SECURITY_INTEGER; |
| STRUCT!{struct SECURITY_STRING { |
| Length: c_ushort, |
| MaximumLength: c_ushort, |
| Buffer: *mut c_ushort, |
| }} |
| pub type PSECURITY_STRING = *mut SECURITY_STRING; |
| STRUCT!{struct SecPkgInfoW { |
| fCapabilities: c_ulong, |
| wVersion: c_ushort, |
| wRPCID: c_ushort, |
| cbMaxToken: c_ulong, |
| Name: *mut SEC_WCHAR, |
| Comment: *mut SEC_WCHAR, |
| }} |
| pub type PSecPkgInfoW = *mut SecPkgInfoW; |
| STRUCT!{struct SecPkgInfoA { |
| fCapabilities: c_ulong, |
| wVersion: c_ushort, |
| wRPCID: c_ushort, |
| cbMaxToken: c_ulong, |
| Name: *mut SEC_CHAR, |
| Comment: *mut SEC_CHAR, |
| }} |
| pub type PSecPkgInfoA = *mut SecPkgInfoA; |
| pub const SECPKG_FLAG_INTEGRITY: c_ulong = 0x00000001; |
| pub const SECPKG_FLAG_PRIVACY: c_ulong = 0x00000002; |
| pub const SECPKG_FLAG_TOKEN_ONLY: c_ulong = 0x00000004; |
| pub const SECPKG_FLAG_DATAGRAM: c_ulong = 0x00000008; |
| pub const SECPKG_FLAG_CONNECTION: c_ulong = 0x00000010; |
| pub const SECPKG_FLAG_MULTI_REQUIRED: c_ulong = 0x00000020; |
| pub const SECPKG_FLAG_CLIENT_ONLY: c_ulong = 0x00000040; |
| pub const SECPKG_FLAG_EXTENDED_ERROR: c_ulong = 0x00000080; |
| pub const SECPKG_FLAG_IMPERSONATION: c_ulong = 0x00000100; |
| pub const SECPKG_FLAG_ACCEPT_WIN32_NAME: c_ulong = 0x00000200; |
| pub const SECPKG_FLAG_STREAM: c_ulong = 0x00000400; |
| pub const SECPKG_FLAG_NEGOTIABLE: c_ulong = 0x00000800; |
| pub const SECPKG_FLAG_GSS_COMPATIBLE: c_ulong = 0x00001000; |
| pub const SECPKG_FLAG_LOGON: c_ulong = 0x00002000; |
| pub const SECPKG_FLAG_ASCII_BUFFERS: c_ulong = 0x00004000; |
| pub const SECPKG_FLAG_FRAGMENT: c_ulong = 0x00008000; |
| pub const SECPKG_FLAG_MUTUAL_AUTH: c_ulong = 0x00010000; |
| pub const SECPKG_FLAG_DELEGATION: c_ulong = 0x00020000; |
| pub const SECPKG_FLAG_READONLY_WITH_CHECKSUM: c_ulong = 0x00040000; |
| pub const SECPKG_FLAG_RESTRICTED_TOKENS: c_ulong = 0x00080000; |
| pub const SECPKG_FLAG_NEGO_EXTENDER: c_ulong = 0x00100000; |
| pub const SECPKG_FLAG_NEGOTIABLE2: c_ulong = 0x00200000; |
| pub const SECPKG_FLAG_APPCONTAINER_PASSTHROUGH: c_ulong = 0x00400000; |
| pub const SECPKG_FLAG_APPCONTAINER_CHECKS: c_ulong = 0x00800000; |
| pub const SECPKG_ID_NONE: c_ulong = 0xFFFF; |
| pub const SECPKG_CALLFLAGS_APPCONTAINER: c_ulong = 0x00000001; |
| pub const SECPKG_CALLFLAGS_APPCONTAINER_AUTHCAPABLE: c_ulong = 0x00000002; |
| pub const SECPKG_CALLFLAGS_FORCE_SUPPLIED: c_ulong = 0x00000004; |
| STRUCT!{struct SecBuffer { |
| cbBuffer: c_ulong, |
| BufferType: c_ulong, |
| pvBuffer: *mut c_void, |
| }} |
| pub type PSecBuffer = *mut SecBuffer; |
| STRUCT!{struct SecBufferDesc { |
| ulVersion: c_ulong, |
| cBuffers: c_ulong, |
| pBuffers: PSecBuffer, |
| }} |
| pub type PSecBufferDesc = *mut SecBufferDesc; |
| pub const SECBUFFER_VERSION: c_ulong = 0; |
| pub const SECBUFFER_EMPTY: c_ulong = 0; |
| pub const SECBUFFER_DATA: c_ulong = 1; |
| pub const SECBUFFER_TOKEN: c_ulong = 2; |
| pub const SECBUFFER_PKG_PARAMS: c_ulong = 3; |
| pub const SECBUFFER_MISSING: c_ulong = 4; |
| pub const SECBUFFER_EXTRA: c_ulong = 5; |
| pub const SECBUFFER_STREAM_TRAILER: c_ulong = 6; |
| pub const SECBUFFER_STREAM_HEADER: c_ulong = 7; |
| pub const SECBUFFER_NEGOTIATION_INFO: c_ulong = 8; |
| pub const SECBUFFER_PADDING: c_ulong = 9; |
| pub const SECBUFFER_STREAM: c_ulong = 10; |
| pub const SECBUFFER_MECHLIST: c_ulong = 11; |
| pub const SECBUFFER_MECHLIST_SIGNATURE: c_ulong = 12; |
| pub const SECBUFFER_TARGET: c_ulong = 13; |
| pub const SECBUFFER_CHANNEL_BINDINGS: c_ulong = 14; |
| pub const SECBUFFER_CHANGE_PASS_RESPONSE: c_ulong = 15; |
| pub const SECBUFFER_TARGET_HOST: c_ulong = 16; |
| pub const SECBUFFER_ALERT: c_ulong = 17; |
| pub const SECBUFFER_APPLICATION_PROTOCOLS: c_ulong = 18; |
| pub const SECBUFFER_ATTRMASK: c_ulong = 0xF0000000; |
| pub const SECBUFFER_READONLY: c_ulong = 0x80000000; |
| pub const SECBUFFER_READONLY_WITH_CHECKSUM: c_ulong = 0x10000000; |
| pub const SECBUFFER_RESERVED: c_ulong = 0x60000000; |
| STRUCT!{struct SEC_NEGOTIATION_INFO { |
| Size: c_ulong, |
| NameLength: c_ulong, |
| Name: *mut SEC_WCHAR, |
| Reserved: *mut c_void, |
| }} |
| pub type PSEC_NEGOTIATION_INFO = *mut SEC_NEGOTIATION_INFO; |
| STRUCT!{struct SEC_CHANNEL_BINDINGS { |
| dwInitiatorAddrType: c_ulong, |
| cbInitiatorLength: c_ulong, |
| dwInitiatorOffset: c_ulong, |
| dwAcceptorAddrType: c_ulong, |
| cbAcceptorLength: c_ulong, |
| dwAcceptorOffset: c_ulong, |
| cbApplicationDataLength: c_ulong, |
| dwApplicationDataOffset: c_ulong, |
| }} |
| pub type PSEC_CHANNEL_BINDINGS = *mut SEC_CHANNEL_BINDINGS; |
| ENUM!{enum SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT { |
| SecApplicationProtocolNegotiationExt_None, |
| SecApplicationProtocolNegotiationExt_NPN, |
| SecApplicationProtocolNegotiationExt_ALPN, |
| }} |
| pub type PSEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT = *mut SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT; |
| STRUCT!{struct SEC_APPLICATION_PROTOCOL_LIST { |
| ProtoNegoExt: SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT, |
| ProtocolListSize: c_ushort, |
| ProtocolList: [c_uchar; 0], |
| }} |
| pub type PSEC_APPLICATION_PROTOCOL_LIST = *mut SEC_APPLICATION_PROTOCOL_LIST; |
| STRUCT!{struct SEC_APPLICATION_PROTOCOLS { |
| ProtocolListsSize: c_ulong, |
| ProtocolLists: [SEC_APPLICATION_PROTOCOL_LIST; ANYSIZE_ARRAY], |
| }} |
| pub type PSEC_APPLICATION_PROTOCOLS = *mut SEC_APPLICATION_PROTOCOLS; |
| pub const SECURITY_NATIVE_DREP: c_ulong = 0x00000010; |
| pub const SECURITY_NETWORK_DREP: c_ulong = 0x00000000; |
| pub const SECPKG_CRED_INBOUND: c_ulong = 0x00000001; |
| pub const SECPKG_CRED_OUTBOUND: c_ulong = 0x00000002; |
| pub const SECPKG_CRED_BOTH: c_ulong = 0x00000003; |
| pub const SECPKG_CRED_DEFAULT: c_ulong = 0x00000004; |
| pub const SECPKG_CRED_RESERVED: c_ulong = 0xF0000000; |
| pub const SECPKG_CRED_AUTOLOGON_RESTRICTED: c_ulong = 0x00000010; |
| pub const SECPKG_CRED_PROCESS_POLICY_ONLY: c_ulong = 0x00000020; |
| pub const ISC_REQ_DELEGATE: c_ulong = 0x00000001; |
| pub const ISC_REQ_MUTUAL_AUTH: c_ulong = 0x00000002; |
| pub const ISC_REQ_REPLAY_DETECT: c_ulong = 0x00000004; |
| pub const ISC_REQ_SEQUENCE_DETECT: c_ulong = 0x00000008; |
| pub const ISC_REQ_CONFIDENTIALITY: c_ulong = 0x00000010; |
| pub const ISC_REQ_USE_SESSION_KEY: c_ulong = 0x00000020; |
| pub const ISC_REQ_PROMPT_FOR_CREDS: c_ulong = 0x00000040; |
| pub const ISC_REQ_USE_SUPPLIED_CREDS: c_ulong = 0x00000080; |
| pub const ISC_REQ_ALLOCATE_MEMORY: c_ulong = 0x00000100; |
| pub const ISC_REQ_USE_DCE_STYLE: c_ulong = 0x00000200; |
| pub const ISC_REQ_DATAGRAM: c_ulong = 0x00000400; |
| pub const ISC_REQ_CONNECTION: c_ulong = 0x00000800; |
| pub const ISC_REQ_CALL_LEVEL: c_ulong = 0x00001000; |
| pub const ISC_REQ_FRAGMENT_SUPPLIED: c_ulong = 0x00002000; |
| pub const ISC_REQ_EXTENDED_ERROR: c_ulong = 0x00004000; |
| pub const ISC_REQ_STREAM: c_ulong = 0x00008000; |
| pub const ISC_REQ_INTEGRITY: c_ulong = 0x00010000; |
| pub const ISC_REQ_IDENTIFY: c_ulong = 0x00020000; |
| pub const ISC_REQ_NULL_SESSION: c_ulong = 0x00040000; |
| pub const ISC_REQ_MANUAL_CRED_VALIDATION: c_ulong = 0x00080000; |
| pub const ISC_REQ_RESERVED1: c_ulong = 0x00100000; |
| pub const ISC_REQ_FRAGMENT_TO_FIT: c_ulong = 0x00200000; |
| pub const ISC_REQ_FORWARD_CREDENTIALS: c_ulong = 0x00400000; |
| pub const ISC_REQ_NO_INTEGRITY: c_ulong = 0x00800000; |
| pub const ISC_REQ_USE_HTTP_STYLE: c_ulong = 0x01000000; |
| pub const ISC_REQ_UNVERIFIED_TARGET_NAME: c_ulong = 0x20000000; |
| pub const ISC_REQ_CONFIDENTIALITY_ONLY: c_ulong = 0x40000000; |
| pub const ISC_RET_DELEGATE: c_ulong = 0x00000001; |
| pub const ISC_RET_MUTUAL_AUTH: c_ulong = 0x00000002; |
| pub const ISC_RET_REPLAY_DETECT: c_ulong = 0x00000004; |
| pub const ISC_RET_SEQUENCE_DETECT: c_ulong = 0x00000008; |
| pub const ISC_RET_CONFIDENTIALITY: c_ulong = 0x00000010; |
| pub const ISC_RET_USE_SESSION_KEY: c_ulong = 0x00000020; |
| pub const ISC_RET_USED_COLLECTED_CREDS: c_ulong = 0x00000040; |
| pub const ISC_RET_USED_SUPPLIED_CREDS: c_ulong = 0x00000080; |
| pub const ISC_RET_ALLOCATED_MEMORY: c_ulong = 0x00000100; |
| pub const ISC_RET_USED_DCE_STYLE: c_ulong = 0x00000200; |
| pub const ISC_RET_DATAGRAM: c_ulong = 0x00000400; |
| pub const ISC_RET_CONNECTION: c_ulong = 0x00000800; |
| pub const ISC_RET_INTERMEDIATE_RETURN: c_ulong = 0x00001000; |
| pub const ISC_RET_CALL_LEVEL: c_ulong = 0x00002000; |
| pub const ISC_RET_EXTENDED_ERROR: c_ulong = 0x00004000; |
| pub const ISC_RET_STREAM: c_ulong = 0x00008000; |
| pub const ISC_RET_INTEGRITY: c_ulong = 0x00010000; |
| pub const ISC_RET_IDENTIFY: c_ulong = 0x00020000; |
| pub const ISC_RET_NULL_SESSION: c_ulong = 0x00040000; |
| pub const ISC_RET_MANUAL_CRED_VALIDATION: c_ulong = 0x00080000; |
| pub const ISC_RET_RESERVED1: c_ulong = 0x00100000; |
| pub const ISC_RET_FRAGMENT_ONLY: c_ulong = 0x00200000; |
| pub const ISC_RET_FORWARD_CREDENTIALS: c_ulong = 0x00400000; |
| pub const ISC_RET_USED_HTTP_STYLE: c_ulong = 0x01000000; |
| pub const ISC_RET_NO_ADDITIONAL_TOKEN: c_ulong = 0x02000000; |
| pub const ISC_RET_REAUTHENTICATION: c_ulong = 0x08000000; |
| pub const ISC_RET_CONFIDENTIALITY_ONLY: c_ulong = 0x40000000; |
| pub const ASC_REQ_DELEGATE: c_ulong = 0x00000001; |
| pub const ASC_REQ_MUTUAL_AUTH: c_ulong = 0x00000002; |
| pub const ASC_REQ_REPLAY_DETECT: c_ulong = 0x00000004; |
| pub const ASC_REQ_SEQUENCE_DETECT: c_ulong = 0x00000008; |
| pub const ASC_REQ_CONFIDENTIALITY: c_ulong = 0x00000010; |
| pub const ASC_REQ_USE_SESSION_KEY: c_ulong = 0x00000020; |
| pub const ASC_REQ_SESSION_TICKET: c_ulong = 0x00000040; |
| pub const ASC_REQ_ALLOCATE_MEMORY: c_ulong = 0x00000100; |
| pub const ASC_REQ_USE_DCE_STYLE: c_ulong = 0x00000200; |
| pub const ASC_REQ_DATAGRAM: c_ulong = 0x00000400; |
| pub const ASC_REQ_CONNECTION: c_ulong = 0x00000800; |
| pub const ASC_REQ_CALL_LEVEL: c_ulong = 0x00001000; |
| pub const ASC_REQ_EXTENDED_ERROR: c_ulong = 0x00008000; |
| pub const ASC_REQ_STREAM: c_ulong = 0x00010000; |
| pub const ASC_REQ_INTEGRITY: c_ulong = 0x00020000; |
| pub const ASC_REQ_LICENSING: c_ulong = 0x00040000; |
| pub const ASC_REQ_IDENTIFY: c_ulong = 0x00080000; |
| pub const ASC_REQ_ALLOW_NULL_SESSION: c_ulong = 0x00100000; |
| pub const ASC_REQ_ALLOW_NON_USER_LOGONS: c_ulong = 0x00200000; |
| pub const ASC_REQ_ALLOW_CONTEXT_REPLAY: c_ulong = 0x00400000; |
| pub const ASC_REQ_FRAGMENT_TO_FIT: c_ulong = 0x00800000; |
| pub const ASC_REQ_FRAGMENT_SUPPLIED: c_ulong = 0x00002000; |
| pub const ASC_REQ_NO_TOKEN: c_ulong = 0x01000000; |
| pub const ASC_REQ_PROXY_BINDINGS: c_ulong = 0x04000000; |
| pub const ASC_REQ_ALLOW_MISSING_BINDINGS: c_ulong = 0x10000000; |
| pub const ASC_RET_DELEGATE: c_ulong = 0x00000001; |
| pub const ASC_RET_MUTUAL_AUTH: c_ulong = 0x00000002; |
| pub const ASC_RET_REPLAY_DETECT: c_ulong = 0x00000004; |
| pub const ASC_RET_SEQUENCE_DETECT: c_ulong = 0x00000008; |
| pub const ASC_RET_CONFIDENTIALITY: c_ulong = 0x00000010; |
| pub const ASC_RET_USE_SESSION_KEY: c_ulong = 0x00000020; |
| pub const ASC_RET_SESSION_TICKET: c_ulong = 0x00000040; |
| pub const ASC_RET_ALLOCATED_MEMORY: c_ulong = 0x00000100; |
| pub const ASC_RET_USED_DCE_STYLE: c_ulong = 0x00000200; |
| pub const ASC_RET_DATAGRAM: c_ulong = 0x00000400; |
| pub const ASC_RET_CONNECTION: c_ulong = 0x00000800; |
| pub const ASC_RET_CALL_LEVEL: c_ulong = 0x00002000; |
| pub const ASC_RET_THIRD_LEG_FAILED: c_ulong = 0x00004000; |
| pub const ASC_RET_EXTENDED_ERROR: c_ulong = 0x00008000; |
| pub const ASC_RET_STREAM: c_ulong = 0x00010000; |
| pub const ASC_RET_INTEGRITY: c_ulong = 0x00020000; |
| pub const ASC_RET_LICENSING: c_ulong = 0x00040000; |
| pub const ASC_RET_IDENTIFY: c_ulong = 0x00080000; |
| pub const ASC_RET_NULL_SESSION: c_ulong = 0x00100000; |
| pub const ASC_RET_ALLOW_NON_USER_LOGONS: c_ulong = 0x00200000; |
| pub const ASC_RET_ALLOW_CONTEXT_REPLAY: c_ulong = 0x00400000; |
| pub const ASC_RET_FRAGMENT_ONLY: c_ulong = 0x00800000; |
| pub const ASC_RET_NO_TOKEN: c_ulong = 0x01000000; |
| pub const ASC_RET_NO_ADDITIONAL_TOKEN: c_ulong = 0x02000000; |
| pub const SECPKG_CRED_ATTR_NAMES: c_ulong = 1; |
| pub const SECPKG_CRED_ATTR_SSI_PROVIDER: c_ulong = 2; |
| pub const SECPKG_CRED_ATTR_KDC_PROXY_SETTINGS: c_ulong = 3; |
| pub const SECPKG_CRED_ATTR_CERT: c_ulong = 4; |
| STRUCT!{struct SecPkgCredentials_NamesW { |
| sUserName: *mut SEC_WCHAR, |
| }} |
| pub type PSecPkgCredentials_NamesW = *mut SecPkgCredentials_NamesW; |
| STRUCT!{struct SecPkgCredentials_NamesA { |
| sUserName: *mut SEC_CHAR, |
| }} |
| pub type PSecPkgCredentials_NamesA = *mut SecPkgCredentials_NamesA; |
| STRUCT!{struct SecPkgCredentials_SSIProviderW { |
| sProviderName: *mut SEC_WCHAR, |
| ProviderInfoLength: c_ulong, |
| ProviderInfo: *mut c_char, |
| }} |
| pub type PSecPkgCredentials_SSIProviderW = *mut SecPkgCredentials_SSIProviderW; |
| STRUCT!{struct SecPkgCredentials_SSIProviderA { |
| sProviderName: *mut SEC_CHAR, |
| ProviderInfoLength: c_ulong, |
| ProviderInfo: *mut c_char, |
| }} |
| pub type PSecPkgCredentials_SSIProviderA = *mut SecPkgCredentials_SSIProviderA; |
| pub const KDC_PROXY_SETTINGS_V1: ULONG = 1; |
| pub const KDC_PROXY_SETTINGS_FLAGS_FORCEPROXY: ULONG = 0x1; |
| STRUCT!{struct SecPkgCredentials_KdcProxySettingsW { |
| Version: ULONG, |
| Flags: ULONG, |
| ProxyServerOffset: USHORT, |
| ProxyServerLength: USHORT, |
| ClientTlsCredOffset: USHORT, |
| ClientTlsCredLength: USHORT, |
| }} |
| pub type PSecPkgCredentials_KdcProxySettingsW = *mut SecPkgCredentials_KdcProxySettingsW; |
| STRUCT!{struct SecPkgCredentials_Cert { |
| EncodedCertSize: c_ulong, |
| EncodedCert: *mut c_uchar, |
| }} |
| pub type PSecPkgCredentials_Cert = *mut SecPkgCredentials_Cert; |
| pub const SECPKG_ATTR_SIZES: c_ulong = 0; |
| pub const SECPKG_ATTR_NAMES: c_ulong = 1; |
| pub const SECPKG_ATTR_LIFESPAN: c_ulong = 2; |
| pub const SECPKG_ATTR_DCE_INFO: c_ulong = 3; |
| pub const SECPKG_ATTR_STREAM_SIZES: c_ulong = 4; |
| pub const SECPKG_ATTR_KEY_INFO: c_ulong = 5; |
| pub const SECPKG_ATTR_AUTHORITY: c_ulong = 6; |
| pub const SECPKG_ATTR_PROTO_INFO: c_ulong = 7; |
| pub const SECPKG_ATTR_PASSWORD_EXPIRY: c_ulong = 8; |
| pub const SECPKG_ATTR_SESSION_KEY: c_ulong = 9; |
| pub const SECPKG_ATTR_PACKAGE_INFO: c_ulong = 10; |
| pub const SECPKG_ATTR_USER_FLAGS: c_ulong = 11; |
| pub const SECPKG_ATTR_NEGOTIATION_INFO: c_ulong = 12; |
| pub const SECPKG_ATTR_NATIVE_NAMES: c_ulong = 13; |
| pub const SECPKG_ATTR_FLAGS: c_ulong = 14; |
| pub const SECPKG_ATTR_USE_VALIDATED: c_ulong = 15; |
| pub const SECPKG_ATTR_CREDENTIAL_NAME: c_ulong = 16; |
| pub const SECPKG_ATTR_TARGET_INFORMATION: c_ulong = 17; |
| pub const SECPKG_ATTR_ACCESS_TOKEN: c_ulong = 18; |
| pub const SECPKG_ATTR_TARGET: c_ulong = 19; |
| pub const SECPKG_ATTR_AUTHENTICATION_ID: c_ulong = 20; |
| pub const SECPKG_ATTR_LOGOFF_TIME: c_ulong = 21; |
| pub const SECPKG_ATTR_NEGO_KEYS: c_ulong = 22; |
| pub const SECPKG_ATTR_PROMPTING_NEEDED: c_ulong = 24; |
| pub const SECPKG_ATTR_UNIQUE_BINDINGS: c_ulong = 25; |
| pub const SECPKG_ATTR_ENDPOINT_BINDINGS: c_ulong = 26; |
| pub const SECPKG_ATTR_CLIENT_SPECIFIED_TARGET: c_ulong = 27; |
| pub const SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS: c_ulong = 30; |
| pub const SECPKG_ATTR_NEGO_PKG_INFO: c_ulong = 31; |
| pub const SECPKG_ATTR_NEGO_STATUS: c_ulong = 32; |
| pub const SECPKG_ATTR_CONTEXT_DELETED: c_ulong = 33; |
| pub const SECPKG_ATTR_DTLS_MTU: c_ulong = 34; |
| pub const SECPKG_ATTR_DATAGRAM_SIZES: c_ulong = SECPKG_ATTR_STREAM_SIZES; |
| pub const SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES: c_ulong = 128; |
| pub const SECPKG_ATTR_APPLICATION_PROTOCOL: c_ulong = 35; |
| STRUCT!{struct SecPkgContext_SubjectAttributes { |
| AttributeInfo: *mut c_void, |
| }} |
| pub type PSecPkgContext_SubjectAttributes = *mut SecPkgContext_SubjectAttributes; |
| pub const SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS: c_ulong = 0x1; |
| pub const SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM: c_ulong = 0x2; |
| ENUM!{enum SECPKG_CRED_CLASS { |
| SecPkgCredClass_None = 0, |
| SecPkgCredClass_Ephemeral = 10, |
| SecPkgCredClass_PersistedGeneric = 20, |
| SecPkgCredClass_PersistedSpecific = 30, |
| SecPkgCredClass_Explicit = 40, |
| }} |
| pub type PSECPKG_CRED_CLASS = *mut SECPKG_CRED_CLASS; |
| STRUCT!{struct SecPkgContext_CredInfo { |
| CredClass: SECPKG_CRED_CLASS, |
| IsPromptingNeeded: c_ulong, |
| }} |
| pub type PSecPkgContext_CredInfo = *mut SecPkgContext_CredInfo; |
| STRUCT!{struct SecPkgContext_NegoPackageInfo { |
| PackageMask: c_ulong, |
| }} |
| pub type PSecPkgContext_NegoPackageInfo = *mut SecPkgContext_NegoPackageInfo; |
| STRUCT!{struct SecPkgContext_NegoStatus { |
| LastStatus: c_ulong, |
| }} |
| pub type PSecPkgContext_NegoStatus = *mut SecPkgContext_NegoStatus; |
| STRUCT!{struct SecPkgContext_Sizes { |
| cbMaxToken: c_ulong, |
| cbMaxSignature: c_ulong, |
| cbBlockSize: c_ulong, |
| cbSecurityTrailer: c_ulong, |
| }} |
| pub type PSecPkgContext_Sizes = *mut SecPkgContext_Sizes; |
| STRUCT!{struct SecPkgContext_StreamSizes { |
| cbHeader: c_ulong, |
| cbTrailer: c_ulong, |
| cbMaximumMessage: c_ulong, |
| cBuffers: c_ulong, |
| cbBlockSize: c_ulong, |
| }} |
| pub type PSecPkgContext_StreamSizes = *mut SecPkgContext_StreamSizes; |
| pub type SecPkgContext_DatagramSizes = SecPkgContext_StreamSizes; |
| pub type PSecPkgContext_DatagramSizes = PSecPkgContext_StreamSizes; |
| STRUCT!{struct SecPkgContext_NamesW { |
| sUserName: *mut SEC_WCHAR, |
| }} |
| pub type PSecPkgContext_NamesW = *mut SecPkgContext_NamesW; |
| ENUM!{enum SECPKG_ATTR_LCT_STATUS { |
| SecPkgAttrLastClientTokenYes, |
| SecPkgAttrLastClientTokenNo, |
| SecPkgAttrLastClientTokenMaybe, |
| }} |
| pub type PSECPKG_ATTR_LCT_STATUS = *mut SECPKG_ATTR_LCT_STATUS; |
| STRUCT!{struct SecPkgContext_LastClientTokenStatus { |
| LastClientTokenStatus: SECPKG_ATTR_LCT_STATUS, |
| }} |
| pub type PSecPkgContext_LastClientTokenStatus = *mut SecPkgContext_LastClientTokenStatus; |
| STRUCT!{struct SecPkgContext_NamesA { |
| sUserName: *mut SEC_CHAR, |
| }} |
| pub type PSecPkgContext_NamesA = *mut SecPkgContext_NamesA; |
| STRUCT!{struct SecPkgContext_Lifespan { |
| tsStart: TimeStamp, |
| tsExpiry: TimeStamp, |
| }} |
| pub type PSecPkgContext_Lifespan = *mut SecPkgContext_Lifespan; |
| STRUCT!{struct SecPkgContext_DceInfo { |
| AuthzSvc: c_ulong, |
| pPac: *mut c_void, |
| }} |
| pub type PSecPkgContext_DceInfo = *mut SecPkgContext_DceInfo; |
| STRUCT!{struct SecPkgContext_KeyInfoA { |
| sSignatureAlgorithmName: *mut SEC_CHAR, |
| sEncryptAlgorithmName: *mut SEC_CHAR, |
| KeySize: c_ulong, |
| SignatureAlgorithm: c_ulong, |
| EncryptAlgorithm: c_ulong, |
| }} |
| pub type PSecPkgContext_KeyInfoA = *mut SecPkgContext_KeyInfoA; |
| STRUCT!{struct SecPkgContext_KeyInfoW { |
| sSignatureAlgorithmName: *mut SEC_WCHAR, |
| sEncryptAlgorithmName: *mut SEC_WCHAR, |
| KeySize: c_ulong, |
| SignatureAlgorithm: c_ulong, |
| EncryptAlgorithm: c_ulong, |
| }} |
| pub type PSecPkgContext_KeyInfoW = *mut SecPkgContext_KeyInfoW; |
| STRUCT!{struct SecPkgContext_AuthorityA { |
| sAuthorityName: *mut SEC_CHAR, |
| }} |
| pub type PSecPkgContext_AuthorityA = *mut SecPkgContext_AuthorityA; |
| STRUCT!{struct SecPkgContext_AuthorityW { |
| sAuthorityName: *mut SEC_WCHAR, |
| }} |
| pub type PSecPkgContext_AuthorityW = *mut SecPkgContext_AuthorityW; |
| STRUCT!{struct SecPkgContext_ProtoInfoA { |
| sProtocolName: *mut SEC_CHAR, |
| majorVersion: c_ulong, |
| minorVersion: c_ulong, |
| }} |
| pub type PSecPkgContext_ProtoInfoA = *mut SecPkgContext_ProtoInfoA; |
| STRUCT!{struct SecPkgContext_ProtoInfoW { |
| sProtocolName: *mut SEC_WCHAR, |
| majorVersion: c_ulong, |
| minorVersion: c_ulong, |
| }} |
| pub type PSecPkgContext_ProtoInfoW = *mut SecPkgContext_ProtoInfoW; |
| STRUCT!{struct SecPkgContext_PasswordExpiry { |
| tsPasswordExpires: TimeStamp, |
| }} |
| pub type PSecPkgContext_PasswordExpiry = *mut SecPkgContext_PasswordExpiry; |
| STRUCT!{struct SecPkgContext_LogoffTime { |
| tsLogoffTime: TimeStamp, |
| }} |
| pub type PSecPkgContext_LogoffTime = *mut SecPkgContext_LogoffTime; |
| STRUCT!{struct SecPkgContext_SessionKey { |
| SessionKeyLength: c_ulong, |
| SessionKey: *mut c_uchar, |
| }} |
| pub type PSecPkgContext_SessionKey = *mut SecPkgContext_SessionKey; |
| STRUCT!{struct SecPkgContext_NegoKeys { |
| KeyType: c_ulong, |
| KeyLength: c_ushort, |
| KeyValue: *mut c_uchar, |
| VerifyKeyType: c_ulong, |
| VerifyKeyLength: c_ushort, |
| VerifyKeyValue: *mut c_uchar, |
| }} |
| pub type PSecPkgContext_NegoKeys = *mut SecPkgContext_NegoKeys; |
| STRUCT!{struct SecPkgContext_PackageInfoW { |
| PackageInfo: PSecPkgInfoW, |
| }} |
| pub type PSecPkgContext_PackageInfoW = *mut SecPkgContext_PackageInfoW; |
| STRUCT!{struct SecPkgContext_PackageInfoA { |
| PackageInfo: PSecPkgInfoA, |
| }} |
| pub type PSecPkgContext_PackageInfoA = *mut SecPkgContext_PackageInfoA; |
| STRUCT!{struct SecPkgContext_UserFlags { |
| UserFlags: c_ulong, |
| }} |
| pub type PSecPkgContext_UserFlags = *mut SecPkgContext_UserFlags; |
| STRUCT!{struct SecPkgContext_Flags { |
| Flags: c_ulong, |
| }} |
| pub type PSecPkgContext_Flags = *mut SecPkgContext_Flags; |
| STRUCT!{struct SecPkgContext_NegotiationInfoA { |
| PackageInfo: PSecPkgInfoA, |
| NegotiationState: c_ulong, |
| }} |
| pub type PSecPkgContext_NegotiationInfoA = *mut SecPkgContext_NegotiationInfoA; |
| STRUCT!{struct SecPkgContext_NegotiationInfoW { |
| PackageInfo: PSecPkgInfoW, |
| NegotiationState: c_ulong, |
| }} |
| pub type PSecPkgContext_NegotiationInfoW = *mut SecPkgContext_NegotiationInfoW; |
| pub const SECPKG_NEGOTIATION_COMPLETE: c_ulong = 0; |
| pub const SECPKG_NEGOTIATION_OPTIMISTIC: c_ulong = 1; |
| pub const SECPKG_NEGOTIATION_IN_PROGRESS: c_ulong = 2; |
| pub const SECPKG_NEGOTIATION_DIRECT: c_ulong = 3; |
| pub const SECPKG_NEGOTIATION_TRY_MULTICRED: c_ulong = 4; |
| STRUCT!{struct SecPkgContext_NativeNamesW { |
| sClientName: *mut SEC_WCHAR, |
| sServerName: *mut SEC_WCHAR, |
| }} |
| pub type PSecPkgContext_NativeNamesW = *mut SecPkgContext_NativeNamesW; |
| STRUCT!{struct SecPkgContext_NativeNamesA { |
| sClientName: *mut SEC_CHAR, |
| sServerName: *mut SEC_CHAR, |
| }} |
| pub type PSecPkgContext_NativeNamesA = *mut SecPkgContext_NativeNamesA; |
| STRUCT!{struct SecPkgContext_CredentialNameW { |
| CredentialType: c_ulong, |
| sCredentialName: *mut SEC_WCHAR, |
| }} |
| pub type PSecPkgContext_CredentialNameW = *mut SecPkgContext_CredentialNameW; |
| STRUCT!{struct SecPkgContext_CredentialNameA { |
| CredentialType: c_ulong, |
| sCredentialName: *mut SEC_CHAR, |
| }} |
| pub type PSecPkgContext_CredentialNameA = *mut SecPkgContext_CredentialNameA; |
| STRUCT!{struct SecPkgContext_AccessToken { |
| AccessToken: *mut c_void, |
| }} |
| pub type PSecPkgContext_AccessToken = *mut SecPkgContext_AccessToken; |
| STRUCT!{struct SecPkgContext_TargetInformation { |
| MarshalledTargetInfoLength: c_ulong, |
| MarshalledTargetInfo: *mut c_uchar, |
| }} |
| pub type PSecPkgContext_TargetInformation = *mut SecPkgContext_TargetInformation; |
| STRUCT!{struct SecPkgContext_AuthzID { |
| AuthzIDLength: c_ulong, |
| AuthzID: *mut c_char, |
| }} |
| pub type PSecPkgContext_AuthzID = *mut SecPkgContext_AuthzID; |
| STRUCT!{struct SecPkgContext_Target { |
| TargetLength: c_ulong, |
| Target: *mut c_char, |
| }} |
| pub type PSecPkgContext_Target = *mut SecPkgContext_Target; |
| STRUCT!{struct SecPkgContext_ClientSpecifiedTarget { |
| sTargetName: *mut SEC_WCHAR, |
| }} |
| pub type PSecPkgContext_ClientSpecifiedTarget = *mut SecPkgContext_ClientSpecifiedTarget; |
| STRUCT!{struct SecPkgContext_Bindings { |
| BindingsLength: c_ulong, |
| Bindings: *mut SEC_CHANNEL_BINDINGS, |
| }} |
| pub type PSecPkgContext_Bindings = *mut SecPkgContext_Bindings; |
| ENUM!{enum SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS { |
| SecApplicationProtocolNegotiationStatus_None, |
| SecApplicationProtocolNegotiationStatus_Success, |
| SecApplicationProtocolNegotiationStatus_SelectedClientOnly, |
| }} |
| pub type PSEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS = |
| *mut SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS; |
| pub const MAX_PROTOCOL_ID_SIZE: usize = 0xff; |
| STRUCT!{struct SecPkgContext_ApplicationProtocol { |
| ProtoNegoStatus: SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS, |
| ProtoNegoExt: SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT, |
| ProtocolIdSize: c_uchar, |
| ProtocolId: [c_uchar; MAX_PROTOCOL_ID_SIZE], |
| }} |
| pub type PSecPkgContext_ApplicationProtocol = *mut SecPkgContext_ApplicationProtocol; |
| FN!{stdcall SEC_GET_KEY_FN( |
| Arg: *mut c_void, |
| Principal: *mut c_void, |
| KeyVer: c_ulong, |
| Key: *mut *mut c_void, |
| Status: *mut SECURITY_STATUS, |
| ) -> ()} |
| pub const SECPKG_CONTEXT_EXPORT_RESET_NEW: c_ulong = 0x00000001; |
| pub const SECPKG_CONTEXT_EXPORT_DELETE_OLD: c_ulong = 0x00000002; |
| pub const SECPKG_CONTEXT_EXPORT_TO_KERNEL: c_ulong = 0x00000004; |
| extern "system" { |
| pub fn 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_STATUS; |
| } |
| FN!{stdcall ACQUIRE_CREDENTIALS_HANDLE_FN_W( |
| *mut SEC_WCHAR, |
| *mut SEC_WCHAR, |
| c_ulong, |
| *mut c_void, |
| *mut c_void, |
| SEC_GET_KEY_FN, |
| *mut c_void, |
| PCredHandle, |
| PTimeStamp, |
| ) -> SECURITY_STATUS} |
| extern "system" { |
| pub fn 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_STATUS; |
| } |
| FN!{stdcall ACQUIRE_CREDENTIALS_HANDLE_FN_A( |
| *mut SEC_CHAR, |
| *mut SEC_CHAR, |
| c_ulong, |
| *mut c_void, |
| *mut c_void, |
| SEC_GET_KEY_FN, |
| *mut c_void, |
| PCredHandle, |
| PTimeStamp, |
| ) -> SECURITY_STATUS} |
| extern "system" { |
| pub fn FreeCredentialsHandle( |
| phCredential: PCredHandle, |
| ) -> SECURITY_STATUS; |
| } |
| FN!{stdcall FREE_CREDENTIALS_HANDLE_FN( |
| PCredHandle, |
| ) -> SECURITY_STATUS} |
| extern "system" { |
| pub fn 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_STATUS; |
| } |
| FN!{stdcall ADD_CREDENTIALS_FN_W( |
| PCredHandle, |
| *mut SEC_WCHAR, |
| *mut SEC_WCHAR, |
| c_ulong, |
| *mut c_void, |
| SEC_GET_KEY_FN, |
| *mut c_void, |
| PTimeStamp, |
| ) -> SECURITY_STATUS} |
| extern "system" { |
| pub fn 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_STATUS; |
| } |
| FN!{stdcall ADD_CREDENTIALS_FN_A( |
| PCredHandle, |
| *mut SEC_CHAR, |
| *mut SEC_CHAR, |
| c_ulong, |
| *mut c_void, |
| SEC_GET_KEY_FN, |
| *mut c_void, |
| PTimeStamp, |
| ) -> SECURITY_STATUS} |
| extern "system" { |
| // pub fn spiCreateAsyncContext(); |
| // pub fn SspiFreeAsyncContext(); |
| // pub fn SspiReinitAsyncContext(); |
| // pub fn SspiSetAsyncNotifyCallback(); |
| // pub fn SspiAsyncContextRequiresNotify(); |
| // pub fn SspiGetAsyncCallStatus(); |
| // pub fn SspiAcquireCredentialsHandleAsyncW(); |
| // pub fn SspiAcquireCredentialsHandleAsyncA(); |
| // pub fn SspiInitializeSecurityContextAsyncW(); |
| // pub fn SspiInitializeSecurityContextAsyncA(); |
| // pub fn SspiAcceptSecurityContextAsync(); |
| // pub fn SspiFreeCredentialsHandleAsync(); |
| // pub fn SspiDeleteSecurityContextAsync(); |
| pub fn 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_STATUS; |
| } |
| FN!{stdcall CHANGE_PASSWORD_FN_W( |
| *mut SEC_WCHAR, |
| *mut SEC_WCHAR, |
| *mut SEC_WCHAR, |
| *mut SEC_WCHAR, |
| *mut SEC_WCHAR, |
| BOOLEAN, |
| c_ulong, |
| PSecBufferDesc, |
| ) -> SECURITY_STATUS} |
| extern "system" { |
| pub fn 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_STATUS; |
| } |
| FN!{stdcall CHANGE_PASSWORD_FN_A( |
| *mut SEC_CHAR, |
| *mut SEC_CHAR, |
| *mut SEC_CHAR, |
| *mut SEC_CHAR, |
| *mut SEC_CHAR, |
| BOOLEAN, |
| c_ulong, |
| PSecBufferDesc, |
| ) -> SECURITY_STATUS} |
| extern "system" { |
| pub fn 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_STATUS; |
| } |
| // INITIALIZE_SECURITY_CONTEXT_FN_W |
| extern "system" { |
| pub fn 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_STATUS; |
| pub fn AcceptSecurityContext( |
| phCredential: PCredHandle, |
| phContext: PCtxtHandle, |
| pInput: PSecBufferDesc, |
| fContextReq: c_ulong, |
| TargetDataRep: c_ulong, |
| phNewContext: PCtxtHandle, |
| pOutput: PSecBufferDesc, |
| pfContextAttr: *mut c_ulong, |
| ptsExpiry: PTimeStamp, |
| ) -> SECURITY_STATUS; |
| pub fn CompleteAuthToken( |
| phContext: PCtxtHandle, |
| pToken: PSecBufferDesc, |
| ) -> SECURITY_STATUS; |
| pub fn ImpersonateSecurityContext( |
| phContext: PCtxtHandle, |
| ) -> SECURITY_STATUS; |
| pub fn RevertSecurityContext( |
| phContext: PCtxtHandle, |
| ) -> SECURITY_STATUS; |
| pub fn QuerySecurityContextToken( |
| phContext: PCtxtHandle, |
| Token: *mut *mut c_void, |
| ) -> SECURITY_STATUS; |
| pub fn DeleteSecurityContext( |
| phContext: PCtxtHandle, |
| ) -> SECURITY_STATUS; |
| pub fn ApplyControlToken( |
| phContext: PCtxtHandle, |
| pInput: PSecBufferDesc, |
| ) -> SECURITY_STATUS; |
| pub fn QueryContextAttributesW( |
| phContext: PCtxtHandle, |
| ulAttribute: c_ulong, |
| pBuffer: *mut c_void, |
| ) -> SECURITY_STATUS; |
| // pub fn QueryContextAttributesExW(); |
| pub fn QueryContextAttributesA( |
| phContext: PCtxtHandle, |
| ulAttribute: c_ulong, |
| pBuffer: *mut c_void, |
| ) -> SECURITY_STATUS; |
| // pub fn QueryContextAttributesExA(); |
| pub fn SetContextAttributesW( |
| phContext: PCtxtHandle, |
| ulAttribute: c_ulong, |
| pBuffer: *mut c_void, |
| cbBuffer: c_ulong, |
| ) -> SECURITY_STATUS; |
| pub fn SetContextAttributesA( |
| phContext: PCtxtHandle, |
| ulAttribute: c_ulong, |
| pBuffer: *mut c_void, |
| cbBuffer: c_ulong, |
| ) -> SECURITY_STATUS; |
| pub fn QueryCredentialsAttributesW( |
| phCredential: PCredHandle, |
| ulAttribute: c_ulong, |
| pBuffer: *mut c_void, |
| ) -> SECURITY_STATUS; |
| // pub fn QueryCredentialsAttributesExW(); |
| pub fn QueryCredentialsAttributesA( |
| phCredential: PCredHandle, |
| ulAttribute: c_ulong, |
| pBuffer: *mut c_void, |
| ) -> SECURITY_STATUS; |
| // pub fn QueryCredentialsAttributesExA(); |
| pub fn SetCredentialsAttributesW( |
| phCredential: PCredHandle, |
| ulAttribute: c_ulong, |
| pBuffer: *mut c_void, |
| cbBuffer: c_ulong, |
| ) -> SECURITY_STATUS; |
| pub fn SetCredentialsAttributesA( |
| phCredential: PCredHandle, |
| ulAttribute: c_ulong, |
| pBuffer: *mut c_void, |
| cbBuffer: c_ulong, |
| ) -> SECURITY_STATUS; |
| pub fn FreeContextBuffer( |
| pvContextBuffer: PVOID, |
| ) -> SECURITY_STATUS; |
| pub fn MakeSignature( |
| phContext: PCtxtHandle, |
| fQOP: c_ulong, |
| pMessage: PSecBufferDesc, |
| MessageSeqNo: c_ulong, |
| ) -> SECURITY_STATUS; |
| pub fn VerifySignature( |
| phContext: PCtxtHandle, |
| pMessage: PSecBufferDesc, |
| MessageSeqNo: c_ulong, |
| pfQOP: *mut c_ulong, |
| ) -> SECURITY_STATUS; |
| pub fn EncryptMessage( |
| phContext: PCtxtHandle, |
| fQOP: c_ulong, |
| pMessage: PSecBufferDesc, |
| MessageSeqNo: c_ulong, |
| ) -> SECURITY_STATUS; |
| pub fn DecryptMessage( |
| phContext: PCtxtHandle, |
| pMessage: PSecBufferDesc, |
| MessageSeqNo: c_ulong, |
| pfQOP: *mut c_ulong, |
| ) -> SECURITY_STATUS; |
| pub fn EnumerateSecurityPackagesW( |
| pcPackages: *mut c_ulong, |
| ppPackageInfo: *mut PSecPkgInfoW, |
| ) -> SECURITY_STATUS; |
| pub fn EnumerateSecurityPackagesA( |
| pcPackages: *mut c_ulong, |
| ppPackageInfo: *mut PSecPkgInfoA, |
| ) -> SECURITY_STATUS; |
| pub fn QuerySecurityPackageInfoW( |
| pszPackageName: LPWSTR, |
| ppPackageInfo: *mut PSecPkgInfoW, |
| ) -> SECURITY_STATUS; |
| pub fn QuerySecurityPackageInfoA( |
| pszPackageName: LPSTR, |
| ppPackageInfo: *mut PSecPkgInfoA, |
| ) -> SECURITY_STATUS; |
| } |
| ENUM!{enum SecDelegationType { |
| SecFull, |
| SecService, |
| SecTree, |
| SecDirectory, |
| SecObject, |
| }} |
| pub type PSecDelegationType = *mut SecDelegationType; |
| extern "system" { |
| // pub fn DelegateSecurityContext(); |
| pub fn ExportSecurityContext( |
| phContext: PCtxtHandle, |
| fFlags: ULONG, |
| pPackedContext: PSecBuffer, |
| pToken: *mut *mut c_void, |
| ) -> SECURITY_STATUS; |
| pub fn ImportSecurityContextW( |
| pszPackage: LPWSTR, |
| pPackedContext: PSecBuffer, |
| Token: *mut c_void, |
| phContext: PCtxtHandle, |
| ) -> SECURITY_STATUS; |
| pub fn ImportSecurityContextA( |
| pszPackage: LPSTR, |
| pPackedContext: PSecBuffer, |
| Token: *mut c_void, |
| phContext: PCtxtHandle, |
| ) -> SECURITY_STATUS; |
| // pub fn SecMakeSPN(); |
| // pub fn SecMakeSPNEx(); |
| // pub fn SecMakeSPNEx2(); |
| // pub fn SecLookupAccountSid(); |
| // pub fn SecLookupAccountName(); |
| // pub fn SecLookupWellKnownSid(); |
| } |
| extern "system" { |
| // pub fn InitSecurityInterfaceA(); |
| // pub fn InitSecurityInterfaceW(); |
| // pub fn SaslEnumerateProfilesA(); |
| // pub fn SaslEnumerateProfilesW(); |
| // pub fn SaslGetProfilePackageA(); |
| // pub fn SaslGetProfilePackageW(); |
| // pub fn SaslIdentifyPackageA(); |
| // pub fn SaslIdentifyPackageW(); |
| // pub fn SaslInitializeSecurityContextW(); |
| // pub fn SaslInitializeSecurityContextA(); |
| // pub fn SaslAcceptSecurityContext(); |
| // pub fn SaslSetContextOption(); |
| // pub fn SaslGetContextOption(); |
| } |
| pub type PSEC_WINNT_AUTH_IDENTITY_OPAQUE = PVOID; |
| extern "system" { |
| pub fn 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_ulong; |
| pub fn 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_ulong; |
| } |
| STRUCT!{struct SEC_WINNT_AUTH_BYTE_VECTOR { |
| ByteArrayOffset: c_ulong, |
| ByteArrayLength: c_ushort, |
| }} |
| pub type PSEC_WINNT_AUTH_BYTE_VECTOR = *mut SEC_WINNT_AUTH_BYTE_VECTOR; |
| STRUCT!{struct SEC_WINNT_AUTH_DATA { |
| CredType: GUID, |
| CredData: SEC_WINNT_AUTH_BYTE_VECTOR, |
| }} |
| pub type PSEC_WINNT_AUTH_DATA = *mut SEC_WINNT_AUTH_DATA; |
| STRUCT!{struct SEC_WINNT_AUTH_PACKED_CREDENTIALS { |
| cbHeaderLength: c_ushort, |
| cbStructureLength: c_ushort, |
| AuthData: SEC_WINNT_AUTH_DATA, |
| }} |
| pub type PSEC_WINNT_AUTH_PACKED_CREDENTIALS = *mut SEC_WINNT_AUTH_PACKED_CREDENTIALS; |
| DEFINE_GUID!{SEC_WINNT_AUTH_DATA_TYPE_PASSWORD, |
| 0x28bfc32f, 0x10f6, 0x4738, 0x98, 0xd1, 0x1a, 0xc0, 0x61, 0xdf, 0x71, 0x6a} |
| DEFINE_GUID!{SEC_WINNT_AUTH_DATA_TYPE_CERT, |
| 0x235f69ad, 0x73fb, 0x4dbc, 0x82, 0x3, 0x6, 0x29, 0xe7, 0x39, 0x33, 0x9b} |
| STRUCT!{struct SEC_WINNT_AUTH_DATA_PASSWORD { |
| UnicodePassword: SEC_WINNT_AUTH_BYTE_VECTOR, |
| }} |
| pub type PSEC_WINNT_AUTH_DATA_PASSWORD = *mut SEC_WINNT_AUTH_DATA_PASSWORD; |
| DEFINE_GUID!{SEC_WINNT_AUTH_DATA_TYPE_CSP_DATA, |
| 0x68fd9879, 0x79c, 0x4dfe, 0x82, 0x81, 0x57, 0x8a, 0xad, 0xc1, 0xc1, 0x0} |
| // GUID SEC_WINNT_AUTH_DATA_TYPE_SMARTCARD_CONTEXTS |
| STRUCT!{struct SEC_WINNT_AUTH_CERTIFICATE_DATA { |
| cbHeaderLength: c_ushort, |
| cbStructureLength: c_ushort, |
| Certificate: SEC_WINNT_AUTH_BYTE_VECTOR, |
| }} |
| pub type PSEC_WINNT_AUTH_CERTIFICATE_DATA = *mut SEC_WINNT_AUTH_CERTIFICATE_DATA; |
| STRUCT!{struct SEC_WINNT_CREDUI_CONTEXT_VECTOR { |
| CredUIContextArrayOffset: ULONG, |
| CredUIContextCount: USHORT, |
| }} |
| pub type PSEC_WINNT_CREDUI_CONTEXT_VECTOR = *mut SEC_WINNT_CREDUI_CONTEXT_VECTOR; |
| STRUCT!{struct SEC_WINNT_AUTH_SHORT_VECTOR { |
| ShortArrayOffset: ULONG, |
| ShortArrayCount: USHORT, |
| }} |
| pub type PSEC_WINNT_AUTH_SHORT_VECTOR = *mut SEC_WINNT_AUTH_SHORT_VECTOR; |
| extern "system" { |
| pub fn SspiGetCredUIContext( |
| ContextHandle: HANDLE, |
| CredType: *mut GUID, |
| LogonId: *mut LUID, |
| CredUIContexts: *mut PSEC_WINNT_CREDUI_CONTEXT_VECTOR, |
| TokenHandle: *mut HANDLE, |
| ) -> SECURITY_STATUS; |
| pub fn SspiUpdateCredentials( |
| ContextHandle: HANDLE, |
| CredType: *mut GUID, |
| FlatCredUIContextLength: ULONG, |
| FlatCredUIContext: PUCHAR, |
| ) -> SECURITY_STATUS; |
| } |
| STRUCT!{struct CREDUIWIN_MARSHALED_CONTEXT { |
| StructureType: GUID, |
| cbHeaderLength: USHORT, |
| LogonId: LUID, |
| MarshaledDataType: GUID, |
| MarshaledDataOffset: ULONG, |
| MarshaledDataLength: USHORT, |
| }} |
| pub type PCREDUIWIN_MARSHALED_CONTEXT = *mut CREDUIWIN_MARSHALED_CONTEXT; |
| STRUCT!{struct SEC_WINNT_CREDUI_CONTEXT { |
| cbHeaderLength: USHORT, |
| CredUIContextHandle: HANDLE, |
| UIInfo: PCREDUI_INFOW, |
| dwAuthError: ULONG, |
| pInputAuthIdentity: PSEC_WINNT_AUTH_IDENTITY_OPAQUE, |
| TargetName: PUNICODE_STRING, |
| }} |
| pub type PSEC_WINNT_CREDUI_CONTEXT = *mut SEC_WINNT_CREDUI_CONTEXT; |
| // GUID CREDUIWIN_STRUCTURE_TYPE_SSPIPFC |
| // GUID SSPIPFC_STRUCTURE_TYPE_CREDUI_CONTEXT |
| extern "system" { |
| pub fn SspiUnmarshalCredUIContext( |
| MarshaledCredUIContext: PUCHAR, |
| MarshaledCredUIContextLength: ULONG, |
| CredUIContext: *mut PSEC_WINNT_CREDUI_CONTEXT, |
| ) -> SECURITY_STATUS; |
| // pub fn SspiPrepareForCredRead(); |
| // pub fn SspiPrepareForCredWrite(); |
| // pub fn SspiEncryptAuthIdentity(); |
| // pub fn SspiEncryptAuthIdentityEx(); |
| // pub fn SspiDecryptAuthIdentity(); |
| // pub fn SspiDecryptAuthIdentityEx(); |
| // pub fn SspiIsAuthIdentityEncrypted(); |
| // pub fn SspiEncodeAuthIdentityAsStrings(); |
| // pub fn SspiValidateAuthIdentity(); |
| // pub fn SspiCopyAuthIdentity(); |
| // pub fn SspiFreeAuthIdentity(); |
| // pub fn SspiZeroAuthIdentity(); |
| // pub fn SspiLocalFree(); |
| // pub fn SspiEncodeStringsAsAuthIdentity(); |
| // pub fn SspiCompareAuthIdentities(); |
| // pub fn SspiMarshalAuthIdentity(); |
| // pub fn SspiUnmarshalAuthIdentity(); |
| pub fn SspiIsPromptingNeeded( |
| ErrorOrNtStatus: c_ulong, |
| ) -> BOOLEAN; |
| // pub fn SspiGetTargetHostName(); |
| // pub fn SspiExcludePackage(); |
| // pub fn AddSecurityPackageA(); |
| // pub fn AddSecurityPackageW(); |
| // pub fn DeleteSecurityPackageA(); |
| // pub fn DeleteSecurityPackageW(); |
| } |