Page 1 of 1

enumerate threads

Posted: Tue Jun 01, 2004 11:16 pm
by tonnelier
I know how to enumerate processes (createtollhelpsnapshot, etc...)
But how can i enumerate threads, and know for a given thread, to which process it is attached?

thank for responses

Posted: Wed Jun 02, 2004 4:18 pm
by tonnelier
:!: Stupid i am!!
I've not seen that there are thread32first, thread32next functions too.
So the problem is solved.

Posted: Wed Jun 02, 2004 6:42 pm
by fweil
...,

Because you found ToolHelp.dll exists you are not stupid !

Posted: Wed Jun 02, 2004 8:08 pm
by tonnelier
thanks for this little recomfort!

I've asked earlier if it was possible to pause a process.
Eventually, it's possible, simply by using suspendthread_ for all threads attached to the process. Works fine. (and resumethread_ too)

(If i don't mistake, even if a process don't explicitly create a thread, there is a primary thread attached to it. Threads are the entities, above processes, with which the system manages for the access to the processor)

Posted: Wed Jun 02, 2004 9:16 pm
by fweil
Maybe you scattered me with this DLL ...

HELP me in finding the args to throw in this dll ... I can't find the way to access it well ...
Rgrds

Posted: Thu Jun 03, 2004 12:09 pm
by tonnelier
Here is a procedure to suspend a process whose id is pid:

Code: Select all

Structure thread32
size.l
use.l
idth.l
parentid.l
base.l
delta.l
flags.l
EndStructure

openlibrary(0,"kernel32.dll")

Procedure pause(pid)

thread.thread32

snap = CallFunction (0, "CreateToolhelp32Snapshot",4,0)
If snap

thread\size=SizeOf(thread32)
CallFunction(0,"Thread32First",snap,@thread)

If thread\parentid=pid
  h=CallFunction(0,"OpenThread",2,0,thread\idth)
  SuspendThread_(h)
  CloseHandle_(h)
EndIf

While CallFunction(0,"Thread32Next",snap,@thread)

If thread\parentid=pid
  h=CallFunction(0,"OpenThread",2,0,thread\idth)
  SuspendThread_(h)
  CloseHandle_(h)
EndIf

Wend

EndIf

EndProcedure
and the procedure to resume

Code: Select all

Procedure resume(pid)

thread.thread32

snap = CallFunction (0, "CreateToolhelp32Snapshot",4,0)
If snap

thread\size=SizeOf(thread32)
CallFunction(0,"Thread32First",snap,@thread)

If thread\parentid=pid
  h=CallFunction(0,"OpenThread",2,0,thread\idth)
  ResumeThread_(h)
  CloseHandle_(h)
EndIf

While CallFunction(0,"Thread32Next",snap,@thread)

If thread\parentid=pid
  h=CallFunction(0,"OpenThread",2,0,thread\idth)
  ResumeThread_(h)
  CloseHandle_(h)
EndIf

Wend

EndIf
EndProcedure
for the constants, i use winapi program.

Posted: Mon Apr 11, 2005 12:57 pm
by pvmichael
Thank you very much, this is exactly what i was searching for!