[eng][rus] ClientEventReceive problems

Home Forums Discussions Support Portal [eng][rus] ClientEventReceive problems

This topic contains 6 replies, has 2 voices, and was last updated by  Vadim Smirnov 10 years, 1 month ago.

Viewing 7 posts - 1 through 7 (of 7 total)
  • Author
    Posts
  • #5132

    buktak
    Participant

    [eng]
    I registered callback-function ClientEventReceive(). But when I call send(soket, str, n, NULL) some times from other computer, ClientEventReceive() works only one time. What’s wrong?
    Thanks

    [rus]
    Есть TDI-клент, в нем зарегистрировал callback-функцию ClientEventReceive(…). Но когда с другого компа посылаю несколько сообщений из user-mode с помощью send(soket, str, n, NULL), то ClientEventReceive(…) срабатывает только один раз. В чем проблема?
    Я еще специально для теста написал маленькую прогу в user-mode, использующую сокеты. Так она принимает все сообщения. Значит проблема в драйвере (TDI-клиенте), но где, мне не понятно.
    Спасибо.

    #6441

    Vadim Smirnov
    Moderator

    TDI клиентов писать не так уж просто, так что ошибка в драйвере – самое вероятное. Какая, это разбираться надо…

    #6442

    buktak
    Participant

    Там, по-моему, не ошибка, а просто что-то нужно еще сделать. Только это “что-то” мне не известно.

    Данные TDIMon:

      2.29369459 testdrv.exe:1240 812A9C40 IRP_MJ_CREATE TCP:0.0.0.0:0 SUCCESS Address Open
      2.29396474 testdrv.exe:1240 8118B028 IRP_MJ_CREATE TCP:Connection obj SUCCESS Context:0x0
      2.29418208 testdrv.exe:1240 8118B028 TDI_ASSOCIATE_ADDRESS TCP:Connection obj SUCCESS TCP:0.0.0.0:1036
      2.29451313 testdrv.exe:1240 812A9C40 TDI_SET_EVENT_HANDLER TCP:0.0.0.0:1036 SUCCESS Receive Event
      2.29498721 testdrv.exe:1240 8118B028 TDI_CONNECT TCP:0.0.0.0:1036 192.168.1.4:5234 SUCCESS
      2.29642091 testdrv.exe:1240 812A9C40 TDI_EVENT_RECEIVE TCP:0.0.0.0:1036 192.168.1.4:5234 SUCCESS Length:11 Flags: ENTIRE_MESSAGE LOOKAHEAD DISPATCH
      2.29764118 testdrv.exe:1240 812A9C40 TDI_EVENT_DISCONNECT TCP:0.0.0.0:1036 192.168.1.4:5234 SUCCESS ABORT
      3.00020030 explorer.exe:142 FFAED210 IRP_MJ_DEVICE_CONTROL TCP: SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
      3.00027853 explorer.exe:142 FFAED210 IRP_MJ_DEVICE_CONTROL TCP:
      SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
      3.00035116 explorer.exe:142 811872A8 IRP_MJ_DEVICE_CONTROL TCP:
      SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
      3.00040703 explorer.exe:142 FFAED210 IRP_MJ_DEVICE_CONTROL TCP:
      SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
      3.00045062 explorer.exe:142 FFAED210 IRP_MJ_DEVICE_CONTROL TCP:
      SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
      12.00306799 explorer.exe:142 811872A8 IRP_MJ_DEVICE_CONTROL TCP:
      SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
      12.00309956 explorer.exe:142 811872A8 IRP_MJ_DEVICE_CONTROL TCP:
      SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
      12.00313699 explorer.exe:142 811872A8 IRP_MJ_DEVICE_CONTROL TCP:
      SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX
      12.29637957 testdrv.exe:1240 8118B028 TDI_DISCONNECT TCP:0.0.0.0:1036 CONNECTION_INVALID
      12.29658211 testdrv.exe:1240 8118B028 TDI_DISASSOCIATE_ADDRESS TCP:0.0.0.0:1036 SUCCESS
      12.29670642 testdrv.exe:1240 8118B028 IRP_MJ_CLEANUP TCP:Connection obj SUCCESS
      12.29674693 testdrv.exe:1240 8118B028 IRP_MJ_CLOSE TCP:Connection obj SUCCESS
      12.29697629 testdrv.exe:1240 812A9C40 IRP_MJ_CLEANUP TCP:0.0.0.0:1036 SUCCESS
      13.00121552 explorer.exe:142 FFAED210 IRP_MJ_DEVICE_CONTROL TCP:
      SUCCESS IOCTL_TCP_QUERY_INFORMATION_EX

    TDI_EVENT_DISCONNECT посылается, когда user-mode прога просит disconnect. Но до TDI_EVENT_DISCONNECT, должно быть несколько TDI_EVENT_RECEIVE, а ведь их вызывает драйвер TDI-протокола. Но почему тогда один раз?

    #6443

    Vadim Smirnov
    Moderator

    TDI_EVENT_DISCONNECT посылается, когда user-mode прога просит disconnect. Но до TDI_EVENT_DISCONNECT, должно быть несколько TDI_EVENT_RECEIVE, а ведь их вызывает драйвер TDI-протокола. Но почему тогда один раз?

    А что собственно видит сетевой сниффер? Два дампа для сравнения в студию, один с сети, другой с клиента. И кстати ClientEventChainedReceive, ClientEventReceiveExpedited, ClientEventChainedReceiveExpedited пошли лесом? С каким статусом обработался ClientEventReceive?

    А вообще, гадать по чему не работает код, которого ты никогда в жизни не видел можно долго… Советую поискать в сети что-то вроде оберток в виде сокетов или вспоиогательных функций вокруг TDI (от PCAUSA например, или те что в DriverStudio). TDI клиента написать это не пару функций вызвать, в свое время мне пришлось изрядно повозиться…

    #6444

    buktak
    Participant

    Нашел ошибку. Она не в драйвере 🙂 Т.к. с сокетами раньше не работал, то и делал так:
    for(...) send(...);
    Естественно, отправлялось только одно сообщение.

    #6445

    buktak
    Participant

    @SerpentFly wrote:

    Советую поискать в сети что-то вроде оберток в виде сокетов или вспоиогательных функций вокруг TDI (от PCAUSA например, или те что в DriverStudio).

    Я использую скачанные с http://www.codeproject.com/system/driverdev5asp.asp исходники.
    Там есть два файла: tdifuncs.c, tdifuncs.h.

    #6446

    Vadim Smirnov
    Moderator

    Ну в общем все верно, первым делом всегда нужно смотреть что проходит по сети, а потом уже строить предположения 8)

    Не смотрел те обертки, но в принципе почему бы и нет. Другое дело, что чужие баги ловить бывает намного сложнее чем свои…

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

You must be logged in to reply to this topic.