Кароче я в вызове Attach меняю хендл, GetCurrentProcess
на свою функцию получения процесса:
#include <tlhelp32.h>
typedef HANDLE (WINAPI *CREATETOOL)(DWORD,DWORD);
typedef BOOL (WINAPI *FIRST32)(HANDLE,LPPROCESSENTRY32);
typedef BOOL (WINAPI *NEXT32)(HANDLE,LPPROCESSENTRY32);
CREATETOOL CreateToolhelp32Snapshot;
FIRST32 Process32First;
NEXT32 Process32Next;
HANDLE h_th;
HINSTANCE h;
PROCESSENTRY32 pe;
h = LoadLibrary("kernel32.dll");
if(h)
{
CreateToolhelp32Snapshot = (CREATETOOL)GetProcAddress(h, "CreateToolhelp32Snapshot");
Process32First = (FIRST32)GetProcAddress(h, "Process32First");
Process32Next = (NEXT32) GetProcAddress(h, "Process32Next");
if((!Process32Next)|(!Process32First)|(!CreateToolhelp32Snapshot))
{
FreeLibrary(h);
return 0;
}
h_th = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe.dwSize = sizeof(pe);
if(!Process32First(h_th, &pe))
{
FreeLibrary(h);
return 0;
}
do
{
CharLower(pe.szExeFile);
if((strstr(pe.szExeFile, path)) && (GetCurrentProcessId() != pe.th32ProcessID))
{
FreeLibrary(h);
return OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID);
}
}
while(Process32Next(h_th, &pe))
;
}
return 0;
Если свой процесс, то всё работает, с чужим - нифига!!
|