glutz
glutz

Reputation: 1959

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++)?

Upvotes: 5

Views: 12295

Answers (2)

Mike Kwan
Mike Kwan

Reputation: 24457

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;
}

Upvotes: 11

Roman Ryltsov
Roman Ryltsov

Reputation: 69706

Upvotes: 4

Related Questions