liuguidong123
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2009-03-19
  • 粉丝0
  • 关注0
  • 积分227分
  • 威望27点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
阅读:2709回复:5

紧急求助:TDI filter接收数据问题

楼主#
更多 发布于:2007-03-14 18:23
  我做tdi filter 统计下载数据 的大小
我传了一个13k的数据文件到计算机上 , 可在TDI_RECEIVE里面只收到8k多点,其他响应TDI_RECEIVE_DATAGRAM:
TDI_SET_EVENT_HANDLER:
TDI_EVENT_RECEIVE:
TDI_EVENT_CHAINED_RECEIVE_EXPEDITED:
TDI_EVENT_RECEIVE_DATAGRAM:
TDI_EVENT_RECEIVE_EXPEDITED:
TDI_EVENT_CHAINED_RECEIVE:    
TDI_EVENT_CHAINED_RECEIVE_DATAGRAM:

中也未收到任何数据, 请问是什么原因?

难道还有其他地方接收数据?  谢谢
liuguidong123
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2009-03-19
  • 粉丝0
  • 关注0
  • 积分227分
  • 威望27点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-03-14 21:33
怎么没人回答,是不是没有人碰到这个问题?
ProPlayboy
驱动大牛
驱动大牛
  • 注册日期2005-07-07
  • 最后登录2022-02-15
  • 粉丝0
  • 关注0
  • 积分1016分
  • 威望811点
  • 贡献值0点
  • 好评度719点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2007-03-15 01:23
晕倒。。。问人的时候,能不能把信息写得清楚一点,连标志位都要让人猜..?在Tdi_Receive()中的完成例程中看看,你也许会有惊喜的(或者是惊吓)...还有,依照TDI的做法,大多数情况下,优先使用ChainedRecv,然后才是EventRecv,用得最少的是Tdi_Receive.....不知道你自己里面怎么写的!
人不靓仔心灵美,版头不正红花仔!
liuguidong123
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2009-03-19
  • 粉丝0
  • 关注0
  • 积分227分
  • 威望27点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-03-15 09:50
下面是我的代码, 我测试时直接就没有经过 TDI_RECEIVE以外的路径。

而且我当我设置了 我自己的TDI_EVENT_RECEIVE事件的回调函数Tdi_RcvEvent(代码在后面)后,打开网页时会出现异常, KMODE_EXCEPTION_NOT_HANDLED,  请各位指点。
switch(pIoStack->MinorFunction)
{
case TDI_RECEIVE:
   DbgPrint("filter device receive date!");        
   DbgPrint("Receive date len: %ld",MmGetMdlByteCount(irp->MdlAddress));
  break;
case TDI_RECEIVE_DATAGRAM:
  DbgPrint("filter device receive Gram date!");
  DbgPrint("Receive Gram date len: %ld",MmGetMdlByteCount(irp->MdlAddress));
  break;
case TDI_SET_EVENT_HANDLER:
 switch(r->EventType)
 {
 case TDI_EVENT_RECEIVE:
 DbgPrint("In event receive date!");    
 if(r->EventHandler!=NULL)
 {                        
    context->oldHandler = r->EventHandler;
    context->oldContext = r->EventContext;

    r->EventHandler = Tdi_RcvEvent;
    r->EventContext = context;
  }
 break;

 case TDI_EVENT_CHAINED_RECEIVE_EXPEDITED:
   DbgPrint("In event receive chain_receivePexpedited!");
   break;
 
case TDI_EVENT_RECEIVE_DATAGRAM:
  DbgPrint("In event receive gram date!");
  break;
 
case  TDI_EVENT_RECEIVE_EXPEDITED:
  DbgPrint("In event expedited receive date!");
  break;
                
case TDI_EVENT_CHAINED_RECEIVE:
  DbgPrint("In event chain receive date!");
  break;
                
case TDI_EVENT_CHAINED_RECEIVE_DATAGRAM:
  DbgPrint("In event chain receive datagram!");
  break;                
 }
}


NTSTATUS
Tdi_RcvEvent
(
    PVOID  EventContext,
    PVOID  ConnectionContext,  
    ULONG  Flags,
    ULONG  Indicated,
    ULONG  Available,
    ULONG  *Taken,
    PVOID  *Data,
    PIRP   *irp)
{
    TDI_EVENT_CONTEXT    *ctx = (TDI_EVENT_CONTEXT*)EventContext;
    NTSTATUS         status;

    DbgPrint("\nIn event receive date len: %ld\n",Indicated);

   status = ((PTDI_IND_RECEIVE)(ctx->oldHandler))(
        ctx->oldContext,
        ConnectionContext,  
        Flags,
        Indicated,
        Available,
       Taken,
        Data,
        irp);

  return status;
}
ProPlayboy
驱动大牛
驱动大牛
  • 注册日期2005-07-07
  • 最后登录2022-02-15
  • 粉丝0
  • 关注0
  • 积分1016分
  • 威望811点
  • 贡献值0点
  • 好评度719点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2007-03-17 22:23
在Tdi_Event_Recv()中,记得对返回Pending的值,进行处理...
人不靓仔心灵美,版头不正红花仔!
ProPlayboy
驱动大牛
驱动大牛
  • 注册日期2005-07-07
  • 最后登录2022-02-15
  • 粉丝0
  • 关注0
  • 积分1016分
  • 威望811点
  • 贡献值0点
  • 好评度719点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2007-03-17 22:25
如果光拿来做数据统计,是很简单的.
人不靓仔心灵美,版头不正红花仔!
游客

返回顶部