Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

331 lines
7.9 KiB

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