Home › Forums › Discussions › Support › [eng][rus] ClientEventReceive problems
- This topic has 6 replies, 2 voices, and was last updated 17 years, 2 months ago by Vadim Smirnov.
-
AuthorPosts
-
September 23, 2007 at 8:22 am #5132
[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-клиенте), но где, мне не понятно.
Спасибо.September 23, 2007 at 9:32 am #6441TDI клиентов писать не так уж просто, так что ошибка в драйвере – самое вероятное. Какая, это разбираться надо…
September 23, 2007 at 1:18 pm #6442Там, по-моему, не ошибка, а просто что-то нужно еще сделать. Только это “что-то” мне не известно.
Данные 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-протокола. Но почему тогда один раз?
September 23, 2007 at 8:12 pm #6443TDI_EVENT_DISCONNECT посылается, когда user-mode прога просит disconnect. Но до TDI_EVENT_DISCONNECT, должно быть несколько TDI_EVENT_RECEIVE, а ведь их вызывает драйвер TDI-протокола. Но почему тогда один раз?
А что собственно видит сетевой сниффер? Два дампа для сравнения в студию, один с сети, другой с клиента. И кстати ClientEventChainedReceive, ClientEventReceiveExpedited, ClientEventChainedReceiveExpedited пошли лесом? С каким статусом обработался ClientEventReceive?
А вообще, гадать по чему не работает код, которого ты никогда в жизни не видел можно долго… Советую поискать в сети что-то вроде оберток в виде сокетов или вспоиогательных функций вокруг TDI (от PCAUSA например, или те что в DriverStudio). TDI клиента написать это не пару функций вызвать, в свое время мне пришлось изрядно повозиться…
September 26, 2007 at 11:59 am #6444Нашел ошибку. Она не в драйвере 🙂 Т.к. с сокетами раньше не работал, то и делал так:
for(...) send(...);
Естественно, отправлялось только одно сообщение.September 26, 2007 at 12:02 pm #6445@SerpentFly wrote:
Советую поискать в сети что-то вроде оберток в виде сокетов или вспоиогательных функций вокруг TDI (от PCAUSA например, или те что в DriverStudio).
Я использую скачанные с http://www.codeproject.com/system/driverdev5asp.asp исходники.
Там есть два файла: tdifuncs.c, tdifuncs.h.September 26, 2007 at 3:30 pm #6446Ну в общем все верно, первым делом всегда нужно смотреть что проходит по сети, а потом уже строить предположения 8)
Не смотрел те обертки, но в принципе почему бы и нет. Другое дело, что чужие баги ловить бывает намного сложнее чем свои…
-
AuthorPosts
- You must be logged in to reply to this topic.