218 lines
6.6 KiB
C
218 lines
6.6 KiB
C
|
//+-----------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
//
|
||
|
// Copyright (c) Microsoft Corporation 1992 - 1996
|
||
|
//
|
||
|
// File: kerbdefs.h
|
||
|
//
|
||
|
// Contents: defines for all internal Kerberos lists
|
||
|
//
|
||
|
//
|
||
|
// History: 03-May-1999 ChandanS Created
|
||
|
//
|
||
|
//------------------------------------------------------------------------
|
||
|
|
||
|
#ifndef __KERBDEFS_H__
|
||
|
#define __KERBDEFS_H__
|
||
|
|
||
|
//
|
||
|
// All Kerberos list structures are defined here
|
||
|
//
|
||
|
|
||
|
typedef struct _KERBEROS_LIST {
|
||
|
LIST_ENTRY List;
|
||
|
RTL_CRITICAL_SECTION Lock;
|
||
|
} KERBEROS_LIST, *PKERBEROS_LIST;
|
||
|
|
||
|
typedef struct _KERBEROS_LIST_ENTRY {
|
||
|
LIST_ENTRY Next;
|
||
|
ULONG ReferenceCount;
|
||
|
} KERBEROS_LIST_ENTRY, *PKERBEROS_LIST_ENTRY;
|
||
|
|
||
|
typedef struct _KERB_TICKET_CACHE_ENTRY {
|
||
|
KERBEROS_LIST_ENTRY ListEntry;
|
||
|
volatile LONG Linked;
|
||
|
PKERB_INTERNAL_NAME ServiceName;
|
||
|
PKERB_INTERNAL_NAME TargetName;
|
||
|
UNICODE_STRING DomainName;
|
||
|
UNICODE_STRING TargetDomainName;
|
||
|
UNICODE_STRING AltTargetDomainName;
|
||
|
UNICODE_STRING ClientDomainName;
|
||
|
PKERB_INTERNAL_NAME ClientName;
|
||
|
ULONG TicketFlags;
|
||
|
ULONG CacheFlags;
|
||
|
KERB_ENCRYPTION_KEY SessionKey;
|
||
|
TimeStamp KeyExpirationTime;
|
||
|
TimeStamp StartTime;
|
||
|
TimeStamp EndTime;
|
||
|
TimeStamp RenewUntil;
|
||
|
KERB_TICKET Ticket;
|
||
|
TimeStamp TimeSkew;
|
||
|
} KERB_TICKET_CACHE_ENTRY, *PKERB_TICKET_CACHE_ENTRY;
|
||
|
|
||
|
typedef struct _KERB_TICKET_CACHE {
|
||
|
LIST_ENTRY CacheEntries;
|
||
|
} KERB_TICKET_CACHE, *PKERB_TICKET_CACHE;
|
||
|
|
||
|
|
||
|
#define CSP_DATA_INITIALIZED 0x01
|
||
|
#define CONTEXT_INITIALIZED_WITH_CRED_MAN_CREDS 0x02
|
||
|
#define CONTEXT_INITIALIZED_WITH_ACH 0x04
|
||
|
|
||
|
typedef struct _KERB_PUBLIC_KEY_CREDENTIALS {
|
||
|
UNICODE_STRING Pin;
|
||
|
LUID LogonId; // logon id used in impersonation...
|
||
|
PCCERT_CONTEXT CertContext;
|
||
|
HCRYPTPROV hProv;
|
||
|
ULONG InitializationInfo;
|
||
|
ULONG CspDataLength;
|
||
|
BYTE CspData[1];
|
||
|
} KERB_PUBLIC_KEY_CREDENTIALS, *PKERB_PUBLIC_KEY_CREDENTIALS;
|
||
|
|
||
|
typedef struct _KERB_PRIMARY_CREDENTIAL {
|
||
|
UNICODE_STRING UserName;
|
||
|
UNICODE_STRING DomainName;
|
||
|
UNICODE_STRING ClearPassword; // this is only present until a ticket has been obtained.
|
||
|
|
||
|
UNICODE_STRING OldUserName; // original user name in explicit
|
||
|
UNICODE_STRING OldDomainName; // original domain name in explicit cred
|
||
|
NT_OWF_PASSWORD OldHashPassword; // hash of encrypted ClearPassword
|
||
|
|
||
|
PKERB_STORED_CREDENTIAL Passwords;
|
||
|
PKERB_STORED_CREDENTIAL OldPasswords;
|
||
|
KERB_TICKET_CACHE ServerTicketCache;
|
||
|
KERB_TICKET_CACHE S4UTicketCache;
|
||
|
KERB_TICKET_CACHE AuthenticationTicketCache;
|
||
|
PKERB_PUBLIC_KEY_CREDENTIALS PublicKeyCreds;
|
||
|
} KERB_PRIMARY_CREDENTIAL, *PKERB_PRIMARY_CREDENTIAL;
|
||
|
|
||
|
typedef struct _KERB_LOGON_SESSION {
|
||
|
KERBEROS_LIST_ENTRY ListEntry;
|
||
|
LIST_ENTRY SspCredentials;
|
||
|
KERBEROS_LIST CredmanCredentials;
|
||
|
LUID LogonId; // constant
|
||
|
TimeStamp Lifetime;
|
||
|
RTL_CRITICAL_SECTION Lock;
|
||
|
KERB_PRIMARY_CREDENTIAL PrimaryCredentials;
|
||
|
ULONG LogonSessionFlags;
|
||
|
} KERB_LOGON_SESSION, *PKERB_LOGON_SESSION;
|
||
|
|
||
|
|
||
|
#define KERB_CREDENTIAL_TAG_ACTIVE (ULONG)'AdrC'
|
||
|
#define KERB_CREDENTIAL_TAG_DELETE (ULONG)'DdrC'
|
||
|
|
||
|
typedef struct _KERB_CREDENTIAL {
|
||
|
KERBEROS_LIST_ENTRY ListEntry;
|
||
|
ULONG HandleCount;
|
||
|
LIST_ENTRY NextForThisLogonSession;
|
||
|
LUID LogonId; // constant
|
||
|
TimeStamp Lifetime;
|
||
|
UNICODE_STRING CredentialName;
|
||
|
ULONG CredentialFlags;
|
||
|
ULONG ClientProcess; // constant
|
||
|
PKERB_PRIMARY_CREDENTIAL SuppliedCredentials;
|
||
|
PKERB_AUTHORIZATION_DATA AuthData;
|
||
|
ULONG CredentialTag;
|
||
|
} KERB_CREDENTIAL, *PKERB_CREDENTIAL;
|
||
|
|
||
|
typedef struct _KERB_CREDMAN_CRED {
|
||
|
KERBEROS_LIST_ENTRY ListEntry;
|
||
|
ULONG CredentialFlags;
|
||
|
UNICODE_STRING CredmanUserName; // added since TGT information can overwrite primary credentials...
|
||
|
UNICODE_STRING CredmanDomainName;
|
||
|
PKERB_PRIMARY_CREDENTIAL SuppliedCredentials;
|
||
|
} KERB_CREDMAN_CRED, *PKERB_CREDMAN_CRED;
|
||
|
|
||
|
|
||
|
typedef enum _KERB_CONTEXT_STATE {
|
||
|
IdleState,
|
||
|
TgtRequestSentState,
|
||
|
TgtReplySentState,
|
||
|
ApRequestSentState,
|
||
|
ApReplySentState,
|
||
|
AuthenticatedState,
|
||
|
ErrorMessageSentState,
|
||
|
InvalidState
|
||
|
} KERB_CONTEXT_STATE, *PKERB_CONTEXT_STATE;
|
||
|
|
||
|
|
||
|
#define KERB_CONTEXT_TAG_ACTIVE (ULONG)'AxtC'
|
||
|
#define KERB_CONTEXT_TAG_DELETE (ULONG)'DxtC'
|
||
|
|
||
|
typedef struct _KERB_CONTEXT {
|
||
|
KERBEROS_LIST_ENTRY ListEntry;
|
||
|
TimeStamp Lifetime; // end time/expiration time
|
||
|
TimeStamp RenewTime; // time to renew until
|
||
|
TimeStamp StartTime;
|
||
|
UNICODE_STRING ClientName;
|
||
|
UNICODE_STRING ClientRealm;
|
||
|
union {
|
||
|
ULONG ClientProcess;
|
||
|
LSA_SEC_HANDLE LsaContextHandle;
|
||
|
};
|
||
|
LUID LogonId;
|
||
|
HANDLE TokenHandle;
|
||
|
ULONG_PTR CredentialHandle;
|
||
|
KERB_ENCRYPTION_KEY SessionKey;
|
||
|
ULONG Nonce;
|
||
|
ULONG ReceiveNonce;
|
||
|
ULONG ContextFlags;
|
||
|
ULONG ContextAttributes;
|
||
|
ULONG EncryptionType;
|
||
|
PSID UserSid;
|
||
|
KERB_CONTEXT_STATE ContextState;
|
||
|
ULONG Retries;
|
||
|
KERB_ENCRYPTION_KEY TicketKey;
|
||
|
PKERB_TICKET_CACHE_ENTRY TicketCacheEntry; // for clients, is ticket to server, for servers, is TGT used in user-to-user
|
||
|
UNICODE_STRING ClientPrincipalName;
|
||
|
UNICODE_STRING ServerPrincipalName;
|
||
|
PKERB_CREDMAN_CRED CredManCredentials;
|
||
|
|
||
|
//
|
||
|
// marshalled target info for DFS/RDR.
|
||
|
//
|
||
|
|
||
|
PBYTE pbMarshalledTargetInfo;
|
||
|
ULONG cbMarshalledTargetInfo;
|
||
|
|
||
|
ULONG ContextTag;
|
||
|
} KERB_CONTEXT, *PKERB_CONTEXT;
|
||
|
|
||
|
typedef struct _KERB_PACKED_CONTEXT {
|
||
|
ULONG ContextType ; // Indicates the type of the context
|
||
|
ULONG Pad; // Pad data
|
||
|
TimeStamp Lifetime; // Matches basic context above
|
||
|
TimeStamp RenewTime ;
|
||
|
TimeStamp StartTime;
|
||
|
UNICODE_STRING32 ClientName ;
|
||
|
UNICODE_STRING32 ClientRealm ;
|
||
|
ULONG LsaContextHandle ;
|
||
|
LUID LogonId ;
|
||
|
ULONG TokenHandle ;
|
||
|
ULONG CredentialHandle ;
|
||
|
ULONG SessionKeyType ;
|
||
|
ULONG SessionKeyOffset ;
|
||
|
ULONG SessionKeyLength ;
|
||
|
ULONG Nonce ;
|
||
|
ULONG ReceiveNonce ;
|
||
|
ULONG ContextFlags ;
|
||
|
ULONG ContextAttributes ;
|
||
|
ULONG EncryptionType ;
|
||
|
KERB_CONTEXT_STATE ContextState ;
|
||
|
ULONG Retries ;
|
||
|
ULONG MarshalledTargetInfo; // offset
|
||
|
ULONG MarshalledTargetInfoLength;
|
||
|
} KERB_PACKED_CONTEXT, * PKERB_PACKED_CONTEXT ;
|
||
|
|
||
|
typedef struct _KERB_SESSION_KEY_ENTRY {
|
||
|
LIST_ENTRY ListEntry;
|
||
|
KERB_ENCRYPTION_KEY SessionKey;
|
||
|
FILETIME ExpireTime; // time when SessionKey expires
|
||
|
} KERB_SESSION_KEY_ENTRY, * PKERB_SESSION_KEY_ENTRY;
|
||
|
|
||
|
#define KERB_PACKED_CONTEXT_MAP 0
|
||
|
#define KERB_PACKED_CONTEXT_EXPORT 1
|
||
|
|
||
|
#endif // __KERBDEFS_H_
|