174 lines
3.7 KiB
C
174 lines
3.7 KiB
C
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows NT Security
|
||
|
// Copyright (C) Microsoft Corporation, 1997 - 1999
|
||
|
//
|
||
|
// File: catcache.h
|
||
|
//
|
||
|
// Contents: Catalog Cache for performance improvement to verification path
|
||
|
//
|
||
|
// History: 26-May-98 kirtd Created
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
#if !defined(__CATCACHE_H__)
|
||
|
#define __CATCACHE_H__
|
||
|
|
||
|
//
|
||
|
// This caches state data for catalog member verification indexed by the file
|
||
|
// path to the catalog. This relieves the caller from having to user the
|
||
|
// icky WTD_STATEACTION* stuff in order to achieve the same ends. Someday,
|
||
|
// we will just re-design/re-implement the WVT and Catalog stuff and life
|
||
|
// will be good.
|
||
|
//
|
||
|
|
||
|
#include <lrucache.h>
|
||
|
|
||
|
#define DEFAULT_CATALOG_CACHE_BUCKETS 3
|
||
|
#define DEFAULT_CATALOG_CACHE_MAX_ENTRIES 3
|
||
|
|
||
|
typedef struct _CATALOG_CACHED_STATE {
|
||
|
|
||
|
HANDLE hStateData;
|
||
|
HLRUENTRY hEntry;
|
||
|
|
||
|
} CATALOG_CACHED_STATE, *PCATALOG_CACHED_STATE;
|
||
|
|
||
|
class CCatalogCache
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
//
|
||
|
// Construction
|
||
|
//
|
||
|
|
||
|
inline CCatalogCache ();
|
||
|
inline ~CCatalogCache ();
|
||
|
|
||
|
//
|
||
|
// Initialization
|
||
|
//
|
||
|
|
||
|
BOOL Initialize ();
|
||
|
VOID Uninitialize ();
|
||
|
|
||
|
//
|
||
|
// Cache locking
|
||
|
//
|
||
|
|
||
|
inline VOID LockCache ();
|
||
|
inline VOID UnlockCache ();
|
||
|
|
||
|
//
|
||
|
// Cached State management
|
||
|
//
|
||
|
|
||
|
BOOL IsCacheableWintrustCall (WINTRUST_DATA* pWintrustData);
|
||
|
|
||
|
VOID AdjustWintrustDataToCachedState (
|
||
|
WINTRUST_DATA* pWintrustData,
|
||
|
PCATALOG_CACHED_STATE pCachedState,
|
||
|
BOOL fUndoAdjustment
|
||
|
);
|
||
|
|
||
|
BOOL CreateCachedStateFromWintrustData (
|
||
|
WINTRUST_DATA* pWintrustData,
|
||
|
PCATALOG_CACHED_STATE* ppCachedState
|
||
|
);
|
||
|
|
||
|
VOID ReleaseCachedState (PCATALOG_CACHED_STATE pCachedState);
|
||
|
|
||
|
VOID AddCachedState (PCATALOG_CACHED_STATE pCachedState);
|
||
|
|
||
|
VOID RemoveCachedState (PCATALOG_CACHED_STATE pCachedState);
|
||
|
|
||
|
VOID RemoveCachedState (WINTRUST_DATA* pWintrustData);
|
||
|
|
||
|
VOID FlushCache ();
|
||
|
|
||
|
//
|
||
|
// Cached State lookup
|
||
|
//
|
||
|
|
||
|
PCATALOG_CACHED_STATE FindCachedState (WINTRUST_DATA* pWintrustData);
|
||
|
|
||
|
private:
|
||
|
|
||
|
//
|
||
|
// Lock
|
||
|
//
|
||
|
|
||
|
CRITICAL_SECTION m_Lock;
|
||
|
|
||
|
//
|
||
|
// Cache
|
||
|
//
|
||
|
|
||
|
HLRUCACHE m_hCache;
|
||
|
};
|
||
|
|
||
|
//
|
||
|
// Entry data free function
|
||
|
//
|
||
|
|
||
|
VOID WINAPI
|
||
|
CatalogCacheFreeEntryData (LPVOID pvData);
|
||
|
|
||
|
DWORD WINAPI
|
||
|
CatalogCacheHashIdentifier (PCRYPT_DATA_BLOB pIdentifier);
|
||
|
|
||
|
//
|
||
|
// Inline methods
|
||
|
//
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CCatalogCache::CCatalogCache, public
|
||
|
//
|
||
|
// Synopsis: Constructor
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
inline
|
||
|
CCatalogCache::CCatalogCache ()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CCatalogCache::~CCatalogCache, public
|
||
|
//
|
||
|
// Synopsis: Destructor
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
inline
|
||
|
CCatalogCache::~CCatalogCache ()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CCatalogCache::LockCache, public
|
||
|
//
|
||
|
// Synopsis: lock the cache
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
inline VOID
|
||
|
CCatalogCache::LockCache ()
|
||
|
{
|
||
|
EnterCriticalSection( &m_Lock );
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CCatalogCache::UnlockCache, public
|
||
|
//
|
||
|
// Synopsis: unlock the cache
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
inline VOID
|
||
|
CCatalogCache::UnlockCache ()
|
||
|
{
|
||
|
LeaveCriticalSection( &m_Lock );
|
||
|
}
|
||
|
|
||
|
#endif
|