diff --git a/reactos/drivers/network/ndis/ndis/protocol.c b/reactos/drivers/network/ndis/ndis/protocol.c index 4703e5ecf03..dd56c40bf95 100644 --- a/reactos/drivers/network/ndis/ndis/protocol.c +++ b/reactos/drivers/network/ndis/ndis/protocol.c @@ -279,7 +279,8 @@ ProIndicatePacket( NDIS_DbgPrint(MAX_TRACE, ("acquiring miniport block lock\n")); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql); { - BufferedLength = CopyPacketToBuffer(LookaheadBuffer, Packet, 0, Adapter->NdisMiniportBlock.CurrentLookahead); + BufferedLength = CopyPacketToBuffer(LookaheadBuffer, Packet, 0, Adapter->NdisMiniportBlock.CurrentLookahead + + Adapter->MediumHeaderSize); Adapter->NdisMiniportBlock.IndicatedPacket[KeGetCurrentProcessorNumber()] = Packet; } KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql); @@ -298,6 +299,12 @@ ProIndicatePacket( ExFreePool(LookaheadBuffer); + KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql); + { + Adapter->NdisMiniportBlock.IndicatedPacket[KeGetCurrentProcessorNumber()] = NULL; + } + KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql); + return NDIS_STATUS_SUCCESS; } @@ -649,12 +656,12 @@ ProTransferData( /* FIXME: Interrupts must be disabled for adapter */ /* XXX sd - why is that true? */ - if (Packet == Adapter->NdisMiniportBlock.IndicatedPacket[KeGetCurrentProcessorNumber()]) { + if (Adapter->NdisMiniportBlock.IndicatedPacket[KeGetCurrentProcessorNumber()]) { NDIS_DbgPrint(MAX_TRACE, ("LoopPacket\n")); /* NDIS is responsible for looping this packet */ NdisCopyFromPacketToPacket(Packet, - ByteOffset, - BytesToTransfer, + ByteOffset + Adapter->MediumHeaderSize, + BytesToTransfer + Adapter->MediumHeaderSize, Adapter->NdisMiniportBlock.IndicatedPacket[KeGetCurrentProcessorNumber()], 0, BytesTransferred);