This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/h/nt/sspi.h

1359 lines
64 KiB
C
Raw Normal View History

/*
* sspi.h Security Support Provider Interface functions
*
* =========================================================================
*
* Open Watcom Project
*
* Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
*
* This file is automatically generated. Do not edit directly.
*
* =========================================================================
*/
#ifndef __SSPI_H__
#define __SSPI_H__
#ifndef _ENABLE_AUTODEPEND
#pragma read_only_file;
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Calling convention for security functions */
#define SEC_ENTRY __stdcall
/* Macro to specify kernel security functions */
#define KSECDDDECLSPEC __declspec(dllimport)
/* Security primitive data types */
typedef WCHAR SEC_WCHAR;
typedef CHAR SEC_CHAR;
/* Security string data types */
#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
/* Opaque data types */
typedef PVOID PSEC_WINNT_AUTH_IDENTITY_OPAQUE;
/* Security status data type */
#ifndef __SECSTATUS_DEFINED__
#define __SECSTATUS_DEFINED__
typedef LONG SECURITY_STATUS;
#endif
/* Security integer */
typedef LARGE_INTEGER SECURITY_INTEGER;
typedef LARGE_INTEGER *PSECURITY_INTEGER;
typedef SECURITY_INTEGER TimeStamp;
typedef SECURITY_INTEGER *PTimeStamp;
/* Security macros */
#define SEC_TEXT TEXT
#define SEC_FAR
#define __SEC_FAR SEC_FAR
#ifndef _AUTH_IDENTITY_DEFINED
#define _AUTH_IDENTITY_DEFINED
/* Authentication identity flags */
#define SEC_WINNT_AUTH_IDENTITY_ANSI 0x00000001L
#define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x00000002L
/* Authentication identity */
typedef struct _SEC_WINNT_AUTH_IDENTITY_A {
unsigned char *User;
unsigned long UserLength;
unsigned char *Domain;
unsigned long DomainLength;
unsigned char *Password;
unsigned long PasswordLength;
unsigned long Flags;
} SEC_WINNT_AUTH_IDENTITY_A;
typedef SEC_WINNT_AUTH_IDENTITY_A *PSEC_WINNT_AUTH_IDENTITY_A;
typedef struct _SEC_WINNT_AUTH_IDENTITY_W {
unsigned short *User;
unsigned long UserLength;
unsigned short *Domain;
unsigned long DomainLength;
unsigned short *Password;
unsigned long PasswordLength;
unsigned long Flags;
} SEC_WINNT_AUTH_IDENTITY_W;
typedef SEC_WINNT_AUTH_IDENTITY_W *PSEC_WINNT_AUTH_IDENTITY_W;
#ifdef UNICODE
typedef SEC_WINNT_AUTH_IDENTITY_W SEC_WINNT_AUTH_IDENTITY;
typedef PSEC_WINNT_AUTH_IDENTITY_W PSEC_WINNT_AUTH_IDENTITY;
#else
typedef SEC_WINNT_AUTH_IDENTITY_A SEC_WINNT_AUTH_IDENTITY;
typedef PSEC_WINNT_AUTH_IDENTITY_A PSEC_WINNT_AUTH_IDENTITY;
#endif
#endif /* _AUTH_IDENTITY_DEFINED */
/* Security handle special value */
#define SEC_DELETED_HANDLE ((ULONG_PTR)-2)
/* Security package capabilities */
#define SECPKG_FLAG_INTEGRITY 0x00000001L
#define SECPKG_FLAG_PRIVACY 0x00000002L
#define SECPKG_FLAG_TOKEN_ONLY 0x00000004L
#define SECPKG_FLAG_DATAGRAM 0x00000008L
#define SECPKG_FLAG_CONNECTION 0x00000010L
#define SECPKG_FLAG_MULTI_REQUIRED 0x00000020L
#define SECPKG_FLAG_CLIENT_ONLY 0x00000040L
#define SECPKG_FLAG_EXTENDED_ERROR 0x00000080L
#define SECPKG_FLAG_IMPERSONATION 0x00000100L
#define SECPKG_FLAG_ACCEPT_WIN32_NAME 0x00000200L
#define SECPKG_FLAG_STREAM 0x00000400L
#define SECPKG_FLAG_NEGOTIABLE 0x00000800L
#define SECPKG_FLAG_GSS_COMPATIBLE 0x00001000L
#define SECPKG_FLAG_LOGON 0x00002000L
#define SECPKG_FLAG_ASCII_BUFFERS 0x00004000L
#define SECPKG_FLAG_FRAGMENT 0x00008000L
#define SECPKG_FLAG_MUTUAL_AUTH 0x00010000L
#define SECPKG_FLAG_DELEGATION 0x00020000L
#define SECPKG_FLAG_READONLY_WITH_CHECKSUM 0x00040000L
#define SECPKG_FLAG_RESTRICTED_TOKENS 0x00080000L
#define SECPKG_FLAG_NEGO_EXTENDER 0x00100000L
#define SECPKG_FLAG_NEGOTIABLE2 0x00200000L
/* Security package identifier special value */
#define SECPKG_ID_NONE 0xFFFF
/* Security buffer version number */
#define SECBUFFER_VERSION 0L
/* Security buffer types */
#define SECBUFFER_EMPTY 0L
#define SECBUFFER_DATA 1L
#define SECBUFFER_TOKEN 2L
#define SECBUFFER_PKG_PARAMS 3L
#define SECBUFFER_MISSING 4L
#define SECBUFFER_EXTRA 5L
#define SECBUFFER_STREAM_TRAILER 6L
#define SECBUFFER_STREAM_HEADER 7L
#define SECBUFFER_NEGOTIATION_INFO 8L
#define SECBUFFER_PADDING 9L
#define SECBUFFER_STREAM 10L
#define SECBUFFER_MECHLIST 11L
#define SECBUFFER_MECHLIST_SIGNATURE 12L
#define SECBUFFER_TARGET 13L
#define SECBUFFER_CHANNEL_BINDINGS 14L
#define SECBUFFER_CHANGE_PASS_RESPONSE 15L
#define SECBUFFER_TARGET_HOST 16L
#define SECBUFFER_ALERT 17L
#define SECBUFFER_ATTRMASK 0xF0000000L
#define SECBUFFER_READONLY 0x80000000L
#define SECBUFFER_READONLY_WITH_CHECKSUM 0x10000000L
/* Security data representations */
#define SECURITY_NATIVE_DREP 0x00000010L
#define SECURITY_NETWORK_DREP 0x00000000L
/* Security package credential use flags */
#define SECPKG_CRED_INBOUND 0x00000001L
#define SECPKG_CRED_OUTBOUND 0x00000002L
#define SECPKG_CRED_BOTH 0x00000003L
#define SECPKG_CRED_DEFAULT 0x00000004L
#define SECPKG_CRED_RESERVED 0xF0000000L
#define SECPKG_CRED_AUTOLOGON_RESTRICTED 0x00000010L
#define SECPKG_CRED_PROCESS_POLICY_ONLY 0x00000020L
/* InitializeSecurityContext() requirement flags */
#define ISC_REQ_DELEGATE 0x00000001L
#define ISC_REQ_MUTUAL_AUTH 0x00000002L
#define ISC_REQ_REPLAY_DETECT 0x00000004L
#define ISC_REQ_SEQUENCE_DETECT 0x00000008L
#define ISC_REQ_CONFIDENTIALITY 0x00000010L
#define ISC_REQ_USE_SESSION_KEY 0x00000020L
#define ISC_REQ_PROMPT_FOR_CREDS 0x00000040L
#define ISC_REQ_USE_SUPPLIED_CREDS 0x00000080L
#define ISC_REQ_ALLOCATE_MEMORY 0x00000100L
#define ISC_REQ_USE_DCE_STYLE 0x00000200L
#define ISC_REQ_DATAGRAM 0x00000400L
#define ISC_REQ_CONNECTION 0x00000800L
#define ISC_REQ_CALL_LEVEL 0x00001000L
#define ISC_REQ_FRAGMENT_SUPPLIED 0x00002000L
#define ISC_REQ_EXTENDED_ERROR 0x00004000L
#define ISC_REQ_STREAM 0x00008000L
#define ISC_REQ_INTEGRITY 0x00010000L
#define ISC_REQ_IDENTIFY 0x00020000L
#define ISC_REQ_NULL_SESSION 0x00040000L
#define ISC_REQ_MANUAL_CRED_VALIDATION 0x00080000L
#define ISC_REQ_FRAGMENT_TO_FIT 0x00200000L
#define ISC_REQ_FORWARD_CREDENTIALS 0x00400000L
#define ISC_REQ_NO_INTEGRITY 0x00800000L
#define ISC_REQ_USE_HTTP_STYLE 0x01000000L
/* InitializeSecurityContext() return flags */
#define ISC_RET_DELEGATE 0x00000001L
#define ISC_RET_MUTUAL_AUTH 0x00000002L
#define ISC_RET_REPLAY_DETECT 0x00000004L
#define ISC_RET_SEQUENCE_DETECT 0x00000008L
#define ISC_RET_CONFIDENTIALITY 0x00000010L
#define ISC_RET_USE_SESSION_KEY 0x00000020L
#define ISC_RET_USED_COLLECTED_CREDS 0x00000040L
#define ISC_RET_USED_SUPPLIED_CREDS 0x00000080L
#define ISC_RET_ALLOCATED_MEMORY 0x00000100L
#define ISC_RET_USED_DCE_STYLE 0x00000200L
#define ISC_RET_DATAGRAM 0x00000400L
#define ISC_RET_CONNECTION 0x00000800L
#define ISC_RET_IMMEDIATE_RETURN 0x00001000L
#define ISC_RET_CALL_LEVEL 0x00002000L
#define ISC_RET_EXTENDED_ERROR 0x00004000L
#define ISC_RET_STREAM 0x00008000L
#define ISC_RET_INTEGRITY 0x00010000L
#define ISC_RET_IDENTIFY 0x00020000L
#define ISC_RET_NULL_SESSION 0x00040000L
#define ISC_RET_MANUAL_CRED_VALIDATION 0x00080000L
#define ISC_RET_FRAGMENT_ONLY 0x00200000L
#define ISC_RET_FORWARD_CREDENTIALS 0x00400000L
#define ISC_RET_USED_HTTP_STYLE 0x01000000L
#define ISC_RET_NO_ADDITIONAL_TOKEN 0x02000000L
#define ISC_RET_REAUTHENTICATION 0x08000000L
/* AcquireSecurityContext() requirement flags */
#define ASC_REQ_DELEGATE 0x00000001L
#define ASC_REQ_MUTUAL_AUTH 0x00000002L
#define ASC_REQ_REPLAY_DETECT 0x00000004L
#define ASC_REQ_SEQUENCE_DETECT 0x00000008L
#define ASC_REQ_CONFIDENTIALITY 0x00000010L
#define ASC_REQ_USE_SESSION_KEY 0x00000020L
#define ASC_REQ_ALLOCATE_MEMORY 0x00000100L
#define ASC_REQ_USE_DCE_STYLE 0x00000200L
#define ASC_REQ_DATAGRAM 0x00000400L
#define ASC_REQ_CONNECTION 0x00000800L
#define ASC_REQ_CALL_LEVEL 0x00001000L
#define ASC_REQ_FRAGMENT_SUPPLIED 0x00002000L
#define ASC_REQ_EXTENDED_ERROR 0x00008000L
#define ASC_REQ_STREAM 0x00010000L
#define ASC_REQ_INTEGRITY 0x00020000L
#define ASC_REQ_LICENSING 0x00040000L
#define ASC_REQ_IDENTIFY 0x00080000L
#define ASC_REQ_ALLOW_NULL_SESSION 0x00100000L
#define ASC_REQ_ALLOW_NON_USER_LOGONS 0x00200000L
#define ASC_REQ_ALLOW_CONTEXT_REPLAY 0x00400000L
#define ASC_REQ_FRAGMENT_TO_FIT 0x00800000L
#define ASC_REQ_NO_TOKEN 0x01000000L
#define ASC_REQ_PROXY_BINDINGS 0x04000000L
#define ASC_REQ_ALLOW_MISSING_BINDINGS 0x10000000L
/* AcquireSecurityContext() return flags */
#define ASC_RET_DELEGATE 0x00000001L
#define ASC_RET_MUTUAL_AUTH 0x00000002L
#define ASC_RET_REPLAY_DETECT 0x00000004L
#define ASC_RET_SEQUENCE_DETECT 0x00000008L
#define ASC_RET_CONFIDENTIALITY 0x00000010L
#define ASC_RET_USE_SESSION_KEY 0x00000020L
#define ASC_RET_ALLOCATED_MEMORY 0x00000100L
#define ASC_RET_USED_DCE_STYLE 0x00000200L
#define ASC_RET_DATAGRAM 0x00000400L
#define ASC_RET_CONNECTION 0x00000800L
#define ASC_RET_CALL_LEVEL 0x00002000L
#define ASC_RET_THIRD_LEG_FAILED 0x00004000L
#define ASC_RET_EXTENDED_ERROR 0x00008000L
#define ASC_RET_STREAM 0x00010000L
#define ASC_RET_INTEGRITY 0x00020000L
#define ASC_RET_LICENSING 0x00040000L
#define ASC_RET_IDENTIFY 0x00080000L
#define ASC_RET_NULL_SESSION 0x00100000L
#define ASC_RET_ALLOW_NON_USER_LOGONS 0x00200000L
#define ASC_RET_ALLOW_CONTEXT_REPLAY 0x00400000L
#define ASC_RET_FRAGMENT_ONLY 0x00800000L
#define ASC_RET_NO_TOKEN 0x01000000L
#define ASC_RET_NO_ADDITIONAL_TOKEN 0x02000000L
#define ASC_RET_NO_PROXY_BINDINGS 0x04000000L
#define ASC_RET_MISSING_BINDINGS 0x10000000L
/* Security package credentials attributes */
#define SECPKG_CRED_ATTR_NAMES 1L
#define SECPKG_CRED_ATTR_SSI_PROVIDER 2L
/* Security package context attributes */
#define SECPKG_ATTR_SIZES 0L
#define SECPKG_ATTR_NAMES 1L
#define SECPKG_ATTR_LIFESPAN 2L
#define SECPKG_ATTR_DCE_INFO 3L
#define SECPKG_ATTR_STREAM_SIZES 4L
#define SECPKG_ATTR_KEY_INFO 5L
#define SECPKG_ATTR_AUTHORITY 6L
#define SECPKG_ATTR_PROTO_INFO 7L
#define SECPKG_ATTR_PASSWORD_EXPIRY 8L
#define SECPKG_ATTR_SESSION_KEY 9L
#define SECPKG_ATTR_PACKAGE_INFO 10L
#define SECPKG_ATTR_USER_FLAGS 11L
#define SECPKG_ATTR_NEGOTIATION_INFO 12L
#define SECPKG_ATTR_NATIVE_NAMES 13L
#define SECPKG_ATTR_FLAGS 14L
#define SECPKG_ATTR_USE_VALIDATED 15L
#define SECPKG_ATTR_CREDENTIAL_NAME 16L
#define SECPKG_ATTR_TARGET_INFORMATION 17L
#define SECPKG_ATTR_ACCESS_TOKEN 18L
#define SECPKG_ATTR_TARGET 19L
#define SECPKG_ATTR_AUTHENTICATION_ID 20L
#define SECPKG_ATTR_LOGOFF_TIME 21L
#define SECPKG_ATTR_NEGO_KEYS 22L
#define SECPKG_ATTR_PROMPTING_NEEDED 24L
#define SECPKG_ATTR_UNIQUE_BINDINGS 25L
#define SECPKG_ATTR_ENDPOINT_BINDINGS 26L
#define SECPKG_ATTR_CLIENT_SPECIFIED_TARGET 27L
#define SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS 30L
#define SECPKG_ATTR_NEGO_PKG_INFO 31L
#define SECPKG_ATTR_NEGO_STATUS 32L
#define SECPKG_ATTR_CONTEXT_DELETED 33L
#define SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES 128L
/* Security package context attribute negotiation information flags */
#define SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS 0x00000001L
#define SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM 0x00000002L
/* Security package negotiation states */
#define SECPKG_NEGOTIATION_COMPLETE 0L
#define SECPKG_NEGOTIATION_OPTIMISTIC 1L
#define SECPKG_NEGOTIATION_IN_PROGRESS 2L
#define SECPKG_NEGOTIATION_DIRECT 3L
#define SECPKG_NEGOTIATION_TRY_MULTICRED 4L
/* ExportSecurityContext() flags */
#define SECPKG_CONTEXT_EXPORT_RESET_NEW 0x00000001L
#define SECPKG_CONTEXT_EXPORT_DELETE_OID 0x00000002L
#define SECPKG_CONTEXT_EXPORT_TO_KERNEL 0x00000004L
/* Security entry point names */
#define SECURITY_ENTRYPOINT_ANSIA "InitSecurityInterfaceA"
#define SECURITY_ENTRYPOINT_ANSIW "InitSecurityInterfaceW"
#define SECURITY_ENTRYPOINTA SEC_TEXT( "InitSecurityInterfaceA" )
#define SECURITY_ENTRYPOINTW SEC_TEXT( "InitSecurityInterfaceW" )
#define SECURITY_ENTRYPOINT16 "INITSECURITYINTERFACEA"
#ifdef UNICODE
#define SECURITY_ENTRYPOINT_ANSI SECURITY_ENTRYPOINT_ANSIW
#define SECURITY_ENTRYPOINT SECURITY_ENTRYPOINTW
#else
#define SECURITY_ENTRYPOINT_ANSI SECURITY_ENTRYPOINT_ANSIA
#define SECURITY_ENTRYPOINT SECURITY_ENTRYPOINTA
#endif
/* Security Support Provider Interface versions */
#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION 1L
#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2L
#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_3 3L
#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_4 4L
/* SASL options */
#define SASL_OPTION_SEND_SIZE 1L
#define SASL_OPTION_RECV_SIZE 2L
#define SASL_OPTION_AUTHZ_STRING 3L
#define SASL_OPTION_AUTHZ_PROCESSING 4L
/* Authentication identity version numbers */
#define SEC_WINNT_AUTH_IDENTITY_VERSION 0x00000200L
#define SEC_WINNT_AUTH_IDENTITY_VERSION_2 0x00000201L
/* Additional authentication identity flags */
#define SEC_WINNT_AUTH_IDENTITY_MARSHALLED 0x00000004L
#define SEC_WINNT_AUTH_IDENTITY_ONLY 0x00000008L
#define SEC_WINNT_AUTH_IDENTITY_FLAGS_PROCESS_ENCRYPTED 0x00000010L
#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SYSTEM_PROTECTED 0x00000020L
#define SEC_WINNT_AUTH_IDENTITY_FLAGS_NULL_USER 0x00020000L
#define SEC_WINNT_AUTH_IDENTITY_FLAGS_NULL_DOMAIN 0x00040000L
#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_USE_MASK 0xFF000000L
#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_SAVE_CRED_BY_CALLER 0x80000000L
#define SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_SAVE_CRED_CHECKED 0x40000000L
#define SEC_WINNT_AUTH_IDENTITY_FLAGS_VALID_SSPIPFC_FLAGS \
(SEC_WINNT_AUTH_IDENTITY_FLAGS_SSPIPFC_SAVE_CRED_BY_CALLER | \
SEC_WINNT_AUTH_IDENTITY_FLAGS_SPPIPFC_SAVE_CRED_CHECKED)
/* SspiPromptForCredentials() flags */
#define SSPIPFC_SAVE_CRED_BY_CALLER 0x00000001L
#define SSPIPFC_VALID_FLAGS SSPIPFC_SAVE_CRED_BY_CALLER
/* Security package options types */
#define SECPKG_OPTIONS_TYPE_UNKNOWN 0L
#define SECPKG_OPTIONS_TYPE_LSA 1L
#define SECPKG_OPTIONS_TYPE_SSPI 2L
/* Security package options flags */
#define SECPKG_OPTIONS_PERMANENT 0x00000001L
/* Security handle */
#ifndef _SECHANDLE_DEFINED
#define _SECHANDLE_DEFINED
typedef struct _SecHandle {
ULONG_PTR dwLower;
ULONG_PTR dwUpper;
} SecHandle;
typedef SecHandle *PSecHandle;
#endif
typedef SecHandle CredHandle;
typedef PSecHandle PCredHandle;
typedef SecHandle CtxtHandle;
typedef PSecHandle PCtxtHandle;
/* Security string */
#ifdef _NTDEF_
typedef UNICODE_STRING SECURITY_STRING;
#else
typedef struct _SECURITY_STRING {
unsigned short Length;
unsigned short MaximumLength;
unsigned short *Buffer;
} SECURITY_STRING;
#endif
typedef SECURITY_STRING *PSECURITY_STRING;
/* Security package information */
typedef struct _SecPkgInfoA {
unsigned long fCapabilities;
unsigned short wVersion;
unsigned short wRPCID;
unsigned long cbMaxToken;
SEC_CHAR *Name;
SEC_CHAR *Comment;
} SecPkgInfoA;
typedef SecPkgInfoA *PSecPkgInfoA;
typedef struct _SecPkgInfoW {
unsigned long fCapabilities;
unsigned short wVersion;
unsigned short wRPCID;
unsigned long cbMaxToken;
SEC_WCHAR *Name;
SEC_WCHAR *Comment;
} SecPkgInfoW;
typedef SecPkgInfoW *PSecPkgInfoW;
#ifdef UNICODE
typedef SecPkgInfoW SecPkgInfo;
typedef PSecPkgInfoW PSecPkgInfo;
#else
typedef SecPkgInfoA SecPkgInfo;
typedef PSecPkgInfoA PSecPkgInfo;
#endif
/* Security buffer */
typedef struct _SecBuffer {
unsigned long cbBuffer;
unsigned long BufferType;
void *pvBuffer;
} SecBuffer;
typedef SecBuffer *PSecBuffer;
/* Security buffer descriptor */
typedef struct _SecBufferDesc {
unsigned long ulVersion;
unsigned long cBuffers;
PSecBuffer pBuffers;
} SecBufferDesc;
typedef SecBufferDesc *PSecBufferDesc;
/* Security negotiation information */
typedef struct _SEC_NEGOTIATION_INFO {
unsigned long Size;
unsigned long NameLength;
SEC_WCHAR *Name;
void *Reserved;
} SEC_NEGOTIATION_INFO;
typedef SEC_NEGOTIATION_INFO *PSEC_NEGOTIATION_INFO;
/* Security channel bindings */
typedef struct _SEC_CHANNEL_BINDINGS {
unsigned long dwInitiatorAddrType;
unsigned long cbInitiatorLength;
unsigned long dwInitiatorOffset;
unsigned long dwAcceptorAddrType;
unsigned long cbAcceptorLength;
unsigned long dwAcceptorOffset;
unsigned long cbApplicationDataLength;
unsigned long dwApplicationDataOffset;
} SEC_CHANNEL_BINDINGS;
typedef SEC_CHANNEL_BINDINGS *PSEC_CHANNEL_BINDINGS;
/* Security package credentials names */
typedef struct _SecPkgCredentials_NamesA {
SEC_CHAR *sUserName;
} SecPkgCredentials_NamesA;
typedef SecPkgCredentials_NamesA *PSecPkgCredentials_NamesA;
typedef struct _SecPkgCredentials_NamesW {
SEC_WCHAR *sUserName;
} SecPkgCredentials_NamesW;
typedef SecPkgCredentials_NamesW *PSecPkgCredentials_NamesW;
#ifdef UNICODE
typedef SecPkgCredentials_NamesW SecPkgCredentials_Names;
typedef PSecPkgCredentials_NamesW PSecPkgCredentials_Names;
#else
typedef SecPkgCredentials_NamesA SecPkgCredentials_Names;
typedef PSecPkgCredentials_NamesA PSecPkgCredentials_Names;
#endif
/* Security package credentials SSI provider */
typedef struct _SecPkgCredentials_SSIProviderA {
SEC_CHAR *sProviderName;
unsigned long ProviderInfoLength;
char *ProviderInfo;
} SecPkgCredentials_SSIProviderA;
typedef SecPkgCredentials_SSIProviderA *PSecPkgCredentials_SSIProviderA;
typedef struct _SecPkgCredentials_SSIProviderW {
SEC_WCHAR *sProviderName;
unsigned long ProviderInfoLength;
char *ProviderInfo;
} SecPkgCredentials_SSIProviderW;
typedef SecPkgCredentials_SSIProviderW *PSecPkgCredentials_SSIProviderW;
#ifdef UNICODE
typedef SecPkgCredentials_SSIProviderW SecPkgCredentials_SSIProvider;
typedef PSecPkgCredentials_SSIProviderW PSecPkgCredentials_SSIProvider;
#else
typedef SecPkgCredentials_SSIProviderA SecPkgCredentials_SSIProvider;
typedef PSecPkgCredentials_SSIProviderA PSecPkgCredentials_SSIProvider;
#endif
/* Security package context subject attributes */
typedef struct _SecPkgContext_SubjectAttributes {
void *AttributeInfo;
} SecPkgContext_SubjectAttributes;
typedef SecPkgContext_SubjectAttributes *PSecPkgContext_SubjectAttributes;
/* Security package credential classes */
typedef enum _SECPKG_CRED_CLASS {
SecPkgCredClass_None = 0,
SecPkgCredClass_Ephemeral = 10,
SecPkgCredClass_PersistedGeneric = 20,
SecPkgCredClass_PersistedSpecific = 30,
SecPkgCredClass_Explicit = 40
} SECPKG_CRED_CLASS;
typedef SECPKG_CRED_CLASS *PSECPKG_CRED_CLASS;
/* Security package context credential information */
typedef struct _SecPkgContext_CredInfo {
SECPKG_CRED_CLASS CredClass;
unsigned long IsPromptingNeeded;
} SecPkgContext_CredInfo;
typedef SecPkgContext_CredInfo *PSecPkgContext_CredInfo;
/* Security package context negotiation package information */
typedef struct _SecPkgContext_NegoPackageInfo {
unsigned long PackageMask;
} SecPkgContext_NegoPackageInfo;
typedef SecPkgContext_NegoPackageInfo *PSecPkgContext_NegoPackageInfo;
/* Security package context negotiation status */
typedef struct _SecPkgContext_NegoStatus {
unsigned long LastStatus;
} SecPkgContext_NegoStatus;
typedef SecPkgContext_NegoStatus *PSecPkgContext_NegoStatus;
/* Security package context sizes */
typedef struct _SecPkgContext_Sizes {
unsigned long cbMaxToken;
unsigned long cbMaxSignature;
unsigned long cbBlockSize;
unsigned long cbSecurityTrailer;
} SecPkgContext_Sizes;
typedef SecPkgContext_Sizes *PSecPkgContext_Sizes;
/* Security package context stream sizes */
typedef struct _SecPkgContext_StreamSizes {
unsigned long cbHeader;
unsigned long cbTrailer;
unsigned long cbMaximumMessage;
unsigned long cBuffers;
unsigned long cbBlockSize;
} SecPkgContext_StreamSizes;
typedef SecPkgContext_StreamSizes *PSecPkgContext_StreamSizes;
/* Security package context names */
typedef struct _SecPkgContext_NamesA {
SEC_CHAR *sUserName;
} SecPkgContext_NamesA;
typedef SecPkgContext_NamesA *PSecPkgContext_NamesA;
typedef struct _SecPkgContext_NamesW {
SEC_WCHAR *sUserName;
} SecPkgContext_NamesW;
typedef SecPkgContext_NamesW *PSecPkgContext_NamesW;
#ifdef UNICODE
typedef SecPkgContext_NamesW SecPkgContext_Names;
typedef PSecPkgContext_NamesW PSecPkgContext_Names;
#else
typedef SecPkgContext_NamesA SecPkgContext_Names;
typedef PSecPkgContext_NamesA PSecPkgContext_Names;
#endif
/* Security package attribute last client token status values */
typedef enum _SECPKG_ATTR_LCT_STATUS {
SecPkgAttrLastClientTokenYes = 0,
SecPkgAttrLastClientTokenNo = 1,
SecPkgAttrLastClientTokenMaybe = 2
} SECPKG_ATTR_LCT_STATUS;
typedef SECPKG_ATTR_LCT_STATUS *PSECPKG_ATTR_LCT_STATUS;
/* Security package context last client token status */
typedef struct _SecPkgContext_LastClientTokenStatus {
SECPKG_ATTR_LCT_STATUS LastClientTokenStatus;
} SecPkgContext_LastClientTokenStatus;
typedef SecPkgContext_LastClientTokenStatus *PSecPkgContext_LastClientTokenStatus;
/* Security package context lifespan */
typedef struct _SecPkgContext_Lifespan {
TimeStamp tsStart;
TimeStamp tsExpiry;
} SecPkgContext_Lifespan;
typedef SecPkgContext_Lifespan *PSecPkgContext_Lifespan;
/* Security package context DCE information */
typedef struct _SecPkgContext_DceInfo {
unsigned long AuthzSvc;
void *pPac;
} SecPkgContext_DceInfo;
typedef SecPkgContext_DceInfo *PSecPkgContext_DceInfo;
/* Security package context key information */
typedef struct _SecPkgContext_KeyInfoA {
SEC_CHAR *sSignatureAlgorithmName;
SEC_CHAR *sEncryptAlgorithmName;
unsigned long KeySize;
unsigned long SignatureAlgorithm;
unsigned long EncryptAlgorithm;
} SecPkgContext_KeyInfoA;
typedef SecPkgContext_KeyInfoA *PSecPkgContext_KeyInfoA;
typedef struct _SecPkgContext_KeyInfoW {
SEC_WCHAR *sSignatureAlgorithmName;
SEC_WCHAR *sEncryptAlgorithmName;
unsigned long KeySize;
unsigned long SignatureAlgorithm;
unsigned long EncryptAlgorithm;
} SecPkgContext_KeyInfoW;
typedef SecPkgContext_KeyInfoW *PSecPkgContext_KeyInfoW;
#ifdef UNICODE
typedef SecPkgContext_KeyInfoW SecPkgContext_KeyInfo;
typedef PSecPkgContext_KeyInfoW PSecPkgContext_KeyInfo;
#else
typedef SecPkgContext_KeyInfoA SecPkgContext_KeyInfo;
typedef PSecPkgContext_KeyInfoA PSecPkgContext_KeyInfo;
#endif
/* Security package context authority */
typedef struct _SecPkgContext_AuthorityA {
SEC_CHAR *sAuthorityName;
} SecPkgContext_AuthorityA;
typedef SecPkgContext_AuthorityA *PSecPkgContext_AuthorityA;
typedef struct _SecPkgContext_AuthorityW {
SEC_WCHAR *sAuthorityName;
} SecPkgContext_AuthorityW;
typedef SecPkgContext_AuthorityW *PSecPkgContext_AuthorityW;
#ifdef UNICODE
typedef SecPkgContext_AuthorityW SecPkgContext_Authority;
typedef PSecPkgContext_AuthorityW PSecPkgContext_Authority;
#else
typedef SecPkgContext_AuthorityA SecPkgContext_Authority;
typedef PSecPkgContext_AuthorityA PSecPkgContext_Authority;
#endif
/* Security package context protocol information */
typedef struct _SecPkgContext_ProtoInfoA {
SEC_CHAR *sProtocolName;
unsigned long majorVersion;
unsigned long minorVersion;
} SecPkgContext_ProtoInfoA;
typedef SecPkgContext_ProtoInfoA *PSecPkgContext_ProtoInfoA;
typedef struct _SecPkgContext_ProtoInfoW {
SEC_WCHAR *sProtocolName;
unsigned long majorVersion;
unsigned long minorVersion;
} SecPkgContext_ProtoInfoW;
typedef SecPkgContext_ProtoInfoW *PSecPkgContext_ProtoInfoW;
#ifdef UNICODE
typedef SecPkgContext_ProtoInfoW SecPkgContext_ProtoInfo;
typedef PSecPkgContext_ProtoInfoW PSecPkgContext_ProtoInfo;
#else
typedef SecPkgContext_ProtoInfoA SecPkgContext_ProtoInfo;
typedef PSecPkgContext_ProtoInfoA PSecPkgContext_ProtoInfo;
#endif
/* Security package context password expiry */
typedef struct _SecPkgContext_PasswordExpiry {
TimeStamp tsPasswordExpires;
} SecPkgContext_PasswordExpiry;
typedef SecPkgContext_PasswordExpiry *PSecPkgContext_PasswordExpiry;
/* Security package context logoff time */
#if (NTDDI_VERSION > 0x05020000)
typedef struct _SecPkgContext_LogoffTime {
TimeStamp tsLogoffTime;
} SecPkgContext_LogoffTime;
typedef SecPkgContext_LogoffTime *PSecPkgContext_LogoffTime;
#endif
/* Security package context session key */
typedef struct _SecPkgContext_SessionKey {
unsigned long SessionKeyLength;
unsigned char *SessionKey;
} SecPkgContext_SessionKey;
typedef SecPkgContext_SessionKey *PSecPkgContext_SessionKey;
/* Security package context negotiation keys */
typedef struct _SecPkgContext_NegoKeys {
unsigned long KeyType;
unsigned short KeyLength;
unsigned char *KeyValue;
unsigned long VerifyKeyType;
unsigned short VerifyKeyLength;
unsigned char *VerifyKeyValue;
} SecPkgContext_NegoKeys;
typedef SecPkgContext_NegoKeys *PSecPkgContext_NegoKeys;
/* Security package context package information */
typedef struct _SecPkgContext_PackageInfoA {
PSecPkgInfoA PackageInfo;
} SecPkgContext_PackageInfoA;
typedef SecPkgContext_PackageInfoA *PSecPkgContext_PackageInfoA;
typedef struct _SecPkgContext_PackageInfoW {
PSecPkgInfoW PackageInfo;
} SecPkgContext_PackageInfoW;
typedef SecPkgContext_PackageInfoW *PSecPkgContext_PackageInfoW;
#ifdef UNICODE
typedef SecPkgContext_PackageInfoW SecPkgContext_PackageInfo;
typedef PSecPkgContext_PackageInfoW PSecPkgContext_PackageInfo;
#else
typedef SecPkgContext_PackageInfoA SecPkgContext_PackageInfo;
typedef PSecPkgContext_PackageInfoA PSecPkgContext_PackageInfo;
#endif
/* Security package context user flags */
typedef struct _SecPkgContext_UserFlags {
unsigned long UserFlags;
} SecPkgContext_UserFlags;
typedef SecPkgContext_UserFlags *PSecPkgContext_UserFlags;
/* Security package context flags */
typedef struct _SecPkgContext_Flags {
unsigned long Flags;
} SecPkgContext_Flags;
typedef SecPkgContext_Flags *PSecPkgContext_Flags;
/* Security package context negotiation information */
typedef struct _SecPkgContext_NegotiationInfoA {
PSecPkgInfoA PackageInfo;
unsigned long NegotiationState;
} SecPkgContext_NegotiationInfoA;
typedef SecPkgContext_NegotiationInfoA *PSecPkgContext_NegotiationInfoA;
typedef struct _SecPkgContext_NegotiationInfoW {
PSecPkgInfoW PackageInfo;
unsigned long NegotiationState;
} SecPkgContext_NegotiationInfoW;
typedef SecPkgContext_NegotiationInfoW *PSecPkgContext_NegotiationInfoW;
#ifdef UNICODE
typedef SecPkgContext_NegotiationInfoW SecPkgContext_NegotiationInfo;
typedef PSecPkgContext_NegotiationInfoW PSecPkgContext_NegotiationInfo;
#else
typedef SecPkgContext_NegotiationInfoA SecPkgContext_NegotiationInfo;
typedef PSecPkgContext_NegotiationInfoA PSecPkgContext_NegotiationInfo;
#endif
/* Security package context native names */
typedef struct _SecPkgContext_NativeNamesA {
SEC_CHAR *sClientName;
SEC_CHAR *sServerName;
} SecPkgContext_NativeNamesA;
typedef SecPkgContext_NativeNamesA *PSecPkgContext_NativeNamesA;
typedef struct _SecPkgContext_NativeNamesW {
SEC_WCHAR *sClientName;
SEC_WCHAR *sServerName;
} SecPkgContext_NativeNamesW;
typedef SecPkgContext_NativeNamesW *PSecPkgContext_NativeNamesW;
#ifdef UNICODE
typedef SecPkgContext_NativeNamesW SecPkgContext_NativeNames;
typedef PSecPkgContext_NativeNamesW PSecPkgContext_NativeNames;
#else
typedef SecPkgContext_NativeNamesA SecPkgContext_NativeNames;
typedef PSecPkgContext_NativeNamesA PSecPkgContext_NativeNames;
#endif
/* Security package context credential name */
typedef struct _SecPkgContext_CredentialNameA {
unsigned long CredentialType;
SEC_CHAR *sCredentialName;
} SecPkgContext_CredentialNameA;
typedef SecPkgContext_CredentialNameA *PSecPkgContext_CredentialNameA;
typedef struct _SecPkgContext_CredentialNameW {
unsigned long CredentialType;
SEC_WCHAR *sCredentialName;
} SecPkgContext_CredentialNameW;
typedef SecPkgContext_CredentialNameW *PSecPkgContext_CredentialNameW;
#ifdef UNICODE
typedef SecPkgContext_CredentialNameW SecPkgContext_CredentialName;
typedef PSecPkgContext_CredentialNameW PSecPkgContext_CredentialName;
#else
typedef SecPkgContext_CredentialNameA SecPkgContext_CredentialName;
typedef PSecPkgContext_CredentialNameA PSecPkgContext_CredentialName;
#endif
/* Security package context access token */
typedef struct _SecPkgContext_AccessToken {
void *AccessToken;
} SecPkgContext_AccessToken;
typedef SecPkgContext_AccessToken *PSecPkgContext_AccessToken;
/* Security package context target information */
typedef struct _SecPkgContext_TargetInformation {
unsigned long MarshalledTargetInfoLength;
unsigned char *MarshalledTargetInfo;
} SecPkgContext_TargetInformation;
typedef SecPkgContext_TargetInformation *PSecPkgContext_TargetInformation;
/* Security package context authorization identifier */
typedef struct _SecPkgContext_AuthzID {
unsigned long AuthzIDLength;
char *AuthzID;
} SecPkgContext_AuthzID;
typedef SecPkgContext_AuthzID *PSecPkgContext_AuthzID;
/* Security package context target */
typedef struct _SecPkgContext_Target {
unsigned long TargetLength;
char *Target;
} SecPkgContext_Target;
typedef SecPkgContext_Target *PSecPkgContext_Target;
/* Security package context client specified target */
typedef struct _SecPkgContext_ClientSpecifiedTarget {
SEC_WCHAR *sTargetName;
} SecPkgContext_ClientSpecifiedTarget;
typedef SecPkgContext_ClientSpecifiedTarget *PSecPkgContext_ClientSpecifiedTarget;
/* Security package context bindings */
typedef struct _SecPkgContext_Bindings {
unsigned long BindingsLength;
SEC_CHANNEL_BINDINGS *Bindings;
} SecPkgContext_Bindings;
typedef SecPkgContext_Bindings *PSecPkgContext_Bindings;
/* Security key callback */
typedef void (SEC_ENTRY *SEC_GET_KEY_FN)( void *, void *, unsigned long, void **, SECURITY_STATUS * );
typedef enum _SecDelegationType {
SecFull = 0,
SecService = 1,
SecTree = 2,
SecDirectory = 3,
SecObject = 4
} SecDelegationType;
typedef SecDelegationType *PSecDelegationType;
/* Security callbacks */
typedef SECURITY_STATUS (SEC_ENTRY *ACCEPT_SECURITY_CONTEXT_FN)( PCredHandle, PCtxtHandle, PSecBufferDesc, unsigned long, unsigned long, PCtxtHandle, PSecBufferDesc, unsigned long *, PTimeStamp );
typedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_A)( SEC_CHAR *, SEC_CHAR *, unsigned long, void *, void *, SEC_GET_KEY_FN, void *, PCredHandle, PTimeStamp );
typedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_A)( PCredHandle, SEC_CHAR *, SEC_CHAR *, unsigned long, void *, SEC_GET_KEY_FN, void *, PTimeStamp );
typedef SECURITY_STATUS (SEC_ENTRY *APPLY_CONTROL_TOKEN_FN)( PCtxtHandle, PSecBufferDesc );
typedef SECURITY_STATUS (SEC_ENTRY *CHANGE_PASSWORD_FN_A)( SEC_CHAR *, SEC_CHAR *, SEC_CHAR *, SEC_CHAR *, SEC_CHAR *, BOOLEAN, unsigned long, PSecBufferDesc );
typedef SECURITY_STATUS (SEC_ENTRY *CHANGE_PASSWORD_FN_W)( SEC_WCHAR *, SEC_WCHAR *, SEC_WCHAR *, SEC_WCHAR *, SEC_WCHAR *, BOOLEAN, unsigned long, PSecBufferDesc );
typedef SECURITY_STATUS (SEC_ENTRY *COMPLETE_AUTH_TOKEN_FN)( PCtxtHandle, PSecBufferDesc );
typedef SECURITY_STATUS (SEC_ENTRY *DECRYPT_MESSAGE_FN)( PCtxtHandle, PSecBufferDesc, unsigned long, unsigned long * );
typedef SECURITY_STATUS (SEC_ENTRY *DELETE_SECURITY_CONTEXT_FN)( PCtxtHandle );
typedef SECURITY_STATUS (SEC_ENTRY *ENCRYPT_MESSAGE_FN)( PCtxtHandle, unsigned long, PSecBufferDesc, unsigned long );
typedef SECURITY_STATUS (SEC_ENTRY *ENUMERATE_SECURITY_PACKAGES_FN_A)( unsigned long *, PSecPkgInfoA * );
typedef SECURITY_STATUS (SEC_ENTRY *ENUMERATE_SECURITY_PACKAGES_FN_W)( unsigned long *, PSecPkgInfoW * );
typedef SECURITY_STATUS (SEC_ENTRY *EXPORT_SECURITY_CONTEXT_FN)( PCtxtHandle, ULONG, PSecBuffer, void ** );
typedef SECURITY_STATUS (SEC_ENTRY *FREE_CONTEXT_BUFFER_FN)( PVOID );
typedef SECURITY_STATUS (SEC_ENTRY *FREE_CREDENTIALS_HANDLE_FN)( PCredHandle );
typedef SECURITY_STATUS (SEC_ENTRY *IMPERSONATE_SECURITY_CONTEXT_FN)( PCtxtHandle );
typedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_A)( SEC_CHAR *, PSecBuffer, void *, PCtxtHandle );
typedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_A)( PCredHandle, PCtxtHandle, SEC_CHAR *, unsigned long, unsigned long, unsigned long, PSecBufferDesc, unsigned long, PCtxtHandle, PSecBufferDesc, unsigned long *, PTimeStamp );
typedef SECURITY_STATUS (SEC_ENTRY *MAKE_SIGNATURE_FN)( PCtxtHandle, unsigned long, PSecBufferDesc, unsigned long );
typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CONTEXT_ATTRIBUTES_FN_A)( PCtxtHandle, unsigned long, void * );
typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CONTEXT_ATTRIBUTES_FN_W)( PCtxtHandle, unsigned long, void * );
typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CREDENTIALS_ATTRIBUTES_FN_A)( PCredHandle, unsigned long, void * );
typedef SECURITY_STATUS (SEC_ENTRY *QUERY_CREDENTIALS_ATTRIBUTES_FN_W)( PCredHandle, unsigned long, void * );
typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_CONTEXT_TOKEN_FN)( PCtxtHandle, void ** );
typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_A)( SEC_CHAR *, PSecPkgInfoA * );
typedef SECURITY_STATUS (SEC_ENTRY *REVERT_SECURITY_CONTEXT_FN)( PCtxtHandle );
typedef SECURITY_STATUS (SEC_ENTRY *SET_CONTEXT_ATTRIBUTES_FN_A)( PCtxtHandle, unsigned long, void *, unsigned long );
typedef SECURITY_STATUS (SEC_ENTRY *SET_CONTEXT_ATTRIBUTES_FN_W)( PCtxtHandle, unsigned long, void *, unsigned long );
typedef SECURITY_STATUS (SEC_ENTRY *SET_CREDENTIALS_ATTRIBUTES_FN_A)( PCredHandle, unsigned long, void *, unsigned long );
typedef SECURITY_STATUS (SEC_ENTRY *SET_CREDENTIALS_ATTRIBUTES_FN_W)( PCredHandle, unsigned long, void *, unsigned long );
typedef SECURITY_STATUS (SEC_ENTRY *VERIFY_SIGNATURE_FN)( PCtxtHandle, PSecBufferDesc, unsigned long, unsigned long * );
#ifdef SECURITY_KERNEL
typedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_W)( PSECURITY_STRING, PSECURITY_STRING, unsigned long, void *, void *, SEC_GET_KEY_FN, void *, PCredHandle, PTimeStamp );
typedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_W)( PCredHandle, PSECURITY_STRING, PSECURITY_STRING, unsigned long, void *, SEC_GET_KEY_FN, void *, PTimeStamp );
typedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_W)( PSECURITY_STRING, PSecBuffer, VOID *, PCtxtHandle );
typedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_W)( PCredHandle, PCtxtHandle, PSECURITY_STRING, unsigned long, unsigned long, unsigned long, PSecBufferDesc, unsigned long, PCtxtHandle, PSecBufferDesc, unsigned long *, PTimeStamp );
typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_W)( PSECURITY_STRING, PSecPkgInfoW * );
#else
typedef SECURITY_STATUS (SEC_ENTRY *ACQUIRE_CREDENTIALS_HANDLE_FN_W)( SEC_WCHAR *, SEC_WCHAR *, unsigned long, void *, void *, SEC_GET_KEY_FN, void *, PCredHandle, PTimeStamp );
typedef SECURITY_STATUS (SEC_ENTRY *ADD_CREDENTIALS_FN_W)( PCredHandle, SEC_WCHAR *, SEC_WCHAR *, unsigned long, void *, SEC_GET_KEY_FN, void *, PTimeStamp );
typedef SECURITY_STATUS (SEC_ENTRY *IMPORT_SECURITY_CONTEXT_FN_W)( SEC_WCHAR *, PSecBuffer, VOID *, PCtxtHandle );
typedef SECURITY_STATUS (SEC_ENTRY *INITIALIZE_SECURITY_CONTEXT_FN_W)( PCredHandle, PCtxtHandle, SEC_WCHAR *, unsigned long, unsigned long, unsigned long, PSecBufferDesc, unsigned long, PCtxtHandle, PSecBufferDesc, unsigned long *, PTimeStamp );
typedef SECURITY_STATUS (SEC_ENTRY *QUERY_SECURITY_PACKAGE_INFO_FN_W)( SEC_WCHAR *, PSecPkgInfoW * );
#endif
#ifdef UNICODE
#define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_W
#define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_W
#define CHANGE_PASSWORD_FN CHANGE_PASSWORD_FN_W
#define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_W
#define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_W
#define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_W
#define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_W
#define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_W
#define SET_CONTEXT_ATTRIBUTES_FN SET_CONTEXT_ATTRIBUTES_FN_W
#define SET_CREDENTIALS_ATTRIBUTES_FN SET_CREDENTIALS_ATTRIBUTES_FN_W
#else
#define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_A
#define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_A
#define CHANGE_PASSWORD_FN CHANGE_PASSWORD_FN_A
#define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_A
#define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_A
#define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_A
#define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_A
#define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_A
#define SET_CONTEXT_ATTRIBUTES_FN SET_CONTEXT_ATTRIBUTES_FN_A
#define SET_CREDENTIALS_ATTRIBUTES_FN SET_CREDENTIALS_ATTRIBUTES_FN_A
#endif
/* Security function table */
typedef struct _SECURITY_FUNCTION_TABLE_A {
unsigned long 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;
SET_CREDENTIALS_ATTRIBUTES_FN_A SetCredentialsAttributesA;
#ifdef SECURITY_KERNEL
void *Reserved9;
#else
CHANGE_PASSWORD_FN_A ChangeAccountPasswordA;
#endif
} SecurityFunctionTableA;
typedef SecurityFunctionTableA *PSecurityFunctionTableA;
typedef struct _SECURITY_FUNCTION_TABLE_W {
unsigned long 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;
SET_CREDENTIALS_ATTRIBUTES_FN_W SetCredentialsAttributesW;
#ifdef SECURITY_KERNEL
void *Reserved9;
#else
CHANGE_PASSWORD_FN_W ChangeAccountPasswordW;
#endif
} SecurityFunctionTableW;
typedef SecurityFunctionTableW *PSecurityFunctionTableW;
#ifdef UNICODE
typedef SecurityFunctionTableW SecurityFunctionTable;
typedef PSecurityFunctionTableW PSecurityFunctionTable;
#else
typedef SecurityFunctionTableA SecurityFunctionTable;
typedef PSecurityFunctionTableA PSecurityFunctionTable;
#endif
/* SASL authorization identifier state */
typedef enum _SASL_AUTHZID_STATE {
Sasl_AuthZIDForbidden = 0,
Sasl_AuthZIDProcessed = 1
} SASL_AUTHZID_STATE;
/* Authentication identity (extended version 2) */
typedef struct _SEC_WINNT_AUTH_IDENTITY_EX2 {
unsigned long Version;
unsigned short cbHeaderLength;
unsigned long cbStructureLength;
unsigned long UserOffset;
unsigned short UserLength;
unsigned long DomainOffset;
unsigned short DomainLength;
unsigned long PackedCredentialsOffset;
unsigned short PackedCredentialsLength;
unsigned long Flags;
unsigned long PackageListOffset;
unsigned short PackageListLength;
} SEC_WINNT_AUTH_IDENTITY_EX2;
typedef SEC_WINNT_AUTH_IDENTITY_EX2 *PSEC_WINNT_AUTH_IDENTITY_EX2;
/* Authentication identity (extended version) */
typedef struct _SEC_WINNT_AUTH_IDENTITY_EXA {
unsigned long Version;
unsigned long Length;
unsigned char *User;
unsigned long UserLength;
unsigned char *Domain;
unsigned long DomainLength;
unsigned char *Password;
unsigned long PasswordLength;
unsigned long Flags;
unsigned char *PackageList;
unsigned long PackageListLength;
} SEC_WINNT_AUTH_IDENTITY_EXA;
typedef SEC_WINNT_AUTH_IDENTITY_EXA *PSEC_WINNT_AUTH_IDENTITY_EXA;
typedef struct _SEC_WINNT_AUTH_IDENTITY_EXW {
unsigned long Version;
unsigned long Length;
unsigned short *User;
unsigned long UserLength;
unsigned short *Domain;
unsigned long DomainLength;
unsigned short *Password;
unsigned long PasswordLength;
unsigned long Flags;
unsigned short *PackageList;
unsigned long PackageListLength;
} SEC_WINNT_AUTH_IDENTITY_EXW;
typedef SEC_WINNT_AUTH_IDENTITY_EXW *PSEC_WINNT_AUTH_IDENTITY_EXW;
#ifdef UNICODE
typedef SEC_WINNT_AUTH_IDENTITY_EXW SEC_WINNT_AUTH_IDENTITY_EX;
typedef PSEC_WINNT_AUTH_IDENTITY_EXW PSEC_WINNT_AUTH_IDENTITY_EX;
#else
typedef SEC_WINNT_AUTH_IDENTITY_EXA SEC_WINNT_AUTH_IDENTITY_EX;
typedef PSEC_WINNT_AUTH_IDENTITY_EXA PSEC_WINNT_AUTH_IDENTITY_EX;
#endif
/* Authentication identity information */
typedef struct _SEC_WINNT_AUTH_IDENTITY_INFO {
SEC_WINNT_AUTH_IDENTITY_EXW AuthIdExw;
SEC_WINNT_AUTH_IDENTITY_EXA AuthIdExa;
SEC_WINNT_AUTH_IDENTITY_A AuthId_a;
SEC_WINNT_AUTH_IDENTITY_W AuthId_w;
SEC_WINNT_AUTH_IDENTITY_EX2 AuthIdEx2;
} SEC_WINNT_AUTH_IDENTITY_INFO;
typedef SEC_WINNT_AUTH_IDENTITY_INFO *PSEC_WINNT_AUTH_IDENTITY_INFO;
/* Authentication byte vector */
#ifdef _SEC_WINNT_AUTH_TYPES
typedef struct _SEC_WINNT_AUTH_BYTE_VECTOR {
unsigned long ByteArrayOffset;
unsigned short ByteArrayLength;
} SEC_WINNT_AUTH_BYTE_VECTOR;
typedef SEC_WINNT_AUTH_BYTE_VECTOR *PSEC_WINNT_AUTH_BYTE_VECTOR;
#endif
/* Authentication data */
#ifdef _SEC_WINNT_AUTH_TYPES
typedef struct _SEC_WINNT_AUTH_DATA {
GUID CredType;
SEC_WINNT_AUTH_BYTE_VECTOR CredData;
} SEC_WINNT_AUTH_DATA;
typedef SEC_WINNT_AUTH_DATA *PSEC_WINNT_AUTH_DATA;
#endif
/* Authentication packed credentials */
#ifdef _SEC_WINNT_AUTH_TYPES
typedef struct _SEC_WINNT_AUTH_PACKED_CREDENTIALS {
unsigned short cbHeaderLength;
unsigned short cbStructureLength;
SEC_WINNT_AUTH_DATA AuthData;
} SEC_WINNT_AUTH_PACKED_CREDENTIALS;
typedef SEC_WINNT_AUTH_PACKED_CREDENTIALS *PSEC_WINNT_AUTH_PACKED_CREDENTIALS;
#endif
/* Authentication data password */
#ifdef _SEC_WINNT_AUTH_TYPES
typedef struct _SEC_WINNT_AUTH_DATA_PASSWORD {
SEC_WINNT_AUTH_BYTE_VECTOR UnicodePassword;
} SEC_WINNT_AUTH_DATA_PASSWORD;
typedef SEC_WINNT_AUTH_DATA_PASSWORD *PSEC_WINNT_AUTH_DATA_PASSWORD;
#endif
/* Authentication certificate data */
#ifdef _SEC_WINNT_AUTH_TYPES
typedef struct _SEC_WINNT_AUTH_CERTIFICATE_DATA {
unsigned short cbHeaderLength;
unsigned short cbStructureLength;
SEC_WINNT_AUTH_BYTE_VECTOR Certificate;
} SEC_WINNT_AUTH_CERTIFICATE_DATA;
typedef SEC_WINNT_AUTH_CERTIFICATE_DATA *PSEC_WINNT_AUTH_CERTIFICATE_DATA;
#endif
/* Credential UI context vector */
#ifdef _SEC_WINNT_AUTH_TYPES
typedef struct _SEC_WINNT_CREDUI_CONTEXT_VECTOR {
ULONG CredUIContextArrayOffset;
USHORT CredUIContextCount;
} SEC_WINNT_CREDUI_CONTEXT_VECTOR;
typedef SEC_WINNT_CREDUI_CONTEXT_VECTOR *PSEC_WINNT_CREDUI_CONTEXT_VECTOR;
#endif
/* Authentication short vector */
#ifdef _SEC_WINNT_AUTH_TYPES
typedef struct _SEC_WINNT_AUTH_SHORT_VECTOR {
ULONG ShortArrayOffset;
USHORT ShortArrayCount;
} SEC_WINNT_AUTH_SHORT_VECTOR;
typedef SEC_WINNT_AUTH_SHORT_VECTOR *PSEC_WINNT_AUTH_SHORT_VECTOR;
#endif
/* Credential UI marshaled context */
#ifdef _SEC_WINNT_AUTH_TYPES
typedef struct _CREDUIWIN_MARSHALED_CONTEXT {
GUID StructureType;
USHORT cbHeaderLength;
LUID LogonId;
GUID MarshaledDataType;
ULONG MarshaledDataOffset;
USHORT MarshaledDataLength;
} CREDUIWIN_MARSHALED_CONTEXT;
typedef CREDUIWIN_MARSHALED_CONTEXT *PCREDUIWIN_MARSHALED_CONTEXT;
#endif
/* Credential UI context */
#ifdef _SEC_WINNT_AUTH_TYPES
typedef struct _SEC_WINNT_CREDUI_CONTEXT {
USHORT cbHeaderLength;
HANDLE CredUIContextHandle;
PVOID UIInfo;
ULONG dwAuthError;
PSEC_WINNT_AUTH_IDENTITY_OPAQUE pInputAuthIdentity;
PUNICODE_STRING TargetName;
} SEC_WINNT_CREDUI_CONTEXT;
typedef SEC_WINNT_CREDUI_CONTEXT *PSEC_WINNT_CREDUI_CONTEXT;
#endif
/* Authentication packed credentials (extended version) */
#ifdef _SEC_WINNT_AUTH_TYPES
typedef struct _SEC_WINNT_AUTH_PACKED_CREDENTIALS_EX {
unsigned short cbHeaderLength;
unsigned long Flags;
SEC_WINNT_AUTH_BYTE_VECTOR PackedCredentials;
SEC_WINNT_AUTH_SHORT_VECTOR PackageList;
} SEC_WINNT_AUTH_PACKED_CREDENTIALS_EX;
typedef SEC_WINNT_AUTH_PACKED_CREDENTIALS_EX *PSEC_WINNT_AUTH_PACKED_CREDENTIALS_EX;
#endif
/* Security package options */
typedef struct _SECURITY_PACKAGE_OPTIONS {
unsigned long Size;
unsigned long Type;
unsigned long Flags;
unsigned long SignatureSize;
void *Signature;
} SECURITY_PACKAGE_OPTIONS;
typedef SECURITY_PACKAGE_OPTIONS *PSECURITY_PACKAGE_OPTIONS;
/* GUIDs */
#ifdef _SEC_WINNT_AUTH_TYPES
static const GUID SEC_WINNT_AUTH_DATA_TYPE_PASSWORD =
{ 0x28BFC32F, 0x10F6, 0x4738, { 0x98, 0xD1, 0x1A, 0xC0, 0x61, 0xDF, 0x71, 0x6A } };
static const GUID SEC_WINNT_AUTH_DATA_TYPE_CERT =
{ 0x235F69AD, 0x73FB, 0x4DBC, { 0x82, 0x03, 0x06, 0x29, 0xE7, 0x39, 0x33, 0x9B } };
static const GUID SEC_WINNT_AUTH_DATA_TYPE_CSP_DATA =
{ 0x68FD9879, 0x079C, 0x4DFE, { 0x82, 0x81, 0x57, 0x8A, 0xAD, 0xC1, 0xC1, 0x00 } };
static const GUID CREDUIWIN_STRUCTURE_TYPE_SSPIPFC =
{ 0x3C3E93D9, 0xD96B, 0x49B5, { 0x94, 0xA7, 0x45, 0x85, 0x92, 0x08, 0x83, 0x37 } };
static const GUID SSPIPFC_STRUCTURE_TYPE_CREDUI_CONTEXT =
{ 0xC2FFFE6F, 0x503D, 0x4C3D, { 0xA9, 0x5E, 0xBC, 0xE8, 0x21, 0x21, 0x3D, 0x44 } };
#endif
/* Functions in KSECDD.SYS and SECUR32.DLL */
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY AcceptSecurityContext( PCredHandle, PCtxtHandle, PSecBufferDesc, unsigned long, unsigned long, PCtxtHandle, PSecBufferDesc, unsigned long *, PTimeStamp );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleA( LPSTR, LPSTR, unsigned long, void *, void *, SEC_GET_KEY_FN, void *, PCredHandle, PTimeStamp );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY AddCredentialsA( PCredHandle, LPSTR, LPSTR, unsigned long, void *, SEC_GET_KEY_FN, void *, PTimeStamp );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY AddSecurityPackageA( LPSTR, PSECURITY_PACKAGE_OPTIONS );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY AddSecurityPackageW( LPWSTR, PSECURITY_PACKAGE_OPTIONS );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ApplyControlToken( PCtxtHandle, PSecBufferDesc );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ChangeAccountPasswordA( SEC_CHAR *, SEC_CHAR *, SEC_CHAR *, SEC_CHAR *, SEC_CHAR *, BOOLEAN, unsigned long, PSecBufferDesc );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ChangeAccountPasswordW( SEC_WCHAR *, SEC_WCHAR *, SEC_WCHAR *, SEC_WCHAR *, SEC_WCHAR *, BOOLEAN, unsigned long, PSecBufferDesc );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY CompleteAuthToken( PCtxtHandle, PSecBufferDesc );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY DecryptMessage( PCtxtHandle, PSecBufferDesc, unsigned long, unsigned long * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY DeleteSecurityContext( PCtxtHandle );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY DeleteSecurityPackageA( LPSTR );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY DeleteSecurityPackageW( LPWSTR );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY EncryptMessage( PCtxtHandle, unsigned long, PSecBufferDesc, unsigned long );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesA( unsigned long *, PSecPkgInfoA * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY EnumerateSecurityPackagesW( unsigned long *, PSecPkgInfoW * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ExportSecurityContext( PCtxtHandle, ULONG, PSecBuffer, void ** );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY FreeContextBuffer( PVOID );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY FreeCredentialsHandle( PCredHandle );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ImpersonateSecurityContext( PCtxtHandle );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ImportSecurityContextA( LPSTR, PSecBuffer, VOID *, PCtxtHandle );
KSECDDDECLSPEC PSecurityFunctionTableA SEC_ENTRY InitSecurityInterfaceA( void );
KSECDDDECLSPEC PSecurityFunctionTableW SEC_ENTRY InitSecurityInterfaceW( void );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY InitializeSecurityContextA( PCredHandle, PCtxtHandle, SEC_CHAR *, unsigned long, unsigned long, unsigned long, PSecBufferDesc, unsigned long, PCtxtHandle, PSecBufferDesc, unsigned long *, PTimeStamp );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY MakeSignature( PCtxtHandle, unsigned long, PSecBufferDesc, unsigned long );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY QueryContextAttributesA( PCtxtHandle, unsigned long, void * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY QueryContextAttributesW( PCtxtHandle, unsigned long, void * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesA( PCredHandle, unsigned long, void * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY QueryCredentialsAttributesW( PCredHandle, unsigned long, void * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY QuerySecurityContextToken( PCtxtHandle, void ** );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoA( LPSTR, PSecPkgInfoA * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY RevertSecurityContext( PCtxtHandle );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SaslAcceptSecurityContext( PCredHandle, PCtxtHandle, PSecBufferDesc, unsigned long, unsigned long, PCtxtHandle, PSecBufferDesc, unsigned long *, PTimeStamp );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SaslEnumerateProfilesA( LPSTR *, ULONG * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SaslEnumerateProfilesW( LPWSTR *, ULONG * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SaslGetContextOption( PCtxtHandle, ULONG, PVOID, ULONG, PULONG );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SaslGetProfilePackageA( LPSTR, PSecPkgInfoA * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SaslGetProfilePackageW( LPWSTR, PSecPkgInfoW * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SaslIdentifyPackageA( PSecBufferDesc, PSecPkgInfoA * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SaslIdentifyPackageW( PSecBufferDesc, PSecPkgInfoW * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SaslInitializeSecurityContextA( PCredHandle, PCtxtHandle, LPSTR, unsigned long, unsigned long, unsigned long, PSecBufferDesc, unsigned long, PCtxtHandle, PSecBufferDesc, unsigned long *, PTimeStamp );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SaslInitializeSecurityContextW( PCredHandle, PCtxtHandle, LPWSTR, unsigned long, unsigned long, unsigned long, PSecBufferDesc, unsigned long, PCtxtHandle, PSecBufferDesc, unsigned long *, PTimeStamp );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SaslSetContextOption( PCtxtHandle, ULONG, PVOID, ULONG );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SetContextAttributesA( PCtxtHandle, unsigned long, void *, unsigned long );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SetContextAttributesW( PCtxtHandle, unsigned long, void *, unsigned long );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SetCredentialsAttributesA( PCredHandle, unsigned long, void *, unsigned long );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SetCredentialsAttributesW( PCredHandle, unsigned long, void *, unsigned long );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY VerifySignature( PCtxtHandle, PSecBufferDesc, unsigned long, unsigned long * );
#ifdef SECURITY_KERNEL
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleW( PSECURITY_STRING, PSECURITY_STRING, unsigned long, void *, void *, SEC_GET_KEY_FN, void *, PCredHandle, PTimeStamp );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY AddCredentialsW( PCredHandle, PSECURITY_STRING, PSECURITY_STRING, unsigned long, void *, SEC_GET_KEY_FN, void *, PTimeStamp );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ImportSecurityContextW( PSECURITY_STRING, PSecBuffer, VOID *, PCtxtHandle );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY InitializeSecurityContextW( PCredHandle, PCtxtHandle, PSECURITY_STRING, unsigned long, unsigned long, unsigned long, PSecBufferDesc, unsigned long, PCtxtHandle, PSecBufferDesc, unsigned long *, PTimeStamp );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoW( PSECURITY_STRING, PSecPkgInfoW * );
KSECDDDECLSPEC NTSTATUS SEC_ENTRY SecLookupAccountName( PUNICODE_STRING, PULONG, PSID, PSID_NAME_USE, PULONG, PUNICODE_STRING );
KSECDDDECLSPEC NTSTATUS SEC_ENTRY SecLookupAccountSid( PSID, PULONG, PUNICODE_STRING, PULONG, PUNICODE_STRING, PSID_NAME_USE );
KSECDDDECLSPEC NTSTATUS SEC_ENTRY SecLookupWellKnownSid( WELL_KNOWN_SID_TYPE, PSID, ULONG, PULONG );
KSECDDDECLSPEC NTSTATUS SEC_ENTRY SecMakeSPN( PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, USHORT, PUNICODE_STRING, PUNICODE_STRING, PULONG, BOOLEAN );
KSECDDDECLSPEC NTSTATUS SEC_ENTRY SecMakeSPNEx( PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, USHORT, PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, PULONG, BOOLEAN );
KSECDDDECLSPEC NTSTATUS SEC_ENTRY SecMakeSPNEx2( PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, USHORT, PUNICODE_STRING, PUNICODE_STRING, PUNICODE_STRING, PULONG, BOOLEAN, BOOLEAN );
#else
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY AcquireCredentialsHandleW( LPWSTR, LPWSTR, unsigned long, void *, void *, SEC_GET_KEY_FN, void *, PCredHandle, PTimeStamp );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY AddCredentialsW( PCredHandle, LPWSTR, LPWSTR, unsigned long, void *, SEC_GET_KEY_FN, void *, PTimeStamp );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY ImportSecurityContextW( LPWSTR, PSecBuffer, VOID *, PCtxtHandle );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY InitializeSecurityContextW( PCredHandle, PCtxtHandle, SEC_WCHAR *, unsigned long, unsigned long, unsigned long, PSecBufferDesc, unsigned long, PCtxtHandle, PSecBufferDesc, unsigned long *, PTimeStamp );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY QuerySecurityPackageInfoW( LPWSTR, PSecPkgInfoW * );
#endif
#if (NTDDI_VERSION >= 0x06010000)
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SspiCompareAuthIdentities( PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PBOOLEAN, PBOOLEAN );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SspiCopyAuthIdentity( PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PSEC_WINNT_AUTH_IDENTITY_OPAQUE * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SspiEncodeAuthIdentityAsStrings( PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PCWSTR *, PCWSTR *, PCWSTR * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SspiEncodeStringsAsAuthIdentity( PCWSTR, PCWSTR, PCWSTR, PSEC_WINNT_AUTH_IDENTITY_OPAQUE * );
KSECDDDECLSPEC VOID SEC_ENTRY SspiFreeAuthIdentity( PSEC_WINNT_AUTH_IDENTITY_OPAQUE );
KSECDDDECLSPEC VOID SEC_ENTRY SspiLocalFree( PVOID );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SspiMarshalAuthIdentity( PSEC_WINNT_AUTH_IDENTITY_OPAQUE, unsigned long *, char ** );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SspiUnmarshalAuthIdentity( unsigned long, char *, PSEC_WINNT_AUTH_IDENTITY_OPAQUE * );
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY SspiValidateAuthIdentity( PSEC_WINNT_AUTH_IDENTITY_OPAQUE );
KSECDDDECLSPEC VOID SEC_ENTRY SspiZeroAuthIdentity( PSEC_WINNT_AUTH_IDENTITY_OPAQUE );
#endif
/* Functions in SECUR32.DLL */
SECURITY_STATUS SEC_ENTRY SspiDecryptAuthIdentity( PSEC_WINNT_AUTH_IDENTITY_OPAQUE );
SECURITY_STATUS SEC_ENTRY SspiEncryptAuthIdentity( PSEC_WINNT_AUTH_IDENTITY_OPAQUE );
BOOLEAN SEC_ENTRY SspiIsAuthIdentityEncrypted( PSEC_WINNT_AUTH_IDENTITY_OPAQUE );
SECURITY_STATUS SEC_ENTRY SspiPrepareForCredRead( PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PCWSTR, PULONG, PCWSTR * );
SECURITY_STATUS SEC_ENTRY SspiPrepareForCredWrite( PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PCWSTR, PULONG, PCWSTR *, PCWSTR *, PUCHAR *, PULONG );
#if (NTDDI_VERSION >= 0x06010000)
SECURITY_STATUS SEC_ENTRY SspiExcludePackage( PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PCWSTR, PSEC_WINNT_AUTH_IDENTITY_OPAQUE * );
SECURITY_STATUS SEC_ENTRY SspiGetTargetHostName( PCWSTR, PWSTR * );
#endif
/* Functions in CREDUI.DLL */
unsigned long SEC_ENTRY SspiPromptForCredentialsA( PCSTR, PVOID, unsigned long, PCSTR, PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PSEC_WINNT_AUTH_IDENTITY_OPAQUE *, int *, unsigned long );
unsigned long SEC_ENTRY SspiPromptForCredentialsW( PCWSTR, PVOID, unsigned long, PCWSTR, PSEC_WINNT_AUTH_IDENTITY_OPAQUE, PSEC_WINNT_AUTH_IDENTITY_OPAQUE *, int *, unsigned long );
#ifdef _SEC_WINNT_AUTH_TYPES
SECURITY_STATUS SEC_ENTRY SspiGetCredUIContext( HANDLE, GUID *, LUID *, PSEC_WINNT_CREDUI_CONTEXT_VECTOR *, HANDLE * );
SECURITY_STATUS SEC_ENTRY SspiUnmarshalCredUIContext( PUCHAR, ULONG, PSEC_WINNT_CREDUI_CONTEXT * );
SECURITY_STATUS SEC_ENTRY SspiUpdateCredentials( HANDLE, GUID *, ULONG, PUCHAR );
#endif
#if (NTDDI_VERSION >= 0x06010000)
BOOLEAN SEC_ENTRY SspiIsPromptingNeeded( unsigned long );
#endif
/* Alias */
#define FreeCredentialHandle FreeCredentialsHandle
/* Map generic function names to the appropriate ANSI or Unicode version. */
#ifdef UNICODE
#define AcquireCredentialsHandle AcquireCredentialsHandleW
#define AddCredentials AddCredentialsW
#define AddSecurityPackage AddSecurityPackageW
#define ChangeAccountPassword ChangeAccountPasswordW
#define DeleteSecurityPackage DeleteSecurityPackageW
#define EnumerateSecurityPackages EnumerateSecurityPackagesW
#define ImportSecurityContext ImportSecurityContextW
#define InitSecurityInterface InitSecurityInterfaceW
#define InitializeSecurityContext InitializeSecurityContextW
#define QueryContextAttributes QueryContextAttributesW
#define QueryCredentialsAttributes QueryCredentialsAttributesW
#define QuerySecurityPackageInfo QuerySecurityPackageInfoW
#define SaslEnumerateProfiles SaslEnumerateProfilesW
#define SaslGetProfilePackage SaslGetProfilePackageW
#define SaslIdentifyPackage SaslIdentifyPackageW
#define SaslInitializeSecurityContext SaslInitializeSecurityContextW
#define SetContextAttributes SetContextAttributesW
#define SspiPromptForCredentials SspiPromptForCredentialsW
#else
#define AcquireCredentialsHandle AcquireCredentialsHandleA
#define AddCredentials AddCredentialsA
#define AddSecurityPackage AddSecurityPackageA
#define ChangeAccountPassword ChangeAccountPasswordA
#define DeleteSecurityPackage DeleteSecurityPackageA
#define EnumerateSecurityPackages EnumerateSecurityPackagesA
#define ImportSecurityContext ImportSecurityContextA
#define InitSecurityInterface InitSecurityInterfaceA
#define InitializeSecurityContext InitializeSecurityContextA
#define QueryContextAttributes QueryContextAttributesA
#define QueryCredentialsAttributes QueryCredentialsAttributesA
#define QuerySecurityPackageInfo QuerySecurityPackageInfoA
#define SaslEnumerateProfiles SaslEnumerateProfilesA
#define SaslGetProfilePackage SaslGetProfilePackageA
#define SaslIdentifyPackage SaslIdentifyPackageA
#define SaslInitializeSecurityPackage SaslInitializeSecurityPackageA
#define SetContextAttributes SetContextAttributesA
#define SspiPromptForCredentials SspiPromptForCredentialsA
#endif
/* Functions defined as macros */
#define SecInvalidateHandle( x ) \
{ \
((PSecHandle)(x))->dwLower = ((ULONG_PTR)-1); \
((PSecHandle)(x))->dwUpper = ((ULONG_PTR)-1); \
}
#define SecIsValidHandle( x ) \
((((PSecHandle)(x))->dwLower != ((ULONG_PTR)-1)) && \
(((PSecHandle)(x)->dwUpper != ((ULONG_PTR)-1)))
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* __SSPI_H__ */