1/**
   2 * This file has no copyright assigned and is placed in the Public Domain.
   3 * This file is part of the mingw-w64 runtime package.
   4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
   5 */
   6#ifndef __SSPI_H__
   7#define __SSPI_H__
   8
   9#include <_mingw_unicode.h>
  10#include <ntsecapi.h>
  11
  12#ifdef __cplusplus
  13extern "C" {
  14#endif
  15
  16#ifdef SECURITY_WIN32
  17#define ISSP_LEVEL 32
  18#define ISSP_MODE 1
  19#endif
  20
  21#ifdef SECURITY_KERNEL
  22#define ISSP_LEVEL 32
  23
  24#ifdef ISSP_MODE
  25#undef ISSP_MODE
  26#endif
  27#define ISSP_MODE 0
  28#endif
  29
  30#ifdef SECURITY_MAC
  31#define ISSP_LEVEL 32
  32#define ISSP_MODE 1
  33#endif
  34
  35#ifndef ISSP_LEVEL
  36#error You must define one of SECURITY_WIN32,SECURITY_KERNEL,or
  37#error SECURITY_MAC
  38#endif
  39
  40#if defined(_NO_KSECDD_IMPORT_)
  41
  42#define KSECDDDECLSPEC
  43#else
  44
  45#define KSECDDDECLSPEC __declspec(dllimport)
  46#endif
  47
  48  typedef WCHAR SEC_WCHAR;
  49  typedef CHAR SEC_CHAR;
  50
  51#ifndef __SECSTATUS_DEFINED__
  52  typedef LONG SECURITY_STATUS;
  53#define __SECSTATUS_DEFINED__
  54#endif
  55
  56#ifndef WINAPI
  57#if defined(_ARM_)
  58#define WINAPI
  59#else
  60#define WINAPI __stdcall
  61#endif
  62#endif
  63
  64#define SEC_TEXT TEXT
  65#define SEC_FAR
  66#define __SEC_FAR
  67#define SEC_ENTRY WINAPI
  68
  69#if defined(UNICODE)
  70  typedef SEC_WCHAR *SECURITY_PSTR;
  71  typedef CONST SEC_WCHAR *SECURITY_PCSTR;
  72#else
  73  typedef SEC_CHAR *SECURITY_PSTR;
  74  typedef CONST SEC_CHAR *SECURITY_PCSTR;
  75#endif
  76
  77
  78#ifndef __SECHANDLE_DEFINED__
  79  typedef struct _SecHandle {
  80    ULONG_PTR dwLower;
  81    ULONG_PTR dwUpper;
  82  } SecHandle,*PSecHandle;
  83
  84#define __SECHANDLE_DEFINED__
  85#endif
  86
  87#define SecInvalidateHandle(x) ((PSecHandle) x)->dwLower = ((ULONG_PTR) ((INT_PTR)-1)); ((PSecHandle) x)->dwUpper = ((ULONG_PTR) ((INT_PTR)-1));
  88#define SecIsValidHandle(x) ((((PSecHandle) x)->dwLower!=((ULONG_PTR) ((INT_PTR) -1))) && (((PSecHandle) x)->dwUpper!=((ULONG_PTR) ((INT_PTR) -1))))
  89
  90#define SEC_DELETED_HANDLE ((ULONG_PTR)(-2))
  91
  92  typedef SecHandle CredHandle;
  93  typedef PSecHandle PCredHandle;
  94
  95  typedef SecHandle CtxtHandle;
  96  typedef PSecHandle PCtxtHandle;
  97
  98#ifdef WIN32_CHICAGO
  99  __MINGW_EXTENSION typedef unsigned __int64 QWORD;
 100  typedef QWORD SECURITY_INTEGER,*PSECURITY_INTEGER;
 101#define SEC_SUCCESS(Status) ((Status) >= 0)
 102#elif defined(_NTDEF_) || defined(_WINNT_)
 103  typedef LARGE_INTEGER _SECURITY_INTEGER,SECURITY_INTEGER,*PSECURITY_INTEGER;
 104#else
 105  typedef struct _SECURITY_INTEGER {
 106    unsigned __LONG32 LowPart;
 107    __LONG32 HighPart;
 108  } SECURITY_INTEGER,*PSECURITY_INTEGER;
 109#endif
 110
 111#ifndef SECURITY_MAC
 112  typedef SECURITY_INTEGER TimeStamp;
 113  typedef SECURITY_INTEGER *PTimeStamp;
 114#else
 115  typedef unsigned __LONG32 TimeStamp;
 116  typedef unsigned __LONG32 *PTimeStamp;
 117#endif
 118
 119#ifndef _NTDEF_
 120  typedef struct _SECURITY_STRING {
 121    unsigned short Length;
 122    unsigned short MaximumLength;
 123    unsigned short *Buffer;
 124  } SECURITY_STRING,*PSECURITY_STRING;
 125#else
 126  typedef UNICODE_STRING SECURITY_STRING,*PSECURITY_STRING;
 127#endif
 128
 129  typedef struct _SecPkgInfoW {
 130    unsigned __LONG32 fCapabilities;
 131    unsigned short wVersion;
 132    unsigned short wRPCID;
 133    unsigned __LONG32 cbMaxToken;
 134    SEC_WCHAR *Name;
 135    SEC_WCHAR *Comment;
 136  } SecPkgInfoW,*PSecPkgInfoW;
 137
 138  typedef struct _SecPkgInfoA {
 139    unsigned __LONG32 fCapabilities;
 140    unsigned short wVersion;
 141    unsigned short wRPCID;
 142    unsigned __LONG32 cbMaxToken;
 143    SEC_CHAR *Name;
 144    SEC_CHAR *Comment;
 145  } SecPkgInfoA,*PSecPkgInfoA;
 146
 147#define SecPkgInfo __MINGW_NAME_AW(SecPkgInfo)
 148#define PSecPkgInfo __MINGW_NAME_AW(PSecPkgInfo)
 149
 150#define SECPKG_FLAG_INTEGRITY 0x00000001
 151#define SECPKG_FLAG_PRIVACY 0x00000002
 152#define SECPKG_FLAG_TOKEN_ONLY 0x00000004
 153#define SECPKG_FLAG_DATAGRAM 0x00000008
 154#define SECPKG_FLAG_CONNECTION 0x00000010
 155#define SECPKG_FLAG_MULTI_REQUIRED 0x00000020
 156#define SECPKG_FLAG_CLIENT_ONLY 0x00000040
 157#define SECPKG_FLAG_EXTENDED_ERROR 0x00000080
 158#define SECPKG_FLAG_IMPERSONATION 0x00000100
 159#define SECPKG_FLAG_ACCEPT_WIN32_NAME 0x00000200
 160#define SECPKG_FLAG_STREAM 0x00000400
 161#define SECPKG_FLAG_NEGOTIABLE 0x00000800
 162#define SECPKG_FLAG_GSS_COMPATIBLE 0x00001000
 163#define SECPKG_FLAG_LOGON 0x00002000
 164#define SECPKG_FLAG_ASCII_BUFFERS 0x00004000
 165#define SECPKG_FLAG_FRAGMENT 0x00008000
 166#define SECPKG_FLAG_MUTUAL_AUTH 0x00010000
 167#define SECPKG_FLAG_DELEGATION 0x00020000
 168#define SECPKG_FLAG_READONLY_WITH_CHECKSUM 0x00040000
 169#define SECPKG_FLAG_RESTRICTED_TOKENS 0x00080000
 170#define SECPKG_FLAG_NEGO_EXTENDER 0x00100000
 171#define SECPKG_FLAG_NEGOTIABLE2 0x00200000
 172#define SECPKG_FLAG_APPCONTAINER_PASSTHROUGH 0x00400000
 173#define SECPKG_FLAG_APPCONTAINER_CHECKS 0x00800000
 174#define SECPKG_FLAG_CREDENTIAL_ISOLATION_ENABLED 0x01000000
 175#define SECPKG_FLAG_APPLY_LOOPBACK 0x02000000
 176
 177#define SECPKG_ID_NONE 0xFFFF
 178
 179#define SECPKG_CALLFLAGS_APPCONTAINER 0x00000001
 180#define SECPKG_CALLFLAGS_APPCONTAINER_AUTHCAPABLE 0x00000002
 181#define SECPKG_CALLFLAGS_FORCE_SUPPLIED 0x00000004
 182#define SECPKG_CALLFLAGS_APPCONTAINER_UPNCAPABLE 0x00000008
 183
 184  typedef struct _SecBuffer {
 185    unsigned __LONG32 cbBuffer;
 186    unsigned __LONG32 BufferType;
 187    void *pvBuffer;
 188  } SecBuffer,*PSecBuffer;
 189
 190  typedef struct _SecBufferDesc {
 191    unsigned __LONG32 ulVersion;
 192    unsigned __LONG32 cBuffers;
 193    PSecBuffer pBuffers;
 194  } SecBufferDesc,*PSecBufferDesc;
 195
 196#define SECBUFFER_VERSION 0
 197
 198#define SECBUFFER_EMPTY 0
 199#define SECBUFFER_DATA 1
 200#define SECBUFFER_TOKEN 2
 201#define SECBUFFER_PKG_PARAMS 3
 202#define SECBUFFER_MISSING 4
 203#define SECBUFFER_EXTRA 5
 204#define SECBUFFER_STREAM_TRAILER 6
 205#define SECBUFFER_STREAM_HEADER 7
 206#define SECBUFFER_NEGOTIATION_INFO 8
 207#define SECBUFFER_PADDING 9
 208#define SECBUFFER_STREAM 10
 209#define SECBUFFER_MECHLIST 11
 210#define SECBUFFER_MECHLIST_SIGNATURE 12
 211#define SECBUFFER_TARGET 13
 212#define SECBUFFER_CHANNEL_BINDINGS 14
 213#define SECBUFFER_CHANGE_PASS_RESPONSE 15
 214#define SECBUFFER_TARGET_HOST 16
 215#define SECBUFFER_ALERT 17
 216#define SECBUFFER_APPLICATION_PROTOCOLS 18
 217#define SECBUFFER_SRTP_PROTECTION_PROFILES 19
 218#define SECBUFFER_SRTP_MASTER_KEY_IDENTIFIER 20
 219#define SECBUFFER_TOKEN_BINDING 21
 220#define SECBUFFER_PRESHARED_KEY 22
 221#define SECBUFFER_PRESHARED_KEY_IDENTITY 23
 222#define SECBUFFER_DTLS_MTU 24
 223#define SECBUFFER_SEND_GENERIC_TLS_EXTENSION 25
 224#define SECBUFFER_SUBSCRIBE_GENERIC_TLS_EXTENSION 26
 225#define SECBUFFER_FLAGS 27
 226#define SECBUFFER_TRAFFIC_SECRETS 28
 227#define SECBUFFER_CERTIFICATE_REQUEST_CONTEXT 29
 228
 229#define SECBUFFER_ATTRMASK 0xF0000000
 230#define SECBUFFER_READONLY 0x80000000
 231#define SECBUFFER_READONLY_WITH_CHECKSUM 0x10000000
 232#define SECBUFFER_RESERVED 0x60000000
 233
 234  typedef struct _SEC_NEGOTIATION_INFO {
 235    unsigned __LONG32 Size;
 236    unsigned __LONG32 NameLength;
 237    SEC_WCHAR *Name;
 238    void *Reserved;
 239  } SEC_NEGOTIATION_INFO,*PSEC_NEGOTIATION_INFO;
 240
 241  typedef struct _SEC_CHANNEL_BINDINGS {
 242    unsigned __LONG32 dwInitiatorAddrType;
 243    unsigned __LONG32 cbInitiatorLength;
 244    unsigned __LONG32 dwInitiatorOffset;
 245    unsigned __LONG32 dwAcceptorAddrType;
 246    unsigned __LONG32 cbAcceptorLength;
 247    unsigned __LONG32 dwAcceptorOffset;
 248    unsigned __LONG32 cbApplicationDataLength;
 249    unsigned __LONG32 dwApplicationDataOffset;
 250  } SEC_CHANNEL_BINDINGS,*PSEC_CHANNEL_BINDINGS;
 251
 252  typedef enum _SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT {
 253    SecApplicationProtocolNegotiationExt_None,
 254    SecApplicationProtocolNegotiationExt_NPN,
 255    SecApplicationProtocolNegotiationExt_ALPN
 256  } SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT,*PSEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT;
 257
 258  typedef struct _SEC_APPLICATION_PROTOCOL_LIST {
 259    SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT ProtoNegoExt;
 260    unsigned short ProtocolListSize;
 261    unsigned char ProtocolList[ANYSIZE_ARRAY];
 262  } SEC_APPLICATION_PROTOCOL_LIST,*PSEC_APPLICATION_PROTOCOL_LIST;
 263
 264  typedef struct _SEC_APPLICATION_PROTOCOLS {
 265    unsigned __LONG32 ProtocolListsSize;
 266    SEC_APPLICATION_PROTOCOL_LIST ProtocolLists[ANYSIZE_ARRAY];
 267  } SEC_APPLICATION_PROTOCOLS,*PSEC_APPLICATION_PROTOCOLS;
 268
 269  typedef struct _SEC_SRTP_PROTECTION_PROFILES {
 270    unsigned short ProfilesSize;
 271    unsigned short ProfilesList[ANYSIZE_ARRAY];
 272  } SEC_SRTP_PROTECTION_PROFILES,*PSEC_SRTP_PROTECTION_PROFILES;
 273
 274  typedef struct _SEC_SRTP_MASTER_KEY_IDENTIFIER {
 275    unsigned char MasterKeyIdentifierSize;
 276    unsigned char MasterKeyIdentifier[ANYSIZE_ARRAY];
 277  } SEC_SRTP_MASTER_KEY_IDENTIFIER,*PSEC_SRTP_MASTER_KEY_IDENTIFIER;
 278
 279  typedef struct _SEC_TOKEN_BINDING {
 280    unsigned char MajorVersion;
 281    unsigned char MinorVersion;
 282    unsigned short KeyParametersSize;
 283    unsigned char KeyParameters[ANYSIZE_ARRAY];
 284  } SEC_TOKEN_BINDING,*PSEC_TOKEN_BINDING;
 285
 286  typedef struct _SEC_PRESHAREDKEY {
 287    unsigned short KeySize;
 288    unsigned char Key[ANYSIZE_ARRAY];
 289  } SEC_PRESHAREDKEY,*PSEC_PRESHAREDKEY;
 290
 291  typedef struct _SEC_PRESHAREDKEY_IDENTITY {
 292    unsigned short KeyIdentitySize;
 293    unsigned char KeyIdentity[ANYSIZE_ARRAY];
 294  } SEC_PRESHAREDKEY_IDENTITY,*PSEC_PRESHAREDKEY_IDENTITY;
 295
 296  typedef struct _SEC_DTLS_MTU {
 297    unsigned short PathMTU;
 298  } SEC_DTLS_MTU,*PSEC_DTLS_MTU;
 299
 300  typedef struct _SEC_FLAGS {
 301    unsigned long long Flags;
 302  } SEC_FLAGS,*PSEC_FLAGS;
 303
 304  typedef struct _SEC_CERTIFICATE_REQUEST_CONTEXT {
 305    unsigned char cbCertificateRequestContext;
 306    unsigned char rgCertificateRequestContext[ANYSIZE_ARRAY];
 307  } SEC_CERTIFICATE_REQUEST_CONTEXT,*PSEC_CERTIFICATE_REQUEST_CONTEXT;
 308
 309  typedef enum _SEC_TRAFFIC_SECRET_TYPE {
 310    SecTrafficSecret_None,
 311    SecTrafficSecret_Client,
 312    SecTrafficSecret_Server
 313  } SEC_TRAFFIC_SECRET_TYPE,*PSEC_TRAFFIC_SECRET_TYPE;
 314
 315#define SZ_ALG_MAX_SIZE 64
 316
 317  typedef struct _SEC_TRAFFIC_SECRETS {
 318    wchar_t SymmetricAlgId[SZ_ALG_MAX_SIZE];
 319    wchar_t ChainingMode[SZ_ALG_MAX_SIZE];
 320    wchar_t HashAlgId[SZ_ALG_MAX_SIZE];
 321    unsigned short KeySize;
 322    unsigned short IvSize;
 323    unsigned short MsgSequenceStart;
 324    unsigned short MsgSequenceEnd;
 325    SEC_TRAFFIC_SECRET_TYPE TrafficSecretType;
 326    unsigned short TrafficSecretSize;
 327    unsigned char TrafficSecret[ANYSIZE_ARRAY];
 328} SEC_TRAFFIC_SECRETS,*PSEC_TRAFFIC_SECRETS;
 329
 330#define SECURITY_NATIVE_DREP 0x00000010
 331#define SECURITY_NETWORK_DREP 0x00000000
 332
 333#define SECPKG_CRED_INBOUND 0x00000001
 334#define SECPKG_CRED_OUTBOUND 0x00000002
 335#define SECPKG_CRED_BOTH 0x00000003
 336#define SECPKG_CRED_DEFAULT 0x00000004
 337#define SECPKG_CRED_RESERVED 0xF0000000
 338
 339#define SECPKG_CRED_AUTOLOGON_RESTRICTED 0x00000010
 340#define SECPKG_CRED_PROCESS_POLICY_ONLY 0x00000020
 341
 342#define ISC_REQ_DELEGATE 0x00000001
 343#define ISC_REQ_MUTUAL_AUTH 0x00000002
 344#define ISC_REQ_REPLAY_DETECT 0x00000004
 345#define ISC_REQ_SEQUENCE_DETECT 0x00000008
 346#define ISC_REQ_CONFIDENTIALITY 0x00000010
 347#define ISC_REQ_USE_SESSION_KEY 0x00000020
 348#define ISC_REQ_PROMPT_FOR_CREDS 0x00000040
 349#define ISC_REQ_USE_SUPPLIED_CREDS 0x00000080
 350#define ISC_REQ_ALLOCATE_MEMORY 0x00000100
 351#define ISC_REQ_USE_DCE_STYLE 0x00000200
 352#define ISC_REQ_DATAGRAM 0x00000400
 353#define ISC_REQ_CONNECTION 0x00000800
 354#define ISC_REQ_CALL_LEVEL 0x00001000
 355#define ISC_REQ_FRAGMENT_SUPPLIED 0x00002000
 356#define ISC_REQ_EXTENDED_ERROR 0x00004000
 357#define ISC_REQ_STREAM 0x00008000
 358#define ISC_REQ_INTEGRITY 0x00010000
 359#define ISC_REQ_IDENTIFY 0x00020000
 360#define ISC_REQ_NULL_SESSION 0x00040000
 361#define ISC_REQ_MANUAL_CRED_VALIDATION 0x00080000
 362#define ISC_REQ_RESERVED1 0x00100000
 363#define ISC_REQ_FRAGMENT_TO_FIT 0x00200000
 364#define ISC_REQ_FORWARD_CREDENTIALS 0x00400000
 365#define ISC_REQ_NO_INTEGRITY 0x00800000
 366#define ISC_REQ_USE_HTTP_STYLE 0x01000000
 367#define ISC_REQ_UNVERIFIED_TARGET_NAME 0x20000000
 368#define ISC_REQ_CONFIDENTIALITY_ONLY 0x40000000
 369#define ISC_REQ_MESSAGES 0x0000000100000000
 370#define ISC_REQ_DEFERRED_CRED_VALIDATION 0x0000000200000000
 371#define ISC_REQ_NO_POST_HANDSHAKE_AUTH 0x0000000400000000
 372
 373#define ISC_RET_DELEGATE 0x00000001
 374#define ISC_RET_MUTUAL_AUTH 0x00000002
 375#define ISC_RET_REPLAY_DETECT 0x00000004
 376#define ISC_RET_SEQUENCE_DETECT 0x00000008
 377#define ISC_RET_CONFIDENTIALITY 0x00000010
 378#define ISC_RET_USE_SESSION_KEY 0x00000020
 379#define ISC_RET_USED_COLLECTED_CREDS 0x00000040
 380#define ISC_RET_USED_SUPPLIED_CREDS 0x00000080
 381#define ISC_RET_ALLOCATED_MEMORY 0x00000100
 382#define ISC_RET_USED_DCE_STYLE 0x00000200
 383#define ISC_RET_DATAGRAM 0x00000400
 384#define ISC_RET_CONNECTION 0x00000800
 385#define ISC_RET_INTERMEDIATE_RETURN 0x00001000
 386#define ISC_RET_CALL_LEVEL 0x00002000
 387#define ISC_RET_EXTENDED_ERROR 0x00004000
 388#define ISC_RET_STREAM 0x00008000
 389#define ISC_RET_INTEGRITY 0x00010000
 390#define ISC_RET_IDENTIFY 0x00020000
 391#define ISC_RET_NULL_SESSION 0x00040000
 392#define ISC_RET_MANUAL_CRED_VALIDATION 0x00080000
 393#define ISC_RET_RESERVED1 0x00100000
 394#define ISC_RET_FRAGMENT_ONLY 0x00200000
 395#define ISC_RET_FORWARD_CREDENTIALS 0x00400000
 396#define ISC_RET_USED_HTTP_STYLE 0x01000000
 397#define ISC_RET_NO_ADDITIONAL_TOKEN 0x02000000
 398#define ISC_RET_REAUTHENTICATION 0x08000000
 399#define ISC_RET_CONFIDENTIALITY_ONLY 0x40000000
 400#define ISC_RET_MESSAGES 0x0000000100000000
 401#define ISC_RET_DEFERRED_CRED_VALIDATION 0x0000000200000000
 402#define ISC_RET_NO_POST_HANDSHAKE_AUTH 0x0000000400000000
 403
 404#define ASC_REQ_DELEGATE 0x00000001
 405#define ASC_REQ_MUTUAL_AUTH 0x00000002
 406#define ASC_REQ_REPLAY_DETECT 0x00000004
 407#define ASC_REQ_SEQUENCE_DETECT 0x00000008
 408#define ASC_REQ_CONFIDENTIALITY 0x00000010
 409#define ASC_REQ_USE_SESSION_KEY 0x00000020
 410#define ASC_REQ_SESSION_TICKET 0x00000040
 411#define ASC_REQ_ALLOCATE_MEMORY 0x00000100
 412#define ASC_REQ_USE_DCE_STYLE 0x00000200
 413#define ASC_REQ_DATAGRAM 0x00000400
 414#define ASC_REQ_CONNECTION 0x00000800
 415#define ASC_REQ_CALL_LEVEL 0x00001000
 416#define ASC_REQ_FRAGMENT_SUPPLIED 0x00002000
 417#define ASC_REQ_EXTENDED_ERROR 0x00008000
 418#define ASC_REQ_STREAM 0x00010000
 419#define ASC_REQ_INTEGRITY 0x00020000
 420#define ASC_REQ_LICENSING 0x00040000
 421#define ASC_REQ_IDENTIFY 0x00080000
 422#define ASC_REQ_ALLOW_NULL_SESSION 0x00100000
 423#define ASC_REQ_ALLOW_NON_USER_LOGONS 0x00200000
 424#define ASC_REQ_ALLOW_CONTEXT_REPLAY 0x00400000
 425#define ASC_REQ_FRAGMENT_TO_FIT 0x00800000
 426#define ASC_REQ_NO_TOKEN 0x01000000
 427#define ASC_REQ_PROXY_BINDINGS 0x04000000
 428#define ASC_REQ_ALLOW_MISSING_BINDINGS 0x10000000
 429#define ASC_REQ_MESSAGES 0x0000000100000000
 430
 431#define ASC_RET_DELEGATE 0x00000001
 432#define ASC_RET_MUTUAL_AUTH 0x00000002
 433#define ASC_RET_REPLAY_DETECT 0x00000004
 434#define ASC_RET_SEQUENCE_DETECT 0x00000008
 435#define ASC_RET_CONFIDENTIALITY 0x00000010
 436#define ASC_RET_USE_SESSION_KEY 0x00000020
 437#define ASC_RET_SESSION_TICKET 0x00000040
 438#define ASC_RET_ALLOCATED_MEMORY 0x00000100
 439#define ASC_RET_USED_DCE_STYLE 0x00000200
 440#define ASC_RET_DATAGRAM 0x00000400
 441#define ASC_RET_CONNECTION 0x00000800
 442#define ASC_RET_CALL_LEVEL 0x00002000
 443#define ASC_RET_THIRD_LEG_FAILED 0x00004000
 444#define ASC_RET_EXTENDED_ERROR 0x00008000
 445#define ASC_RET_STREAM 0x00010000
 446#define ASC_RET_INTEGRITY 0x00020000
 447#define ASC_RET_LICENSING 0x00040000
 448#define ASC_RET_IDENTIFY 0x00080000
 449#define ASC_RET_NULL_SESSION 0x00100000
 450#define ASC_RET_ALLOW_NON_USER_LOGONS 0x00200000
 451#define ASC_RET_ALLOW_CONTEXT_REPLAY 0x00400000
 452#define ASC_RET_FRAGMENT_ONLY 0x00800000
 453#define ASC_RET_NO_TOKEN 0x01000000
 454#define ASC_RET_NO_ADDITIONAL_TOKEN 0x02000000
 455#define ASC_RET_MESSAGES 0x0000000100000000
 456
 457#define SECPKG_CRED_ATTR_NAMES 1
 458#define SECPKG_CRED_ATTR_SSI_PROVIDER 2
 459#define SECPKG_CRED_ATTR_KDC_PROXY_SETTINGS 3
 460#define SECPKG_CRED_ATTR_CERT 4
 461#define SECPKG_CRED_ATTR_PAC_BYPASS 5
 462
 463  typedef struct _SecPkgCredentials_NamesW
 464  {
 465    SEC_WCHAR *sUserName;
 466  } SecPkgCredentials_NamesW,*PSecPkgCredentials_NamesW;
 467
 468  typedef struct _SecPkgCredentials_NamesA
 469  {
 470    SEC_CHAR *sUserName;
 471  } SecPkgCredentials_NamesA,*PSecPkgCredentials_NamesA;
 472
 473#define SecPkgCredentials_Names __MINGW_NAME_AW(SecPkgCredentials_Names)
 474#define PSecPkgCredentials_Names __MINGW_NAME_AW(PSecPkgCredentials_Names)
 475
 476  typedef struct _SecPkgCredentials_SSIProviderW {
 477    SEC_WCHAR *sProviderName;
 478    unsigned __LONG32 ProviderInfoLength;
 479    char *ProviderInfo;
 480  } SecPkgCredentials_SSIProviderW,*PSecPkgCredentials_SSIProviderW;
 481
 482  typedef struct _SecPkgCredentials_SSIProviderA {
 483    SEC_CHAR *sProviderName;
 484    unsigned __LONG32 ProviderInfoLength;
 485    char *ProviderInfo;
 486  } SecPkgCredentials_SSIProviderA,*PSecPkgCredentials_SSIProviderA;
 487
 488#define SecPkgCredentials_SSIProvider __MINGW_NAME_AW(SecPkgCredentials_SSIProvider)
 489#define PSecPkgCredentials_SSIProvider __MINGW_NAME_AW(PSecPkgCredentials_SSIProvider)
 490
 491#define KDC_PROXY_SETTINGS_V1 1
 492#define KDC_PROXY_SETTINGS_FLAGS_FORCEPROXY 0x1
 493
 494  typedef struct _SecPkgCredentials_KdcProxySettingsW {
 495    ULONG Version;
 496    ULONG Flags;
 497    USHORT ProxyServerOffset;
 498    USHORT ProxyServerLength;
 499    USHORT ClientTlsCredOffset;
 500    USHORT ClientTlsCredLength;
 501  } SecPkgCredentials_KdcProxySettingsW,*PSecPkgCredentials_KdcProxySettingsW;
 502
 503  typedef struct _SecPkgCredentials_Cert {
 504    unsigned __LONG32 EncodedCertSize;
 505    unsigned char *EncodedCert;
 506  } SecPkgCredentials_Cert,*PSecPkgCredentials_Cert;
 507
 508#define SECPKG_ATTR_SIZES 0
 509#define SECPKG_ATTR_NAMES 1
 510#define SECPKG_ATTR_LIFESPAN 2
 511#define SECPKG_ATTR_DCE_INFO 3
 512#define SECPKG_ATTR_STREAM_SIZES 4
 513#define SECPKG_ATTR_KEY_INFO 5
 514#define SECPKG_ATTR_AUTHORITY 6
 515#define SECPKG_ATTR_PROTO_INFO 7
 516#define SECPKG_ATTR_PASSWORD_EXPIRY 8
 517#define SECPKG_ATTR_SESSION_KEY 9
 518#define SECPKG_ATTR_PACKAGE_INFO 10
 519#define SECPKG_ATTR_USER_FLAGS 11
 520#define SECPKG_ATTR_NEGOTIATION_INFO 12
 521#define SECPKG_ATTR_NATIVE_NAMES 13
 522#define SECPKG_ATTR_FLAGS 14
 523#define SECPKG_ATTR_USE_VALIDATED 15
 524#define SECPKG_ATTR_CREDENTIAL_NAME 16
 525#define SECPKG_ATTR_TARGET_INFORMATION 17
 526#define SECPKG_ATTR_ACCESS_TOKEN 18
 527#define SECPKG_ATTR_TARGET 19
 528#define SECPKG_ATTR_AUTHENTICATION_ID 20
 529#define SECPKG_ATTR_LOGOFF_TIME 21
 530#define SECPKG_ATTR_NEGO_KEYS 22
 531#define SECPKG_ATTR_PROMPTING_NEEDED 24
 532#define SECPKG_ATTR_UNIQUE_BINDINGS 25
 533#define SECPKG_ATTR_ENDPOINT_BINDINGS 26
 534#define SECPKG_ATTR_CLIENT_SPECIFIED_TARGET 27
 535#define SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS 30
 536#define SECPKG_ATTR_NEGO_PKG_INFO 31
 537#define SECPKG_ATTR_NEGO_STATUS 32
 538#define SECPKG_ATTR_CONTEXT_DELETED 33
 539#define SECPKG_ATTR_DTLS_MTU 34
 540#define SECPKG_ATTR_DATAGRAM_SIZES SECPKG_ATTR_STREAM_SIZES
 541#define SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES 128
 542#define SECPKG_ATTR_APPLICATION_PROTOCOL 35
 543#define SECPKG_ATTR_NEGOTIATED_TLS_EXTENSIONS 36
 544#define SECPKG_ATTR_IS_LOOPBACK 37
 545
 546  typedef struct _SecPkgContext_SubjectAttributes {
 547    void *AttributeInfo;
 548  } SecPkgContext_SubjectAttributes,*PSecPkgContext_SubjectAttributes;
 549
 550#define SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS 0x1
 551#define SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM 0x2
 552
 553  typedef enum _SECPKG_CRED_CLASS {
 554    SecPkgCredClass_None = 0,
 555    SecPkgCredClass_Ephemeral = 10,
 556    SecPkgCredClass_PersistedGeneric = 20,
 557    SecPkgCredClass_PersistedSpecific = 30,
 558    SecPkgCredClass_Explicit = 40
 559  } SECPKG_CRED_CLASS,*PSECPKG_CRED_CLASS;
 560
 561  typedef struct _SecPkgContext_CredInfo {
 562    SECPKG_CRED_CLASS CredClass;
 563    unsigned __LONG32 IsPromptingNeeded;
 564  } SecPkgContext_CredInfo,*PSecPkgContext_CredInfo;
 565
 566  typedef struct _SecPkgContext_NegoPackageInfo {
 567    unsigned __LONG32 PackageMask;
 568  } SecPkgContext_NegoPackageInfo,*PSecPkgContext_NegoPackageInfo;
 569
 570  typedef struct _SecPkgContext_NegoStatus {
 571    unsigned __LONG32 LastStatus;
 572  } SecPkgContext_NegoStatus,*PSecPkgContext_NegoStatus;
 573
 574  typedef struct _SecPkgContext_Sizes {
 575    unsigned __LONG32 cbMaxToken;
 576    unsigned __LONG32 cbMaxSignature;
 577    unsigned __LONG32 cbBlockSize;
 578    unsigned __LONG32 cbSecurityTrailer;
 579  } SecPkgContext_Sizes,*PSecPkgContext_Sizes;
 580
 581  typedef struct _SecPkgContext_StreamSizes {
 582    unsigned __LONG32 cbHeader;
 583    unsigned __LONG32 cbTrailer;
 584    unsigned __LONG32 cbMaximumMessage;
 585    unsigned __LONG32 cBuffers;
 586    unsigned __LONG32 cbBlockSize;
 587  } SecPkgContext_StreamSizes,*PSecPkgContext_StreamSizes;
 588
 589typedef SecPkgContext_StreamSizes SecPkgContext_DatagramSizes;
 590typedef PSecPkgContext_StreamSizes PSecPkgContext_DatagramSizes;
 591
 592  typedef struct _SecPkgContext_NamesW {
 593    SEC_WCHAR *sUserName;
 594  } SecPkgContext_NamesW,*PSecPkgContext_NamesW;
 595
 596  typedef enum _SECPKG_ATTR_LCT_STATUS {
 597    SecPkgAttrLastClientTokenYes,
 598    SecPkgAttrLastClientTokenNo,
 599    SecPkgAttrLastClientTokenMaybe
 600  } SECPKG_ATTR_LCT_STATUS,*PSECPKG_ATTR_LCT_STATUS;
 601
 602  typedef struct _SecPkgContext_LastClientTokenStatus {
 603    SECPKG_ATTR_LCT_STATUS LastClientTokenStatus;
 604  } SecPkgContext_LastClientTokenStatus,*PSecPkgContext_LastClientTokenStatus;
 605
 606  typedef struct _SecPkgContext_NamesA {
 607    SEC_CHAR *sUserName;
 608  } SecPkgContext_NamesA,*PSecPkgContext_NamesA;
 609
 610#define SecPkgContext_Names __MINGW_NAME_AW(SecPkgContext_Names)
 611#define PSecPkgContext_Names __MINGW_NAME_AW(PSecPkgContext_Names)
 612
 613  typedef struct _SecPkgContext_Lifespan {
 614    TimeStamp tsStart;
 615    TimeStamp tsExpiry;
 616  } SecPkgContext_Lifespan,*PSecPkgContext_Lifespan;
 617
 618  typedef struct _SecPkgContext_DceInfo {
 619    unsigned __LONG32 AuthzSvc;
 620    void *pPac;
 621  } SecPkgContext_DceInfo,*PSecPkgContext_DceInfo;
 622
 623  typedef struct _SecPkgContext_KeyInfoA {
 624    SEC_CHAR *sSignatureAlgorithmName;
 625    SEC_CHAR *sEncryptAlgorithmName;
 626    unsigned __LONG32 KeySize;
 627    unsigned __LONG32 SignatureAlgorithm;
 628    unsigned __LONG32 EncryptAlgorithm;
 629  } SecPkgContext_KeyInfoA,*PSecPkgContext_KeyInfoA;
 630
 631  typedef struct _SecPkgContext_KeyInfoW {
 632    SEC_WCHAR *sSignatureAlgorithmName;
 633    SEC_WCHAR *sEncryptAlgorithmName;
 634    unsigned __LONG32 KeySize;
 635    unsigned __LONG32 SignatureAlgorithm;
 636    unsigned __LONG32 EncryptAlgorithm;
 637  } SecPkgContext_KeyInfoW,*PSecPkgContext_KeyInfoW;
 638
 639#define SecPkgContext_KeyInfo __MINGW_NAME_AW(SecPkgContext_KeyInfo)
 640#define PSecPkgContext_KeyInfo __MINGW_NAME_AW(PSecPkgContext_KeyInfo)
 641
 642  typedef struct _SecPkgContext_AuthorityA {
 643    SEC_CHAR *sAuthorityName;
 644  } SecPkgContext_AuthorityA,*PSecPkgContext_AuthorityA;
 645
 646  typedef struct _SecPkgContext_AuthorityW {
 647    SEC_WCHAR *sAuthorityName;
 648  } SecPkgContext_AuthorityW,*PSecPkgContext_AuthorityW;
 649
 650#define SecPkgContext_Authority __MINGW_NAME_AW(SecPkgContext_Authority)
 651#define PSecPkgContext_Authority __MINGW_NAME_AW(PSecPkgContext_Authority)
 652
 653  typedef struct _SecPkgContext_ProtoInfoA {
 654    SEC_CHAR *sProtocolName;
 655    unsigned __LONG32 majorVersion;
 656    unsigned __LONG32 minorVersion;
 657  } SecPkgContext_ProtoInfoA,*PSecPkgContext_ProtoInfoA;
 658
 659  typedef struct _SecPkgContext_ProtoInfoW {
 660    SEC_WCHAR *sProtocolName;
 661    unsigned __LONG32 majorVersion;
 662    unsigned __LONG32 minorVersion;
 663  } SecPkgContext_ProtoInfoW,*PSecPkgContext_ProtoInfoW;
 664
 665#define SecPkgContext_ProtoInfo __MINGW_NAME_AW(SecPkgContext_ProtoInfo)
 666#define PSecPkgContext_ProtoInfo __MINGW_NAME_AW(PSecPkgContext_ProtoInfo)
 667
 668  typedef struct _SecPkgContext_PasswordExpiry {
 669    TimeStamp tsPasswordExpires;
 670  } SecPkgContext_PasswordExpiry,*PSecPkgContext_PasswordExpiry;
 671
 672  typedef struct _SecPkgContext_LogoffTime {
 673    TimeStamp tsLogoffTime;
 674  } SecPkgContext_LogoffTime,*PSecPkgContext_LogoffTime;
 675
 676  typedef struct _SecPkgContext_SessionKey {
 677    unsigned __LONG32 SessionKeyLength;
 678    unsigned char *SessionKey;
 679  } SecPkgContext_SessionKey,*PSecPkgContext_SessionKey;
 680
 681  typedef struct _SecPkgContext_NegoKeys {
 682    unsigned __LONG32 KeyType;
 683    unsigned short KeyLength;
 684    unsigned char *KeyValue;
 685    unsigned __LONG32 VerifyKeyType;
 686    unsigned short VerifyKeyLength;
 687    unsigned char *VerifyKeyValue;
 688  } SecPkgContext_NegoKeys,*PSecPkgContext_NegoKeys;
 689
 690  typedef struct _SecPkgContext_PackageInfoW {
 691    PSecPkgInfoW PackageInfo;
 692  } SecPkgContext_PackageInfoW,*PSecPkgContext_PackageInfoW;
 693
 694  typedef struct _SecPkgContext_PackageInfoA {
 695    PSecPkgInfoA PackageInfo;
 696  } SecPkgContext_PackageInfoA,*PSecPkgContext_PackageInfoA;
 697
 698  typedef struct _SecPkgContext_UserFlags {
 699    unsigned __LONG32 UserFlags;
 700  } SecPkgContext_UserFlags,*PSecPkgContext_UserFlags;
 701
 702  typedef struct _SecPkgContext_Flags {
 703    unsigned __LONG32 Flags;
 704  } SecPkgContext_Flags,*PSecPkgContext_Flags;
 705
 706#define SecPkgContext_PackageInfo __MINGW_NAME_AW(SecPkgContext_PackageInfo)
 707#define PSecPkgContext_PackageInfo __MINGW_NAME_AW(PSecPkgContext_PackageInfo)
 708
 709  typedef struct _SecPkgContext_NegotiationInfoA {
 710    PSecPkgInfoA PackageInfo;
 711    unsigned __LONG32 NegotiationState;
 712  } SecPkgContext_NegotiationInfoA,*PSecPkgContext_NegotiationInfoA;
 713
 714  typedef struct _SecPkgContext_NegotiationInfoW {
 715    PSecPkgInfoW PackageInfo;
 716    unsigned __LONG32 NegotiationState;
 717  } SecPkgContext_NegotiationInfoW,*PSecPkgContext_NegotiationInfoW;
 718
 719#define SecPkgContext_NegotiationInfo __MINGW_NAME_AW(SecPkgContext_NegotiationInfo)
 720#define PSecPkgContext_NegotiationInfo __MINGW_NAME_AW(PSecPkgContext_NegotiationInfo)
 721
 722#define SECPKG_NEGOTIATION_COMPLETE 0
 723#define SECPKG_NEGOTIATION_OPTIMISTIC 1
 724#define SECPKG_NEGOTIATION_IN_PROGRESS 2
 725#define SECPKG_NEGOTIATION_DIRECT 3
 726#define SECPKG_NEGOTIATION_TRY_MULTICRED 4
 727
 728  typedef struct _SecPkgContext_NativeNamesW {
 729    SEC_WCHAR *sClientName;
 730    SEC_WCHAR *sServerName;
 731  } SecPkgContext_NativeNamesW,*PSecPkgContext_NativeNamesW;
 732
 733  typedef struct _SecPkgContext_NativeNamesA {
 734    SEC_CHAR *sClientName;
 735    SEC_CHAR *sServerName;
 736  } SecPkgContext_NativeNamesA,*PSecPkgContext_NativeNamesA;
 737
 738#define SecPkgContext_NativeNames __MINGW_NAME_AW(SecPkgContext_NativeNames)
 739#define PSecPkgContext_NativeNames __MINGW_NAME_AW(PSecPkgContext_NativeNames)
 740
 741  typedef struct _SecPkgContext_CredentialNameW {
 742    unsigned __LONG32 CredentialType;
 743    SEC_WCHAR *sCredentialName;
 744  } SecPkgContext_CredentialNameW,*PSecPkgContext_CredentialNameW;
 745
 746  typedef struct _SecPkgContext_CredentialNameA {
 747    unsigned __LONG32 CredentialType;
 748    SEC_CHAR *sCredentialName;
 749  } SecPkgContext_CredentialNameA,*PSecPkgContext_CredentialNameA;
 750
 751#define SecPkgContext_CredentialName __MINGW_NAME_AW(SecPkgContext_CredentialName)
 752#define PSecPkgContext_CredentialName __MINGW_NAME_AW(PSecPkgContext_CredentialName)
 753
 754  typedef struct _SecPkgContext_AccessToken {
 755    void *AccessToken;
 756  } SecPkgContext_AccessToken,*PSecPkgContext_AccessToken;
 757
 758  typedef struct _SecPkgContext_TargetInformation {
 759    unsigned __LONG32 MarshalledTargetInfoLength;
 760    unsigned char *MarshalledTargetInfo;
 761  } SecPkgContext_TargetInformation,*PSecPkgContext_TargetInformation;
 762
 763  typedef struct _SecPkgContext_AuthzID {
 764    unsigned __LONG32 AuthzIDLength;
 765    char *AuthzID;
 766  } SecPkgContext_AuthzID,*PSecPkgContext_AuthzID;
 767
 768  typedef struct _SecPkgContext_Target {
 769    unsigned __LONG32 TargetLength;
 770    char *Target;
 771  } SecPkgContext_Target,*PSecPkgContext_Target;
 772
 773  typedef struct _SecPkgContext_ClientSpecifiedTarget {
 774    SEC_WCHAR *sTargetName;
 775  } SecPkgContext_ClientSpecifiedTarget,*PSecPkgContext_ClientSpecifiedTarget;
 776
 777  typedef struct _SecPkgContext_Bindings {
 778    unsigned __LONG32 BindingsLength;
 779    SEC_CHANNEL_BINDINGS *Bindings;
 780  } SecPkgContext_Bindings,*PSecPkgContext_Bindings;
 781
 782  typedef enum _SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS {
 783    SecApplicationProtocolNegotiationStatus_None,
 784    SecApplicationProtocolNegotiationStatus_Success,
 785    SecApplicationProtocolNegotiationStatus_SelectedClientOnly
 786  } SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS,*PSEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS;
 787
 788#define MAX_PROTOCOL_ID_SIZE 0xff
 789
 790  typedef struct _SecPkgContext_ApplicationProtocol {
 791    SEC_APPLICATION_PROTOCOL_NEGOTIATION_STATUS ProtoNegoStatus;
 792    SEC_APPLICATION_PROTOCOL_NEGOTIATION_EXT ProtoNegoExt;
 793    unsigned char ProtocolIdSize;
 794    unsigned char ProtocolId[MAX_PROTOCOL_ID_SIZE];
 795  } SecPkgContext_ApplicationProtocol,*PSecPkgContext_ApplicationProtocol;
 796
 797  typedef struct _SecPkgContext_NegotiatedTlsExtensions {
 798    unsigned __LONG32 ExtensionsCount;
 799    unsigned short *Extensions;
 800  } SecPkgContext_NegotiatedTlsExtensions,*PSecPkgContext_NegotiatedTlsExtensions;
 801
 802  typedef struct _SECPKG_APP_MODE_INFO {
 803    ULONG UserFunction;
 804    ULONG_PTR Argument1;
 805    ULONG_PTR Argument2;
 806    SecBuffer UserData;
 807    BOOLEAN ReturnToLsa;
 808  } SECPKG_APP_MODE_INFO,*PSECPKG_APP_MODE_INFO;
 809
 810  typedef void (WINAPI *SEC_GET_KEY_FN) (void *Arg,void *Principal,unsigned __LONG32 KeyVer,void **Key,SECURITY_STATUS *Status);
 811
 812#define SECPKG_CONTEXT_EXPORT_RESET_NEW 0x00000001
 813#define SECPKG_CONTEXT_EXPORT_DELETE_OLD 0x00000002
 814#define SECPKG_CONTEXT_EXPORT_TO_KERNEL 0x00000004
 815
 816  KSECDDDECLSPEC SECURITY_STATUS WINAPI AcquireCredentialsHandleW(
 817#if ISSP_MODE==0
 818    PSECURITY_STRING pPrincipal,PSECURITY_STRING pPackage,
 819#else
 820    SEC_WCHAR *pszPrincipal,SEC_WCHAR *pszPackage,
 821#endif
 822    unsigned __LONG32 fCredentialUse,void *pvLogonId,void *pAuthData,SEC_GET_KEY_FN pGetKeyFn,void *pvGetKeyArgument,PCredHandle phCredential,PTimeStamp ptsExpiry);
 823
 824  typedef SECURITY_STATUS (WINAPI *ACQUIRE_CREDENTIALS_HANDLE_FN_W)(
 825#if ISSP_MODE==0
 826    PSECURITY_STRING,PSECURITY_STRING,
 827#else
 828    SEC_WCHAR *,SEC_WCHAR *,
 829#endif
 830    unsigned __LONG32,void *,void *,SEC_GET_KEY_FN,void *,PCredHandle,PTimeStamp);
 831
 832  SECURITY_STATUS WINAPI AcquireCredentialsHandleA(SEC_CHAR *pszPrincipal,SEC_CHAR *pszPackage,unsigned __LONG32 fCredentialUse,void *pvLogonId,void *pAuthData,SEC_GET_KEY_FN pGetKeyFn,void *pvGetKeyArgument,PCredHandle phCredential,PTimeStamp ptsExpiry);
 833
 834  typedef SECURITY_STATUS (WINAPI *ACQUIRE_CREDENTIALS_HANDLE_FN_A)(SEC_CHAR *,SEC_CHAR *,unsigned __LONG32,void *,void *,SEC_GET_KEY_FN,void *,PCredHandle,PTimeStamp);
 835
 836#define AcquireCredentialsHandle __MINGW_NAME_AW(AcquireCredentialsHandle)
 837#define ACQUIRE_CREDENTIALS_HANDLE_FN __MINGW_NAME_UAW(ACQUIRE_CREDENTIALS_HANDLE_FN)
 838
 839  KSECDDDECLSPEC SECURITY_STATUS WINAPI FreeCredentialsHandle(PCredHandle phCredential);
 840
 841  typedef SECURITY_STATUS (WINAPI *FREE_CREDENTIALS_HANDLE_FN)(PCredHandle);
 842
 843  KSECDDDECLSPEC SECURITY_STATUS WINAPI AddCredentialsW(PCredHandle hCredentials,
 844#if ISSP_MODE==0
 845    PSECURITY_STRING pPrincipal,PSECURITY_STRING pPackage,
 846#else
 847    SEC_WCHAR *pszPrincipal,SEC_WCHAR *pszPackage,
 848#endif
 849    unsigned __LONG32 fCredentialUse,void *pAuthData,SEC_GET_KEY_FN pGetKeyFn,void *pvGetKeyArgument,PTimeStamp ptsExpiry);
 850
 851  typedef SECURITY_STATUS (WINAPI *ADD_CREDENTIALS_FN_W)(PCredHandle,
 852#if ISSP_MODE==0
 853    PSECURITY_STRING,PSECURITY_STRING,
 854#else
 855    SEC_WCHAR *,SEC_WCHAR *,
 856#endif
 857    unsigned __LONG32,void *,SEC_GET_KEY_FN,void *,PTimeStamp);
 858
 859  SECURITY_STATUS WINAPI AddCredentialsA(PCredHandle hCredentials,SEC_CHAR *pszPrincipal,SEC_CHAR *pszPackage,unsigned __LONG32 fCredentialUse,void *pAuthData,SEC_GET_KEY_FN pGetKeyFn,void *pvGetKeyArgument,PTimeStamp ptsExpiry);
 860
 861  typedef SECURITY_STATUS (WINAPI *ADD_CREDENTIALS_FN_A)(PCredHandle,SEC_CHAR *,SEC_CHAR *,unsigned __LONG32,void *,SEC_GET_KEY_FN,void *,PTimeStamp);
 862
 863#define AddCredentials __MINGW_NAME_AW(AddCredentials)
 864#define ADD_CREDENTIALS_FN __MINGW_NAME_UAW(ADD_CREDENTIALS_FN)
 865
 866  KSECDDDECLSPEC SECURITY_STATUS WINAPI InitializeSecurityContextW(PCredHandle phCredential,PCtxtHandle phContext,
 867#if ISSP_MODE==0
 868    PSECURITY_STRING pTargetName,
 869#else
 870    SEC_WCHAR *pszTargetName,
 871#endif
 872    unsigned __LONG32 fContextReq,unsigned __LONG32 Reserved1,unsigned __LONG32 TargetDataRep,PSecBufferDesc pInput,unsigned __LONG32 Reserved2,PCtxtHandle phNewContext,PSecBufferDesc pOutput,unsigned __LONG32 *pfContextAttr,PTimeStamp ptsExpiry);
 873
 874  typedef SECURITY_STATUS (WINAPI *INITIALIZE_SECURITY_CONTEXT_FN_W)(PCredHandle,PCtxtHandle,
 875#if ISSP_MODE==0
 876    PSECURITY_STRING,
 877#else
 878    SEC_WCHAR *,
 879#endif
 880    unsigned __LONG32,unsigned __LONG32,unsigned __LONG32,PSecBufferDesc,unsigned __LONG32,PCtxtHandle,PSecBufferDesc,unsigned __LONG32 *,PTimeStamp);
 881
 882  SECURITY_STATUS WINAPI InitializeSecurityContextA(PCredHandle phCredential,PCtxtHandle phContext,SEC_CHAR *pszTargetName,unsigned __LONG32 fContextReq,unsigned __LONG32 Reserved1,unsigned __LONG32 TargetDataRep,PSecBufferDesc pInput,unsigned __LONG32 Reserved2,PCtxtHandle phNewContext,PSecBufferDesc pOutput,unsigned __LONG32 *pfContextAttr,PTimeStamp ptsExpiry);
 883
 884  typedef SECURITY_STATUS (WINAPI *INITIALIZE_SECURITY_CONTEXT_FN_A)(PCredHandle,PCtxtHandle,SEC_CHAR *,unsigned __LONG32,unsigned __LONG32,unsigned __LONG32,PSecBufferDesc,unsigned __LONG32,PCtxtHandle,PSecBufferDesc,unsigned __LONG32 *,PTimeStamp);
 885
 886#define InitializeSecurityContext __MINGW_NAME_AW(InitializeSecurityContext)
 887#define INITIALIZE_SECURITY_CONTEXT_FN __MINGW_NAME_UAW(INITIALIZE_SECURITY_CONTEXT_FN)
 888
 889  KSECDDDECLSPEC SECURITY_STATUS WINAPI AcceptSecurityContext(PCredHandle phCredential,PCtxtHandle phContext,PSecBufferDesc pInput,unsigned __LONG32 fContextReq,unsigned __LONG32 TargetDataRep,PCtxtHandle phNewContext,PSecBufferDesc pOutput,unsigned __LONG32 *pfContextAttr,PTimeStamp ptsExpiry);
 890
 891  typedef SECURITY_STATUS (WINAPI *ACCEPT_SECURITY_CONTEXT_FN)(PCredHandle,PCtxtHandle,PSecBufferDesc,unsigned __LONG32,unsigned __LONG32,PCtxtHandle,PSecBufferDesc,unsigned __LONG32 *,PTimeStamp);
 892
 893  SECURITY_STATUS WINAPI CompleteAuthToken(PCtxtHandle phContext,PSecBufferDesc pToken);
 894
 895  typedef SECURITY_STATUS (WINAPI *COMPLETE_AUTH_TOKEN_FN)(PCtxtHandle,PSecBufferDesc);
 896
 897  KSECDDDECLSPEC SECURITY_STATUS WINAPI ImpersonateSecurityContext(PCtxtHandle phContext);
 898
 899  typedef SECURITY_STATUS (WINAPI *IMPERSONATE_SECURITY_CONTEXT_FN)(PCtxtHandle);
 900
 901  KSECDDDECLSPEC SECURITY_STATUS WINAPI RevertSecurityContext(PCtxtHandle phContext);
 902
 903  typedef SECURITY_STATUS (WINAPI *REVERT_SECURITY_CONTEXT_FN)(PCtxtHandle);
 904
 905  KSECDDDECLSPEC SECURITY_STATUS WINAPI QuerySecurityContextToken(PCtxtHandle phContext,HANDLE *Token);
 906
 907  typedef SECURITY_STATUS (WINAPI *QUERY_SECURITY_CONTEXT_TOKEN_FN)(PCtxtHandle,HANDLE *);
 908
 909  KSECDDDECLSPEC SECURITY_STATUS WINAPI DeleteSecurityContext(PCtxtHandle phContext);
 910
 911  typedef SECURITY_STATUS (WINAPI *DELETE_SECURITY_CONTEXT_FN)(PCtxtHandle);
 912
 913  KSECDDDECLSPEC SECURITY_STATUS WINAPI ApplyControlToken(PCtxtHandle phContext,PSecBufferDesc pInput);
 914
 915  typedef SECURITY_STATUS (WINAPI *APPLY_CONTROL_TOKEN_FN)(PCtxtHandle,PSecBufferDesc);
 916
 917  KSECDDDECLSPEC SECURITY_STATUS WINAPI QueryContextAttributesW(PCtxtHandle phContext,unsigned __LONG32 ulAttribute,void *pBuffer);
 918
 919  typedef SECURITY_STATUS (WINAPI *QUERY_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle,unsigned __LONG32,void *);
 920
 921  SECURITY_STATUS WINAPI QueryContextAttributesA(PCtxtHandle phContext,unsigned __LONG32 ulAttribute,void *pBuffer);
 922
 923  typedef SECURITY_STATUS (WINAPI *QUERY_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle,unsigned __LONG32,void *);
 924
 925#define QueryContextAttributes __MINGW_NAME_AW(QueryContextAttributes)
 926#define QUERY_CONTEXT_ATTRIBUTES_FN __MINGW_NAME_UAW(QUERY_CONTEXT_ATTRIBUTES_FN)
 927
 928  SECURITY_STATUS WINAPI QueryContextAttributesExW(PCtxtHandle phContext,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
 929
 930  typedef SECURITY_STATUS (WINAPI *QUERY_CONTEXT_ATTRIBUTES_EX_FN_W)(PCtxtHandle,unsigned __LONG32,void*,unsigned __LONG32);
 931
 932  SECURITY_STATUS WINAPI QueryContextAttributesExA(PCtxtHandle phContext,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
 933
 934  typedef SECURITY_STATUS (WINAPI *QUERY_CONTEXT_ATTRIBUTES_EX_FN_A)(PCtxtHandle,unsigned __LONG32,void*,unsigned __LONG32);
 935
 936#define QueryContextAttributesEx __MINGW_NAME_AW(QueryContextAttributesEx)
 937#define QUERY_CONTEXT_ATTRIBUTES_EX_FN __MINGW_NAME_UAW(QUERY_CONTEXT_ATTRIBUTES_EX_FN)
 938
 939  SECURITY_STATUS WINAPI SetContextAttributesW(PCtxtHandle phContext,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
 940
 941  typedef SECURITY_STATUS (WINAPI *SET_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle,unsigned __LONG32,void *,unsigned __LONG32);
 942
 943  SECURITY_STATUS WINAPI SetContextAttributesA(PCtxtHandle phContext,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
 944
 945  typedef SECURITY_STATUS (WINAPI *SET_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle,unsigned __LONG32,void *,unsigned __LONG32);
 946
 947#define SetContextAttributes __MINGW_NAME_AW(SetContextAttributes)
 948#define SET_CONTEXT_ATTRIBUTES_FN __MINGW_NAME_UAW(SET_CONTEXT_ATTRIBUTES_FN)
 949
 950  KSECDDDECLSPEC SECURITY_STATUS WINAPI QueryCredentialsAttributesW(PCredHandle phCredential,unsigned __LONG32 ulAttribute,void *pBuffer);
 951
 952  typedef SECURITY_STATUS (WINAPI *QUERY_CREDENTIALS_ATTRIBUTES_FN_W)(PCredHandle,unsigned __LONG32,void *);
 953
 954  SECURITY_STATUS WINAPI QueryCredentialsAttributesA(PCredHandle phCredential,unsigned __LONG32 ulAttribute,void *pBuffer);
 955
 956  typedef SECURITY_STATUS (WINAPI *QUERY_CREDENTIALS_ATTRIBUTES_FN_A)(PCredHandle,unsigned __LONG32,void *);
 957
 958#define QueryCredentialsAttributes __MINGW_NAME_AW(QueryCredentialsAttributes)
 959#define QUERY_CREDENTIALS_ATTRIBUTES_FN __MINGW_NAME_UAW(QUERY_CREDENTIALS_ATTRIBUTES_FN)
 960
 961  SECURITY_STATUS WINAPI QueryCredentialsAttributesExW(PCredHandle phCredential,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
 962
 963  typedef SECURITY_STATUS (WINAPI *QUERY_CREDENTIALS_ATTRIBUTES_EX_FN_W)(PCredHandle,unsigned __LONG32,void*,unsigned __LONG32);
 964
 965  SECURITY_STATUS WINAPI QueryCredentialsAttributesExA(PCredHandle phCredential,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
 966
 967  typedef SECURITY_STATUS (WINAPI *QUERY_CREDENTIALS_ATTRIBUTES_EX_FN_A)(PCredHandle,unsigned __LONG32,void*,unsigned __LONG32);
 968
 969#define QueryCredentialsAttributesEx __MINGW_NAME_AW(QueryCredentialsAttributesEx)
 970#define QUERY_CREDENTIALS_ATTRIBUTES_EX_FN __MINGW_NAME_UAW(QUERY_CREDENTIALS_ATTRIBUTES_EX_FN)
 971
 972  KSECDDDECLSPEC SECURITY_STATUS WINAPI SetCredentialsAttributesW(PCredHandle phCredential,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
 973
 974  typedef SECURITY_STATUS (WINAPI *SET_CREDENTIALS_ATTRIBUTES_FN_W)(PCredHandle,unsigned __LONG32,void *,unsigned __LONG32);
 975
 976  SECURITY_STATUS WINAPI SetCredentialsAttributesA(PCredHandle phCredential,unsigned __LONG32 ulAttribute,void *pBuffer,unsigned __LONG32 cbBuffer);
 977
 978  typedef SECURITY_STATUS (WINAPI *SET_CREDENTIALS_ATTRIBUTES_FN_A)(PCredHandle,unsigned __LONG32,void *,unsigned __LONG32);
 979
 980#define SetCredentialsAttributes __MINGW_NAME_AW(SetCredentialsAttributes)
 981#define SET_CREDENTIALS_ATTRIBUTES_FN __MINGW_NAME_UAW(SET_CREDENTIALS_ATTRIBUTES_FN)
 982
 983  SECURITY_STATUS WINAPI FreeContextBuffer(void *pvContextBuffer);
 984
 985  typedef SECURITY_STATUS (WINAPI *FREE_CONTEXT_BUFFER_FN)(void *);
 986
 987  KSECDDDECLSPEC SECURITY_STATUS WINAPI MakeSignature(PCtxtHandle phContext,unsigned __LONG32 fQOP,PSecBufferDesc pMessage,unsigned __LONG32 MessageSeqNo);
 988
 989  typedef SECURITY_STATUS (WINAPI *MAKE_SIGNATURE_FN)(PCtxtHandle,unsigned __LONG32,PSecBufferDesc,unsigned __LONG32);
 990
 991  KSECDDDECLSPEC SECURITY_STATUS WINAPI VerifySignature(PCtxtHandle phContext,PSecBufferDesc pMessage,unsigned __LONG32 MessageSeqNo,unsigned __LONG32 *pfQOP);
 992
 993  typedef SECURITY_STATUS (WINAPI *VERIFY_SIGNATURE_FN)(PCtxtHandle,PSecBufferDesc,unsigned __LONG32,unsigned __LONG32 *);
 994
 995#define SECQOP_WRAP_NO_ENCRYPT 0x80000001
 996#define SECQOP_WRAP_OOB_DATA 0x40000000
 997
 998  SECURITY_STATUS WINAPI EncryptMessage(PCtxtHandle phContext,unsigned __LONG32 fQOP,PSecBufferDesc pMessage,unsigned __LONG32 MessageSeqNo);
 999
1000  typedef SECURITY_STATUS (WINAPI *ENCRYPT_MESSAGE_FN)(PCtxtHandle,unsigned __LONG32,PSecBufferDesc,unsigned __LONG32);
1001
1002  SECURITY_STATUS WINAPI DecryptMessage(PCtxtHandle phContext,PSecBufferDesc pMessage,unsigned __LONG32 MessageSeqNo,unsigned __LONG32 *pfQOP);
1003
1004  typedef SECURITY_STATUS (WINAPI *DECRYPT_MESSAGE_FN)(PCtxtHandle,PSecBufferDesc,unsigned __LONG32,unsigned __LONG32 *);
1005
1006  KSECDDDECLSPEC SECURITY_STATUS WINAPI EnumerateSecurityPackagesW(unsigned __LONG32 *pcPackages,PSecPkgInfoW *ppPackageInfo);
1007
1008  typedef SECURITY_STATUS (WINAPI *ENUMERATE_SECURITY_PACKAGES_FN_W)(unsigned __LONG32 *,PSecPkgInfoW *);
1009
1010  SECURITY_STATUS WINAPI EnumerateSecurityPackagesA(unsigned __LONG32 *pcPackages,PSecPkgInfoA *ppPackageInfo);
1011
1012  typedef SECURITY_STATUS (WINAPI *ENUMERATE_SECURITY_PACKAGES_FN_A)(unsigned __LONG32 *,PSecPkgInfoA *);
1013
1014#define EnumerateSecurityPackages __MINGW_NAME_AW(EnumerateSecurityPackages)
1015#define ENUMERATE_SECURITY_PACKAGES_FN __MINGW_NAME_UAW(ENUMERATE_SECURITY_PACKAGES_FN)
1016
1017  KSECDDDECLSPEC SECURITY_STATUS WINAPI QuerySecurityPackageInfoW(
1018#if ISSP_MODE==0
1019    PSECURITY_STRING pPackageName,
1020#else
1021    SEC_WCHAR *pszPackageName,
1022#endif
1023    PSecPkgInfoW *ppPackageInfo);
1024
1025  typedef SECURITY_STATUS (WINAPI *QUERY_SECURITY_PACKAGE_INFO_FN_W)(
1026#if ISSP_MODE==0
1027    PSECURITY_STRING,
1028#else
1029    SEC_WCHAR *,
1030#endif
1031    PSecPkgInfoW *);
1032
1033  SECURITY_STATUS WINAPI QuerySecurityPackageInfoA(SEC_CHAR *pszPackageName,PSecPkgInfoA *ppPackageInfo);
1034
1035  typedef SECURITY_STATUS (WINAPI *QUERY_SECURITY_PACKAGE_INFO_FN_A)(SEC_CHAR *,PSecPkgInfoA *);
1036
1037#define QuerySecurityPackageInfo __MINGW_NAME_AW(QuerySecurityPackageInfo)
1038#define QUERY_SECURITY_PACKAGE_INFO_FN __MINGW_NAME_UAW(QUERY_SECURITY_PACKAGE_INFO_FN)
1039
1040  typedef enum _SecDelegationType {
1041    SecFull,SecService,SecTree,SecDirectory,SecObject
1042  } SecDelegationType,*PSecDelegationType;
1043
1044  SECURITY_STATUS WINAPI DelegateSecurityContext(PCtxtHandle phContext,
1045#if ISSP_MODE==0
1046    PSECURITY_STRING pTarget,
1047#else
1048    SEC_CHAR *pszTarget,
1049#endif
1050    SecDelegationType DelegationType,PTimeStamp pExpiry,PSecBuffer pPackageParameters,PSecBufferDesc pOutput);
1051
1052  KSECDDDECLSPEC SECURITY_STATUS WINAPI ExportSecurityContext(PCtxtHandle phContext,ULONG fFlags,PSecBuffer pPackedContext,void **pToken);
1053
1054  typedef SECURITY_STATUS (WINAPI *EXPORT_SECURITY_CONTEXT_FN)(PCtxtHandle,ULONG,PSecBuffer,void **);
1055
1056  KSECDDDECLSPEC SECURITY_STATUS WINAPI ImportSecurityContextW(
1057#if ISSP_MODE==0
1058    PSECURITY_STRING pszPackage,
1059#else
1060    SEC_WCHAR *pszPackage,
1061#endif
1062    PSecBuffer pPackedContext,void *Token,PCtxtHandle phContext);
1063
1064  typedef SECURITY_STATUS (WINAPI *IMPORT_SECURITY_CONTEXT_FN_W)(
1065#if ISSP_MODE==0
1066    PSECURITY_STRING,
1067#else
1068    SEC_WCHAR *,
1069#endif
1070    PSecBuffer,VOID *,PCtxtHandle);
1071
1072  SECURITY_STATUS WINAPI ImportSecurityContextA(SEC_CHAR *pszPackage,PSecBuffer pPackedContext,VOID *Token,PCtxtHandle phContext);
1073
1074  typedef SECURITY_STATUS (WINAPI *IMPORT_SECURITY_CONTEXT_FN_A)(SEC_CHAR *,PSecBuffer,void *,PCtxtHandle);
1075
1076#define ImportSecurityContext __MINGW_NAME_AW(ImportSecurityContext)
1077#define IMPORT_SECURITY_CONTEXT_FN __MINGW_NAME_UAW(IMPORT_SECURITY_CONTEXT_FN)
1078
1079#if ISSP_MODE==0
1080  KSECDDDECLSPEC NTSTATUS NTAPI SecMakeSPN(PUNICODE_STRING ServiceClass,PUNICODE_STRING ServiceName,PUNICODE_STRING InstanceName,USHORT InstancePort,PUNICODE_STRING Referrer,PUNICODE_STRING Spn,PULONG Length,BOOLEAN Allocate);
1081  KSECDDDECLSPEC NTSTATUS NTAPI SecMakeSPNEx(PUNICODE_STRING ServiceClass,PUNICODE_STRING ServiceName,PUNICODE_STRING InstanceName,USHORT InstancePort,PUNICODE_STRING Referrer,PUNICODE_STRING TargetInfo,PUNICODE_STRING Spn,PULONG Length,BOOLEAN Allocate);
1082  KSECDDDECLSPEC NTSTATUS NTAPI SecMakeSPNEx2(PUNICODE_STRING ServiceClass,PUNICODE_STRING ServiceName,PUNICODE_STRING InstanceName,USHORT InstancePort,PUNICODE_STRING Referrer,PUNICODE_STRING InTargetInfo,PUNICODE_STRING Spn,PULONG TotalSize,BOOLEAN Allocate,BOOLEAN IsTargetInfoMarshaled);
1083  KSECDDDECLSPEC NTSTATUS WINAPI SecLookupAccountSid(PSID Sid,PULONG NameSize,PUNICODE_STRING NameBuffer,PULONG DomainSize,PUNICODE_STRING DomainBuffer,PSID_NAME_USE NameUse);
1084  KSECDDDECLSPEC NTSTATUS WINAPI SecLookupAccountName(PUNICODE_STRING Name,PULONG SidSize,PSID Sid,PSID_NAME_USE NameUse,PULONG DomainSize,PUNICODE_STRING ReferencedDomain);
1085  KSECDDDECLSPEC NTSTATUS WINAPI SecLookupWellKnownSid(WELL_KNOWN_SID_TYPE SidType,PSID Sid,ULONG SidBufferSize,PULONG SidSize);
1086#endif
1087
1088#define SECURITY_ENTRYPOINT_ANSIW "InitSecurityInterfaceW"
1089#define SECURITY_ENTRYPOINT_ANSIA "InitSecurityInterfaceA"
1090#define SECURITY_ENTRYPOINTW SEC_TEXT("InitSecurityInterfaceW")
1091#define SECURITY_ENTRYPOINTA SEC_TEXT("InitSecurityInterfaceA")
1092#define SECURITY_ENTRYPOINT16 "INITSECURITYINTERFACEA"
1093
1094#ifdef SECURITY_WIN32
1095#define SECURITY_ENTRYPOINT __MINGW_NAME_AW(SECURITY_ENTRYPOINT)
1096#define SECURITY_ENTRYPOINT_ANSI __MINGW_NAME_AW(SECURITY_ENTRYPOINT_ANSI)
1097#else
1098#define SECURITY_ENTRYPOINT SECURITY_ENTRYPOINT16
1099#define SECURITY_ENTRYPOINT_ANSI SECURITY_ENTRYPOINT16
1100#endif
1101
1102#define FreeCredentialHandle FreeCredentialsHandle
1103
1104#if ISSP_MODE != 0
1105
1106SECURITY_STATUS SEC_ENTRY ChangeAccountPasswordW(SEC_WCHAR* pszPackageName,
1107                                                 SEC_WCHAR* pszDomainName,
1108                                                 SEC_WCHAR* pszAccountName,
1109                                                 SEC_WCHAR* pszOldPassword,
1110                                                 SEC_WCHAR* pszNewPassword,
1111                                                 BOOLEAN bImpersonating,
1112                                                 unsigned __LONG32 dwReserved,
1113                                                 PSecBufferDesc pOutput);
1114
1115typedef SECURITY_STATUS (SEC_ENTRY *CHANGE_PASSWORD_FN_W)(SEC_WCHAR*,
1116                                                          SEC_WCHAR*,
1117                                                          SEC_WCHAR*,
1118                                                          SEC_WCHAR*,
1119                                                          SEC_WCHAR*,
1120                                                          BOOLEAN,
1121                                                          unsigned __LONG32,
1122                                                          PSecBufferDesc);
1123
1124SECURITY_STATUS SEC_ENTRY ChangeAccountPasswordA(SEC_CHAR* pszPackageName,
1125                                                 SEC_CHAR* pszDomainName,
1126                                                 SEC_CHAR* pszAccountName,
1127                                                 SEC_CHAR* pszOldPassword,
1128                                                 SEC_CHAR* pszNewPassword,
1129                                                 BOOLEAN bImpersonating,
1130                                                 unsigned __LONG32 dwReserved,
1131                                                 PSecBufferDesc pOutput);
1132
1133typedef SECURITY_STATUS (SEC_ENTRY *CHANGE_PASSWORD_FN_A)(SEC_CHAR*,
1134                                                          SEC_CHAR*,
1135                                                          SEC_CHAR*,
1136                                                          SEC_CHAR*,
1137                                                          SEC_CHAR*,
1138                                                          BOOLEAN,
1139                                                          unsigned __LONG32,
1140                                                          PSecBufferDesc);
1141
1142#define ChangeAccountPassword __MINGW_NAME_AW(ChangeAccountPassword)
1143#define CHANGE_PASSWORD_FN __MINGW_NAME_UAW(CHANGE_PASSWORD_FN)
1144
1145#endif
1146
1147  typedef struct _SECURITY_FUNCTION_TABLE_W {
1148    unsigned __LONG32 dwVersion;
1149    ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW;
1150    QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW;
1151    ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW;
1152    FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
1153    void *Reserved2;
1154    INITIALIZE_SECURITY_CONTEXT_FN_W InitializeSecurityContextW;
1155    ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
1156    COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
1157    DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
1158    APPLY_CONTROL_TOKEN_FN ApplyControlToken;
1159    QUERY_CONTEXT_ATTRIBUTES_FN_W QueryContextAttributesW;
1160    IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
1161    REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
1162    MAKE_SIGNATURE_FN MakeSignature;
1163    VERIFY_SIGNATURE_FN VerifySignature;
1164    FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
1165    QUERY_SECURITY_PACKAGE_INFO_FN_W QuerySecurityPackageInfoW;
1166    void *Reserved3;
1167    void *Reserved4;
1168    EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
1169    IMPORT_SECURITY_CONTEXT_FN_W ImportSecurityContextW;
1170    ADD_CREDENTIALS_FN_W AddCredentialsW;
1171    void *Reserved8;
1172    QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
1173    ENCRYPT_MESSAGE_FN EncryptMessage;
1174    DECRYPT_MESSAGE_FN DecryptMessage;
1175    SET_CONTEXT_ATTRIBUTES_FN_W SetContextAttributesW;
1176    SET_CREDENTIALS_ATTRIBUTES_FN_W SetCredentialsAttributesW;
1177#if ISSP_MODE != 0
1178    CHANGE_PASSWORD_FN_W ChangeAccountPasswordW;
1179#else
1180    void* Reserved9;
1181#endif
1182#if NTDDI_VERSION > NTDDI_WINBLUE
1183    QUERY_CONTEXT_ATTRIBUTES_EX_FN_W QueryContextAttributesExW;
1184    QUERY_CREDENTIALS_ATTRIBUTES_EX_FN_W QueryCredentialsAttributesExW;
1185#endif
1186  } SecurityFunctionTableW,*PSecurityFunctionTableW;
1187
1188  typedef struct _SECURITY_FUNCTION_TABLE_A {
1189    unsigned __LONG32 dwVersion;
1190    ENUMERATE_SECURITY_PACKAGES_FN_A EnumerateSecurityPackagesA;
1191    QUERY_CREDENTIALS_ATTRIBUTES_FN_A QueryCredentialsAttributesA;
1192    ACQUIRE_CREDENTIALS_HANDLE_FN_A AcquireCredentialsHandleA;
1193    FREE_CREDENTIALS_HANDLE_FN FreeCredentialHandle;
1194    void *Reserved2;
1195    INITIALIZE_SECURITY_CONTEXT_FN_A InitializeSecurityContextA;
1196    ACCEPT_SECURITY_CONTEXT_FN AcceptSecurityContext;
1197    COMPLETE_AUTH_TOKEN_FN CompleteAuthToken;
1198    DELETE_SECURITY_CONTEXT_FN DeleteSecurityContext;
1199    APPLY_CONTROL_TOKEN_FN ApplyControlToken;
1200    QUERY_CONTEXT_ATTRIBUTES_FN_A QueryContextAttributesA;
1201    IMPERSONATE_SECURITY_CONTEXT_FN ImpersonateSecurityContext;
1202    REVERT_SECURITY_CONTEXT_FN RevertSecurityContext;
1203    MAKE_SIGNATURE_FN MakeSignature;
1204    VERIFY_SIGNATURE_FN VerifySignature;
1205    FREE_CONTEXT_BUFFER_FN FreeContextBuffer;
1206    QUERY_SECURITY_PACKAGE_INFO_FN_A QuerySecurityPackageInfoA;
1207    void *Reserved3;
1208    void *Reserved4;
1209    EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
1210    IMPORT_SECURITY_CONTEXT_FN_A ImportSecurityContextA;
1211    ADD_CREDENTIALS_FN_A AddCredentialsA;
1212    void *Reserved8;
1213    QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
1214    ENCRYPT_MESSAGE_FN EncryptMessage;
1215    DECRYPT_MESSAGE_FN DecryptMessage;
1216    SET_CONTEXT_ATTRIBUTES_FN_A SetContextAttributesA;
1217    SET_CREDENTIALS_ATTRIBUTES_FN_A SetCredentialsAttributesA;
1218#if ISSP_MODE != 0
1219    CHANGE_PASSWORD_FN_A ChangeAccountPasswordA;
1220#else
1221    void* Reserved9;
1222#endif
1223#if NTDDI_VERSION > NTDDI_WINBLUE
1224    QUERY_CONTEXT_ATTRIBUTES_EX_FN_A QueryContextAttributesExA;
1225    QUERY_CREDENTIALS_ATTRIBUTES_EX_FN_A QueryCredentialsAttributesExA;
1226#endif
1227  } SecurityFunctionTableA,*PSecurityFunctionTableA;
1228
1229#define SecurityFunctionTable __MINGW_NAME_AW(SecurityFunctionTable)
1230#define PSecurityFunctionTable __MINGW_NAME_AW(PSecurityFunctionTable)
1231
1232#define SECURITY_
1233
1234#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION 1
1235#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2
1236#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_3 3
1237#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_4 4
1238#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_5 5
1239
1240  PSecurityFunctionTableA WINAPI InitSecurityInterfaceA(void);
1241
1242  typedef PSecurityFunctionTableA (WINAPI *INIT_SECURITY_INTERFACE_A)(void);
1243
1244  KSECDDDECLSPEC PSecurityFunctionTableW WINAPI InitSecurityInterfaceW(void);
1245
1246  typedef PSecurityFunctionTableW (WINAPI *INIT_SECURITY_INTERFACE_W)(void);
1247
1248#define InitSecurityInterface __MINGW_NAME_AW(InitSecurityInterface)
1249#define INIT_SECURITY_INTERFACE __MINGW_NAME_UAW(INIT_SECURITY_INTERFACE)
1250
1251#ifdef SECURITY_WIN32
1252
1253  SECURITY_STATUS WINAPI SaslEnumerateProfilesA(LPSTR *ProfileList,ULONG *ProfileCount);
1254  SECURITY_STATUS WINAPI SaslEnumerateProfilesW(LPWSTR *ProfileList,ULONG *ProfileCount);
1255
1256#define SaslEnumerateProfiles __MINGW_NAME_AW(SaslEnumerateProfiles)
1257
1258  SECURITY_STATUS WINAPI SaslGetProfilePackageA(LPSTR ProfileName,PSecPkgInfoA *PackageInfo);
1259  SECURITY_STATUS WINAPI SaslGetProfilePackageW(LPWSTR ProfileName,PSecPkgInfoW *PackageInfo);
1260
1261#define SaslGetProfilePackage __MINGW_NAME_AW(SaslGetProfilePackage)
1262
1263  SECURITY_STATUS WINAPI SaslIdentifyPackageA(PSecBufferDesc pInput,PSecPkgInfoA *PackageInfo);
1264  SECURITY_STATUS WINAPI SaslIdentifyPackageW(PSecBufferDesc pInput,PSecPkgInfoW *PackageInfo);
1265
1266#define SaslIdentifyPackage __MINGW_NAME_AW(SaslIdentifyPackage)
1267
1268  SECURITY_STATUS WINAPI SaslInitializeSecurityContextW(PCredHandle phCredential,PCtxtHandle phContext,LPWSTR pszTargetName,unsigned __LONG32 fContextReq,unsigned __LONG32 Reserved1,unsigned __LONG32 TargetDataRep,PSecBufferDesc pInput,unsigned __LONG32 Reserved2,PCtxtHandle phNewContext,PSecBufferDesc pOutput,unsigned __LONG32 *pfContextAttr,PTimeStamp ptsExpiry);
1269  SECURITY_STATUS WINAPI SaslInitializeSecurityContextA(PCredHandle phCredential,PCtxtHandle phContext,LPSTR pszTargetName,unsigned __LONG32 fContextReq,unsigned __LONG32 Reserved1,unsigned __LONG32 TargetDataRep,PSecBufferDesc pInput,unsigned __LONG32 Reserved2,PCtxtHandle phNewContext,PSecBufferDesc pOutput,unsigned __LONG32 *pfContextAttr,PTimeStamp ptsExpiry);
1270
1271#define SaslInitializeSecurityContext __MINGW_NAME_AW(SaslInitializeSecurityContext)
1272
1273  SECURITY_STATUS WINAPI SaslAcceptSecurityContext(PCredHandle phCredential,PCtxtHandle phContext,PSecBufferDesc pInput,unsigned __LONG32 fContextReq,unsigned __LONG32 TargetDataRep,PCtxtHandle phNewContext,PSecBufferDesc pOutput,unsigned __LONG32 *pfContextAttr,PTimeStamp ptsExpiry);
1274
1275#define SASL_OPTION_SEND_SIZE 1
1276#define SASL_OPTION_RECV_SIZE 2
1277#define SASL_OPTION_AUTHZ_STRING 3
1278#define SASL_OPTION_AUTHZ_PROCESSING 4
1279
1280  typedef enum _SASL_AUTHZID_STATE {
1281    Sasl_AuthZIDForbidden,Sasl_AuthZIDProcessed
1282  } SASL_AUTHZID_STATE;
1283
1284  SECURITY_STATUS WINAPI SaslSetContextOption(PCtxtHandle ContextHandle,ULONG Option,PVOID Value,ULONG Size);
1285  SECURITY_STATUS WINAPI SaslGetContextOption(PCtxtHandle ContextHandle,ULONG Option,PVOID Value,ULONG Size,PULONG Needed);
1286#endif
1287
1288#ifndef _AUTH_IDENTITY_EX2_DEFINED
1289#define _AUTH_IDENTITY_EX2_DEFINED
1290
1291#define SEC_WINNT_AUTH_IDENTITY_VERSION_2 0x201
1292
1293  typedef struct _SEC_WINNT_AUTH_IDENTITY_EX2 {
1294    unsigned __LONG32 Version;
1295    unsigned short cbHeaderLength;
1296    unsigned __LONG32 cbStructureLength;
1297    unsigned __LONG32 UserOffset;
1298    unsigned short UserLength;
1299    unsigned __LONG32 DomainOffset;
1300    unsigned short DomainLength;
1301    unsigned __LONG32 PackedCredentialsOffset;
1302    unsigned short PackedCredentialsLength;
1303    unsigned __LONG32 Flags;
1304    unsigned __LONG32 PackageListOffset;
1305    unsigned short PackageListLength;
1306  } SEC_WINNT_AUTH_IDENTITY_EX2, *PSEC_WINNT_AUTH_IDENTITY_EX2;
1307
1308#endif
1309
1310#ifndef _AUTH_IDENTITY_DEFINED
1311#define _AUTH_IDENTITY_DEFINED
1312
1313#define SEC_WINNT_AUTH_IDENTITY_ANSI 0x1
1314#define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2
1315
1316  typedef struct _SEC_WINNT_AUTH_IDENTITY_W {
1317    unsigned short *User;
1318    unsigned __LONG32 UserLength;
1319    unsigned short *Domain;
1320    unsigned __LONG32 DomainLength;
1321    unsigned short *Password;
1322    unsigned __LONG32 PasswordLength;
1323    unsigned __LONG32 Flags;
1324  } SEC_WINNT_AUTH_IDENTITY_W,*PSEC_WINNT_AUTH_IDENTITY_W;
1325
1326  typedef struct _SEC_WINNT_AUTH_IDENTITY_A {
1327    unsigned char *User;
1328    unsigned __LONG32 UserLength;
1329    unsigned char *Domain;
1330    unsigned __LONG32 DomainLength;
1331    unsigned char *Password;
1332    unsigned __LONG32 PasswordLength;
1333    unsigned __LONG32 Flags;
1334  } SEC_WINNT_AUTH_IDENTITY_A,*PSEC_WINNT_AUTH_IDENTITY_A;
1335
1336#define SEC_WINNT_AUTH_IDENTITY __MINGW_NAME_UAW(SEC_WINNT_AUTH_IDENTITY)
1337#define PSEC_WINNT_AUTH_IDENTITY __MINGW_NAME_UAW(PSEC_WINNT_AUTH_IDENTITY)
1338#define _SEC_WINNT_AUTH_IDENTITY __MINGW_NAME_UAW(_SEC_WINNT_AUTH_IDENTITY)
1339#endif
1340
1341#ifndef SEC_WINNT_AUTH_IDENTITY_VERSION
1342#define SEC_WINNT_AUTH_IDENTITY_VERSION 0x200
1343
1344  typedef struct _SEC_WINNT_AUTH_IDENTITY_EXW {
1345    unsigned __LONG32 Version;
1346    unsigned __LONG32 Length;
1347    unsigned short *User;
1348    unsigned __LONG32 UserLength;
1349    unsigned short *Domain;
1350    unsigned __LONG32 DomainLength;
1351    unsigned short *Password;
1352    unsigned __LONG32 PasswordLength;
1353    unsigned __LONG32 Flags;
1354    unsigned short *PackageList;
1355    unsigned __LONG32 PackageListLength;
1356  } SEC_WINNT_AUTH_IDENTITY_EXW,*PSEC_WINNT_AUTH_IDENTITY_EXW;
1357
1358  typedef struct _SEC_WINNT_AUTH_IDENTITY_EXA {
1359    unsigned __LONG32 Version;
1360    unsigned __LONG32 Length;
1361    unsigned char *User;
1362    unsigned __LONG32 UserLength;
1363    unsigned char *Domain;
1364    unsigned __LONG32 DomainLength;
1365    unsigned char *Password;
1366    unsigned __LONG32 PasswordLength;
1367    unsigned __LONG32 Flags;
1368    unsigned char *PackageList;
1369    unsigned __LONG32 PackageListLength;
1370  } SEC_WINNT_AUTH_IDENTITY_EXA,*PSEC_WINNT_AUTH_IDENTITY_EXA;
1371
1372#define SEC_WINNT_AUTH_IDENTITY_EX __MINGW_NAME_AW(SEC_WINNT_AUTH_IDENTITY_EX)
1373#define PSEC_WINNT_AUTH_IDENTITY_EX __MINGW_NAME_AW(PSEC_WINNT_AUTH_IDENTITY_EX)
1374#endif
1375
1376#ifndef _AUTH_IDENTITY_INFO_DEFINED
1377#define _AUTH_IDENTITY_INFO_DEFINED
1378
1379  typedef union _SEC_WINNT_AUTH_IDENTITY_INFO {
1380    SEC_WINNT_AUTH_IDENTITY_EXW AuthIdExw;
1381    SEC_WINNT_AUTH_IDENTITY_EXA AuthIdExa;
1382    SEC_WINNT_AUTH_IDENTITY_A AuthId_a;
1383    SEC_WINNT_AUTH_IDENTITY_W AuthId_w;
1384    SEC_WINNT_AUTH_IDENTITY_EX2 AuthIdEx2;
1385  } SEC_WINNT_AUTH_IDENTITY_INFO, *PSEC_WINNT_AUTH_IDENTITY_INFO;
1386
1387#define SEC_WINNT_AUTH_IDENTITY_FLAGS_PROCESS_ENCRYPTED     0x10
1388#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SYSTEM_PROTECTED      0x20
1389#define SEC_WINNT_AUTH_IDENTITY_FLAGS_USER_PROTECTED        0x40
1390#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SYSTEM_ENCRYPTED      0x80
1391
1392#define SEC_WINNT_AUTH_IDENTITY_FLAGS_RESERVED              0x10000
1393#define SEC_WINNT_AUTH_IDENTITY_FLAGS_NULL_USER             0x20000
1394#define SEC_WINNT_AUTH_IDENTITY_FLAGS_NULL_DOMAIN           0x40000
1395#define SEC_WINNT_AUTH_IDENTITY_FLAGS_ID_PROVIDER           0x80000
1396
1397#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_USE_MASK              0xff000000
1398#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_SAVE  0x80000000
1399#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_SAVE_CRED_BY_CALLER   SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_SAVE
1400#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_SAVE_CRED_CHECKED     0x40000000
1401#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_NO_CHECKBOX           0x20000000
1402#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_LOAD  0x10000000
1403
1404#define SEC_WINNT_AUTH_IDENTITY_FLAGS_VALID_SSPIPFC_FLAGS \
1405  (SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_SAVE | \
1406   SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_SAVE_CRED_CHECKED | \
1407   SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_NO_CHECKBOX | \
1408   SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_CREDPROV_DO_NOT_LOAD)
1409
1410#endif
1411
1412#define SSPIPFC_CREDPROV_DO_NOT_SAVE          0x00000001
1413#define SSPIPFC_SAVE_CRED_BY_CALLER           SSPIPFC_CREDPROV_DO_NOT_SAVE
1414#define SSPIPFC_NO_CHECKBOX                   0x00000002
1415#define SSPIPFC_CREDPROV_DO_NOT_LOAD          0x00000004
1416#define SSPIPFC_USE_CREDUIBROKER	          0x00000008
1417#define SSPIPFC_VALID_FLAGS \
1418  (SSPIPFC_CREDPROV_DO_NOT_SAVE | SSPIPFC_NO_CHECKBOX | SSPIPFC_CREDPROV_DO_NOT_LOAD | SSPIPFC_USE_CREDUIBROKER)
1419
1420#ifndef _SSPIPFC_NONE_
1421
1422typedef PVOID PSEC_WINNT_AUTH_IDENTITY_OPAQUE;
1423
1424unsigned __LONG32 SEC_ENTRY SspiPromptForCredentialsW(
1425  PCWSTR pszTargetName,
1426#ifdef _CREDUI_INFO_DEFINED
1427  PCREDUI_INFOW pUiInfo,
1428#else
1429  PVOID pUiInfo,
1430#endif
1431  unsigned __LONG32 dwAuthError,
1432  PCWSTR pszPackage,
1433  PSEC_WINNT_AUTH_IDENTITY_OPAQUE pInputAuthIdentity,
1434  PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity,
1435  int* pfSave,
1436  unsigned __LONG32 dwFlags
1437);
1438
1439unsigned __LONG32 SEC_ENTRY SspiPromptForCredentialsA(
1440  PCSTR pszTargetName,
1441#ifdef _CREDUI_INFO_DEFINED
1442  PCREDUI_INFOA pUiInfo,
1443#else
1444  PVOID pUiInfo,
1445#endif
1446  unsigned __LONG32 dwAuthError,
1447  PCSTR pszPackage,
1448  PSEC_WINNT_AUTH_IDENTITY_OPAQUE pInputAuthIdentity,
1449  PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity,
1450  int* pfSave,
1451  unsigned __LONG32 dwFlags
1452);
1453
1454#define SspiPromptForCredentials __MINGW_NAME_AW(SspiPromptForCredentials)
1455
1456#else
1457
1458typedef PSEC_WINNT_AUTH_IDENTITY_INFO PSEC_WINNT_AUTH_IDENTITY_OPAQUE;
1459
1460#endif
1461
1462#ifdef _SEC_WINNT_AUTH_TYPES
1463
1464EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_PASSWORD =
1465  { 0x28bfc32f, 0x10f6, 0x4738, { 0x98, 0xd1, 0x1a, 0xc0, 0x61, 0xdf, 0x71, 0x6a } };
1466
1467EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_CERT =
1468  { 0x235f69ad, 0x73fb, 0x4dbc, { 0x82, 0x3, 0x6, 0x29, 0xe7, 0x39, 0x33, 0x9b } };
1469
1470EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_CREDMAN_CERT =
1471  { 0x7cb72412, 0x1016, 0x491a, { 0x8c, 0x87, 0x4d, 0x2a, 0xa1, 0xb7, 0xdd, 0x3a } };
1472
1473EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_NGC =
1474  { 0x10a47879, 0x5ebf, 0x4b85, { 0xbd, 0x8d, 0xc2, 0x1b, 0xb4, 0xf4, 0x9c, 0x8a } };
1475
1476EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_FIDO =
1477  { 0x32e8f8d7, 0x7871, 0x4bcc, { 0x83, 0xc5, 0x46, 0xf, 0x66, 0xc6, 0x13, 0x5c } };
1478
1479EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_KEYTAB =
1480  { 0xd587aae8, 0xf78f, 0x4455, { 0xa1, 0x12, 0xc9, 0x34, 0xbe, 0xee, 0x7c, 0xe1 } };
1481
1482EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_DELEGATION_TOKEN =
1483  { 0x12e52e0f, 0x6f9b, 0x4f83, { 0x90, 0x20, 0x9d, 0xe4, 0x2b, 0x22, 0x62, 0x67 } };
1484
1485EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_CSP_DATA =
1486  { 0x68fd9879, 0x79c, 0x4dfe, { 0x82, 0x81, 0x57, 0x8a, 0xad, 0xc1, 0xc1, 0x0 } };
1487
1488EXTERN_C __declspec(selectany) const GUID SEC_WINNT_AUTH_DATA_TYPE_SMARTCARD_CONTEXTS =
1489  { 0xb86c4ff3, 0x49d7, 0x4dc4, { 0xb5, 0x60, 0xb1, 0x16, 0x36, 0x85, 0xb2, 0x36 } };
1490
1491EXTERN_C __declspec(selectany) const GUID CREDUIWIN_STRUCTURE_TYPE_SSPIPFC  =
1492  { 0x3c3e93d9, 0xd96b, 0x49b5, { 0x94, 0xa7, 0x45, 0x85, 0x92, 0x8, 0x83, 0x37 } };
1493
1494EXTERN_C __declspec(selectany) const GUID SSPIPFC_STRUCTURE_TYPE_CREDUI_CONTEXT =
1495  { 0xc2fffe6f, 0x503d, 0x4c3d, { 0xa9, 0x5e, 0xbc, 0xe8, 0x21, 0x21, 0x3d, 0x44 } };
1496
1497typedef struct _SEC_WINNT_AUTH_BYTE_VECTOR {
1498  unsigned __LONG32 ByteArrayOffset;
1499  unsigned short ByteArrayLength;
1500} SEC_WINNT_AUTH_BYTE_VECTOR, *PSEC_WINNT_AUTH_BYTE_VECTOR;
1501
1502typedef struct _SEC_WINNT_AUTH_DATA {
1503  GUID CredType;
1504  SEC_WINNT_AUTH_BYTE_VECTOR CredData;
1505} SEC_WINNT_AUTH_DATA, *PSEC_WINNT_AUTH_DATA;
1506
1507typedef struct _SEC_WINNT_AUTH_PACKED_CREDENTIALS {
1508  unsigned short cbHeaderLength;
1509  unsigned short cbStructureLength;
1510  SEC_WINNT_AUTH_DATA AuthData;
1511} SEC_WINNT_AUTH_PACKED_CREDENTIALS, *PSEC_WINNT_AUTH_PACKED_CREDENTIALS;
1512
1513typedef struct _SEC_WINNT_AUTH_DATA_PASSWORD {
1514  SEC_WINNT_AUTH_BYTE_VECTOR UnicodePassword;
1515} SEC_WINNT_AUTH_DATA_PASSWORD, PSEC_WINNT_AUTH_DATA_PASSWORD;
1516
1517typedef struct _SEC_WINNT_AUTH_CERTIFICATE_DATA {
1518  unsigned short cbHeaderLength;
1519  unsigned short cbStructureLength;
1520  SEC_WINNT_AUTH_BYTE_VECTOR Certificate;
1521} SEC_WINNT_AUTH_CERTIFICATE_DATA, *PSEC_WINNT_AUTH_CERTIFICATE_DATA;
1522
1523typedef struct _SEC_WINNT_AUTH_NGC_DATA {
1524  LUID LogonId;
1525  unsigned __LONG32 Flags;
1526  SEC_WINNT_AUTH_BYTE_VECTOR CspInfo;
1527  SEC_WINNT_AUTH_BYTE_VECTOR UserIdKeyAuthTicket;
1528  SEC_WINNT_AUTH_BYTE_VECTOR DecryptionKeyName;
1529  SEC_WINNT_AUTH_BYTE_VECTOR DecryptionKeyAuthTicket;
1530} SEC_WINNT_AUTH_NGC_DATA, *PSEC_WINNT_AUTH_NGC_DATA;
1531
1532#define NGC_DATA_FLAG_KERB_CERTIFICATE_LOGON_FLAG_CHECK_DUPLICATES      1
1533#define NGC_DATA_FLAG_KERB_CERTIFICATE_LOGON_FLAG_USE_CERTIFICATE_INFO  2
1534#define NGC_DATA_FLAG_IS_SMARTCARD_DATA                                 4
1535#define NGC_DATA_FLAG_IS_CLOUD_TRUST_CRED                               8
1536
1537typedef struct _SEC_WINNT_AUTH_DATA_TYPE_SMARTCARD_CONTEXTS_DATA {
1538  PVOID pcc;
1539  PVOID hProv;
1540  LPWSTR pwszECDHKeyName;
1541} SEC_WINNT_AUTH_DATA_TYPE_SMARTCARD_CONTEXTS_DATA, *PSEC_WINNT_AUTH_DATA_TYPE_SMARTCARD_CONTEXTS_DATA;
1542
1543typedef struct _SEC_WINNT_AUTH_FIDO_DATA {
1544  unsigned short cbHeaderLength;
1545  unsigned short cbStructureLength;
1546  SEC_WINNT_AUTH_BYTE_VECTOR Secret;
1547  SEC_WINNT_AUTH_BYTE_VECTOR NewSecret;
1548  SEC_WINNT_AUTH_BYTE_VECTOR EncryptedNewSecret;
1549  SEC_WINNT_AUTH_BYTE_VECTOR NetworkLogonBuffer;
1550  ULONG64 ulSignatureCount;
1551} SEC_WINNT_AUTH_FIDO_DATA, *PSEC_WINNT_AUTH_FIDO_DATA;
1552
1553typedef struct _SEC_WINNT_CREDUI_CONTEXT_VECTOR {
1554  ULONG CredUIContextArrayOffset;
1555  USHORT CredUIContextCount;
1556} SEC_WINNT_CREDUI_CONTEXT_VECTOR, *PSEC_WINNT_CREDUI_CONTEXT_VECTOR;
1557
1558typedef struct _SEC_WINNT_AUTH_SHORT_VECTOR {
1559  ULONG ShortArrayOffset;
1560  USHORT ShortArrayCount;
1561} SEC_WINNT_AUTH_SHORT_VECTOR, *PSEC_WINNT_AUTH_SHORT_VECTOR;
1562
1563typedef struct _CREDUIWIN_MARSHALED_CONTEXT {
1564  GUID StructureType;
1565  USHORT cbHeaderLength;
1566  LUID LogonId;
1567  GUID MarshaledDataType;
1568  ULONG MarshaledDataOffset;
1569  USHORT MarshaledDataLength;
1570} CREDUIWIN_MARSHALED_CONTEXT, *PCREDUIWIN_MARSHALED_CONTEXT;
1571
1572typedef struct _SEC_WINNT_CREDUI_CONTEXT {
1573  USHORT cbHeaderLength;
1574  HANDLE CredUIContextHandle;
1575#ifdef _CREDUI_INFO_DEFINED
1576  PCREDUI_INFOW UIInfo;
1577#else
1578  PVOID UIInfo;
1579#endif
1580  ULONG dwAuthError;
1581  PSEC_WINNT_AUTH_IDENTITY_OPAQUE pInputAuthIdentity;
1582  PUNICODE_STRING TargetName;
1583} SEC_WINNT_CREDUI_CONTEXT, *PSEC_WINNT_CREDUI_CONTEXT;
1584
1585typedef struct _SEC_WINNT_AUTH_PACKED_CREDENTIALS_EX {
1586  unsigned short cbHeaderLength;
1587  unsigned __LONG32 Flags;
1588  SEC_WINNT_AUTH_BYTE_VECTOR PackedCredentials;
1589  SEC_WINNT_AUTH_SHORT_VECTOR PackageList;
1590} SEC_WINNT_AUTH_PACKED_CREDENTIALS_EX, *PSEC_WINNT_AUTH_PACKED_CREDENTIALS_EX;
1591
1592SECURITY_STATUS SEC_ENTRY SspiGetCredUIContext(HANDLE ContextHandle, GUID* CredType,
1593                                               LUID* LogonId,
1594                                               PSEC_WINNT_CREDUI_CONTEXT_VECTOR* CredUIContexts,
1595                                               HANDLE* TokenHandle);
1596SECURITY_STATUS SEC_ENTRY SspiUpdateCredentials(HANDLE ContextHandle, GUID* CredType,
1597                                                ULONG FlatCredUIContextLength,
1598                                                PUCHAR FlatCredUIContext);
1599SECURITY_STATUS SEC_ENTRY SspiUnmarshalCredUIContext(PUCHAR MarshaledCredUIContext,
1600                                                     ULONG MarshaledCredUIContextLength,
1601                                                     PSEC_WINNT_CREDUI_CONTEXT* CredUIContext);
1602
1603#endif
1604
1605#define SEC_WINNT_AUTH_IDENTITY_MARSHALLED 0x4
1606#define SEC_WINNT_AUTH_IDENTITY_ONLY 0x8
1607
1608typedef struct _SECURITY_PACKAGE_OPTIONS {
1609  unsigned __LONG32 Size;
1610  unsigned __LONG32 Type;
1611  unsigned __LONG32 Flags;
1612  unsigned __LONG32 SignatureSize;
1613  void *Signature;
1614} SECURITY_PACKAGE_OPTIONS,*PSECURITY_PACKAGE_OPTIONS;
1615
1616#define SECPKG_OPTIONS_TYPE_UNKNOWN 0
1617#define SECPKG_OPTIONS_TYPE_LSA 1
1618#define SECPKG_OPTIONS_TYPE_SSPI 2
1619
1620#define SECPKG_OPTIONS_PERMANENT 0x00000001
1621
1622#define AddSecurityPackage __MINGW_NAME_AW(AddSecurityPackage)
1623#define DeleteSecurityPackage __MINGW_NAME_AW(DeleteSecurityPackage)
1624
1625SECURITY_STATUS WINAPI AddSecurityPackageA(LPSTR pszPackageName,PSECURITY_PACKAGE_OPTIONS pOptions);
1626SECURITY_STATUS WINAPI AddSecurityPackageW(LPWSTR pszPackageName,PSECURITY_PACKAGE_OPTIONS pOptions);
1627
1628  SECURITY_STATUS WINAPI DeleteSecurityPackageA(SEC_CHAR *pszPackageName);
1629  SECURITY_STATUS WINAPI DeleteSecurityPackageW(SEC_WCHAR *pszPackageName);
1630
1631#if ISSP_MODE == 0
1632
1633typedef struct _SspiAsyncContext SspiAsyncContext;
1634
1635typedef void (*SspiAsyncNotifyCallback)(SspiAsyncContext* Handle, PVOID CallbackData);
1636
1637SspiAsyncContext* SspiCreateAsyncContext();
1638void SspiFreeAsyncContext(SspiAsyncContext* Handle);
1639NTSTATUS SspiReinitAsyncContext(SspiAsyncContext* Handle);
1640SECURITY_STATUS SspiSetAsyncNotifyCallback(SspiAsyncContext* Context,
1641                                           SspiAsyncNotifyCallback Callback,
1642                                           void* CallbackData);
1643BOOLEAN SspiAsyncContextRequiresNotify(SspiAsyncContext* AsyncContext);
1644SECURITY_STATUS SspiGetAsyncCallStatus(SspiAsyncContext* Handle);
1645
1646SECURITY_STATUS SspiAcquireCredentialsHandleAsyncW(
1647  SspiAsyncContext* AsyncContext,
1648#if ISSP_MODE == 0
1649  PSECURITY_STRING pszPrincipal,
1650  PSECURITY_STRING pszPackage,
1651#else
1652  LPWSTR pszPrincipal,
1653  LPWSTR pszPackage,
1654#endif
1655  unsigned __LONG32 fCredentialUse,
1656  void* pvLogonId,
1657  void* pAuthData,
1658  SEC_GET_KEY_FN pGetKeyFn,
1659  void* pvGetKeyArgument,
1660  PCredHandle phCredential,
1661  PTimeStamp ptsExpiry
1662);
1663
1664SECURITY_STATUS SspiAcquireCredentialsHandleAsyncA(
1665  SspiAsyncContext* AsyncContext,
1666  LPSTR pszPrincipal,
1667  LPSTR pszPackage,
1668  unsigned __LONG32 fCredentialUse,
1669  void * pvLogonId,
1670  void * pAuthData,
1671  SEC_GET_KEY_FN pGetKeyFn,
1672  void * pvGetKeyArgument,
1673  PCredHandle phCredential,
1674  PTimeStamp ptsExpiry
1675);
1676
1677SECURITY_STATUS SspiInitializeSecurityContextAsyncW(
1678  SspiAsyncContext* AsyncContext,
1679  PCredHandle phCredential,
1680  PCtxtHandle phContext,
1681#if ISSP_MODE == 0
1682  PSECURITY_STRING pszTargetName,
1683#else
1684  LPWSTR pszTargetName,
1685#endif
1686  unsigned __LONG32 fContextReq,
1687  unsigned __LONG32 Reserved1,
1688  unsigned __LONG32 TargetDataRep,
1689  PSecBufferDesc pInput,
1690  unsigned __LONG32 Reserved2,
1691  PCtxtHandle phNewContext,
1692  PSecBufferDesc pOutput,
1693  unsigned __LONG32* pfContextAttr,
1694  PTimeStamp ptsExpiry
1695);
1696
1697SECURITY_STATUS SspiInitializeSecurityContextAsyncA(
1698  SspiAsyncContext* AsyncContext,
1699  PCredHandle phCredential,
1700  PCtxtHandle phContext,
1701  LPSTR pszTargetName,
1702  unsigned __LONG32 fContextReq,
1703  unsigned __LONG32 Reserved1,
1704  unsigned __LONG32 TargetDataRep,
1705  PSecBufferDesc pInput,
1706  unsigned __LONG32 Reserved2,
1707  PCtxtHandle phNewContext,
1708  PSecBufferDesc pOutput,
1709  unsigned __LONG32* pfContextAttr,
1710  PTimeStamp ptsExpiry
1711);
1712
1713SECURITY_STATUS SspiAcceptSecurityContextAsync(
1714  SspiAsyncContext* AsyncContext,
1715  PCredHandle phCredential,
1716  PCtxtHandle phContext,
1717  PSecBufferDesc pInput,
1718  unsigned __LONG32 fContextReq,
1719  unsigned __LONG32 TargetDataRep,
1720  PCtxtHandle phNewContext,
1721  PSecBufferDesc pOutput,
1722  unsigned __LONG32* pfContextAttr,
1723  PTimeStamp ptsExpiry
1724);
1725
1726SECURITY_STATUS SspiFreeCredentialsHandleAsync(
1727  SspiAsyncContext* AsyncContext,
1728  PCredHandle phCredential
1729);
1730
1731SECURITY_STATUS SspiDeleteSecurityContextAsync(
1732  SspiAsyncContext* AsyncContext,
1733  PCtxtHandle phContext
1734);
1735
1736#define SspiAcquireCredentialsHandleAsync __MINGW_NAME_AW(SspiAcquireCredentialsHandleAsync)
1737#define SspiInitializeSecurityContextAsync __MINGW_NAME_AW(SspiInitializeSecurityContextAsync)
1738
1739#endif
1740
1741SECURITY_STATUS SEC_ENTRY SspiPrepareForCredRead(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
1742                                                 PCWSTR pszTargetName, PULONG pCredmanCredentialType,
1743                                                 PCWSTR* ppszCredmanTargetName);
1744
1745SECURITY_STATUS SEC_ENTRY SspiPrepareForCredWrite(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
1746                                                  PCWSTR pszTargetName, PULONG pCredmanCredentialType,
1747                                                  PCWSTR* ppszCredmanTargetName, PCWSTR* ppszCredmanUserName,
1748                                                  PUCHAR *ppCredentialBlob, PULONG pCredentialBlobSize);
1749
1750#define SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON            1
1751#define SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_PROCESS          2
1752#define SEC_WINNT_AUTH_IDENTITY_ENCRYPT_FOR_SYSTEM            4
1753
1754SECURITY_STATUS SEC_ENTRY SspiEncryptAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
1755
1756SECURITY_STATUS SEC_ENTRY SspiEncryptAuthIdentityEx(ULONG Options, PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
1757
1758SECURITY_STATUS SEC_ENTRY SspiDecryptAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE EncryptedAuthData);
1759
1760SECURITY_STATUS SEC_ENTRY SspiDecryptAuthIdentityEx(ULONG Options, PSEC_WINNT_AUTH_IDENTITY_OPAQUE EncryptedAuthData);
1761
1762BOOLEAN SEC_ENTRY SspiIsAuthIdentityEncrypted(PSEC_WINNT_AUTH_IDENTITY_OPAQUE EncryptedAuthData);
1763
1764#if NTDDI_VERSION >= NTDDI_WIN7
1765
1766SECURITY_STATUS SEC_ENTRY SspiEncodeAuthIdentityAsStrings(PSEC_WINNT_AUTH_IDENTITY_OPAQUE pAuthIdentity,
1767                                                          PCWSTR* ppszUserName, PCWSTR* ppszDomainName,
1768                                                          PCWSTR* ppszPackedCredentialsString);
1769
1770SECURITY_STATUS SEC_ENTRY SspiValidateAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
1771
1772SECURITY_STATUS SEC_ENTRY SspiCopyAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData,
1773                                               PSEC_WINNT_AUTH_IDENTITY_OPAQUE* AuthDataCopy);
1774
1775VOID SEC_ENTRY SspiFreeAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
1776
1777VOID SEC_ENTRY SspiZeroAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
1778
1779VOID SEC_ENTRY SspiLocalFree(PVOID DataBuffer);
1780
1781SECURITY_STATUS SEC_ENTRY SspiEncodeStringsAsAuthIdentity(PCWSTR pszUserName, PCWSTR pszDomainName,
1782                                                          PCWSTR pszPackedCredentialsString,
1783                                                          PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity);
1784
1785SECURITY_STATUS SEC_ENTRY SspiCompareAuthIdentities(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity1,
1786                                                    PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity2,
1787                                                    PBOOLEAN SameSuppliedUser, PBOOLEAN SameSuppliedIdentity);
1788
1789SECURITY_STATUS SEC_ENTRY SspiMarshalAuthIdentity(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
1790                                                  unsigned __LONG32* AuthIdentityLength,
1791                                                  char** AuthIdentityByteArray);
1792
1793SECURITY_STATUS SEC_ENTRY SspiUnmarshalAuthIdentity(unsigned __LONG32 AuthIdentityLength,
1794                                                    char* AuthIdentityByteArray,
1795                                                    PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity);
1796
1797BOOLEAN SEC_ENTRY SspiIsPromptingNeeded(unsigned __LONG32 ErrorOrNtStatus);
1798
1799SECURITY_STATUS SEC_ENTRY SspiGetTargetHostName(PCWSTR pszTargetName, PWSTR* pszHostName);
1800
1801SECURITY_STATUS SEC_ENTRY SspiExcludePackage(PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
1802                                             PCWSTR pszPackageName,
1803                                             PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppNewAuthIdentity);
1804
1805#endif
1806
1807#ifdef __cplusplus
1808}
1809#endif
1810#endif