首页
社区
课程
招聘
[旧帖] [求助]ndis passthru 蓝屏 0.00雪花
发表于: 2015-3-25 15:46 1922

[旧帖] [求助]ndis passthru 蓝屏 0.00雪花

2015-3-25 15:46
1922
能看到该帖的各位好,目前下面这段代码会蓝屏,主要原因是下面这段代码造成的,因为我要保存修改的后的包,然后在PtSendComplete中释放,有没有办法解决这样的问题了?

MyResvd =(PSEND_RSVD)(MyPacket->MiniportReserved);
MyResvd->OriginalPkt = (PNDIS_PACKET)MyPacket;


BOOLEAN SendMyPacket(PNDIS_PACKET Packet, PNDIS_PACKET MyPacket, PADAPT pAdapt, ULONG length, PUCHAR pPacketContent)
{
                NDIS_STATUS   Status;
                PNDIS_BUFFER  MyBuffer;
                PSEND_RSVD        Resvd;
                PSEND_RSVD        MyResvd;
               
                NdisAcquireSpinLock(&pAdapt->Lock);
                if (pAdapt->PTDeviceState > NdisDeviceStateD0)
                {
                                NdisReleaseSpinLock(&pAdapt->Lock);
                                FreePacketBuffer(pPacketContent, length);
                    NdisMSendComplete(ADAPT_MINIPORT_HANDLE(pAdapt),
                                      Packet,
                                      NDIS_STATUS_FAILURE);
                    return FALSE;
                }
                pAdapt->OutstandingSends++;
                NdisReleaseSpinLock(&pAdapt->Lock);
                                                                                          
                NdisAllocatePacket(&Status, &MyPacket, pAdapt->SendPacketPoolHandle);
                if (Status == NDIS_STATUS_SUCCESS)
                {
                           DBGPRINT(("===>MPSendPackets 1.1 <===\n"));                                
                                 NdisAllocateBuffer(&Status, &MyBuffer, pAdapt->SendPacketPoolHandle, pPacketContent, length);
                                 if (Status == NDIS_STATUS_SUCCESS)
                                {
                                                DBGPRINT(("===>MPSendPackets 1.2 <===\n"));
                                                                                
                                                Resvd =(PSEND_RSVD)(MyPacket->ProtocolReserved);
                                                Resvd->OriginalPkt = (PNDIS_PACKET)Packet;
                                                MyResvd =(PSEND_RSVD)(MyPacket->MiniportReserved);
                                                MyResvd->OriginalPkt = (PNDIS_PACKET)MyPacket;
                                               
                                                 DBGPRINT(("===>MPSendPackets 2.1 <===\n"));
                                                NdisChainBufferAtFront(MyPacket, MyBuffer);
                                               
                                                DBGPRINT(("===>MPSendPackets 2.2 <===\n"));
                                                MyPacket->Private.Head->Next = NULL;
                                                MyPacket->Private.Tail = NULL;                                               
                                                                                                               
                                                DBGPRINT(("===>MPSendPackets 2.4 <===\n"));
                //                                //NdisSend(&Status, pAdapt->BindingHandle, MyPacket);
                //                                KdPrint(("Status = %x", Status));
                //        
                //                                //if (Status == NDIS_STATUS_PENDING)
                //                                //{
                //                                //         return TRUE;
                //                                //}
                //                                //else
                //                                //{
                //                                                #ifndef WIN9X
                //                            NdisIMCopySendCompletePerPacketInfo (Packet, MyPacket);
                //                                                #endif
                //                                               
                                                    NdisUnchainBufferAtFront(MyPacket ,&MyBuffer);
                                                    FreePacketBuffer(pPacketContent, length);
                                                    FreeBuffer(MyBuffer);
                                                    NdisFreePacket(MyPacket);
                                   ADAPT_DECR_PENDING_SENDS(pAdapt);
                //                 //NdisMSendComplete(ADAPT_MINIPORT_HANDLE(pAdapt), Packet, Status);
                //                                         
                                                          return TRUE;
                //                                //}
                    }
                    else
                    {
                                    FreePacket(MyPacket);       
                    }
                }
               
                FreePacketBuffer(pPacketContent, length);
                ADAPT_DECR_PENDING_SENDS(pAdapt);
                //NdisMSendComplete(ADAPT_MINIPORT_HANDLE(pAdapt), Packet, Status);

                return FALSE;
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
问题已经解决!
2015-3-25 19:07
0
游客
登录 | 注册 方可回帖
返回
//