From cfb3362f1e3337a8faf03f2b60305d0745a69704 Mon Sep 17 00:00:00 2001 From: Dibyamartanda Samanta Date: Fri, 17 May 2024 16:55:50 +0200 Subject: [PATCH] [NTOSKRNL:CC] Added CcSetAdditionalCacheAttributesEx --- NTOSKRNL/CC/ccloghandler.cpp | 46 ++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/NTOSKRNL/CC/ccloghandler.cpp b/NTOSKRNL/CC/ccloghandler.cpp index 24c52b0..09ba03a 100644 --- a/NTOSKRNL/CC/ccloghandler.cpp +++ b/NTOSKRNL/CC/ccloghandler.cpp @@ -53,7 +53,53 @@ Void NTAPI CcSetAdditionalCacheAttributes( KeReleaseQueuedSpinLock(LockQueueMasterLock, oldlock); } +VOID NTAPI CcSetAdditionalCacheAttributesEx(PFILE_OBJECT FileObject, + UINT Flags) +{ + PSHARED_CACHE_MAP sharedCacheMap = FileObject->SectionObjectPointer->SharedCacheMap; + KIRQL irqlDisableWriteBehind = {0}; + KLOCK_QUEUE_HANDLE lockQueueHandle = {0}; + BOOL disableReadAhead = (Flags & 2) != 0; + if (sharedCacheMap == nullptr||!sharedCacheMap->OpenCount) + DBGPRINT("Invalid Shared Cache Map or Open Count") + return; + + if ((sharedCacheMap->Flags & 0x2000) == 0) + CcSetAdditionalCacheAttributes(FileObject, disableReadAhead, (Flags & 4) != 0); + + + KeAcquireInStackQueuedSpinLockAtDpcLevel(&sharedCacheMap->BcbLock, &lockQueueHandle); + + if ((Flags & 1) != 0) + sharedCacheMap->Flags |= FLAG_DISABLE_WRITE_BEHIND; + else + sharedCacheMap->Flags &= ~FLAG_DISABLE_WRITE_BEHIND; + + if ((Flags & 8) != 0) + { + sharedCacheMap->Flags |= FLAG_DISABLE_LAZY_WRITER; + } + else + { + if ((sharedCacheMap->Flags & FLAG_DISABLE_LAZY_WRITER) != 0) + sharedCacheMap->Flags |= FLAG_LAZY_WRITER_ACTIVE; + sharedCacheMap->Flags &= ~FLAG_DISABLE_LAZY_WRITER; + } + + if ((Flags & 0x10) != 0) + sharedCacheMap->Flags |= FLAG_DISABLE_LAZY_WRITER_SCAN; + else + sharedCacheMap->Flags &= ~FLAG_DISABLE_LAZY_WRITER_SCAN; + + if ((Flags & 0x20) != 0) + sharedCacheMap->Flags |= FLAG_DISABLE_METADATA_FLUSH; + else + sharedCacheMap->Flags &= ~FLAG_DISABLE_METADATA_FLUSH; + + KeReleaseInStackQueuedSpinLockFromDpcLevel(&lockQueueHandle); + +} VOID