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 VacbLruListEntry
;
139 /* Offset in the file which this view maps. */
140 LARGE_INTEGER FileOffset
;
143 /* Number of references. */
144 ULONG ReferenceCount
;
145 /* Pointer to the shared cache map for the file which this view maps data for. */
146 PROS_SHARED_CACHE_MAP SharedCacheMap
;
147 /* Pointer to the next VACB in a chain. */
148 } ROS_VACB
, *PROS_VACB
;
150 typedef struct _INTERNAL_BCB
155 CSHORT RefCount
; /* (At offset 0x34 on WinNT4) */
156 } INTERNAL_BCB
, *PINTERNAL_BCB
;
160 CcPfInitializePrefetcher(
167 IN PFILE_OBJECT FileObject
,
168 IN PMDL MemoryDescriptorList
174 IN PFILE_OBJECT FileObject
,
175 IN PLARGE_INTEGER FileOffset
,
181 CcRosFlushVacb(PROS_VACB Vacb
);
186 PROS_SHARED_CACHE_MAP SharedCacheMap
,
188 PLONGLONG BaseOffset
,
200 CcReadVirtualAddress(PROS_VACB Vacb
);
204 CcWriteVirtualAddress(PROS_VACB Vacb
);
208 CcInitializeCacheManager(VOID
);
213 PROS_SHARED_CACHE_MAP SharedCacheMap
,
221 PROS_SHARED_CACHE_MAP SharedCacheMap
,
227 CcInitCacheZeroPage(VOID
);
232 PROS_SHARED_CACHE_MAP SharedCacheMap
,
238 CcRosFlushDirtyPages(
246 CcRosDereferenceCache(PFILE_OBJECT FileObject
);
250 CcRosReferenceCache(PFILE_OBJECT FileObject
);
254 CcRosRemoveIfClosed(PSECTION_OBJECT_POINTERS SectionObjectPointer
);
259 PROS_SHARED_CACHE_MAP SharedCacheMap
,
269 PROS_SHARED_CACHE_MAP SharedCacheMap
,
278 CcRosInitializeFileCache(
279 PFILE_OBJECT FileObject
,
280 PCC_FILE_SIZES FileSizes
,
281 PCACHE_MANAGER_CALLBACKS CallBacks
,
282 PVOID LazyWriterContext
287 CcRosReleaseFileCache(
288 PFILE_OBJECT FileObject
293 CcTryToInitializeFileCache(PFILE_OBJECT FileObject
);
298 _In_ LONGLONG Offset1
,
299 _In_ LONGLONG Length1
,
300 _In_ LONGLONG Offset2
,
301 _In_ LONGLONG Length2
)
303 if (Offset1
+ Length1
<= Offset2
)
305 if (Offset2
+ Length2
<= Offset1
)
313 _In_ LONGLONG Offset1
,
314 _In_ LONGLONG Length1
,
317 return DoRangesIntersect(Offset1
, Length1
, Point
, 1);