From: Pierre Schweitzer Date: Sun, 9 Dec 2018 17:56:50 +0000 (+0100) Subject: [NTOSKRNL] For SystemPerformanceInformation, return some info extracted from PRCB X-Git-Tag: 0.4.13-dev~1079 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=e63237585122fb0555e07af7a4ba089ffe1d590f [NTOSKRNL] For SystemPerformanceInformation, return some info extracted from PRCB This notably includes the amount of context switchs and system calls. --- diff --git a/ntoskrnl/ex/sysinfo.c b/ntoskrnl/ex/sysinfo.c index 09b9a6359c9..b43aa2c1f9b 100644 --- a/ntoskrnl/ex/sysinfo.c +++ b/ntoskrnl/ex/sysinfo.c @@ -669,7 +669,9 @@ QSI_DEF(SystemProcessorInformation) /* Class 2 - Performance Information */ QSI_DEF(SystemPerformanceInformation) { + LONG i; ULONG IdleUser, IdleKernel; + PKPRCB Prcb; PSYSTEM_PERFORMANCE_INFORMATION Spi = (PSYSTEM_PERFORMANCE_INFORMATION) Buffer; @@ -786,10 +788,23 @@ QSI_DEF(SystemPerformanceInformation) Spi->CcLazyWritePages = CcLazyWritePages; Spi->CcDataFlushes = CcDataFlushes; Spi->CcDataPages = CcDataPages; - Spi->ContextSwitches = 0; /* FIXME */ - Spi->FirstLevelTbFills = 0; /* FIXME */ - Spi->SecondLevelTbFills = 0; /* FIXME */ - Spi->SystemCalls = 0; /* FIXME */ + + Spi->ContextSwitches = 0; + Spi->FirstLevelTbFills = 0; + Spi->SecondLevelTbFills = 0; + Spi->SystemCalls = 0; + for (i = 0; i < KeNumberProcessors; i ++) + { + Prcb = KiProcessorBlock[i]; + if (Prcb) + { + Spi->ContextSwitches += KeGetContextSwitches(Prcb); + Spi->FirstLevelTbFills += Prcb->KeFirstLevelTbFills; + Spi->SecondLevelTbFills += Prcb->KeSecondLevelTbFills; + Spi->SystemCalls += Prcb->KeSystemCalls; + } + } + return STATUS_SUCCESS; }