Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нумерация открытых хэндлов чужого процесса [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()


Наверх

Титульная страница Поиск, карта сайта Написать письмо