2020-09-30 17:12:32 +02:00

174 lines
2.8 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 crap 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