reichel: Zaraz poczytam o NtOpenThread i zobacze co z tego wyjdzie.
Moj kod:
#include "stdafx.h"
#include <windows.h>
//extern "C" WINBASEAPI HANDLE WINAPI OpenThread(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwThreadId);
//#define _WIN32_WINNT _WIN32_WINNT_WINXP
//Wynik zawsze ten sam - niezależnie od tego czy poprzednie 2 linijki sa zakomentowane czy nie
int _tmain(int argc, _TCHAR* argv[])
{
DWORD TID=0;
printf("%s \n", "Podaj TID:");
scanf("%x", &TID);
HANDLE handle=OpenThread(THREAD_ALL_ACCESS, false, TID); //probowalem tez THREAD_SUSPEND_RESUME | THREAD_GET_CONTEXT
CONTEXT context;
if (handle)
{
printf("\n%s \n", "OK");
if (SuspendThread(handle)==-1) {printf("Nie udalo sie zatrzymac watku, kod bledu %d", GetLastError());}
else
{
if (GetThreadContext(handle, &context))
{
printf("%s \n", "Udalo sie pobrac context watku");
printf("Wartosci poszczegolnych rejestrow %x %x %x %x %x \n", context.Eax, context.Ebx, context.Ecx, context.ContextFlags, context.Esi);
}else printf("Kod bledu %d", GetLastError());
}
CloseHandle(handle);
}else printf("Kod bledu %d", GetLastError());
return 0;
}
Jak widzicie na razie nic wielkiego to to nie jest ;-) Wpisuje sobie TID(thread id) jakiegos tam watku(testy wykonuje najczesciej na pajaku) no i wyswietla mi ze wszystko ok, ale wartosci rejestrow raczej nie sa prawidlowe - wszystkie==0, a flagi 0xCCCCCCCC Ma ktos jakis pomysl co moze byc nie tak?
Teoria adfa(wybacz, zle nie wiem ja sie odmienia Twoj nick ;-P ) - Możliwe, chociaż z deugiej strony, nia ma żadnego problemu żeby otworzyć proces, którego się nie utworzyło, więc czemu z wątkami miałoby być inaczej? No i poza tym są programy, które takie rzeczy robią bez problemu(olly), więc to na pewno jest możliwe. Problem w tym JAK to zrobić :)