![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить имена модулей дочерних потоком
Денис-Редис © (2013-02-28 13:06:00)Добрый день! Стоит задача получить все дочерние потоки определённого процесса (их порождают подключенные dll-ки) и выяснить, какая именно из dll какие потоки создала.
Потоки получаю так:
var
ThreadSnapshotHandle: THandle;
ThreadFound: Boolean;
ThreadEntry: tagTHREADENTRY32;
begin
aStrings.Clear;
ThreadSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
try
ThreadEntry.dwSize := SizeOf(ThreadEntry);
ThreadFound := Thread32First(ThreadSnapshotHandle, ThreadEntry);
if ThreadFound then
repeat
if ThreadEntry.th32OwnerProcessID = AProcessID then
aStrings.Add('ID потока = ' + IntToStr(ThreadEntry.th32ThreadID));
until not Thread32Next(ThreadSnapshotHandle, ThreadEntry);
finally
CloseHandle(ThreadSnapshotHandle);
end;
end;
тут я добавляю ThreadEntry.th32ThreadID в TMemo. Вот как узнать, к какой либе имеет отношение каждый дочерний поток? Извините, если сумбурно выразился.
Денис-Редис (2013-02-28 20:47:00) [1]Во! Спасибо, дружище! или дружищи :) Выручили, это то что нужно. Сам бы не нашёл эту инфу. Пойду попробую, вопросы будут, напишу
clickmaker (2013-02-28 13:34:00) [2]GetModuleFileNameEx ?
RWolf (2013-02-28 13:24:00) [3]а привязка к имени модуля — просто перебор загруженных в память модулей и проверка вхождения адреса в диапазон адресов, ими занятых.
RWolf (2013-02-28 13:21:00) [4]http://stackoverflow.com/questions/10159516/get-thread-start-address
Денис-Редис (2013-02-28 13:16:00) [5]Я понял твою мысль. Понятно, что к главному. Мне нужно сделать что-то вроде как у процесс хакера, если видел. Пример по ссылке: http://gyazo.com/c497606b4468ccbe2abfc3f9409744a7
В колонке start address и есть то, что мне нужно.
RWolf (2013-02-28 13:09:00) [6]а если основной поток вызвал функцию из dll, к какой либе он относится?