阅读:1901回复:6
求助:TDI Server模式下监听,只能监听到本机的请求
采用的是TDI_ACCEPT然后加TDI_EVENT_CONNECT的方式,本机的请求可以连接,但别的IP的请求没有任何反映,用抓包工具确实可以抓到请求的包;
搞了一天了,实在不知道怎么搞,痛苦中…… |
|
沙发#
发布于:2007-11-28 13:43
是先TDI_ACCEPT建立一个IRP,然后加TDI_EVENT_CONNECT ,而且也加成功了,最后在接收到事件后用TdiBuildAccept,本机上的请求没有任何问题,可是通过网卡的根本就进不了Connect Event里面去,好像没加TDI_EVENT_CONNECT 一样;
没有人遇到这样的问题吗 麻烦高手回答下下,谢谢了 |
|
板凳#
发布于:2007-11-28 14:02
你是如何处理TDI_EVENT_CONNECT的?
|
|
地板#
发布于:2007-11-28 14:58
谢谢关注
加事件是: pIrp = TdiBuildInternalDeviceControlIrp(TDI_SET_EVENT_HANDLER, pTcpDevObj, pAddrFileObj, &Event, &IoStatus ); TdiBuildSetEventHandler(pIrp, pTcpDevObj, pAddrFileObj, NULL, NULL, TDI_EVENT_CONNECT, TDIEventConnect, pEventContext ); status = IoCallDriver(pTcpDevObj, pIrp); if (STATUS_PENDING==status) KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, 0); 可是现在根本就没有进入到TDIEventConnect中去, 奇怪的是本机发送的请求就可以进去 实在不知道什么原因 |
|
地下室#
发布于:2007-11-28 16:35
具体顺序是:
OpenTransportAddress OpenEndPoint Set TDI_EVENT_DISCONNECT Set TDI_EVENT_ERROR_EX Set TDI_EVENT_CONNECT AssocAddr |
|
5楼#
发布于:2007-11-28 17:21
呵呵,这个理解不对,当然看不到了。正确的做法应该是做一个tdi filter,在接到TDI_EVENT_CONNECT的时候,替换掉tdi client的函数指针,这样系统先调到你的函数,通过这种方式来实现监控的。
参考网上的tdi_fw,和tdisamp的代码。 |
|
6楼#
发布于:2007-11-28 17:41
这样子啊,我按你的方法再试试,多谢多谢!!!
|
|