cache.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 8k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. //
  2. // cache.h: Declares data, defines and struct types for the
  3. //          cache list module.
  4. //
  5. //
  6. #ifndef __CACHE_H__
  7. #define __CACHE_H__
  8. /////////////////////////////////////////////////////////////
  9. //  
  10. //  Generic cache structures
  11. //
  12. /////////////////////////////////////////////////////////////
  13. typedef void (CALLBACK *PFNFREEVALUE)(void * pv, HWND hwndOwner);
  14. typedef struct tagCACHE
  15.     {
  16.     CRITICAL_SECTION cs;
  17.     HDSA hdsa;          // Actual list of CITEMs
  18.     HDPA hdpa;          // Sorted ptr list
  19.     HDPA hdpaFree;      // Free list
  20.     int iPrev;          // Index into hdpa.  Used by FindFirst/FindNext
  21.     int atomPrev;
  22.     } CACHE;
  23. // Generic cache APIs
  24. //
  25. BOOL    PUBLIC Cache_Init (CACHE  * pcache);
  26. void    PUBLIC Cache_InitCS(CACHE  * pcache);
  27. void    PUBLIC Cache_Term (CACHE  * pcache, HWND hwndOwner, PFNFREEVALUE pfnFree);
  28. void    PUBLIC Cache_DeleteCS(CACHE  * pcache);
  29. BOOL    PUBLIC Cache_AddItem (CACHE  * pcache, int atomKey, LPVOID pvValue);
  30. int     PUBLIC Cache_DeleteItem (CACHE  * pcache, int atomKey, BOOL bNuke, HWND hwndOwner, PFNFREEVALUE pfnFree);
  31. BOOL    PUBLIC Cache_ReplaceItem (CACHE  * pcache, int atomKey, LPVOID pvBuf, int cbBuf);
  32. LPVOID  PUBLIC Cache_GetPtr (CACHE  * pcache, int atomKey);
  33. BOOL    PUBLIC Cache_GetItem(CACHE  * pcache, int atomKey, LPVOID pvBuf, int cbBuf);
  34. int     PUBLIC Cache_FindFirstKey(CACHE  * pcache);
  35. int     PUBLIC Cache_FindNextKey(CACHE  * pcache, int atomPrev);
  36. UINT    PUBLIC Cache_GetRefCount(CACHE  * pcache, int atomKey);
  37. /////////////////////////////////////////////////////////////
  38. //  
  39. //  Cached briefcase handle list
  40. //
  41. /////////////////////////////////////////////////////////////
  42. // Cache briefcase structure 
  43. //
  44. typedef struct tagCBS
  45.     {
  46.     int      atomBrf;           // Useful for reference
  47.     HBRFCASE hbrf;              // Opened on add, closed on delete
  48.     HWND     hwndParent;        // Volatile
  49.     PABORTEVT pabortevt;        // Abort event object
  50.     UINT     uFlags;            // One of CBSF_ flags
  51.     } CBS, * PCBS;
  52. #define CBSF_RUNWIZARD      0x0001
  53. #define CBSF_LFNDRIVE       0x0002
  54. extern CACHE g_cacheCBS;        // Briefcase structure cache
  55. void CALLBACK CBS_Free(LPVOID lpv, HWND hwnd);
  56. DEBUG_CODE( void PUBLIC CBS_DumpAll(); )
  57. //      BOOL CBS_Init(void);
  58. //
  59. #define CBS_Init()                      Cache_Init(&g_cacheCBS)
  60. //      void CBS_InitCS(void);
  61. //
  62. #define CBS_InitCS()                    Cache_InitCS(&g_cacheCBS)
  63. //      void CBS_Term(HWND hwndOwner);
  64. //
  65. #define CBS_Term(hwndOwner)             Cache_Term(&g_cacheCBS, hwndOwner, CBS_Free)
  66. //      void CBS_DeleteCS(void);
  67. //
  68. #define CBS_DeleteCS()                  Cache_DeleteCS(&g_cacheCBS)
  69. //      HRESULT CBS_Add(PCBS * ppcbs, int atomPath, HWND hwndOwner);
  70. //          Must call CBS_Delete for each call to this guy.
  71. //
  72. HRESULT PUBLIC CBS_Add(PCBS * ppcbs, int atomPath, HWND hwndOwner);
  73. //      CBS FAR * CBS_Get(int atomPath);
  74. //          Must call CBS_Delete for each call to this guy.
  75. //
  76. #define CBS_Get(atomPath)               Cache_GetPtr(&g_cacheCBS, atomPath)
  77. //      int CBS_Delete(int atomPath, HWND hwndOwner);
  78. //          Returns reference count (0 if deleted)
  79. //
  80. #define CBS_Delete(atomPath, hwndOwner) Cache_DeleteItem(&g_cacheCBS, atomPath, FALSE, hwndOwner, CBS_Free)
  81. //      int CBS_Nuke(int atomPath, HWND hwndOwner);
  82. //          Returns 0
  83. //
  84. #define CBS_Nuke(atomPath, hwndOwner)   Cache_DeleteItem(&g_cacheCBS, atomPath, TRUE, hwndOwner, CBS_Free)
  85. /////////////////////////////////////////////////////////////
  86. //  
  87. //  Cached reclist 
  88. //
  89. /////////////////////////////////////////////////////////////
  90. // Cache reclist structure
  91. //
  92. typedef struct tagCRL
  93.     {
  94.     int atomPath;           // Inside path for this CRL
  95.     int atomOutside;        // Outside path of the sync copy pair
  96.     UINT idsStatus;         // resource ID for status string
  97.     PABORTEVT pabortevt;    // Abort event object, owned by CBS
  98.     HBRFCASE hbrf;          // Briefcase this reclist belongs to
  99.     int atomBrf;
  100.     PRECLIST lprl;          // Created
  101.     PFOLDERTWINLIST lpftl;  // Created.  May be NULL
  102.     UINT ucUse;             // Use count (dirty entry is not cleaned until 
  103.                             //   ucUse == 0)
  104.     UINT uFlags;            // CRLF_* flags
  105.     } CRL, * PCRL;
  106. // Flags for CRL
  107. #define CRLF_DIRTY          0x00000001      // cache item is dirty
  108. #define CRLF_NUKE           0x00000002      // nuke when use count is 0
  109. #define CRLF_SUBFOLDERTWIN  0x00000004      // folder is subfolder of subtree twin
  110. #define CRLF_ISFOLDER       0x00000008      // atomPath is a folder
  111. #define CRLF_ISLFNDRIVE     0x00000010      // is on an LFN drive
  112. #define CRLF_ORPHAN         0x00000020      // item is orphan
  113. extern CACHE g_cacheCRL;        // Reclist cache
  114. void CALLBACK CRL_Free(LPVOID lpv, HWND hwndOwner);
  115. DEBUG_CODE( void PUBLIC CRL_DumpAll(); )
  116. #define CRL_IsOrphan(pcrl)              IsFlagSet((pcrl)->uFlags, CRLF_ORPHAN)
  117. #define CRL_IsSubfolderTwin(pcrl)       IsFlagSet((pcrl)->uFlags, CRLF_SUBFOLDERTWIN)
  118. #define CRL_IsFolder(pcrl)              IsFlagSet((pcrl)->uFlags, CRLF_ISFOLDER)
  119. //      BOOL CRL_Init(void);
  120. //
  121. #define CRL_Init()                      Cache_Init(&g_cacheCRL)
  122. //      void CRL_InitCS(void);
  123. //
  124. #define CRL_InitCS()                    Cache_InitCS(&g_cacheCRL)
  125. //      void CRL_Term(void);
  126. //
  127. #define CRL_Term()             Cache_Term(&g_cacheCRL, NULL, CRL_Free)
  128. //      void CRL_DeleteCS(void);
  129. //
  130. #define CRL_DeleteCS()                  Cache_DeleteCS(&g_cacheCRL)
  131. BOOL PUBLIC IsSubfolderTwin(HBRFCASE hbrf, LPCTSTR pcszPath);
  132. //      HRESULT CRL_Add(PCBS pcbs, int atomPath);
  133. //          Must call CRL_Delete for each call to this function.
  134. //
  135. HRESULT     PUBLIC CRL_Add(PCBS pcbs, int atomPath);
  136. //      HRESULT CRL_Get(int atomPath, PCRL * ppcrl);
  137. //          Must call CRL_Delete for each successful call to this function.
  138. //
  139. HRESULT     PUBLIC CRL_Get(int atomPath, PCRL * ppcrl);
  140. //      HRESULT CRL_Replace(int atomPath);
  141. //
  142. HRESULT     PUBLIC CRL_Replace(int atomPath);
  143. //      void CRL_Delete(int atomPath);
  144. //
  145. void        PUBLIC CRL_Delete(int atomPath);
  146. //      int CRL_Nuke(int atomPath);
  147. //
  148. void        PUBLIC CRL_Nuke(int atomPath);
  149. //      BOOL CRL_Dirty(int atomPath);
  150. BOOL        PUBLIC CRL_Dirty(int atomPath, int atomCabinetFolder, LONG lEvent, LPBOOL pbRefresh);
  151. //      void CRL_DirtyAll(int atomBrf);
  152. //
  153. void        PUBLIC CRL_DirtyAll(int atomBrf);
  154. /////////////////////////////////////////////////////////////
  155. //  
  156. //  Cached briefcase paths
  157. //
  158. /////////////////////////////////////////////////////////////
  159. typedef struct tagCPATH
  160.     {
  161.     int atomPath;           // Useful for reference 
  162.     } CPATH;
  163. extern CACHE g_cacheCPATH;        // Volume ID cache
  164. void CALLBACK CPATH_Free(LPVOID lpv, HWND hwndOwner);
  165. DEBUG_CODE( void PUBLIC CPATH_DumpAll(); )
  166. //      BOOL CPATH_Init(void);
  167. //
  168. #define CPATH_Init()                    Cache_Init(&g_cacheCPATH)
  169. //      void CPATH_InitCS(void);
  170. //
  171. #define CPATH_InitCS()                  Cache_InitCS(&g_cacheCPATH)
  172. //      void CPATH_Term();
  173. //
  174. #define CPATH_Term()                    Cache_Term(&g_cacheCPATH, NULL, CPATH_Free)
  175. //      void CPATH_DeleteCS(void);
  176. //
  177. #define CPATH_DeleteCS()                Cache_DeleteCS(&g_cacheCPATH)
  178. //      CPATH FAR * CPATH_Replace(int atomPath);
  179. //          Must call CPATH_Delete for each call to this function.
  180. //
  181. CPATH  *  PUBLIC CPATH_Replace(int atomPath);
  182. //      UINT CPATH_GetLocality(LPCSTR pszPath, LPSTR pszBuf);
  183. //
  184. UINT    PUBLIC CPATH_GetLocality(LPCTSTR pszPath, LPTSTR pszBuf);
  185. #endif // __CACHE_H__