我正在构建一个监视器应用程序,并且有一些线程问题。
我已经使用CBT钩子将一个DLL注入到另一个进程内存中。我正在某些地址读另一个应用程序的内存。问题是我使用了一个循环来观察这个过程,基本上被观察的应用程序不能自由地继续运行。所以我想把我的手表放在一个线程中。我正在使用下面的代码创建线程:
void readAddresses(DWORD addr)
{
LPDWORD dwThreadID;
HANDLE hThread = CreateThread(NULL,0,ThreadProc,&addr,0,dwThreadID);
}
我也尝试了CreateMemoteThread(…)并得到了相同的错误。当线程在调用readProcessMemory()API时运行时,它会失败,我不确定自己做错了什么。
//going to pass in an address, dword
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
DWORD pid;
GetWindowThreadProcessId(targetWindow,&pid);
HANDLE hProcess = ::OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION |
PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ,
FALSE, pid);
...
ReadProcessMemory(hProcess,(void *)_start, data, 255, &lpRead);
...
}
问题是当我调用readprocessmemory时,我现在得到一个访问冲突。我想知道的是,线程与注入线程的进程在同一进程地址空间中运行。正如我所说,如果没有线程代码,它可以正常工作,但是我需要在后台运行监视器代码,我想知道如何实现这一点?我应该使用创建远程线程吗?
正如remus sais所说,使用beginthread()或beginthreadex()。
谢谢