/* * 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__ */