From: Bernard Ladenthin Subject: kernel32/time: Implement GetSystemTimes using NtQuerySystemInformation. Message-Id: <53A8B3C2.2020309@gmail.com> Date: Tue, 24 Jun 2014 01:09:54 +0200 --- dlls/kernel32/time.c | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/dlls/kernel32/time.c b/dlls/kernel32/time.c index 21ac120..b27e87f 100644 --- a/dlls/kernel32/time.c +++ b/dlls/kernel32/time.c @@ -1081,18 +1081,42 @@ BOOL WINAPI FileTimeToDosDateTime( const FILETIME *ft, LPWORD fatdate, * Retrieves system timing information * * PARAMS - * lpIdleTime [O] Destination for idle time. - * lpKernelTime [O] Destination for kernel time. - * lpUserTime [O] Destination for user time. + * lpIdleTime [out] Destination for idle time. + * lpKernelTime [out] Destination for kernel time. + * lpUserTime [out] Destination for user time. * * RETURNS * TRUE if success, FALSE otherwise. */ BOOL WINAPI GetSystemTimes(LPFILETIME lpIdleTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime) { - FIXME("(%p,%p,%p): Stub!\n", lpIdleTime, lpKernelTime, lpUserTime); + SYSTEM_BASIC_INFORMATION sbi; + SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION *sppi = NULL; + ULONG len; + long long idleTime = 0, kernelTime = 0, userTime = 0; + int i; - return FALSE; + NtQuerySystemInformation(SystemBasicInformation, &sbi, sizeof(SYSTEM_BASIC_INFORMATION), NULL); + + len = sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) * sbi.NumberOfProcessors; + sppi = RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY, len); + + NtQuerySystemInformation(SystemProcessorPerformanceInformation, sppi, len, NULL); + + for (i=0; i < sbi.NumberOfProcessors; ++i) + { + idleTime += sppi[i].IdleTime.QuadPart; + kernelTime += sppi[i].KernelTime.QuadPart; + userTime += sppi[i].UserTime.QuadPart; + } + + RtlFreeHeap(GetProcessHeap(), 0, sppi); + + if (lpIdleTime) LL2FILETIME(idleTime, lpIdleTime); + if (lpKernelTime) LL2FILETIME(kernelTime, lpKernelTime); + if (lpUserTime) LL2FILETIME(userTime, lpUserTime); + + return TRUE; } /***********************************************************************