524 lines
18 KiB
C
524 lines
18 KiB
C
/*++
|
|
|
|
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_
|
|
|
|
//
|
|
// C++ inline code definition for retail build only.
|
|
//
|
|
|
|
#if DBG
|
|
#undef CHECKLOCK_NORMAL
|
|
#undef CHECKLOCK_PARANOID
|
|
#define INLINE
|
|
#else
|
|
#define INLINE inline
|
|
#endif
|
|
|
|
#define PAGE_SIZE 4096 // Grow memory mapped file by 1 page.
|
|
#define ALLOC_PAGES 4 // was 2
|
|
#define HEADER_ENTRY_SIZE ALLOC_PAGES * PAGE_SIZE
|
|
#define NORMAL_ENTRY_SIZE 128
|
|
|
|
#define DEFAULT_CLEANUP_FACTOR 10 // % free goal once cache quota exceeded
|
|
#define MAX_EXEMPT_PERCENTAGE 70
|
|
|
|
#define MEMMAP_FILE_NAME TEXT("index.dat")
|
|
#define DESKTOPINI_FILE_NAME TEXT("desktop.ini")
|
|
|
|
#define DEFAULT_FILE_EXTENSION ""
|
|
|
|
// Cache configuration and signature.
|
|
#define CACHE_SIGNATURE_VALUE TEXT("Signature")
|
|
#define CACHE_SIGNATURE TEXT("Client UrlCache MMF Ver 5.2")
|
|
#define NUM_HEADER_DATA_DWORDS (CACHE_HEADER_DATA_LAST + 1)
|
|
#define MAX_SIG_SIZE (sizeof(CACHE_SIGNATURE) / sizeof(TCHAR))
|
|
|
|
// The following values parametrize the schema for URL entries.
|
|
#define ENTRY_COPYSIZE_IE5 \
|
|
(sizeof(IE5_URL_FILEMAP_ENTRY) - sizeof(FILEMAP_ENTRY))
|
|
#define ENTRY_VERSION_IE5 0
|
|
#define ENTRY_COPYSIZE_IE6 \
|
|
(sizeof(IE6_URL_FILEMAP_ENTRY) - sizeof(FILEMAP_ENTRY))
|
|
#define ENTRY_VERSION_IE6 0x10
|
|
|
|
#define ENTRY_COPYSIZE_CURRENT ENTRY_COPYSIZE_IE6
|
|
#define ENTRY_VERSION_CURRENT ENTRY_VERSION_IE6
|
|
|
|
// If IE5-IE? sees an entry with low bits of version set, it will be placed
|
|
// on async fixup list rather than being destroyed.
|
|
#define ENTRY_VERSION_NONCOMPAT_MASK 0x0F
|
|
|
|
|
|
// Roundup
|
|
#define ROUNDUPTOPOWEROF2(bytesize, powerof2) (((bytesize) + (powerof2) - 1) & ~((powerof2) - 1))
|
|
#define ROUNDUPBLOCKS(bytesize) ((bytesize + NORMAL_ENTRY_SIZE-1) & ~(NORMAL_ENTRY_SIZE-1))
|
|
#define ROUNDUPDWORD(bytesize) ((bytesize + sizeof(DWORD)-1) & ~(sizeof(DWORD)-1))
|
|
#define ROUNDUPPAGE(bytesize) ((bytesize + PAGE_SIZE-1) & ~(PAGE_SIZE-1))
|
|
#define NUMBLOCKS(bytesize) (bytesize / NORMAL_ENTRY_SIZE)
|
|
|
|
// Power of 2 macros
|
|
#define ISPOWEROF2(val) (!((val) & ((val)-1)))
|
|
#define ASSERT_ISPOWEROF2(val) INET_ASSERT(ISPOWEROF2(val))
|
|
|
|
#define URL_CACHE_VERSION_NUM sizeof(CACHE_ENTRY_INFO);
|
|
|
|
// Default profiles directory under %SystemRoot%.
|
|
#define DEFAULT_PROFILES_DIRECTORY TEXT("Profiles")
|
|
|
|
|
|
//
|
|
// Registry key and value names for persistent URL management.
|
|
//
|
|
|
|
// BUGBUG - wasting space.
|
|
|
|
#define MS_BASE TEXT("Software\\Microsoft")
|
|
|
|
#define CV_BASE MS_BASE TEXT("\\Windows\\CurrentVersion")
|
|
|
|
#define EX_BASE TEXT("\\Explorer")
|
|
|
|
#define IS_BASE TEXT("\\Internet Settings")
|
|
|
|
#define CACHE_T TEXT("\\Cache")
|
|
|
|
#define SHELL_FOLDER_KEY CV_BASE EX_BASE TEXT("\\Shell Folders")
|
|
#define USER_SHELL_FOLDER_KEY CV_BASE EX_BASE TEXT("\\User Shell Folders")
|
|
#define CACHE5_KEY CV_BASE IS_BASE TEXT("\\5.0") CACHE_T
|
|
#define IDENTITIES_KEY CV_BASE IS_BASE TEXT("\\5.0\\Identities")
|
|
#define OLD_CACHE_KEY CV_BASE IS_BASE CACHE_T
|
|
#define CACHE_PATHS_FULL_KEY CV_BASE IS_BASE CACHE_T TEXT("\\Paths")
|
|
#define RUN_ONCE_KEY CV_BASE TEXT("\\RunOnce")
|
|
#define PROFILELESS_USF_KEY TEXT(".Default\\") USER_SHELL_FOLDER_KEY
|
|
#define CONTENT_CACHE_HARD_NAME TEXT("Content.IE5")
|
|
#define OLD_VERSION_KEY MS_BASE TEXT("\\IE Setup\\SETUP")
|
|
#define OLD_VERSION_VALUE TEXT("UpgradeFromIESysFile")
|
|
|
|
|
|
//
|
|
// Cache parameters
|
|
//
|
|
#ifndef unix
|
|
#define PATH_CONNECT_STRING TEXT("\\")
|
|
#define PATH_CONNECT_CHAR TEXT('\\')
|
|
#define ALLFILES_WILDCARD_STRING TEXT("*.*")
|
|
#define UNIX_RETURN_IF_READONLY_CACHE
|
|
#define UNIX_RETURN_ERR_IF_READONLY_CACHE(error)
|
|
#define UNIX_NORMALIZE_PATH_ALWAYS(szOrigPath, szEnvVar)
|
|
#define UNIX_NORMALIZE_IF_CACHE_PATH(szOrigPath, szEnvVar, szKeyName)
|
|
#else
|
|
#define PATH_CONNECT_STRING TEXT("/")
|
|
#define PATH_CONNECT_CHAR TEXT('/')
|
|
#define ALLFILES_WILDCARD_STRING TEXT("*")
|
|
#define UNIX_RETURN_IF_READONLY_CACHE { \
|
|
if (g_ReadOnlyCaches) \
|
|
return; \
|
|
}
|
|
#define UNIX_RETURN_ERR_IF_READONLY_CACHE(error) { \
|
|
if (g_ReadOnlyCaches)\
|
|
return (error); \
|
|
}
|
|
#define UNIX_NORMALIZE_PATH_ALWAYS(szOrigPath, szEnvVar) \
|
|
UnixNormalisePath(szOrigPath, szEnvVar);
|
|
#define UNIX_NORMALIZE_IF_CACHE_PATH(szOrigPath, szEnvVar, szKeyName) \
|
|
UnixNormaliseIfCachePath(szOrigPath, szEnvVar, szKeyName);
|
|
|
|
#define UNIX_SHARED_CACHE_PATH TEXT("%HOME%/.microsoft")
|
|
#endif /* !unix */
|
|
|
|
#define CACHE_PERSISTENT TEXT("Persistent")
|
|
|
|
// Retrieval methods
|
|
#define RETRIEVE_WITHOUT_CHECKS 0
|
|
#define RETRIEVE_WITH_CHECKS 1
|
|
#define RETRIEVE_WITH_ALLOCATION 2
|
|
#define RETRIEVE_ONLY_FILENAME 4
|
|
#define RETRIEVE_ONLY_STRUCT_INFO 8
|
|
//
|
|
// 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.
|
|
//
|
|
|
|
// CConMgr related defines.
|
|
#define CACHE_PATHS_KEY TEXT("Paths")
|
|
#define CACHE_PATH_VALUE TEXT("CachePath")
|
|
#define CACHE_PATH_VALUE_TYPE REG_SZ
|
|
#define CACHE_LIMIT_VALUE TEXT("CacheLimit")
|
|
#define CACHE_LIMIT_VALUE_TYPE REG_DWORD
|
|
#define CACHE_OPTIONS_VALUE TEXT("CacheOptions")
|
|
#define CACHE_OPTIONS_VALUE_TYPE REG_DWORD
|
|
#define CACHE_PATCH_VALUE TEXT("CacheRepair")
|
|
#define CACHE_PATCH_VALUE_TYPE REG_DWORD
|
|
|
|
#define EXTENSIBLE_CACHE_PATH_KEY "Extensible Cache"
|
|
#define CONTENT_PATH_KEY "Content"
|
|
#define COOKIE_PATH_KEY "Cookies"
|
|
#define HISTORY_PATH_KEY "History"
|
|
#define URL_HISTORY_KEY "Url History"
|
|
|
|
#define PER_USER_KEY "PerUserItem"
|
|
#define PROFILES_ENABLED_VALUE "Network\\Logon"
|
|
#define PROFILES_ENABLED "UserProfiles"
|
|
#define PROFILES_PATH_VALUE CV_BASE "\\ProfileList"
|
|
#define PROFILES_PATH "ProfileImagePath"
|
|
|
|
#define CONTENT_PREFIX ""
|
|
#define COOKIE_PREFIX "Cookie:"
|
|
#define HISTORY_PREFIX "Visited:"
|
|
|
|
#define CONTENT_VERSION_SUBDIR "Content.IE5"
|
|
#define IE3_COOKIES_PATH_KEY OLD_CACHE_KEY TEXT("\\Special Paths\\Cookies")
|
|
#define IE3_HISTORY_PATH_KEY OLD_CACHE_KEY TEXT("\\Special Paths\\History")
|
|
#define IE3_PATCHED_USER_KEY TEXT("Patched User")
|
|
#define CACHE_SPECIAL_PATHS_KEY TEXT("Special Paths")
|
|
#define CACHE_DIRECTORY_VALUE TEXT("Directory")
|
|
#define CACHE_DIRECTORY_TYPE REG_EXPAND_SZ
|
|
#define CACHE_NEWDIR_VALUE TEXT("NewDirectory")
|
|
#define CACHE_NEWDIR_TYPE REG_EXPAND_SZ
|
|
#define CACHE_PREFIX_VALUE TEXT("CachePrefix")
|
|
#define CACHE_PREFIX_MAP_VALUE "PrefixMap"
|
|
#define CACHE_VOLUME_LABLE_VALUE "VolumeLabel"
|
|
#define CACHE_VOLUME_TITLE_VALUE "VolumeTitle"
|
|
#define CACHE_PREFIX_TYPE REG_SZ
|
|
#define NEW_DIR TEXT("NewDirectory")
|
|
#define USER_PROFILE_SZ "%USERPROFILE%"
|
|
#define USER_PROFILE_LEN (sizeof(USER_PROFILE_SZ) - 1)
|
|
|
|
// URL_CONTAINER related defines.
|
|
#define DEF_NUM_PATHS 4
|
|
#define DEF_CACHE_LIMIT (2048 * DEF_NUM_PATHS)
|
|
#define NO_SPECIAL_CONTAINER 0xffffffff
|
|
#define MAX_ENTRY_SIZE 0xFFFF
|
|
#define LONGLONG_TO_FILETIME( _p_ ) ((FILETIME *)(_p_))
|
|
|
|
// Content limit defines.
|
|
#define OLD_CONTENT_QUOTA_DEFAULT_DISK_FRACTION 64
|
|
#define NEW_CONTENT_QUOTA_DEFAULT_DISK_FRACTION 32
|
|
#define CONTENT_QUOTA_ADJUST_CHECK "QuotaAdjustCheck"
|
|
|
|
// CInstCon related defines.
|
|
#define INTERNET_CACHE_CONTAINER_PREFIXMAP INTERNET_CACHE_CONTAINER_RESERVED1
|
|
#define MAX_FILE_SIZE_TO_MIGRATE 50000
|
|
#define MAX_EXTENSION_LEN 3
|
|
|
|
|
|
// FileMgr related defines.
|
|
#define DEFAULT_DIR_TABLE_GROW_SIZE 4
|
|
#define DEFAULT_MAX_DIRS 32
|
|
#define MAX_FILES_PER_CACHE_DIRECTORY 1024
|
|
#define MAX_COLLISSION_ATTEMPTS 150
|
|
#define INSTALLED_DIRECTORY_KEY 0xFF
|
|
#define NOT_A_CACHE_SUBDIRECTORY 0XFE
|
|
|
|
#ifdef CHECKLOCK_PARANOID
|
|
void CheckEnterCritical(CRITICAL_SECTION *_cs);
|
|
void CheckLeaveCritical(CRITICAL_SECTION *_cs);
|
|
#define ENTERCRITICAL CheckEnterCritical
|
|
#define LEAVECRITICAL CheckLeaveCritical
|
|
#else
|
|
#define ENTERCRITICAL EnterCriticalSection
|
|
#define LEAVECRITICAL LeaveCriticalSection
|
|
#endif
|
|
|
|
// Cache global variable lock -- this should not be entered while holding
|
|
// lower-level locks like URL_CONTAINER::LockContainer cross-process mutex.
|
|
#define LOCK_CACHE() ENTERCRITICAL( &GlobalCacheCritSect )
|
|
#define UNLOCK_CACHE() LEAVECRITICAL( &GlobalCacheCritSect )
|
|
|
|
//
|
|
// parameter check macros.
|
|
//
|
|
|
|
#define IsBadUrl( _x_ ) IsBadStringPtrA( _x_, (DWORD) -1)
|
|
#define IsBadUrlW( _x_ ) IsBadStringPtrW( _x_, (DWORD) -1)
|
|
#define IsBadReadFileName( _x_ ) IsBadStringPtr( _x_, MAX_PATH )
|
|
#define IsBadWriteFileName( _x_ ) IsBadWritePtr( (PVOID)_x_, MAX_PATH)
|
|
#define IsBadWriteBoolPtr( _x_ ) IsBadWritePtr( _x_, sizeof(BOOL))
|
|
#define IsBadReadUrlInfo( _x_ ) IsBadReadPtr( _x_, sizeof(CACHE_ENTRY_INFO))
|
|
#define IsBadWriteUrlInfo( _x_, _y_ ) IsBadWritePtr( _x_, _y_ )
|
|
|
|
#define MAX_URL_ENTRIES (BIT_MAP_ARRAY_SIZE * sizeof(DWORD) * 8)
|
|
|
|
#define OFFSET_TO_POINTER( _ep_, _offset_) \
|
|
(LPVOID)((LPBYTE)(_ep_) + (_offset_))
|
|
|
|
|
|
#define FIND_FLAGS_OLD_SEMANTICS 0x1
|
|
#define FIND_FLAGS_RETRIEVE_ONLY_STRUCT_INFO 0x2
|
|
#define FIND_FLAGS_RETRIEVE_ONLY_FIXED_AND_FILENAME 0x04
|
|
|
|
//---------------- BUGBUG : for History Only -------------------------------
|
|
#define MAX_FILETIME 0x7fffffffffffffff
|
|
#define MAX_DOSTIME -1
|
|
//---------------- END BUGBUG ----------------------------------------------
|
|
|
|
|
|
//
|
|
// ----------------- Allocation entry header -----------------------------//
|
|
//
|
|
|
|
#define SIG_FREE 0xbadf00d
|
|
#define SIG_ALLOC 0xdeadbeef
|
|
|
|
#define SIG_URL ' LRU' // URL_FILEMAP_ENTRY
|
|
#define SIG_REDIR 'RDER' // REDR_FILEMAP_ENTRY
|
|
#define SIG_LEAK 'KAEL' // URL_FILEMAP_ENTRY
|
|
#define SIG_GLIST 'GLST' // LIST_GROUP_ENTRY
|
|
|
|
// signatures for entries placed on fixup list
|
|
#define SIG_UPDATE ' DPU' // URL_FILEMAP_ENTRY
|
|
#define SIG_DELETE ' LED' // URL_FILEMAP_ENTRY
|
|
|
|
enum MemMapStatus
|
|
{
|
|
MEMMAP_STATUS_OPENED_EXISTING = 0,
|
|
MEMMAP_STATUS_REINITIALIZED = 1
|
|
};
|
|
|
|
typedef struct FILEMAP_ENTRY
|
|
{
|
|
DWORD dwSig;
|
|
DWORD nBlocks;
|
|
}
|
|
*LPFILEMAP_ENTRY;
|
|
|
|
struct LIST_FILEMAP_ENTRY : FILEMAP_ENTRY
|
|
{
|
|
DWORD dwNext; // offset to next element in list
|
|
DWORD nBlock; // sequence number for this block
|
|
};
|
|
|
|
//
|
|
// URL entry
|
|
//
|
|
|
|
struct IE5_URL_FILEMAP_ENTRY : FILEMAP_ENTRY
|
|
{
|
|
LONGLONG LastModifiedTime; // must be LONGLONG
|
|
LONGLONG LastAccessedTime; // should be DWORD
|
|
DWORD dostExpireTime;
|
|
DWORD dostPostCheckTime;
|
|
|
|
DWORD dwFileSize;
|
|
DWORD dwRedirHashItemOffset; // ask DanpoZ
|
|
|
|
DWORD dwGroupOffset;
|
|
|
|
union
|
|
{
|
|
DWORD dwExemptDelta; // for SIG_URL
|
|
DWORD dwNextLeak; // for SIG_LEAK
|
|
};
|
|
|
|
DWORD CopySize; // should be WORD
|
|
DWORD UrlNameOffset; // should be WORD
|
|
|
|
BYTE DirIndex; // subdirectory bucket
|
|
BYTE bSyncState; // automatic sync mode state
|
|
BYTE bVerCreate; // cache version that created this entry
|
|
BYTE bVerUpdate; // cache version last updated this entry (unused)
|
|
|
|
DWORD InternalFileNameOffset; // should be WORD
|
|
DWORD CacheEntryType;
|
|
DWORD HeaderInfoOffset; // should be WORD
|
|
DWORD HeaderInfoSize; // should be WORD
|
|
DWORD FileExtensionOffset; // should be WORD
|
|
DWORD dostLastSyncTime;
|
|
DWORD NumAccessed; // should be WORD
|
|
DWORD NumReferences; // should be WORD
|
|
DWORD dostFileCreationTime; // should be LONGLONG?
|
|
|
|
// Do not extend this structure; use inheritance instead.
|
|
};
|
|
|
|
struct IE6_URL_FILEMAP_ENTRY : IE5_URL_FILEMAP_ENTRY
|
|
{
|
|
DWORD dwIdentity;
|
|
|
|
DWORD GetIdentity()
|
|
{
|
|
return (bVerCreate>=ENTRY_VERSION_IE6) ? dwIdentity : 0;
|
|
}
|
|
};
|
|
|
|
typedef IE6_URL_FILEMAP_ENTRY URL_FILEMAP_ENTRY, *LPURL_FILEMAP_ENTRY;
|
|
|
|
// FILETIME is measured in 100-ns units.
|
|
#define FILETIME_SEC ((LONGLONG) 10000000)
|
|
#define FILETIME_DAY (FILETIME_SEC * 60 * 60 * 24)
|
|
|
|
// Possible values for bSyncState:
|
|
#define SYNCSTATE_VOLATILE 0 // once zero, stuck at zero
|
|
#define SYNCSTATE_IMAGE 1 // eligible to increment after MIN_AGESYNC
|
|
#define SYNCSTATE_STATIC 6 // max value
|
|
|
|
// Parameters controlling transition from _IMAGE to _VOLATILE.
|
|
// #define MIN_AGESYNC ((LONGLONG) 5 * 60 * 10000000) // 5 min in filetime
|
|
#define MIN_AGESYNC (FILETIME_DAY * 7)
|
|
|
|
//
|
|
// Redirect Entry
|
|
//
|
|
|
|
struct REDIR_FILEMAP_ENTRY : FILEMAP_ENTRY
|
|
{
|
|
DWORD dwItemOffset; // offset to hash table item of destination URL
|
|
DWORD dwHashValue; // destination URL hash value (BUGBUG: collisions?)
|
|
char szUrl[4]; // original URL, can occupy more bytes
|
|
};
|
|
|
|
//
|
|
// Group Record
|
|
//
|
|
|
|
typedef struct GROUP_ENTRY
|
|
{
|
|
GROUPID gid;
|
|
DWORD dwGroupFlags;
|
|
DWORD dwGroupType;
|
|
LONGLONG llDiskUsage; // in Bytes (Actual Usage)
|
|
DWORD dwDiskQuota; // in KB
|
|
DWORD dwGroupNameOffset;
|
|
DWORD dwGroupStorageOffset;
|
|
}
|
|
*LPGROUP_ENTRY;
|
|
|
|
|
|
#define PAGE_SIZE_FOR_GROUPS (PAGE_SIZE - sizeof(FILEMAP_ENTRY))
|
|
#define GROUPS_PER_PAGE PAGE_SIZE_FOR_GROUPS / sizeof(GROUP_ENTRY)
|
|
|
|
typedef struct _GROUP_DATA_ENTRY
|
|
{
|
|
CHAR szName[GROUPNAME_MAX_LENGTH];
|
|
DWORD dwOwnerStorage[GROUP_OWNER_STORAGE_SIZE];
|
|
DWORD dwOffsetNext;
|
|
} GROUP_DATA_ENTRY, *LPGROUP_DATA_ENTRY;
|
|
|
|
#define GROUPS_DATA_PER_PAGE PAGE_SIZE_FOR_GROUPS / sizeof(GROUP_DATA_ENTRY)
|
|
|
|
//
|
|
// so the sizeof(GROUPS_PAGE_FILEMAP_ENTRY) = PAGE_SIZE
|
|
// this is the allocation unit for groups entry
|
|
//
|
|
typedef struct _GROUPS_ALLOC_FILEMAP_ENTRY : FILEMAP_ENTRY
|
|
{
|
|
BYTE pGroupBlock[PAGE_SIZE_FOR_GROUPS];
|
|
} GROUPS_ALLOC_FILEMAP_ENTRY, *LPGROUPS_ALLOC_FILEMAP_ENTRY;
|
|
|
|
|
|
typedef struct _LIST_GROUP_ENTRY
|
|
{
|
|
DWORD dwGroupOffset;
|
|
DWORD dwNext;
|
|
|
|
} LIST_GROUP_ENTRY, *LPLIST_GROUP_ENTRY;
|
|
|
|
#define LIST_GROUPS_PER_PAGE PAGE_SIZE_FOR_GROUPS / sizeof(LIST_GROUP_ENTRY)
|
|
|
|
|
|
#define SIGNATURE_CONTAINER_FIND 0xFAFAFAFA
|
|
#define SIG_CACHE_FIND 0XFBFBFBFB
|
|
#define SIG_GROUP_FIND 0XFCFCFCFC
|
|
|
|
typedef struct _CONTAINER_FIND_FIRST_HANDLE
|
|
{
|
|
DWORD dwSignature;
|
|
DWORD dwNumContainers;
|
|
DWORD dwContainer;
|
|
LPSTR *ppNames;
|
|
LPSTR *ppPrefixes;
|
|
LPSTR *ppLabels;
|
|
LPSTR *ppTitles;
|
|
// DATA follows for Names, Prefixes, Volume labels and Volume titles.
|
|
} CONTAINER_FIND_FIRST_HANDLE, *LPCONTAINER_FIND_FIRST_HANDLE;
|
|
|
|
typedef struct _CACHE_FIND_FIRST_HANDLE
|
|
{
|
|
DWORD dwSig;
|
|
BOOL fFixed;
|
|
DWORD nIdx;
|
|
DWORD dwHandle;
|
|
GROUPID GroupId;
|
|
DWORD dwFilter;
|
|
DWORD dwFlags;
|
|
} CACHE_FIND_FIRST_HANDLE, *LPCACHE_FIND_FIRST_HANDLE;
|
|
|
|
typedef struct _CACHE_STREAM_CONTEXT_HANDLE
|
|
{
|
|
HANDLE FileHandle;
|
|
LPSTR SourceUrlName;
|
|
} CACHE_STREAM_CONTEXT_HANDLE, *LPCACHE_STREAM_CONTEXT_HANDLE;
|
|
|
|
typedef struct _GROUP_FIND_FIRST_HANDLE : CACHE_FIND_FIRST_HANDLE
|
|
{
|
|
DWORD dwLastItemOffset;
|
|
} GROUP_FIND_FIRST_HANDLE, *LPGROUP_FIND_FIRST_HANDLE;
|
|
|
|
#define OFFSET_NO_MORE_GROUP -1
|
|
#define GID_INDEX_TO_NEXT_PAGE -1
|
|
#define OFFSET_TO_NEXT_PAGE -1
|
|
|
|
#define GID_MASK 0x0fffffffffffffff
|
|
#define GID_STICKY_BIT 0x1000000000000000
|
|
|
|
#define IsStickyGroup(gid) (gid & GID_STICKY_BIT)
|
|
#define SetStickyBit(gid) (gid | GID_STICKY_BIT)
|
|
#define IsInvalidGroup(gid) (gid & 0xE000000000000000)
|
|
|
|
//
|
|
// RealFileSize() - given the actual filesize,
|
|
// this macro computes the approximate real space that a file takes up
|
|
// on the disk. It only takes care of rounding to the cluster size
|
|
// It doesn't take into account any per-file overhead used in the filesystem
|
|
//
|
|
|
|
#define RealFileSize(fs) ((LONGLONG) (fs + _ClusterSizeMinusOne) & _ClusterSizeMask)
|
|
|
|
#define MUTEX_DBG_TIMEOUT 5 * 1000 // 5 secs.
|
|
|
|
#define URLCACHE_OP_SET_STICKY 1
|
|
#define URLCACHE_OP_UNSET_STICKY 2
|
|
|
|
#ifdef unix
|
|
extern BOOL CreateAtomicCacheLockFile(BOOL *pfReadOnlyCaches, char **pszLockingHost);
|
|
extern BOOL DeleteAtomicCacheLockFile();
|
|
extern void UnixNormalisePath(LPTSTR pszOrigPath, LPCTSTR pszEnvVar);
|
|
extern void UnixNormaliseIfCachePath(LPTSTR pszOrigPath, LPCTSTR pszEnvVar,LPCTSTR szKeyName);
|
|
extern int CopyDir(const char* src_dir, const char* dest_dir);
|
|
#endif /* unix */
|
|
|
|
extern VOID FileTime2DosTime(FILETIME, DWORD*);
|
|
extern VOID DosTime2FileTime(DWORD, FILETIME*);
|
|
|
|
#endif // _CACHEDEF_
|
|
|