From 79ac0c30196d630b4a69115348ad09e98c8724c9 Mon Sep 17 00:00:00 2001 From: ergo720 <45463469+ergo720@users.noreply.github.com> Date: Thu, 27 Jan 2022 20:51:36 +0100 Subject: [PATCH] Updated thread timings in ethread + null id upon thread termination --- src/core/kernel/common/types.h | 5 +++-- src/core/kernel/exports/EmuKrnlPs.cpp | 1 + src/core/kernel/support/EmuFS.cpp | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/core/kernel/common/types.h b/src/core/kernel/common/types.h index 8557ee202..efca34d62 100644 --- a/src/core/kernel/common/types.h +++ b/src/core/kernel/common/types.h @@ -1915,8 +1915,9 @@ KTHREAD, *PKTHREAD, *RESTRICTED_POINTER PRKTHREAD; // ****************************************************************** typedef struct _ETHREAD { - struct _KTHREAD Tcb; - uchar_xt UnknownA[0x10]; // 0x110 + struct _KTHREAD Tcb; + LARGE_INTEGER CreateTime; + LARGE_INTEGER ExitTime; ntstatus_xt ExitStatus; // 0x120 uchar_xt UnknownB[0x8]; // 0x124 HANDLE UniqueThread; // 0x12C diff --git a/src/core/kernel/exports/EmuKrnlPs.cpp b/src/core/kernel/exports/EmuKrnlPs.cpp index a5b5529ce..d626a8057 100644 --- a/src/core/kernel/exports/EmuKrnlPs.cpp +++ b/src/core/kernel/exports/EmuKrnlPs.cpp @@ -288,6 +288,7 @@ XBSYSAPI EXPORTNUM(255) xbox::ntstatus_xt NTAPI xbox::PsCreateSystemThreadEx RETURN(X_STATUS_INSUFFICIENT_RESOURCES); } + KeQuerySystemTime(&eThread->CreateTime); KiUniqueProcess.StackCount++; RegisterXboxHandle(*ThreadHandle, handle); RegisterXboxHandle(eThread->UniqueThread, handle); diff --git a/src/core/kernel/support/EmuFS.cpp b/src/core/kernel/support/EmuFS.cpp index d4223feba..68a45c40d 100644 --- a/src/core/kernel/support/EmuFS.cpp +++ b/src/core/kernel/support/EmuFS.cpp @@ -225,16 +225,17 @@ void EmuKeFreeThread(xbox::ntstatus_xt ExitStatus) xbox::PETHREAD eThread = xbox::PspGetCurrentThread(); + xbox::KeQuerySystemTime(&eThread->ExitTime); eThread->Tcb.HasTerminated = 1; // Emulate our exit strategy for GetExitCodeThread eThread->ExitStatus = ExitStatus; eThread->Tcb.Header.SignalState = 1; - xbox::HANDLE UniqueThread = eThread->UniqueThread; if (GetNativeHandle(eThread->UniqueThread)) { xbox::NtClose(eThread->UniqueThread); + eThread->UniqueThread = NULL; } EmuKeFreePcr(UniqueThread);