Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to obtain list of thread handles from a win32 process?

Is it possible to get a list of thread handles at any given time for the current process on win32 (in c++)?

like image 768
glutz Avatar asked Dec 16 '22 02:12

glutz


2 Answers

You will find this article helpful. It gives the code for thread enumeration with the small nuances that come with using the tool help library.

For convenience (lifted from the article):

#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>

int __cdecl main(int argc, char **argv)
{
 HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
 if (h != INVALID_HANDLE_VALUE) {
  THREADENTRY32 te;
  te.dwSize = sizeof(te);
  if (Thread32First(h, &te)) {
   do {
     if (te.dwSize >= FIELD_OFFSET(THREADENTRY32, th32OwnerProcessID) +
                      sizeof(te.th32OwnerProcessID)) {
       printf("Process 0x%04x Thread 0x%04x\n",
             te.th32OwnerProcessID, te.th32ThreadID);
     }
   te.dwSize = sizeof(te);
   } while (Thread32Next(h, &te));
  }
  CloseHandle(h);
 }
 return 0;
}
like image 119
Mike Kwan Avatar answered Jan 04 '23 23:01

Mike Kwan


  • Win32: How do I enumerate all the threads belonging to a process in C++?
  • OpenThread to convert identifiers to handles
like image 44
Roman R. Avatar answered Jan 04 '23 23:01

Roman R.