#pragma once #ifndef CACHE_H #define CACHE_H #include "nameres.h" #include "transprt.h" #include "appctx.h" // Forward declaration for friend statement. class CAssemblyEnum; class CScavenger; // --------------------------------------------------------------------------- // CCache // static cache class // --------------------------------------------------------------------------- class CCache { friend CAssemblyEnum; friend CScavenger; public: // Name res apis // Inserts entry to name resolution cache. static HRESULT InsertNameResEntry(IApplicationContext *pAppCtx, IAssemblyName *pNameSrc, IAssemblyName *pNameTrgt); // Retrieves name res entry from name resolution cache. static HRESULT RetrieveNameResEntry(IApplicationContext *pAppCtx, IAssemblyName *pNameSrc, CNameRes **ppNameRes); // Retrieves name object target from name resolution cache. static HRESULT RetrieveNameResTarget(IApplicationContext *pAppCtx, IAssemblyName *pNameSrc, IAssemblyName **ppNameTrgt); // Trans cache apis // Inserts entry to transport cache. static HRESULT InsertTransCacheEntry(IAssemblyName *pName, LPTSTR szPath, DWORD dwKBSize, DWORD dwFlags, DWORD dwCommitFlags, DWORD dwPinBits, CTransCache **ppTransCache); // Retrieves transport cache entry from transport cache. static HRESULT RetrieveTransCacheEntry(IAssemblyName *pName, DWORD dwFlags, CTransCache **ppTransCache); // Retrieves assembly in global cache with maximum // revision/build number based on name passed in. static HRESULT GetGlobalMax(IAssemblyName *pName, IAssemblyName **ppNameGlobal, CTransCache **ppTransCache); // Tests for presence of originator static BOOL IsStronglyNamed(IAssemblyName *pName); // Tests for presence of custom data static BOOL IsCustom(IAssemblyName *pName); // get assembly name object from nameres entry static HRESULT NameFromNameResEntry( CNameRes* pNRes, IAssemblyName **ppName); // get name res entry from name static HRESULT NameResEntryFromName(IApplicationContext *pAppCtx, IAssemblyName *pName, CNameRes **ppNameRes); // get trans cache entry from naming object. static HRESULT TransCacheEntryFromName(IAssemblyName *pName, DWORD dwFlags, CTransCache **ppTransCache); // get assembly name object from transcache entry. static HRESULT NameFromTransCacheEntry( CTransCache *pTC, IAssemblyName **ppName); protected: // Determines cache index from name and flags. static HRESULT ResolveCacheIndex(IAssemblyName *pName, DWORD dwFlags, LPDWORD pdwCacheId); // flush NameRes entries for deleted TransCache item static HRESULT FlushNameResEntries(CTransCache* pDeletedTransCache); // safe for delete? static BOOL IsSafeForDeletion(CTransCache* pTC); }; STDAPI NukeDownloadedCache(); STDAPI DeleteAssemblyFromTransportCache( LPCTSTR lpszCmdLine, DWORD *pDelCount ); #endif // CACHE_H