https://git.reactos.org/?p=reactos.git;a=commitdiff;h=7ed0284e8eb25b5512d551bc9256cdfc945c0351

commit 7ed0284e8eb25b5512d551bc9256cdfc945c0351
Author:     Kyle Katarn <[email protected]>
AuthorDate: Sat Sep 3 22:56:33 2022 +0200
Commit:     GitHub <[email protected]>
CommitDate: Sat Sep 3 22:56:33 2022 +0200

    [NTOS:EX] Fix returned number of handles for Idle System Process (#4661)
    
    PsIdleProcess and PsInitialSystemProcess share the same handle table. This
    leads ObGetProcessHandleCount() to report the same number of handles
    when called on those system processes, when being enumerated by
    NtQuerySystemInformation(SystemProcessInformation).
    
    Instead, just return 0 for the handle count of the Idle process in 
SystemProcessInformation.
    This is not done in ObGetProcessHandleCount(), since a separate
    NtQueryInformationProcess(ProcessHandleCount) for the idle process should 
return
    a non-zero value.
    
    CORE-16577
---
 ntoskrnl/ex/sysinfo.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/ntoskrnl/ex/sysinfo.c b/ntoskrnl/ex/sysinfo.c
index 43ff88faaff..bf9b957fd42 100644
--- a/ntoskrnl/ex/sysinfo.c
+++ b/ntoskrnl/ex/sysinfo.c
@@ -1031,7 +1031,11 @@ QSI_DEF(SystemProcessInformation)
                 SpiCurrent->BasePriority = Process->Pcb.BasePriority;
                 SpiCurrent->UniqueProcessId = Process->UniqueProcessId;
                 SpiCurrent->InheritedFromUniqueProcessId = 
Process->InheritedFromUniqueProcessId;
-                SpiCurrent->HandleCount = ObGetProcessHandleCount(Process);
+
+                /* PsIdleProcess shares its handle table with 
PsInitialSystemProcess,
+                 * so return the handle count for System only, not Idle one. */
+                SpiCurrent->HandleCount = (Process == PsIdleProcess) ? 0 : 
ObGetProcessHandleCount(Process);
+
                 SpiCurrent->PeakVirtualSize = Process->PeakVirtualSize;
                 SpiCurrent->VirtualSize = Process->VirtualSize;
                 SpiCurrent->PageFaultCount = Process->Vm.PageFaultCount;

Reply via email to