Hi!
I’m here again (last time my driver was ok on my vmware virtual machine
but not on my notebook) with my PtReceive function which gives me a blue
screen when I call NdisAllocateBuffer.
I deal with the case when NdisGetReceivedPacket returns with a NULL
Packet and LookAheadBufferSize == PacketSize. Here is my code:
Packet = NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext);
if (Packet == NULL)
{
DbgPrint(“LookAheadBufferSize: %d\n”, LookAheadBufferSize);
DbgPrint(“PacketSize: %d\n”, PacketSize);
DbgPrint(“HeaderBufferSize: %d\n”, HeaderBufferSize);
if (LookAheadBufferSize < PacketSize)
{
DbgPrint(“<== PtReceive: LookAheadBufferSize < PacketSize\n”);
return NDIS_STATUS_FAILURE;
}
else
if (LookAheadBufferSize == PacketSize)
{
NdisAllocateMemoryWithTag(&dummyVA, HeaderBufferSize +
PacketSize, ‘ymuD’);
NdisMoveMemory(&dummyVA, HeaderBuffer, HeaderBufferSize);
NdisMoveMemory(&dummyVA + HeaderBufferSize, LookAheadBuffer,
LookAheadBufferSize);
NdisAllocateBuffer(&Status, &dummyBuffer,
pAdapt->BufferPoolHandle, dummyVA, HeaderBufferSize + LookAheadBufferSize);
if (Status != NDIS_STATUS_SUCCESS)
{
NdisFreeMemory(dummyVA, HeaderBufferSize + PacketSize, 0);
return NDIS_STATUS_FAILURE;
}
NdisDprAllocatePacket(&Status, &Packet,
pAdapt->RecvPacketPoolHandle);
if (Status != NDIS_STATUS_SUCCESS)
{
NdisFreeMemory(dummyVA, HeaderBufferSize + PacketSize, 0);
NdisFreeBuffer(dummyBuffer);
return NDIS_STATUS_FAILURE;
}
NdisChainBufferAtFront(Packet, dummyBuffer);
}
}
From WinDbg:
READ_ADDRESS: 12008426
CURRENT_IRQL: 2
FAULTING_IP:
passthru!PtReceive+17c [c:.…\protocol.c @ 1295]
f0dfefbc 8b4230 mov eax,[edx+0x30]
DEFAULT_BUCKET_ID: DRIVER_FAULT
BUGCHECK_STR: 0xD1
LAST_CONTROL_TRANSFER: from f0dfefbc to 804e187f
STACK_TEXT:
f9687d8c f0dfefbc badb0d00 120083f6 ff93d1b0 nt!KiTrap0E+0x233
f9687f28 f908ebd6 fe3f7e30 8130e468 f05e00cc passthru!PtReceive+0x17c
[c:.…\protocol.c @ 1295]
f9687f5c 64610400 04016c73 67b21000 bf199377
NDIS!EthFilterDprIndicateReceive+0xe0
WARNING: Frame IP not in any known module. Following frames may be wrong.
f9687f8c f9530802 8130e468 0000ffff 8130e468 0x64610400
f9687f9c f9530889 8130e468 804e4a15 ff936ad0 RTL8139!RTFast_RcvDpc+0x50
f9687fb4 f9087712 0030e468 ffad37b8 ffad3a1c
RTL8139!RTFast_HandleInterrupt+0x2f
f9687fd0 804dbbd4 8130e4d4 8130e4c0 00000000 NDIS!ndisMDpc+0xff
f9687ff4 804db89e f0fb4d54 00000000 00000000 nt!KiRetireDpcList+0x46
f9687ff8 f0fb4d54 00000000 00000000 00000000 nt!KiDispatchInterrupt+0x2a
804db89e 00000000 00000009 bb835675 00000128 0xf0fb4d54
STACK_COMMAND: .bugcheck ; kb
FOLLOWUP_IP:
passthru!PtReceive+17c [c:.…\protocol.c @ 1295]
f0dfefbc 8b4230 mov eax,[edx+0x30]
SYMBOL_STACK_INDEX: 1
FOLLOWUP_NAME: MachineOwner
SYMBOL_NAME: passthru!PtReceive+17c
MODULE_NAME: passthru
IMAGE_NAME: passthru.sys
DEBUG_FLR_IMAGE_TIMESTAMP: 44154218
FAILURE_BUCKET_ID: 0xD1_passthru!PtReceive+17c
BUCKET_ID: 0xD1_passthru!PtReceive+17c
Thanks for the help again.
Baki