23#include <winpr/platform.h> 
   24#include <winpr/winpr.h> 
   25#include <winpr/cast.h> 
   26#include <winpr/wtypes.h> 
   27#include <winpr/windows.h> 
   28#include <winpr/security.h> 
   41#if !defined(_WIN32) || defined(_UWP) 
   48typedef WCHAR SEC_WCHAR;
 
   60WINPR_PRAGMA_DIAG_IGNORED_RESERVED_ID_MACRO
 
   62#ifndef __SECSTATUS_DEFINED__ 
   63typedef LONG SECURITY_STATUS;
 
   65#define __SECSTATUS_DEFINED__ 
   93#define SecPkgInfo SecPkgInfoW 
   94#define PSecPkgInfo PSecPkgInfoW 
   96#define SecPkgInfo SecPkgInfoA 
   97#define PSecPkgInfo PSecPkgInfoA 
  102#define NTLM_SSP_NAME _T("NTLM") 
  103#define KERBEROS_SSP_NAME _T("Kerberos") 
  104#define NEGO_SSP_NAME _T("Negotiate") 
  106#define SECPKG_ID_NONE 0xFFFF 
  108#define SECPKG_FLAG_INTEGRITY 0x00000001 
  109#define SECPKG_FLAG_PRIVACY 0x00000002 
  110#define SECPKG_FLAG_TOKEN_ONLY 0x00000004 
  111#define SECPKG_FLAG_DATAGRAM 0x00000008 
  112#define SECPKG_FLAG_CONNECTION 0x00000010 
  113#define SECPKG_FLAG_MULTI_REQUIRED 0x00000020 
  114#define SECPKG_FLAG_CLIENT_ONLY 0x00000040 
  115#define SECPKG_FLAG_EXTENDED_ERROR 0x00000080 
  116#define SECPKG_FLAG_IMPERSONATION 0x00000100 
  117#define SECPKG_FLAG_ACCEPT_WIN32_NAME 0x00000200 
  118#define SECPKG_FLAG_STREAM 0x00000400 
  119#define SECPKG_FLAG_NEGOTIABLE 0x00000800 
  120#define SECPKG_FLAG_GSS_COMPATIBLE 0x00001000 
  121#define SECPKG_FLAG_LOGON 0x00002000 
  122#define SECPKG_FLAG_ASCII_BUFFERS 0x00004000 
  123#define SECPKG_FLAG_FRAGMENT 0x00008000 
  124#define SECPKG_FLAG_MUTUAL_AUTH 0x00010000 
  125#define SECPKG_FLAG_DELEGATION 0x00020000 
  126#define SECPKG_FLAG_READONLY_WITH_CHECKSUM 0x00040000 
  127#define SECPKG_FLAG_RESTRICTED_TOKENS 0x00080000 
  128#define SECPKG_FLAG_NEGO_EXTENDER 0x00100000 
  129#define SECPKG_FLAG_NEGOTIABLE2 0x00200000 
  133#define SEC_E_OK WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00000000) 
  134#define SEC_E_INSUFFICIENT_MEMORY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090300) 
  135#define SEC_E_INVALID_HANDLE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090301) 
  136#define SEC_E_UNSUPPORTED_FUNCTION WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090302) 
  137#define SEC_E_TARGET_UNKNOWN WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090303) 
  138#define SEC_E_INTERNAL_ERROR WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090304) 
  139#define SEC_E_SECPKG_NOT_FOUND WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090305) 
  140#define SEC_E_NOT_OWNER WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090306) 
  141#define SEC_E_CANNOT_INSTALL WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090307) 
  142#define SEC_E_INVALID_TOKEN WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090308) 
  143#define SEC_E_CANNOT_PACK WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090309) 
  144#define SEC_E_QOP_NOT_SUPPORTED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030A) 
  145#define SEC_E_NO_IMPERSONATION WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030B) 
  146#define SEC_E_LOGON_DENIED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030C) 
  147#define SEC_E_UNKNOWN_CREDENTIALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030D) 
  148#define SEC_E_NO_CREDENTIALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030E) 
  149#define SEC_E_MESSAGE_ALTERED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009030F) 
  150#define SEC_E_OUT_OF_SEQUENCE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090310) 
  151#define SEC_E_NO_AUTHENTICATING_AUTHORITY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090311) 
  152#define SEC_E_BAD_PKGID WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090316) 
  153#define SEC_E_CONTEXT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090317) 
  154#define SEC_E_INCOMPLETE_MESSAGE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090318) 
  155#define SEC_E_INCOMPLETE_CREDENTIALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090320) 
  156#define SEC_E_BUFFER_TOO_SMALL WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090321) 
  157#define SEC_E_WRONG_PRINCIPAL WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090322) 
  158#define SEC_E_TIME_SKEW WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090324) 
  159#define SEC_E_UNTRUSTED_ROOT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090325) 
  160#define SEC_E_ILLEGAL_MESSAGE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090326) 
  161#define SEC_E_CERT_UNKNOWN WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090327) 
  162#define SEC_E_CERT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090328) 
  163#define SEC_E_ENCRYPT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090329) 
  164#define SEC_E_DECRYPT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090330) 
  165#define SEC_E_ALGORITHM_MISMATCH WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090331) 
  166#define SEC_E_SECURITY_QOS_FAILED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090332) 
  167#define SEC_E_UNFINISHED_CONTEXT_DELETED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090333) 
  168#define SEC_E_NO_TGT_REPLY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090334) 
  169#define SEC_E_NO_IP_ADDRESSES WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090335) 
  170#define SEC_E_WRONG_CREDENTIAL_HANDLE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090336) 
  171#define SEC_E_CRYPTO_SYSTEM_INVALID WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090337) 
  172#define SEC_E_MAX_REFERRALS_EXCEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090338) 
  173#define SEC_E_MUST_BE_KDC WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090339) 
  174#define SEC_E_STRONG_CRYPTO_NOT_SUPPORTED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033A) 
  175#define SEC_E_TOO_MANY_PRINCIPALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033B) 
  176#define SEC_E_NO_PA_DATA WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033C) 
  177#define SEC_E_PKINIT_NAME_MISMATCH WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033D) 
  178#define SEC_E_SMARTCARD_LOGON_REQUIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033E) 
  179#define SEC_E_SHUTDOWN_IN_PROGRESS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009033F) 
  180#define SEC_E_KDC_INVALID_REQUEST WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090340) 
  181#define SEC_E_KDC_UNABLE_TO_REFER WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090341) 
  182#define SEC_E_KDC_UNKNOWN_ETYPE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090342) 
  183#define SEC_E_UNSUPPORTED_PREAUTH WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090343) 
  184#define SEC_E_DELEGATION_REQUIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090345) 
  185#define SEC_E_BAD_BINDINGS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090346) 
  186#define SEC_E_MULTIPLE_ACCOUNTS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090347) 
  187#define SEC_E_NO_KERB_KEY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090348) 
  188#define SEC_E_CERT_WRONG_USAGE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090349) 
  189#define SEC_E_DOWNGRADE_DETECTED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090350) 
  190#define SEC_E_SMARTCARD_CERT_REVOKED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090351) 
  191#define SEC_E_ISSUING_CA_UNTRUSTED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090352) 
  192#define SEC_E_REVOCATION_OFFLINE_C WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090353) 
  193#define SEC_E_PKINIT_CLIENT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090354) 
  194#define SEC_E_SMARTCARD_CERT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090355) 
  195#define SEC_E_NO_S4U_PROT_SUPPORT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090356) 
  196#define SEC_E_CROSSREALM_DELEGATION_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090357) 
  197#define SEC_E_REVOCATION_OFFLINE_KDC WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090358) 
  198#define SEC_E_ISSUING_CA_UNTRUSTED_KDC WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090359) 
  199#define SEC_E_KDC_CERT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035A) 
  200#define SEC_E_KDC_CERT_REVOKED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035B) 
  201#define SEC_E_INVALID_PARAMETER WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035D) 
  202#define SEC_E_DELEGATION_POLICY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035E) 
  203#define SEC_E_POLICY_NLTM_ONLY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035F) 
  204#define SEC_E_NO_CONTEXT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090361) 
  205#define SEC_E_PKU2U_CERT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090362) 
  206#define SEC_E_MUTUAL_AUTH_FAILED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090363) 
  208#define SEC_I_CONTINUE_NEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090312) 
  209#define SEC_I_COMPLETE_NEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090313) 
  210#define SEC_I_COMPLETE_AND_CONTINUE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090314) 
  211#define SEC_I_LOCAL_LOGON WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090315) 
  212#define SEC_I_CONTEXT_EXPIRED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090317) 
  213#define SEC_I_INCOMPLETE_CREDENTIALS WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090320) 
  214#define SEC_I_RENEGOTIATE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090321) 
  215#define SEC_I_NO_LSA_CONTEXT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090323) 
  216#define SEC_I_SIGNATURE_NEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x0009035C) 
  217#define SEC_I_NO_RENEGOTIATION WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090360) 
  222#ifndef SEC_E_INVALID_PARAMETER 
  223#define SEC_E_INVALID_PARAMETER WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035D) 
  226#ifndef SEC_E_DELEGATION_POLICY 
  227#define SEC_E_DELEGATION_POLICY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035E) 
  230#ifndef SEC_E_POLICY_NLTM_ONLY 
  231#define SEC_E_POLICY_NLTM_ONLY WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x8009035F) 
  234#ifndef SEC_E_NO_CONTEXT 
  235#define SEC_E_NO_CONTEXT WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090361) 
  238#ifndef SEC_E_PKU2U_CERT_FAILURE 
  239#define SEC_E_PKU2U_CERT_FAILURE WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090362) 
  242#ifndef SEC_E_MUTUAL_AUTH_FAILED 
  243#define SEC_E_MUTUAL_AUTH_FAILED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x80090363) 
  246#ifndef SEC_I_SIGNATURE_NEEDED 
  247#define SEC_I_SIGNATURE_NEEDED WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x0009035C) 
  250#ifndef SEC_I_NO_RENEGOTIATION 
  251#define SEC_I_NO_RENEGOTIATION WINPR_CXX_COMPAT_CAST(SECURITY_STATUS, 0x00090360) 
  256#define SECURITY_NATIVE_DREP 0x00000010 
  257#define SECURITY_NETWORK_DREP 0x00000000 
  259#define SECPKG_CRED_INBOUND 0x00000001 
  260#define SECPKG_CRED_OUTBOUND 0x00000002 
  261#define SECPKG_CRED_BOTH 0x00000003 
  262#define SECPKG_CRED_AUTOLOGON_RESTRICTED 0x00000010 
  263#define SECPKG_CRED_PROCESS_POLICY_ONLY 0x00000020 
  267#define SECPKG_ATTR_SIZES 0 
  268#define SECPKG_ATTR_NAMES 1 
  269#define SECPKG_ATTR_LIFESPAN 2 
  270#define SECPKG_ATTR_DCE_INFO 3 
  271#define SECPKG_ATTR_STREAM_SIZES 4 
  272#define SECPKG_ATTR_KEY_INFO 5 
  273#define SECPKG_ATTR_AUTHORITY 6 
  274#define SECPKG_ATTR_PROTO_INFO 7 
  275#define SECPKG_ATTR_PASSWORD_EXPIRY 8 
  276#define SECPKG_ATTR_SESSION_KEY 9 
  277#define SECPKG_ATTR_PACKAGE_INFO 10 
  278#define SECPKG_ATTR_USER_FLAGS 11 
  279#define SECPKG_ATTR_NEGOTIATION_INFO 12 
  280#define SECPKG_ATTR_NATIVE_NAMES 13 
  281#define SECPKG_ATTR_FLAGS 14 
  282#define SECPKG_ATTR_USE_VALIDATED 15 
  283#define SECPKG_ATTR_CREDENTIAL_NAME 16 
  284#define SECPKG_ATTR_TARGET_INFORMATION 17 
  285#define SECPKG_ATTR_ACCESS_TOKEN 18 
  286#define SECPKG_ATTR_TARGET 19 
  287#define SECPKG_ATTR_AUTHENTICATION_ID 20 
  288#define SECPKG_ATTR_LOGOFF_TIME 21 
  289#define SECPKG_ATTR_NEGO_KEYS 22 
  290#define SECPKG_ATTR_PROMPTING_NEEDED 24 
  291#define SECPKG_ATTR_UNIQUE_BINDINGS 25 
  292#define SECPKG_ATTR_ENDPOINT_BINDINGS 26 
  293#define SECPKG_ATTR_CLIENT_SPECIFIED_TARGET 27 
  294#define SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS 30 
  295#define SECPKG_ATTR_NEGO_PKG_INFO 31 
  296#define SECPKG_ATTR_NEGO_STATUS 32 
  297#define SECPKG_ATTR_CONTEXT_DELETED 33 
  299#if !defined(_WIN32) || defined(_UWP) 
  315  char* sAuthorityName;
 
 
  323typedef UINT32 ALG_ID;
 
  329  UINT32 dwCipherStrength;
 
  331  UINT32 dwHashStrength;
 
  333  UINT32 dwExchStrength;
 
 
  338  UINT32 AuthBufferLen;
 
 
  350  UINT32 dwInitiatorAddrType;
 
  351  UINT32 cbInitiatorLength;
 
  352  UINT32 dwInitiatorOffset;
 
  353  UINT32 dwAcceptorAddrType;
 
  354  UINT32 cbAcceptorLength;
 
  355  UINT32 dwAcceptorOffset;
 
  356  UINT32 cbApplicationDataLength;
 
  357  UINT32 dwApplicationDataOffset;
 
 
  373  char* sSignatureAlgorithmName;
 
  374  char* sEncryptAlgorithmName;
 
  376  UINT32 SignatureAlgorithm;
 
  377  UINT32 EncryptAlgorithm;
 
 
  399  SecPkgInfo* PackageInfo;
 
  400  UINT32 NegotiationState;
 
 
  405  SecPkgInfo* PackageInfo;
 
 
  415  UINT32 SessionKeyLength;
 
 
  423  BYTE rgbSessionId[32];
 
 
  429  UINT32 cbMaxSignature;
 
  431  UINT32 cbSecurityTrailer;
 
 
  438  UINT32 cbMaximumMessage;
 
 
  450  UINT16 cSignatureAndHashAlgorithms;
 
  451  UINT16* pSignatureAndHashAlgorithms;
 
 
  456  UINT32 MarshalledTargetInfoLength;
 
  457  BYTE* MarshalledTargetInfo;
 
 
  462#define SECPKG_CRED_ATTR_NAMES 1 
  463#define SECPKG_CRED_ATTR_SSI_PROVIDER 2 
  464#define SECPKG_CRED_ATTR_CERT 4 
  465#define SECPKG_CRED_ATTR_PAC_BYPASS 5 
  475  SEC_WCHAR* sUserName;
 
 
  480#define SecPkgCredentials_Names SecPkgCredentials_NamesW 
  481#define PSecPkgCredentials_Names PSecPkgCredentials_NamesW 
  483#define SecPkgCredentials_Names SecPkgCredentials_NamesA 
  484#define PSecPkgCredentials_Names PSecPkgCredentials_NamesA 
  489  SEC_WCHAR* sProviderName;
 
  490  unsigned long ProviderInfoLength;
 
 
  496  SEC_CHAR* sProviderName;
 
  497  unsigned long ProviderInfoLength;
 
 
  502#define SecPkgCredentials_SSIProvider SecPkgCredentials_SSIProviderW 
  503#define PSecPkgCredentials_SSIProvider PSecPkgCredentials_SSIProviderW 
  505#define SecPkgCredentials_SSIProvider SecPkgCredentials_SSIProviderA 
  506#define PSecPkgCredentials_SSIProvider PSecPkgCredentials_SSIProviderA 
  511  unsigned long EncodedCertSize;
 
  512  unsigned char* EncodedCert;
 
 
  517#if !defined(_WIN32) || defined(_UWP) || (defined(__MINGW32__) && (__MINGW64_VERSION_MAJOR <= 8)) 
  519#define SECPKG_CRED_ATTR_KDC_PROXY_SETTINGS 3 
  521#define KDC_PROXY_SETTINGS_V1 1 
  522#define KDC_PROXY_SETTINGS_FLAGS_FORCEPROXY 0x1 
  528  USHORT ProxyServerOffset;
 
  529  USHORT ProxyServerLength;
 
  530  USHORT ClientTlsCredOffset;
 
  531  USHORT ClientTlsCredLength;
 
 
  538  USHORT ProxyServerOffset;
 
  539  USHORT ProxyServerLength;
 
  540  USHORT ClientTlsCredOffset;
 
  541  USHORT ClientTlsCredLength;
 
 
  545#define SecPkgCredentials_KdcProxySettings SecPkgCredentials_KdcProxySettingsW 
  546#define PSecPkgCredentials_KdcProxySettings PSecPkgCredentials_KdcProxySettingsW 
  548#define SecPkgCredentials_KdcProxySettings SecPkgCredentials_KdcProxySettingsA 
  549#define PSecPkgCredentials_KdcProxySettings SecPkgCredentials_KdcProxySettingsA 
  554  UINT32 BindingsLength;
 
 
  561#define ISC_REQ_DELEGATE 0x00000001 
  562#define ISC_REQ_MUTUAL_AUTH 0x00000002 
  563#define ISC_REQ_REPLAY_DETECT 0x00000004 
  564#define ISC_REQ_SEQUENCE_DETECT 0x00000008 
  565#define ISC_REQ_CONFIDENTIALITY 0x00000010 
  566#define ISC_REQ_USE_SESSION_KEY 0x00000020 
  567#define ISC_REQ_PROMPT_FOR_CREDS 0x00000040 
  568#define ISC_REQ_USE_SUPPLIED_CREDS 0x00000080 
  569#define ISC_REQ_ALLOCATE_MEMORY 0x00000100 
  570#define ISC_REQ_USE_DCE_STYLE 0x00000200 
  571#define ISC_REQ_DATAGRAM 0x00000400 
  572#define ISC_REQ_CONNECTION 0x00000800 
  573#define ISC_REQ_CALL_LEVEL 0x00001000 
  574#define ISC_REQ_FRAGMENT_SUPPLIED 0x00002000 
  575#define ISC_REQ_EXTENDED_ERROR 0x00004000 
  576#define ISC_REQ_STREAM 0x00008000 
  577#define ISC_REQ_INTEGRITY 0x00010000 
  578#define ISC_REQ_IDENTIFY 0x00020000 
  579#define ISC_REQ_NULL_SESSION 0x00040000 
  580#define ISC_REQ_MANUAL_CRED_VALIDATION 0x00080000 
  581#define ISC_REQ_RESERVED1 0x00100000 
  582#define ISC_REQ_FRAGMENT_TO_FIT 0x00200000 
  583#define ISC_REQ_FORWARD_CREDENTIALS 0x00400000 
  584#define ISC_REQ_NO_INTEGRITY 0x00800000 
  585#define ISC_REQ_USE_HTTP_STYLE 0x01000000 
  587#define ISC_RET_DELEGATE 0x00000001 
  588#define ISC_RET_MUTUAL_AUTH 0x00000002 
  589#define ISC_RET_REPLAY_DETECT 0x00000004 
  590#define ISC_RET_SEQUENCE_DETECT 0x00000008 
  591#define ISC_RET_CONFIDENTIALITY 0x00000010 
  592#define ISC_RET_USE_SESSION_KEY 0x00000020 
  593#define ISC_RET_USED_COLLECTED_CREDS 0x00000040 
  594#define ISC_RET_USED_SUPPLIED_CREDS 0x00000080 
  595#define ISC_RET_ALLOCATED_MEMORY 0x00000100 
  596#define ISC_RET_USED_DCE_STYLE 0x00000200 
  597#define ISC_RET_DATAGRAM 0x00000400 
  598#define ISC_RET_CONNECTION 0x00000800 
  599#define ISC_RET_INTERMEDIATE_RETURN 0x00001000 
  600#define ISC_RET_CALL_LEVEL 0x00002000 
  601#define ISC_RET_EXTENDED_ERROR 0x00004000 
  602#define ISC_RET_STREAM 0x00008000 
  603#define ISC_RET_INTEGRITY 0x00010000 
  604#define ISC_RET_IDENTIFY 0x00020000 
  605#define ISC_RET_NULL_SESSION 0x00040000 
  606#define ISC_RET_MANUAL_CRED_VALIDATION 0x00080000 
  607#define ISC_RET_RESERVED1 0x00100000 
  608#define ISC_RET_FRAGMENT_ONLY 0x00200000 
  609#define ISC_RET_FORWARD_CREDENTIALS 0x00400000 
  610#define ISC_RET_USED_HTTP_STYLE 0x01000000 
  614#define ASC_REQ_DELEGATE 0x00000001 
  615#define ASC_REQ_MUTUAL_AUTH 0x00000002 
  616#define ASC_REQ_REPLAY_DETECT 0x00000004 
  617#define ASC_REQ_SEQUENCE_DETECT 0x00000008 
  618#define ASC_REQ_CONFIDENTIALITY 0x00000010 
  619#define ASC_REQ_USE_SESSION_KEY 0x00000020 
  620#define ASC_REQ_ALLOCATE_MEMORY 0x00000100 
  621#define ASC_REQ_USE_DCE_STYLE 0x00000200 
  622#define ASC_REQ_DATAGRAM 0x00000400 
  623#define ASC_REQ_CONNECTION 0x00000800 
  624#define ASC_REQ_CALL_LEVEL 0x00001000 
  625#define ASC_REQ_EXTENDED_ERROR 0x00008000 
  626#define ASC_REQ_STREAM 0x00010000 
  627#define ASC_REQ_INTEGRITY 0x00020000 
  628#define ASC_REQ_LICENSING 0x00040000 
  629#define ASC_REQ_IDENTIFY 0x00080000 
  630#define ASC_REQ_ALLOW_NULL_SESSION 0x00100000 
  631#define ASC_REQ_ALLOW_NON_USER_LOGONS 0x00200000 
  632#define ASC_REQ_ALLOW_CONTEXT_REPLAY 0x00400000 
  633#define ASC_REQ_FRAGMENT_TO_FIT 0x00800000 
  634#define ASC_REQ_FRAGMENT_SUPPLIED 0x00002000 
  635#define ASC_REQ_NO_TOKEN 0x01000000 
  636#define ASC_REQ_PROXY_BINDINGS 0x04000000 
  637#define ASC_REQ_ALLOW_MISSING_BINDINGS 0x10000000 
  639#define ASC_RET_DELEGATE 0x00000001 
  640#define ASC_RET_MUTUAL_AUTH 0x00000002 
  641#define ASC_RET_REPLAY_DETECT 0x00000004 
  642#define ASC_RET_SEQUENCE_DETECT 0x00000008 
  643#define ASC_RET_CONFIDENTIALITY 0x00000010 
  644#define ASC_RET_USE_SESSION_KEY 0x00000020 
  645#define ASC_RET_ALLOCATED_MEMORY 0x00000100 
  646#define ASC_RET_USED_DCE_STYLE 0x00000200 
  647#define ASC_RET_DATAGRAM 0x00000400 
  648#define ASC_RET_CONNECTION 0x00000800 
  649#define ASC_RET_CALL_LEVEL 0x00002000 
  650#define ASC_RET_THIRD_LEG_FAILED 0x00004000 
  651#define ASC_RET_EXTENDED_ERROR 0x00008000 
  652#define ASC_RET_STREAM 0x00010000 
  653#define ASC_RET_INTEGRITY 0x00020000 
  654#define ASC_RET_LICENSING 0x00040000 
  655#define ASC_RET_IDENTIFY 0x00080000 
  656#define ASC_RET_NULL_SESSION 0x00100000 
  657#define ASC_RET_ALLOW_NON_USER_LOGONS 0x00200000 
  658#define ASC_RET_FRAGMENT_ONLY 0x00800000 
  659#define ASC_RET_NO_TOKEN 0x01000000 
  660#define ASC_RET_NO_PROXY_BINDINGS 0x04000000 
  661#define ASC_RET_MISSING_BINDINGS 0x10000000 
  663#define SEC_WINNT_AUTH_IDENTITY_ANSI 0x1 
  664#define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2 
  665#define SEC_WINNT_AUTH_IDENTITY_MARSHALLED 0x4 
  666#define SEC_WINNT_AUTH_IDENTITY_ONLY 0x8 
  667#define SEC_WINNT_AUTH_IDENTITY_EXTENDED 0x100 
  669#if !defined(_WIN32) || defined(_UWP) || defined(__MINGW32__) 
  671WINPR_PRAGMA_DIAG_PUSH
 
  672WINPR_PRAGMA_DIAG_IGNORED_RESERVED_ID_MACRO
 
  674#ifndef _AUTH_IDENTITY_DEFINED 
  676#define _AUTH_IDENTITY_DEFINED 
  685  ULONG PasswordLength;
 
 
  696  ULONG PasswordLength;
 
 
  703#define SEC_WINNT_AUTH_IDENTITY SEC_WINNT_AUTH_IDENTITY_W 
  704#define PSEC_WINNT_AUTH_IDENTITY PSEC_WINNT_AUTH_IDENTITY_W 
  706#define SEC_WINNT_AUTH_IDENTITY SEC_WINNT_AUTH_IDENTITY_W 
  707#define PSEC_WINNT_AUTH_IDENTITY PSEC_WINNT_AUTH_IDENTITY_W 
  712#ifndef SEC_WINNT_AUTH_IDENTITY_VERSION 
  713#define SEC_WINNT_AUTH_IDENTITY_VERSION 0x200 
  724  UINT32 PasswordLength;
 
  727  UINT32 PackageListLength;
 
 
  739  UINT32 PasswordLength;
 
  742  UINT32 PackageListLength;
 
 
  746#define SEC_WINNT_AUTH_IDENTITY_EX SEC_WINNT_AUTH_IDENTITY_EXW 
  747#define PSEC_WINNT_AUTH_IDENTITY_EX PSEC_WINNT_AUTH_IDENTITY_EXW 
  749#define SEC_WINNT_AUTH_IDENTITY_EX SEC_WINNT_AUTH_IDENTITY_EXA 
  750#define PSEC_WINNT_AUTH_IDENTITY_EX PSEC_WINNT_AUTH_IDENTITY_EXA 
  755#ifndef SEC_WINNT_AUTH_IDENTITY_VERSION_2 
  756#define SEC_WINNT_AUTH_IDENTITY_VERSION_2 0x201 
  761  UINT16 cbHeaderLength;
 
  762  UINT32 cbStructureLength;
 
  767  UINT32 PackedCredentialsOffset;
 
  768  UINT16 PackedCredentialsLength;
 
  770  UINT32 PackageListOffset;
 
  771  UINT16 PackageListLength;
 
 
  776#ifndef _AUTH_IDENTITY_INFO_DEFINED 
  778#define _AUTH_IDENTITY_INFO_DEFINED 
  791#define SEC_WINNT_AUTH_IDENTITY_FLAGS_PROCESS_ENCRYPTED 0x10 
  792#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SYSTEM_PROTECTED 0x20 
  793#define SEC_WINNT_AUTH_IDENTITY_FLAGS_USER_PROTECTED 0x40 
  794#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SYSTEM_ENCRYPTED 0x80 
  795#define SEC_WINNT_AUTH_IDENTITY_FLAGS_RESERVED 0x10000 
  796#define SEC_WINNT_AUTH_IDENTITY_FLAGS_NULL_USER 0x20000 
  797#define SEC_WINNT_AUTH_IDENTITY_FLAGS_NULL_DOMAIN 0x40000 
  798#define SEC_WINNT_AUTH_IDENTITY_FLAGS_ID_PROVIDER 0x80000 
  800#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_USE_MASK 0xFF000000 
  801#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_SAVE 0x80000000 
  802#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_SAVE_CRED_CHECKED 0x40000000 
  803#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_NO_CHECKBOX 0x20000000 
  804#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_LOAD 0x10000000 
  806#define SEC_WINNT_AUTH_IDENTITY_FLAGS_VALID_SSPIPFC_FLAGS         \ 
  807  (SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_SAVE | \ 
  808   SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_SAVE_CRED_CHECKED |    \ 
  809   SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_NO_CHECKBOX |          \ 
  810   SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_LOAD) 
  816#if !defined(__MINGW32__) 
  829#define SecInvalidateHandle(x) \ 
  830  ((PSecHandle)(x))->dwLower = ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1)) 
  832#define SecIsValidHandle(x)                                        \ 
  833  ((((PSecHandle)(x))->dwLower != ((ULONG_PTR)((INT_PTR)-1))) && \ 
  834   (((PSecHandle)(x))->dwUpper != ((ULONG_PTR)((INT_PTR)-1)))) 
  856typedef SECURITY_STATUS (*psSspiNtlmHashCallback)(
void* client,
 
  857                                                  const SEC_WINNT_AUTH_IDENTITY* authIdentity,
 
  859                                                  const BYTE* randkey, 
const BYTE* mic,
 
  860                                                  const SecBuffer* micvalue, BYTE* ntlmhash);
 
  865  psSspiNtlmHashCallback hashCallback;
 
  866  void* hashCallbackArg;
 
 
  875  char* pkinitX509Anchors;
 
  876  char* pkinitX509Identity;
 
 
  891#define SECBUFFER_VERSION 0 
  894#define SECBUFFER_EMPTY 0 
  895#define SECBUFFER_DATA 1 
  896#define SECBUFFER_TOKEN 2 
  897#define SECBUFFER_PKG_PARAMS 3 
  898#define SECBUFFER_MISSING 4 
  899#define SECBUFFER_EXTRA 5 
  900#define SECBUFFER_STREAM_TRAILER 6 
  901#define SECBUFFER_STREAM_HEADER 7 
  902#define SECBUFFER_NEGOTIATION_INFO 8 
  903#define SECBUFFER_PADDING 9 
  904#define SECBUFFER_STREAM 10 
  905#define SECBUFFER_MECHLIST 11 
  906#define SECBUFFER_MECHLIST_SIGNATURE 12 
  907#define SECBUFFER_TARGET 13 
  908#define SECBUFFER_CHANNEL_BINDINGS 14 
  909#define SECBUFFER_CHANGE_PASS_RESPONSE 15 
  910#define SECBUFFER_TARGET_HOST 16 
  911#define SECBUFFER_ALERT 17 
  914#define SECBUFFER_ATTRMASK 0xF0000000 
  915#define SECBUFFER_READONLY 0x80000000 
  916#define SECBUFFER_READONLY_WITH_CHECKSUM 0x10000000 
  917#define SECBUFFER_RESERVED 0x60000000 
  919#if !defined(_WIN32) || defined(_UWP) 
  921typedef void(SEC_ENTRY* SEC_GET_KEY_FN)(
void* Arg, 
void* Principal, UINT32 KeyVer, 
void** Key,
 
  922                                        SECURITY_STATUS* pStatus);
 
  924typedef SECURITY_STATUS(SEC_ENTRY* ENUMERATE_SECURITY_PACKAGES_FN_A)(ULONG* pcPackages,
 
  926typedef SECURITY_STATUS(SEC_ENTRY* ENUMERATE_SECURITY_PACKAGES_FN_W)(ULONG* pcPackages,
 
  930#define EnumerateSecurityPackages EnumerateSecurityPackagesW 
  931#define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_W 
  933#define EnumerateSecurityPackages EnumerateSecurityPackagesA 
  934#define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_A 
  937typedef SECURITY_STATUS(SEC_ENTRY* QUERY_CREDENTIALS_ATTRIBUTES_FN_A)(
PCredHandle phCredential,
 
  940typedef SECURITY_STATUS(SEC_ENTRY* QUERY_CREDENTIALS_ATTRIBUTES_FN_W)(
PCredHandle phCredential,
 
  945#define QueryCredentialsAttributes QueryCredentialsAttributesW 
  946#define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_W 
  948#define QueryCredentialsAttributes QueryCredentialsAttributesA 
  949#define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_A 
  952typedef SECURITY_STATUS(SEC_ENTRY* ACQUIRE_CREDENTIALS_HANDLE_FN_A)(
 
  953    LPSTR pszPrincipal, LPSTR pszPackage, ULONG fCredentialUse, 
void* pvLogonID, 
void* pAuthData,
 
  954    SEC_GET_KEY_FN pGetKeyFn, 
void* pvGetKeyArgument, 
PCredHandle phCredential,
 
  956typedef SECURITY_STATUS(SEC_ENTRY* ACQUIRE_CREDENTIALS_HANDLE_FN_W)(
 
  957    LPWSTR pszPrincipal, LPWSTR pszPackage, ULONG fCredentialUse, 
void* pvLogonID, 
void* pAuthData,
 
  958    SEC_GET_KEY_FN pGetKeyFn, 
void* pvGetKeyArgument, 
PCredHandle phCredential,
 
  962#define AcquireCredentialsHandle AcquireCredentialsHandleW 
  963#define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_W 
  965#define AcquireCredentialsHandle AcquireCredentialsHandleA 
  966#define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_A 
  969typedef SECURITY_STATUS(SEC_ENTRY* FREE_CREDENTIALS_HANDLE_FN)(
PCredHandle phCredential);
 
  971typedef SECURITY_STATUS(SEC_ENTRY* INITIALIZE_SECURITY_CONTEXT_FN_A)(
 
  973    ULONG Reserved1, ULONG TargetDataRep, 
PSecBufferDesc pInput, ULONG Reserved2,
 
  975typedef SECURITY_STATUS(SEC_ENTRY* INITIALIZE_SECURITY_CONTEXT_FN_W)(
 
  977    ULONG Reserved1, ULONG TargetDataRep, 
PSecBufferDesc pInput, ULONG Reserved2,
 
  981#define InitializeSecurityContext InitializeSecurityContextW 
  982#define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_W 
  984#define InitializeSecurityContext InitializeSecurityContextA 
  985#define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_A 
  988typedef SECURITY_STATUS(SEC_ENTRY* ACCEPT_SECURITY_CONTEXT_FN)(
 
  993typedef SECURITY_STATUS(SEC_ENTRY* COMPLETE_AUTH_TOKEN_FN)(
PCtxtHandle phContext,
 
  996typedef SECURITY_STATUS(SEC_ENTRY* DELETE_SECURITY_CONTEXT_FN)(
PCtxtHandle phContext);
 
  998typedef SECURITY_STATUS(SEC_ENTRY* APPLY_CONTROL_TOKEN_FN)(
PCtxtHandle phContext,
 
 1001typedef SECURITY_STATUS(SEC_ENTRY* QUERY_CONTEXT_ATTRIBUTES_FN_A)(
PCtxtHandle phContext,
 
 1002                                                                  ULONG ulAttribute, 
void* pBuffer);
 
 1003typedef SECURITY_STATUS(SEC_ENTRY* QUERY_CONTEXT_ATTRIBUTES_FN_W)(
PCtxtHandle phContext,
 
 1004                                                                  ULONG ulAttribute, 
void* pBuffer);
 
 1007#define QueryContextAttributes QueryContextAttributesW 
 1008#define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_W 
 1010#define QueryContextAttributes QueryContextAttributesA 
 1011#define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_A 
 1014typedef SECURITY_STATUS(SEC_ENTRY* IMPERSONATE_SECURITY_CONTEXT_FN)(
PCtxtHandle phContext);
 
 1016typedef SECURITY_STATUS(SEC_ENTRY* REVERT_SECURITY_CONTEXT_FN)(
PCtxtHandle phContext);
 
 1018typedef SECURITY_STATUS(SEC_ENTRY* MAKE_SIGNATURE_FN)(
PCtxtHandle phContext, ULONG fQOP,
 
 1021typedef SECURITY_STATUS(SEC_ENTRY* VERIFY_SIGNATURE_FN)(
PCtxtHandle phContext,
 
 1025typedef SECURITY_STATUS(SEC_ENTRY* FREE_CONTEXT_BUFFER_FN)(
void* pvContextBuffer);
 
 1027typedef SECURITY_STATUS(SEC_ENTRY* QUERY_SECURITY_PACKAGE_INFO_FN_A)(SEC_CHAR* pszPackageName,
 
 1029typedef SECURITY_STATUS(SEC_ENTRY* QUERY_SECURITY_PACKAGE_INFO_FN_W)(SEC_WCHAR* pszPackageName,
 
 1033#define QuerySecurityPackageInfo QuerySecurityPackageInfoW 
 1034#define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_W 
 1036#define QuerySecurityPackageInfo QuerySecurityPackageInfoA 
 1037#define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_A 
 1040typedef SECURITY_STATUS(SEC_ENTRY* EXPORT_SECURITY_CONTEXT_FN)(
PCtxtHandle phContext, ULONG fFlags,
 
 1044typedef SECURITY_STATUS(SEC_ENTRY* IMPORT_SECURITY_CONTEXT_FN_A)(SEC_CHAR* pszPackage,
 
 1048typedef SECURITY_STATUS(SEC_ENTRY* IMPORT_SECURITY_CONTEXT_FN_W)(SEC_WCHAR* pszPackage,
 
 1054#define ImportSecurityContext ImportSecurityContextW 
 1055#define IMPORT_SECURITY_CONTEXT_FN IMPORT_SECURITY_CONTEXT_FN_W 
 1057#define ImportSecurityContext ImportSecurityContextA 
 1058#define IMPORT_SECURITY_CONTEXT_FN IMPORT_SECURITY_CONTEXT_FN_A 
 1061typedef SECURITY_STATUS(SEC_ENTRY* ADD_CREDENTIALS_FN_A)(
 
 1062    PCredHandle hCredentials, SEC_CHAR* pszPrincipal, SEC_CHAR* pszPackage, UINT32 fCredentialUse,
 
 1063    void* pAuthData, SEC_GET_KEY_FN pGetKeyFn, 
void* pvGetKeyArgument, 
PTimeStamp ptsExpiry);
 
 1064typedef SECURITY_STATUS(SEC_ENTRY* ADD_CREDENTIALS_FN_W)(
 
 1065    PCredHandle hCredentials, SEC_WCHAR* pszPrincipal, SEC_WCHAR* pszPackage, UINT32 fCredentialUse,
 
 1066    void* pAuthData, SEC_GET_KEY_FN pGetKeyFn, 
void* pvGetKeyArgument, 
PTimeStamp ptsExpiry);
 
 1069#define AddCredentials AddCredentialsW 
 1070#define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_W 
 1072#define AddCredentials AddCredentialsA 
 1073#define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_A 
 1076typedef SECURITY_STATUS(SEC_ENTRY* QUERY_SECURITY_CONTEXT_TOKEN_FN)(
PCtxtHandle phContext,
 
 1079typedef SECURITY_STATUS(SEC_ENTRY* ENCRYPT_MESSAGE_FN)(
PCtxtHandle phContext, ULONG fQOP,
 
 1082typedef SECURITY_STATUS(SEC_ENTRY* DECRYPT_MESSAGE_FN)(
PCtxtHandle phContext,
 
 1086typedef SECURITY_STATUS(SEC_ENTRY* SET_CONTEXT_ATTRIBUTES_FN_A)(
PCtxtHandle phContext,
 
 1087                                                                ULONG ulAttribute, 
void* pBuffer,
 
 1089typedef SECURITY_STATUS(SEC_ENTRY* SET_CONTEXT_ATTRIBUTES_FN_W)(
PCtxtHandle phContext,
 
 1090                                                                ULONG ulAttribute, 
void* pBuffer,
 
 1094#define SetContextAttributes SetContextAttributesW 
 1095#define SET_CONTEXT_ATTRIBUTES_FN SET_CONTEXT_ATTRIBUTES_FN_W 
 1097#define SetContextAttributes SetContextAttributesA 
 1098#define SET_CONTEXT_ATTRIBUTES_FN SET_CONTEXT_ATTRIBUTES_FN_A 
 1101typedef SECURITY_STATUS(SEC_ENTRY* SET_CREDENTIALS_ATTRIBUTES_FN_A)(
PCredHandle phCredential,
 
 1103                                                                    void* pBuffer, ULONG cbBuffer);
 
 1105typedef SECURITY_STATUS(SEC_ENTRY* SET_CREDENTIALS_ATTRIBUTES_FN_W)(
PCredHandle phCredential,
 
 1107                                                                    void* pBuffer, ULONG cbBuffer);
 
 1110#define SetCredentialsAttributes SetCredentialsAttributesW 
 1111#define SET_CREDENTIALS_ATTRIBUTES_FN SET_CREDENTIALS_ATTRIBUTES_FN_W 
 1113#define SetCredentialsAttributes SetCredentialsAttributesA 
 1114#define SET_CREDENTIALS_ATTRIBUTES_FN SET_CREDENTIALS_ATTRIBUTES_FN_A 
 1117#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION \ 
 1119#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 \ 
 1121#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_3 \ 
 1123#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_4 \ 
 1129  ENUMERATE_SECURITY_PACKAGES_FN_A EnumerateSecurityPackagesA;
 
 1130  QUERY_CREDENTIALS_ATTRIBUTES_FN_A QueryCredentialsAttributesA;
 
 1131  ACQUIRE_CREDENTIALS_HANDLE_FN_A AcquireCredentialsHandleA;
 
 1132  FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
 
 1134  INITIALIZE_SECURITY_CONTEXT_FN_A InitializeSecurityContextA;
 
 1135  ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
 
 1136  COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
 
 1137  DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
 
 1138  APPLY_CONTROL_TOKEN_FN ApplyControlToken;
 
 1139  QUERY_CONTEXT_ATTRIBUTES_FN_A QueryContextAttributesA;
 
 1140  IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
 
 1141  REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
 
 1142  MAKE_SIGNATURE_FN MakeSignature;
 
 1143  VERIFY_SIGNATURE_FN VerifySignature;
 
 1144  FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
 
 1145  QUERY_SECURITY_PACKAGE_INFO_FN_A QuerySecurityPackageInfoA;
 
 1148  EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
 
 1149  IMPORT_SECURITY_CONTEXT_FN_A ImportSecurityContextA;
 
 1150  ADD_CREDENTIALS_FN_A AddCredentialsA;
 
 1152  QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
 
 1153  ENCRYPT_MESSAGE_FN EncryptMessage;
 
 1154  DECRYPT_MESSAGE_FN DecryptMessage;
 
 1155  SET_CONTEXT_ATTRIBUTES_FN_A SetContextAttributesA;
 
 1156  SET_CREDENTIALS_ATTRIBUTES_FN_A SetCredentialsAttributesA;
 
 
 1163  ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW;
 
 1164  QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW;
 
 1165  ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW;
 
 1166  FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
 
 1168  INITIALIZE_SECURITY_CONTEXT_FN_W InitializeSecurityContextW;
 
 1169  ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
 
 1170  COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
 
 1171  DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
 
 1172  APPLY_CONTROL_TOKEN_FN ApplyControlToken;
 
 1173  QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW;
 
 1174  IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
 
 1175  REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
 
 1176  MAKE_SIGNATURE_FN MakeSignature;
 
 1177  VERIFY_SIGNATURE_FN VerifySignature;
 
 1178  FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
 
 1179  QUERY_SECURITY_PACKAGE_INFO_FN_W QuerySecurityPackageInfoW;
 
 1182  EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
 
 1183  IMPORT_SECURITY_CONTEXT_FN_W ImportSecurityContextW;
 
 1184  ADD_CREDENTIALS_FN_W AddCredentialsW;
 
 1186  QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
 
 1187  ENCRYPT_MESSAGE_FN EncryptMessage;
 
 1188  DECRYPT_MESSAGE_FN DecryptMessage;
 
 1189  SET_CONTEXT_ATTRIBUTES_FN_W SetContextAttributesW;
 
 1190  SET_CREDENTIALS_ATTRIBUTES_FN_W SetCredentialsAttributesW;
 
 
 1198#define InitSecurityInterface InitSecurityInterfaceW 
 1199#define SecurityFunctionTable SecurityFunctionTableW 
 1200#define PSecurityFunctionTable PSecurityFunctionTableW 
 1201#define INIT_SECURITY_INTERFACE INIT_SECURITY_INTERFACE_W 
 1203#define InitSecurityInterface InitSecurityInterfaceA 
 1204#define SecurityFunctionTable SecurityFunctionTableA 
 1205#define PSecurityFunctionTable PSecurityFunctionTableA 
 1206#define INIT_SECURITY_INTERFACE INIT_SECURITY_INTERFACE_A 
 1218  WINPR_API SECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesA(ULONG* pcPackages,
 
 1220  WINPR_API SECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesW(ULONG* pcPackages,
 
 1226  WINPR_API SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoA(SEC_CHAR* pszPackageName,
 
 1228  WINPR_API SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoW(SEC_WCHAR* pszPackageName,
 
 1233  WINPR_API SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleA(
 
 1234      SEC_CHAR* pszPrincipal, SEC_CHAR* pszPackage, ULONG fCredentialUse, 
void* pvLogonID,
 
 1235      void* pAuthData, SEC_GET_KEY_FN pGetKeyFn, 
void* pvGetKeyArgument, 
PCredHandle phCredential,
 
 1237  WINPR_API SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleW(
 
 1238      SEC_WCHAR* pszPrincipal, SEC_WCHAR* pszPackage, ULONG fCredentialUse, 
void* pvLogonID,
 
 1239      void* pAuthData, SEC_GET_KEY_FN pGetKeyFn, 
void* pvGetKeyArgument, 
PCredHandle phCredential,
 
 1242  WINPR_API SECURITY_STATUS SEC_ENTRY ExportSecurityContext(
PCtxtHandle phContext, ULONG fFlags,
 
 1245  WINPR_API SECURITY_STATUS SEC_ENTRY FreeCredentialsHandle(
PCredHandle phCredential);
 
 1247  WINPR_API SECURITY_STATUS SEC_ENTRY ImportSecurityContextA(SEC_CHAR* pszPackage,
 
 1251  WINPR_API SECURITY_STATUS SEC_ENTRY ImportSecurityContextW(SEC_WCHAR* pszPackage,
 
 1256  WINPR_API SECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesA(
PCredHandle phCredential,
 
 1259  WINPR_API SECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesW(
PCredHandle phCredential,
 
 1265  WINPR_API SECURITY_STATUS SEC_ENTRY
 
 1267                        ULONG fContextReq, ULONG TargetDataRep, 
PCtxtHandle phNewContext,
 
 1270  WINPR_API SECURITY_STATUS SEC_ENTRY ApplyControlToken(
PCtxtHandle phContext,
 
 1272  WINPR_API SECURITY_STATUS SEC_ENTRY CompleteAuthToken(
PCtxtHandle phContext,
 
 1274  WINPR_API SECURITY_STATUS SEC_ENTRY DeleteSecurityContext(
PCtxtHandle phContext);
 
 1275  WINPR_API SECURITY_STATUS SEC_ENTRY FreeContextBuffer(
void* pvContextBuffer);
 
 1276  WINPR_API SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(
PCtxtHandle phContext);
 
 1278  WINPR_API SECURITY_STATUS SEC_ENTRY InitializeSecurityContextA(
 
 1280      ULONG Reserved1, ULONG TargetDataRep, 
PSecBufferDesc pInput, ULONG Reserved2,
 
 1283  WINPR_API SECURITY_STATUS SEC_ENTRY InitializeSecurityContextW(
 
 1285      ULONG fContextReq, ULONG Reserved1, ULONG TargetDataRep, 
PSecBufferDesc pInput,
 
 1289  WINPR_API SECURITY_STATUS SEC_ENTRY QueryContextAttributes(
PCtxtHandle phContext,
 
 1290                                                             ULONG ulAttribute, 
void* pBuffer);
 
 1291  WINPR_API SECURITY_STATUS SEC_ENTRY QuerySecurityContextToken(
PCtxtHandle phContext,
 
 1293  WINPR_API SECURITY_STATUS SEC_ENTRY SetContextAttributes(
PCtxtHandle phContext,
 
 1294                                                           ULONG ulAttribute, 
void* pBuffer,
 
 1296  WINPR_API SECURITY_STATUS SEC_ENTRY RevertSecurityContext(
PCtxtHandle phContext);
 
 1300  WINPR_API SECURITY_STATUS SEC_ENTRY DecryptMessage(
PCtxtHandle phContext,
 
 1303  WINPR_API SECURITY_STATUS SEC_ENTRY EncryptMessage(
PCtxtHandle phContext, ULONG fQOP,
 
 1305  WINPR_API SECURITY_STATUS SEC_ENTRY MakeSignature(
PCtxtHandle phContext, ULONG fQOP,
 
 1307  WINPR_API SECURITY_STATUS SEC_ENTRY VerifySignature(
PCtxtHandle phContext,
 
 1327#define SECPKG_ATTR_AUTH_IDENTITY 1001 
 1328#define SECPKG_ATTR_AUTH_PASSWORD 1002 
 1329#define SECPKG_ATTR_AUTH_NTLM_HASH 1003 
 1330#define SECPKG_ATTR_AUTH_NTLM_MESSAGE 1100 
 1331#define SECPKG_ATTR_AUTH_NTLM_TIMESTAMP 1101 
 1332#define SECPKG_ATTR_AUTH_NTLM_CLIENT_CHALLENGE 1102 
 1333#define SECPKG_ATTR_AUTH_NTLM_SERVER_CHALLENGE 1103 
 1334#define SECPKG_ATTR_AUTH_NTLM_NTPROOF_VALUE 1104 
 1335#define SECPKG_ATTR_AUTH_NTLM_RANDKEY 1105 
 1336#define SECPKG_ATTR_AUTH_NTLM_MIC 1106 
 1337#define SECPKG_ATTR_AUTH_NTLM_MIC_VALUE 1107 
 1339#define SECPKG_CRED_ATTR_TICKET_LOGON 1200 
 1344    char Domain[256 + 1];
 
 
 1349    char Password[256 + 1];
 
 
 1361    BOOL ChallengeOrResponse;
 
 
 1366    BYTE ClientChallenge[8];
 
 
 1371    BYTE ServerChallenge[8];
 
 
 1381#define SSPI_INTERFACE_WINPR 0x00000001 
 1382#define SSPI_INTERFACE_NATIVE 0x00000002 
 1387  WINPR_API 
void sspi_GlobalInit(
void);
 
 1388  WINPR_API 
void sspi_GlobalFinish(
void);
 
 1393#define sspi_SetAuthIdentity sspi_SetAuthIdentityA 
 1394  WINPR_API 
int sspi_SetAuthIdentityA(SEC_WINNT_AUTH_IDENTITY* identity, 
const char* user,
 
 1395                                      const char* domain, 
const char* password);
 
 1396  WINPR_API 
int sspi_SetAuthIdentityW(SEC_WINNT_AUTH_IDENTITY* identity, 
const WCHAR* user,
 
 1397                                      const WCHAR* domain, 
const WCHAR* password);
 
 1398  WINPR_API 
int sspi_SetAuthIdentityWithLengthW(SEC_WINNT_AUTH_IDENTITY* identity,
 
 1399                                                const WCHAR* user, 
size_t userLen,
 
 1400                                                const WCHAR* domain, 
size_t domainLen,
 
 1401                                                const WCHAR* password, 
size_t passwordLen);
 
 1402  WINPR_API UINT32 sspi_GetAuthIdentityVersion(
const void* identity);
 
 1403  WINPR_API UINT32 sspi_GetAuthIdentityFlags(
const void* identity);
 
 1404  WINPR_API BOOL sspi_GetAuthIdentityUserDomainW(
const void* identity, 
const WCHAR** pUser,
 
 1405                                                 UINT32* pUserLength, 
const WCHAR** pDomain,
 
 1406                                                 UINT32* pDomainLength);
 
 1407  WINPR_API BOOL sspi_GetAuthIdentityUserDomainA(
const void* identity, 
const char** pUser,
 
 1408                                                 UINT32* pUserLength, 
const char** pDomain,
 
 1409                                                 UINT32* pDomainLength);
 
 1410  WINPR_API BOOL sspi_GetAuthIdentityPasswordW(
const void* identity, 
const WCHAR** pPassword,
 
 1411                                               UINT32* pPasswordLength);
 
 1412  WINPR_API BOOL sspi_GetAuthIdentityPasswordA(
const void* identity, 
const char** pPassword,
 
 1413                                               UINT32* pPasswordLength);
 
 1415                                              char** pUser, 
char** pDomain, 
char** pPassword);
 
 1417                                              WCHAR** pUser, WCHAR** pDomain, WCHAR** pPassword);
 
 1419                                           char** pPackageList);
 
 1420  WINPR_API 
int sspi_CopyAuthIdentity(SEC_WINNT_AUTH_IDENTITY* identity,
 
 1423  WINPR_API 
void sspi_FreeAuthIdentity(SEC_WINNT_AUTH_IDENTITY* identity);
 
 1425  WINPR_API 
const char* GetSecurityStatusString(SECURITY_STATUS status);
 
 1431#define InitSecurityInterfaceEx InitSecurityInterfaceExW 
 1432#define INIT_SECURITY_INTERFACE_EX INIT_SECURITY_INTERFACE_EX_W 
 1434#define InitSecurityInterfaceEx InitSecurityInterfaceExA 
 1435#define INIT_SECURITY_INTERFACE_EX INIT_SECURITY_INTERFACE_EX_A