Re: Как определить какой модуль запустил конкретный поток?
От: Unmanaged Россия ICQ 476611995
Дата: 27.09.07 12:41
Оценка:
A>К примеру:
A>В Process Explorer`е на закладке "Threads" в поле "Start Address" указаны <имя модуля>!<функция>+<адрес>. <адрес> я получаю, а вот с <имя модуля> беда.

Process Explorer работает с Native API.
В вашем случае всё несколько проще.

A>Есть идеи?


Можно почитать вот эту статью — Enumerating All Modules For a Process.
Это при условии, что вам известен виртуальный адрес рабочей функции потока.
Если кратко, то алгоритм должен выглядеть так:

1. OpenProcess()
2. EnumProcessModules()
3. GetModuleFileNameEx()
4. GetModuleInformation()
5. CloseHandle()

GetModuleFileNameEx() — для каждого модуля получим полный путь к файлу. Если это нужный нам модуль, то далее функция GetModuleInformation() подскажет адрес загрузки этого модуля и размер его образа в памяти. Остаётся только вычислить, находится ли адрес функции потока в пределах этого модуля или нет. Всё.
STATUS_INVALID_DEVICE_REQUEST
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.