[eng][rus] ClientEventReceive problems

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

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
      Keymaster

        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
          Keymaster

            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
                Keymaster

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

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

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