BOOLEAN RemoveOnClose;
ULONG TimeStamp;
PFILE_OBJECT FileObject;
- ULONG CacheSegmentSize;
LARGE_INTEGER AllocationSize;
LARGE_INTEGER FileSize;
PCACHE_MANAGER_CALLBACKS Callbacks;
LIST_ENTRY CacheSegmentLRUListEntry;
/* Offset in the file which this cache segment maps. */
ULONG FileOffset;
- /* Lock. */
- EX_PUSH_LOCK Lock;
+ /* Mutex */
+ KMUTEX Mutex;
/* Number of references. */
ULONG ReferenceCount;
/* Pointer to the BCB for the file which this cache segment maps data for. */
VOID
NTAPI
CcMdlReadComplete2(
- IN PMDL MemoryDescriptorList,
- IN PFILE_OBJECT FileObject
+ IN PFILE_OBJECT FileObject,
+ IN PMDL MemoryDescriptorList
);
VOID
NTAPI
CcInitView(VOID);
-NTSTATUS
-NTAPI
-CcRosFreeCacheSegment(
- PBCB,
- PCACHE_SEGMENT
-);
-
NTSTATUS
NTAPI
ReadCacheSegment(PCACHE_SEGMENT CacheSeg);
NTAPI
CcRosFlushDirtyPages(
ULONG Target,
- PULONG Count
+ PULONG Count,
+ BOOLEAN Wait
);
VOID
NTAPI
CcRosInitializeFileCache(
PFILE_OBJECT FileObject,
- ULONG CacheSegmentSize,
PCACHE_MANAGER_CALLBACKS CallBacks,
PVOID LazyWriterContext
);
NTSTATUS
NTAPI
CcTryToInitializeFileCache(PFILE_OBJECT FileObject);
+
+FORCEINLINE
+BOOLEAN
+DoSegmentsIntersect(
+ _In_ ULONG Offset1,
+ _In_ ULONG Length1,
+ _In_ ULONG Offset2,
+ _In_ ULONG Length2)
+{
+ if (Offset1 + Length1 <= Offset2)
+ return FALSE;
+ if (Offset2 + Length2 <= Offset1)
+ return FALSE;
+ return TRUE;
+}
+
+FORCEINLINE
+BOOLEAN
+IsPointInSegment(
+ _In_ ULONG Offset1,
+ _In_ ULONG Length1,
+ _In_ ULONG Point)
+{
+ return DoSegmentsIntersect(Offset1, Length1, Point, 1);
+}