root60931
驱动大牛
驱动大牛
  • 注册日期2002-10-25
  • 最后登录2025-03-22
  • 粉丝2
  • 关注0
  • 积分1013分
  • 威望432点
  • 贡献值0点
  • 好评度311点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1243回复:4

PtReceive 与 PtReturnPacket 是不是严格按照先后顺序被调用的?

楼主#
更多 发布于:2004-04-24 12:26
我的Passthru修改如下:
在DriverEntry中将ReceivePacketHandler=NULL
在PtReceive中将收到的数据组成Packet
在PtReturnPacket中释放分配的memory

大多数情况吓一切OK,这时的调用顺序为:
==>PtReceive
==>PtReturnPacket
<==PtReturnPacket
<==PtReceive
.....


但有时出现Page Fault,这时的调用顺序与上不同:
==>PtReceive
<==PtReceive

==>PtReceive
==>PtReturnPacket
<==PtReturnPacket
<==PtReceive

Page Fault(oe) Fault = 0000

==>PtReturnPacket
<==PtReturnPacket

为什么, 该怎么解决
是不是在PtReturnPacket中出了问题

可惜最多只能给100分
好好学习,天天向上! root60931@gmail.com
youngyt
驱动牛犊
驱动牛犊
  • 注册日期2003-11-23
  • 最后登录2006-12-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-26 11:39
老大,是MPRETURNPACKET吧。
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-26 09:34
不一定是按顺序调用的。
你可以NDIS_SET_PACKET_STATUS(MyPacket, NDIS_STATUS_RESOURCES);
强制上层协议立即处理该包,这样你调用NdisMIndicateReceivePacket
就不会PENDING,这样就可以立即释放掉你的包,而不关PtReturnPacket
的事。
netbutcher
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2004-05-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-24 18:23
在DDK中ReceivePacketHandler
This is a required function。
netbutcher
驱动牛犊
驱动牛犊
  • 注册日期2004-02-20
  • 最后登录2004-05-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-24 18:20
把你的代码给我看看了。有可能是你的内存操作不对。我只能看看你的代码才能知道那里出的毛病。
游客

返回顶部