link8820 link8821 link8822 link8823 link8824 link8825 link8826 link8827 link8828 link8829 link8830 link8831 link8832 link8833 link8834 link8835 link8836 link8837 link8838 link8839 link8840 link8841 link8842 link8843 link8844 link8845 link8846 link8847 link8848 link8849 link8850 link8851 link8852 link8853 link8854 link8855 link8856 link8857 link8858 link8859 link8860 link8861 link8862 link8863 link8864 link8865 link8866 link8867 link8868 link8869 link8870 link8871 link8872 link8873 link8874 link8875 link8876 link8877 link8878 link8879 link8880 link8881 link8882 link8883 link8884 link8885 link8886 link8887 link8888 link8889 link8890 link8891 link8892 link8893 link8894 link8895 link8896 link8897 link8898 link8899 link8900 link8901 link8902 link8903 link8904 link8905 link8906 link8907 link8908 link8909 link8910 link8911 link8912 link8913 link8914 link8915 link8916 link8917 link8918 link8919 link8920 link8921 link8922 link8923 link8924 link8925 link8926 link8927 link8928 link8929 link8930 link8931 link8932 link8933 link8934 link8935 link8936 link8937 link8938 link8939 link8940 link8941 link8942 link8943 link8944 link8945 link8946 link8947 link8948 link8949 link8950 link8951 link8952 link8953 link8954 link8955 link8956 link8957 link8958 link8959
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