3 typedef struct _PF_SCENARIO_ID
7 } PF_SCENARIO_ID
, *PPF_SCENARIO_ID
;
9 typedef struct _PF_LOG_ENTRY
16 ULONG FileSequenceNumber
;
18 } PF_LOG_ENTRY
, *PPF_LOG_ENTRY
;
20 typedef struct _PFSN_LOG_ENTRIES
22 LIST_ENTRY TraceBuffersLink
;
25 PF_LOG_ENTRY Entries
[ANYSIZE_ARRAY
];
26 } PFSN_LOG_ENTRIES
, *PPFSN_LOG_ENTRIES
;
28 typedef struct _PF_SECTION_INFO
31 ULONG FileSequenceNumber
;
34 } PF_SECTION_INFO
, *PPF_SECTION_INFO
;
36 typedef struct _PF_TRACE_HEADER
41 PF_SCENARIO_ID ScenarioId
;
42 ULONG ScenarioType
; // PF_SCENARIO_TYPE
43 ULONG EventEntryIdxs
[8];
44 ULONG NumEventEntryIdxs
;
45 ULONG TraceBufferOffset
;
47 ULONG SectionInfoOffset
;
49 ULONG FaultsPerPeriod
[10];
50 LARGE_INTEGER LaunchTime
;
51 ULONGLONG Reserved
[5];
52 } PF_TRACE_HEADER
, *PPF_TRACE_HEADER
;
54 typedef struct _PFSN_TRACE_DUMP
56 LIST_ENTRY CompletedTracesLink
;
57 PF_TRACE_HEADER Trace
;
58 } PFSN_TRACE_DUMP
, *PPFSN_TRACE_DUMP
;
60 typedef struct _PFSN_TRACE_HEADER
63 LIST_ENTRY ActiveTracesLink
;
64 PF_SCENARIO_ID ScenarioId
;
65 ULONG ScenarioType
; // PF_SCENARIO_TYPE
66 ULONG EventEntryIdxs
[8];
67 ULONG NumEventEntryIdxs
;
68 PPFSN_LOG_ENTRIES CurrentTraceBuffer
;
69 LIST_ENTRY TraceBuffersList
;
70 ULONG NumTraceBuffers
;
71 KSPIN_LOCK TraceBufferSpinLock
;
73 LARGE_INTEGER TraceTimerPeriod
;
75 KSPIN_LOCK TraceTimerSpinLock
;
76 ULONG FaultsPerPeriod
[10];
82 EX_RUNDOWN_REF RefCount
;
83 WORK_QUEUE_ITEM EndTraceWorkItem
;
85 PPFSN_TRACE_DUMP TraceDump
;
86 NTSTATUS TraceDumpStatus
;
87 LARGE_INTEGER LaunchTime
;
88 PPF_SECTION_INFO SectionInfo
;
89 ULONG SectionInfoCount
;
90 } PFSN_TRACE_HEADER
, *PPFSN_TRACE_HEADER
;
92 typedef struct _PFSN_PREFETCHER_GLOBALS
94 LIST_ENTRY ActiveTraces
;
95 KSPIN_LOCK ActiveTracesLock
;
96 PPFSN_TRACE_HEADER SystemWideTrace
;
97 LIST_ENTRY CompletedTraces
;
98 FAST_MUTEX CompletedTracesLock
;
99 LONG NumCompletedTraces
;
100 PKEVENT CompletedTracesEvent
;
101 LONG ActivePrefetches
;
102 } PFSN_PREFETCHER_GLOBALS
, *PPFSN_PREFETCHER_GLOBALS
;
104 typedef struct _ROS_SHARED_CACHE_MAP
106 LIST_ENTRY CacheMapVacbListHead
;
108 PFILE_OBJECT FileObject
;
109 LARGE_INTEGER SectionSize
;
110 LARGE_INTEGER FileSize
;
111 PCACHE_MANAGER_CALLBACKS Callbacks
;
112 PVOID LazyWriteContext
;
113 KSPIN_LOCK CacheMapLock
;
116 BOOLEAN Trace
; /* enable extra trace output for this cache map and it's VACBs */
118 } ROS_SHARED_CACHE_MAP
, *PROS_SHARED_CACHE_MAP
;
120 typedef struct _ROS_VACB
122 /* Base address of the region where the view's data is mapped. */
124 /* Memory area representing the region where the view's data is mapped. */
125 struct _MEMORY_AREA
* MemoryArea
;
126 /* Are the contents of the view valid. */
128 /* Are the contents of the view newer than those on disk. */
130 /* Page out in progress */
133 /* Entry in the list of VACBs for this shared cache map. */
134 LIST_ENTRY CacheMapVacbListEntry
;
135 /* Entry in the list of VACBs which are dirty. */
136 LIST_ENTRY DirtyVacbListEntry
;
137 /* Entry in the list of VACBs. */
138 LIST_ENTRY VacbListEntry
;
139 LIST_ENTRY VacbLruListEntry
;
140 /* Offset in the file which this view maps. */
141 LARGE_INTEGER FileOffset
;
144 /* Number of references. */
145 ULONG ReferenceCount
;
146 /* Pointer to the shared cache map for the file which this view maps data for. */
147 PROS_SHARED_CACHE_MAP SharedCacheMap
;
148 /* Pointer to the next VACB in a chain. */
149 struct _ROS_VACB
*NextInChain
;
150 } ROS_VACB
, *PROS_VACB
;
152 typedef struct _INTERNAL_BCB
157 CSHORT RefCount
; /* (At offset 0x34 on WinNT4) */
158 } INTERNAL_BCB
, *PINTERNAL_BCB
;
162 CcPfInitializePrefetcher(
169 IN PFILE_OBJECT FileObject
,
170 IN PMDL MemoryDescriptorList
176 IN PFILE_OBJECT FileObject
,
177 IN PLARGE_INTEGER FileOffset
,
183 CcRosFlushVacb(PROS_VACB Vacb
);
188 PROS_SHARED_CACHE_MAP SharedCacheMap
,
190 PULONGLONG BaseOffset
,
202 CcReadVirtualAddress(PROS_VACB Vacb
);
206 CcWriteVirtualAddress(PROS_VACB Vacb
);
210 CcInitializeCacheManager(VOID
);
215 PROS_SHARED_CACHE_MAP SharedCacheMap
,
223 PROS_SHARED_CACHE_MAP SharedCacheMap
,
230 PROS_SHARED_CACHE_MAP SharedCacheMap
,
238 CcInitCacheZeroPage(VOID
);
243 PROS_SHARED_CACHE_MAP SharedCacheMap
,
249 CcRosFlushDirtyPages(
257 CcRosDereferenceCache(PFILE_OBJECT FileObject
);
261 CcRosReferenceCache(PFILE_OBJECT FileObject
);
265 CcRosRemoveIfClosed(PSECTION_OBJECT_POINTERS SectionObjectPointer
);
270 PROS_SHARED_CACHE_MAP SharedCacheMap
,
280 PROS_SHARED_CACHE_MAP SharedCacheMap
,
289 CcRosInitializeFileCache(
290 PFILE_OBJECT FileObject
,
291 PCACHE_MANAGER_CALLBACKS CallBacks
,
292 PVOID LazyWriterContext
297 CcRosReleaseFileCache(
298 PFILE_OBJECT FileObject
303 CcTryToInitializeFileCache(PFILE_OBJECT FileObject
);
308 _In_ ULONGLONG Offset1
,
310 _In_ ULONGLONG Offset2
,
313 if (Offset1
+ Length1
<= Offset2
)
315 if (Offset2
+ Length2
<= Offset1
)
323 _In_ ULONGLONG Offset1
,
325 _In_ ULONGLONG Point
)
327 return DoRangesIntersect(Offset1
, Length1
, Point
, 1);