3 struct _MM_CACHE_SECTION_SEGMENT
;
5 typedef struct _NOCC_BCB
10 struct _NOCC_CACHE_MAP
*Map
;
11 struct _MM_CACHE_SECTION_SEGMENT
*SectionObject
;
12 LARGE_INTEGER FileOffset
;
18 /* Reference counts */
21 LIST_ENTRY ThisFileList
;
24 ULONG ExclusiveWaiter
;
26 } NOCC_BCB
, *PNOCC_BCB
;
28 typedef struct _NOCC_CACHE_MAP
31 LIST_ENTRY AssociatedBcb
;
32 LIST_ENTRY PrivateCacheMaps
;
35 CC_FILE_SIZES FileSizes
;
36 CACHE_MANAGER_CALLBACKS Callbacks
;
39 PFLUSH_TO_LSN FlushToLsn
;
40 ULONG ReadAheadGranularity
;
41 } NOCC_CACHE_MAP
, *PNOCC_CACHE_MAP
;
45 CcPfInitializePrefetcher(
52 IN PMDL MemoryDescriptorList
,
53 IN PFILE_OBJECT FileObject
59 IN PFILE_OBJECT FileObject
,
60 IN PLARGE_INTEGER FileOffset
,
70 CcpUnpinData(PNOCC_BCB Bcb
, BOOLEAN ActuallyRelease
);
74 CcInitializeCacheManager(VOID
);
78 CcShutdownSystem(VOID
);
82 CcInitCacheZeroPage(VOID
);
84 /* Called by section.c */
87 CcFlushImageSection(PSECTION_OBJECT_POINTERS SectionObjectPointer
, MMFLUSH_TYPE FlushType
);
92 (IN PNOCC_CACHE_MAP Map
,
93 IN OPTIONAL PLARGE_INTEGER FileOffset
,
95 OUT OPTIONAL PIO_STATUS_BLOCK IoStatus
,
100 #define CcpFlushCache(M,F,L,I,D) _CcpFlushCache(M,F,L,I,D,__FILE__,__LINE__)
104 CcGetFileSizes(PFILE_OBJECT FileObject
, PCC_FILE_SIZES FileSizes
);
108 CcpCountCacheSections(PNOCC_CACHE_MAP Map
);
112 CcpAcquireFileLock(PNOCC_CACHE_MAP Map
);
116 CcpReleaseFileLock(PNOCC_CACHE_MAP Map
);
119 * Macro for generic cache manage bugchecking. Note that this macro assumes
120 * that the file name including extension is always longer than 4 characters.
122 #define KEBUGCHECKCC \
123 KEBUGCHECKEX(CACHE_MANAGER, \
124 (*(ULONG*)(__FILE__ + sizeof(__FILE__) - 4) << 16) | \
125 (__LINE__ & 0xFFFF), 0, 0, 0)
129 #define CACHE_SINGLE_FILE_MAX (16)
130 #define CACHE_OVERALL_SIZE (32 * 1024 * 1024)
131 #define CACHE_STRIPE VACB_MAPPING_GRANULARITY
132 #define CACHE_SHIFT 18
133 #define CACHE_NUM_SECTIONS (CACHE_OVERALL_SIZE / CACHE_STRIPE)
134 #define CACHE_ROUND_UP(x) (((x) + (CACHE_STRIPE-1)) & ~(CACHE_STRIPE-1))
135 #define CACHE_ROUND_DOWN(x) ((x) & ~(CACHE_STRIPE-1))
136 #define INVALID_CACHE ((ULONG)~0)
138 extern NOCC_BCB CcCacheSections
[CACHE_NUM_SECTIONS
];
139 extern PRTL_BITMAP CcCacheBitmap
;
140 extern FAST_MUTEX CcMutex
;
141 extern KEVENT CcDeleteEvent
;
142 extern ULONG CcCacheClockHand
;
143 extern LIST_ENTRY CcPendingUnmap
;
144 extern KEVENT CcpLazyWriteEvent
;
146 #define CcpLock() _CcpLock(__FILE__,__LINE__)
147 #define CcpUnlock() _CcpUnlock(__FILE__,__LINE__)
149 extern VOID
_CcpLock(const char *file
, int line
);
150 extern VOID
_CcpUnlock(const char *file
, int line
);
152 extern VOID
CcpReferenceCache(ULONG Sector
);
153 extern VOID
CcpDereferenceCache(ULONG Sector
, BOOLEAN Immediate
);
157 (IN PFILE_OBJECT FileObject
,
158 IN PLARGE_INTEGER FileOffset
,
161 OUT PVOID
*BcbResult
,
166 CcpPinMappedData(IN PNOCC_CACHE_MAP Map
,
167 IN PLARGE_INTEGER FileOffset
,