I’m sending packets via NdisFSendNetBufferLists. Everything works great for wired adapters but if I try to send via the wireless adapter the system crashes with KMODE_EXCEPTION_NOT_HANDLED. The actual crashing instruction is so far removed from the Ndis call that I have no clear idea what it may be trying to reference. Before disassembling all of these calls, hopefully someone can point out issues with my code or things to check.
Here is the code that setups the Ndis call (shortened for posting so ignore lack of status checks).
NTSTATUS status = STATUS_SUCCESS;
PMDL pMdl = NULL;
NET_BUFFER_LIST* nbl = NULL;
NET_BUFFER_LIST_POOL_PARAMETERS nblpp;
NDIS_HANDLE nh = NULL;
NdisZeroMemory(&nblpp, sizeof(NET_BUFFER_LIST_POOL_PARAMETERS));
nblpp.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
nblpp.Header.Revision = NET_BUFFER_LIST_POOL_PARAMETERS_REVISION_1;
nblpp.Header.Size = sizeof(NET_BUFFER_LIST_POOL_PARAMETERS);
nblpp.ProtocolId = NDIS_PROTOCOL_ID_DEFAULT;
nblpp.fAllocateNetBuffer = TRUE;
nblpp.PoolTag = TAG_NDIS_POOL;
nh = NdisAllocateNetBufferListPool(gFilterDriverHandle, &nblpp);
pMdl = NdisAllocateMdl(gFilterDriverHandle, buffer, wpl);
nbl = NdisAllocateNetBufferAndNetBufferList(nh, 0, 0, pMdl, 0, wpl);
status = NdisAllocateNetBufferListContext(nbl, sizeof(SEND_CONTEXT), 0, TAG_NDIS_NBL);
((PSEND_CONTEXT)NET_BUFFER_LIST_CONTEXT_DATA_START(nbl))->buffer = buffer;
((PSEND_CONTEXT)NET_BUFFER_LIST_CONTEXT_DATA_START(nbl))->nh = nh;
nbl->SourceHandle = pFilter->FilterHandle;
NET_BUFFER_LIST_INFO(nbl, TcpIpChecksumNetBufferListInfo) = 0;
NdisFSendNetBufferLists(pFilter->FilterHandle, nbl, NDIS_DEFAULT_PORT_NUMBER, NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK);
3: kd> !analyze -v
-
*
-
Bugcheck Analysis *
-
*
KMODE_EXCEPTION_NOT_HANDLED (1e)
This is a very common bugcheck. Usually the exception address pinpoints
the driver/function that caused the problem. Always note this address
as well as the link date of the driver/image that contains this address.
Arguments:
Arg1: ffffffffc0000005, The exception code that was not handled
Arg2: fffff80017011e45, The address that the exception occurred at
Arg3: fffff88a675aeb78, Parameter 0 of the exception
Arg4: fffff88a675ae3b0, Parameter 1 of the exception
Debugging Details:
DUMP_TYPE: 0
BUGCHECK_P1: ffffffffc0000005
BUGCHECK_P2: fffff80017011e45
BUGCHECK_P3: fffff88a675aeb78
BUGCHECK_P4: fffff88a675ae3b0
WRITE_ADDRESS: fffff88a675ae3b0
EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - The instruction at 0x%p referenced memory at 0x%p. The memory could not be %s.
FAULTING_IP:
wdiwifi!CTxMgr::InitializeTxWfcFrame+3e1
fffff800`17011e45 0fb74804 movzx ecx,word ptr [rax+4]
EXCEPTION_PARAMETER1: fffff88a675aeb78
EXCEPTION_PARAMETER2: fffff88a675ae3b0
BUGCHECK_STR: 0x1E_c0000005
EXCEPTION_RECORD: 0000000000001000 – (.exr 0x1000)
Cannot read Exception record @ 0000000000001000
TRAP_FRAME: ffff800000000000 – (.trap 0xffff800000000000)
Unable to read trap frame at ffff8000`00000000
LAST_CONTROL_TRANSFER: from fffff8000c70ee6f to fffff8000c5f5c50
STACK_TEXT:
fffff88a675adb38 fffff800
0c70ee6f : 000000000000001e ffffffff
c0000005 fffff80017011e45 fffff88a
675aeb78 : nt!KeBugCheckEx
fffff88a675adb40 fffff800
0c611d86 : fffff88a675ae3b0 fffff800
0c5038a5 fffff88a675aedb0 fffff800
17011e45 : nt!KiFatalFilter+0x1f
fffff88a675adb80 fffff800
0c5cc0df : fffff80000000002 fffff800
0c2d8e34 fffff88a675a9000 fffff88a
675b0000 : nt!KeExpandKernelStackAndCalloutInternal$filt$0+0x16
fffff88a675adbc0 fffff800
0c5feb0f : fffff8000c2d8e34 fffff88a
675ae1a0 fffff8000c5cc040 00000000
00000000 : nt!_C_specific_handler+0x9f
fffff88a675adc30 fffff800
0c52bff7 : fffff88a675ae1a0 00000000
00000000 fffff88a675af340 fffff800
0c554518 : nt!RtlpExecuteHandlerForException+0xf
fffff88a675adc60 fffff800
0c52abe6 : fffff88a675aeb78 fffff88a
675ae8b0 fffff88a675aeb78 ffffe604
e0555cb0 : nt!RtlDispatchException+0x297
fffff88a675ae380 fffff800
0c607cac : 0000000000001000 fffff88a
675aec20 ffff800000000000 00000000
00000000 : nt!KiDispatchException+0x186
fffff88a675aea40 fffff800
0c603e43 : 0000000000000a71 00000000
00000000 0000000000001001 00000000
00000fff : nt!KiExceptionDispatch+0x12c
fffff88a675aec20 fffff800
17011e45 : 0000000000000001 00000000
00000018 ffffe604df03bda0 ffffe604
e0555cb0 : nt!KiPageFault+0x443
fffff88a675aedb0 fffff800
17061e74 : 0000000000000000 00000000
00000000 ffffe604dd7d0350 00000000
00000000 : wdiwifi!CTxMgr::InitializeTxWfcFrame+0x3e1
fffff88a675aee70 fffff800
17020213 : 0000000000000000 00000000
00000000 ffffe604d9c11000 fffff800
08493400 : wdiwifi!CPort::SendNetBufferLists+0x384
fffff88a675aeef0 fffff800
0fcc50af : 0000000000000000 ffffe604
d6b9c1a0 0000000000000000 ffffe604
d6c3ce02 : wdiwifi!MPWrapperSendNetBufferLists+0xf3
fffff88a675aef50 fffff800
0fcc4f9e : 0000019000000001 ffffe604
df03bda0 ffffa48200000000 00000000
00000000 : ndis!ndisMSendNBLToMiniportInternal+0xff
fffff88a675af020 fffff800
0fcc553c : 0000000000000000 00000000
00000000 0000000000000000 00000000
ffffffff : ndis!ndisMSendNBLToMiniport+0xe
fffff88a675af060 fffff800
0fcc5afb : ffffe604df03bda0 fffff88a
675af100 0000000000000000 00000000
00000082 : ndis!ndisFilterSendNetBufferLists+0xec
fffff88a675af140 fffff800
10281175 : ffffe604df03bd01 00000000
00000001 ffffe60400000000 00000000
000000a2 : ndis!NdisFSendNetBufferLists+0x5b
fffff88a675af1f0 fffff800
0fcc58e9 : 000df048d3a0ff01 ffffe604
df03bda0 ffffe604dd579a60 00000000
00000000 : wfplwfs!LwfLowerSendNetBufferLists+0x165
fffff88a675af2a0 fffff800
0fcd83be : ffffe604dcfef080 fffff88a
675af469 fffff88a675af450 00000000
00000000 : ndis!ndisCallSendHandler+0x59
fffff88a675af2f0 fffff800
0c554518 : fffff88a675af469 00000000
00000000 0000000000000000 ffffe604
dd4d0a20 : ndis!ndisDataPathExpandStackCallback+0x3e
fffff88a675af340 fffff800
0c55448d : fffff8000fcd8380 fffff88a
675af450 0000000000000002 00000000
00000030 : nt!KeExpandKernelStackAndCalloutInternal+0x78
fffff88a675af3b0 fffff800
0fcc55ca : 00000000000003b5 00000000
00000000 0000000000001001 00000000
00000fff : nt!KeExpandKernelStackAndCalloutEx+0x1d
fffff88a675af3f0 fffff800
0fcc5afb : ffffe604df03bda0 00000000
00000000 0000000000000000 fffff800
0cbb1094 : ndis!ndisFilterSendNetBufferLists+0x17a
fffff88a675af4d0 fffff800
08bc3a3d : ffffe604df03bd00 ffffe604
df9f8290 ffffe60400000000 00000000
00000000 : ndis!NdisFSendNetBufferLists+0x5b
fffff88a675af580 fffff800
08bc3752 : 00000000c0000001 00000000
00000000 0000000000000004 00000000
c0000001 : MYDRIVER+0x3a3d
fffff88a675af620 fffff800
08bc1a6d : 00000000c000000d ffffe604
e08f83a0 000000000000001f fffff88a
675af6d8 : MYDRIVER+0x3752
fffff88a675af660 fffff800
0fcc7d40 : ffffe604ddbe0cc0 fffff800
0fda3048 ffffe604ddbe0b70 ffffe604
e08f82d0 : MYDRIVER+0x1a6d
fffff88a675af6b0 fffff800
0c452f55 : ffffe604e08f82d0 00000000
00000002 0000000000000001 ffffe604
e210a200 : ndis!ndisDummyIrpHandler+0x100
fffff88a675af700 fffff800
0c7fd898 : fffff88a675afa80 ffffe604
e08f82d0 0000000000000001 ffffe604
df1b2080 : nt!IofCallDriver+0x55
fffff88a675af740 fffff800
0c7fd165 : 00000000cf81001c fffff88a
675afa80 0000000000000005 fffff88a
675afa80 : nt!IopSynchronousServiceTail+0x1a8
fffff88a675af7e0 fffff800
0c7fcb66 : 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 : nt!IopXxxControlFile+0x5e5
fffff88a675af920 fffff800
0c6075b5 : fffff88a675afa80 fffff800
0c82e0f5 0000000000000000 0000009f
9c53d638 : nt!NtDeviceIoControlFile+0x56
fffff88a675af990 00007ffc
d9acccf4 : 00007ffcd758396b 00000000
00000000 000000020000000c 00000000
00000101 : nt!KiSystemServiceCopyEnd+0x25
0000009f9c53e468 00007ffc
d758396b : 0000000000000000 00000002
0000000c 0000000000000101 00001e35
df3a503c : ntdll!NtDeviceIoControlFile+0x14
0000009f9c53e470 00007ffc
d7ca5611 : 00000000cf81001c 00000000
00000053 0000009f9c53e500 00000209
00000000 : KERNELBASE!DeviceIoControl+0x6b
0000009f9c53e4e0 00007ffc
b3011fd3 : 0000000000000053 00000000
00000000 0000000000000000 00000000
00000b34 : KERNEL32!DeviceIoControlImplementation+0x81
0000009f9c53e530 00000000
00000053 : 0000000000000000 00000000
00000000 0000000000000b34 00000000
00000000 : MYDLL+0xe3