Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Определение создателя потока  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9917
Есть процесс, в нем загружена куча dll, эти dll запускают разные потоки. Вопрос, как по ThreadID определить какой модуль его запустил?

Мои мысли
1) Получить список загруженных модулей процесса. HMODULE будет указывать на адрес загрузки модуля
2) Получить все потоки процесса
3) Для каждого потока получить некую область памяти, которая выделялась для этого потока
4) Посмотреть в какой модуль попала память.

Проблема с третьим пунктом. Что бы такое и как получить? Мне нравится идея получить адрес процедуры потока. Но как?

Может, сам алгоритм неверен, тогда пните в нужном направлении. Задача успешно решена в ProcessExplorer

С уважением, Vasilisk

К сообщению приложен файл. Размер - 42Kb
6 дек 17, 16:35    [21011770]     Ответить | Цитировать Сообщить модератору
 Re: Определение создателя потока  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 23234
Здесь исполняемый файл и исходники, где можно подглядеть http://processhacker.sourceforge.net/
6 дек 17, 16:49    [21011840]     Ответить | Цитировать Сообщить модератору
 Re: Определение создателя потока  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 720
_Vasilisk_,

CreateToolhelp32Snapshot

TThreadEntry32
TProcessEntry32

(у TThreadEntry32 есть th32OwnerProcessID)
6 дек 17, 17:00    [21011889]     Ответить | Цитировать Сообщить модератору
 Re: Определение создателя потока  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9917
Ghost Writer
(у TThreadEntry32 есть th32OwnerProcessID)
_Vasilisk_
как по ThreadID определить какой модуль его запустил?
Мне не нужен процесс, мне нужен модуль (dll)
6 дек 17, 17:33    [21012112]     Ответить | Цитировать Сообщить модератору
 Re: Определение создателя потока  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57688
_Vasilisk_> 3) Для каждого потока получить некую область
_Vasilisk_> памяти, которая выделялась для этого потока
_Vasilisk_> Проблема с третьим пунктом. Что бы такое и как получить?
_Vasilisk_> Мне нравится идея получить адрес процедуры потока. Но как?

NtQueryInformationThread

Posted via ActualForum NNTP Server 1.5

6 дек 17, 17:56    [21012220]     Ответить | Цитировать Сообщить модератору
 Re: Определение создателя потока  [new]
GunSmoker
Member

Откуда:
Сообщений: 2935
Функция потока может не находится в том модуле, который запустил поток. Если нужен именно создатель - можно хук на CreateThread.
6 дек 17, 18:27    [21012391]     Ответить | Цитировать Сообщить модератору
 Re: Определение создателя потока  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9917
Гаджимурадов Рустам
NtQueryInformationThread
Вот она одна из кандидатов на пощупывание
GunSmoker
Функция потока может не находится в том модуле, который запустил поток
Да. Но для моих задач я могу этим пренебречь
6 дек 17, 18:50    [21012501]     Ответить | Цитировать Сообщить модератору
 Re: Определение создателя потока  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57688
_Vasilisk_> Вот она одна из кандидатов на пощупывание

Там и щупать-то нечего, всё довольно просто.
Правда, IIRC, в MSDN было примечание про
негарантированность под некоторые версии ОС.

Posted via ActualForum NNTP Server 1.5

6 дек 17, 19:21    [21012568]     Ответить | Цитировать Сообщить модератору
 Re: Определение создателя потока  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 9917
Гаджимурадов Рустам
Там и щупать-то нечего,
Смотрел еще на
ZwQuerySystemInformation(SystemProcessesAndThreadsInformation,.....

Но она возвращает инфу сразу по всем процессам системы
Гаджимурадов Рустам
негарантированность под некоторые версии ОС.
Видел
6 дек 17, 20:40    [21012717]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить