Добрый день!
Есть вопрос относительно получения айди текущего процесса, являющегося инициатором присланного IRP. Пытаюсь в TDI фильтре, зааттаченном над Tcp, Udp и RawIp перехватывать запрос TDI_CONNECT. Результаты своих перехваттов сравниваю с утилитой Руссиновича TDIMon.
Айди процесса и параметры соединения получаю следующим образом:
ULONG pid;
pid = (ULONG)PsGetCurrentProcessId();
...
PIO_STACK_LOCATION irps = = IoGetCurrentIrpStackLocation(irp);
PTDI_REQUEST_KERNEL_CONNECT param = (PTDI_REQUEST_KERNEL_CONNECT)(&irps->Parameters);
PTRANSPORT_ADDRESS remote_addr = ((TRANSPORT_ADDRESS *)(param->RequestConnectionInformation->RemoteAddress))->Address;
...
((TDI_ADDRESS_IP *)(remote_addr->Address))->in_addr, // IP
((TDI_ADDRESS_IP *)(remote_addr->Address))->sin_port, // номер порта
Иногда сладываются ситуации, когда у меня логируется запрос на соединение, например с DNS сервером, от процесса, работающего с моим драйвером (моего сервиса). У Руссиновича же отображается что запрос пришел от Системного процесса с айди равным 4. Ситуация не частая – но неприятная.
Не могли бы Вы подсказать – что я могу делать не так, и какой оптимальный способ для определения Айди процесса инициатора соединения? Каким API лучше для этого пользоваться…