阅读:2870回复:5
在ptreceive中调用NdisMIndicateReceivePacket时蓝屏,向各位大侠求助!
我在passthru的ptreceive函数中首先把数据包中的内容拷贝到自己分配的缓冲区中,然后重新组包,调用NdisMIndicateReceivePacket
函数指示上层接收。 但一调用NdisMIndicateReceivePacket就蓝屏重起,我一连几天都搞不定。那位大侠能帮小第一把,定重分酬谢!!!! |
|
沙发#
发布于:2004-04-23 13:17
会不会是你使用的那块内存释放的问题?
|
|
板凳#
发布于:2004-04-23 15:40
贴出你的代码来瞧瞧
|
|
地板#
发布于:2004-04-25 22:12
是不是你在MpReturnPacket中释放内存时有错误
|
|
|
地下室#
发布于:2004-04-26 11:46
组的包有问题,贴完整代码上来。
|
|
5楼#
发布于:2010-01-25 21:44
// 构造一个封包
NdisAllocatePacket(&Status, &MyPacket, pAdapt->RecvPacketPoolHandle); if(Status != NDIS_STATUS_SUCCESS) { DbgPrint("NdisAllocatePacket Status=0x%x\n", Status); return Status; } // 分配缓冲区 NdisAllocateMemoryWithTag(&Mypacketbuf, size, TAG); RtlZeroMemory(Mypacketbuf, size); NdisMoveMemory(Mypacketbuf, pPacketContent, size); //这个是长度 //分配缓冲区描述符 NdisAllocateBuffer(&Status, &MyPacketcache, pAdapt->RecvPacketPoolHandle, Mypacketbuf, size); if(Status != NDIS_STATUS_SUCCESS) { DbgPrint("NdisAllocateBuffer Status=0x%x\n", Status); NdisFreeMemory(Mypacketbuf, size, TAG); NdisFreePacket(MyPacket); return Status; } //把数据加到缓冲区里面 NdisChainBufferAtFront(MyPacket, MyPacketcache); //这个必须设置 NDIS_SET_PACKET_STATUS(MyPacket, NDIS_STATUS_RESOURCES); RecvRsvd = (PRSVD)(MyPacket->ProtocolReserved); RecvRsvd->OriginalPkt = MyPacket; RecvRsvd->IsPrivate = 1; //给自己的包一个标志 NdisMIndicateReceivePacket(pAdapt->MiniportHandle, &MyPacket, 1); |
|
|