NTDLL - Process Threads
Source
C
void Thread_Create(nt_thread_t* ptThread, pfnThreadProc pfnProc, void* pvArg) {
if (!ptThread || !pfnProc) return;
// This can be _RtlCreateUserThread or _NtCreateThreadEx
NTSTATUS status = _RtlCreateUserThread(
_GetCurrentProcess(), NULL, FALSE, 0, 0, 0,
(PVOID)pfnProc, pvArg, &ptThread->hHandle, &ptThread->cid
);
}
BOOL Thread_Join(nt_thread_t* ptThread) {
if (!ptThread || ptThread->hHandle == NULL) return FALSE;
NTSTATUS status = _NtWaitForSingleObject(ptThread->hHandle, FALSE, NULL);
return NT_SUCCESS(status);
}
void Thread_Close(nt_thread_t* ptThread) {
if (ptThread && ptThread->hHandle) {
_CloseHandle(ptThread->hHandle);
ptThread->hHandle = NULL;
}
}