3 typedef struct _NOCC_BCB
8 struct _NOCC_CACHE_MAP
*Map
;
9 PROS_SECTION_OBJECT SectionObject
;
10 LARGE_INTEGER FileOffset
;
16 /* Reference counts */
19 LIST_ENTRY ThisFileList
;
22 ULONG ExclusiveWaiter
;
24 } NOCC_BCB
, *PNOCC_BCB
;
26 typedef struct _NOCC_CACHE_MAP
29 LIST_ENTRY AssociatedBcb
;
30 LIST_ENTRY PrivateCacheMaps
;
33 CC_FILE_SIZES FileSizes
;
34 CACHE_MANAGER_CALLBACKS Callbacks
;
37 PFLUSH_TO_LSN FlushToLsn
;
38 ULONG ReadAheadGranularity
;
39 } NOCC_CACHE_MAP
, *PNOCC_CACHE_MAP
;
43 CcPfInitializePrefetcher(VOID
);
47 CcMdlReadComplete2(IN PFILE_OBJECT FileObject
,
48 IN PMDL MemoryDescriptorList
);
52 CcMdlWriteComplete2(IN PFILE_OBJECT FileObject
,
53 IN PLARGE_INTEGER FileOffset
,
62 CcpUnpinData(PNOCC_BCB Bcb
,
63 BOOLEAN ActuallyRelease
);
67 CcInitializeCacheManager(VOID
);
71 CcShutdownSystem(VOID
);
75 CcInitCacheZeroPage(VOID
);
77 /* Called by section.c */
80 CcFlushImageSection(PSECTION_OBJECT_POINTERS SectionObjectPointer
,
81 MMFLUSH_TYPE FlushType
);
85 _CcpFlushCache(IN PNOCC_CACHE_MAP Map
,
86 IN OPTIONAL PLARGE_INTEGER FileOffset
,
88 OUT OPTIONAL PIO_STATUS_BLOCK IoStatus
,
93 #define CcpFlushCache(M,F,L,I,D) _CcpFlushCache(M,F,L,I,D,__FILE__,__LINE__)
97 CcGetFileSizes(PFILE_OBJECT FileObject
,
98 PCC_FILE_SIZES FileSizes
);
102 CcpCountCacheSections(PNOCC_CACHE_MAP Map
);
106 CcpAcquireFileLock(PNOCC_CACHE_MAP Map
);
110 CcpReleaseFileLock(PNOCC_CACHE_MAP Map
);
113 * Macro for generic cache manage bugchecking. Note that this macro assumes
114 * that the file name including extension is always longer than 4 characters.
116 #define KEBUGCHECKCC \
117 KEBUGCHECKEX(CACHE_MANAGER, \
118 (*(ULONG*)(__FILE__ + sizeof(__FILE__) - 4) << 16) | \
119 (__LINE__ & 0xFFFF), 0, 0, 0)
123 #define CACHE_SINGLE_FILE_MAX (16)
124 #define CACHE_OVERALL_SIZE (32 * 1024 * 1024)
125 #define CACHE_STRIPE VACB_MAPPING_GRANULARITY
126 #define CACHE_SHIFT 18
127 #define CACHE_NUM_SECTIONS (CACHE_OVERALL_SIZE / CACHE_STRIPE)
128 #define CACHE_ROUND_UP(x) (((x) + (CACHE_STRIPE-1)) & ~(CACHE_STRIPE-1))
129 #define CACHE_ROUND_DOWN(x) ((x) & ~(CACHE_STRIPE-1))
130 #define INVALID_CACHE ((ULONG)~0)
132 extern NOCC_BCB CcCacheSections
[CACHE_NUM_SECTIONS
];
133 extern PRTL_BITMAP CcCacheBitmap
;
134 extern FAST_MUTEX CcMutex
;
135 extern KEVENT CcDeleteEvent
;
136 extern ULONG CcCacheClockHand
;
137 extern LIST_ENTRY CcPendingUnmap
;
138 extern KEVENT CcpLazyWriteEvent
;
140 #define CcpLock() _CcpLock(__FILE__,__LINE__)
141 #define CcpUnlock() _CcpUnlock(__FILE__,__LINE__)
143 extern VOID
_CcpLock(const char *file
, int line
);
144 extern VOID
_CcpUnlock(const char *file
, int line
);
146 extern VOID
CcpReferenceCache(ULONG Sector
);
147 extern VOID
CcpDereferenceCache(ULONG Sector
, BOOLEAN Immediate
);
151 CcpMapData(IN PFILE_OBJECT FileObject
,
152 IN PLARGE_INTEGER FileOffset
,
155 OUT PVOID
*BcbResult
,
160 CcpPinMappedData(IN PNOCC_CACHE_MAP Map
,
161 IN PLARGE_INTEGER FileOffset
,