/*++ Copyright (c) 1994 Microsoft Corporation Module Name: cachedef.h Abstract: contains data definitions for cache code. Author: Madan Appiah (madana) 12-Apr-1995 Environment: User Mode - Win32 Revision History: --*/ #ifndef _CACHEDEF_ #define _CACHEDEF_ #ifdef __cplusplus extern "C" { #endif // // C++ inline code definition for retail build only. // #if DBG #define INLINE #else #define INLINE inline #endif #define CACHE_SIGNATURE L"Internet Url Cache memory mapped file, Version 1.0" #define MAX_SIG_SIZE (sizeof(CACHE_SIGNATURE) / sizeof(WCHAR)) #define MAX_URL_LENGTH 128 #define INTERNAL_FILENAME_LENGTH 12 // 8.3 file name #define MAX_URL_ENTRIES 8192 // 8K entries #define ALLOC_BIT_MAP_SIZE \ ((MAX_URL_ENTRIES / (sizeof(DWORD) * 8)) + 1) #define MAX_MAPFILE_SIZE 32 * 64 * 1024 // 2meg #define MEMMAP_FILE_NAME L"MEMMAP.DAT" #define CACHE_FILES L"CA*.*" // // grow memory mapped file by 4 pages. // #define PAGE_SIZE 4096 // 4K #define ALLOC_PAGES 16 // // default global parameter values. // #define DEFAULT_FRESHNESS 24 * 60 * 60 // secs. #define DEFAULT_CLEANUP_INTERVAL 24 * 60 * 60 // secs. #define DEFAULT_CLEANUP_FACTOR 25 // 25 % of the cache space. #define DEFAULT_CLEANUP_TIME 0 // mid-night // // Url cleanup, score computational factors. // #define SCORE_FACTOR 50 #define PHASEOUT_FACTOR 20 #define ACCESS_FRE_FACTOR 10 #define EXPIRE_FACTOR 20 #define ACCESS_FRE_CUTOFF 10 // 10 accesses. #define PHASEOUT_TIME (3 * 24 * 60 * 60 * (LONGLONG)10000000) // 3 days in 1000 nono secs. // // extension used for temporary cache file. // #define TEMP_FILE_EXTENSION L"tmp" // // registry key and value names for presistent URL management. // #define CACHE_KEY \ L"System\\CurrentControlSet\\Services\\inetaccs\\parameters\\cache" // // cache parameters // #define CACHE_FRESHNESS_INTERVAL_VALUE L"FreshnessInterval" #define CACHE_FRESHNESS_INTERVAL_VALUE_TYPE REG_DWORD #define CACHE_CLEANUP_INTERVAL_VALUE L"CleanupInterval" #define CACHE_CLEANUP_INTERVAL_VALUE_TYPE REG_DWORD #define CACHE_CLEANUP_FACTOR_VALUE L"CleanupFactor" #define CACHE_CLEANUP_FACTOR_VALUE_TYPE REG_DWORD #define CACHE_CLEANUP_TIME_VALUE L"CleanupTime" #define CACHE_CLEANUP_TIME_VALUE_TYPE REG_DWORD #define CACHE_PERSISTENT_VALUE L"Persistent" #define CACHE_PERSISTENT_VALUE_TYPE REG_DWORD #define CACHE_DEBUGFLAG_VALUE L"DebugFlag" #define CACHE_DEBUGFLAG_VALUE_TYPE REG_DWORD #define PATH_CONNECT_STRING L"\\" // // multiple URL containters can be configured under the above key such // as : // // Cache\Paths\Path1 // Cache\Paths\Path2 // ... // // each containter will have the following two parameters. // #define CACHE_PATHS_KEY L"Paths" #define CACHE_PATH_VALUE L"CachePath" #define CACHE_PATH_VALUE_TYPE REG_EXPAND_SZ #define CACHE_LIMIT_VALUE L"CacheLimit" #define CACHE_LIMIT_VALUE_TYPE REG_DWORD // // cache global variable lock. // #define LOCK_CACHE() EnterCriticalSection( &GlobalCacheCritSect ) #define UNLOCK_CACHE() LeaveCriticalSection( &GlobalCacheCritSect ) // // scavenger thread shutdown timeout. // #define THREAD_TERMINATION_TIMEOUT 60000 // in msecs. 60 secs // // scavenging period. // #define SCAVENGER_TIMEOUT 15 * 60 * 1000 // in msecs, 15 mins. // // parameter check macros. // #define IsBadUrl( _x_ ) \ ( IsBadStringPtrA( _x_, MAX_URL_LENGTH) ) #define IsBadReadFileName( _x_ ) \ ( IsBadStringPtrW( _x_, MAX_PATH ) ) #define IsBadWriteFileName( _x_ ) \ ( IsBadWritePtr( _x_, MAX_PATH * sizeof(WCHAR) ) ) #define IsBadWriteBoolPtr( _x_ ) \ ( IsBadWritePtr( _x_, sizeof(BOOL) ) ) #define IsBadReadUrlInfo( _x_ ) \ ( IsBadReadPtr( _x_, sizeof(URL_INFO) ) ) #define IsBadWriteUrlInfo( _x_ ) \ ( IsBadWritePtr( _x_, sizeof(URL_INFO) ) ) // // memory map file header. // typedef struct _MEMMAP_HEADER { WCHAR FileSignature[MAX_SIG_SIZE]; DWORD NumUrlInternalEntries; DWORD AllocationBitMap[ALLOC_BIT_MAP_SIZE]; } MEMMAP_HEADER, *LPMEMMAP_HEADER; // // URL Object. // typedef struct _URL_FILEMAP_ENTRY { CHAR UrlName[MAX_URL_LENGTH + 1]; WCHAR InternalFileName[INTERNAL_FILENAME_LENGTH + 1]; LONGLONG FileSize; LONGLONG LastModifiedTime; LONGLONG LastAccessedTime; LONGLONG ExpireTime; DWORD cbHeaders; BOOL IsDefaultExpire; DWORD NumAccessed; DWORD NumReferences; BOOL DeletePending; DWORD Score; } URL_FILEMAP_ENTRY, *LPURL_FILEMAP_ENTRY; #define MAX_MAPPING_SIZE \ (sizeof(MEMMAP_HEADER) + \ sizeof(URL_INTERNAL_ENTRY) * MAX_URL_ENTRIES + \ 64) // for worst alignment #ifdef __cplusplus } #endif #endif // _CACHEDEF_