2 /* Common Cache Functions */
4 #define CcIsFileCached(FO) ( \
5 ((FO)->SectionObjectPointer != NULL) && \
6 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
9 extern ULONG CcFastMdlReadWait
;
11 #if (NTDDI_VERSION >= NTDDI_WIN2K)
17 IN PFILE_OBJECT FileObject
,
18 IN PCC_FILE_SIZES FileSizes
,
20 IN PCACHE_MANAGER_CALLBACKS Callbacks
,
21 IN PVOID LazyWriteContext
);
26 CcUninitializeCacheMap(
27 IN PFILE_OBJECT FileObject
,
28 IN PLARGE_INTEGER TruncateSize OPTIONAL
,
29 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
);
35 IN PFILE_OBJECT FileObject
,
36 IN PCC_FILE_SIZES FileSizes
);
41 CcSetDirtyPageThreshold(
42 IN PFILE_OBJECT FileObject
,
43 IN ULONG DirtyPageThreshold
);
49 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
50 IN PLARGE_INTEGER FileOffset OPTIONAL
,
52 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL
);
57 CcGetFlushedValidData(
58 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
59 IN BOOLEAN BcbListHeld
);
65 IN PFILE_OBJECT FileObject
,
66 IN PLARGE_INTEGER StartOffset
,
67 IN PLARGE_INTEGER EndOffset
,
87 IN BOOLEAN WriteThrough
,
88 OUT PIO_STATUS_BLOCK IoStatus
);
93 CcGetFileObjectFromSectionPtrs(
94 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
);
99 CcGetFileObjectFromBcb(
106 IN PFILE_OBJECT FileObject
,
107 IN ULONG BytesToWrite
,
109 IN BOOLEAN Retrying
);
115 IN PFILE_OBJECT FileObject
,
116 IN PCC_POST_DEFERRED_WRITE PostRoutine
,
119 IN ULONG BytesToWrite
,
120 IN BOOLEAN Retrying
);
126 IN PFILE_OBJECT FileObject
,
127 IN PLARGE_INTEGER FileOffset
,
131 OUT PIO_STATUS_BLOCK IoStatus
);
137 IN PFILE_OBJECT FileObject
,
142 OUT PIO_STATUS_BLOCK IoStatus
);
148 IN PFILE_OBJECT FileObject
,
149 IN PLARGE_INTEGER FileOffset
,
158 IN PFILE_OBJECT FileObject
,
167 IN PFILE_OBJECT FileObject
,
168 IN PLARGE_INTEGER FileOffset
,
171 OUT PIO_STATUS_BLOCK IoStatus
);
177 IN PFILE_OBJECT FileObject
,
184 IN PFILE_OBJECT FileObject
,
185 IN PLARGE_INTEGER FileOffset
,
188 OUT PIO_STATUS_BLOCK IoStatus
);
194 IN PFILE_OBJECT FileObject
,
195 IN PLARGE_INTEGER FileOffset
,
202 IN PFILE_OBJECT FileObject
,
203 IN PLARGE_INTEGER FileOffset
,
209 CcWaitForCurrentLazyWriterActivity(
215 CcSetReadAheadGranularity(
216 IN PFILE_OBJECT FileObject
,
217 IN ULONG Granularity
);
223 IN PFILE_OBJECT FileObject
,
224 IN PLARGE_INTEGER FileOffset
,
234 IN PFILE_OBJECT FileObject
,
235 IN PLARGE_INTEGER FileOffset
,
244 IN PFILE_OBJECT FileObject
,
245 IN PLARGE_INTEGER FileOffset
,
255 CcSetDirtyPinnedData(
257 IN PLARGE_INTEGER Lsn OPTIONAL
);
268 CcSetBcbOwnerPointer(
270 IN PVOID OwnerPointer
);
275 CcUnpinDataForThread(
277 IN ERESOURCE_THREAD ResourceThreadId
);
282 CcSetAdditionalCacheAttributes(
283 IN PFILE_OBJECT FileObject
,
284 IN BOOLEAN DisableReadAhead
,
285 IN BOOLEAN DisableWriteBehind
);
293 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
295 #if (NTDDI_VERSION >= NTDDI_WINXP)
301 IN PFILE_OBJECT FileObject
,
307 CcSetLogHandleForFile(
308 IN PFILE_OBJECT FileObject
,
310 IN PFLUSH_TO_LSN FlushToLsnRoutine
);
317 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine
,
323 #if (NTDDI_VERSION >= NTDDI_WINXP)
328 IN PFILE_OBJECT FileObject
,
329 IN PLARGE_INTEGER FileOffset
,
334 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
339 IN PFILE_OBJECT FileObject
,
340 IN PLARGE_INTEGER FileOffset
,
347 #if (NTDDI_VERSION >= NTDDI_VISTA)
353 IN PFILE_OBJECT FileObject
,
354 IN PCC_FILE_SIZES FileSizes
);
359 CcGetFileObjectFromSectionPtrsRef(
360 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
);
365 CcSetParallelFlushFile(
366 IN PFILE_OBJECT FileObject
,
367 IN BOOLEAN EnableParallelFlush
);
371 CcIsThereDirtyDataEx(
373 IN PULONG NumberOfDirtyPages OPTIONAL
);
377 #if (NTDDI_VERSION >= NTDDI_WIN7)
381 CcCoherencyFlushAndPurgeCache(
382 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
383 IN PLARGE_INTEGER FileOffset OPTIONAL
,
385 OUT PIO_STATUS_BLOCK IoStatus
,
386 IN ULONG Flags OPTIONAL
);
389 #define CcGetFileSizePointer(FO) ( \
390 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
393 #if (NTDDI_VERSION >= NTDDI_VISTA)
398 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
399 IN PLARGE_INTEGER FileOffset OPTIONAL
,
402 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
407 IN PSECTION_OBJECT_POINTERS SectionObjectPointer
,
408 IN PLARGE_INTEGER FileOffset OPTIONAL
,
410 IN BOOLEAN UninitializeCacheMaps
);
413 #if (NTDDI_VERSION >= NTDDI_WIN7)
417 CcCopyWriteWontFlush(
418 IN PFILE_OBJECT FileObject
,
419 IN PLARGE_INTEGER FileOffset
,
422 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
425 #define CcReadAhead(FO, FOFF, LEN) ( \
426 if ((LEN) >= 256) { \
427 CcScheduleReadAhead((FO), (FOFF), (LEN)); \