snowstone
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2005-09-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1297回复:4

NdisMIndicateReceivePacket时死掉

楼主#
更多 发布于:2002-10-23 17:28
处理NdisGetReceivedPacket为NULL,用了HuYuguang 代码
但在NdisMIndicateReceivePacket时死掉。
附:
{
Status = NdisAllocateMemory(
&pPacketContent,2000,0,HighestAcceptableAddress);
if (Status != NDIS_STATUS_SUCCESS )
{
DbgPrint(\"ptreceive :ndisallocatememory failed\\n\");
return NDIS_STATUS_NOT_ACCEPTED ;
}
if(pPacketContent == NULL)
{
DbgPrint(\"prreceive:pPacketContent == NULL\\n\");
return NDIS_STATUS_NOT_ACCEPTED ;
}
RtlZeroMemory(pPacketContent, 2000 );
RtlCopyMemory(pPacketContent,HeaderBuffer,HeaderBufferSize);
RtlCopyMemory(pPacketContent+HeaderBufferSize,LookAheadBuffer,LookAheadBufferSize);
PacketLen = PacketSize+HeaderBufferSize;
// DbgPrint(\"Packet Size=%d\\n\",PacketLen);
result = RecvProcess( pAdapt,pPacketContent,&PacketLen);
if( result == PACKET_REFUSE )
{
DbgPrint(\"ptreceive :packet_refuse\\n\");
NdisFreeMemory(pPacketContent,2000,0);
return NDIS_STATUS_NOT_ACCEPTED;
}
NdisDprAllocatePacket(&Status,
&MyPacket,
pAdapt->RecvPacketPoolHandle);
if(Status == NDIS_STATUS_SUCCESS)
{
NdisAllocateBuffer(&Status,&PacketBuffer,pAdapt->RecvBufferPoolHandle,pPacketContent,PacketLen);
NdisChainBufferAtFront( MyPacket, PacketBuffer );
MyPacket->Private.Head->Next=NULL;
MyPacket->Private.Tail=NULL;
Resvd =(PRSVD)(MyPacket->MiniportReserved);
Resvd->OriginalPkt = NULL;
NDIS_SET_PACKET_HEADER_SIZE( MyPacket, HeaderBufferSize );
NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1); // 这个函数调用之后ndis就只能调用protocol的ptrecievepacket了。
if ( NDIS_GET_PACKET_STATUS( MyPacket ) != NDIS_STATUS_PENDING )
{
NdisFreeBuffer(PacketBuffer);
NdisFreeMemory(pPacketContent,2000,0);
NdisDprFreePacket(MyPacket);
}
break;
}
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
沙发#
发布于:2002-10-23 19:46
你又找冲了,程序有问题,你别把别人拉上啊。
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-10-23 22:17
你用的huyuguang的那个代码?????

这个站上的是98下面的吧
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
kaput
驱动中牛
驱动中牛
  • 注册日期2002-06-26
  • 最后登录2004-08-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-10-24 10:17
你在这行代码
NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1);
前加上语句:
NDIS_SET_PACKET_STATUS(MyPacket, NDIS_STATUS_RESOURCES);
就可以了
WIN2K下通过


[编辑 -  10/24/02 by  tx_zcy]
天下风云出我辈 一入江湖岁月催 鸿图霸业谈笑中 不胜人生一场醉......
snowstone
驱动牛犊
驱动牛犊
  • 注册日期2002-03-15
  • 最后登录2005-09-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-10-24 13:59
多谢,是由于MPReturnPackets处理
我加了NDIS_SET_PACKET_STATUS(MyPacket, NDIS_STATUS_RESOURCES);
虽然程序可以跑了,但是好象上层无法收到该包,
不知为何?


TO fracker:
我不是拉上谁,而是HU的代码比较多人了解了毕竟。这个问题以前讨论过程中HU给出的代码,感谢还来不及,只为解惑,无它
游客

返回顶部