我正在写一个插件。我只允许从生成的主线程运行代码。我无法在主线程上运行代码。
从我的主题,是否有可能获得主线程的线程ID?
我想在下面这样做OpenProcess
- 然而它似乎有点矫枉过正,因为我的线程过程是相同的。
/* CAUTION: ONLY WIN32
* get the threadId of the main thread of a target process
*
* params:
* DWORD pId processId of the target process
*
* return:
* Success threadId
* Error NULL
*/
DWORD GetMainThreadId(DWORD pId)
{
LPVOID lpThId;
_asm
{
mov eax, fs:[18h]
add eax, 36
mov [lpThId], eax
}
HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, pId);
if(hProcess == NULL)
return NULL;
DWORD tId;
if(ReadProcessMemory(hProcess, lpThId, &tId, sizeof(tId), NULL) == FALSE)
{
CloseHandle(hProcess);
return NULL;
}
CloseHandle(hProcess);
return tId;
}
还有更好的方法吗?
答案 0 :(得分:2)
首先,您需要定义主线程的含义。系统本身没有这样的概念。
通常,当你说主线程时,你的意思是创建主应用程序窗口的线程。所以,找到主应用程序窗口。然后将该窗口传递给GetWindowThreadProcessId
。