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
|
Спасибо за ответ. Я в принципе так и делаю просто хотел узнать нет ли метода попроще. |
|