[XDK]
[reactos.git] / include / xdk / ccfuncs.h
1 $if (_NTIFS_)
2 /* Common Cache Functions */
3
4 #define CcIsFileCached(FO) ( \
5 ((FO)->SectionObjectPointer != NULL) && \
6 (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
7 )
8
9 extern ULONG CcFastMdlReadWait;
10
11 #if (NTDDI_VERSION >= NTDDI_WIN2K)
12
13 NTKERNELAPI
14 VOID
15 NTAPI
16 CcInitializeCacheMap(
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);
22
23 NTKERNELAPI
24 BOOLEAN
25 NTAPI
26 CcUninitializeCacheMap(
27 IN PFILE_OBJECT FileObject,
28 IN PLARGE_INTEGER TruncateSize OPTIONAL,
29 IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL);
30
31 NTKERNELAPI
32 VOID
33 NTAPI
34 CcSetFileSizes(
35 IN PFILE_OBJECT FileObject,
36 IN PCC_FILE_SIZES FileSizes);
37
38 NTKERNELAPI
39 VOID
40 NTAPI
41 CcSetDirtyPageThreshold(
42 IN PFILE_OBJECT FileObject,
43 IN ULONG DirtyPageThreshold);
44
45 NTKERNELAPI
46 VOID
47 NTAPI
48 CcFlushCache(
49 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
50 IN PLARGE_INTEGER FileOffset OPTIONAL,
51 IN ULONG Length,
52 OUT PIO_STATUS_BLOCK IoStatus OPTIONAL);
53
54 NTKERNELAPI
55 LARGE_INTEGER
56 NTAPI
57 CcGetFlushedValidData(
58 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
59 IN BOOLEAN BcbListHeld);
60
61 NTKERNELAPI
62 BOOLEAN
63 NTAPI
64 CcZeroData(
65 IN PFILE_OBJECT FileObject,
66 IN PLARGE_INTEGER StartOffset,
67 IN PLARGE_INTEGER EndOffset,
68 IN BOOLEAN Wait);
69
70 NTKERNELAPI
71 PVOID
72 NTAPI
73 CcRemapBcb(
74 IN PVOID Bcb);
75
76 NTKERNELAPI
77 VOID
78 NTAPI
79 CcRepinBcb(
80 IN PVOID Bcb);
81
82 NTKERNELAPI
83 VOID
84 NTAPI
85 CcUnpinRepinnedBcb(
86 IN PVOID Bcb,
87 IN BOOLEAN WriteThrough,
88 OUT PIO_STATUS_BLOCK IoStatus);
89
90 NTKERNELAPI
91 PFILE_OBJECT
92 NTAPI
93 CcGetFileObjectFromSectionPtrs(
94 IN PSECTION_OBJECT_POINTERS SectionObjectPointer);
95
96 NTKERNELAPI
97 PFILE_OBJECT
98 NTAPI
99 CcGetFileObjectFromBcb(
100 IN PVOID Bcb);
101
102 NTKERNELAPI
103 BOOLEAN
104 NTAPI
105 CcCanIWrite(
106 IN PFILE_OBJECT FileObject,
107 IN ULONG BytesToWrite,
108 IN BOOLEAN Wait,
109 IN BOOLEAN Retrying);
110
111 NTKERNELAPI
112 VOID
113 NTAPI
114 CcDeferWrite(
115 IN PFILE_OBJECT FileObject,
116 IN PCC_POST_DEFERRED_WRITE PostRoutine,
117 IN PVOID Context1,
118 IN PVOID Context2,
119 IN ULONG BytesToWrite,
120 IN BOOLEAN Retrying);
121
122 NTKERNELAPI
123 BOOLEAN
124 NTAPI
125 CcCopyRead(
126 IN PFILE_OBJECT FileObject,
127 IN PLARGE_INTEGER FileOffset,
128 IN ULONG Length,
129 IN BOOLEAN Wait,
130 OUT PVOID Buffer,
131 OUT PIO_STATUS_BLOCK IoStatus);
132
133 NTKERNELAPI
134 VOID
135 NTAPI
136 CcFastCopyRead(
137 IN PFILE_OBJECT FileObject,
138 IN ULONG FileOffset,
139 IN ULONG Length,
140 IN ULONG PageCount,
141 OUT PVOID Buffer,
142 OUT PIO_STATUS_BLOCK IoStatus);
143
144 NTKERNELAPI
145 BOOLEAN
146 NTAPI
147 CcCopyWrite(
148 IN PFILE_OBJECT FileObject,
149 IN PLARGE_INTEGER FileOffset,
150 IN ULONG Length,
151 IN BOOLEAN Wait,
152 IN PVOID Buffer);
153
154 NTKERNELAPI
155 VOID
156 NTAPI
157 CcFastCopyWrite(
158 IN PFILE_OBJECT FileObject,
159 IN ULONG FileOffset,
160 IN ULONG Length,
161 IN PVOID Buffer);
162
163 NTKERNELAPI
164 VOID
165 NTAPI
166 CcMdlRead(
167 IN PFILE_OBJECT FileObject,
168 IN PLARGE_INTEGER FileOffset,
169 IN ULONG Length,
170 OUT PMDL *MdlChain,
171 OUT PIO_STATUS_BLOCK IoStatus);
172
173 NTKERNELAPI
174 VOID
175 NTAPI
176 CcMdlReadComplete(
177 IN PFILE_OBJECT FileObject,
178 IN PMDL MdlChain);
179
180 NTKERNELAPI
181 VOID
182 NTAPI
183 CcPrepareMdlWrite(
184 IN PFILE_OBJECT FileObject,
185 IN PLARGE_INTEGER FileOffset,
186 IN ULONG Length,
187 OUT PMDL *MdlChain,
188 OUT PIO_STATUS_BLOCK IoStatus);
189
190 NTKERNELAPI
191 VOID
192 NTAPI
193 CcMdlWriteComplete(
194 IN PFILE_OBJECT FileObject,
195 IN PLARGE_INTEGER FileOffset,
196 IN PMDL MdlChain);
197
198 NTKERNELAPI
199 VOID
200 NTAPI
201 CcScheduleReadAhead(
202 IN PFILE_OBJECT FileObject,
203 IN PLARGE_INTEGER FileOffset,
204 IN ULONG Length);
205
206 NTKERNELAPI
207 NTSTATUS
208 NTAPI
209 CcWaitForCurrentLazyWriterActivity(
210 VOID);
211
212 NTKERNELAPI
213 VOID
214 NTAPI
215 CcSetReadAheadGranularity(
216 IN PFILE_OBJECT FileObject,
217 IN ULONG Granularity);
218
219 NTKERNELAPI
220 BOOLEAN
221 NTAPI
222 CcPinRead(
223 IN PFILE_OBJECT FileObject,
224 IN PLARGE_INTEGER FileOffset,
225 IN ULONG Length,
226 IN ULONG Flags,
227 OUT PVOID *Bcb,
228 OUT PVOID *Buffer);
229
230 NTKERNELAPI
231 BOOLEAN
232 NTAPI
233 CcPinMappedData(
234 IN PFILE_OBJECT FileObject,
235 IN PLARGE_INTEGER FileOffset,
236 IN ULONG Length,
237 IN ULONG Flags,
238 IN OUT PVOID *Bcb);
239
240 NTKERNELAPI
241 BOOLEAN
242 NTAPI
243 CcPreparePinWrite(
244 IN PFILE_OBJECT FileObject,
245 IN PLARGE_INTEGER FileOffset,
246 IN ULONG Length,
247 IN BOOLEAN Zero,
248 IN ULONG Flags,
249 OUT PVOID *Bcb,
250 OUT PVOID *Buffer);
251
252 NTKERNELAPI
253 VOID
254 NTAPI
255 CcSetDirtyPinnedData(
256 IN PVOID BcbVoid,
257 IN PLARGE_INTEGER Lsn OPTIONAL);
258
259 NTKERNELAPI
260 VOID
261 NTAPI
262 CcUnpinData(
263 IN PVOID Bcb);
264
265 NTKERNELAPI
266 VOID
267 NTAPI
268 CcSetBcbOwnerPointer(
269 IN PVOID Bcb,
270 IN PVOID OwnerPointer);
271
272 NTKERNELAPI
273 VOID
274 NTAPI
275 CcUnpinDataForThread(
276 IN PVOID Bcb,
277 IN ERESOURCE_THREAD ResourceThreadId);
278
279 NTKERNELAPI
280 VOID
281 NTAPI
282 CcSetAdditionalCacheAttributes(
283 IN PFILE_OBJECT FileObject,
284 IN BOOLEAN DisableReadAhead,
285 IN BOOLEAN DisableWriteBehind);
286
287 NTKERNELAPI
288 BOOLEAN
289 NTAPI
290 CcIsThereDirtyData(
291 IN PVPB Vpb);
292
293 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
294
295 #if (NTDDI_VERSION >= NTDDI_WINXP)
296
297 NTKERNELAPI
298 VOID
299 NTAPI
300 CcMdlWriteAbort(
301 IN PFILE_OBJECT FileObject,
302 IN PMDL MdlChain);
303
304 NTKERNELAPI
305 VOID
306 NTAPI
307 CcSetLogHandleForFile(
308 IN PFILE_OBJECT FileObject,
309 IN PVOID LogHandle,
310 IN PFLUSH_TO_LSN FlushToLsnRoutine);
311
312 NTKERNELAPI
313 LARGE_INTEGER
314 NTAPI
315 CcGetDirtyPages(
316 IN PVOID LogHandle,
317 IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
318 IN PVOID Context1,
319 IN PVOID Context2);
320
321 #endif
322
323 #if (NTDDI_VERSION >= NTDDI_WINXP)
324 NTKERNELAPI
325 BOOLEAN
326 NTAPI
327 CcMapData(
328 IN PFILE_OBJECT FileObject,
329 IN PLARGE_INTEGER FileOffset,
330 IN ULONG Length,
331 IN ULONG Flags,
332 OUT PVOID *Bcb,
333 OUT PVOID *Buffer);
334 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
335 NTKERNELAPI
336 BOOLEAN
337 NTAPI
338 CcMapData(
339 IN PFILE_OBJECT FileObject,
340 IN PLARGE_INTEGER FileOffset,
341 IN ULONG Length,
342 IN BOOLEAN Wait,
343 OUT PVOID *Bcb,
344 OUT PVOID *Buffer);
345 #endif
346
347 #if (NTDDI_VERSION >= NTDDI_VISTA)
348
349 NTKERNELAPI
350 NTSTATUS
351 NTAPI
352 CcSetFileSizesEx(
353 IN PFILE_OBJECT FileObject,
354 IN PCC_FILE_SIZES FileSizes);
355
356 NTKERNELAPI
357 PFILE_OBJECT
358 NTAPI
359 CcGetFileObjectFromSectionPtrsRef(
360 IN PSECTION_OBJECT_POINTERS SectionObjectPointer);
361
362 NTKERNELAPI
363 VOID
364 NTAPI
365 CcSetParallelFlushFile(
366 IN PFILE_OBJECT FileObject,
367 IN BOOLEAN EnableParallelFlush);
368
369 NTKERNELAPI
370 BOOLEAN
371 CcIsThereDirtyDataEx(
372 IN PVPB Vpb,
373 IN PULONG NumberOfDirtyPages OPTIONAL);
374
375 #endif
376
377 #if (NTDDI_VERSION >= NTDDI_WIN7)
378 NTKERNELAPI
379 VOID
380 NTAPI
381 CcCoherencyFlushAndPurgeCache(
382 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
383 IN PLARGE_INTEGER FileOffset OPTIONAL,
384 IN ULONG Length,
385 OUT PIO_STATUS_BLOCK IoStatus,
386 IN ULONG Flags OPTIONAL);
387 #endif
388
389 #define CcGetFileSizePointer(FO) ( \
390 ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
391 )
392
393 #if (NTDDI_VERSION >= NTDDI_VISTA)
394 NTKERNELAPI
395 BOOLEAN
396 NTAPI
397 CcPurgeCacheSection(
398 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
399 IN PLARGE_INTEGER FileOffset OPTIONAL,
400 IN ULONG Length,
401 IN ULONG Flags);
402 #elif (NTDDI_VERSION >= NTDDI_WIN2K)
403 NTKERNELAPI
404 BOOLEAN
405 NTAPI
406 CcPurgeCacheSection(
407 IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
408 IN PLARGE_INTEGER FileOffset OPTIONAL,
409 IN ULONG Length,
410 IN BOOLEAN UninitializeCacheMaps);
411 #endif
412
413 #if (NTDDI_VERSION >= NTDDI_WIN7)
414 NTKERNELAPI
415 BOOLEAN
416 NTAPI
417 CcCopyWriteWontFlush(
418 IN PFILE_OBJECT FileObject,
419 IN PLARGE_INTEGER FileOffset,
420 IN ULONG Length);
421 #else
422 #define CcCopyWriteWontFlush(FO, FOFF, LEN) ((LEN) <= 0x10000)
423 #endif
424
425 #define CcReadAhead(FO, FOFF, LEN) ( \
426 if ((LEN) >= 256) { \
427 CcScheduleReadAhead((FO), (FOFF), (LEN)); \
428 } \
429 )
430 $endif (_NTIFS_)