From 339ee42bae2edc92ed85b0e8e810e698235b5c62 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Sun, 19 Feb 2012 20:08:11 +0000 Subject: [PATCH] [NTOSKRNL]: The ExitTime in ETHREAD is unionized and only valid if the thread actually exited, so don't always return the raw value -- return 0 if the thread is still alive. Fixes code which uses ExitTime != 0 to tell if a thread is still alive or not -- everyone always thought all ReactOS threads are always dead. svn path=/trunk/; revision=55719 --- reactos/ntoskrnl/ps/query.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/reactos/ntoskrnl/ps/query.c b/reactos/ntoskrnl/ps/query.c index 757ba26ca2f..f4fd8946194 100644 --- a/reactos/ntoskrnl/ps/query.c +++ b/reactos/ntoskrnl/ps/query.c @@ -2279,12 +2279,19 @@ NtQueryInformationThread(IN HANDLE ThreadHandle, _SEH2_TRY { /* Copy time information from ETHREAD/KTHREAD */ - ThreadTime->KernelTime.QuadPart = Thread->Tcb.KernelTime * - 100000LL; - ThreadTime->UserTime.QuadPart = Thread->Tcb.UserTime * - 100000LL; + ThreadTime->KernelTime.QuadPart = Thread->Tcb.KernelTime * KeMaximumIncrement; + ThreadTime->UserTime.QuadPart = Thread->Tcb.UserTime * KeMaximumIncrement; ThreadTime->CreateTime = Thread->CreateTime; - ThreadTime->ExitTime = Thread->ExitTime; + + /* Exit time is in a union and only valid on actual exit! */ + if (KeReadStateThread(&Thread->Tcb)) + { + ThreadTime->ExitTime = Thread->ExitTime; + } + else + { + ThreadTime->ExitTime.QuadPart = 0; + } } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) {