kernel32: Implement GetSystemTimes.
This commit is contained in:
parent
305a73bcb5
commit
5e817e93de
|
@ -820,7 +820,7 @@ static void test_GetSystemTimes(void)
|
|||
return;
|
||||
}
|
||||
|
||||
todo_wine ok( pGetSystemTimes(NULL, NULL, NULL), "GetSystemTimes failed unexpectedly\n" );
|
||||
ok( pGetSystemTimes(NULL, NULL, NULL), "GetSystemTimes failed unexpectedly\n" );
|
||||
|
||||
total_usertime.QuadPart = 0;
|
||||
total_kerneltime.QuadPart = 0;
|
||||
|
@ -828,8 +828,8 @@ static void test_GetSystemTimes(void)
|
|||
memset( &idletime, 0x11, sizeof(idletime) );
|
||||
memset( &kerneltime, 0x11, sizeof(kerneltime) );
|
||||
memset( &usertime, 0x11, sizeof(usertime) );
|
||||
todo_wine ok( pGetSystemTimes(&idletime, &kerneltime , &usertime),
|
||||
"GetSystemTimes failed unexpectedly\n" );
|
||||
ok( pGetSystemTimes(&idletime, &kerneltime , &usertime),
|
||||
"GetSystemTimes failed unexpectedly\n" );
|
||||
|
||||
ul1.LowPart = idletime.dwLowDateTime;
|
||||
ul1.HighPart = idletime.dwHighDateTime;
|
||||
|
@ -861,9 +861,9 @@ static void test_GetSystemTimes(void)
|
|||
total_idletime.QuadPart += sppi[i].IdleTime.QuadPart;
|
||||
}
|
||||
|
||||
todo_wine ok( total_idletime.QuadPart - ul1.QuadPart < 10000000, "test idletime failed\n" );
|
||||
todo_wine ok( total_kerneltime.QuadPart - ul2.QuadPart < 10000000, "test kerneltime failed\n" );
|
||||
todo_wine ok( total_usertime.QuadPart - ul3.QuadPart < 10000000, "test usertime failed\n" );
|
||||
ok( total_idletime.QuadPart - ul1.QuadPart < 10000000, "test idletime failed\n" );
|
||||
ok( total_kerneltime.QuadPart - ul2.QuadPart < 10000000, "test kerneltime failed\n" );
|
||||
ok( total_usertime.QuadPart - ul3.QuadPart < 10000000, "test usertime failed\n" );
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, sppi);
|
||||
}
|
||||
|
|
|
@ -1104,9 +1104,67 @@ BOOL WINAPI FileTimeToDosDateTime( const FILETIME *ft, LPWORD fatdate,
|
|||
*/
|
||||
BOOL WINAPI GetSystemTimes(LPFILETIME lpIdleTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime)
|
||||
{
|
||||
FIXME("(%p,%p,%p): Stub!\n", lpIdleTime, lpKernelTime, lpUserTime);
|
||||
LARGE_INTEGER idle_time, kernel_time, user_time;
|
||||
SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION *sppi;
|
||||
SYSTEM_BASIC_INFORMATION sbi;
|
||||
NTSTATUS status;
|
||||
ULONG ret_size;
|
||||
int i;
|
||||
|
||||
return FALSE;
|
||||
TRACE("(%p,%p,%p)\n", lpIdleTime, lpKernelTime, lpUserTime);
|
||||
|
||||
status = NtQuerySystemInformation( SystemBasicInformation, &sbi, sizeof(sbi), &ret_size );
|
||||
if (status != STATUS_SUCCESS)
|
||||
{
|
||||
SetLastError( RtlNtStatusToDosError(status) );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
sppi = HeapAlloc( GetProcessHeap(), 0,
|
||||
sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION) * sbi.NumberOfProcessors);
|
||||
if (!sppi)
|
||||
{
|
||||
SetLastError( ERROR_OUTOFMEMORY );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
status = NtQuerySystemInformation( SystemProcessorPerformanceInformation, sppi, sizeof(*sppi) * sbi.NumberOfProcessors,
|
||||
&ret_size );
|
||||
if (status != STATUS_SUCCESS)
|
||||
{
|
||||
HeapFree( GetProcessHeap(), 0, sppi );
|
||||
SetLastError( RtlNtStatusToDosError(status) );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
idle_time.QuadPart = 0;
|
||||
kernel_time.QuadPart = 0;
|
||||
user_time.QuadPart = 0;
|
||||
for (i = 0; i < sbi.NumberOfProcessors; i++)
|
||||
{
|
||||
idle_time.QuadPart += sppi[i].IdleTime.QuadPart;
|
||||
kernel_time.QuadPart += sppi[i].KernelTime.QuadPart;
|
||||
user_time.QuadPart += sppi[i].UserTime.QuadPart;
|
||||
}
|
||||
|
||||
if (lpIdleTime)
|
||||
{
|
||||
lpIdleTime->dwLowDateTime = idle_time.u.LowPart;
|
||||
lpIdleTime->dwHighDateTime = idle_time.u.HighPart;
|
||||
}
|
||||
if (lpKernelTime)
|
||||
{
|
||||
lpKernelTime->dwLowDateTime = kernel_time.u.LowPart;
|
||||
lpKernelTime->dwHighDateTime = kernel_time.u.HighPart;
|
||||
}
|
||||
if (lpUserTime)
|
||||
{
|
||||
lpUserTime->dwLowDateTime = user_time.u.LowPart;
|
||||
lpUserTime->dwHighDateTime = user_time.u.HighPart;
|
||||
}
|
||||
|
||||
HeapFree( GetProcessHeap(), 0, sppi );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
|
Loading…
Reference in New Issue