|  | /* | 
|  | * Copyright (C) 2004 Juan Lang | 
|  | * | 
|  | * This library is free software; you can redistribute it and/or | 
|  | * modify it under the terms of the GNU Lesser General Public | 
|  | * License as published by the Free Software Foundation; either | 
|  | * version 2.1 of the License, or (at your option) any later version. | 
|  | * | 
|  | * This library is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | * Lesser General Public License for more details. | 
|  | * | 
|  | * You should have received a copy of the GNU Lesser General Public | 
|  | * License along with this library; if not, write to the Free Software | 
|  | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | 
|  | */ | 
|  | #ifndef __WINE_SSPI_H__ | 
|  | #define __WINE_SSPI_H__ | 
|  |  | 
|  | /* FIXME: #include <sdkddkver.h> */ | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | #define SEC_ENTRY __stdcall | 
|  |  | 
|  | typedef WCHAR SEC_WCHAR; | 
|  | typedef CHAR  SEC_CHAR; | 
|  |  | 
|  | #ifndef __SECSTATUS_DEFINED__ | 
|  | #define __SECSTATUS_DEFINED__ | 
|  | typedef LONG SECURITY_STATUS; | 
|  | #endif | 
|  |  | 
|  | #ifdef UNICODE | 
|  | typedef SEC_WCHAR * SECURITY_PSTR; | 
|  | typedef CONST SEC_WCHAR *  SECURITY_PCSTR; | 
|  | #else | 
|  | typedef SEC_CHAR * SECURITY_PSTR; | 
|  | typedef CONST SEC_CHAR *  SECURITY_PCSTR; | 
|  | #endif | 
|  |  | 
|  | #ifndef __SECHANDLE_DEFINED__ | 
|  | #define __SECHANDLE_DEFINED__ | 
|  | typedef struct _SecHandle | 
|  | { | 
|  | ULONG_PTR dwLower; | 
|  | ULONG_PTR dwUpper; | 
|  | } SecHandle, *PSecHandle; | 
|  | #endif | 
|  |  | 
|  | #define SecInvalidateHandle(x) do { \ | 
|  | ((PSecHandle)(x))->dwLower = ((ULONG_PTR)((INT_PTR)-1)); \ | 
|  | ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1)); \ | 
|  | } while (0) | 
|  |  | 
|  | #define SecIsValidHandle(x) \ | 
|  | ((((PSecHandle)(x))->dwLower != ((ULONG_PTR)(INT_PTR)-1)) && \ | 
|  | (((PSecHandle)(x))->dwUpper != ((ULONG_PTR)(INT_PTR)-1))) | 
|  |  | 
|  | typedef SecHandle CredHandle; | 
|  | typedef PSecHandle PCredHandle; | 
|  |  | 
|  | #ifndef __WINE_CTXTHANDLE_DEFINED__ | 
|  | #define __WINE_CTXTHANDLE_DEFINED__ | 
|  | typedef SecHandle CtxtHandle; | 
|  | typedef PSecHandle PCtxtHandle; | 
|  | #endif | 
|  |  | 
|  | typedef struct _SECURITY_INTEGER | 
|  | { | 
|  | ULONG LowPart; | 
|  | LONG  HighPart; | 
|  | } SECURITY_INTEGER, *PSECURITY_INTEGER; | 
|  | typedef SECURITY_INTEGER TimeStamp, *PTimeStamp; | 
|  |  | 
|  | #ifndef __UNICODE_STRING_DEFINED__ | 
|  | #define __UNICODE_STRING_DEFINED__ | 
|  | typedef struct _UNICODE_STRING { | 
|  | USHORT Length;        /* bytes */ | 
|  | USHORT MaximumLength; /* bytes */ | 
|  | PWSTR  Buffer; | 
|  | } UNICODE_STRING, *PUNICODE_STRING; | 
|  | #endif | 
|  |  | 
|  | typedef UNICODE_STRING SECURITY_STRING, *PSECURITY_STRING; | 
|  |  | 
|  | typedef struct _SecPkgInfoA | 
|  | { | 
|  | ULONG     fCapabilities; | 
|  | USHORT    wVersion; | 
|  | USHORT    wRPCID; | 
|  | ULONG     cbMaxToken; | 
|  | SEC_CHAR *Name; | 
|  | SEC_CHAR *Comment; | 
|  | } SecPkgInfoA, *PSecPkgInfoA; | 
|  |  | 
|  | typedef struct _SecPkgInfoW | 
|  | { | 
|  | ULONG      fCapabilities; | 
|  | USHORT     wVersion; | 
|  | USHORT     wRPCID; | 
|  | ULONG      cbMaxToken; | 
|  | SEC_WCHAR *Name; | 
|  | SEC_WCHAR *Comment; | 
|  | } SecPkgInfoW, *PSecPkgInfoW; | 
|  |  | 
|  | #define SecPkgInfo WINELIB_NAME_AW(SecPkgInfo) | 
|  | #define PSecPkgInfo WINELIB_NAME_AW(PSecPkgInfo) | 
|  |  | 
|  | /* fCapabilities field of SecPkgInfo */ | 
|  | #define SECPKG_FLAG_INTEGRITY              0x00000001 | 
|  | #define SECPKG_FLAG_PRIVACY                0x00000002 | 
|  | #define SECPKG_FLAG_TOKEN_ONLY             0x00000004 | 
|  | #define SECPKG_FLAG_DATAGRAM               0x00000008 | 
|  | #define SECPKG_FLAG_CONNECTION             0x00000010 | 
|  | #define SECPKG_FLAG_MULTI_REQUIRED         0x00000020 | 
|  | #define SECPKG_FLAG_CLIENT_ONLY            0x00000040 | 
|  | #define SECPKG_FLAG_EXTENDED_ERROR         0x00000080 | 
|  | #define SECPKG_FLAG_IMPERSONATION          0x00000100 | 
|  | #define SECPKG_FLAG_ACCEPT_WIN32_NAME      0x00000200 | 
|  | #define SECPKG_FLAG_STREAM                 0x00000400 | 
|  | #define SECPKG_FLAG_NEGOTIABLE             0x00000800 | 
|  | #define SECPKG_FLAG_GSS_COMPATIBLE         0x00001000 | 
|  | #define SECPKG_FLAG_LOGON                  0x00002000 | 
|  | #define SECPKG_FLAG_ASCII_BUFFERS          0x00004000 | 
|  | #define SECPKG_FLAG_FRAGMENT               0x00008000 | 
|  | #define SECPKG_FLAG_MUTUAL_AUTH            0x00010000 | 
|  | #define SECPKG_FLAG_DELEGATION             0x00020000 | 
|  | #define SECPKG_FLAG_READONLY_WITH_CHECKSUM 0x00040000 | 
|  |  | 
|  | #define SECPKG_ID_NONE  0xffff | 
|  |  | 
|  | typedef struct _SecBuffer | 
|  | { | 
|  | ULONG cbBuffer; | 
|  | ULONG BufferType; | 
|  | PVOID pvBuffer; | 
|  | } SecBuffer, *PSecBuffer; | 
|  |  | 
|  | /* values for BufferType */ | 
|  | #define SECBUFFER_EMPTY               0 | 
|  | #define SECBUFFER_DATA                1 | 
|  | #define SECBUFFER_TOKEN               2 | 
|  | #define SECBUFFER_PKG_PARAMS          3 | 
|  | #define SECBUFFER_MISSING             4 | 
|  | #define SECBUFFER_EXTRA               5 | 
|  | #define SECBUFFER_STREAM_TRAILER      6 | 
|  | #define SECBUFFER_STREAM_HEADER       7 | 
|  | #define SECBUFFER_NEGOTIATION_INFO    8 | 
|  | #define SECBUFFER_PADDING             9 | 
|  | #define SECBUFFER_STREAM             10 | 
|  | #define SECBUFFER_MECHLIST           11 | 
|  | #define SECBUFFER_MECHLIST_SIGNATURE 12 | 
|  | #define SECBUFFER_TARGET             13 | 
|  | #define SECBUFFER_CHANNEL_BINDINGS   14 | 
|  |  | 
|  | #define SECBUFFER_ATTRMASK               0xf0000000 | 
|  | #define SECBUFFER_READONLY               0x80000000 | 
|  | #define SECBUFFER_READONLY_WITH_CHECKSUM 0x10000000 | 
|  | #define SECBUFFER_RESERVED               0x60000000 | 
|  |  | 
|  | typedef struct _SecBufferDesc | 
|  | { | 
|  | ULONG      ulVersion; | 
|  | ULONG      cBuffers; | 
|  | PSecBuffer pBuffers; | 
|  | } SecBufferDesc, *PSecBufferDesc; | 
|  |  | 
|  | /* values for ulVersion */ | 
|  | #define SECBUFFER_VERSION 0 | 
|  |  | 
|  | typedef void (SEC_ENTRY *SEC_GET_KEY_FN)(void *Arg, void *Principal, | 
|  | ULONG KeyVer, void **Key, SECURITY_STATUS *Status); | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesA(PULONG pcPackages, | 
|  | PSecPkgInfoA *ppPackageInfo); | 
|  | SECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesW(PULONG pcPackages, | 
|  | PSecPkgInfoW *ppPackageInfo); | 
|  | #define EnumerateSecurityPackages WINELIB_NAME_AW(EnumerateSecurityPackages) | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *ENUMERATE_SECURITY_PACKAGES_FN_A)(PULONG, | 
|  | PSecPkgInfoA *); | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *ENUMERATE_SECURITY_PACKAGES_FN_W)(PULONG, | 
|  | PSecPkgInfoW *); | 
|  | #define ENUMERATE_SECURITY_PACKAGES_FN WINELIB_NAME_AW(ENUMERATE_SECURITY_PACKAGES_FN_) | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesA( | 
|  | PCredHandle phCredential, ULONG ulAttribute, void *pBuffer); | 
|  | SECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesW( | 
|  | PCredHandle phCredential, ULONG ulAttribute, void *pBuffer); | 
|  | #define QueryCredentialsAttributes WINELIB_NAME_AW(QueryCredentialsAttributes) | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CREDENTIALS_ATTRIBUTES_FN_A) | 
|  | (PCredHandle, ULONG, PVOID); | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CREDENTIALS_ATTRIBUTES_FN_W) | 
|  | (PCredHandle, ULONG, PVOID); | 
|  | #define QUERY_CREDENTIALS_ATTRIBUTES_FN WINELIB_NAME_AW(QUERY_CREDENTIALS_ATTRIBUTES_FN_) | 
|  |  | 
|  | /* values for QueryCredentialsAttributes ulAttribute */ | 
|  | #define SECPKG_CRED_ATTR_NAMES 1 | 
|  |  | 
|  | /* types for QueryCredentialsAttributes */ | 
|  | typedef struct _SecPkgCredentials_NamesA | 
|  | { | 
|  | SEC_CHAR *sUserName; | 
|  | } SecPkgCredentials_NamesA, *PSecPkgCredentials_NamesA; | 
|  |  | 
|  | typedef struct _SecPkgCredentials_NamesW | 
|  | { | 
|  | SEC_WCHAR *sUserName; | 
|  | } SecPkgCredentials_NamesW, *PSecPkgCredentials_NamesW; | 
|  |  | 
|  | #define SecPkgCredentials_Names WINELIB_NAME_AW(SecPkgCredentials_Names) | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleA( | 
|  | SEC_CHAR *pszPrincipal, SEC_CHAR *pszPackage, ULONG fCredentialsUse, | 
|  | PLUID pvLogonID, PVOID pAuthData, SEC_GET_KEY_FN pGetKeyFn, | 
|  | PVOID pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry); | 
|  | SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleW( | 
|  | SEC_WCHAR *pszPrincipal, SEC_WCHAR *pszPackage, ULONG fCredentialsUse, | 
|  | PLUID pvLogonID, PVOID pAuthData, SEC_GET_KEY_FN pGetKeyFn, | 
|  | PVOID pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry); | 
|  | #define AcquireCredentialsHandle WINELIB_NAME_AW(AcquireCredentialsHandle) | 
|  |  | 
|  | /* flags for fCredentialsUse */ | 
|  | #define SECPKG_CRED_INBOUND  0x00000001 | 
|  | #define SECPKG_CRED_OUTBOUND 0x00000002 | 
|  | #define SECPKG_CRED_BOTH     (SECPKG_CRED_INBOUND | SECPKG_CRED_OUTBOUND) | 
|  | #define SECPKG_CRED_DEFAULT  0x00000004 | 
|  | #define SECPKG_CRED_RESERVED 0xf0000000 | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_A)( | 
|  | SEC_CHAR *, SEC_CHAR *, ULONG, PLUID, PVOID, SEC_GET_KEY_FN, PVOID, | 
|  | PCredHandle, PTimeStamp); | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_W)( | 
|  | SEC_WCHAR *, SEC_WCHAR *, ULONG, PLUID, PVOID, SEC_GET_KEY_FN, PVOID, | 
|  | PCredHandle, PTimeStamp); | 
|  | #define ACQUIRE_CREDENTIALS_HANDLE_FN WINELIB_NAME_AW(ACQUIRE_CREDENTIALS_HANDLE_FN_) | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY FreeContextBuffer(PVOID pv); | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *FREE_CONTEXT_BUFFER_FN)(PVOID); | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY FreeCredentialsHandle(PCredHandle | 
|  | phCredential); | 
|  |  | 
|  | #define FreeCredentialHandle FreeCredentialsHandle | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *FREE_CREDENTIALS_HANDLE_FN)(PCredHandle); | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY InitializeSecurityContextA( | 
|  | PCredHandle phCredential, PCtxtHandle phContext, | 
|  | SEC_CHAR *pszTargetName, ULONG fContextReq, | 
|  | ULONG Reserved1, ULONG TargetDataRep, PSecBufferDesc pInput, | 
|  | ULONG Reserved2, PCtxtHandle phNewContext, PSecBufferDesc pOutput, | 
|  | ULONG *pfContextAttr, PTimeStamp ptsExpiry); | 
|  | SECURITY_STATUS SEC_ENTRY InitializeSecurityContextW( | 
|  | PCredHandle phCredential, PCtxtHandle phContext, | 
|  | SEC_WCHAR *pszTargetName, ULONG fContextReq, | 
|  | ULONG Reserved1, ULONG TargetDataRep, PSecBufferDesc pInput, | 
|  | ULONG Reserved2, PCtxtHandle phNewContext, PSecBufferDesc pOutput, | 
|  | ULONG *pfContextAttr, PTimeStamp ptsExpiry); | 
|  | #define InitializeSecurityContext WINELIB_NAME_AW(InitializeSecurityContext) | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_A) | 
|  | (PCredHandle, PCtxtHandle, SEC_CHAR *, ULONG, ULONG, ULONG, PSecBufferDesc, | 
|  | ULONG, PCtxtHandle, PSecBufferDesc, ULONG *, PTimeStamp); | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_W) | 
|  | (PCredHandle, PCtxtHandle, SEC_WCHAR *, ULONG, ULONG, ULONG, PSecBufferDesc, | 
|  | ULONG, PCtxtHandle, PSecBufferDesc, ULONG *, PTimeStamp); | 
|  | #define INITIALIZE_SECURITY_CONTEXT_FN WINELIB_NAME_AW(INITIALIZE_SECURITY_CONTEXT_FN_) | 
|  |  | 
|  | /* flags for InitializeSecurityContext fContextReq and pfContextAttr */ | 
|  | #define ISC_REQ_DELEGATE               0x00000001 | 
|  | #define ISC_REQ_MUTUAL_AUTH            0x00000002 | 
|  | #define ISC_REQ_REPLAY_DETECT          0x00000004 | 
|  | #define ISC_REQ_SEQUENCE_DETECT        0x00000008 | 
|  | #define ISC_REQ_CONFIDENTIALITY        0x00000010 | 
|  | #define ISC_REQ_USE_SESSION_KEY        0x00000020 | 
|  | #define ISC_REQ_PROMPT_FOR_CREDS       0x00000040 | 
|  | #define ISC_REQ_USE_SUPPLIED_CREDS     0x00000080 | 
|  | #define ISC_REQ_ALLOCATE_MEMORY        0x00000100 | 
|  | #define ISC_REQ_USE_DCE_STYLE          0x00000200 | 
|  | #define ISC_REQ_DATAGRAM               0x00000400 | 
|  | #define ISC_REQ_CONNECTION             0x00000800 | 
|  | #define ISC_REQ_CALL_LEVEL             0x00001000 | 
|  | #define ISC_REQ_FRAGMENT_SUPPLIED      0x00002000 | 
|  | #define ISC_REQ_EXTENDED_ERROR         0x00004000 | 
|  | #define ISC_REQ_STREAM                 0x00008000 | 
|  | #define ISC_REQ_INTEGRITY              0x00010000 | 
|  | #define ISC_REQ_IDENTIFY               0x00020000 | 
|  | #define ISC_REQ_NULL_SESSION           0x00040000 | 
|  | #define ISC_REQ_MANUAL_CRED_VALIDATION 0x00080000 | 
|  | #define ISC_REQ_RESERVED1              0x00100000 | 
|  | #define ISC_REQ_FRAGMENT_TO_FIT        0x00200000 | 
|  |  | 
|  | #define ISC_RET_DELEGATE               0x00000001 | 
|  | #define ISC_RET_MUTUAL_AUTH            0x00000002 | 
|  | #define ISC_RET_REPLAY_DETECT          0x00000004 | 
|  | #define ISC_RET_SEQUENCE_DETECT        0x00000008 | 
|  | #define ISC_RET_CONFIDENTIALITY        0x00000010 | 
|  | #define ISC_RET_USE_SESSION_KEY        0x00000020 | 
|  | #define ISC_RET_USED_COLLECTED_CREDS   0x00000040 | 
|  | #define ISC_RET_USED_SUPPLIED_CREDS    0x00000080 | 
|  | #define ISC_RET_ALLOCATED_MEMORY       0x00000100 | 
|  | #define ISC_RET_USED_DCE_STYLE         0x00000200 | 
|  | #define ISC_RET_DATAGRAM               0x00000400 | 
|  | #define ISC_RET_CONNECTION             0x00000800 | 
|  | #define ISC_RET_INTERMEDIATE_RETURN    0x00001000 | 
|  | #define ISC_RET_CALL_LEVEL             0x00002000 | 
|  | #define ISC_RET_EXTENDED_ERROR         0x00004000 | 
|  | #define ISC_RET_STREAM                 0x00008000 | 
|  | #define ISC_RET_INTEGRITY              0x00010000 | 
|  | #define ISC_RET_IDENTIFY               0x00020000 | 
|  | #define ISC_RET_NULL_SESSION           0x00040000 | 
|  | #define ISC_RET_MANUAL_CRED_VALIDATION 0x00080000 | 
|  | #define ISC_RET_RESERVED1              0x00100000 | 
|  | #define ISC_RET_FRAGMENT_ONLY          0x00200000 | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY AcceptSecurityContext( | 
|  | PCredHandle phCredential, PCtxtHandle phContext, PSecBufferDesc pInput, | 
|  | ULONG fContextReq, ULONG TargetDataRep, | 
|  | PCtxtHandle phNewContext, PSecBufferDesc pOutput, | 
|  | ULONG *pfContextAttr, PTimeStamp ptsExpiry); | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *ACCEPT_SECURITY_CONTEXT_FN)(PCredHandle, | 
|  | PCtxtHandle, PSecBufferDesc, ULONG, ULONG, PCtxtHandle, | 
|  | PSecBufferDesc, ULONG *, PTimeStamp); | 
|  |  | 
|  | /* flags for AcceptSecurityContext fContextReq and pfContextAttr */ | 
|  | #define ASC_REQ_DELEGATE               0x00000001 | 
|  | #define ASC_REQ_MUTUAL_AUTH            0x00000002 | 
|  | #define ASC_REQ_REPLAY_DETECT          0x00000004 | 
|  | #define ASC_REQ_SEQUENCE_DETECT        0x00000008 | 
|  | #define ASC_REQ_CONFIDENTIALITY        0x00000010 | 
|  | #define ASC_REQ_USE_SESSION_KEY        0x00000020 | 
|  | #define ASC_REQ_ALLOCATE_MEMORY        0x00000100 | 
|  | #define ASC_REQ_USE_DCE_STYLE          0x00000200 | 
|  | #define ASC_REQ_DATAGRAM               0x00000400 | 
|  | #define ASC_REQ_CONNECTION             0x00000800 | 
|  | #define ASC_REQ_CALL_LEVEL             0x00001000 | 
|  | #define ASC_REQ_FRAGMENT_SUPPLIED      0x00002000 | 
|  | #define ASC_REQ_EXTENDED_ERROR         0x00008000 | 
|  | #define ASC_REQ_STREAM                 0x00010000 | 
|  | #define ASC_REQ_INTEGRITY              0x00020000 | 
|  | #define ASC_REQ_LICENSING              0x00040000 | 
|  | #define ASC_REQ_IDENTIFY               0x00080000 | 
|  | #define ASC_REQ_ALLOW_NULL_SESSION     0x00100000 | 
|  | #define ASC_REQ_ALLOW_NON_USER_LOGONS  0x00200000 | 
|  | #define ASC_REQ_ALLOW_CONTEXT_REPLAY   0x00400000 | 
|  | #define ASC_REQ_FRAGMENT_TO_FIT        0x00800000 | 
|  | #define ASC_REQ_FRAGMENT_NO_TOKEN      0x01000000 | 
|  |  | 
|  | #define ASC_RET_DELEGATE               0x00000001 | 
|  | #define ASC_RET_MUTUAL_AUTH            0x00000002 | 
|  | #define ASC_RET_REPLAY_DETECT          0x00000004 | 
|  | #define ASC_RET_SEQUENCE_DETECT        0x00000008 | 
|  | #define ASC_RET_CONFIDENTIALITY        0x00000010 | 
|  | #define ASC_RET_USE_SESSION_KEY        0x00000020 | 
|  | #define ASC_RET_ALLOCATED_MEMORY       0x00000100 | 
|  | #define ASC_RET_USED_DCE_STYLE         0x00000200 | 
|  | #define ASC_RET_DATAGRAM               0x00000400 | 
|  | #define ASC_RET_CONNECTION             0x00000800 | 
|  | #define ASC_RET_CALL_LEVEL             0x00002000 | 
|  | #define ASC_RET_THIRD_LEG_FAILED       0x00004000 | 
|  | #define ASC_RET_EXTENDED_ERROR         0x00008000 | 
|  | #define ASC_RET_STREAM                 0x00010000 | 
|  | #define ASC_RET_INTEGRITY              0x00020000 | 
|  | #define ASC_RET_LICENSING              0x00040000 | 
|  | #define ASC_RET_IDENTIFY               0x00080000 | 
|  | #define ASC_RET_NULL_SESSION           0x00100000 | 
|  | #define ASC_RET_ALLOW_NON_USER_LOGONS  0x00200000 | 
|  | #define ASC_RET_ALLOW_CONTEXT_REPLAY   0x00400000 | 
|  | #define ASC_RET_FRAGMENT_ONLY          0x00800000 | 
|  | #define ASC_RET_NO_TOKEN               0x01000000 | 
|  |  | 
|  | /* values for TargetDataRep */ | 
|  | #define SECURITY_NATIVE_DREP  0x00000010 | 
|  | #define SECURITY_NETWORK_DREP 0x00000000 | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY CompleteAuthToken(PCtxtHandle phContext, | 
|  | PSecBufferDesc pToken); | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *COMPLETE_AUTH_TOKEN_FN)(PCtxtHandle, | 
|  | PSecBufferDesc); | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY DeleteSecurityContext(PCtxtHandle phContext); | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *DELETE_SECURITY_CONTEXT_FN)(PCtxtHandle); | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY ApplyControlToken(PCtxtHandle phContext, | 
|  | PSecBufferDesc pInput); | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *APPLY_CONTROL_TOKEN_FN)(PCtxtHandle, | 
|  | PSecBufferDesc); | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY QueryContextAttributesA(PCtxtHandle phContext, | 
|  | ULONG ulAttribute, void *pBuffer); | 
|  | SECURITY_STATUS SEC_ENTRY QueryContextAttributesW(PCtxtHandle phContext, | 
|  | ULONG ulAttribute, void *pBuffer); | 
|  | #define QueryContextAttributes WINELIB_NAME_AW(QueryContextAttributes) | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle, | 
|  | ULONG, void *); | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle, | 
|  | ULONG, void *); | 
|  | #define QUERY_CONTEXT_ATTRIBUTES_FN WINELIB_NAME_AW(QUERY_CONTEXT_ATTRIBUTES_FN_) | 
|  |  | 
|  | /* values for QueryContextAttributes/SetContextAttributes ulAttribute */ | 
|  | #define SECPKG_ATTR_SIZES               0 | 
|  | #define SECPKG_ATTR_NAMES               1 | 
|  | #define SECPKG_ATTR_LIFESPAN            2 | 
|  | #define SECPKG_ATTR_DCE_INFO            3 | 
|  | #define SECPKG_ATTR_STREAM_SIZES        4 | 
|  | #define SECPKG_ATTR_KEY_INFO            5 | 
|  | #define SECPKG_ATTR_AUTHORITY           6 | 
|  | #define SECPKG_ATTR_PROTO_INFO          7 | 
|  | #define SECPKG_ATTR_PASSWORD_EXPIRY     8 | 
|  | #define SECPKG_ATTR_SESSION_KEY         9 | 
|  | #define SECPKG_ATTR_PACKAGE_INFO       10 | 
|  | #define SECPKG_ATTR_USER_FLAGS         11 | 
|  | #define SECPKG_ATTR_NEGOTIATION_INFO   12 | 
|  | #define SECPKG_ATTR_NATIVE_NAMES       13 | 
|  | #define SECPKG_ATTR_FLAGS              14 | 
|  | #define SECPKG_ATTR_USE_VALIDATED      15 | 
|  | #define SECPKG_ATTR_CREDENTIAL_NAME    16 | 
|  | #define SECPKG_ATTR_TARGET_INFORMATION 17 | 
|  | #define SECPKG_ATTR_ACCESS_TOKEN       18 | 
|  | #define SECPKG_ATTR_TARGET             19 | 
|  | #define SECPKG_ATTR_AUTHENTICATION_ID  20 | 
|  |  | 
|  | /* types for QueryContextAttributes/SetContextAttributes */ | 
|  |  | 
|  | typedef struct _SecPkgContext_Sizes | 
|  | { | 
|  | ULONG cbMaxToken; | 
|  | ULONG cbMaxSignature; | 
|  | ULONG cbBlockSize; | 
|  | ULONG cbSecurityTrailer; | 
|  | } SecPkgContext_Sizes, *PSecPkgContext_Sizes; | 
|  |  | 
|  | typedef struct _SecPkgContext_StreamSizes | 
|  | { | 
|  | ULONG cbHeader; | 
|  | ULONG cbTrailer; | 
|  | ULONG cbMaximumMessage; | 
|  | ULONG cbBuffers; | 
|  | ULONG cbBlockSize; | 
|  | } SecPkgContext_StreamSizes, *PSecPkgContext_StreamSizes; | 
|  |  | 
|  | typedef struct _SecPkgContext_NamesA | 
|  | { | 
|  | SEC_CHAR *sUserName; | 
|  | } SecPkgContext_NamesA, *PSecPkgContext_NamesA; | 
|  |  | 
|  | typedef struct _SecPkgContext_NamesW | 
|  | { | 
|  | SEC_WCHAR *sUserName; | 
|  | } SecPkgContext_NamesW, *PSecPkgContext_NamesW; | 
|  |  | 
|  | #define SecPkgContext_Names WINELIB_NAME_AW(SecPkgContext_Names) | 
|  | #define PSecPkgContext_Names WINELIB_NAME_AW(PSecPkgContext_Names) | 
|  |  | 
|  | typedef struct _SecPkgContext_Lifespan | 
|  | { | 
|  | TimeStamp tsStart; | 
|  | TimeStamp tsExpiry; | 
|  | } SecPkgContext_Lifespan, *PSecPkgContext_Lifespan; | 
|  |  | 
|  | typedef struct _SecPkgContext_DceInfo | 
|  | { | 
|  | ULONG AuthzSvc; | 
|  | PVOID pPac; | 
|  | } SecPkgContext_DceInfo, *PSecPkgContext_DceInfo; | 
|  |  | 
|  | typedef struct _SecPkgContext_KeyInfoA | 
|  | { | 
|  | SEC_CHAR *sSignatureAlgorithmName; | 
|  | SEC_CHAR *sEncryptAlgorithmName; | 
|  | ULONG     KeySize; | 
|  | ULONG     SignatureAlgorithm; | 
|  | ULONG     EncryptAlgorithm; | 
|  | } SecPkgContext_KeyInfoA, *PSecPkgContext_KeyInfoA; | 
|  |  | 
|  | typedef struct _SecPkgContext_KeyInfoW | 
|  | { | 
|  | SEC_WCHAR *sSignatureAlgorithmName; | 
|  | SEC_WCHAR *sEncryptAlgorithmName; | 
|  | ULONG      KeySize; | 
|  | ULONG      SignatureAlgorithm; | 
|  | ULONG      EncryptAlgorithm; | 
|  | } SecPkgContext_KeyInfoW, *PSecPkgContext_KeyInfoW; | 
|  |  | 
|  | #define SecPkgContext_KeyInfo WINELIB_NAME_AW(SecPkgContext_KeyInfo) | 
|  | #define PSecPkgContext_KeyInfo WINELIB_NAME_AW(PSecPkgContext_KeyInfo) | 
|  |  | 
|  | typedef struct _SecPkgContext_AuthorityA | 
|  | { | 
|  | SEC_CHAR *sAuthorityName; | 
|  | } SecPkgContext_AuthorityA, *PSecPkgContext_AuthorityA; | 
|  |  | 
|  | typedef struct _SecPkgContext_AuthorityW | 
|  | { | 
|  | SEC_WCHAR *sAuthorityName; | 
|  | } SecPkgContext_AuthorityW, *PSecPkgContext_AuthorityW; | 
|  |  | 
|  | #define SecPkgContext_Authority WINELIB_NAME_AW(SecPkgContext_Authority) | 
|  | #define PSecPkgContext_Authority WINELIB_NAME_AW(PSecPkgContext_Authority) | 
|  |  | 
|  | typedef struct _SecPkgContext_ProtoInfoA | 
|  | { | 
|  | SEC_CHAR *sProtocolName; | 
|  | ULONG     majorVersion; | 
|  | ULONG     minorVersion; | 
|  | } SecPkgContext_ProtoInfoA, *PSecPkgContext_ProtoInfoA; | 
|  |  | 
|  | typedef struct _SecPkgContext_ProtoInfoW | 
|  | { | 
|  | SEC_WCHAR *sProtocolName; | 
|  | ULONG      majorVersion; | 
|  | ULONG      minorVersion; | 
|  | } SecPkgContext_ProtoInfoW, *PSecPkgContext_ProtoInfoW; | 
|  |  | 
|  | #define SecPkgContext_ProtoInfo WINELIB_NAME_AW(SecPkgContext_ProtoInfo) | 
|  | #define PSecPkgContext_ProtoInfo WINELIB_NAME_AW(PSecPkgContext_ProtoInfo) | 
|  |  | 
|  | typedef struct _SecPkgContext_PasswordExpiry | 
|  | { | 
|  | TimeStamp tsPasswordExpires; | 
|  | } SecPkgContext_PasswordExpiry, *PSecPkgContext_PasswordExpiry; | 
|  |  | 
|  | typedef struct _SecPkgContext_SessionKey | 
|  | { | 
|  | ULONG          SessionKeyLength; | 
|  | unsigned char *SessionKey; | 
|  | } SecPkgContext_SessionKey, *PSecPkgContext_SessionKey; | 
|  |  | 
|  | typedef struct _SecPkgContext_PackageInfoA | 
|  | { | 
|  | PSecPkgInfoA PackageInfo; | 
|  | } SecPkgContext_PackageInfoA, *PSecPkgContext_PackageInfoA; | 
|  |  | 
|  | typedef struct _SecPkgContext_PackageInfoW | 
|  | { | 
|  | PSecPkgInfoW PackageInfo; | 
|  | } SecPkgContext_PackageInfoW, *PSecPkgContext_PackageInfoW; | 
|  |  | 
|  | #define SecPkgContext_PackageInfo WINELIB_NAME_AW(SecPkgContext_PackageInfo) | 
|  | #define PSecPkgContext_PackageInfo WINELIB_NAME_AW(PSecPkgContext_PackageInfo) | 
|  |  | 
|  | typedef struct _SecPkgContext_Flags | 
|  | { | 
|  | ULONG Flags; | 
|  | } SecPkgContext_Flags, *PSecPkgContext_Flags; | 
|  |  | 
|  | typedef struct _SecPkgContext_UserFlags | 
|  | { | 
|  | ULONG UserFlags; | 
|  | } SecPkgContext_UserFlags, *PSecPkgContext_UserFlags; | 
|  |  | 
|  | typedef struct _SecPkgContext_NegotiationInfoA | 
|  | { | 
|  | PSecPkgInfoA PackageInfo; | 
|  | ULONG        NegotiationState; | 
|  | } SecPkgContext_NegotiationInfoA, *PSecPkgContext_NegotiationInfoA; | 
|  |  | 
|  | typedef struct _SecPkgContext_NegotiationInfoW | 
|  | { | 
|  | PSecPkgInfoW PackageInfo; | 
|  | ULONG        NegotiationState; | 
|  | } SecPkgContext_NegotiationInfoW, *PSecPkgContext_NegotiationInfoW; | 
|  |  | 
|  | #define SecPkgContext_NegotiationInfo WINELIB_NAME_AW(SecPkgContext_NegotiationInfo) | 
|  | #define PSecPkgContext_NegotiationInfo WINELIB_NAME_AW(PSecPkgContext_NegotiationInfo) | 
|  |  | 
|  | /* values for NegotiationState */ | 
|  | #define SECPKG_NEGOTIATION_COMPLETE      0 | 
|  | #define SECPKG_NEGOTIATION_OPTIMISTIC    1 | 
|  | #define SECPKG_NEGOTIATION_IN_PROGRESS   2 | 
|  | #define SECPKG_NEGOTIATION_DIRECT        3 | 
|  | #define SECPKG_NEGOTIATION_TRY_MULTICRED 4 | 
|  |  | 
|  | typedef struct _SecPkgContext_NativeNamesA | 
|  | { | 
|  | SEC_CHAR *sClientName; | 
|  | SEC_CHAR *sServerName; | 
|  | } SecPkgContext_NativeNamesA, *PSecPkgContext_NativeNamesA; | 
|  |  | 
|  | typedef struct _SecPkgContext_NativeNamesW | 
|  | { | 
|  | SEC_WCHAR *sClientName; | 
|  | SEC_WCHAR *sServerName; | 
|  | } SecPkgContext_NativeNamesW, *PSecPkgContext_NativeNamesW; | 
|  |  | 
|  | #define SecPkgContext_NativeNames WINELIB_NAME_AW(SecPkgContext_NativeNames) | 
|  | #define PSecPkgContext_NativeNames WINELIB_NAME_AW(PSecPkgContext_NativeNames) | 
|  |  | 
|  | typedef struct _SecPkgContext_CredentialNameA | 
|  | { | 
|  | ULONG     CredentialType; | 
|  | SEC_CHAR *sCredentialName; | 
|  | } SecPkgContext_CredentialNameA, *PSecPkgContext_CredentialNameA; | 
|  |  | 
|  | typedef struct _SecPkgContext_CredentialNameW | 
|  | { | 
|  | ULONG      CredentialType; | 
|  | SEC_WCHAR *sCredentialName; | 
|  | } SecPkgContext_CredentialNameW, *PSecPkgContext_CredentialNameW; | 
|  |  | 
|  | #define SecPkgContext_CredentialName WINELIB_NAME_AW(SecPkgContext_CredentialName) | 
|  | #define PSecPkgContext_CredentialName WINELIB_NAME_AW(PSecPkgContext_CredentialName) | 
|  |  | 
|  | typedef struct _SecPkgContext_AccessToken | 
|  | { | 
|  | void *AccessToken; | 
|  | } SecPkgContext_AccessToken, *PSecPkgContext_AccessToken; | 
|  |  | 
|  | typedef struct _SecPkgContext_TargetInformation | 
|  | { | 
|  | ULONG          MarshalledTargetInfoLength; | 
|  | unsigned char *MarshalledTargetInfo; | 
|  | } SecPkgContext_TargetInformation, *PSecPkgContext_TargetInformation; | 
|  |  | 
|  | typedef struct _SecPkgContext_AuthzID | 
|  | { | 
|  | ULONG  AuthzIDLength; | 
|  | char  *AuthzID; | 
|  | } SecPkgContext_AuthzID, *PSecPkgContext_AuthzID; | 
|  |  | 
|  | typedef struct _SecPkgContext_Target | 
|  | { | 
|  | ULONG  TargetLength; | 
|  | char  *Target; | 
|  | } SecPkgContext_Target, *PSecPkgContext_Target; | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext(PCtxtHandle phContext); | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *IMPERSONATE_SECURITY_CONTEXT_FN) | 
|  | (PCtxtHandle); | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY RevertSecurityContext(PCtxtHandle phContext); | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *REVERT_SECURITY_CONTEXT_FN)(PCtxtHandle); | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY MakeSignature(PCtxtHandle phContext, | 
|  | ULONG fQOP, PSecBufferDesc pMessage, ULONG MessageSeqNo); | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *MAKE_SIGNATURE_FN)(PCtxtHandle, | 
|  | ULONG, PSecBufferDesc, ULONG); | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY VerifySignature(PCtxtHandle phContext, | 
|  | PSecBufferDesc pMessage, ULONG MessageSeqNo, PULONG pfQOP); | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *VERIFY_SIGNATURE_FN)(PCtxtHandle, | 
|  | PSecBufferDesc, ULONG, PULONG); | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoA( | 
|  | SEC_CHAR *pszPackageName, PSecPkgInfoA *ppPackageInfo); | 
|  | SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoW( | 
|  | SEC_WCHAR *pszPackageName, PSecPkgInfoW *ppPackageInfo); | 
|  | #define QuerySecurityPackageInfo WINELIB_NAME_AW(QuerySecurityPackageInfo) | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_A) | 
|  | (SEC_CHAR *, PSecPkgInfoA *); | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_W) | 
|  | (SEC_WCHAR *, PSecPkgInfoW *); | 
|  | #define QUERY_SECURITY_PACKAGE_INFO_FN WINELIB_NAME_AW(QUERY_SECURITY_PACKAGE_INFO_FN_) | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY ExportSecurityContext(PCtxtHandle phContext, | 
|  | ULONG fFlags, PSecBuffer pPackedContext, void **pToken); | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *EXPORT_SECURITY_CONTEXT_FN)(PCtxtHandle, | 
|  | ULONG, PSecBuffer, void **); | 
|  |  | 
|  | /* values for ExportSecurityContext fFlags */ | 
|  | #define SECPKG_CONTEXT_EXPORT_RESET_NEW  0x00000001 | 
|  | #define SECPKG_CONTEXT_EXPORT_DELETE_OLD 0x00000002 | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY ImportSecurityContextA(SEC_CHAR *pszPackage, | 
|  | PSecBuffer pPackedContext, void *Token, PCtxtHandle phContext); | 
|  | SECURITY_STATUS SEC_ENTRY ImportSecurityContextW(SEC_WCHAR *pszPackage, | 
|  | PSecBuffer pPackedContext, void *Token, PCtxtHandle phContext); | 
|  | #define ImportSecurityContext WINELIB_NAME_AW(ImportSecurityContext) | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_A)(SEC_CHAR *, | 
|  | PSecBuffer, void *, PCtxtHandle); | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_W)(SEC_WCHAR *, | 
|  | PSecBuffer, void *, PCtxtHandle); | 
|  | #define IMPORT_SECURITY_CONTEXT_FN WINELIB_NAME_AW(IMPORT_SECURITY_CONTEXT_FN_) | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY AddCredentialsA(PCredHandle hCredentials, | 
|  | SEC_CHAR *pszPrincipal, SEC_CHAR *pszPackage, ULONG fCredentialUse, | 
|  | void *pAuthData, SEC_GET_KEY_FN pGetKeyFn, void *pvGetKeyArgument, | 
|  | PTimeStamp ptsExpiry); | 
|  | SECURITY_STATUS SEC_ENTRY AddCredentialsW(PCredHandle hCredentials, | 
|  | SEC_WCHAR *pszPrincipal, SEC_WCHAR *pszPackage, ULONG fCredentialUse, | 
|  | void *pAuthData, SEC_GET_KEY_FN pGetKeyFn, void *pvGetKeyArgument, | 
|  | PTimeStamp ptsExpiry); | 
|  | #define AddCredentials WINELIB_NAME_AW(AddCredentials) | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_A)(PCredHandle, | 
|  | SEC_CHAR *, SEC_CHAR *, ULONG, void *, SEC_GET_KEY_FN, void *, | 
|  | PTimeStamp); | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_W)(PCredHandle, | 
|  | SEC_WCHAR *, SEC_WCHAR *, ULONG, void *, SEC_GET_KEY_FN, void *, | 
|  | PTimeStamp); | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY QuerySecurityContextToken(PCtxtHandle phContext, | 
|  | HANDLE *phToken); | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_CONTEXT_TOKEN_FN) | 
|  | (PCtxtHandle, HANDLE *); | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY EncryptMessage(PCtxtHandle phContext, ULONG fQOP, | 
|  | PSecBufferDesc pMessage, ULONG MessageSeqNo); | 
|  | SECURITY_STATUS SEC_ENTRY DecryptMessage(PCtxtHandle phContext, | 
|  | PSecBufferDesc pMessage, ULONG MessageSeqNo, PULONG pfQOP); | 
|  |  | 
|  | /* values for EncryptMessage fQOP */ | 
|  | #define SECQOP_WRAP_NO_ENCRYPT 0x80000001 | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *ENCRYPT_MESSAGE_FN)(PCtxtHandle, ULONG, | 
|  | PSecBufferDesc, ULONG); | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *DECRYPT_MESSAGE_FN)(PCtxtHandle, | 
|  | PSecBufferDesc, ULONG, PULONG); | 
|  |  | 
|  | SECURITY_STATUS SEC_ENTRY SetContextAttributesA(PCtxtHandle phContext, | 
|  | ULONG ulAttribute, void *pBuffer, ULONG cbBuffer); | 
|  | SECURITY_STATUS SEC_ENTRY SetContextAttributesW(PCtxtHandle phContext, | 
|  | ULONG ulAttribute, void *pBuffer, ULONG cbBuffer); | 
|  | #define SetContextAttributes WINELIB_NAME_AW(SetContextAttributes) | 
|  |  | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *SET_CONTEXT_ATTRIBUTES_FN_A)(PCtxtHandle, | 
|  | ULONG, void *, ULONG); | 
|  | typedef SECURITY_STATUS (SEC_ENTRY *SET_CONTEXT_ATTRIBUTES_FN_W)(PCtxtHandle, | 
|  | ULONG, void *, ULONG); | 
|  |  | 
|  | #define SECURITY_ENTRYPOINT_ANSIA "InitSecurityInterfaceA" | 
|  | #define SECURITY_ENTRYPOINT_ANSIW "InitSecurityInterfaceW" | 
|  | #define SECURITY_ENTRYPOINT_ANSI WINELIB_NAME_AW(SECURITY_ENTRYPOINT_ANSI) | 
|  |  | 
|  | typedef struct _SECURITY_FUNCTION_TABLE_A | 
|  | { | 
|  | ULONG                             dwVersion; | 
|  | ENUMERATE_SECURITY_PACKAGES_FN_A  EnumerateSecurityPackagesA; | 
|  | QUERY_CREDENTIALS_ATTRIBUTES_FN_A QueryCredentialsAttributesA; | 
|  | ACQUIRE_CREDENTIALS_HANDLE_FN_A   AcquireCredentialsHandleA; | 
|  | FREE_CREDENTIALS_HANDLE_FN        FreeCredentialsHandle; | 
|  | void                             *Reserved2; | 
|  | INITIALIZE_SECURITY_CONTEXT_FN_A  InitializeSecurityContextA; | 
|  | ACCEPT_SECURITY_CONTEXT_FN        AcceptSecurityContext; | 
|  | COMPLETE_AUTH_TOKEN_FN            CompleteAuthToken; | 
|  | DELETE_SECURITY_CONTEXT_FN        DeleteSecurityContext; | 
|  | APPLY_CONTROL_TOKEN_FN            ApplyControlToken; | 
|  | QUERY_CONTEXT_ATTRIBUTES_FN_A     QueryContextAttributesA; | 
|  | IMPERSONATE_SECURITY_CONTEXT_FN   ImpersonateSecurityContext; | 
|  | REVERT_SECURITY_CONTEXT_FN        RevertSecurityContext; | 
|  | MAKE_SIGNATURE_FN                 MakeSignature; | 
|  | VERIFY_SIGNATURE_FN               VerifySignature; | 
|  | FREE_CONTEXT_BUFFER_FN            FreeContextBuffer; | 
|  | QUERY_SECURITY_PACKAGE_INFO_FN_A  QuerySecurityPackageInfoA; | 
|  | void                             *Reserved3; | 
|  | void                             *Reserved4; | 
|  | EXPORT_SECURITY_CONTEXT_FN        ExportSecurityContext; | 
|  | IMPORT_SECURITY_CONTEXT_FN_A      ImportSecurityContextA; | 
|  | ADD_CREDENTIALS_FN_A              AddCredentialsA; | 
|  | void                             *Reserved8; | 
|  | QUERY_SECURITY_CONTEXT_TOKEN_FN   QuerySecurityContextToken; | 
|  | ENCRYPT_MESSAGE_FN                EncryptMessage; | 
|  | DECRYPT_MESSAGE_FN                DecryptMessage; | 
|  | SET_CONTEXT_ATTRIBUTES_FN_A       SetContextAttributesA; | 
|  | } SecurityFunctionTableA, *PSecurityFunctionTableA; | 
|  |  | 
|  | typedef struct _SECURITY_FUNCTION_TABLE_W | 
|  | { | 
|  | ULONG                             dwVersion; | 
|  | ENUMERATE_SECURITY_PACKAGES_FN_W  EnumerateSecurityPackagesW; | 
|  | QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW; | 
|  | ACQUIRE_CREDENTIALS_HANDLE_FN_W   AcquireCredentialsHandleW; | 
|  | FREE_CREDENTIALS_HANDLE_FN        FreeCredentialsHandle; | 
|  | void                             *Reserved2; | 
|  | INITIALIZE_SECURITY_CONTEXT_FN_W  InitializeSecurityContextW; | 
|  | ACCEPT_SECURITY_CONTEXT_FN        AcceptSecurityContext; | 
|  | COMPLETE_AUTH_TOKEN_FN            CompleteAuthToken; | 
|  | DELETE_SECURITY_CONTEXT_FN        DeleteSecurityContext; | 
|  | APPLY_CONTROL_TOKEN_FN            ApplyControlToken; | 
|  | QUERY_CONTEXT_ATTRIBUTES_FN_W     QueryContextAttributesW; | 
|  | IMPERSONATE_SECURITY_CONTEXT_FN   ImpersonateSecurityContext; | 
|  | REVERT_SECURITY_CONTEXT_FN        RevertSecurityContext; | 
|  | MAKE_SIGNATURE_FN                 MakeSignature; | 
|  | VERIFY_SIGNATURE_FN               VerifySignature; | 
|  | FREE_CONTEXT_BUFFER_FN            FreeContextBuffer; | 
|  | QUERY_SECURITY_PACKAGE_INFO_FN_W  QuerySecurityPackageInfoW; | 
|  | void                             *Reserved3; | 
|  | void                             *Reserved4; | 
|  | EXPORT_SECURITY_CONTEXT_FN        ExportSecurityContext; | 
|  | IMPORT_SECURITY_CONTEXT_FN_W      ImportSecurityContextW; | 
|  | ADD_CREDENTIALS_FN_W              AddCredentialsW; | 
|  | void                             *Reserved8; | 
|  | QUERY_SECURITY_CONTEXT_TOKEN_FN   QuerySecurityContextToken; | 
|  | ENCRYPT_MESSAGE_FN                EncryptMessage; | 
|  | DECRYPT_MESSAGE_FN                DecryptMessage; | 
|  | SET_CONTEXT_ATTRIBUTES_FN_W       SetContextAttributesW; | 
|  | } SecurityFunctionTableW, *PSecurityFunctionTableW; | 
|  |  | 
|  | #define SecurityFunctionTable WINELIB_NAME_AW(SecurityFunctionTable) | 
|  | #define PSecurityFunctionTable WINELIB_NAME_AW(PSecurityFunctionTable) | 
|  |  | 
|  | #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION   1 | 
|  | #define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2 | 
|  |  | 
|  | PSecurityFunctionTableA SEC_ENTRY InitSecurityInterfaceA(void); | 
|  | PSecurityFunctionTableW SEC_ENTRY InitSecurityInterfaceW(void); | 
|  | #define InitSecurityInterface WINELIB_NAME_AW(InitSecurityInterface) | 
|  |  | 
|  | typedef PSecurityFunctionTableA (SEC_ENTRY *INIT_SECURITY_INTERFACE_A)(void); | 
|  | typedef PSecurityFunctionTableW (SEC_ENTRY *INIT_SECURITY_INTERFACE_W)(void); | 
|  | #define INIT_SECURITY_INTERFACE WINELIB_NAME_AW(INIT_SECURITY_INTERFACE_) | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #endif /* ndef __WINE_SSPI_H__ */ |