| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > DuplicateHandle() и чужие сокеты (\Device\Afd) |
| Автор: ldr12 15.2.2007, 22:03 | ||
| Доброго времени суток. Проблема такова: получаю список хендлов процесса с помощью NtQuerySystemInformation. Выбираю из них файловые, а из них - сокеты. Делаю это, проверяя имя, ассоциированное с хендлом на соответствие строке \Device\Afd. Но! Когда я хочу скопировать каждый из этих сокетов в свой процесс, то какой бы я хендл не выбрал - DuplicateHandle() возвращает всегда дескриптор на последнее открытое процессом подключение (тестировал на mirc.exe). Как решить эту проблему? Или, быть может, есть более красивый способ получения сокетов процесса?
|
| Автор: bartram 16.2.2007, 09:58 |
| А хендл у тебя вообще правильно копируется? Попробуй для примера сравнить исходный хендл с тем хендлом который ты уже скопировал Добавлено @ 10:01 приведи более полный код, попробую у себя проверить |
| Автор: ldr12 16.2.2007, 22:27 | ||
| В том-то и дело, что неправильно А код вот он: Обнаружил удивительное свойство - если убрать CloseHandle(), то выводиться будет все правильно. Интересно, отчего? Memo1, Button1, Edit1
|
| Автор: bartram 18.2.2007, 13:09 |
| ldr12, странно.... Первый раз запускаю - показывает Второй раз запускаю без CloseHandle - показывает (тоже самое что и в первый раз) И показывает все время локальный ip 127.0.0.1, хотя я в этот момент был подключен к инету.... Странно....посмотрю в чем проблема Добавлено @ 13:13 если без CloseHandle(DstHandle); то все показывает, только убивает подключение с инетом у приложения на котором проверку проходит, но ip по прежнему локальный.... |
| Автор: ldr12 18.2.2007, 18:13 |
| Ага, убивает, все верно Насчет локального ипа - еще интересней даже У меня просто показывало последнее подключение вместо всех (т.е. 6 раз 65.54.11.234, допустим) Windows 2000 SP4 |
| Автор: ldr12 18.2.2007, 20:34 |
| Чтобы убедить себя в том, что исходные хендлы для копирования правильны (а я бы на твоем месте уже засомневался), попробуй заменить DUPLICATE_SAME_ACCESS на DUPLICATE_CLOSE_SOURCE и позапускать |