C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Процессы и потоки, Есть ID потока. Как найти PID процесса?
Ajgor
Отправлено: 14.09.2004, 16:11


Ученик-кочегар

Группа: Участник
Сообщений: 23



Подскажите пожалуйста.
Есть ID потока. Как найти ID процесса который его создал?
UA_Freeman
Отправлено: 14.09.2004, 17:30


Дежурный стрелочник

Группа: Участник
Сообщений: 31



А откуда у тебя ид потока? Наверняка оттуда, откуда проще и ид процесса выцепить
Ajgor
Отправлено: 14.09.2004, 18:08


Ученик-кочегар

Группа: Участник
Сообщений: 23



Есть только ID потока. Вкратце: вешаю DEBUG хук при перехвате в DEBUGPROC в lParam передаётся указатель на структуру

typedef struct tagDEBUGHOOKINFO
{
DWORD idThread;
DWORD idThreadInstaller;
LPARAM lParam;
WPARAM wParam;
int code;
} DEBUGHOOKINFO;

потом имея idThreadInstaller и idThread (ИМЕЮТСЯ ТОЛЬКО ID ПОТОКОВ(!!!)) мне нужно получить их процессы. Я делаю это так: перебираю все процессы и для каждого процесса перебираю все потоки пока не найду какому процессу принадлежит поток.
Может есть способ попроще?
xim
Отправлено: 14.09.2004, 19:05


Станционный диспетчер

Группа: Участник
Сообщений: 143



Насколько я понимаю, вызов DEBUGPROC осуществляется в контексте прохученного процесса ==>> можно попробовать GetCurrentProcessId(), а так вообще можно использовать это:

#include
DWORD process_id_from_thread_id(DWORD dwThreadID)
{
DWORD dwCont,
dwRet=DWORD(-1L);
THREADENTRY32 stThrEntry;
HANDLE hTHSnap=CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);
if(hTHSnap)
{
stThrEntry.dwSize=sizeof(THREADENTRY32);
dwCont=Thread32First(hTHSnap,&stThrEntry);
while(dwCont&&dwRet==DWORD(-1L))
{
if(stThrEntry.th32ThreadID==dwThreadID)
dwRet=stThrEntry.th32OwnerProcessID;else
dwCont=Thread32Next(hTHSnap,&stThrEntry);
}
CloseHandle(hTHSnap);
}
return dwRet;
}


Ajgor
Отправлено: 15.09.2004, 19:23


Ученик-кочегар

Группа: Участник
Сообщений: 23



smile.gif Спасибо за ответ. Я в принципе так и делаю просто хотел узнать нет ли метода попроще.

Вернуться в Вопросы программирования в C++Builder