|
|
//+-----------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (c) Microsoft Corporation 1992 - 1996
//
// File: ctxtmgr.h
//
// Contents: Structures and prototyps for Kerberos context list
//
//
// History: 17-April-1996 Created MikeSw
//
//------------------------------------------------------------------------
#ifndef __CTXTMGR_H__
#define __CTXTMGR_H__
//
// All global variables declared as EXTERN will be allocated in the file
// that defines CTXTMGR_ALLOCATE
//
#ifdef EXTERN
#undef EXTERN
#endif
#ifdef CTXTMGR_ALLOCATE
#define EXTERN
#else
#define EXTERN extern
#endif
#ifdef WIN32_CHICAGO
EXTERN CRITICAL_SECTION KerbContextResource; #else // WIN32_CHICAGO
EXTERN RTL_RESOURCE KerbContextResource; #endif // WIN32_CHICAGO
#define KERB_USERLIST_COUNT (16) // count of lists
EXTERN KERBEROS_LIST KerbContextList[ KERB_USERLIST_COUNT ]; EXTERN BOOLEAN KerberosContextsInitialized;
#define KerbGetContextHandle(_Context_) ((LSA_SEC_HANDLE)(_Context_))
//
// Context flags - these are attributes of a context and are stored in
// the ContextAttributes field of a KERB_CONTEXT.
//
#define KERB_CONTEXT_MAPPED 0x1
#define KERB_CONTEXT_OUTBOUND 0x2
#define KERB_CONTEXT_INBOUND 0x4
#define KERB_CONTEXT_USED_SUPPLIED_CREDS 0x8
#define KERB_CONTEXT_USER_TO_USER 0x10
#define KERB_CONTEXT_REQ_SERVER_NAME 0x20
#define KERB_CONTEXT_REQ_SERVER_REALM 0x40
#define KERB_CONTEXT_IMPORTED 0x80
#define KERB_CONTEXT_EXPORTED 0x100
#define KERB_CONTEXT_USING_CREDMAN 0x200
//
// NOTICE: The logon session resource, credential resource, and context
// resource must all be acquired carefully to prevent deadlock. They
// can only be acquired in this order:
//
// 1. Logon Sessions
// 2. Credentials
// 3. Contexts
//
#if DBG
#ifdef WIN32_CHICAGO
#define KerbWriteLockContexts() \
{ \ DebugLog((DEB_TRACE_LOCKS,"Write locking Contexts\n")); \ EnterCriticalSection(&KerbContextResource); \ KerbGlobalContextsLocked = GetCurrentThreadId(); \ } #define KerbReadLockContexts() \
{ \ DebugLog((DEB_TRACE_LOCKS,"Read locking Contexts\n")); \ EnterCriticalSection(&KerbContextResource); \ KerbGlobalContextsLocked = GetCurrentThreadId(); \ } #define KerbUnlockContexts() \
{ \ DebugLog((DEB_TRACE_LOCKS,"Unlocking Contexts\n")); \ KerbGlobalContextsLocked = 0; \ LeaveCriticalSection(&KerbContextResource); \ } #else // WIN32_CHICAGO
#define KerbWriteLockContexts() \
{ \ DebugLog((DEB_TRACE_LOCKS,"Write locking Contexts\n")); \ RtlAcquireResourceExclusive(&KerbContextResource,TRUE); \ KerbGlobalContextsLocked = GetCurrentThreadId(); \ } #define KerbReadLockContexts() \
{ \ DebugLog((DEB_TRACE_LOCKS,"Read locking Contexts\n")); \ RtlAcquireResourceShared(&KerbContextResource, TRUE); \ KerbGlobalContextsLocked = GetCurrentThreadId(); \ } #define KerbUnlockContexts() \
{ \ DebugLog((DEB_TRACE_LOCKS,"Unlocking Contexts\n")); \ KerbGlobalContextsLocked = 0; \ RtlReleaseResource(&KerbContextResource); \ } #endif // WIN32_CHICAGO
#else
#ifdef WIN32_CHICAGO
#define KerbWriteLockContexts() \
EnterCriticalSection(&KerbContextResource) #define KerbReadLockContexts() \
EnterCriticalSection(&KerbContextResource) #define KerbUnlockContexts() \
LeaveCriticalSection(&KerbContextResource) #else // WIN32_CHICAGO
#define KerbWriteLockContexts() \
RtlAcquireResourceExclusive(&KerbContextResource,TRUE); #define KerbReadLockContexts() \
RtlAcquireResourceShared(&KerbContextResource, TRUE); #define KerbUnlockContexts() \
RtlReleaseResource(&KerbContextResource); #endif // WIN32_CHICAGO
#endif
NTSTATUS KerbInitContextList( VOID );
VOID KerbFreeContextList( VOID );
NTSTATUS KerbAllocateContext( PKERB_CONTEXT * NewContext );
NTSTATUS KerbInsertContext( IN PKERB_CONTEXT Context );
SECURITY_STATUS KerbReferenceContext( IN LSA_SEC_HANDLE ContextHandle, IN BOOLEAN RemoveFromList, OUT PKERB_CONTEXT * FoundContext );
VOID KerbDereferenceContext( IN PKERB_CONTEXT Context );
VOID KerbReferenceContextByPointer( IN PKERB_CONTEXT Context, IN BOOLEAN RemoveFromList );
NTSTATUS KerbCreateClientContext( IN PKERB_LOGON_SESSION LogonSession, IN PKERB_CREDENTIAL Credential, IN OPTIONAL PKERB_CREDMAN_CRED CredManCredentials, IN OPTIONAL PKERB_TICKET_CACHE_ENTRY TicketCacheEntry, IN OPTIONAL PUNICODE_STRING TargetName, IN ULONG Nonce, IN ULONG ContextFlags, IN ULONG ContextAttributes, IN OPTIONAL PKERB_ENCRYPTION_KEY SubSessionKey, OUT PKERB_CONTEXT * NewContext, OUT PTimeStamp ContextLifetime );
NTSTATUS KerbCreateServerContext( IN PKERB_LOGON_SESSION LogonSession, IN PKERB_CREDENTIAL Credential, IN PKERB_ENCRYPTED_TICKET InternalTicket, IN PKERB_AP_REQUEST ApRequest, IN PKERB_ENCRYPTION_KEY SessionKey, IN PLUID LogonId, IN OUT PSID * UserSid, IN ULONG ContextFlags, IN ULONG ContextAttributes, IN ULONG Nonce, IN ULONG ReceiveNonce, IN OUT PHANDLE TokenHandle, IN PUNICODE_STRING ClientName, IN PUNICODE_STRING ClientDomain, OUT PKERB_CONTEXT * NewContext, OUT PTimeStamp ContextLifetime );
NTSTATUS KerbUpdateServerContext( IN PKERB_CONTEXT Context, IN PKERB_ENCRYPTED_TICKET InternalTicket, IN PKERB_AP_REQUEST ApRequest, IN PKERB_ENCRYPTION_KEY SessionKey, IN PLUID LogonId, IN OUT PSID * UserSid, IN ULONG ContextFlags, IN ULONG ContextAttributes, IN ULONG Nonce, IN ULONG ReceiveNonce, IN OUT PHANDLE TokenHandle, IN PUNICODE_STRING ClientName, IN PUNICODE_STRING ClientDomain, OUT PTimeStamp ContextLifetime );
NTSTATUS KerbCreateEmptyContext( IN PKERB_CREDENTIAL Credential, IN ULONG ContextFlags, IN ULONG ContextAttributes, IN PLUID LogonId, OUT PKERB_CONTEXT * NewContext, OUT PTimeStamp ContextLifetime );
NTSTATUS KerbMapContext( IN PKERB_CONTEXT Context, OUT PBOOLEAN MappedContext, OUT PSecBuffer ContextData );
NTSTATUS KerbCreateUserModeContext( IN LSA_SEC_HANDLE ContextHandle, IN PSecBuffer MarshalledContext, OUT PKERB_CONTEXT * NewContext );
SECURITY_STATUS KerbReferenceContextByLsaHandle( IN LSA_SEC_HANDLE ContextHandle, IN BOOLEAN RemoveFromList, OUT PKERB_CONTEXT * FoundContext );
NTSTATUS KerbUpdateClientContext( IN PKERB_CONTEXT Context, IN PKERB_TICKET_CACHE_ENTRY TicketCacheEntry, IN ULONG Nonce, IN ULONG ReceiveNonce, IN ULONG ContextFlags, IN ULONG ContextAttribs, IN OPTIONAL PKERB_ENCRYPTION_KEY SubSessionKey, OUT PTimeStamp ContextLifetime );
NTSTATUS KerbCreateSKeyEntry( IN KERB_ENCRYPTION_KEY* pSessionKey, IN FILETIME* pExpireTime );
NTSTATUS KerbDoesSKeyExist( IN KERB_ENCRYPTION_KEY* pKey, OUT BOOLEAN* pbExist );
NTSTATUS KerbEqualKey( IN KERB_ENCRYPTION_KEY* pKeyFoo, IN KERB_ENCRYPTION_KEY* pKeyBar, OUT BOOLEAN* pbEqual );
NTSTATUS KerbInsertSKey( IN KERB_SESSION_KEY_ENTRY* pSKeyEntry );
VOID KerbTrimSKeyList( VOID );
VOID KerbNetworkServiceSKeyListCleanupCallback( IN VOID* pContext, IN BOOLEAN bTimeOut );
NTSTATUS KerbCreateSKeyTimer( VOID );
VOID KerbFreeSKeyTimer( VOID );
VOID KerbFreeSKeyEntry( IN KERB_SESSION_KEY_ENTRY* pSKeyEntry );
NTSTATUS KerbProcessTargetNames( IN PUNICODE_STRING TargetName, IN OPTIONAL PUNICODE_STRING SuppTargetName, IN ULONG Flags, IN OUT ULONG *ProcessFlags, OUT PKERB_INTERNAL_NAME * FinalTarget, OUT PUNICODE_STRING TargetRealm, OUT OPTIONAL PKERB_SPN_CACHE_ENTRY * SpnCacheEntry );
#define KERB_CRACK_NAME_USE_WKSTA_REALM 0x1
#define KERB_CRACK_NAME_REALM_SUPPLIED 0x2
#endif // __CTXTMGR_H__
|