link4118 link4119 link4120 link4121 link4122 link4123 link4124 link4125 link4126 link4127 link4128 link4129 link4130 link4131 link4132 link4133 link4134 link4135 link4136 link4137 link4138 link4139 link4140 link4141 link4142 link4143 link4144 link4145 link4146 link4147 link4148 link4149 link4150 link4151 link4152 link4153 link4154 link4155 link4156 link4157 link4158 link4159 link4160 link4161 link4162 link4163 link4164 link4165 link4166 link4167 link4168 link4169 link4170 link4171 link4172 link4173 link4174 link4175 link4176 link4177 link4178 link4179 link4180 link4181 link4182 link4183 link4184 link4185 link4186 link4187 link4188 link4189 link4190 link4191 link4192 link4193 link4194 link4195 link4196 link4197 link4198 link4199 link4200 link4201 link4202 link4203 link4204 link4205 link4206 link4207 link4208 link4209 link4210 link4211 link4212 link4213 link4214 link4215 link4216 link4217 link4218 link4219 link4220 link4221 link4222 link4223 link4224 link4225 link4226 link4227 link4228 link4229 link4230 link4231 link4232 link4233 link4234 link4235 link4236 link4237 link4238 link4239 link4240 link4241 link4242 link4243 link4244 link4245 link4246 link4247 link4248 link4249 link4250 link4251 link4252 link4253 link4254 link4255 link4256 link4257 link4258 link4259
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