我试图获取另一个进程的主线程ID,就像这里建议的那样:
https://stackoverflow.com/a/8058710/1386873
DWORD GetMainThreadId(DWORD dwPid)
{
LPCVOID lpTid;
_asm
{
mov eax, fs:[18h]
add eax, 36
mov lpTid, eax
}
HANDLE hProcess = OpenProcess(PROCESS_VM_READ, FALSE, dwPid);
if (hProcess == NULL)
return NULL;
int dwTid = 0;
if (ReadProcessMemory(hProcess, lpTid, (LPVOID)&dwTid, sizeof(int), NULL) == FALSE)
{
CloseHandle(hProcess);
return NULL;
}
CloseHandle(hProcess);
return (DWORD)dwTid;
}
但这不起作用:ReadProcessMemory
始终从GetLastError()
返回299代码,这意味着" ERROR_PARTIAL_COPY - 只完成了ReadProcessMemory或WriteProcessMemory请求的一部分。"。那么错误信息很清楚,但为什么会这样呢? BytesRead
也始终为0。
我得到了这样的进程ID:
unsigned long GetTargetProcessIdFromWindow(LPCWSTR className, LPCWSTR windowName)
{
unsigned long processID = 0;
HWND targetWnd;
targetWnd = FindWindow(className, windowName);
GetWindowThreadProcessId(targetWnd, &processID);
return processID;
}
似乎工作正常。什么可能导致这个?我尝试了不同的应用程序(计算器,记事本等)。我的应用程序是为Win32构建的,我的操作系统是Windows 64bit。 这与TIB有关吗?据我所知,只要我为Win32构建它,我的方式应该没问题,不应该这样。
感谢您的任何提示。
答案 0 :(得分:0)
考虑使用Toolhlp函数 - CreateToolhelp32Snapshot()和Thread32First()。