/********************************************************************* * GetProcessTimes (KERNEL32.@) * * Returns the user and kernel execution times of a process, * along with the creation and exit times if known. * * [email protected]: * Would be nice to subtract the cpu time, used by Wine at startup. * Also, there is a need to separate times used by different applications. * * RETURNS * * Always returns true. * * BUGS * * lpCreationTime, lpExitTime are NOT INITIALIZED. */ BOOL WINAPI GetProcessTimes( HANDLE hprocess, /* [in] The process to be queried (obtained from PROCESS_QUERY_INFORMATION). */ LPFILETIME lpCreationTime, /* [out] The creation time of the process. */ LPFILETIME lpExitTime, /* [out] The exit time of the process if exited. */ LPFILETIME lpKernelTime, /* [out] The time spent in kernal routines in 100's of nanoseconds. */ LPFILETIME lpUserTime) /* [out] The time spent in user routines in 100's of nanoseconds. */ { struct tms tms; times(&tms); TIME_ClockTimeToFileTime(tms.tms_utime,lpUserTime); TIME_ClockTimeToFileTime(tms.tms_stime,lpKernelTime); return TRUE; }
/********************************************************************* * GetProcessTimes (KERNEL32.@) * * Get the user and kernel execution times of a process, * along with the creation and exit times if known. * * PARAMS * hprocess [in] The process to be queried. * lpCreationTime [out] The creation time of the process. * lpExitTime [out] The exit time of the process if exited. * lpKernelTime [out] The time spent in kernel routines in 100's of nanoseconds. * lpUserTime [out] The time spent in user routines in 100's of nanoseconds. * * RETURNS * TRUE. * * NOTES * [email protected]: * Would be nice to subtract the cpu time used by Wine at startup. * Also, there is a need to separate times used by different applications. * * BUGS * KernelTime and UserTime are always for the current process */ BOOL WINAPI GetProcessTimes( HANDLE hprocess, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime ) { struct tms tms; KERNEL_USER_TIMES pti; times(&tms); TIME_ClockTimeToFileTime(tms.tms_utime,lpUserTime); TIME_ClockTimeToFileTime(tms.tms_stime,lpKernelTime); if (NtQueryInformationProcess( hprocess, ProcessTimes, &pti, sizeof(pti), NULL)) return FALSE; LL2FILETIME( pti.CreateTime.QuadPart, lpCreationTime); LL2FILETIME( pti.ExitTime.QuadPart, lpExitTime); return TRUE; }