From 785ff4b64439c840e09d62ad39a5e16e8227d531 Mon Sep 17 00:00:00 2001 From: Dibyamartanda Samanta Date: Sat, 25 May 2024 09:42:40 +0200 Subject: [PATCH] [NTOSKRNL:CC] Bug Fix --- NTOSKRNL/CC/ccinternal.hpp | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/NTOSKRNL/CC/ccinternal.hpp b/NTOSKRNL/CC/ccinternal.hpp index cea2361..b79d147 100644 --- a/NTOSKRNL/CC/ccinternal.hpp +++ b/NTOSKRNL/CC/ccinternal.hpp @@ -10,39 +10,51 @@ #include -BOOL -NTAPI -IsGoToNextMap(IN PSHARED_CACHE_MAP SharedMap, IN ULONG TargetPages) +BOOLEAN NTAPI IsGoToNextMap(IN PSHARED_CACHE_MAP SharedMap, IN ULONG TargetPages) { BOOLEAN Skip = FALSE; - if (SharedMap->Flags & (0x20 | 0x800)) + // If the map is marked for teardown or modified without writing, return TRUE + if (SharedMap->Flags & (SHARE_FL_WAITING_TEARDOWN | SHARE_FL_MODIFIED_NO_WRITE)) { return TRUE; + } - if ((SharedMap->OpenCount || SharedMap->DirtyPages) && SharedMap->FileSize.QuadPart) - { + // Determine if we should skip based on open count and dirty pages + if ((SharedMap->OpenCount || SharedMap->DirtyPages) && SharedMap->FileSize.QuadPart != 0) { Skip = TRUE; } - if (!SharedMap->DirtyPages && Skip) + // Skip if no dirty pages but `Skip` is `TRUE` + if (!SharedMap->DirtyPages && Skip) { return TRUE; + } - if (SharedMap->Flags & SHARE_FL_WAITING_TEARDOWN) + // If the map is waiting for teardown, return FALSE + if (SharedMap->Flags & SHARE_FL_WAITING_TEARDOWN) { return FALSE; + } - if (!TargetPages && Skip) + // Skip if no target pages and `Skip` is `TRUE` + if (TargetPages == 0 && Skip) { return TRUE; + } + // Increment the lazy write pass count SharedMap->LazyWritePassCount++; - if ((SharedMap->LazyWritePassCount & 0xF) && (SharedMap->Flags & SHARE_FL_MODIFIED_NO_WRITE) && - CcCapturedSystemSize != MmSmallSystem && SharedMap->DirtyPages < 0x40 && Skip) + // Skip based on lazy write pass count and other conditions + if ((SharedMap->LazyWritePassCount & 0xF) && + (SharedMap->Flags & SHARE_FL_MODIFIED_NO_WRITE) && + CcCapturedSystemSize != MmSmallSystem && + SharedMap->DirtyPages < 0x40 && Skip) { return TRUE; } - if ((SharedMap->FileObject->Flags & 0x8000) && SharedMap->OpenCount && - CcCanIWrite(SharedMap->FileObject, 0x40000, 0, 0xFF) && Skip) + // Skip if file object is marked for direct I/O and other conditions + if ((SharedMap->FileObject->Flags & FO_DIRECT_IO) && + SharedMap->OpenCount != 0 && + CcCanIWrite(SharedMap->FileObject, 0x40000, FALSE, 0xFF) && Skip) { return TRUE; }