shengjianlong
驱动牛犊
驱动牛犊
  • 注册日期2003-04-16
  • 最后登录2003-06-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1808回复:6

NdisTransferData(&Status,....)==NDIS_STATUS_PENDING

楼主#
更多 发布于:2003-06-02 12:11
经过2周的努力,我的ndis im防火墙终于可以工作了,但是有个问题始终困扰着我:
在Receive(
IN NDIS_HANDLE ProtocolBindingContext,
IN NDIS_HANDLE MacReceiveContext,
IN PVOID HeaderBuffer,
IN UINT HeaderBufferSize,
IN PVOID LookAheadBuffer,
IN UINT LookaheadBufferSize,
IN UINT PacketSize)里面,若NdisTransferData(&Status,....)==NDIS_STATUS_PENDING,是不是我们的程序就对Packet的内容没有控制权了,我是说,当pengding后,我们只能等着TransferDataComplete的到来了,如果其packet的内容不符合我们的要求,我们就不能Drop它了? 可不可以用Event机制,当pengding后等待event,然后在TransferDataComplete里面验证packet内容,如果需要控制,则复位该Event?
在我的机器上始终没有监控到pengding的情况,但是总是有这种担心,我是菜鸟,刚做NDIS,请各位大虾帮助。 :P
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-02 13:20
你还没有将packet交给协议层,怎么会没有控制权了?
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
shengjianlong
驱动牛犊
驱动牛犊
  • 注册日期2003-04-16
  • 最后登录2003-06-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-02 13:26
我有些迷惑了,ddk上面说,当pengding后,如果TransferData完成就到了TransferDataComplete,但是在TransferDataComplete里面,除了做些资源的清除工作,还做些什么?
shengjianlong
驱动牛犊
驱动牛犊
  • 注册日期2003-04-16
  • 最后登录2003-06-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-02 13:27
你还没有将packet交给协议层,怎么会没有控制权了?


我有些迷惑了,ddk上面说,当pengding后,如果TransferData完成就到了TransferDataComplete,但是在TransferDataComplete里面,除了做些资源的清除工作,还做些什么?
shengjianlong
驱动牛犊
驱动牛犊
  • 注册日期2003-04-16
  • 最后登录2003-06-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-02 14:19
[quote]你还没有将packet交给协议层,怎么会没有控制权了?


我有些迷惑了,ddk上面说,当pengding后,如果TransferData完成就到了TransferDataComplete,但是在TransferDataComplete里面,除了做些资源的清除工作,还做些什么? [/quote]

呵呵,解决了,谢谢mikeluo的提醒。放分了,虽然很少,但略表心意。
nez
nez
驱动牛犊
驱动牛犊
  • 注册日期2006-07-16
  • 最后登录2013-07-14
  • 粉丝0
  • 关注0
  • 积分195分
  • 威望24点
  • 贡献值1点
  • 好评度23点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-10-17 14:49
引用第4楼shengjianlong于2003-06-02 14:19发表的  :


呵呵,解决了,谢谢mikeluo的提醒。放分了,虽然很少,但略表心意。


mikeluo是怎么解决的??
在所有数据到来之前怎么判断一个包是不是应该拦截掉??
quentin
驱动牛犊
驱动牛犊
  • 注册日期2003-10-22
  • 最后登录2008-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-10-31 16:52
Re:NdisTransferData(&Status,....)==NDIS_STATU
PtReceive中若没有一次性收到整个IP报文,就需要调用TransferData将剩余的内容接收下来,此时可以:
1)为接收剩余数据分配一个MAC层报文缓冲、描述苻等;
2)将已经接收到的数据保存在一个缓冲之中放在另一个MAC层报文描述苻中,利用OriginalPkt字段将两个报文描述苻连接起来;
以1)中的报文描述苻为参数调用TransferData,就可以在PtTransferDataComplete返回时得到所有IP报文内容,进行分析处理了。

另外,只要没有向上层indicate报文,你就有报文的控制权。
游客

返回顶部