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