On CcInitializeCacheMap() call, keep track of the PinAccess value so that we can later check it on pinning.
It shouldn't be set to FALSE when the user attempts to perform pinning
CORE-11310
svn path=/trunk/; revision=71404
/* Call old ROS cache init function */
Status = CcRosInitializeFileCache(FileObject,
FileSizes,
+ PinAccess,
CallBacks,
LazyWriterContext);
if (!NT_SUCCESS(Status))
IN ULONG Flags,
OUT PVOID * Bcb)
{
+ PROS_SHARED_CACHE_MAP SharedCacheMap;
+
CCTRACE(CC_API_DEBUG, "FileOffset=%p FileOffset=%p Length=%lu Flags=0x%lx\n",
FileObject, FileOffset, Length, Flags);
+ ASSERT(FileObject);
+ ASSERT(FileObject->SectionObjectPointer);
+ ASSERT(FileObject->SectionObjectPointer->SharedCacheMap);
+
+ SharedCacheMap = FileObject->SectionObjectPointer->SharedCacheMap;
+ ASSERT(SharedCacheMap);
+ ASSERT(SharedCacheMap->PinAccess);
+
/* no-op for current implementation. */
return TRUE;
}
CcRosInitializeFileCache (
PFILE_OBJECT FileObject,
PCC_FILE_SIZES FileSizes,
+ BOOLEAN PinAccess,
PCACHE_MANAGER_CALLBACKS CallBacks,
PVOID LazyWriterContext)
/*
SharedCacheMap->LazyWriteContext = LazyWriterContext;
SharedCacheMap->SectionSize = FileSizes->AllocationSize;
SharedCacheMap->FileSize = FileSizes->FileSize;
+ SharedCacheMap->PinAccess = PinAccess;
KeInitializeSpinLock(&SharedCacheMap->CacheMapLock);
InitializeListHead(&SharedCacheMap->CacheMapVacbListHead);
FileObject->SectionObjectPointer->SharedCacheMap = SharedCacheMap;
PFILE_OBJECT FileObject;
LARGE_INTEGER SectionSize;
LARGE_INTEGER FileSize;
+ BOOLEAN PinAccess;
PCACHE_MANAGER_CALLBACKS Callbacks;
PVOID LazyWriteContext;
KSPIN_LOCK CacheMapLock;
CcRosInitializeFileCache(
PFILE_OBJECT FileObject,
PCC_FILE_SIZES FileSizes,
+ BOOLEAN PinAccess,
PCACHE_MANAGER_CALLBACKS CallBacks,
PVOID LazyWriterContext
);