zxcasd
驱动牛犊
驱动牛犊
  • 注册日期2001-06-14
  • 最后登录2007-08-09
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2004-05-01 19:11
[quote][quote][quote]
按第1种说的那样做不是有点怪么,把我自己的那个MyPacket发下去,系统传给我的那个PACKET也返回成功,那不是发了两次?

不怪,系统传给你的那个包你返回成功,只是协议层看到包是发出去了,但真正要发出去,还得调用下层的miniport才能发出,
多看看passthru的原理。 [/quote]

你的意思是系统传给我的那个包返回成功,但不返回给SEND_HANDLER是么?这样系统传给我的那个包就不会发出去了 [/quote]用MyPacket代替Packet调用SendHandler [/quote]

ok,我现在用你说的第一种方法实现了自己的包替换原包发送,感谢,给分:),现在就是在SendComplete中资源释放有点问题,也不知道算不算问题,我一用NdisFreeMemory(pPacketContent,bufLength,0);释放自己构造的包就蓝屏,把这句屏蔽掉就不会蓝屏了,工作也还正常,不知道这样做会不会有问题啊.
死了都要爱......
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
21楼#
发布于:2004-05-01 21:28
SendComplete的问题已经跟你说了,自己慢慢体会吧,如果你还不能做对,说明你还没有看懂:)
jackieky
驱动牛犊
驱动牛犊
  • 注册日期2004-02-10
  • 最后登录2004-08-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
22楼#
发布于:2004-05-07 09:16
youngyt:先谢谢你的指点,那个是没有错误了,但是我一装上驱动以后,系统就马上重起,重新启动后,系统就说检测到新硬件让我更新驱动程序!然后我就不能上网了(我们使用的认证上网的),说是找不到网卡,我费了好大的劲才把那个给卸掉!然后才可以上网,不知为何故。????以前调试的时候也碰到过类似的问题,不知道是怎么引起的,还望各位大侠帮帮我了,下面是部分代码:
pPacketContent为一个字符缓冲区,pPacketBuffer 为一个PNDIS_BUFFER缓冲区,然后再重新构造一个包,帮我看看想这样做错在什么地方?谢谢了
//分配一个PNDS_BUFFER缓冲区pPacketBuffer,指向pPacketContent缓冲区
NdisAllocateBuffer(&Status,
          &pPacketBuffer,
          pAdapt->SendPacketPoolHandle,
          pPacketContent,
          PacketBufferLen);
         if (Status == NDIS_STATUS_SUCCESS)
          NdisChainBufferAtBack(MyPacket,pPacketBuffer);

          NdisSend(&Status, pAdapt->BindingHandle, MyPacket);
      if (Status != NDIS_STATUS_PENDING)
     {
  NdisIMCopySendCompletePerPacketInfo (Packet, MyPacket);
  NdisFreeBuffer(pPacketBuffer);
               NdisFreeMemory(pPacketContent, 2000, 0);
  NdisFreePacket(MyPacket);
     }
youngyt
驱动牛犊
驱动牛犊
  • 注册日期2003-11-23
  • 最后登录2006-12-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2004-05-07 14:19
youngyt:先谢谢你的指点,那个是没有错误了,但是我一装上驱动以后,系统就马上重起,重新启动后,系统就说检测到新硬件让我更新驱动程序!然后我就不能上网了(我们使用的认证上网的),说是找不到网卡,我费了好大的劲才把那个给卸掉!然后才可以上网,不知为何故。????以前调试的时候也碰到过类似的问题,不知道是怎么引起的,还望各位大侠帮帮我了,下面是部分代码:
pPacketContent为一个字符缓冲区,pPacketBuffer 为一个PNDIS_BUFFER缓冲区,然后再重新构造一个包,帮我看看想这样做错在什么地方?谢谢了
//分配一个PNDS_BUFFER缓冲区pPacketBuffer,指向pPacketContent缓冲区
NdisAllocateBuffer(&Status,
          &pPacketBuffer,
          pAdapt->SendPacketPoolHandle,
          pPacketContent,
          PacketBufferLen);
         if (Status == NDIS_STATUS_SUCCESS)
          NdisChainBufferAtBack(MyPacket,pPacketBuffer);

          NdisSend(&Status, pAdapt->BindingHandle, MyPacket);
      if (Status != NDIS_STATUS_PENDING)
     {
  NdisIMCopySendCompletePerPacketInfo (Packet, MyPacket);
  NdisFreeBuffer(pPacketBuffer);
               NdisFreeMemory(pPacketContent, 2000, 0);
  NdisFreePacket(MyPacket);
     }



NdisChainBufferAtBack(MyPacket,pPacketBuffer);这句之前你有没有做过这样的操作:
MyPacket->Private.Head = NULL;
MyPacket->Private.Tail = NULL;
你最好多贴一点上来。

BTW:你的问题与此贴主题差太多了,建议新开贴。 :D

[编辑 -  5/7/04 by  youngyt]
上一页 下一页
游客

返回顶部