我正在写一个插件。我只允许从衍生主线程运行代码。我无法在主线程上运行代码。获取主线程的线程号
从我的线程,是否有可能获得主线程的线程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;
}
有什么更好的办法吗?
FWIW,考虑到问题中的代码,我没有理由期望在目标进程中的该地址找到线程ID。我认为你的代码看起来工作的确很巧合。 –