Current process ID

Home Forums Discussions General Discussion Current process ID

This topic contains 1 reply, has 2 voices, and was last updated by  Vadim Smirnov 8 years, 4 months ago.

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
    Moderator

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

Viewing 2 posts - 1 through 2 (of 2 total)

You must be logged in to reply to this topic.