Форум программистов, компьютерный форум CyberForum.ru

Создание потока в чужом процессе - C++

Восстановить пароль Регистрация
 
Fusix
0 / 0 / 0
Регистрация: 08.10.2010
Сообщений: 133
19.11.2011, 00:01     Создание потока в чужом процессе #1
Всем привет. Возник вопрос...
Есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <windows.h>
 
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
DWORD __stdcall ThreadMain(LPVOID lpParameter);
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
 
DWORD __stdcall ThreadMain(LPVOID lpParameter)
{
    return true;
}
 
BOOL Inject(HANDLE hProc, DWORD(WINAPI* ThreadMain)(LPVOID))
{
    DWORD ThreadId;
    DWORD ByteOfWriten;
    LPVOID hModule = GetModuleHandle(0);
    LPVOID *NewMemory;
 
    DWORD size=((PIMAGE_OPTIONAL_HEADER)((LPVOID)((BYTE*)(hModule)+((PIMAGE_DOS_HEADER)(hModule))->e_lfanew+sizeof(DWORD)+sizeof(IMAGE_FILE_HEADER))))->SizeOfImage;
 
    NewMemory = (LPVOID*)VirtualAllocEx(hProc, 0, size, MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);
 
    if(NewMemory == NULL) return false;
 
    WriteProcessMemory(hProc, NewMemory, hModule, size, &ByteOfWriten);
 
    if(ByteOfWriten != size) return false;
 
    HANDLE hThread = CreateRemoteThread(hProc, NULL, 0, ThreadMain, NewMemory, 0, &ThreadId);
 
    if(hThread == 0) return false;
 
    return true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int PID = StrToInt(Edit1->Text);
    HANDLE hP = OpenProcess(PROCESS_ALL_ACCESS, false, PID);
    Inject(hP, &ThreadMain);
}
//---------------------------------------------------------------------------
На участке создания потока
C++
1
    HANDLE hThread = CreateRemoteThread(hProc, NULL, 0, ThreadMain, NewMemory, 0, &ThreadId);
Случается ошибка этого потока. Поток создается, но дело в том, что когда я пишу в свой процесс, все хорошо, а когда в чужой... поток завершается с ошибкой. Как мне кажется, оно не находит функцию старта в чужом процессе, хотя я её записываю.... почему так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2011, 00:01     Создание потока в чужом процессе
Посмотрите здесь:

Написать программу, создающую два потока, которые выполняются в одном адресном пространстве (в одном процессе) C++
Создание потока из потока. C++
рекурсивное создание потока C++
C++ Создание потока
C++ Приложение позволяющее рисовать в чужом окне
Создание потока C++
C++ Вызывть метод одного потока из другого потока
Создание объекта класса из потока C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 01:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru