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)) {
HANDLE Handle = OpenProcess(
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE,
te.th32OwnerProcessID /* This is the PID, you can find one from windows task manager */
);
TCHAR Buffer[MAX_PATH];
wprintf(L"Process %u IdThred=%u\n",
te.th32OwnerProcessID, te.th32ThreadID);
}
te.dwSize = sizeof(te);
} while (Thread32Next(h, &te));
}
CloseHandle(h);
}
этот код перечисляет все процессы и все потоки процесса, но я хочу, чтобы он перечислял только поток процесса pid... example: explorer.exe pid = 5454 через pid хотел, чтобы у него были идентификаторы потоков и потоков государство.
Ваш код действительно работает. Просто нужно немного изменить:
HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (h != INVALID_HANDLE_VALUE)
{
THREADENTRY32 te;
te.dwSize = sizeof(te);
if (Thread32First(h, &te))
{
do
{
//in THREADENTRY32 structure there is a member called th32OwnerProcessID
//you can check owner process of thread like this:
if (te.th32OwnerProcessID == 5454)
{
wprintf(L"Process %u IdThred=%u\n", te.th32OwnerProcessID, te.th32ThreadID);
}
} while (Thread32Next(h, &te));
}
CloseHandle(h);
}