<li id="61csb"><s id="61csb"><xmp id="61csb"><noframes id="61csb"></noframes>
  • <sub id="61csb"></sub>
    <sub id="61csb"><xmp id="61csb">
    <sub id="61csb"></sub><sub id="61csb"></sub><sub id="61csb"><progress id="61csb"></progress></sub>
  • <menuitem id="61csb"><xmp id="61csb">
    <sub id="61csb"></sub>
    <track id="61csb"></track>
  • <menuitem id="61csb"></menuitem>
    <sub id="61csb"><xmp id="61csb">
    <sub id="61csb"><progress id="61csb"><sub id="61csb"></sub></progress></sub>
  • <menuitem id="61csb"><xmp id="61csb"><sub id="61csb"></sub>
    <tbody id="61csb"></tbody>
  • <menuitem id="61csb"></menuitem>
    <tbody id="61csb"></tbody>
    <menuitem id="61csb"></menuitem>
  • <sub id="61csb"></sub>
  • <sub id="61csb"><xmp id="61csb">
  • <menuitem id="61csb"><font id="61csb"></font></menuitem>
    <tbody id="61csb"></tbody><sub id="61csb"><progress id="61csb"></progress></sub>
  • <track id="61csb"></track>
    <menuitem id="61csb"></menuitem>
  • <track id="61csb"><noframes id="61csb"><center id="61csb"></center>
    <tbody id="61csb"><noframes id="61csb"><samp id="61csb"><input id="61csb"></input></samp>
    <tbody id="61csb"><center id="61csb"><tbody id="61csb"></tbody></center></tbody>
    <menuitem id="61csb"></menuitem>
  • <track id="61csb"><noframes id="61csb">
  • <track id="61csb"></track>
    <sub id="61csb"></sub><sub id="61csb"><xmp id="61csb"><menuitem id="61csb"></menuitem> <track id="61csb"><li id="61csb"></li></track>
  • <sub id="61csb"><xmp id="61csb"><menuitem id="61csb"></menuitem>
    <track id="61csb"><noframes id="61csb">
    <track id="61csb"><noframes id="61csb">
      lauer
      驱动牛犊
      驱动牛犊
      • 注册日期2004-02-04
      • 最后登录2013-01-07
      • 粉丝1
      • 关注1
      • 积分578分
      • 威望127点
      • 贡献值1点
      • 好评度57点
      • 原创分1分
      • 专家分0分
      阅读:2519回复:12

      (增加最简nat源码)passthru PtRecieve调用ndissend应该处理内存

      楼主#
      更多 发布于:2004-02-11 14:49
      在ptRecieve中

      先做好合适的正确的包pPacketContent
      然后
      NdisAllocateBuffer(&Status,&FirstBuffer,send_handle,pPacketContent,len);//分配buffer,并把全局变量或在本函数上面定义的数据包地址pPacketContent中的
      //内容复制到分配的buffer里
      NdisChainBufferAtFront( MyPacket, FirstBuffer);//把刚分配的buffer设为要发送包MyPacket的第一个buffer

      Rsvd = (PRSVD)(MyPacket->ProtocolReserved);
      Rsvd->OriginalPkt = Packet;
      MyPacket->Private.Head->Next =NULL;//把buffer的链接下一个指针置0,即设置发送链表只有一个buffer元素
      MyPacket->Private.Tail =NULL;//把Tail指针也置0
      NdisSetPacketFlags(MyPacket, NDIS_FLAGS_DONT_LOOPBACK);//设置Flags*/
      DBGPRINT("  to call ndissend start!n");
      NdisSend(&Status,pAdapt->BindingHandle,MyPacket);

      *** C:NTDDKsrcnetworkndispassthruprotocol.c (1012) ***  locate packet for mypacket from send_handle
      *** C:NTDDKsrcnetworkndispassthruprotocol.c (1047) ***  copy packet to MyPacket finished
      *** C:NTDDKsrcnetworkndispassthruprotocol.c (1052) ***  to call ndissend start!n

      *** Fatal System Error: 0x000000d1
                             (0x05018064,0x00000002,0x00000000,0xF40ADD81)
      在ptRecieve中调用ndissend如何处理内存比较合理?


      [编辑 -  3/8/04 by  lauer]

      最新喜欢:

      xiaojian521xiaoji...
      lixiangying
      驱动牛犊
      驱动牛犊
      • 注册日期2002-05-03
      • 最后登录2007-09-09
      • 粉丝0
      • 关注0
      • 积分9分
      • 威望1点
      • 贡献值0点
      • 好评度1点
      • 原创分0分
      • 专家分0分
      沙发#
      发布于:2004-02-11 19:19
      用ndissend!!!!
      lauer
      驱动牛犊
      驱动牛犊
      • 注册日期2004-02-04
      • 最后登录2013-01-07
      • 粉丝1
      • 关注1
      • 积分578分
      • 威望127点
      • 贡献值1点
      • 好评度57点
      • 原创分1分
      • 专家分0分
      板凳#
      发布于:2004-02-12 11:00
      用ndissend发送如何处理内存才正确呢?

      困扰中!

      [编辑 -  2/12/04 by  lauer]
      lauer
      驱动牛犊
      驱动牛犊
      • 注册日期2004-02-04
      • 最后登录2013-01-07
      • 粉丝1
      • 关注1
      • 积分578分
      • 威望127点
      • 贡献值1点
      • 好评度57点
      • 原创分1分
      • 专家分0分
      地板#
      发布于:2004-02-12 16:29
      问题解决了
      就是PtSendComplete是要自己释放载PtRecieve的Packet
      而不能继续调用NdisMSendComplete
      因为这个包不是Protocol层发出的,
      不用还原原始包。
      我测试完基本的Nat功能后就放一个最简nat源码上来!
      lixiangying
      驱动牛犊
      驱动牛犊
      • 注册日期2002-05-03
      • 最后登录2007-09-09
      • 粉丝0
      • 关注0
      • 积分9分
      • 威望1点
      • 贡献值0点
      • 好评度1点
      • 原创分0分
      • 专家分0分
      地下室#
      发布于:2004-02-12 19:16
      我也在做,只是有几个问题还没有解决。
      希望多交流(lxyywj2002@163.com)
      期待你的原马。
      Jackaroo_lzh
      驱动牛犊
      驱动牛犊
      • 注册日期2003-10-02
      • 最后登录2004-08-18
      • 粉丝0
      • 关注0
      • 积分0分
      • 威望0点
      • 贡献值0点
      • 好评度0点
      • 原创分0分
      • 专家分0分
      5楼#
      发布于:2004-02-12 22:36
      我也卡在这里,谢谢!
      期待原码,(cantlong@sohu.com)
      lauer
      驱动牛犊
      驱动牛犊
      • 注册日期2004-02-04
      • 最后登录2013-01-07
      • 粉丝1
      • 关注1
      • 积分578分
      • 威望127点
      • 贡献值1点
      • 好评度57点
      • 原创分1分
      • 专家分0分
      6楼#
      发布于:2004-02-13 15:20
      刚刚测试完的passthru nat例子
      实现:
      在局域网内把一台机器来的udp或ip包在ndis层
      更改mac地址和ip地址实现nat
      (发回原地本例仅是调换而已,更多的就看发挥了)

      本例传输大数据依然存在很多问题
      主要是内存分配和buffer链处理
      希望有经验的大大给个指导


      [编辑 -  2/13/04 by  lauer]

      这个例子有很多错误,我已经修改了很多
      不过由于现在基本上已经完成了整个任务
      基于工作上的原因,不能把新的代码放上来
      只能写一些修改意见在我下面的贴子中。


      [编辑 -  3/8/04 by  lauer]
      附件名称/大小 下载次数 最后更新
      2004-02-13_passthru_nat.rar (56KB)  227
      wengyu100
      驱动牛犊
      驱动牛犊
      • 注册日期2003-10-10
      • 最后登录2006-10-21
      • 粉丝0
      • 关注0
      • 积分0分
      • 威望0点
      • 贡献值0点
      • 好评度0点
      • 原创分0分
      • 专家分0分
      7楼#
      发布于:2004-03-04 20:57
      几位做nat的老兄,能交流一下否?
      我的QQ80442624
      我觉得QQ交流比较好,邮件太慢了
      歇息
      youngyt
      驱动牛犊
      驱动牛犊
      • 注册日期2003-11-23
      • 最后登录2006-12-29
      • 粉丝0
      • 关注0
      • 积分0分
      • 威望0点
      • 贡献值0点
      • 好评度0点
      • 原创分0分
      • 专家分0分
      8楼#
      发布于:2004-03-08 14:39
      楼主,能告诉我你的最后的调试信息是如何打出来的吗?应该不是DbgPrint吧。
      lauer
      驱动牛犊
      驱动牛犊
      • 注册日期2004-02-04
      • 最后登录2013-01-07
      • 粉丝1
      • 关注1
      • 积分578分
      • 威望127点
      • 贡献值1点
      • 好评度57点
      • 原创分1分
      • 专家分0分
      9楼#
      发布于:2004-03-08 14:45
      当然是使用DbgPrint或DBGPRINT
      借助vmware虚拟系统和com口使用windbg就可以
      可方便的实现debug了

      强烈推荐使用vmware调试ndis驱动
      lauer
      驱动牛犊
      驱动牛犊
      • 注册日期2004-02-04
      • 最后登录2013-01-07
      • 粉丝1
      • 关注1
      • 积分578分
      • 威望127点
      • 贡献值1点
      • 好评度57点
      • 原创分1分
      • 专家分0分
      10楼#
      发布于:2004-03-08 14:51
      对于碰到的碎片包,
      按照MpSend里的方法复制包的OOB数据等
      同时对碎片不用修改协议层的端口等(碎片可能没有协议层)
      就可以顺利的把碎片包发出

      还有就是需要做一个队列把发送的包记住
      这样再PtSendComplete时就了一区别对待是否自己发送的包
      以保证在发送大包碎片时不会出错

      如果需要做pat,那就麻烦多了--需要把碎片先存下来,
      到齐了修改完了,再分别发出
      fhqpdcn
      驱动牛犊
      驱动牛犊
      • 注册日期2007-06-01
      • 最后登录2016-01-09
      • 粉丝0
      • 关注0
      • 积分14分
      • 威望86点
      • 贡献值1点
      • 好评度8点
      • 原创分0分
      • 专家分0分
      11楼#
      发布于:2008-12-25 17:08
      最近我正为这个问题发愁,,   参考参考.......

      我想通过上层的WRITEFILE来发送ARP包,,,在MDL中取得数据,,,可是一调用 NDISSEND 就蓝了...

          谢谢楼上的各兄弟,,
      我是菜鸟
      wangjile
      驱动牛犊
      驱动牛犊
      • 注册日期2019-05-18
      • 最后登录2019-05-18
      • 粉丝0
      • 关注0
      • 积分1分
      • 威望10点
      • 贡献值0点
      • 好评度0点
      • 原创分0分
      • 专家分0分
      12楼#
      发布于:2019-05-18 14:05
      我是菜鸟,谁能告诉我在吗弄,有奖金哦,期待源码,1836463413@qq.com
      游客

      返回顶部