Доброго времени суток. Проблема такова: получаю список хендлов процесса с помощью NtQuerySystemInformation. Выбираю из них файловые, а из них - сокеты. Делаю это, проверяя имя, ассоциированное с хендлом на соответствие строке \Device\Afd. Но! Когда я хочу скопировать каждый из этих сокетов в свой процесс, то какой бы я хендл не выбрал - DuplicateHandle() возвращает всегда дескриптор на последнее открытое процессом подключение (тестировал на mirc.exe). Как решить эту проблему? Или, быть может, есть более красивый способ получения сокетов процесса?
За код на Delphi не бить Код (Text): ... ProcHandle := OpenProcess(PROCESS_DUP_HANDLE, False, PID); ... if DuplicateHandle(ProcHandle, Info^.Information[Loop].Handle, GetCurrentProcess, @CopiedHandle, 0, False, DUPLICATE_SAME_ACCESS) then ... getpeername(CopiedHandle, r_sin, r_sin_len) ...
Ошибка 10014 была но я ее победил, это из-за невнимательности. Интерес в том, что getpeername/getsockname выдают 10057 - т.е. сокет не соединен, на большей части из скопированных хэндлов сокетов.