MCPcopy Create free account
hub / github.com/NoMercy-ac/NoMercy / CThread

Method CThread

Source/Client/NM_Engine/ThreadHelper.cpp:12–59  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10#include <lazy_importer.hpp>
11
12CThread::CThread(DWORD dwThreadId) :
13 m_dwThreadId(dwThreadId), m_hThread(INVALID_HANDLE_VALUE), m_iThreadCode(0), m_bOpenedThread(false), m_bRoutineCompleted(false)
14{
15 auto bFail = false;
16 auto dwErr = 0UL;
17
18 auto customThread = g_nmApp->ThreadManagerInstance()->GetThreadFromId(dwThreadId);
19 if (IS_VALID_SMART_PTR(customThread))
20 {
21 m_hThread = customThread->GetHandle();
22 m_iThreadCode = customThread->GetCustomCode();
23 }
24 else
25 {
26 m_hThread = g_winapiApiTable->OpenThread(THREAD_ALL_ACCESS, FALSE, dwThreadId);
27 if (!IS_VALID_HANDLE(m_hThread))
28 {
29 bFail = true;
30 dwErr = g_winapiApiTable->GetLastError();
31
32 auto threadEnumerator = std::make_unique<CSafeThreadHandle>();
33 if (IS_VALID_SMART_PTR(threadEnumerator))
34 {
35 auto vThreads = threadEnumerator->EnumerateThreads(NtCurrentProcess);
36 if (vThreads.empty() == false)
37 {
38 for (const auto & hCurrThread : vThreads)
39 {
40 auto dwCurrThreadId = g_winapiApiTable->GetThreadId(hCurrThread);
41 if (dwCurrThreadId == dwThreadId)
42 {
43 bFail = false;
44 break;
45 }
46 }
47 }
48 }
49 }
50
51 if (bFail)
52 {
53 DEBUG_LOG(LL_CRI, "CThread class can not created for: %u Error: %u Alive: %d", dwThreadId, dwErr, CThreadFunctions::ThreadIsItAlive(dwThreadId));
54 g_nmApp->OnCloseRequest(EXIT_ERR_CUSTOM_THREAD_OPEN_FAIL, g_winapiApiTable->GetLastError());
55 }
56
57 m_bOpenedThread = true;
58 }
59}
60CThread::CThread(HANDLE hThread) :
61 m_hThread(hThread), m_dwThreadId(0), m_iThreadCode(-1), m_bOpenedThread(false), m_bRoutineCompleted(false)
62{

Callers

nothing calls this directly

Calls 9

GetThreadFromIdMethod · 0.80
ThreadManagerInstanceMethod · 0.80
GetHandleMethod · 0.80
GetCustomCodeMethod · 0.80
OpenThreadMethod · 0.80
OnCloseRequestMethod · 0.80
GetThreadFromHandleMethod · 0.80
EnumerateThreadsMethod · 0.45
GetIdMethod · 0.45

Tested by

no test coverage detected