![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нумерация открытых хэндлов чужого процесса [D7]
FireHack © (2003-10-27 18:36:00)
Всем привет!!!
Проблема следующая - было необходимо вывести список:
ip | port | Id процесса
с первыми 2-мя все просто (можно использовать GetTcpTable), но как определить id процесса, инициирующего соединение. Кто-то посоветовал пройтись по всем открытым хэндлам процессов, но, как это сделать, не сказал.
Вопрос: как это сделать
Всем спасибо.
Digitman (2003-10-28 16:27:00) [1]
копай в msdn в сторону интерфейса транспортного устройства (кл.слово "TDI")
FireHack (2003-10-28 13:10:00) [2]
>> Digitman
Тогда для корректной работы тебе нужно запускать свою прогу ДО запуска всех приложений ака открытия сокетов, а мне необходимо иметь ТЕКУЩУЮ инфу об открытых сокетах.
Digitman (2003-10-28 11:04:00) [3]
я бы поступил проще
- устанавливаем любой глоб.хук
- в ходе иниц-ции хук-DLL перехватываем WinsockAPI-вызовы socket(), CloseSocket(), bind(), connect() - эти ф-ции дают инф-цию о хэндлах создаваемых гнезд и ассоциированных с ними интерфейсами/номерами портов
- в ходе той же инициализации вызываем GetCurrentProcessId для получения Id тек.процесса, в контексте которого возможно будут впоследствии вызываться вышеупомянутые ф-ции
т.о., ставится однозначное соответствие между Id процесса и Winsock-ресурсами, им занимаемыми/освобождаемыми в ходе работы
полученная инф-ция передается любым удобным способом в процесс-монитор, установивший этот глоб.хук
сама хук-ф-ция в теле хук-DLL может ничего полезного и не делать, просто вызывать в своем теле CallNextHookEx()