Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Определение создателя потока / 9 сообщений из 9, страница 1 из 1
06.12.2017, 16:35:02
    #39565239
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение создателя потока
Есть процесс, в нем загружена куча dll, эти dll запускают разные потоки. Вопрос, как по ThreadID определить какой модуль его запустил?

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

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

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

С уважением, Vasilisk
...
Рейтинг: 0 / 0
06.12.2017, 16:49:57
    #39565248
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение создателя потока
Здесь исполняемый файл и исходники, где можно подглядеть http://processhacker.sourceforge.net/
...
Рейтинг: 0 / 0
06.12.2017, 17:00:33
    #39565258
Ghost Writer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение создателя потока
_Vasilisk_,

CreateToolhelp32Snapshot

TThreadEntry32
TProcessEntry32

(у TThreadEntry32 есть th32OwnerProcessID)
...
Рейтинг: 0 / 0
06.12.2017, 17:33:36
    #39565288
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение создателя потока
Ghost Writer(у TThreadEntry32 есть th32OwnerProcessID)_Vasilisk_как по ThreadID определить какой модуль его запустил?Мне не нужен процесс, мне нужен модуль (dll)
...
Рейтинг: 0 / 0
06.12.2017, 17:56:05
    #39565316
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение создателя потока
_Vasilisk_> 3) Для каждого потока получить некую область
_Vasilisk_> памяти, которая выделялась для этого потока
_Vasilisk_> Проблема с третьим пунктом. Что бы такое и как получить?
_Vasilisk_> Мне нравится идея получить адрес процедуры потока. Но как?

NtQueryInformationThread
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.12.2017, 18:27:52
    #39565345
GunSmoker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение создателя потока
Функция потока может не находится в том модуле, который запустил поток. Если нужен именно создатель - можно хук на CreateThread.
...
Рейтинг: 0 / 0
06.12.2017, 18:50:09
    #39565361
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение создателя потока
Гаджимурадов РустамNtQueryInformationThreadВот она одна из кандидатов на пощупывание
GunSmokerФункция потока может не находится в том модуле, который запустил потокДа. Но для моих задач я могу этим пренебречь
...
Рейтинг: 0 / 0
06.12.2017, 19:21:27
    #39565380
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение создателя потока
_Vasilisk_> Вот она одна из кандидатов на пощупывание

Там и щупать-то нечего, всё довольно просто.
Правда, IIRC, в MSDN было примечание про
негарантированность под некоторые версии ОС.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.12.2017, 20:40:55
    #39565414
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение создателя потока
Гаджимурадов РустамТам и щупать-то нечего,Смотрел еще на
Код: pascal
1.
ZwQuerySystemInformation(SystemProcessesAndThreadsInformation,.....


Но она возвращает инфу сразу по всем процессам системы
Гаджимурадов Рустамнегарантированность под некоторые версии ОС.Видел
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Определение создателя потока / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]