能看到该帖的各位好,目前下面这段代码会蓝屏,主要原因是下面这段代码造成的,因为我要保存修改的后的包,然后在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;
}
[课程]FART 脱壳王!加量不加价!FART作者讲授!