2 /* Common Cache Functions */
4 #define CcIsFileCached(FO) ( \
5 ((FO)->SectionObjectPointer != NULL) && \
6 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
9 extern NTKERNELAPI ULONG CcFastMdlReadWait
;
11 #if (NTDDI_VERSION >= NTDDI_WIN2K)
17 _In_ PFILE_OBJECT FileObject
,
18 _In_ PCC_FILE_SIZES FileSizes
,
19 _In_ BOOLEAN PinAccess
,
20 _In_ PCACHE_MANAGER_CALLBACKS Callbacks
,
21 _In_ PVOID LazyWriteContext
);
26 CcUninitializeCacheMap(
27 _In_ PFILE_OBJECT FileObject
,
28 _In_opt_ PLARGE_INTEGER TruncateSize
,
29 _In_opt_ PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent
);
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_opt_ PLARGE_INTEGER FileOffset
,
52 _Out_opt_ PIO_STATUS_BLOCK IoStatus
);
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_opt_ 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
,
130 _Out_writes_bytes_(Length
) PVOID Buffer
,
131 _Out_ PIO_STATUS_BLOCK IoStatus
);
137 _In_ PFILE_OBJECT FileObject
,
138 _In_ ULONG FileOffset
,
140 _In_ ULONG PageCount
,
141 _Out_writes_bytes_(Length
) PVOID Buffer
,
142 _Out_ PIO_STATUS_BLOCK IoStatus
);
148 _In_ PFILE_OBJECT FileObject
,
149 _In_ PLARGE_INTEGER FileOffset
,
152 _In_reads_bytes_(Length
) PVOID Buffer
);
158 _In_ PFILE_OBJECT FileObject
,
159 _In_ ULONG FileOffset
,
161 _In_reads_bytes_(Length
) PVOID Buffer
);
167 _In_ PFILE_OBJECT FileObject
,
168 _In_ PLARGE_INTEGER FileOffset
,
170 _Out_ PMDL
*MdlChain
,
171 _Out_ PIO_STATUS_BLOCK IoStatus
);
177 _In_ PFILE_OBJECT FileObject
,
184 _In_ PFILE_OBJECT FileObject
,
185 _In_ PLARGE_INTEGER FileOffset
,
187 _Out_ PMDL
*MdlChain
,
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(VOID
);
214 CcSetReadAheadGranularity(
215 _In_ PFILE_OBJECT FileObject
,
216 _In_ ULONG Granularity
);
222 _In_ PFILE_OBJECT FileObject
,
223 _In_ PLARGE_INTEGER FileOffset
,
227 _Outptr_result_bytebuffer_(Length
) PVOID
*Buffer
);
233 _In_ PFILE_OBJECT FileObject
,
234 _In_ PLARGE_INTEGER FileOffset
,
243 _In_ PFILE_OBJECT FileObject
,
244 _In_ PLARGE_INTEGER FileOffset
,
249 _Outptr_result_bytebuffer_(Length
) PVOID
*Buffer
);
254 CcSetDirtyPinnedData(
256 _In_opt_ PLARGE_INTEGER Lsn
);
267 CcSetBcbOwnerPointer(
269 _In_ PVOID OwnerPointer
);
274 CcUnpinDataForThread(
276 _In_ ERESOURCE_THREAD ResourceThreadId
);
281 CcSetAdditionalCacheAttributes(
282 _In_ PFILE_OBJECT FileObject
,
283 _In_ BOOLEAN DisableReadAhead
,
284 _In_ BOOLEAN DisableWriteBehind
);
292 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
294 #if (NTDDI_VERSION >= NTDDI_WINXP)
300 _In_ PFILE_OBJECT FileObject
,
306 CcSetLogHandleForFile(
307 _In_ PFILE_OBJECT FileObject
,
308 _In_ PVOID LogHandle
,
309 _In_ PFLUSH_TO_LSN FlushToLsnRoutine
);
315 _In_ PVOID LogHandle
,
316 _In_ PDIRTY_PAGE_ROUTINE DirtyPageRoutine
,
318 _In_ PVOID Context2
);
322 #if (NTDDI_VERSION >= NTDDI_WINXP)
323 _Success_(return!=FALSE
)
328 _In_ PFILE_OBJECT FileObject
,
329 _In_ PLARGE_INTEGER FileOffset
,
333 _Outptr_result_bytebuffer_(Length
) PVOID
*Buffer
);
334 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
339 _In_ PFILE_OBJECT FileObject
,
340 _In_ PLARGE_INTEGER FileOffset
,
344 _Outptr_result_bytebuffer_(Length
) PVOID
*Buffer
);
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_opt_ PULONG NumberOfDirtyPages
);
377 #if (NTDDI_VERSION >= NTDDI_WIN7)
381 CcCoherencyFlushAndPurgeCache(
382 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
,
383 _In_opt_ PLARGE_INTEGER FileOffset
,
385 _Out_ PIO_STATUS_BLOCK IoStatus
,
386 _In_opt_ ULONG Flags
);
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_opt_ PLARGE_INTEGER FileOffset
,
402 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
407 _In_ PSECTION_OBJECT_POINTERS SectionObjectPointer
,
408 _In_opt_ PLARGE_INTEGER FileOffset
,
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)); \