我正在寫一個插件。我只允許從衍生主線程運行代碼。我無法在主線程上運行代碼。獲取主線程的線程號
從我的線程,是否有可能獲得主線程的線程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。我認爲你的代碼看起來工作的確很巧合。 –