Module: wine Branch: master Commit: 40294182c1554a97dcfa8414b609b6f8de8f5239 URL: http://source.winehq.org/git/wine.git/?a=commit;h=40294182c1554a97dcfa8414b6...
Author: André Hentschel nerv@dawncrow.de Date: Mon Jan 3 20:27:00 2011 +0100
ntdll: Respect multiple CPUs when faking values.
---
dlls/ntdll/nt.c | 19 ++++++++++--------- 1 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c index 7ad56e4..ee78aec 100644 --- a/dlls/ntdll/nt.c +++ b/dlls/ntdll/nt.c @@ -1647,17 +1647,18 @@ NTSTATUS WINAPI NtQuerySystemInformation( if (cpus == 0) { static int i = 1; - - sppi = RtlAllocateHeap(GetProcessHeap(),0,sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)); - - memset(sppi, 0 , sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)); + int n; + cpus = min(NtCurrentTeb()->Peb->NumberOfProcessors, out_cpus); + len = sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) * cpus; + sppi = RtlAllocateHeap(GetProcessHeap(), 0, len); FIXME("stub info_class SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION\n"); - /* many programs expect these values to change so fake change */ - len = sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION); - sppi->KernelTime.QuadPart = 1 * i; - sppi->UserTime.QuadPart = 2 * i; - sppi->IdleTime.QuadPart = 3 * i; + for (n = 0; n < cpus; n++) + { + sppi[n].KernelTime.QuadPart = 1 * i; + sppi[n].UserTime.QuadPart = 2 * i; + sppi[n].IdleTime.QuadPart = 3 * i; + } i++; }