Current process ID

Home Forums Discussions General Current process ID

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #5249
    AndreyK
    Participant

      Добрый день!

      Есть вопрос относительно получения айди текущего процесса, являющегося инициатором присланного 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 лучше для этого пользоваться…

      #6728
      Vadim Smirnov
      Keymaster

        Лучше запоминать идентификатор процесса в момент создания address/connection objects, эти операции обычно не откладываются и обьект создается именно в контексте вызывающего процесса.

      Viewing 2 posts - 1 through 2 (of 2 total)
      • You must be logged in to reply to this topic.