Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

853 lines
18 KiB

  1. /*++ BUILD Version: 0003 // Increment this if a change has global effects
  2. Copyright (c) 1989 Microsoft Corporation
  3. Module Name:
  4. Cache.h
  5. Abstract:
  6. This module contains the public data structures and procedure
  7. prototypes for the cache management system.
  8. Author:
  9. Revision History:
  10. --*/
  11. #ifndef _CACHE_
  12. #define _CACHE_
  13. #include "prefetch.h"
  14. #include "perf.h"
  15. // begin_ntifs
  16. //
  17. // Define two constants describing the view size (and alignment)
  18. // that the Cache Manager uses to map files.
  19. //
  20. #define VACB_MAPPING_GRANULARITY (0x40000)
  21. #define VACB_OFFSET_SHIFT (18)
  22. //
  23. // Public portion of BCB
  24. //
  25. typedef struct _PUBLIC_BCB {
  26. //
  27. // Type and size of this record
  28. //
  29. // NOTE: The first four fields must be the same as the BCB in cc.h.
  30. //
  31. CSHORT NodeTypeCode;
  32. CSHORT NodeByteSize;
  33. //
  34. // Description of range of file which is currently mapped.
  35. //
  36. ULONG MappedLength;
  37. LARGE_INTEGER MappedFileOffset;
  38. } PUBLIC_BCB, *PPUBLIC_BCB;
  39. //
  40. // File Sizes structure.
  41. //
  42. typedef struct _CC_FILE_SIZES {
  43. LARGE_INTEGER AllocationSize;
  44. LARGE_INTEGER FileSize;
  45. LARGE_INTEGER ValidDataLength;
  46. } CC_FILE_SIZES, *PCC_FILE_SIZES;
  47. //
  48. // Define a Cache Manager callback structure. These routines are required
  49. // by the Lazy Writer, so that it can acquire resources in the right order
  50. // to avoid deadlocks. Note that otherwise you would have most FS requests
  51. // acquiring FS resources first and caching structures second, while the
  52. // Lazy Writer needs to acquire its own resources first, and then FS
  53. // structures later as it calls the file system.
  54. //
  55. //
  56. // First define the procedure pointer typedefs
  57. //
  58. //
  59. // This routine is called by the Lazy Writer prior to doing a write,
  60. // since this will require some file system resources associated with
  61. // this cached file. The context parameter supplied is whatever the FS
  62. // passed as the LazyWriteContext parameter when is called
  63. // CcInitializeCacheMap.
  64. //
  65. typedef
  66. BOOLEAN (*PACQUIRE_FOR_LAZY_WRITE) (
  67. IN PVOID Context,
  68. IN BOOLEAN Wait
  69. );
  70. //
  71. // This routine releases the Context acquired above.
  72. //
  73. typedef
  74. VOID (*PRELEASE_FROM_LAZY_WRITE) (
  75. IN PVOID Context
  76. );
  77. //
  78. // This routine is called by the Lazy Writer prior to doing a readahead.
  79. //
  80. typedef
  81. BOOLEAN (*PACQUIRE_FOR_READ_AHEAD) (
  82. IN PVOID Context,
  83. IN BOOLEAN Wait
  84. );
  85. //
  86. // This routine releases the Context acquired above.
  87. //
  88. typedef
  89. VOID (*PRELEASE_FROM_READ_AHEAD) (
  90. IN PVOID Context
  91. );
  92. typedef struct _CACHE_MANAGER_CALLBACKS {
  93. PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
  94. PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
  95. PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
  96. PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
  97. } CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
  98. //
  99. // This structure is passed into CcUninitializeCacheMap
  100. // if the caller wants to know when the cache map is deleted.
  101. //
  102. typedef struct _CACHE_UNINITIALIZE_EVENT {
  103. struct _CACHE_UNINITIALIZE_EVENT *Next;
  104. KEVENT Event;
  105. } CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
  106. //
  107. // Callback routine for retrieving dirty pages from Cache Manager.
  108. //
  109. typedef
  110. VOID (*PDIRTY_PAGE_ROUTINE) (
  111. IN PFILE_OBJECT FileObject,
  112. IN PLARGE_INTEGER FileOffset,
  113. IN ULONG Length,
  114. IN PLARGE_INTEGER OldestLsn,
  115. IN PLARGE_INTEGER NewestLsn,
  116. IN PVOID Context1,
  117. IN PVOID Context2
  118. );
  119. //
  120. // Callback routine for doing log file flushes to Lsn.
  121. //
  122. typedef
  123. VOID (*PFLUSH_TO_LSN) (
  124. IN PVOID LogHandle,
  125. IN LARGE_INTEGER Lsn
  126. );
  127. //
  128. // Macro to test whether a file is cached or not.
  129. //
  130. #define CcIsFileCached(FO) ( \
  131. ((FO)->SectionObjectPointer != NULL) && \
  132. (((PSECTION_OBJECT_POINTERS)(FO)->SectionObjectPointer)->SharedCacheMap != NULL) \
  133. )
  134. // end_ntifs
  135. //
  136. // Throw away miss counter
  137. //
  138. extern ULONG CcThrowAway;
  139. //
  140. // Performance Counters
  141. //
  142. extern ULONG CcFastReadNoWait;
  143. extern ULONG CcFastReadWait;
  144. extern ULONG CcFastReadResourceMiss;
  145. extern ULONG CcFastReadNotPossible;
  146. extern ULONG CcFastMdlReadNoWait;
  147. extern ULONG CcFastMdlReadWait; // ntifs
  148. extern ULONG CcFastMdlReadResourceMiss;
  149. extern ULONG CcFastMdlReadNotPossible;
  150. extern ULONG CcMapDataNoWait;
  151. extern ULONG CcMapDataWait;
  152. extern ULONG CcMapDataNoWaitMiss;
  153. extern ULONG CcMapDataWaitMiss;
  154. extern ULONG CcPinMappedDataCount;
  155. extern ULONG CcPinReadNoWait;
  156. extern ULONG CcPinReadWait;
  157. extern ULONG CcPinReadNoWaitMiss;
  158. extern ULONG CcPinReadWaitMiss;
  159. extern ULONG CcCopyReadNoWait;
  160. extern ULONG CcCopyReadWait;
  161. extern ULONG CcCopyReadNoWaitMiss;
  162. extern ULONG CcCopyReadWaitMiss;
  163. extern ULONG CcMdlReadNoWait;
  164. extern ULONG CcMdlReadWait;
  165. extern ULONG CcMdlReadNoWaitMiss;
  166. extern ULONG CcMdlReadWaitMiss;
  167. extern ULONG CcReadAheadIos;
  168. extern ULONG CcLazyWriteIos;
  169. extern ULONG CcLazyWritePages;
  170. extern ULONG CcDataFlushes;
  171. extern ULONG CcDataPages;
  172. extern ULONG CcLostDelayedWrites;
  173. extern PULONG CcMissCounter;
  174. //
  175. // Global Maintenance routines
  176. //
  177. NTKERNELAPI
  178. BOOLEAN
  179. CcInitializeCacheManager (
  180. VOID
  181. );
  182. LOGICAL
  183. CcHasInactiveViews (
  184. VOID
  185. );
  186. LOGICAL
  187. CcUnmapInactiveViews (
  188. IN ULONG NumberOfViewsToUnmap
  189. );
  190. VOID
  191. CcWaitForUninitializeCacheMap (
  192. IN PFILE_OBJECT FileObject
  193. );
  194. // begin_ntifs
  195. //
  196. // The following routines are intended for use by File Systems Only.
  197. //
  198. NTKERNELAPI
  199. VOID
  200. CcInitializeCacheMap (
  201. IN PFILE_OBJECT FileObject,
  202. IN PCC_FILE_SIZES FileSizes,
  203. IN BOOLEAN PinAccess,
  204. IN PCACHE_MANAGER_CALLBACKS Callbacks,
  205. IN PVOID LazyWriteContext
  206. );
  207. NTKERNELAPI
  208. BOOLEAN
  209. CcUninitializeCacheMap (
  210. IN PFILE_OBJECT FileObject,
  211. IN PLARGE_INTEGER TruncateSize OPTIONAL,
  212. IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
  213. );
  214. NTKERNELAPI
  215. VOID
  216. CcSetFileSizes (
  217. IN PFILE_OBJECT FileObject,
  218. IN PCC_FILE_SIZES FileSizes
  219. );
  220. //
  221. // VOID
  222. // CcFastIoSetFileSizes (
  223. // IN PFILE_OBJECT FileObject,
  224. // IN PCC_FILE_SIZES FileSizes
  225. // );
  226. //
  227. #define CcGetFileSizePointer(FO) ( \
  228. ((PLARGE_INTEGER)((FO)->SectionObjectPointer->SharedCacheMap) + 1) \
  229. )
  230. NTKERNELAPI
  231. BOOLEAN
  232. CcPurgeCacheSection (
  233. IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
  234. IN PLARGE_INTEGER FileOffset OPTIONAL,
  235. IN ULONG Length,
  236. IN BOOLEAN UninitializeCacheMaps
  237. );
  238. NTKERNELAPI
  239. VOID
  240. CcSetDirtyPageThreshold (
  241. IN PFILE_OBJECT FileObject,
  242. IN ULONG DirtyPageThreshold
  243. );
  244. NTKERNELAPI
  245. VOID
  246. CcFlushCache (
  247. IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
  248. IN PLARGE_INTEGER FileOffset OPTIONAL,
  249. IN ULONG Length,
  250. OUT PIO_STATUS_BLOCK IoStatus OPTIONAL
  251. );
  252. NTKERNELAPI
  253. LARGE_INTEGER
  254. CcGetFlushedValidData (
  255. IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
  256. IN BOOLEAN BcbListHeld
  257. );
  258. // end_ntifs
  259. NTKERNELAPI
  260. VOID
  261. CcZeroEndOfLastPage (
  262. IN PFILE_OBJECT FileObject
  263. );
  264. // begin_ntifs
  265. NTKERNELAPI
  266. BOOLEAN
  267. CcZeroData (
  268. IN PFILE_OBJECT FileObject,
  269. IN PLARGE_INTEGER StartOffset,
  270. IN PLARGE_INTEGER EndOffset,
  271. IN BOOLEAN Wait
  272. );
  273. NTKERNELAPI
  274. PVOID
  275. CcRemapBcb (
  276. IN PVOID Bcb
  277. );
  278. NTKERNELAPI
  279. VOID
  280. CcRepinBcb (
  281. IN PVOID Bcb
  282. );
  283. NTKERNELAPI
  284. VOID
  285. CcUnpinRepinnedBcb (
  286. IN PVOID Bcb,
  287. IN BOOLEAN WriteThrough,
  288. OUT PIO_STATUS_BLOCK IoStatus
  289. );
  290. NTKERNELAPI
  291. PFILE_OBJECT
  292. CcGetFileObjectFromSectionPtrs (
  293. IN PSECTION_OBJECT_POINTERS SectionObjectPointer
  294. );
  295. NTKERNELAPI
  296. PFILE_OBJECT
  297. CcGetFileObjectFromBcb (
  298. IN PVOID Bcb
  299. );
  300. //
  301. // These routines are implemented to support write throttling.
  302. //
  303. //
  304. // BOOLEAN
  305. // CcCopyWriteWontFlush (
  306. // IN PFILE_OBJECT FileObject,
  307. // IN PLARGE_INTEGER FileOffset,
  308. // IN ULONG Length
  309. // );
  310. //
  311. #define CcCopyWriteWontFlush(FO,FOFF,LEN) ((LEN) <= 0X10000)
  312. NTKERNELAPI
  313. BOOLEAN
  314. CcCanIWrite (
  315. IN PFILE_OBJECT FileObject,
  316. IN ULONG BytesToWrite,
  317. IN BOOLEAN Wait,
  318. IN BOOLEAN Retrying
  319. );
  320. typedef
  321. VOID (*PCC_POST_DEFERRED_WRITE) (
  322. IN PVOID Context1,
  323. IN PVOID Context2
  324. );
  325. NTKERNELAPI
  326. VOID
  327. CcDeferWrite (
  328. IN PFILE_OBJECT FileObject,
  329. IN PCC_POST_DEFERRED_WRITE PostRoutine,
  330. IN PVOID Context1,
  331. IN PVOID Context2,
  332. IN ULONG BytesToWrite,
  333. IN BOOLEAN Retrying
  334. );
  335. //
  336. // The following routines provide a data copy interface to the cache, and
  337. // are intended for use by File Servers and File Systems.
  338. //
  339. NTKERNELAPI
  340. BOOLEAN
  341. CcCopyRead (
  342. IN PFILE_OBJECT FileObject,
  343. IN PLARGE_INTEGER FileOffset,
  344. IN ULONG Length,
  345. IN BOOLEAN Wait,
  346. OUT PVOID Buffer,
  347. OUT PIO_STATUS_BLOCK IoStatus
  348. );
  349. NTKERNELAPI
  350. VOID
  351. CcFastCopyRead (
  352. IN PFILE_OBJECT FileObject,
  353. IN ULONG FileOffset,
  354. IN ULONG Length,
  355. IN ULONG PageCount,
  356. OUT PVOID Buffer,
  357. OUT PIO_STATUS_BLOCK IoStatus
  358. );
  359. NTKERNELAPI
  360. BOOLEAN
  361. CcCopyWrite (
  362. IN PFILE_OBJECT FileObject,
  363. IN PLARGE_INTEGER FileOffset,
  364. IN ULONG Length,
  365. IN BOOLEAN Wait,
  366. IN PVOID Buffer
  367. );
  368. NTKERNELAPI
  369. VOID
  370. CcFastCopyWrite (
  371. IN PFILE_OBJECT FileObject,
  372. IN ULONG FileOffset,
  373. IN ULONG Length,
  374. IN PVOID Buffer
  375. );
  376. //
  377. // The following routines provide an Mdl interface for transfers to and
  378. // from the cache, and are primarily intended for File Servers.
  379. //
  380. // NOBODY SHOULD BE CALLING THESE MDL ROUTINES DIRECTLY, USE FSRTL AND
  381. // FASTIO INTERFACES.
  382. //
  383. NTKERNELAPI
  384. VOID
  385. CcMdlRead (
  386. IN PFILE_OBJECT FileObject,
  387. IN PLARGE_INTEGER FileOffset,
  388. IN ULONG Length,
  389. OUT PMDL *MdlChain,
  390. OUT PIO_STATUS_BLOCK IoStatus
  391. );
  392. //
  393. // This routine is now a wrapper for FastIo if present or CcMdlReadComplete2
  394. //
  395. NTKERNELAPI
  396. VOID
  397. CcMdlReadComplete (
  398. IN PFILE_OBJECT FileObject,
  399. IN PMDL MdlChain
  400. );
  401. // end_ntifs
  402. NTKERNELAPI
  403. VOID
  404. CcMdlReadComplete2 (
  405. IN PFILE_OBJECT FileObject,
  406. IN PMDL MdlChain
  407. );
  408. // begin_ntifs
  409. NTKERNELAPI
  410. VOID
  411. CcPrepareMdlWrite (
  412. IN PFILE_OBJECT FileObject,
  413. IN PLARGE_INTEGER FileOffset,
  414. IN ULONG Length,
  415. OUT PMDL *MdlChain,
  416. OUT PIO_STATUS_BLOCK IoStatus
  417. );
  418. //
  419. // This routine is now a wrapper for FastIo if present or CcMdlWriteComplete2
  420. //
  421. NTKERNELAPI
  422. VOID
  423. CcMdlWriteComplete (
  424. IN PFILE_OBJECT FileObject,
  425. IN PLARGE_INTEGER FileOffset,
  426. IN PMDL MdlChain
  427. );
  428. VOID
  429. CcMdlWriteAbort (
  430. IN PFILE_OBJECT FileObject,
  431. IN PMDL MdlChain
  432. );
  433. // end_ntifs
  434. NTKERNELAPI
  435. VOID
  436. CcMdlWriteComplete2 (
  437. IN PFILE_OBJECT FileObject,
  438. IN PLARGE_INTEGER FileOffset,
  439. IN PMDL MdlChain
  440. );
  441. // begin_ntifs
  442. //
  443. // Common ReadAhead call for Copy Read and Mdl Read.
  444. //
  445. // ReadAhead should always be invoked by calling the CcReadAhead macro,
  446. // which tests first to see if the read is large enough to warrant read
  447. // ahead. Measurements have shown that, calling the read ahead routine
  448. // actually decreases performance for small reads, such as issued by
  449. // many compilers and linkers. Compilers simply want all of the include
  450. // files to stay in memory after being read the first time.
  451. //
  452. #define CcReadAhead(FO,FOFF,LEN) { \
  453. if ((LEN) >= 256) { \
  454. CcScheduleReadAhead((FO),(FOFF),(LEN)); \
  455. } \
  456. }
  457. NTKERNELAPI
  458. VOID
  459. CcScheduleReadAhead (
  460. IN PFILE_OBJECT FileObject,
  461. IN PLARGE_INTEGER FileOffset,
  462. IN ULONG Length
  463. );
  464. //
  465. // The following routine allows a caller to wait for the next batch
  466. // of lazy writer work to complete. In particular, this provides a
  467. // mechanism for a caller to be sure that all avaliable lazy closes
  468. // at the time of this call have issued.
  469. //
  470. NTSTATUS
  471. CcWaitForCurrentLazyWriterActivity (
  472. VOID
  473. );
  474. //
  475. // This routine changes the read ahead granularity for a file, which is
  476. // PAGE_SIZE by default.
  477. //
  478. NTKERNELAPI
  479. VOID
  480. CcSetReadAheadGranularity (
  481. IN PFILE_OBJECT FileObject,
  482. IN ULONG Granularity
  483. );
  484. //
  485. // The following routines provide direct access data which is pinned in the
  486. // cache, and is primarily intended for use by File Systems. In particular,
  487. // this mode of access is ideal for dealing with volume structures.
  488. //
  489. //
  490. // Flags for pinning
  491. //
  492. //
  493. // Synchronous Wait - normally specified. This pattern may be specified as TRUE.
  494. //
  495. #define PIN_WAIT (1)
  496. //
  497. // Acquire metadata Bcb exclusive (default is shared, Lazy Writer uses exclusive).
  498. //
  499. // Must be set with PIN_WAIT.
  500. //
  501. #define PIN_EXCLUSIVE (2)
  502. //
  503. // Acquire metadata Bcb but do not fault data in. Default is to fault the data in.
  504. // This unusual flag is only used by Ntfs for cache coherency synchronization between
  505. // compressed and uncompressed streams for the same compressed file.
  506. //
  507. // Must be set with PIN_WAIT.
  508. //
  509. #define PIN_NO_READ (4)
  510. //
  511. // This option may be used to pin data only if the Bcb already exists. If the Bcb
  512. // does not already exist - the pin is unsuccessful and no Bcb is returned. This routine
  513. // provides a way to see if data is already pinned (and possibly dirty) in the cache,
  514. // without forcing a fault if the data is not there.
  515. //
  516. #define PIN_IF_BCB (8)
  517. //
  518. // Flags for mapping
  519. //
  520. //
  521. // Synchronous Wait - normally specified. This pattern may be specified as TRUE.
  522. //
  523. #define MAP_WAIT (1)
  524. //
  525. // Acquire metadata Bcb but do not fault data in. Default is to fault the data in.
  526. // This should not overlap with any of the PIN_ flags so they can be passed down to
  527. // CcPinFileData
  528. //
  529. #define MAP_NO_READ (16)
  530. NTKERNELAPI
  531. BOOLEAN
  532. CcPinRead (
  533. IN PFILE_OBJECT FileObject,
  534. IN PLARGE_INTEGER FileOffset,
  535. IN ULONG Length,
  536. IN ULONG Flags,
  537. OUT PVOID *Bcb,
  538. OUT PVOID *Buffer
  539. );
  540. NTKERNELAPI
  541. BOOLEAN
  542. CcMapData (
  543. IN PFILE_OBJECT FileObject,
  544. IN PLARGE_INTEGER FileOffset,
  545. IN ULONG Length,
  546. IN ULONG Flags,
  547. OUT PVOID *Bcb,
  548. OUT PVOID *Buffer
  549. );
  550. NTKERNELAPI
  551. BOOLEAN
  552. CcPinMappedData (
  553. IN PFILE_OBJECT FileObject,
  554. IN PLARGE_INTEGER FileOffset,
  555. IN ULONG Length,
  556. IN ULONG Flags,
  557. IN OUT PVOID *Bcb
  558. );
  559. NTKERNELAPI
  560. BOOLEAN
  561. CcPreparePinWrite (
  562. IN PFILE_OBJECT FileObject,
  563. IN PLARGE_INTEGER FileOffset,
  564. IN ULONG Length,
  565. IN BOOLEAN Zero,
  566. IN ULONG Flags,
  567. OUT PVOID *Bcb,
  568. OUT PVOID *Buffer
  569. );
  570. NTKERNELAPI
  571. VOID
  572. CcSetDirtyPinnedData (
  573. IN PVOID BcbVoid,
  574. IN PLARGE_INTEGER Lsn OPTIONAL
  575. );
  576. NTKERNELAPI
  577. VOID
  578. CcUnpinData (
  579. IN PVOID Bcb
  580. );
  581. NTKERNELAPI
  582. VOID
  583. CcSetBcbOwnerPointer (
  584. IN PVOID Bcb,
  585. IN PVOID OwnerPointer
  586. );
  587. NTKERNELAPI
  588. VOID
  589. CcUnpinDataForThread (
  590. IN PVOID Bcb,
  591. IN ERESOURCE_THREAD ResourceThreadId
  592. );
  593. // end_ntifs
  594. //
  595. // The following routines are in logsup.c, and provide special Cache Manager
  596. // support for storting Lsns with dirty file pages, and peforming subsequent
  597. // operations based on them.
  598. //
  599. NTKERNELAPI
  600. BOOLEAN
  601. CcSetPrivateWriteFile(
  602. PFILE_OBJECT FileObject
  603. );
  604. // begin_ntifs
  605. NTKERNELAPI
  606. VOID
  607. CcSetAdditionalCacheAttributes (
  608. IN PFILE_OBJECT FileObject,
  609. IN BOOLEAN DisableReadAhead,
  610. IN BOOLEAN DisableWriteBehind
  611. );
  612. NTKERNELAPI
  613. VOID
  614. CcSetLogHandleForFile (
  615. IN PFILE_OBJECT FileObject,
  616. IN PVOID LogHandle,
  617. IN PFLUSH_TO_LSN FlushToLsnRoutine
  618. );
  619. NTKERNELAPI
  620. LARGE_INTEGER
  621. CcGetDirtyPages (
  622. IN PVOID LogHandle,
  623. IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
  624. IN PVOID Context1,
  625. IN PVOID Context2
  626. );
  627. NTKERNELAPI
  628. BOOLEAN
  629. CcIsThereDirtyData (
  630. IN PVPB Vpb
  631. );
  632. // end_ntifs
  633. NTKERNELAPI
  634. LARGE_INTEGER
  635. CcGetLsnForFileObject(
  636. IN PFILE_OBJECT FileObject,
  637. OUT PLARGE_INTEGER OldestLsn OPTIONAL
  638. );
  639. //
  640. // Internal kernel interfaces for the prefetcher.
  641. //
  642. extern LONG CcPfNumActiveTraces;
  643. #define CCPF_IS_PREFETCHER_ACTIVE() (CcPfNumActiveTraces)
  644. extern LOGICAL CcPfEnablePrefetcher;
  645. #define CCPF_IS_PREFETCHER_ENABLED() (CcPfEnablePrefetcher)
  646. extern LOGICAL CcPfPrefetchingForBoot;
  647. #define CCPF_IS_PREFETCHING_FOR_BOOT() (CcPfPrefetchingForBoot)
  648. NTSTATUS
  649. CcPfInitializePrefetcher(
  650. VOID
  651. );
  652. NTSTATUS
  653. CcPfBeginBootPhase(
  654. PF_BOOT_PHASE_ID Phase
  655. );
  656. NTSTATUS
  657. CcPfBeginAppLaunch(
  658. PEPROCESS Process,
  659. PVOID Section
  660. );
  661. NTSTATUS
  662. CcPfProcessExitNotification(
  663. PEPROCESS Process
  664. );
  665. #define CCPF_TYPE_IMAGE 0x00000001 // Current fault is for an image
  666. #define CCPF_TYPE_ROM 0x00000002 // Current fault is for a ROM
  667. VOID
  668. CcPfLogPageFault(
  669. IN PFILE_OBJECT FileObject,
  670. IN ULONGLONG FileOffset,
  671. IN ULONG Flags
  672. );
  673. NTSTATUS
  674. CcPfQueryPrefetcherInformation (
  675. IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
  676. IN PVOID SystemInformation,
  677. IN ULONG SystemInformationLength,
  678. IN KPROCESSOR_MODE PreviousMode,
  679. OUT PULONG Length
  680. );
  681. NTSTATUS
  682. CcPfSetPrefetcherInformation (
  683. IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
  684. IN PVOID SystemInformation,
  685. IN ULONG SystemInformationLength,
  686. IN KPROCESSOR_MODE PreviousMode
  687. );
  688. //
  689. // Internal kernel interfaces for Perf FileName rundowns.
  690. //
  691. VOID
  692. CcPerfFileRunDown (
  693. IN PPERFINFO_ENTRY_TABLE HashTable
  694. );
  695. #endif // CACHE