This version should either pass or skip on W2KPROSP4.
---
dlls/kernel32/cpu.c | 23 ++++++++++++++++++-----
dlls/psapi/tests/psapi_main.c | 36 ++++++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+), 5 deletions(-)
diff --git a/dlls/kernel32/cpu.c b/dlls/kernel32/cpu.c
index 0ebf8f3..124e5c0 100644
--- a/dlls/kernel32/cpu.c
+++ b/dlls/kernel32/cpu.c
@@ -216,16 +216,29 @@ BOOL WINAPI IsProcessorFeaturePresent (
*/
BOOL WINAPI K32GetPerformanceInfo(PPERFORMANCE_INFORMATION info, DWORD size)
{
- NTSTATUS status;
+ MEMORYSTATUSEX mem_status;
TRACE( "(%p, %d)\n", info, size );
- status = NtQuerySystemInformation( SystemPerformanceInformation, info, size, NULL );
-
- if (status)
+ if(size < sizeof(PERFORMANCE_INFORMATION))
{
- SetLastError( RtlNtStatusToDosError( status ) );
+ SetLastError(ERROR_BAD_LENGTH);
return FALSE;
}
+
+ mem_status.dwLength = sizeof(mem_status);
+ if (!GlobalMemoryStatusEx( &mem_status ))
+ return FALSE;
+
+ memset(info, 0, sizeof(PERFORMANCE_INFORMATION));
+
+ info->cb = sizeof(PERFORMANCE_INFORMATION);
+ info->CommitLimit = min((mem_status.ullTotalPageFile / system_info.PageSize), MAXDWORD);
+ info->PhysicalTotal = min((mem_status.ullTotalPhys / system_info.PageSize), MAXDWORD);
+ info->PhysicalAvailable = min((mem_status.ullAvailPhys / system_info.PageSize), MAXDWORD);
+ info->PageSize = system_info.PageSize;
+
+ FIXME("stub\n");
+