Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

173 lines
5.9 KiB

/*++
Copyright (c) 1997 Microsoft Corporation
Module Name: conmgr.hxx
Abstract:
Manages list of containers (CConList)
Author:
Adriaan Canter (adriaanc) 04-02-97
--*/
#ifndef _CONMGR_HXX
#define _CONMGR_HXX
// Total number of containers is 3: CONTENT, COOKIE and HISTORY.
#define CONTENT 0
#define COOKIE 1
#define HISTORY 2
#define NCONTAINERS 3
// Alias for old names
#define _coContent (_coContainer[CONTENT])
#define _coCookies (_coContainer[COOKIE])
#define _coHistory (_coContainer[HISTORY])
class IE5_REGISTRYSET;
/*-----------------------------------------------------------------------------
Container manager class
---------------------------------------------------------------------------*/
class CConMgr
{
private:
DWORD _dwStatus;
BOOL _fProfilesCapable, _fUsingBackupContainers;
BOOL _fNewCacheVersion;
DWORD _dwModifiedCount; // count last time we polled
HANDLE _hMutexExtensible;// used to Mutex access to extensible containers registry
DWORD _dwLastUnmap; // time of last UnMap sweep
// Array of containers.
CConList ConList;
// Cached (not ref-counted - not needed) special containers
URL_CONTAINER *_coContainer[NCONTAINERS];
// Init function called by constructor.
DWORD Init();
// Initializes containers.
DWORD InitFixedContainers();
// Config info get and set functions.
// Utilities.
DWORD FindIndexFromPrefix(LPCSTR);
BOOL PathPrefixMatch(LPCSTR, LPCSTR);
DWORD ConfigureCache();
DWORD GetCacheConfigInfo();
DWORD SetLegacyCacheConfigInfo();
DWORD GetSysRootCacheConfigInfo();
void IncrementModifiedCount();
DWORD ReadModifiedCount(BOOL fUpdateMemory);
BOOL WasModified(BOOL fUpdateMemory);
DWORD GetExtensibleCacheConfigInfo(BOOL fAlways);
DWORD FindExtensibleContainer(LPCSTR Name);
VOID DiscoverRegistrySettings(IE5_REGISTRYSET* pie5rs);
VOID DiscoverIE3Settings(IE5_REGISTRYSET* pie5rs);
BOOL DiscoverIE4Settings(IE5_REGISTRYSET* pie5rs);
BOOL DiscoverAnyIE5Settings(IE5_REGISTRYSET* pie5rs);
public:
CConMgr();
~CConMgr();
static DWORD DeleteIE3Cache();
// Methods specific to CConMgr.
DWORD LoadContent();
DWORD GetContainerInfo(LPSTR szUrl, LPINTERNET_CACHE_CONTAINER_INFOA pCI, LPDWORD pcbCI);
DWORD GetStatus();
DWORD FreeFindHandle(HANDLE hFind);
BOOL DeleteFileIfNotRegistered(URL_CONTAINER *coDelete);
DWORD CreateContainer(LPCSTR Name, LPCSTR CachePrefix, LPCSTR CachePath, DWORD KBCacheLimit, DWORD dwOptions);
DWORD DeleteContainer(LPCSTR Name, DWORD dwOptions);
HANDLE FindFirstContainer(DWORD *pdwModified, LPINTERNET_CACHE_CONTAINER_INFOA lpContainerInfo, LPDWORD lpdwContainerInfoBufferSize, DWORD dwOptions);
BOOL FindNextContainer(HANDLE hFind, LPINTERNET_CACHE_CONTAINER_INFOA lpContainerInfo, LPDWORD lpdwContainerInfoBufferSize);
#ifdef CHECKLOCK_PARANOID
void CheckNoLocks(DWORD dwThreadId);
#endif
// Methods corresponding to URL_CONTAINER.
DWORD UnlockUrl(LPCSTR);
DWORD DeleteUrl(LPCSTR);
BOOL GetHeaderData(DWORD, LPDWORD);
BOOL SetHeaderData(DWORD, DWORD);
BOOL IncrementHeaderData(DWORD, LPDWORD);
DWORD SetUrlGroup(LPCSTR, DWORD, GROUPID);
DWORD CreateUniqueFile(LPCSTR, DWORD, LPCSTR, LPTSTR, HANDLE*, BOOL = FALSE);
DWORD AddUrl(AddUrlArg*);
DWORD RetrieveUrl(LPCSTR, LPCACHE_ENTRY_INFOA*, LPDWORD, DWORD, DWORD);
DWORD GetUrlInfo(LPCSTR, LPCACHE_ENTRY_INFOA*, LPDWORD, DWORD, DWORD, DWORD);
DWORD GetUrlInfo(LPCSTR, LPCACHE_ENTRY_INFOA, LPDWORD, DWORD, DWORD);
DWORD SetUrlInfo(LPCSTR, LPCACHE_ENTRY_INFOA, DWORD);
DWORD FindNextEntry(HANDLE*, LPCSTR, LPCACHE_ENTRY_INFOA* ppNextCacheEntryInfo, LPDWORD, DWORD, GROUPID, DWORD, DWORD);
DWORD FindNextEntry(HANDLE*, LPCSTR, LPCACHE_ENTRY_INFOA pNextCacheEntryInfo, LPDWORD, DWORD, GROUPID, DWORD);
DWORD CleanupUrls(LPCTSTR szCachePath, DWORD dwFactor, DWORD dwFilter);
DWORD GetUrlInGroup(LPCSTR, GROUPID*, LPDWORD);
VOID SetCacheLimit(LONGLONG, DWORD);
VOID GetCacheInfo(LPCSTR, LPSTR, LONGLONG*);
// Methods corresponding to cache configuration APIs
BOOL SetContentPath(PTSTR pszNewPath);
BOOL GetUrlCacheConfigInfo(LPCACHE_CONFIG_INFO, LPDWORD, DWORD);
BOOL SetUrlCacheConfigInfo(LPCACHE_CONFIG_INFO, DWORD);
// Methods corresponding to cache group APIs
DWORD CreateGroup(DWORD, GROUPID*);
DWORD CreateDefaultGroups();
DWORD DeleteGroup(GROUPID, DWORD);
DWORD FindNextGroup(HANDLE*, DWORD, GROUPID*);
DWORD GetGroupAttributes(
GROUPID, DWORD, LPINTERNET_CACHE_GROUP_INFOA, LPDWORD);
DWORD SetGroupAttributes(GROUPID, DWORD, LPINTERNET_CACHE_GROUP_INFOA );
// notification api
DWORD RegisterCacheNotify(HWND, UINT, GROUPID, DWORD);
DWORD SendCacheNotification(DWORD);
DWORD AddLeakFile (LPCSTR pszFile)
{
return _coContent->AddLeakFile (pszFile);
}
// allows content import to create a directory with a known name
BOOL CreateContentDirWithSecureName( LPSTR szDirName)
{
return _coContainer[CONTENT]->CreateDirWithSecureName( szDirName);
}
// Creates a redirect from TargetUrl to OriginUrl
BOOL CreateContentRedirect( LPSTR szTargetUrl, LPSTR szOriginUrl)
{
return _coContainer[CONTENT]->CreateRedirect( szTargetUrl, szOriginUrl);
}
VOID SetCacheSize(DWORD dwEnum, LONGLONG dlSize)
{
INET_ASSERT(dwEnum<NCONTAINERS);
_coContainer[dwEnum]->SetCacheSize(dlSize);
}
VOID WalkLeakList(DWORD dwEnum)
{
INET_ASSERT(dwEnum<NCONTAINERS);
if (_coContainer[dwEnum]->WalkLeakList())
{
_coContainer[dwEnum]->UnlockContainer();
}
}
};
#endif // _CONMGR_HXX