Hola amigos, estoy intentando crear un proceso suspendido, obtener su imagebase, y por último revivirlo. De momento tengo esto:
Código PHP:
#include <vcl.h>
#include <Windows.h>
#include <psapi.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WideString path = "";
wchar_t szProcessName[] = L"mi_proceso.exe";
WideString fullPath = path + szProcessName;
PROCESS_INFORMATION pi;
STARTUPINFO si;
HMODULE hMod;
DWORD cbNeeded=0;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
//Creo el proceso suspendido
CreateProcess(fullPath.c_bstr(), NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
//Busco el proceso en la lista de procesos
if ( EnumProcessModules( pi.hProcess, &hMod, sizeof(hMod), &cbNeeded) )
{
GetModuleBaseName( pi.hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(wchar_t) );
}
//Revivo el proceso
ResumeThread(pi.hThread);
//Libero el Handle
CloseHandle(pi.hProcess);
}
El caso es que cuando llego a EnumProcessModules nunca entra aunque mi proceso si está en la lista de procesos. ¿alguna ayuda para solucionarlo? Lo que necesito es obtener la ImageBase del proceso creado suspendido.