Я создаю приложение монитора и у меня возникают проблемы с многопоточностью.
Я с помощью ловушки cbt вставил dll в память других процессов.Я читаю память другого приложения по определенным адресам.Беда в том, что я использовал цикл, чтобы наблюдать за процессом, и в основном просматриваемое приложение не было бесплатным для продолжения.Так что я подумал о том, чтобы поставить процесс просмотра в цепочку.Я использую приведенный ниже код для создания потока:
void readAddresses(DWORD addr)
{
LPDWORD dwThreadID;
HANDLE hThread = CreateThread(NULL,0,ThreadProc,&addr,0,dwThreadID);
}
Я также попытался с CreateRemoteThread (...) и получил ту же ошибку.С потоком, работающим, когда он вызывает API ReadProcessMemory (), происходит сбой, и я не совсем уверен, что делаю неправильно.
//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 IТеперь получите нарушение доступа.Что меня интересует, так это то, что поток работает в том же адресном пространстве процесса, что и процесс, в который он был внедрен.Как я уже сказал без кода потока, он работает нормально, но мне нужно, чтобы код монитора работал в фоновом режиме, и мне интересно, как этого добиться?Должен ли я использовать создание удаленного потока?
В качестве Ремуса можно использовать beginthread () или beginthreadex () ...
Спасибо