[ros-diffs] [tkreuzer] 54825: [XDK/DDK] - Add sspi.h to xdk and and include it in ntifs.h. Dedicated to Alex

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Tue Jan 3 19:42:58 UTC 2012


Author: tkreuzer
Date: Tue Jan  3 19:42:58 2012
New Revision: 54825

URL: http://svn.reactos.org/svn/reactos?rev=54825&view=rev
Log:
[XDK/DDK]
- Add sspi.h to xdk and and include it in ntifs.h.
Dedicated to Alex

Added:
    trunk/reactos/include/xdk/sspi.h   (with props)
Modified:
    trunk/reactos/include/ddk/ntifs.h
    trunk/reactos/include/xdk/ntifs.template.h
    trunk/reactos/include/xdk/rtlfuncs.h

Modified: trunk/reactos/include/ddk/ntifs.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ddk/ntifs.h?rev=54825&r1=54824&r2=54825&view=diff
==============================================================================
--- trunk/reactos/include/ddk/ntifs.h [iso-8859-1] (original)
+++ trunk/reactos/include/ddk/ntifs.h [iso-8859-1] Tue Jan  3 19:42:58 2012
@@ -8785,20 +8785,1325 @@
   IN ULONG TokenInformationLength);
 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 
+#ifndef __SSPI_H__
+#define __SSPI_H__
+
+// for ntifs.h:
+#define ISSP_LEVEL 32
+#define ISSP_MODE 0
+
+#ifdef MIDL_PASS
+#define MIDL_PROP(x) x
+#else
+#define MIDL_PROP(x)
+#endif
+
+#define SEC_TEXT TEXT
+#define SEC_FAR
+#define SEC_ENTRY __stdcall
+
+#if defined(_NO_KSECDD_IMPORT_)
+#define KSECDDDECLSPEC
+#else
+#define KSECDDDECLSPEC __declspec(dllimport)
+#endif
+
+#define SECQOP_WRAP_NO_ENCRYPT 0x80000001
+#define SECQOP_WRAP_OOB_DATA   0x40000000
+
+#define SECURITY_ENTRYPOINTW SEC_TEXT("InitSecurityInterfaceW")
+#define SECURITY_ENTRYPOINT SECURITY_ENTRYPOINTW
+
+#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION   1
+#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2
+#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_3 3
+#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_4 4
+
+#define SECURITY_NATIVE_DREP  0x00000010
+#define SECURITY_NETWORK_DREP 0x00000000
+
+#define SECPKG_ID_NONE 0xFFFF
+
+#define SECPKG_CRED_ATTR_NAMES                1
+#define SECPKG_CRED_ATTR_SSI_PROVIDER         2
+
+#define SECPKG_ATTR_SIZES                     0
+#define SECPKG_ATTR_NAMES                     1
+#define SECPKG_ATTR_LIFESPAN                  2
+#define SECPKG_ATTR_DCE_INFO                  3
+#define SECPKG_ATTR_STREAM_SIZES              4
+#define SECPKG_ATTR_KEY_INFO                  5
+#define SECPKG_ATTR_AUTHORITY                 6
+#define SECPKG_ATTR_PROTO_INFO                7
+#define SECPKG_ATTR_PASSWORD_EXPIRY           8
+#define SECPKG_ATTR_SESSION_KEY               9
+#define SECPKG_ATTR_PACKAGE_INFO             10
+#define SECPKG_ATTR_USER_FLAGS               11
+#define SECPKG_ATTR_NEGOTIATION_INFO         12
+#define SECPKG_ATTR_NATIVE_NAMES             13
+#define SECPKG_ATTR_FLAGS                    14
+#define SECPKG_ATTR_USE_VALIDATED            15
+#define SECPKG_ATTR_CREDENTIAL_NAME          16
+#define SECPKG_ATTR_TARGET_INFORMATION       17
+#define SECPKG_ATTR_ACCESS_TOKEN             18
+#define SECPKG_ATTR_TARGET                   19
+#define SECPKG_ATTR_AUTHENTICATION_ID        20
+#define SECPKG_ATTR_LOGOFF_TIME              21
+#define SECPKG_ATTR_NEGO_KEYS                22
+#define SECPKG_ATTR_PROMPTING_NEEDED         24
+#define SECPKG_ATTR_UNIQUE_BINDINGS          25
+#define SECPKG_ATTR_ENDPOINT_BINDINGS        26
+#define SECPKG_ATTR_CLIENT_SPECIFIED_TARGET  27
+#define SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS 30
+#define SECPKG_ATTR_NEGO_PKG_INFO            31
+#define SECPKG_ATTR_NEGO_STATUS              32
+#define SECPKG_ATTR_CONTEXT_DELETED          33
+
+#define SECPKG_FLAG_INTEGRITY               0x00000001
+#define SECPKG_FLAG_PRIVACY                 0x00000002
+#define SECPKG_FLAG_TOKEN_ONLY              0x00000004
+#define SECPKG_FLAG_DATAGRAM                0x00000008
+#define SECPKG_FLAG_CONNECTION              0x00000010
+#define SECPKG_FLAG_MULTI_REQUIRED          0x00000020
+#define SECPKG_FLAG_CLIENT_ONLY             0x00000040
+#define SECPKG_FLAG_EXTENDED_ERROR          0x00000080
+#define SECPKG_FLAG_IMPERSONATION           0x00000100
+#define SECPKG_FLAG_ACCEPT_WIN32_NAME       0x00000200
+#define SECPKG_FLAG_STREAM                  0x00000400
+#define SECPKG_FLAG_NEGOTIABLE              0x00000800
+#define SECPKG_FLAG_GSS_COMPATIBLE          0x00001000
+#define SECPKG_FLAG_LOGON                   0x00002000
+#define SECPKG_FLAG_ASCII_BUFFERS           0x00004000
+#define SECPKG_FLAG_FRAGMENT                0x00008000
+#define SECPKG_FLAG_MUTUAL_AUTH             0x00010000
+#define SECPKG_FLAG_DELEGATION              0x00020000
+#define SECPKG_FLAG_READONLY_WITH_CHECKSUM  0x00040000
+#define SECPKG_FLAG_RESTRICTED_TOKENS       0x00080000
+#define SECPKG_FLAG_NEGO_EXTENDER           0x00100000
+#define SECPKG_FLAG_NEGOTIABLE2             0x00200000
+
+#define SECPKG_CRED_INBOUND                 0x00000001
+#define SECPKG_CRED_OUTBOUND                0x00000002
+#define SECPKG_CRED_BOTH                    0x00000003
+#define SECPKG_CRED_DEFAULT                 0x00000004
+#define SECPKG_CRED_RESERVED                0xF0000000
+#define SECPKG_CRED_AUTOLOGON_RESTRICTED    0x00000010
+#define SECPKG_CRED_PROCESS_POLICY_ONLY     0x00000020
+
+#define SECPKG_CONTEXT_EXPORT_RESET_NEW     0x00000001
+#define SECPKG_CONTEXT_EXPORT_DELETE_OLD    0x00000002
+#define SECPKG_CONTEXT_EXPORT_TO_KERNEL     0x00000004
+
+#define SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES 128
+#define SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS 0x1
+#define SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM     0x2
+
+#define SecPkgContext_NativeNames SecPkgContext_NativeNamesW
+#define PSecPkgContext_NativeNames PSecPkgContext_NativeNamesW
+
+#define SECBUFFER_VERSION 0
+
+#define SECBUFFER_EMPTY                 0
+#define SECBUFFER_DATA                  1
+#define SECBUFFER_TOKEN                 2
+#define SECBUFFER_PKG_PARAMS            3
+#define SECBUFFER_MISSING               4
+#define SECBUFFER_EXTRA                 5
+#define SECBUFFER_STREAM_TRAILER        6
+#define SECBUFFER_STREAM_HEADER         7
+#define SECBUFFER_NEGOTIATION_INFO      8
+#define SECBUFFER_PADDING               9
+#define SECBUFFER_STREAM               10
+#define SECBUFFER_MECHLIST             11
+#define SECBUFFER_MECHLIST_SIGNATURE   12
+#define SECBUFFER_TARGET               13
+#define SECBUFFER_CHANNEL_BINDINGS     14
+#define SECBUFFER_CHANGE_PASS_RESPONSE 15
+#define SECBUFFER_TARGET_HOST          16
+#define SECBUFFER_ALERT                17
+
+#define SECBUFFER_ATTRMASK                0xF0000000
+#define SECBUFFER_READONLY                0x80000000
+#define SECBUFFER_READONLY_WITH_CHECKSUM  0x10000000
+#define SECBUFFER_RESERVED                0x60000000
+
+#define ISC_REQ_DELEGATE                 0x00000001
+#define ISC_REQ_MUTUAL_AUTH              0x00000002
+#define ISC_REQ_REPLAY_DETECT            0x00000004
+#define ISC_REQ_SEQUENCE_DETECT          0x00000008
+#define ISC_REQ_CONFIDENTIALITY          0x00000010
+#define ISC_REQ_USE_SESSION_KEY          0x00000020
+#define ISC_REQ_PROMPT_FOR_CREDS         0x00000040
+#define ISC_REQ_USE_SUPPLIED_CREDS       0x00000080
+#define ISC_REQ_ALLOCATE_MEMORY          0x00000100
+#define ISC_REQ_USE_DCE_STYLE            0x00000200
+#define ISC_REQ_DATAGRAM                 0x00000400
+#define ISC_REQ_CONNECTION               0x00000800
+#define ISC_REQ_CALL_LEVEL               0x00001000
+#define ISC_REQ_FRAGMENT_SUPPLIED        0x00002000
+#define ISC_REQ_EXTENDED_ERROR           0x00004000
+#define ISC_REQ_STREAM                   0x00008000
+#define ISC_REQ_INTEGRITY                0x00010000
+#define ISC_REQ_IDENTIFY                 0x00020000
+#define ISC_REQ_NULL_SESSION             0x00040000
+#define ISC_REQ_MANUAL_CRED_VALIDATION   0x00080000
+#define ISC_REQ_RESERVED1                0x00100000
+#define ISC_REQ_FRAGMENT_TO_FIT          0x00200000
+#define ISC_REQ_FORWARD_CREDENTIALS      0x00400000
+#define ISC_REQ_NO_INTEGRITY             0x00800000
+#define ISC_REQ_USE_HTTP_STYLE           0x01000000
+
+#define ISC_RET_DELEGATE                 0x00000001
+#define ISC_RET_MUTUAL_AUTH              0x00000002
+#define ISC_RET_REPLAY_DETECT            0x00000004
+#define ISC_RET_SEQUENCE_DETECT          0x00000008
+#define ISC_RET_CONFIDENTIALITY          0x00000010
+#define ISC_RET_USE_SESSION_KEY          0x00000020
+#define ISC_RET_USED_COLLECTED_CREDS     0x00000040
+#define ISC_RET_USED_SUPPLIED_CREDS      0x00000080
+#define ISC_RET_ALLOCATED_MEMORY         0x00000100
+#define ISC_RET_USED_DCE_STYLE           0x00000200
+#define ISC_RET_DATAGRAM                 0x00000400
+#define ISC_RET_CONNECTION               0x00000800
+#define ISC_RET_INTERMEDIATE_RETURN      0x00001000
+#define ISC_RET_CALL_LEVEL               0x00002000
+#define ISC_RET_EXTENDED_ERROR           0x00004000
+#define ISC_RET_STREAM                   0x00008000
+#define ISC_RET_INTEGRITY                0x00010000
+#define ISC_RET_IDENTIFY                 0x00020000
+#define ISC_RET_NULL_SESSION             0x00040000
+#define ISC_RET_MANUAL_CRED_VALIDATION   0x00080000
+#define ISC_RET_RESERVED1                0x00100000
+#define ISC_RET_FRAGMENT_ONLY            0x00200000
+#define ISC_RET_FORWARD_CREDENTIALS      0x00400000
+#define ISC_RET_USED_HTTP_STYLE          0x01000000
+#define ISC_RET_NO_ADDITIONAL_TOKEN      0x02000000
+#define ISC_RET_REAUTHENTICATION         0x08000000
+
+#define ASC_REQ_DELEGATE                 0x00000001
+#define ASC_REQ_MUTUAL_AUTH              0x00000002
+#define ASC_REQ_REPLAY_DETECT            0x00000004
+#define ASC_REQ_SEQUENCE_DETECT          0x00000008
+#define ASC_REQ_CONFIDENTIALITY          0x00000010
+#define ASC_REQ_USE_SESSION_KEY          0x00000020
+#define ASC_REQ_ALLOCATE_MEMORY          0x00000100
+#define ASC_REQ_USE_DCE_STYLE            0x00000200
+#define ASC_REQ_DATAGRAM                 0x00000400
+#define ASC_REQ_CONNECTION               0x00000800
+#define ASC_REQ_CALL_LEVEL               0x00001000
+#define ASC_REQ_EXTENDED_ERROR           0x00008000
+#define ASC_REQ_STREAM                   0x00010000
+#define ASC_REQ_INTEGRITY                0x00020000
+#define ASC_REQ_LICENSING                0x00040000
+#define ASC_REQ_IDENTIFY                 0x00080000
+#define ASC_REQ_ALLOW_NULL_SESSION       0x00100000
+#define ASC_REQ_ALLOW_NON_USER_LOGONS    0x00200000
+#define ASC_REQ_ALLOW_CONTEXT_REPLAY     0x00400000
+#define ASC_REQ_FRAGMENT_TO_FIT          0x00800000
+#define ASC_REQ_FRAGMENT_SUPPLIED        0x00002000
+#define ASC_REQ_NO_TOKEN                 0x01000000
+#define ASC_REQ_PROXY_BINDINGS           0x04000000
+//#define SSP_RET_REAUTHENTICATION         0x08000000 // internal
+
+#define ASC_REQ_ALLOW_MISSING_BINDINGS   0x10000000
+#define ASC_RET_DELEGATE                 0x00000001
+#define ASC_RET_MUTUAL_AUTH              0x00000002
+#define ASC_RET_REPLAY_DETECT            0x00000004
+#define ASC_RET_SEQUENCE_DETECT          0x00000008
+#define ASC_RET_CONFIDENTIALITY          0x00000010
+#define ASC_RET_USE_SESSION_KEY          0x00000020
+#define ASC_RET_ALLOCATED_MEMORY         0x00000100
+#define ASC_RET_USED_DCE_STYLE           0x00000200
+#define ASC_RET_DATAGRAM                 0x00000400
+#define ASC_RET_CONNECTION               0x00000800
+#define ASC_RET_CALL_LEVEL               0x00002000
+#define ASC_RET_THIRD_LEG_FAILED         0x00004000
+#define ASC_RET_EXTENDED_ERROR           0x00008000
+#define ASC_RET_STREAM                   0x00010000
+#define ASC_RET_INTEGRITY                0x00020000
+#define ASC_RET_LICENSING                0x00040000
+#define ASC_RET_IDENTIFY                 0x00080000
+#define ASC_RET_NULL_SESSION             0x00100000
+#define ASC_RET_ALLOW_NON_USER_LOGONS    0x00200000
+#define ASC_RET_ALLOW_CONTEXT_REPLAY     0x00400000
+#define ASC_RET_FRAGMENT_ONLY            0x00800000
+#define ASC_RET_NO_TOKEN                 0x01000000
+#define ASC_RET_NO_ADDITIONAL_TOKEN      0x02000000
+#define ASC_RET_NO_PROXY_BINDINGS        0x04000000
+//#define SSP_RET_REAUTHENTICATION         0x08000000 // internal
+#define ASC_RET_MISSING_BINDINGS         0x10000000
+
+#define SEC_DELETED_HANDLE ((ULONG_PTR)(-2))
+
+#define SecInvalidateHandle(x) \
+    ((PSecHandle)(x))->dwLower = ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1));
+
+#define SecIsValidHandle(x) \
+    ( ( ((PSecHandle)(x))->dwLower != (ULONG_PTR)(INT_PTR)-1 ) && \
+      ( ((PSecHandle)(x))->dwUpper != (ULONG_PTR)(INT_PTR)-1 ) )
+
+typedef WCHAR SEC_WCHAR;
+typedef CHAR SEC_CHAR;
+typedef LARGE_INTEGER _SECURITY_INTEGER, SECURITY_INTEGER, *PSECURITY_INTEGER;
+typedef SECURITY_INTEGER TimeStamp, *PTimeStamp;
+typedef UNICODE_STRING SECURITY_STRING, *PSECURITY_STRING;
+#if ISSP_MODE == 0
+#define PSSPI_SEC_STRING PSECURITY_STRING
+#else
+#define PSSPI_SEC_STRING SEC_WCHAR*
+#endif
+
+typedef PVOID PSEC_WINNT_AUTH_IDENTITY_OPAQUE;
+
+#ifndef __SECSTATUS_DEFINED__
+typedef LONG SECURITY_STATUS;
+#define __SECSTATUS_DEFINED__
+#endif
+
+typedef enum _SECPKG_CRED_CLASS
+{
+    SecPkgCredClass_None = 0,
+    SecPkgCredClass_Ephemeral = 10,
+    SecPkgCredClass_PersistedGeneric = 20,
+    SecPkgCredClass_PersistedSpecific = 30,
+    SecPkgCredClass_Explicit = 40,
+} SECPKG_CRED_CLASS, *PSECPKG_CRED_CLASS;
+
+typedef struct _SEC_NEGOTIATION_INFO
+{
+    ULONG Size;
+    ULONG NameLength;
+    SEC_WCHAR * Name;
+    PVOID Reserved;
+} SEC_NEGOTIATION_INFO, *PSEC_NEGOTIATION_INFO;
+
+typedef struct _SEC_CHANNEL_BINDINGS
+{
+    ULONG dwInitiatorAddrType;
+    ULONG cbInitiatorLength;
+    ULONG dwInitiatorOffset;
+    ULONG dwAcceptorAddrType;
+    ULONG cbAcceptorLength;
+    ULONG dwAcceptorOffset;
+    ULONG cbApplicationDataLength;
+    ULONG dwApplicationDataOffset;
+} SEC_CHANNEL_BINDINGS, *PSEC_CHANNEL_BINDINGS;
+
+#ifndef _AUTH_IDENTITY_EX2_DEFINED
+#define _AUTH_IDENTITY_EX2_DEFINED
+typedef struct _SEC_WINNT_AUTH_IDENTITY_EX2 {
+    ULONG Version;
+    USHORT cbHeaderLength;
+    ULONG cbStructureLength;
+    ULONG UserOffset;
+    USHORT UserLength;
+    ULONG DomainOffset;
+    USHORT DomainLength;
+    ULONG PackedCredentialsOffset;
+    USHORT PackedCredentialsLength;
+    ULONG Flags;
+    ULONG PackageListOffset;
+    USHORT PackageListLength;
+} SEC_WINNT_AUTH_IDENTITY_EX2, *PSEC_WINNT_AUTH_IDENTITY_EX2;
+#define SEC_WINNT_AUTH_IDENTITY_VERSION_2 0x201
+#endif
+
+#ifndef _AUTH_IDENTITY_DEFINED
+#define _AUTH_IDENTITY_DEFINED
+typedef struct _SEC_WINNT_AUTH_IDENTITY_W {
+    PUSHORT User;
+    ULONG UserLength;
+    PUSHORT Domain;
+    ULONG DomainLength;
+    PUSHORT Password;
+    ULONG PasswordLength;
+    ULONG Flags;
+} SEC_WINNT_AUTH_IDENTITY_W, *PSEC_WINNT_AUTH_IDENTITY_W;
+#define SEC_WINNT_AUTH_IDENTITY_ANSI    0x1
+#define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2
+#define SEC_WINNT_AUTH_IDENTITY SEC_WINNT_AUTH_IDENTITY_W
+#define PSEC_WINNT_AUTH_IDENTITY PSEC_WINNT_AUTH_IDENTITY_W
+#define _SEC_WINNT_AUTH_IDENTITY _SEC_WINNT_AUTH_IDENTITY_W
+#endif
+
+#ifndef SEC_WINNT_AUTH_IDENTITY_VERSION
+#define SEC_WINNT_AUTH_IDENTITY_VERSION 0x200
+typedef struct _SEC_WINNT_AUTH_IDENTITY_EXW {
+    ULONG Version;
+    ULONG Length;
+    PUSHORT User;           //  Non-NULL terminated string.
+    ULONG UserLength;       //  # of characters (NOT bytes), not including NULL.
+    PUSHORT Domain;         //  Non-NULL terminated string.
+    ULONG DomainLength;     //  # of characters (NOT bytes), not including NULL.
+    PUSHORT Password;       //  Non-NULL terminated string.
+    ULONG PasswordLength;   //  # of characters (NOT bytes), not including NULL.
+    ULONG Flags;
+    PUSHORT PackageList;
+    ULONG PackageListLength;
+} SEC_WINNT_AUTH_IDENTITY_EXW, *PSEC_WINNT_AUTH_IDENTITY_EXW;
+#define SEC_WINNT_AUTH_IDENTITY_EX  SEC_WINNT_AUTH_IDENTITY_EXW
+#define PSEC_WINNT_AUTH_IDENTITY_EX PSEC_WINNT_AUTH_IDENTITY_EXW
+#endif
+
+#ifndef __SECHANDLE_DEFINED__
+typedef struct _SecHandle
+{
+    ULONG_PTR dwLower;
+    ULONG_PTR dwUpper;
+} SecHandle, *PSecHandle;
+#define __SECHANDLE_DEFINED__
+#endif
+
+typedef SecHandle CredHandle, *PCredHandle, CtxtHandle, *PCtxtHandle;
+
+typedef struct _SecBuffer
+{
+    ULONG cbBuffer;
+    ULONG BufferType;
+#ifdef MIDL_PASS
+    MIDL_PROP([size_is(cbBuffer)]) PCHAR pvBuffer;
+#else
+    __field_bcount(cbBuffer) void SEC_FAR *pvBuffer;
+#endif
+} SecBuffer, * PSecBuffer;
+
+typedef struct _SecBufferDesc
+{
+    ULONG ulVersion;
+    ULONG cBuffers;
+    MIDL_PROP([size_is(cBuffers)]) __field_ecount(cBuffers) PSecBuffer pBuffers;
+} SecBufferDesc, SEC_FAR * PSecBufferDesc;
+
+typedef struct _SecPkgInfoW
+{
+    ULONG fCapabilities;
+    USHORT wVersion;
+    USHORT wRPCID;
+    ULONG cbMaxToken;
+    MIDL_PROP([string]) SEC_WCHAR *Name;
+    MIDL_PROP([string]) SEC_WCHAR *Comment;
+} SecPkgInfoW, *PSecPkgInfoW;
+#define SecPkgInfo SecPkgInfoW
+#define PSecPkgInfo PSecPkgInfoW
+
+typedef struct _SecPkgCredentials_NamesW
+{
+    MIDL_PROP([string]) SEC_WCHAR * sUserName;
+} SecPkgCredentials_NamesW, * PSecPkgCredentials_NamesW;
+#define SecPkgCredentials_Names SecPkgCredentials_NamesW
+#define PSecPkgCredentials_Names PSecPkgCredentials_NamesW
+
+typedef struct _SecPkgContext_NamesW
+{
+    SEC_WCHAR *sUserName;
+} SecPkgContext_NamesW, *PSecPkgContext_NamesW;
+#define SecPkgContext_Names SecPkgContext_NamesW
+#define PSecPkgContext_Names PSecPkgContext_NamesW
+
+#if OSVER(NTDDI_VERSION) > NTDDI_WIN2K
+typedef struct _SecPkgContext_CredentialNameW
+{
+    ULONG CredentialType;
+    SEC_WCHAR *sCredentialName;
+} SecPkgContext_CredentialNameW, *PSecPkgContext_CredentialNameW;
+#endif
+#define SecPkgContext_CredentialName SecPkgContext_CredentialNameW
+#define PSecPkgContext_CredentialName PSecPkgContext_CredentialNameW
+
+typedef struct _SecPkgContext_SubjectAttributes {
+    PVOID AttributeInfo;
+} SecPkgContext_SubjectAttributes, *PSecPkgContext_SubjectAttributes;
+
+typedef struct _SecPkgContext_CredInfo {
+    SECPKG_CRED_CLASS CredClass;
+    ULONG IsPromptingNeeded;
+} SecPkgContext_CredInfo, *PSecPkgContext_CredInfo;
+
+typedef struct _SecPkgContext_NegoPackageInfo
+{
+    ULONG PackageMask;
+} SecPkgContext_NegoPackageInfo, * PSecPkgContext_NegoPackageInfo;
+
+typedef struct _SecPkgContext_NegoStatus
+{
+    ULONG LastStatus;
+} SecPkgContext_NegoStatus, *PSecPkgContext_NegoStatus;
+
+typedef struct _SecPkgContext_Sizes
+{
+    ULONG cbMaxToken;
+    ULONG cbMaxSignature;
+    ULONG cbBlockSize;
+    ULONG cbSecurityTrailer;
+} SecPkgContext_Sizes, *PSecPkgContext_Sizes;
+
+typedef struct _SecPkgContext_StreamSizes
+{
+    ULONG cbHeader;
+    ULONG cbTrailer;
+    ULONG cbMaximumMessage;
+    ULONG cBuffers;
+    ULONG cbBlockSize;
+} SecPkgContext_StreamSizes, *PSecPkgContext_StreamSizes;
+
+typedef struct _SecPkgContext_Lifespan
+{
+    TimeStamp tsStart;
+    TimeStamp tsExpiry;
+} SecPkgContext_Lifespan, *PSecPkgContext_Lifespan;
+
+typedef struct _SecPkgContext_PasswordExpiry
+{
+    TimeStamp tsPasswordExpires;
+} SecPkgContext_PasswordExpiry, * PSecPkgContext_PasswordExpiry;
+
+typedef struct _SecPkgContext_ProtoInfoW
+{
+    SEC_WCHAR *sProtocolName;
+    ULONG majorVersion;
+    ULONG minorVersion;
+} SecPkgContext_ProtoInfoW, *PSecPkgContext_ProtoInfoW;
+#define SecPkgContext_ProtoInfo SecPkgContext_ProtoInfoW
+#define PSecPkgContext_ProtoInfo PSecPkgContext_ProtoInfoW
+
+typedef struct _SecPkgContext_KeyInfoW
+{
+    SEC_WCHAR *sSignatureAlgorithmName;
+    SEC_WCHAR *sEncryptAlgorithmName;
+    ULONG KeySize;
+    ULONG SignatureAlgorithm;
+    ULONG EncryptAlgorithm;
+} SecPkgContext_KeyInfoW, *PSecPkgContext_KeyInfoW;
+#define SecPkgContext_KeyInfo SecPkgContext_KeyInfoW
+#define PSecPkgContext_KeyInfo PSecPkgContext_KeyInfoW
+
+typedef struct _SecPkgContext_SessionKey
+{
+    ULONG SessionKeyLength;
+    __field_bcount(SessionKeyLength) PUCHAR SessionKey;
+} SecPkgContext_SessionKey, *PSecPkgContext_SessionKey;
+
+typedef struct _SecPkgContext_NegoKeys
+{
+    ULONG KeyType;
+    USHORT KeyLength;
+    __field_bcount(KeyLength) PUCHAR KeyValue;
+    ULONG  VerifyKeyType;
+    USHORT VerifyKeyLength;
+    __field_bcount(VerifyKeyLength) PUCHAR VerifyKeyValue;
+} SecPkgContext_NegoKeys, *PSecPkgContext_NegoKeys;
+
+typedef struct _SecPkgContext_DceInfo
+{
+    ULONG AuthzSvc;
+    PVOID pPac;
+} SecPkgContext_DceInfo, *PSecPkgContext_DceInfo;
+
+typedef struct _SecPkgContext_PackageInfoW
+{
+    PSecPkgInfoW PackageInfo;
+} SecPkgContext_PackageInfoW, *PSecPkgContext_PackageInfoW;
+#define SecPkgContext_PackageInfo SecPkgContext_PackageInfoW
+#define PSecPkgContext_PackageInfo PSecPkgContext_PackageInfoW
+
+typedef struct _SecPkgContext_UserFlags
+{
+    ULONG UserFlags;
+} SecPkgContext_UserFlags, *PSecPkgContext_UserFlags;
+
+typedef struct _SecPkgContext_Flags
+{
+    ULONG Flags;
+} SecPkgContext_Flags, *PSecPkgContext_Flags;
+
+typedef struct _SecPkgContext_NegotiationInfoW
+{
+    PSecPkgInfoW PackageInfo ;
+    ULONG NegotiationState ;
+} SecPkgContext_NegotiationInfoW, *PSecPkgContext_NegotiationInfoW ;
+
+typedef struct _SecPkgContext_AuthorityW
+{
+    SEC_WCHAR *sAuthorityName;
+} SecPkgContext_AuthorityW, *PSecPkgContext_AuthorityW;
+#define SecPkgContext_Authority SecPkgContext_AuthorityW
+#define PSecPkgContext_Authority PSecPkgContext_AuthorityW
+
+
+#if NTDDI_VERSION > NTDDI_WS03
+typedef struct _SecPkgCredentials_SSIProviderW
+{
+    SEC_WCHAR *sProviderName;
+    ULONG ProviderInfoLength;
+    PCHAR ProviderInfo;
+} SecPkgCredentials_SSIProviderW, * PSecPkgCredentials_SSIProviderW;
+#define SecPkgCredentials_SSIProvider SecPkgCredentials_SSIProviderW
+#define PSecPkgCredentials_SSIProvider PSecPkgCredentials_SSIProviderW
+
+typedef struct _SecPkgContext_LogoffTime
+{
+    TimeStamp tsLogoffTime;
+} SecPkgContext_LogoffTime, *PSecPkgContext_LogoffTime;
+#endif
+
+/* forward declaration */
+typedef struct _SECURITY_FUNCTION_TABLE_W SecurityFunctionTableW, * PSecurityFunctionTableW;
+#define SecurityFunctionTable SecurityFunctionTableW
+#define PSecurityFunctionTable PSecurityFunctionTableW
+
+typedef
+VOID
+(SEC_ENTRY * SEC_GET_KEY_FN)(
+    PVOID Arg,
+    PVOID Principal,
+    ULONG KeyVer,
+    PVOID *Key,
+    SECURITY_STATUS *Status);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+AcceptSecurityContext(
+    __in_opt PCredHandle phCredential,
+    __in_opt PCtxtHandle phContext,
+    __in_opt PSecBufferDesc pInput,
+    __in ULONG fContextReq,
+    __in ULONG TargetDataRep,
+    __in_opt PCtxtHandle phNewContext,
+    __in_opt PSecBufferDesc pOutput,
+    __out PULONG pfContextAttr,
+    __out_opt PTimeStamp ptsExpiry);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * ACCEPT_SECURITY_CONTEXT_FN)(
+    PCredHandle,
+    PCtxtHandle,
+    PSecBufferDesc,
+    ULONG,
+    ULONG,
+    PCtxtHandle,
+    PSecBufferDesc,
+    PULONG,
+    PTimeStamp);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+AcquireCredentialsHandleW(
+    __in_opt  PSSPI_SEC_STRING pPrincipal,
+    __in      PSSPI_SEC_STRING pPackage,
+    __in      ULONG fCredentialUse,
+    __in_opt  PVOID pvLogonId,
+    __in_opt  PVOID pAuthData,
+    __in_opt  SEC_GET_KEY_FN pGetKeyFn,
+    __in_opt  PVOID pvGetKeyArgument,
+    __out     PCredHandle phCredential,
+    __out_opt PTimeStamp ptsExpiry);
+#define AcquireCredentialsHandle AcquireCredentialsHandleW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * ACQUIRE_CREDENTIALS_HANDLE_FN_W)(
+    PSSPI_SEC_STRING,
+    PSSPI_SEC_STRING,
+    ULONG,
+    PVOID,
+    PVOID,
+    SEC_GET_KEY_FN,
+    PVOID,
+    PCredHandle,
+    PTimeStamp);
+#define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_W
+
+SECURITY_STATUS
+SEC_ENTRY
+AddCredentialsA(
+    __in PCredHandle hCredentials,
+    __in_opt LPSTR pszPrincipal,
+    __in LPSTR pszPackage,
+    __in ULONG fCredentialUse,
+    __in_opt PVOID pAuthData,
+    __in_opt SEC_GET_KEY_FN pGetKeyFn,
+    __in_opt PVOID pvGetKeyArgument,
+    __out_opt PTimeStamp ptsExpiry);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * ADD_CREDENTIALS_FN_A)(
+    PCredHandle,
+    SEC_CHAR *,
+    SEC_CHAR *,
+    ULONG,
+    PVOID,
+    SEC_GET_KEY_FN,
+    PVOID,
+    PTimeStamp);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+AddCredentialsW(
+    __in PCredHandle hCredentials,
+    __in_opt PSSPI_SEC_STRING pPrincipal,
+    __in PSSPI_SEC_STRING pPackage,
+    __in ULONG fCredentialUse,
+    __in_opt PVOID pAuthData,
+    __in_opt SEC_GET_KEY_FN pGetKeyFn,
+    __in_opt PVOID pvGetKeyArgument,
+    __out_opt PTimeStamp ptsExpiry);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * ADD_CREDENTIALS_FN_W)(
+    PCredHandle,
+    PSSPI_SEC_STRING,
+    PSSPI_SEC_STRING,
+    ULONG,
+    PVOID,
+    SEC_GET_KEY_FN,
+    PVOID,
+    PTimeStamp);
+
+#ifdef UNICODE
+#define AddCredentials  AddCredentialsW
+#define ADD_CREDENTIALS_FN  ADD_CREDENTIALS_FN_W
+#else
+#define AddCredentials  AddCredentialsA
+#define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_A
+#endif
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+ApplyControlToken(
+    __in PCtxtHandle phContext,
+    __in PSecBufferDesc pInput);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * APPLY_CONTROL_TOKEN_FN)(
+    PCtxtHandle, PSecBufferDesc);
+
+#if (ISSP_MODE != 0)
+
+SECURITY_STATUS
+SEC_ENTRY
+ChangeAccountPasswordA(
+    __in SEC_CHAR* pszPackageName,
+    __in SEC_CHAR* pszDomainName,
+    __in SEC_CHAR* pszAccountName,
+    __in SEC_CHAR* pszOldPassword,
+    __in SEC_CHAR* pszNewPassword,
+    __in BOOLEAN bImpersonating,
+    __in ULONG dwReserved,
+    __inout PSecBufferDesc pOutput);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * CHANGE_PASSWORD_FN_A)(
+    SEC_CHAR *,
+    SEC_CHAR *,
+    SEC_CHAR *,
+    SEC_CHAR *,
+    SEC_CHAR *,
+    BOOLEAN,
+    ULONG,
+    PSecBufferDesc);
+
+SECURITY_STATUS
+SEC_ENTRY
+ChangeAccountPasswordW(
+    __in SEC_WCHAR* pszPackageName,
+    __in SEC_WCHAR* pszDomainName,
+    __in SEC_WCHAR* pszAccountName,
+    __in SEC_WCHAR* pszOldPassword,
+    __in SEC_WCHAR* pszNewPassword,
+    __in BOOLEAN bImpersonating,
+    __in ULONG dwReserved,
+    __inout PSecBufferDesc pOutput);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * CHANGE_PASSWORD_FN_W)(
+    SEC_WCHAR *,
+    SEC_WCHAR *,
+    SEC_WCHAR *,
+    SEC_WCHAR *,
+    SEC_WCHAR *,
+    BOOLEAN,
+    ULONG,
+    PSecBufferDesc);
+
+#ifdef UNICODE
+#define ChangeAccountPassword ChangeAccountPasswordW
+#define CHANGE_PASSWORD_FN CHANGE_PASSWORD_FN_W
+#else
+#define ChangeAccountPassword ChangeAccountPasswordA
+#define CHANGE_PASSWORD_FN CHANGE_PASSWORD_FN_A
+#endif
+
+#endif /* ISSP_MODE != 0 */
+
+SECURITY_STATUS
+SEC_ENTRY
+CompleteAuthToken(
+    __in PCtxtHandle phContext,
+    __in PSecBufferDesc pToken);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * COMPLETE_AUTH_TOKEN_FN)(
+    PCtxtHandle,
+    PSecBufferDesc);
+
+SECURITY_STATUS
+SEC_ENTRY
+DecryptMessage(
+    __in PCtxtHandle phContext,
+    __inout PSecBufferDesc pMessage,
+    __in ULONG MessageSeqNo,
+    __out_opt PULONG pfQOP);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * DECRYPT_MESSAGE_FN)(
+    PCtxtHandle,
+    PSecBufferDesc,
+    ULONG,
+    PULONG);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+DeleteSecurityContext(
+    __in PCtxtHandle phContext);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * DELETE_SECURITY_CONTEXT_FN)(
+    PCtxtHandle);
+
+SECURITY_STATUS
+SEC_ENTRY
+EncryptMessage(
+    __in PCtxtHandle phContext,
+    __in ULONG  fQOP,
+    __inout PSecBufferDesc pMessage,
+    __in ULONG MessageSeqNo);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * ENCRYPT_MESSAGE_FN)(
+    PCtxtHandle,
+    ULONG,
+    PSecBufferDesc,
+    ULONG);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+EnumerateSecurityPackagesW(
+    __out       PULONG pcPackages,
+    __deref_out PSecPkgInfoW  * ppPackageInfo);
+#define EnumerateSecurityPackages EnumerateSecurityPackagesW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * ENUMERATE_SECURITY_PACKAGES_FN_W)(
+    PULONG,
+    PSecPkgInfoW*);
+#define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_W
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+ExportSecurityContext(
+    __in PCtxtHandle phContext,
+    __in ULONG fFlags,
+    __out PSecBuffer pPackedContext,
+    __out PVOID* pToken);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * EXPORT_SECURITY_CONTEXT_FN)(
+    PCtxtHandle,
+    ULONG,
+    PSecBuffer,
+    PVOID*);
+
+SECURITY_STATUS
+SEC_ENTRY
+FreeContextBuffer(
+    __inout PVOID pvContextBuffer);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * FREE_CONTEXT_BUFFER_FN)(
+    __inout PVOID);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+FreeCredentialsHandle(
+    __in PCredHandle phCredential);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * FREE_CREDENTIALS_HANDLE_FN)(
+    PCredHandle);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+ImpersonateSecurityContext(
+    __in PCtxtHandle phContext);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * IMPERSONATE_SECURITY_CONTEXT_FN)(
+    PCtxtHandle);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+ImportSecurityContextW(
+    __in PSSPI_SEC_STRING pszPackage,
+    __in PSecBuffer pPackedContext,
+    __in PVOID Token,
+    __out PCtxtHandle phContext);
+#define ImportSecurityContext ImportSecurityContextW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * IMPORT_SECURITY_CONTEXT_FN_W)(
+    PSSPI_SEC_STRING,
+    PSecBuffer,
+    PVOID,
+    PCtxtHandle);
+#define IMPORT_SECURITY_CONTEXT_FN IMPORT_SECURITY_CONTEXT_FN_W
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+InitializeSecurityContextW(
+    __in_opt PCredHandle phCredential,
+    __in_opt PCtxtHandle phContext,
+    __in_opt PSSPI_SEC_STRING pTargetName,
+    __in ULONG fContextReq,
+    __in ULONG Reserved1,
+    __in ULONG TargetDataRep,
+    __in_opt PSecBufferDesc pInput,
+    __in ULONG Reserved2,
+    __inout_opt PCtxtHandle phNewContext,
+    __inout_opt PSecBufferDesc pOutput,
+    __out PULONG pfContextAttr,
+    __out_opt PTimeStamp ptsExpiry);
+#define InitializeSecurityContext InitializeSecurityContextW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * INITIALIZE_SECURITY_CONTEXT_FN_W)(
+    PCredHandle,
+    PCtxtHandle,
+    PSSPI_SEC_STRING,
+    ULONG,
+    ULONG,
+    ULONG,
+    PSecBufferDesc,
+    ULONG,
+    PCtxtHandle,
+    PSecBufferDesc,
+    PULONG,
+    PTimeStamp);
+#define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_W
+
+KSECDDDECLSPEC
+PSecurityFunctionTableW
+SEC_ENTRY
+InitSecurityInterfaceW(VOID);
+#define InitSecurityInterface InitSecurityInterfaceW
+
+typedef
+PSecurityFunctionTableW
+(SEC_ENTRY * INIT_SECURITY_INTERFACE_W)(VOID);
+#define INIT_SECURITY_INTERFACE INIT_SECURITY_INTERFACE_W
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+MakeSignature(
+    __in PCtxtHandle phContext,
+    __in ULONG fQOP,
+    __in PSecBufferDesc pMessage,
+    __in ULONG MessageSeqNo);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * MAKE_SIGNATURE_FN)(
+    PCtxtHandle,
+    ULONG,
+    PSecBufferDesc,
+    ULONG);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+QueryContextAttributesW(
+    __in PCtxtHandle phContext,
+    __in ULONG ulAttribute,
+    __out PVOID pBuffer);
+#define QueryContextAttributes QueryContextAttributesW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * QUERY_CONTEXT_ATTRIBUTES_FN_W)(
+    PCtxtHandle,
+    ULONG,
+    PVOID);
+#define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_W
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+QueryCredentialsAttributesW(
+    __in    PCredHandle phCredential,
+    __in    ULONG ulAttribute,
+    __inout PVOID pBuffer);
+#define QueryCredentialsAttributes QueryCredentialsAttributesW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * QUERY_CREDENTIALS_ATTRIBUTES_FN_W)(
+    PCredHandle,
+    ULONG,
+    PVOID);
+#define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_W
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+QuerySecurityContextToken(
+    __in PCtxtHandle phContext,
+    __out PVOID * Token);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * QUERY_SECURITY_CONTEXT_TOKEN_FN)(
+    PCtxtHandle, PVOID *);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+QuerySecurityPackageInfoW(
+    __in PSSPI_SEC_STRING pPackageName,
+    __deref_out PSecPkgInfoW *ppPackageInfo);
+#define QuerySecurityPackageInfo QuerySecurityPackageInfoW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * QUERY_SECURITY_PACKAGE_INFO_FN_W)(
+    PSSPI_SEC_STRING,
+    PSecPkgInfoW *);
+#define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_W
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+RevertSecurityContext(
+    __in PCtxtHandle phContext);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * REVERT_SECURITY_CONTEXT_FN)(
+    PCtxtHandle);
+
+#if (OSVER(NTDDI_VERSION) > NTDDI_WIN2K)
+SECURITY_STATUS
+SEC_ENTRY
+SetContextAttributesW(
+    __in PCtxtHandle phContext,
+    __in ULONG ulAttribute,
+    __in_bcount(cbBuffer) PVOID pBuffer,
+    __in ULONG cbBuffer);
+#define SetContextAttributes SetContextAttributesW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * SET_CONTEXT_ATTRIBUTES_FN_W)(
+    PCtxtHandle,
+    ULONG,
+    PVOID,
+    ULONG);
+#define SET_CONTEXT_ATTRIBUTES_FN SET_CONTEXT_ATTRIBUTES_FN_W
+#endif
+
+#if (NTDDI_VERSION > NTDDI_WS03)
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+SetCredentialsAttributesW(
+    __in PCredHandle phCredential,
+    __in ULONG ulAttribute,
+    __in_bcount(cbBuffer) PVOID pBuffer,
+    __in ULONG cbBuffer);
+#define SetCredentialsAttributes SetCredentialsAttributesW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * SET_CREDENTIALS_ATTRIBUTES_FN_W)(
+    PCredHandle,
+    ULONG,
+    PVOID,
+    ULONG);
+#define SET_CREDENTIALS_ATTRIBUTES_FN SET_CREDENTIALS_ATTRIBUTES_FN_W
+#endif /* NTDDI_VERSION > NTDDI_WS03 */
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+VerifySignature(
+    __in  PCtxtHandle phContext,
+    __in  PSecBufferDesc pMessage,
+    __in  ULONG MessageSeqNo,
+    __out PULONG pfQOP);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * VERIFY_SIGNATURE_FN)(
+    PCtxtHandle,
+    PSecBufferDesc,
+    ULONG,
+    PULONG);
+
+
+#if (ISSP_MODE == 0)
+
+KSECDDDECLSPEC
+NTSTATUS
+NTAPI
+SecMakeSPN(
+    __in PUNICODE_STRING ServiceClass,
+    __in PUNICODE_STRING ServiceName,
+    __in_opt PUNICODE_STRING InstanceName,
+    __in_opt USHORT InstancePort,
+    __in_opt PUNICODE_STRING Referrer,
+    __inout PUNICODE_STRING Spn,
+    __out_opt PULONG Length,
+    __in BOOLEAN Allocate);
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+KSECDDDECLSPEC
+NTSTATUS
+NTAPI
+SecMakeSPNEx(
+    __in PUNICODE_STRING ServiceClass,
+    __in PUNICODE_STRING ServiceName,
+    __in_opt PUNICODE_STRING InstanceName,
+    __in_opt USHORT InstancePort,
+    __in_opt PUNICODE_STRING Referrer,
+    __in_opt PUNICODE_STRING TargetInfo,
+    __inout PUNICODE_STRING Spn,
+    __out PULONG Length OPTIONAL,
+    __in BOOLEAN Allocate);
+
+KSECDDDECLSPEC
+NTSTATUS
+SEC_ENTRY
+SecLookupAccountSid(
+    __in      PSID Sid,
+    __out     PULONG NameSize,
+    __inout   PUNICODE_STRING NameBuffer,
+    __out     PULONG DomainSize OPTIONAL,
+    __out_opt PUNICODE_STRING DomainBuffer,
+    __out     PSID_NAME_USE NameUse
+    );
+
+KSECDDDECLSPEC
+NTSTATUS
+SEC_ENTRY
+SecLookupAccountName(
+    __in PUNICODE_STRING Name,
+    __inout PULONG SidSize,
+    __out PSID Sid,
+    __out PSID_NAME_USE NameUse,
+    __out_opt PULONG DomainSize, // WDK says __out only + ... OPTIONAL
+    __inout_opt PUNICODE_STRING ReferencedDomain);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
+KSECDDDECLSPEC
+NTSTATUS
+SEC_ENTRY
+SecLookupWellKnownSid(
+    __in WELL_KNOWN_SID_TYPE SidType,
+    __out PSID Sid,
+    __in ULONG SidBufferSize,
+    __inout_opt PULONG SidSize);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+KSECDDDECLSPEC
+NTSTATUS
+NTAPI
+SecMakeSPNEx2(
+    __in PUNICODE_STRING ServiceClass,
+    __in PUNICODE_STRING ServiceName,
+    __in_opt PUNICODE_STRING InstanceName,
+    __in_opt USHORT InstancePort,
+    __in_opt PUNICODE_STRING Referrer,
+    __in_opt PUNICODE_STRING InTargetInfo,
+    __inout PUNICODE_STRING Spn,
+    __out_opt PULONG TotalSize,
+    __in BOOLEAN Allocate,
+    __in BOOLEAN IsTargetInfoMarshaled);
+#endif
+
+#endif /* ISSP_MODE == 0 */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiEncodeAuthIdentityAsStrings(
+    __in PSEC_WINNT_AUTH_IDENTITY_OPAQUE pAuthIdentity,
+    __deref_out_opt PCWSTR* ppszUserName,
+    __deref_out_opt PCWSTR* ppszDomainName,
+    __deref_opt_out_opt PCWSTR* ppszPackedCredentialsString);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiValidateAuthIdentity(
+    __in PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiCopyAuthIdentity(
+    __in PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData,
+    __deref_out PSEC_WINNT_AUTH_IDENTITY_OPAQUE* AuthDataCopy);
+
+VOID
+SEC_ENTRY
+SspiFreeAuthIdentity(
+    __in_opt PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
+
+VOID
+SEC_ENTRY
+SspiZeroAuthIdentity(
+    __in_opt PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
+
+VOID
+SEC_ENTRY
+SspiLocalFree(
+    __in_opt PVOID DataBuffer);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiEncodeStringsAsAuthIdentity(
+    __in_opt PCWSTR pszUserName,
+    __in_opt PCWSTR pszDomainName,
+    __in_opt PCWSTR pszPackedCredentialsString,
+    __deref_out PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiCompareAuthIdentities(
+    __in_opt PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity1,
+    __in_opt PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity2,
+    __out_opt PBOOLEAN SameSuppliedUser,
+    __out_opt PBOOLEAN SameSuppliedIdentity);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiMarshalAuthIdentity(
+    __in PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
+    __out PULONG AuthIdentityLength,
+    __deref_out_bcount(*AuthIdentityLength) PCHAR* AuthIdentityByteArray);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiUnmarshalAuthIdentity(
+    __in PULONG AuthIdentityLength,
+    __in_bcount(AuthIdentityLength) PCHAR AuthIdentityByteArray,
+    __deref_out PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity);
+
+BOOLEAN
+SEC_ENTRY
+SspiIsPromptingNeeded(
+    __in PULONG ErrorOrNtStatus);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiGetTargetHostName(
+    __in PCWSTR pszTargetName,
+    __deref_out PWSTR* pszHostName);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiExcludePackage(
+    __in_opt PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
+    __in PCWSTR pszPackageName,
+    __deref_out PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppNewAuthIdentity);
+
+#define SEC_WINNT_AUTH_IDENTITY_MARSHALLED 0x04
+#define SEC_WINNT_AUTH_IDENTITY_ONLY 0x08
+
+#endif /* NTDDI_VERSION >= NTDDI_WIN7 */
+
+#define FreeCredentialHandle FreeCredentialsHandle
+struct _SECURITY_FUNCTION_TABLE_W
+{
+    ULONG dwVersion;
+    ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW;
+    QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW;
+    ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW;
+    FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
+    PVOID 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;
+    PVOID Reserved3;
+    PVOID Reserved4;
+    EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
+    IMPORT_SECURITY_CONTEXT_FN_W ImportSecurityContextW;
+    ADD_CREDENTIALS_FN_W AddCredentialsW ;
+    PVOID Reserved8;
+    QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
+    ENCRYPT_MESSAGE_FN EncryptMessage;
+    DECRYPT_MESSAGE_FN DecryptMessage;
+#if OSVER(NTDDI_VERSION) > NTDDI_WIN2K
+    SET_CONTEXT_ATTRIBUTES_FN_W SetContextAttributesW;
+#endif
+#if NTDDI_VERSION > NTDDI_WS03SP1
+    SET_CREDENTIALS_ATTRIBUTES_FN_W SetCredentialsAttributesW;
+#endif
+#if ISSP_MODE != 0
+    CHANGE_PASSWORD_FN_W ChangeAccountPasswordW;
+#else
+    PVOID Reserved9;
+#endif
+};
+
+#endif /* !__SSPI_H__ */
 
 /* #if !defined(_X86AMD64_)  FIXME : WHAT ?! */
 #if defined(_WIN64)
-
 C_ASSERT(sizeof(ERESOURCE) == 0x68);
 C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x18);
 C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x1a);
-
 #else
-
 C_ASSERT(sizeof(ERESOURCE) == 0x38);
 C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x0c);
 C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x0e);
-
 #endif
 /* #endif */
 

Modified: trunk/reactos/include/xdk/ntifs.template.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/xdk/ntifs.template.h?rev=54825&r1=54824&r2=54825&view=diff
==============================================================================
--- trunk/reactos/include/xdk/ntifs.template.h [iso-8859-1] (original)
+++ trunk/reactos/include/xdk/ntifs.template.h [iso-8859-1] Tue Jan  3 19:42:58 2012
@@ -1079,20 +1079,17 @@
 $include (cctypes.h)
 $include (ccfuncs.h)
 $include (zwfuncs.h)
+$include (sspi.h)
 
 /* #if !defined(_X86AMD64_)  FIXME : WHAT ?! */
 #if defined(_WIN64)
-
 C_ASSERT(sizeof(ERESOURCE) == 0x68);
 C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x18);
 C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x1a);
-
 #else
-
 C_ASSERT(sizeof(ERESOURCE) == 0x38);
 C_ASSERT(FIELD_OFFSET(ERESOURCE,ActiveCount) == 0x0c);
 C_ASSERT(FIELD_OFFSET(ERESOURCE,Flag) == 0x0e);
-
 #endif
 /* #endif */
 
@@ -1271,9 +1268,6 @@
 #endif
 
 #include "csq.h"
-
-extern PACL                         SePublicDefaultDacl;
-extern PACL                         SeSystemDefaultDacl;
 
 #define FS_LFN_APIS                             0x00004000
 

Modified: trunk/reactos/include/xdk/rtlfuncs.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/xdk/rtlfuncs.h?rev=54825&r1=54824&r2=54825&view=diff
==============================================================================
--- trunk/reactos/include/xdk/rtlfuncs.h [iso-8859-1] (original)
+++ trunk/reactos/include/xdk/rtlfuncs.h [iso-8859-1] Tue Jan  3 19:42:58 2012
@@ -1953,7 +1953,7 @@
       if ((Length -= 1) == 0) {
         return;
       }
-    Address += 1;
+      Address += 1;
     }
     __stosq((PULONG64)(Address), Pattern | ((ULONG64)Pattern << 32), Length / 2);
     if ((Length & 1) != 0) Address[Length - 1] = Pattern;

Added: trunk/reactos/include/xdk/sspi.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/xdk/sspi.h?rev=54825&view=auto
==============================================================================
--- trunk/reactos/include/xdk/sspi.h (added)
+++ trunk/reactos/include/xdk/sspi.h [iso-8859-1] Tue Jan  3 19:42:58 2012
@@ -1,0 +1,1309 @@
+#ifndef __SSPI_H__
+#define __SSPI_H__
+
+// for ntifs.h:
+#define ISSP_LEVEL 32
+#define ISSP_MODE 0
+
+#ifdef MIDL_PASS
+#define MIDL_PROP(x) x
+#else
+#define MIDL_PROP(x)
+#endif
+
+#define SEC_TEXT TEXT
+#define SEC_FAR
+#define SEC_ENTRY __stdcall
+
+#if defined(_NO_KSECDD_IMPORT_)
+#define KSECDDDECLSPEC
+#else
+#define KSECDDDECLSPEC __declspec(dllimport)
+#endif
+
+#define SECQOP_WRAP_NO_ENCRYPT 0x80000001
+#define SECQOP_WRAP_OOB_DATA   0x40000000
+
+#define SECURITY_ENTRYPOINTW SEC_TEXT("InitSecurityInterfaceW")
+#define SECURITY_ENTRYPOINT SECURITY_ENTRYPOINTW
+
+#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION   1
+#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_2 2
+#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_3 3
+#define SECURITY_SUPPORT_PROVIDER_INTERFACE_VERSION_4 4
+
+#define SECURITY_NATIVE_DREP  0x00000010
+#define SECURITY_NETWORK_DREP 0x00000000
+
+#define SECPKG_ID_NONE 0xFFFF
+
+#define SECPKG_CRED_ATTR_NAMES                1
+#define SECPKG_CRED_ATTR_SSI_PROVIDER         2
+
+#define SECPKG_ATTR_SIZES                     0
+#define SECPKG_ATTR_NAMES                     1
+#define SECPKG_ATTR_LIFESPAN                  2
+#define SECPKG_ATTR_DCE_INFO                  3
+#define SECPKG_ATTR_STREAM_SIZES              4
+#define SECPKG_ATTR_KEY_INFO                  5
+#define SECPKG_ATTR_AUTHORITY                 6
+#define SECPKG_ATTR_PROTO_INFO                7
+#define SECPKG_ATTR_PASSWORD_EXPIRY           8
+#define SECPKG_ATTR_SESSION_KEY               9
+#define SECPKG_ATTR_PACKAGE_INFO             10
+#define SECPKG_ATTR_USER_FLAGS               11
+#define SECPKG_ATTR_NEGOTIATION_INFO         12
+#define SECPKG_ATTR_NATIVE_NAMES             13
+#define SECPKG_ATTR_FLAGS                    14
+#define SECPKG_ATTR_USE_VALIDATED            15
+#define SECPKG_ATTR_CREDENTIAL_NAME          16
+#define SECPKG_ATTR_TARGET_INFORMATION       17
+#define SECPKG_ATTR_ACCESS_TOKEN             18
+#define SECPKG_ATTR_TARGET                   19
+#define SECPKG_ATTR_AUTHENTICATION_ID        20
+#define SECPKG_ATTR_LOGOFF_TIME              21
+#define SECPKG_ATTR_NEGO_KEYS                22
+#define SECPKG_ATTR_PROMPTING_NEEDED         24
+#define SECPKG_ATTR_UNIQUE_BINDINGS          25
+#define SECPKG_ATTR_ENDPOINT_BINDINGS        26
+#define SECPKG_ATTR_CLIENT_SPECIFIED_TARGET  27
+#define SECPKG_ATTR_LAST_CLIENT_TOKEN_STATUS 30
+#define SECPKG_ATTR_NEGO_PKG_INFO            31
+#define SECPKG_ATTR_NEGO_STATUS              32
+#define SECPKG_ATTR_CONTEXT_DELETED          33
+
+#define SECPKG_FLAG_INTEGRITY               0x00000001
+#define SECPKG_FLAG_PRIVACY                 0x00000002
+#define SECPKG_FLAG_TOKEN_ONLY              0x00000004
+#define SECPKG_FLAG_DATAGRAM                0x00000008
+#define SECPKG_FLAG_CONNECTION              0x00000010
+#define SECPKG_FLAG_MULTI_REQUIRED          0x00000020
+#define SECPKG_FLAG_CLIENT_ONLY             0x00000040
+#define SECPKG_FLAG_EXTENDED_ERROR          0x00000080
+#define SECPKG_FLAG_IMPERSONATION           0x00000100
+#define SECPKG_FLAG_ACCEPT_WIN32_NAME       0x00000200
+#define SECPKG_FLAG_STREAM                  0x00000400
+#define SECPKG_FLAG_NEGOTIABLE              0x00000800
+#define SECPKG_FLAG_GSS_COMPATIBLE          0x00001000
+#define SECPKG_FLAG_LOGON                   0x00002000
+#define SECPKG_FLAG_ASCII_BUFFERS           0x00004000
+#define SECPKG_FLAG_FRAGMENT                0x00008000
+#define SECPKG_FLAG_MUTUAL_AUTH             0x00010000
+#define SECPKG_FLAG_DELEGATION              0x00020000
+#define SECPKG_FLAG_READONLY_WITH_CHECKSUM  0x00040000
+#define SECPKG_FLAG_RESTRICTED_TOKENS       0x00080000
+#define SECPKG_FLAG_NEGO_EXTENDER           0x00100000
+#define SECPKG_FLAG_NEGOTIABLE2             0x00200000
+
+#define SECPKG_CRED_INBOUND                 0x00000001
+#define SECPKG_CRED_OUTBOUND                0x00000002
+#define SECPKG_CRED_BOTH                    0x00000003
+#define SECPKG_CRED_DEFAULT                 0x00000004
+#define SECPKG_CRED_RESERVED                0xF0000000
+#define SECPKG_CRED_AUTOLOGON_RESTRICTED    0x00000010
+#define SECPKG_CRED_PROCESS_POLICY_ONLY     0x00000020
+
+#define SECPKG_CONTEXT_EXPORT_RESET_NEW     0x00000001
+#define SECPKG_CONTEXT_EXPORT_DELETE_OLD    0x00000002
+#define SECPKG_CONTEXT_EXPORT_TO_KERNEL     0x00000004
+
+#define SECPKG_ATTR_SUBJECT_SECURITY_ATTRIBUTES 128
+#define SECPKG_ATTR_NEGO_INFO_FLAG_NO_KERBEROS 0x1
+#define SECPKG_ATTR_NEGO_INFO_FLAG_NO_NTLM     0x2
+
+#define SecPkgContext_NativeNames SecPkgContext_NativeNamesW
+#define PSecPkgContext_NativeNames PSecPkgContext_NativeNamesW
+
+#define SECBUFFER_VERSION 0
+
+#define SECBUFFER_EMPTY                 0
+#define SECBUFFER_DATA                  1
+#define SECBUFFER_TOKEN                 2
+#define SECBUFFER_PKG_PARAMS            3
+#define SECBUFFER_MISSING               4
+#define SECBUFFER_EXTRA                 5
+#define SECBUFFER_STREAM_TRAILER        6
+#define SECBUFFER_STREAM_HEADER         7
+#define SECBUFFER_NEGOTIATION_INFO      8
+#define SECBUFFER_PADDING               9
+#define SECBUFFER_STREAM               10
+#define SECBUFFER_MECHLIST             11
+#define SECBUFFER_MECHLIST_SIGNATURE   12
+#define SECBUFFER_TARGET               13
+#define SECBUFFER_CHANNEL_BINDINGS     14
+#define SECBUFFER_CHANGE_PASS_RESPONSE 15
+#define SECBUFFER_TARGET_HOST          16
+#define SECBUFFER_ALERT                17
+
+#define SECBUFFER_ATTRMASK                0xF0000000
+#define SECBUFFER_READONLY                0x80000000
+#define SECBUFFER_READONLY_WITH_CHECKSUM  0x10000000
+#define SECBUFFER_RESERVED                0x60000000
+
+#define ISC_REQ_DELEGATE                 0x00000001
+#define ISC_REQ_MUTUAL_AUTH              0x00000002
+#define ISC_REQ_REPLAY_DETECT            0x00000004
+#define ISC_REQ_SEQUENCE_DETECT          0x00000008
+#define ISC_REQ_CONFIDENTIALITY          0x00000010
+#define ISC_REQ_USE_SESSION_KEY          0x00000020
+#define ISC_REQ_PROMPT_FOR_CREDS         0x00000040
+#define ISC_REQ_USE_SUPPLIED_CREDS       0x00000080
+#define ISC_REQ_ALLOCATE_MEMORY          0x00000100
+#define ISC_REQ_USE_DCE_STYLE            0x00000200
+#define ISC_REQ_DATAGRAM                 0x00000400
+#define ISC_REQ_CONNECTION               0x00000800
+#define ISC_REQ_CALL_LEVEL               0x00001000
+#define ISC_REQ_FRAGMENT_SUPPLIED        0x00002000
+#define ISC_REQ_EXTENDED_ERROR           0x00004000
+#define ISC_REQ_STREAM                   0x00008000
+#define ISC_REQ_INTEGRITY                0x00010000
+#define ISC_REQ_IDENTIFY                 0x00020000
+#define ISC_REQ_NULL_SESSION             0x00040000
+#define ISC_REQ_MANUAL_CRED_VALIDATION   0x00080000
+#define ISC_REQ_RESERVED1                0x00100000
+#define ISC_REQ_FRAGMENT_TO_FIT          0x00200000
+#define ISC_REQ_FORWARD_CREDENTIALS      0x00400000
+#define ISC_REQ_NO_INTEGRITY             0x00800000
+#define ISC_REQ_USE_HTTP_STYLE           0x01000000
+
+#define ISC_RET_DELEGATE                 0x00000001
+#define ISC_RET_MUTUAL_AUTH              0x00000002
+#define ISC_RET_REPLAY_DETECT            0x00000004
+#define ISC_RET_SEQUENCE_DETECT          0x00000008
+#define ISC_RET_CONFIDENTIALITY          0x00000010
+#define ISC_RET_USE_SESSION_KEY          0x00000020
+#define ISC_RET_USED_COLLECTED_CREDS     0x00000040
+#define ISC_RET_USED_SUPPLIED_CREDS      0x00000080
+#define ISC_RET_ALLOCATED_MEMORY         0x00000100
+#define ISC_RET_USED_DCE_STYLE           0x00000200
+#define ISC_RET_DATAGRAM                 0x00000400
+#define ISC_RET_CONNECTION               0x00000800
+#define ISC_RET_INTERMEDIATE_RETURN      0x00001000
+#define ISC_RET_CALL_LEVEL               0x00002000
+#define ISC_RET_EXTENDED_ERROR           0x00004000
+#define ISC_RET_STREAM                   0x00008000
+#define ISC_RET_INTEGRITY                0x00010000
+#define ISC_RET_IDENTIFY                 0x00020000
+#define ISC_RET_NULL_SESSION             0x00040000
+#define ISC_RET_MANUAL_CRED_VALIDATION   0x00080000
+#define ISC_RET_RESERVED1                0x00100000
+#define ISC_RET_FRAGMENT_ONLY            0x00200000
+#define ISC_RET_FORWARD_CREDENTIALS      0x00400000
+#define ISC_RET_USED_HTTP_STYLE          0x01000000
+#define ISC_RET_NO_ADDITIONAL_TOKEN      0x02000000
+#define ISC_RET_REAUTHENTICATION         0x08000000
+
+#define ASC_REQ_DELEGATE                 0x00000001
+#define ASC_REQ_MUTUAL_AUTH              0x00000002
+#define ASC_REQ_REPLAY_DETECT            0x00000004
+#define ASC_REQ_SEQUENCE_DETECT          0x00000008
+#define ASC_REQ_CONFIDENTIALITY          0x00000010
+#define ASC_REQ_USE_SESSION_KEY          0x00000020
+#define ASC_REQ_ALLOCATE_MEMORY          0x00000100
+#define ASC_REQ_USE_DCE_STYLE            0x00000200
+#define ASC_REQ_DATAGRAM                 0x00000400
+#define ASC_REQ_CONNECTION               0x00000800
+#define ASC_REQ_CALL_LEVEL               0x00001000
+#define ASC_REQ_EXTENDED_ERROR           0x00008000
+#define ASC_REQ_STREAM                   0x00010000
+#define ASC_REQ_INTEGRITY                0x00020000
+#define ASC_REQ_LICENSING                0x00040000
+#define ASC_REQ_IDENTIFY                 0x00080000
+#define ASC_REQ_ALLOW_NULL_SESSION       0x00100000
+#define ASC_REQ_ALLOW_NON_USER_LOGONS    0x00200000
+#define ASC_REQ_ALLOW_CONTEXT_REPLAY     0x00400000
+#define ASC_REQ_FRAGMENT_TO_FIT          0x00800000
+#define ASC_REQ_FRAGMENT_SUPPLIED        0x00002000
+#define ASC_REQ_NO_TOKEN                 0x01000000
+#define ASC_REQ_PROXY_BINDINGS           0x04000000
+//#define SSP_RET_REAUTHENTICATION         0x08000000 // internal
+
+#define ASC_REQ_ALLOW_MISSING_BINDINGS   0x10000000
+#define ASC_RET_DELEGATE                 0x00000001
+#define ASC_RET_MUTUAL_AUTH              0x00000002
+#define ASC_RET_REPLAY_DETECT            0x00000004
+#define ASC_RET_SEQUENCE_DETECT          0x00000008
+#define ASC_RET_CONFIDENTIALITY          0x00000010
+#define ASC_RET_USE_SESSION_KEY          0x00000020
+#define ASC_RET_ALLOCATED_MEMORY         0x00000100
+#define ASC_RET_USED_DCE_STYLE           0x00000200
+#define ASC_RET_DATAGRAM                 0x00000400
+#define ASC_RET_CONNECTION               0x00000800
+#define ASC_RET_CALL_LEVEL               0x00002000
+#define ASC_RET_THIRD_LEG_FAILED         0x00004000
+#define ASC_RET_EXTENDED_ERROR           0x00008000
+#define ASC_RET_STREAM                   0x00010000
+#define ASC_RET_INTEGRITY                0x00020000
+#define ASC_RET_LICENSING                0x00040000
+#define ASC_RET_IDENTIFY                 0x00080000
+#define ASC_RET_NULL_SESSION             0x00100000
+#define ASC_RET_ALLOW_NON_USER_LOGONS    0x00200000
+#define ASC_RET_ALLOW_CONTEXT_REPLAY     0x00400000
+#define ASC_RET_FRAGMENT_ONLY            0x00800000
+#define ASC_RET_NO_TOKEN                 0x01000000
+#define ASC_RET_NO_ADDITIONAL_TOKEN      0x02000000
+#define ASC_RET_NO_PROXY_BINDINGS        0x04000000
+//#define SSP_RET_REAUTHENTICATION         0x08000000 // internal
+#define ASC_RET_MISSING_BINDINGS         0x10000000
+
+#define SEC_DELETED_HANDLE ((ULONG_PTR)(-2))
+
+#define SecInvalidateHandle(x) \
+    ((PSecHandle)(x))->dwLower = ((PSecHandle)(x))->dwUpper = ((ULONG_PTR)((INT_PTR)-1));
+
+#define SecIsValidHandle(x) \
+    ( ( ((PSecHandle)(x))->dwLower != (ULONG_PTR)(INT_PTR)-1 ) && \
+      ( ((PSecHandle)(x))->dwUpper != (ULONG_PTR)(INT_PTR)-1 ) )
+
+typedef WCHAR SEC_WCHAR;
+typedef CHAR SEC_CHAR;
+typedef LARGE_INTEGER _SECURITY_INTEGER, SECURITY_INTEGER, *PSECURITY_INTEGER;
+typedef SECURITY_INTEGER TimeStamp, *PTimeStamp;
+typedef UNICODE_STRING SECURITY_STRING, *PSECURITY_STRING;
+#if ISSP_MODE == 0
+#define PSSPI_SEC_STRING PSECURITY_STRING
+#else
+#define PSSPI_SEC_STRING SEC_WCHAR*
+#endif
+
+typedef PVOID PSEC_WINNT_AUTH_IDENTITY_OPAQUE;
+
+#ifndef __SECSTATUS_DEFINED__
+typedef LONG SECURITY_STATUS;
+#define __SECSTATUS_DEFINED__
+#endif
+
+typedef enum _SECPKG_CRED_CLASS
+{
+    SecPkgCredClass_None = 0,
+    SecPkgCredClass_Ephemeral = 10,
+    SecPkgCredClass_PersistedGeneric = 20,
+    SecPkgCredClass_PersistedSpecific = 30,
+    SecPkgCredClass_Explicit = 40,
+} SECPKG_CRED_CLASS, *PSECPKG_CRED_CLASS;
+
+typedef struct _SEC_NEGOTIATION_INFO
+{
+    ULONG Size;
+    ULONG NameLength;
+    SEC_WCHAR * Name;
+    PVOID Reserved;
+} SEC_NEGOTIATION_INFO, *PSEC_NEGOTIATION_INFO;
+
+typedef struct _SEC_CHANNEL_BINDINGS
+{
+    ULONG dwInitiatorAddrType;
+    ULONG cbInitiatorLength;
+    ULONG dwInitiatorOffset;
+    ULONG dwAcceptorAddrType;
+    ULONG cbAcceptorLength;
+    ULONG dwAcceptorOffset;
+    ULONG cbApplicationDataLength;
+    ULONG dwApplicationDataOffset;
+} SEC_CHANNEL_BINDINGS, *PSEC_CHANNEL_BINDINGS;
+
+#ifndef _AUTH_IDENTITY_EX2_DEFINED
+#define _AUTH_IDENTITY_EX2_DEFINED
+typedef struct _SEC_WINNT_AUTH_IDENTITY_EX2 {
+    ULONG Version;
+    USHORT cbHeaderLength;
+    ULONG cbStructureLength;
+    ULONG UserOffset;
+    USHORT UserLength;
+    ULONG DomainOffset;
+    USHORT DomainLength;
+    ULONG PackedCredentialsOffset;
+    USHORT PackedCredentialsLength;
+    ULONG Flags;
+    ULONG PackageListOffset;
+    USHORT PackageListLength;
+} SEC_WINNT_AUTH_IDENTITY_EX2, *PSEC_WINNT_AUTH_IDENTITY_EX2;
+#define SEC_WINNT_AUTH_IDENTITY_VERSION_2 0x201
+#endif
+
+#ifndef _AUTH_IDENTITY_DEFINED
+#define _AUTH_IDENTITY_DEFINED
+typedef struct _SEC_WINNT_AUTH_IDENTITY_W {
+    PUSHORT User;
+    ULONG UserLength;
+    PUSHORT Domain;
+    ULONG DomainLength;
+    PUSHORT Password;
+    ULONG PasswordLength;
+    ULONG Flags;
+} SEC_WINNT_AUTH_IDENTITY_W, *PSEC_WINNT_AUTH_IDENTITY_W;
+#define SEC_WINNT_AUTH_IDENTITY_ANSI    0x1
+#define SEC_WINNT_AUTH_IDENTITY_UNICODE 0x2
+#define SEC_WINNT_AUTH_IDENTITY SEC_WINNT_AUTH_IDENTITY_W
+#define PSEC_WINNT_AUTH_IDENTITY PSEC_WINNT_AUTH_IDENTITY_W
+#define _SEC_WINNT_AUTH_IDENTITY _SEC_WINNT_AUTH_IDENTITY_W
+#endif
+
+#ifndef SEC_WINNT_AUTH_IDENTITY_VERSION
+#define SEC_WINNT_AUTH_IDENTITY_VERSION 0x200
+typedef struct _SEC_WINNT_AUTH_IDENTITY_EXW {
+    ULONG Version;
+    ULONG Length;
+    PUSHORT User;           //  Non-NULL terminated string.
+    ULONG UserLength;       //  # of characters (NOT bytes), not including NULL.
+    PUSHORT Domain;         //  Non-NULL terminated string.
+    ULONG DomainLength;     //  # of characters (NOT bytes), not including NULL.
+    PUSHORT Password;       //  Non-NULL terminated string.
+    ULONG PasswordLength;   //  # of characters (NOT bytes), not including NULL.
+    ULONG Flags;
+    PUSHORT PackageList;
+    ULONG PackageListLength;
+} SEC_WINNT_AUTH_IDENTITY_EXW, *PSEC_WINNT_AUTH_IDENTITY_EXW;
+#define SEC_WINNT_AUTH_IDENTITY_EX  SEC_WINNT_AUTH_IDENTITY_EXW
+#define PSEC_WINNT_AUTH_IDENTITY_EX PSEC_WINNT_AUTH_IDENTITY_EXW
+#endif
+
+#ifndef __SECHANDLE_DEFINED__
+typedef struct _SecHandle
+{
+    ULONG_PTR dwLower;
+    ULONG_PTR dwUpper;
+} SecHandle, *PSecHandle;
+#define __SECHANDLE_DEFINED__
+#endif
+
+typedef SecHandle CredHandle, *PCredHandle, CtxtHandle, *PCtxtHandle;
+
+typedef struct _SecBuffer
+{
+    ULONG cbBuffer;
+    ULONG BufferType;
+#ifdef MIDL_PASS
+    MIDL_PROP([size_is(cbBuffer)]) PCHAR pvBuffer;
+#else
+    __field_bcount(cbBuffer) void SEC_FAR *pvBuffer;
+#endif
+} SecBuffer, * PSecBuffer;
+
+typedef struct _SecBufferDesc
+{
+    ULONG ulVersion;
+    ULONG cBuffers;
+    MIDL_PROP([size_is(cBuffers)]) __field_ecount(cBuffers) PSecBuffer pBuffers;
+} SecBufferDesc, SEC_FAR * PSecBufferDesc;
+
+typedef struct _SecPkgInfoW
+{
+    ULONG fCapabilities;
+    USHORT wVersion;
+    USHORT wRPCID;
+    ULONG cbMaxToken;
+    MIDL_PROP([string]) SEC_WCHAR *Name;
+    MIDL_PROP([string]) SEC_WCHAR *Comment;
+} SecPkgInfoW, *PSecPkgInfoW;
+#define SecPkgInfo SecPkgInfoW
+#define PSecPkgInfo PSecPkgInfoW
+
+typedef struct _SecPkgCredentials_NamesW
+{
+    MIDL_PROP([string]) SEC_WCHAR * sUserName;
+} SecPkgCredentials_NamesW, * PSecPkgCredentials_NamesW;
+#define SecPkgCredentials_Names SecPkgCredentials_NamesW
+#define PSecPkgCredentials_Names PSecPkgCredentials_NamesW
+
+typedef struct _SecPkgContext_NamesW
+{
+    SEC_WCHAR *sUserName;
+} SecPkgContext_NamesW, *PSecPkgContext_NamesW;
+#define SecPkgContext_Names SecPkgContext_NamesW
+#define PSecPkgContext_Names PSecPkgContext_NamesW
+
+#if OSVER(NTDDI_VERSION) > NTDDI_WIN2K
+typedef struct _SecPkgContext_CredentialNameW
+{
+    ULONG CredentialType;
+    SEC_WCHAR *sCredentialName;
+} SecPkgContext_CredentialNameW, *PSecPkgContext_CredentialNameW;
+#endif
+#define SecPkgContext_CredentialName SecPkgContext_CredentialNameW
+#define PSecPkgContext_CredentialName PSecPkgContext_CredentialNameW
+
+typedef struct _SecPkgContext_SubjectAttributes {
+    PVOID AttributeInfo;
+} SecPkgContext_SubjectAttributes, *PSecPkgContext_SubjectAttributes;
+
+typedef struct _SecPkgContext_CredInfo {
+    SECPKG_CRED_CLASS CredClass;
+    ULONG IsPromptingNeeded;
+} SecPkgContext_CredInfo, *PSecPkgContext_CredInfo;
+
+typedef struct _SecPkgContext_NegoPackageInfo
+{
+    ULONG PackageMask;
+} SecPkgContext_NegoPackageInfo, * PSecPkgContext_NegoPackageInfo;
+
+typedef struct _SecPkgContext_NegoStatus
+{
+    ULONG LastStatus;
+} SecPkgContext_NegoStatus, *PSecPkgContext_NegoStatus;
+
+typedef struct _SecPkgContext_Sizes
+{
+    ULONG cbMaxToken;
+    ULONG cbMaxSignature;
+    ULONG cbBlockSize;
+    ULONG cbSecurityTrailer;
+} SecPkgContext_Sizes, *PSecPkgContext_Sizes;
+
+typedef struct _SecPkgContext_StreamSizes
+{
+    ULONG cbHeader;
+    ULONG cbTrailer;
+    ULONG cbMaximumMessage;
+    ULONG cBuffers;
+    ULONG cbBlockSize;
+} SecPkgContext_StreamSizes, *PSecPkgContext_StreamSizes;
+
+typedef struct _SecPkgContext_Lifespan
+{
+    TimeStamp tsStart;
+    TimeStamp tsExpiry;
+} SecPkgContext_Lifespan, *PSecPkgContext_Lifespan;
+
+typedef struct _SecPkgContext_PasswordExpiry
+{
+    TimeStamp tsPasswordExpires;
+} SecPkgContext_PasswordExpiry, * PSecPkgContext_PasswordExpiry;
+
+typedef struct _SecPkgContext_ProtoInfoW
+{
+    SEC_WCHAR *sProtocolName;
+    ULONG majorVersion;
+    ULONG minorVersion;
+} SecPkgContext_ProtoInfoW, *PSecPkgContext_ProtoInfoW;
+#define SecPkgContext_ProtoInfo SecPkgContext_ProtoInfoW
+#define PSecPkgContext_ProtoInfo PSecPkgContext_ProtoInfoW
+
+typedef struct _SecPkgContext_KeyInfoW
+{
+    SEC_WCHAR *sSignatureAlgorithmName;
+    SEC_WCHAR *sEncryptAlgorithmName;
+    ULONG KeySize;
+    ULONG SignatureAlgorithm;
+    ULONG EncryptAlgorithm;
+} SecPkgContext_KeyInfoW, *PSecPkgContext_KeyInfoW;
+#define SecPkgContext_KeyInfo SecPkgContext_KeyInfoW
+#define PSecPkgContext_KeyInfo PSecPkgContext_KeyInfoW
+
+typedef struct _SecPkgContext_SessionKey
+{
+    ULONG SessionKeyLength;
+    __field_bcount(SessionKeyLength) PUCHAR SessionKey;
+} SecPkgContext_SessionKey, *PSecPkgContext_SessionKey;
+
+typedef struct _SecPkgContext_NegoKeys
+{
+    ULONG KeyType;
+    USHORT KeyLength;
+    __field_bcount(KeyLength) PUCHAR KeyValue;
+    ULONG  VerifyKeyType;
+    USHORT VerifyKeyLength;
+    __field_bcount(VerifyKeyLength) PUCHAR VerifyKeyValue;
+} SecPkgContext_NegoKeys, *PSecPkgContext_NegoKeys;
+
+typedef struct _SecPkgContext_DceInfo
+{
+    ULONG AuthzSvc;
+    PVOID pPac;
+} SecPkgContext_DceInfo, *PSecPkgContext_DceInfo;
+
+typedef struct _SecPkgContext_PackageInfoW
+{
+    PSecPkgInfoW PackageInfo;
+} SecPkgContext_PackageInfoW, *PSecPkgContext_PackageInfoW;
+#define SecPkgContext_PackageInfo SecPkgContext_PackageInfoW
+#define PSecPkgContext_PackageInfo PSecPkgContext_PackageInfoW
+
+typedef struct _SecPkgContext_UserFlags
+{
+    ULONG UserFlags;
+} SecPkgContext_UserFlags, *PSecPkgContext_UserFlags;
+
+typedef struct _SecPkgContext_Flags
+{
+    ULONG Flags;
+} SecPkgContext_Flags, *PSecPkgContext_Flags;
+
+typedef struct _SecPkgContext_NegotiationInfoW
+{
+    PSecPkgInfoW PackageInfo ;
+    ULONG NegotiationState ;
+} SecPkgContext_NegotiationInfoW, *PSecPkgContext_NegotiationInfoW ;
+
+typedef struct _SecPkgContext_AuthorityW
+{
+    SEC_WCHAR *sAuthorityName;
+} SecPkgContext_AuthorityW, *PSecPkgContext_AuthorityW;
+#define SecPkgContext_Authority SecPkgContext_AuthorityW
+#define PSecPkgContext_Authority PSecPkgContext_AuthorityW
+
+
+#if NTDDI_VERSION > NTDDI_WS03
+typedef struct _SecPkgCredentials_SSIProviderW
+{
+    SEC_WCHAR *sProviderName;
+    ULONG ProviderInfoLength;
+    PCHAR ProviderInfo;
+} SecPkgCredentials_SSIProviderW, * PSecPkgCredentials_SSIProviderW;
+#define SecPkgCredentials_SSIProvider SecPkgCredentials_SSIProviderW
+#define PSecPkgCredentials_SSIProvider PSecPkgCredentials_SSIProviderW
+
+typedef struct _SecPkgContext_LogoffTime
+{
+    TimeStamp tsLogoffTime;
+} SecPkgContext_LogoffTime, *PSecPkgContext_LogoffTime;
+#endif
+
+/* forward declaration */
+typedef struct _SECURITY_FUNCTION_TABLE_W SecurityFunctionTableW, * PSecurityFunctionTableW;
+#define SecurityFunctionTable SecurityFunctionTableW
+#define PSecurityFunctionTable PSecurityFunctionTableW
+
+typedef
+VOID
+(SEC_ENTRY * SEC_GET_KEY_FN)(
+    PVOID Arg,
+    PVOID Principal,
+    ULONG KeyVer,
+    PVOID *Key,
+    SECURITY_STATUS *Status);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+AcceptSecurityContext(
+    __in_opt PCredHandle phCredential,
+    __in_opt PCtxtHandle phContext,
+    __in_opt PSecBufferDesc pInput,
+    __in ULONG fContextReq,
+    __in ULONG TargetDataRep,
+    __in_opt PCtxtHandle phNewContext,
+    __in_opt PSecBufferDesc pOutput,
+    __out PULONG pfContextAttr,
+    __out_opt PTimeStamp ptsExpiry);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * ACCEPT_SECURITY_CONTEXT_FN)(
+    PCredHandle,
+    PCtxtHandle,
+    PSecBufferDesc,
+    ULONG,
+    ULONG,
+    PCtxtHandle,
+    PSecBufferDesc,
+    PULONG,
+    PTimeStamp);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+AcquireCredentialsHandleW(
+    __in_opt  PSSPI_SEC_STRING pPrincipal,
+    __in      PSSPI_SEC_STRING pPackage,
+    __in      ULONG fCredentialUse,
+    __in_opt  PVOID pvLogonId,
+    __in_opt  PVOID pAuthData,
+    __in_opt  SEC_GET_KEY_FN pGetKeyFn,
+    __in_opt  PVOID pvGetKeyArgument,
+    __out     PCredHandle phCredential,
+    __out_opt PTimeStamp ptsExpiry);
+#define AcquireCredentialsHandle AcquireCredentialsHandleW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * ACQUIRE_CREDENTIALS_HANDLE_FN_W)(
+    PSSPI_SEC_STRING,
+    PSSPI_SEC_STRING,
+    ULONG,
+    PVOID,
+    PVOID,
+    SEC_GET_KEY_FN,
+    PVOID,
+    PCredHandle,
+    PTimeStamp);
+#define ACQUIRE_CREDENTIALS_HANDLE_FN ACQUIRE_CREDENTIALS_HANDLE_FN_W
+
+SECURITY_STATUS
+SEC_ENTRY
+AddCredentialsA(
+    __in PCredHandle hCredentials,
+    __in_opt LPSTR pszPrincipal,
+    __in LPSTR pszPackage,
+    __in ULONG fCredentialUse,
+    __in_opt PVOID pAuthData,
+    __in_opt SEC_GET_KEY_FN pGetKeyFn,
+    __in_opt PVOID pvGetKeyArgument,
+    __out_opt PTimeStamp ptsExpiry);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * ADD_CREDENTIALS_FN_A)(
+    PCredHandle,
+    SEC_CHAR *,
+    SEC_CHAR *,
+    ULONG,
+    PVOID,
+    SEC_GET_KEY_FN,
+    PVOID,
+    PTimeStamp);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+AddCredentialsW(
+    __in PCredHandle hCredentials,
+    __in_opt PSSPI_SEC_STRING pPrincipal,
+    __in PSSPI_SEC_STRING pPackage,
+    __in ULONG fCredentialUse,
+    __in_opt PVOID pAuthData,
+    __in_opt SEC_GET_KEY_FN pGetKeyFn,
+    __in_opt PVOID pvGetKeyArgument,
+    __out_opt PTimeStamp ptsExpiry);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * ADD_CREDENTIALS_FN_W)(
+    PCredHandle,
+    PSSPI_SEC_STRING,
+    PSSPI_SEC_STRING,
+    ULONG,
+    PVOID,
+    SEC_GET_KEY_FN,
+    PVOID,
+    PTimeStamp);
+
+#ifdef UNICODE
+#define AddCredentials  AddCredentialsW
+#define ADD_CREDENTIALS_FN  ADD_CREDENTIALS_FN_W
+#else
+#define AddCredentials  AddCredentialsA
+#define ADD_CREDENTIALS_FN ADD_CREDENTIALS_FN_A
+#endif
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+ApplyControlToken(
+    __in PCtxtHandle phContext,
+    __in PSecBufferDesc pInput);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * APPLY_CONTROL_TOKEN_FN)(
+    PCtxtHandle, PSecBufferDesc);
+
+#if (ISSP_MODE != 0)
+
+SECURITY_STATUS
+SEC_ENTRY
+ChangeAccountPasswordA(
+    __in SEC_CHAR* pszPackageName,
+    __in SEC_CHAR* pszDomainName,
+    __in SEC_CHAR* pszAccountName,
+    __in SEC_CHAR* pszOldPassword,
+    __in SEC_CHAR* pszNewPassword,
+    __in BOOLEAN bImpersonating,
+    __in ULONG dwReserved,
+    __inout PSecBufferDesc pOutput);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * CHANGE_PASSWORD_FN_A)(
+    SEC_CHAR *,
+    SEC_CHAR *,
+    SEC_CHAR *,
+    SEC_CHAR *,
+    SEC_CHAR *,
+    BOOLEAN,
+    ULONG,
+    PSecBufferDesc);
+
+SECURITY_STATUS
+SEC_ENTRY
+ChangeAccountPasswordW(
+    __in SEC_WCHAR* pszPackageName,
+    __in SEC_WCHAR* pszDomainName,
+    __in SEC_WCHAR* pszAccountName,
+    __in SEC_WCHAR* pszOldPassword,
+    __in SEC_WCHAR* pszNewPassword,
+    __in BOOLEAN bImpersonating,
+    __in ULONG dwReserved,
+    __inout PSecBufferDesc pOutput);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * CHANGE_PASSWORD_FN_W)(
+    SEC_WCHAR *,
+    SEC_WCHAR *,
+    SEC_WCHAR *,
+    SEC_WCHAR *,
+    SEC_WCHAR *,
+    BOOLEAN,
+    ULONG,
+    PSecBufferDesc);
+
+#ifdef UNICODE
+#define ChangeAccountPassword ChangeAccountPasswordW
+#define CHANGE_PASSWORD_FN CHANGE_PASSWORD_FN_W
+#else
+#define ChangeAccountPassword ChangeAccountPasswordA
+#define CHANGE_PASSWORD_FN CHANGE_PASSWORD_FN_A
+#endif
+
+#endif /* ISSP_MODE != 0 */
+
+SECURITY_STATUS
+SEC_ENTRY
+CompleteAuthToken(
+    __in PCtxtHandle phContext,
+    __in PSecBufferDesc pToken);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * COMPLETE_AUTH_TOKEN_FN)(
+    PCtxtHandle,
+    PSecBufferDesc);
+
+SECURITY_STATUS
+SEC_ENTRY
+DecryptMessage(
+    __in PCtxtHandle phContext,
+    __inout PSecBufferDesc pMessage,
+    __in ULONG MessageSeqNo,
+    __out_opt PULONG pfQOP);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * DECRYPT_MESSAGE_FN)(
+    PCtxtHandle,
+    PSecBufferDesc,
+    ULONG,
+    PULONG);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+DeleteSecurityContext(
+    __in PCtxtHandle phContext);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * DELETE_SECURITY_CONTEXT_FN)(
+    PCtxtHandle);
+
+SECURITY_STATUS
+SEC_ENTRY
+EncryptMessage(
+    __in PCtxtHandle phContext,
+    __in ULONG  fQOP,
+    __inout PSecBufferDesc pMessage,
+    __in ULONG MessageSeqNo);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * ENCRYPT_MESSAGE_FN)(
+    PCtxtHandle,
+    ULONG,
+    PSecBufferDesc,
+    ULONG);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+EnumerateSecurityPackagesW(
+    __out       PULONG pcPackages,
+    __deref_out PSecPkgInfoW  * ppPackageInfo);
+#define EnumerateSecurityPackages EnumerateSecurityPackagesW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * ENUMERATE_SECURITY_PACKAGES_FN_W)(
+    PULONG,
+    PSecPkgInfoW*);
+#define ENUMERATE_SECURITY_PACKAGES_FN ENUMERATE_SECURITY_PACKAGES_FN_W
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+ExportSecurityContext(
+    __in PCtxtHandle phContext,
+    __in ULONG fFlags,
+    __out PSecBuffer pPackedContext,
+    __out PVOID* pToken);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * EXPORT_SECURITY_CONTEXT_FN)(
+    PCtxtHandle,
+    ULONG,
+    PSecBuffer,
+    PVOID*);
+
+SECURITY_STATUS
+SEC_ENTRY
+FreeContextBuffer(
+    __inout PVOID pvContextBuffer);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * FREE_CONTEXT_BUFFER_FN)(
+    __inout PVOID);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+FreeCredentialsHandle(
+    __in PCredHandle phCredential);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * FREE_CREDENTIALS_HANDLE_FN)(
+    PCredHandle);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+ImpersonateSecurityContext(
+    __in PCtxtHandle phContext);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * IMPERSONATE_SECURITY_CONTEXT_FN)(
+    PCtxtHandle);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+ImportSecurityContextW(
+    __in PSSPI_SEC_STRING pszPackage,
+    __in PSecBuffer pPackedContext,
+    __in PVOID Token,
+    __out PCtxtHandle phContext);
+#define ImportSecurityContext ImportSecurityContextW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * IMPORT_SECURITY_CONTEXT_FN_W)(
+    PSSPI_SEC_STRING,
+    PSecBuffer,
+    PVOID,
+    PCtxtHandle);
+#define IMPORT_SECURITY_CONTEXT_FN IMPORT_SECURITY_CONTEXT_FN_W
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+InitializeSecurityContextW(
+    __in_opt PCredHandle phCredential,
+    __in_opt PCtxtHandle phContext,
+    __in_opt PSSPI_SEC_STRING pTargetName,
+    __in ULONG fContextReq,
+    __in ULONG Reserved1,
+    __in ULONG TargetDataRep,
+    __in_opt PSecBufferDesc pInput,
+    __in ULONG Reserved2,
+    __inout_opt PCtxtHandle phNewContext,
+    __inout_opt PSecBufferDesc pOutput,
+    __out PULONG pfContextAttr,
+    __out_opt PTimeStamp ptsExpiry);
+#define InitializeSecurityContext InitializeSecurityContextW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * INITIALIZE_SECURITY_CONTEXT_FN_W)(
+    PCredHandle,
+    PCtxtHandle,
+    PSSPI_SEC_STRING,
+    ULONG,
+    ULONG,
+    ULONG,
+    PSecBufferDesc,
+    ULONG,
+    PCtxtHandle,
+    PSecBufferDesc,
+    PULONG,
+    PTimeStamp);
+#define INITIALIZE_SECURITY_CONTEXT_FN INITIALIZE_SECURITY_CONTEXT_FN_W
+
+KSECDDDECLSPEC
+PSecurityFunctionTableW
+SEC_ENTRY
+InitSecurityInterfaceW(VOID);
+#define InitSecurityInterface InitSecurityInterfaceW
+
+typedef
+PSecurityFunctionTableW
+(SEC_ENTRY * INIT_SECURITY_INTERFACE_W)(VOID);
+#define INIT_SECURITY_INTERFACE INIT_SECURITY_INTERFACE_W
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+MakeSignature(
+    __in PCtxtHandle phContext,
+    __in ULONG fQOP,
+    __in PSecBufferDesc pMessage,
+    __in ULONG MessageSeqNo);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * MAKE_SIGNATURE_FN)(
+    PCtxtHandle,
+    ULONG,
+    PSecBufferDesc,
+    ULONG);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+QueryContextAttributesW(
+    __in PCtxtHandle phContext,
+    __in ULONG ulAttribute,
+    __out PVOID pBuffer);
+#define QueryContextAttributes QueryContextAttributesW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * QUERY_CONTEXT_ATTRIBUTES_FN_W)(
+    PCtxtHandle,
+    ULONG,
+    PVOID);
+#define QUERY_CONTEXT_ATTRIBUTES_FN QUERY_CONTEXT_ATTRIBUTES_FN_W
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+QueryCredentialsAttributesW(
+    __in    PCredHandle phCredential,
+    __in    ULONG ulAttribute,
+    __inout PVOID pBuffer);
+#define QueryCredentialsAttributes QueryCredentialsAttributesW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * QUERY_CREDENTIALS_ATTRIBUTES_FN_W)(
+    PCredHandle,
+    ULONG,
+    PVOID);
+#define QUERY_CREDENTIALS_ATTRIBUTES_FN QUERY_CREDENTIALS_ATTRIBUTES_FN_W
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+QuerySecurityContextToken(
+    __in PCtxtHandle phContext,
+    __out PVOID * Token);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * QUERY_SECURITY_CONTEXT_TOKEN_FN)(
+    PCtxtHandle, PVOID *);
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+QuerySecurityPackageInfoW(
+    __in PSSPI_SEC_STRING pPackageName,
+    __deref_out PSecPkgInfoW *ppPackageInfo);
+#define QuerySecurityPackageInfo QuerySecurityPackageInfoW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * QUERY_SECURITY_PACKAGE_INFO_FN_W)(
+    PSSPI_SEC_STRING,
+    PSecPkgInfoW *);
+#define QUERY_SECURITY_PACKAGE_INFO_FN QUERY_SECURITY_PACKAGE_INFO_FN_W
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+RevertSecurityContext(
+    __in PCtxtHandle phContext);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * REVERT_SECURITY_CONTEXT_FN)(
+    PCtxtHandle);
+
+#if (OSVER(NTDDI_VERSION) > NTDDI_WIN2K)
+SECURITY_STATUS
+SEC_ENTRY
+SetContextAttributesW(
+    __in PCtxtHandle phContext,
+    __in ULONG ulAttribute,
+    __in_bcount(cbBuffer) PVOID pBuffer,
+    __in ULONG cbBuffer);
+#define SetContextAttributes SetContextAttributesW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * SET_CONTEXT_ATTRIBUTES_FN_W)(
+    PCtxtHandle,
+    ULONG,
+    PVOID,
+    ULONG);
+#define SET_CONTEXT_ATTRIBUTES_FN SET_CONTEXT_ATTRIBUTES_FN_W
+#endif
+
+#if (NTDDI_VERSION > NTDDI_WS03)
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+SetCredentialsAttributesW(
+    __in PCredHandle phCredential,
+    __in ULONG ulAttribute,
+    __in_bcount(cbBuffer) PVOID pBuffer,
+    __in ULONG cbBuffer);
+#define SetCredentialsAttributes SetCredentialsAttributesW
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * SET_CREDENTIALS_ATTRIBUTES_FN_W)(
+    PCredHandle,
+    ULONG,
+    PVOID,
+    ULONG);
+#define SET_CREDENTIALS_ATTRIBUTES_FN SET_CREDENTIALS_ATTRIBUTES_FN_W
+#endif /* NTDDI_VERSION > NTDDI_WS03 */
+
+KSECDDDECLSPEC
+SECURITY_STATUS
+SEC_ENTRY
+VerifySignature(
+    __in  PCtxtHandle phContext,
+    __in  PSecBufferDesc pMessage,
+    __in  ULONG MessageSeqNo,
+    __out PULONG pfQOP);
+
+typedef
+SECURITY_STATUS
+(SEC_ENTRY * VERIFY_SIGNATURE_FN)(
+    PCtxtHandle,
+    PSecBufferDesc,
+    ULONG,
+    PULONG);
+
+
+#if (ISSP_MODE == 0)
+
+KSECDDDECLSPEC
+NTSTATUS
+NTAPI
+SecMakeSPN(
+    __in PUNICODE_STRING ServiceClass,
+    __in PUNICODE_STRING ServiceName,
+    __in_opt PUNICODE_STRING InstanceName,
+    __in_opt USHORT InstancePort,
+    __in_opt PUNICODE_STRING Referrer,
+    __inout PUNICODE_STRING Spn,
+    __out_opt PULONG Length,
+    __in BOOLEAN Allocate);
+
+#if (NTDDI_VERSION >= NTDDI_WINXP)
+KSECDDDECLSPEC
+NTSTATUS
+NTAPI
+SecMakeSPNEx(
+    __in PUNICODE_STRING ServiceClass,
+    __in PUNICODE_STRING ServiceName,
+    __in_opt PUNICODE_STRING InstanceName,
+    __in_opt USHORT InstancePort,
+    __in_opt PUNICODE_STRING Referrer,
+    __in_opt PUNICODE_STRING TargetInfo,
+    __inout PUNICODE_STRING Spn,
+    __out PULONG Length OPTIONAL,
+    __in BOOLEAN Allocate);
+
+KSECDDDECLSPEC
+NTSTATUS
+SEC_ENTRY
+SecLookupAccountSid(
+    __in      PSID Sid,
+    __out     PULONG NameSize,
+    __inout   PUNICODE_STRING NameBuffer,
+    __out     PULONG DomainSize OPTIONAL,
+    __out_opt PUNICODE_STRING DomainBuffer,
+    __out     PSID_NAME_USE NameUse
+    );
+
+KSECDDDECLSPEC
+NTSTATUS
+SEC_ENTRY
+SecLookupAccountName(
+    __in PUNICODE_STRING Name,
+    __inout PULONG SidSize,
+    __out PSID Sid,
+    __out PSID_NAME_USE NameUse,
+    __out_opt PULONG DomainSize, // WDK says __out only + ... OPTIONAL
+    __inout_opt PUNICODE_STRING ReferencedDomain);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_WS03)
+KSECDDDECLSPEC
+NTSTATUS
+SEC_ENTRY
+SecLookupWellKnownSid(
+    __in WELL_KNOWN_SID_TYPE SidType,
+    __out PSID Sid,
+    __in ULONG SidBufferSize,
+    __inout_opt PULONG SidSize);
+#endif
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+KSECDDDECLSPEC
+NTSTATUS
+NTAPI
+SecMakeSPNEx2(
+    __in PUNICODE_STRING ServiceClass,
+    __in PUNICODE_STRING ServiceName,
+    __in_opt PUNICODE_STRING InstanceName,
+    __in_opt USHORT InstancePort,
+    __in_opt PUNICODE_STRING Referrer,
+    __in_opt PUNICODE_STRING InTargetInfo,
+    __inout PUNICODE_STRING Spn,
+    __out_opt PULONG TotalSize,
+    __in BOOLEAN Allocate,
+    __in BOOLEAN IsTargetInfoMarshaled);
+#endif
+
+#endif /* ISSP_MODE == 0 */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiEncodeAuthIdentityAsStrings(
+    __in PSEC_WINNT_AUTH_IDENTITY_OPAQUE pAuthIdentity,
+    __deref_out_opt PCWSTR* ppszUserName,
+    __deref_out_opt PCWSTR* ppszDomainName,
+    __deref_opt_out_opt PCWSTR* ppszPackedCredentialsString);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiValidateAuthIdentity(
+    __in PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiCopyAuthIdentity(
+    __in PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData,
+    __deref_out PSEC_WINNT_AUTH_IDENTITY_OPAQUE* AuthDataCopy);
+
+VOID
+SEC_ENTRY
+SspiFreeAuthIdentity(
+    __in_opt PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
+
+VOID
+SEC_ENTRY
+SspiZeroAuthIdentity(
+    __in_opt PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthData);
+
+VOID
+SEC_ENTRY
+SspiLocalFree(
+    __in_opt PVOID DataBuffer);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiEncodeStringsAsAuthIdentity(
+    __in_opt PCWSTR pszUserName,
+    __in_opt PCWSTR pszDomainName,
+    __in_opt PCWSTR pszPackedCredentialsString,
+    __deref_out PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiCompareAuthIdentities(
+    __in_opt PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity1,
+    __in_opt PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity2,
+    __out_opt PBOOLEAN SameSuppliedUser,
+    __out_opt PBOOLEAN SameSuppliedIdentity);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiMarshalAuthIdentity(
+    __in PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
+    __out PULONG AuthIdentityLength,
+    __deref_out_bcount(*AuthIdentityLength) PCHAR* AuthIdentityByteArray);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiUnmarshalAuthIdentity(
+    __in PULONG AuthIdentityLength,
+    __in_bcount(AuthIdentityLength) PCHAR AuthIdentityByteArray,
+    __deref_out PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppAuthIdentity);
+
+BOOLEAN
+SEC_ENTRY
+SspiIsPromptingNeeded(
+    __in PULONG ErrorOrNtStatus);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiGetTargetHostName(
+    __in PCWSTR pszTargetName,
+    __deref_out PWSTR* pszHostName);
+
+SECURITY_STATUS
+SEC_ENTRY
+SspiExcludePackage(
+    __in_opt PSEC_WINNT_AUTH_IDENTITY_OPAQUE AuthIdentity,
+    __in PCWSTR pszPackageName,
+    __deref_out PSEC_WINNT_AUTH_IDENTITY_OPAQUE* ppNewAuthIdentity);
+
+#define SEC_WINNT_AUTH_IDENTITY_MARSHALLED 0x04
+#define SEC_WINNT_AUTH_IDENTITY_ONLY 0x08
+
+#endif /* NTDDI_VERSION >= NTDDI_WIN7 */
+
+#define FreeCredentialHandle FreeCredentialsHandle
+struct _SECURITY_FUNCTION_TABLE_W
+{
+    ULONG dwVersion;
+    ENUMERATE_SECURITY_PACKAGES_FN_W EnumerateSecurityPackagesW;
+    QUERY_CREDENTIALS_ATTRIBUTES_FN_W QueryCredentialsAttributesW;
+    ACQUIRE_CREDENTIALS_HANDLE_FN_W AcquireCredentialsHandleW;
+    FREE_CREDENTIALS_HANDLE_FN FreeCredentialsHandle;
+    PVOID 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;
+    PVOID Reserved3;
+    PVOID Reserved4;
+    EXPORT_SECURITY_CONTEXT_FN ExportSecurityContext;
+    IMPORT_SECURITY_CONTEXT_FN_W ImportSecurityContextW;
+    ADD_CREDENTIALS_FN_W AddCredentialsW ;
+    PVOID Reserved8;
+    QUERY_SECURITY_CONTEXT_TOKEN_FN QuerySecurityContextToken;
+    ENCRYPT_MESSAGE_FN EncryptMessage;
+    DECRYPT_MESSAGE_FN DecryptMessage;
+#if OSVER(NTDDI_VERSION) > NTDDI_WIN2K
+    SET_CONTEXT_ATTRIBUTES_FN_W SetContextAttributesW;
+#endif
+#if NTDDI_VERSION > NTDDI_WS03SP1
+    SET_CREDENTIALS_ATTRIBUTES_FN_W SetCredentialsAttributesW;
+#endif
+#if ISSP_MODE != 0
+    CHANGE_PASSWORD_FN_W ChangeAccountPasswordW;
+#else
+    PVOID Reserved9;
+#endif
+};
+
+#endif /* !__SSPI_H__ */

Propchange: trunk/reactos/include/xdk/sspi.h
------------------------------------------------------------------------------
    svn:eol-style = native




More information about the Ros-diffs mailing list