//+----------------------------------------------------------------------- // // Microsoft Windows // // Copyright (c) Microsoft Corporation 1992 - 1996 // // File: bndcache.h // // Contents: Prototypes and types for binding handle cache // // // History: 13-August-1996 Created MikeSw // //------------------------------------------------------------------------ #ifndef __BNDCACHE_H__ #define __BNDCACHE_H__ // // All global variables declared as EXTERN will be allocated in the file // that defines TKTCACHE_ALLOCATE // #ifdef EXTERN #undef EXTERN #endif #ifdef BNDCACHE_ALLOCATE #define EXTERN #else #define EXTERN extern #endif #ifdef __cplusplus extern "C" { #endif // __cplusplus typedef struct _LSAP_LIST { LIST_ENTRY List; RTL_CRITICAL_SECTION Lock; } LSAP_LIST, *PLSAP_LIST; EXTERN BOOLEAN LsapBindingCacheInitialized; EXTERN LSAP_LIST LsapBindingCache; #define LsapLockList(_List_) RtlEnterCriticalSection(&(_List_)->Lock) #define LsapUnlockList(_List_) RtlLeaveCriticalSection(&(_List_)->Lock) typedef struct _LSAP_LIST_ENTRY { LIST_ENTRY Next; ULONG ReferenceCount; } LSAP_LIST_ENTRY, *PLSAP_LIST_ENTRY; typedef struct _LSAP_BINDING_CACHE_ENTRY { LSAP_LIST_ENTRY ListEntry; TimeStamp LastUsed; UNICODE_STRING RealmName; LPWSTR ServerName; LPWSTR ServerPrincipalName; PVOID ClientContext; LSA_HANDLE PolicyHandle; } LSAP_BINDING_CACHE_ENTRY, *PLSAP_BINDING_CACHE_ENTRY; VOID LsapDereferenceBindingCacheEntry( IN PLSAP_BINDING_CACHE_ENTRY BindingCacheEntry ); VOID LsapReferenceBindingCacheEntry( IN PLSAP_BINDING_CACHE_ENTRY BindingCacheEntry, IN BOOLEAN RemoveFromList ); NTSTATUS LsapInitBindingCache( VOID ); VOID LsapCleanupBindingCache( VOID ); PLSAP_BINDING_CACHE_ENTRY LsapLocateBindingCacheEntry( IN PUNICODE_STRING RealmName, IN BOOLEAN RemoveFromCache ); VOID LsapFreeBindingCacheEntry( IN PLSAP_BINDING_CACHE_ENTRY BindingCacheEntry ); VOID LsapRemoveBindingCacheEntry( IN PLSAP_BINDING_CACHE_ENTRY CacheEntry ); NTSTATUS LsapCacheBinding( IN PUNICODE_STRING RealmName, IN PLSA_HANDLE Handle, IN OUT LPWSTR * ServerName, IN OUT LPWSTR * ServerPrincipalName, IN OUT PVOID * ClientContext, OUT PLSAP_BINDING_CACHE_ENTRY * NewCacheEntry ); NTSTATUS LsapRefreshBindingCacheEntry( IN PLSAP_BINDING_CACHE_ENTRY CacheEntry ); // // Functions for manipulating lsap lists // NTSTATUS LsapInitializeList( IN PLSAP_LIST List ); VOID LsapFreeList( IN PLSAP_LIST List ); VOID LsapInsertListEntry( IN PLSAP_LIST_ENTRY ListEntry, IN PLSAP_LIST List ); VOID LsapReferenceListEntry( IN PLSAP_LIST List, IN PLSAP_LIST_ENTRY ListEntry, IN BOOLEAN RemoveFromList ); BOOLEAN LsapDereferenceListEntry( IN PLSAP_LIST_ENTRY ListEntry, IN PLSAP_LIST List ); VOID LsapInitializeListEntry( IN OUT PLSAP_LIST_ENTRY ListEntry ); #ifdef __cplusplus } #endif // __cplusplus #endif // __TKTCACHE_H__