阅读:1243回复:4
PtReceive 与 PtReturnPacket 是不是严格按照先后顺序被调用的?
我的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分 |
|
|
沙发#
发布于:2004-04-26 11:39
老大,是MPRETURNPACKET吧。
|
|
板凳#
发布于:2004-04-26 09:34
不一定是按顺序调用的。
你可以NDIS_SET_PACKET_STATUS(MyPacket, NDIS_STATUS_RESOURCES); 强制上层协议立即处理该包,这样你调用NdisMIndicateReceivePacket 就不会PENDING,这样就可以立即释放掉你的包,而不关PtReturnPacket 的事。 |
|
地板#
发布于:2004-04-24 18:23
在DDK中ReceivePacketHandler
This is a required function。 |
|
地下室#
发布于:2004-04-24 18:20
把你的代码给我看看了。有可能是你的内存操作不对。我只能看看你的代码才能知道那里出的毛病。
|
|