В попытках разобраться с сетевым программирование задумал написать программу которая смогла бы отслеживать обмен пакетами определённые процессы. Хотя теперь я уже совсем не уверен что выбрал себе задачу поплечу... но всё же, нашёл функции по моему мнению подходящие для получения данных о сетевой активности процесса, они в заголовке. И когда добрался до вывода информации на экран, которую предоставляют эти функции, понял, что они показывают совсем не то что показывает например системный монитор, или TCPview. Что бы избавить людей от копания в MSDN они выводят состояние, адреса, порты, и самое главное PID процесса к которому это всё привязано. Но что-то не клеится, вот скриншот. Может есть какие-то более подходящие функции для этих целей, или надо налаживать как то взаимодействие с драйвером. Если да то с каким и как. О создании своего драйвера можно забыть, я так и не смог разобраться как его можно легально подгружать в систему, только если в тестовом режиме.
А через wireshark то байты совпадают с теми что по адресам да регистрам падают? Все программы интерпретируют байты, вы может всё правильно делаете, да на пол дороге дело бросаете? нет? в эту ветку загляните https://wasm.in/threads/poluchit-pid-processa-zabindivshego-udp-tcp-port.23451/
Не в бровь, а в глаз... спасибо. Ну раз пошла такая пьянка... может решим ещё одну непосильную проблему. В столбце Path отображается путь, этот путь получается с помощью OpenProcess ->GetProcessImageFileName. Легального получения пути без дескриптора процесса я найти не смог, все функции требуют handle, OpenProcess выдаёт handle далеко не для всех процессов, даже если запускать программу от имени администратора. С помощью createtoolhelp32snapshot можно посмотреть модули входящие в процесс, но это не путь. Также путь можно посмотреть в структуре TEB но для доступа к ней опять же нужен handle процесса. Возможно есть какая нибудь легальная возможность получить адрес структуры EPROCESS и переходя по двусвязному списку выудить все пути.
TcpView берет список GetExtendedTcpTable с классом TCP_TABLE_OWNER_MODULE_ALL, который возвращает MIB_TCPTABLE_OWNER_MODULE, где есть dwOwningPid (The PID of the process that issued a context bind for this TCP connection). По PID'у делает OpenProcess c PROCESS_VM_READ|PROCESS_QUERY_INFORMATION (для этого по-моему админ не нужен) и по получившемуся хендлу QueryFullProcessImageNameA.
OpenProcess не в состоянии открыть все процессы даже с этими флагами, на системных процессах возвращает 0.
у меня он только процесс System не открывает с этими флагами, процессы созданные "СИСТЕМА" открываются нормально им. --- Сообщение объединено, 17 дек 2018 --- TcpView там параллельно CreateToolhelp32Snapshot делает с TH32CS_SNAPPROCESS. Можно оттуда хотя бы краткое имя брать, если полное не получится.