J'ai écrit un petit programme pour comprendre comment appeler correctement SuspendThread et GetThreadContext.
Je n'y ai pas réussi.
Le programme consiste à créer un thread 'StarThread' qui ecrit 0, 1 .., 10 à l'écran et se suspend (le thread principal ayant fourni en parametre l'handle).
Pourtant SuspendThread n'agit pas et ne relève pas d'erreur non plus.
Ne parlons pas de GetThreadContext qui donne EIP à 0.
Qu'est-ce qui cloche ?
Merci bcp.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 DWORD WINAPI StartThread(LPVOID argThreadHandle) { char lszParam[3]; for(int i=0;i<=10;i++) std::cout<<i<<std::endl; if (SuspendThread((HANDLE) argThreadHandle) == FALSE) { std::cerr<<"Je suis une conne de founction SuspendThread"<<std::endl; return 1; } std::cerr<<"ResumeThread a ete appele ou quoi ?"<<std::endl; return 0; } int main(int, char**) { HANDLE hThread1; DWORD dwGenericThread; hThread1 = CreateThread(NULL,0,StartThread,&hThread1, 0 ,&dwGenericThread); if(hThread1 == NULL) { DWORD dwError = GetLastError(); std::cerr<<"SCM:Error in Creating thread"<<dwError<<std::endl ; return 1; } Sleep(2000); CONTEXT context; context.ContextFlags = CONTEXT_i386 | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_EXTENDED_REGISTERS; BOOLEAN succes = GetThreadContext(hThread1, &context); . . . }
Partager