From 5a5ebcae893046725c3829086d69c3bc133e133d Mon Sep 17 00:00:00 2001 From: Dibyamartanda Samanta Date: Fri, 24 May 2024 18:05:45 +0200 Subject: [PATCH] [NTOSKRNL:CC] Fixed Probing code --- NTOSKRNL/CC/ccmdlhandler.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/NTOSKRNL/CC/ccmdlhandler.cpp b/NTOSKRNL/CC/ccmdlhandler.cpp index 7fdee96..9c72441 100644 --- a/NTOSKRNL/CC/ccmdlhandler.cpp +++ b/NTOSKRNL/CC/ccmdlhandler.cpp @@ -302,6 +302,8 @@ CcPrepareMdlWrite(IN PFILE_OBJECT FileObject, ULONG ZeroOpsFlags = {0}; PVACB Vacb = nullptr; BOOL MapFlag = false; + PKTHREAD currentThread = nullptr; + UCHAR SavedState ={0}; if ((FileObject->Flags & 0x10) == 0) { if (IoIsFileOriginRemote(FileObject) && !CcCanIWriteStream(FileObject, Length, 0, 0)) @@ -352,14 +354,13 @@ CcPrepareMdlWrite(IN PFILE_OBJECT FileObject, Mdl = IoAllocateMdl(VirtualAddress, ReceivedLength, FALSE, FALSE, NULL); if (!Mdl) RtlRaiseStatus(STATUS_INSUFFICIENT_RESOURCES ); - /*Save the current state of the UserIdealProcessor field & Then Performe Probing and locking of pages*/ - PKTHREAD currentThread = KeGetCurrentThread(); - PULONG userIdealProcessorByte = (PULONG)((ULONG_PTR)currentThread + userIdealProcessorOffset); - ULONG savedState = *(userIdealProcessorByte + 1) + 2; - *(userIdealProcessorByte + 1) = 1; - MmProbeAndLockPages(mdl, KernelMode, IoWriteAccess); - /*Restore the saved state of the UserIdealProcessor field*/ - *(userIdealProcessorByte + 1) = savedState - 2; + + currentThread = KeGetCurrentThread(); + SavedState = currentThread->UserIdealProcessor + 2; + currentThread->UserIdealProcessor = 1; + MmProbeAndLockPages(Mdl, KernelMode, IoWriteAccess); + currentThread->UserIdealProcessor = SavedState - 2; + SavedState /* Update the Read Aheas Stats*/ KeAcquireInStackQueuedSpinLock(&SharedCacheMap->BcbSpinLock, &LockHandle); if ( ReadAhead_Length.QuadPart > SharedCacheMap->ValidDataGoal.QuadPart )