I am rewriting a WDM driver to use KMDF. My driver forwards most requests to
the system supplied serial driver used as lower filter driver. The requests
are forwarded using WdfRequestSend with the
WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET option. This completes successfully,
but after my event handler exits an access violation (c0000005) occurs at
Wdf01000!FxIFR+0x111. No doubt I am doing something wrong, but I don't see
how to find out what. Any ideas?
The call stack at various points and the WDF log are below:
In serial:
00 822c8048 82079738 f6453b38 serial!SerialIoControl (FPO: [Non-Fpo]) (CONV:
stdcall) [q:\wrkddk\serial\ioctl.c @ 597]
01 822c2048 822c2134 8206f490 nt!IopfCallDriver+0x51 (FPO: [0,0,0])
02 822c7968 8206f490 822c3ab8 Wdf01000!imp_WdfRequestSend+0x23a (FPO:
[Non-Fpo])
03 7df90b68 7dd3c540 f6453b38 Amcc5933!WdfRequestSend+0x1d (FPO: [Non-Fpo])
(CONV: stdcall) [q:\winddk\6000\inc\wdf\kmdf\10\wdfrequest.h @ 569]
04 7dd3dfb0 7df90b68 00000004 Amcc5933!AmccPciEvtDeviceControl+0xf4 (FPO:
[Non-Fpo]) (CONV: stdcall) [d:\dev\sikmdf\amcc5933\sys\transfer.c @ 158]
05 7dd3dfb0 7df90b68 00000004 Wdf01000!FxIoQueueIoDeviceControl::Invoke+0x30
(FPO: [Non-Fpo])
06 7df90b68 8206f490 822c2048
Wdf01000!FxIoQueue::DispatchRequestToDriver+0x445 (FPO: [Non-Fpo])
07 822c2000 f96ab188 822c2048 Wdf01000!FxIoQueue::DispatchEvents+0x485 (FPO:
[Non-Fpo])
08 00000000 822c3ba8 82079738 Wdf01000!FxIoQueue::QueueRequest+0x237 (FPO:
[Non-Fpo])
09 82079738 f6453c58 80a21a49 Wdf01000!FxPkgIo::Dispatch+0x377 (FPO:
[Non-Fpo])
0a 822c3ba8 82079738 82143230 Wdf01000!FxDevice::Dispatch+0x7f (FPO:
[Non-Fpo])
0b 820797f0 82017e08 82079738 nt!IopfCallDriver+0x51 (FPO: [0,0,0])
0c 822c3ba8 82079738 82017e08 nt!IopSynchronousServiceTail+0x94 (FPO:
[Non-Fpo])
0d 00000770 0000076c 00000000 nt!IopXxxControlFile+0x64f (FPO: [Non-Fpo])
0e 00000770 0000076c 00000000 nt!NtDeviceIoControlFile+0x2a (FPO: [Non-Fpo])
0f 00000770 0000076c 00000000 nt!KiFastCallEntry+0x158 (FPO: [0,3] TrapFrame
@ f6453d64)
10 7c865aae 00000770 0000076c ntdll!KiFastSystemCallRet (FPO: [0,0,0])
11 00000770 0000076c 00000000 ntdll!ZwDeviceIoControlFile+0xc (FPO: [10,0,0])
12 00000770 0012ff30 00000000 kernel32!GetCommState+0x5a (FPO: [Non-Fpo])
After return from serial:
00 7dd3dfb0 7df90b68 00000004 Amcc5933!AmccPciEvtDeviceControl+0xf4 (FPO:
[Non-Fpo]) (CONV: stdcall) [d:\dev\sikmdf\amcc5933\sys\transfer.c @ 158]
01 7dd3dfb0 7df90b68 00000004 Wdf01000!FxIoQueueIoDeviceControl::Invoke+0x30
(FPO: [Non-Fpo])
02 7df90b68 8206f490 822c2048
Wdf01000!FxIoQueue::DispatchRequestToDriver+0x445 (FPO: [Non-Fpo])
03 822c2000 f96ab188 822c2048 Wdf01000!FxIoQueue::DispatchEvents+0x485 (FPO:
[Non-Fpo])
04 00000000 822c3ba8 82079738 Wdf01000!FxIoQueue::QueueRequest+0x237 (FPO:
[Non-Fpo])
05 82079738 f6453c58 80a21a49 Wdf01000!FxPkgIo::Dispatch+0x377 (FPO:
[Non-Fpo])
06 822c3ba8 82079738 82143230 Wdf01000!FxDevice::Dispatch+0x7f (FPO:
[Non-Fpo])
07 820797f0 82017e08 82079738 nt!IopfCallDriver+0x51 (FPO: [0,0,0])
08 822c3ba8 82079738 82017e08 nt!IopSynchronousServiceTail+0x94 (FPO:
[Non-Fpo])
09 00000770 0000076c 00000000 nt!IopXxxControlFile+0x64f (FPO: [Non-Fpo])
0a 00000770 0000076c 00000000 nt!NtDeviceIoControlFile+0x2a (FPO: [Non-Fpo])
0b 00000770 0000076c 00000000 nt!KiFastCallEntry+0x158 (FPO: [0,3] TrapFrame
@ f6453d64)
0c 7c865aae 00000770 0000076c ntdll!KiFastSystemCallRet (FPO: [0,0,0])
0d 00000770 0000076c 00000000 ntdll!ZwDeviceIoControlFile+0xc (FPO: [10,0,0])
0e 00000770 0012ff30 00000000 kernel32!GetCommState+0x5a (FPO: [Non-Fpo])
At access violation:
00 0de00e00 00000005 0000000d Wdf01000!FxIFR+0x111 (FPO: [Non-Fpo])
01 822c78b0 00000005 0000000d Wdf01000!WPP_IFR_SF_q+0x21 (FPO: [Non-Fpo])
02 7df90b68 8206f490 822c2048
Wdf01000!FxIoQueue::DispatchRequestToDriver+0x664 (FPO: [Non-Fpo])
03 822c2000 f96ab188 822c2048 Wdf01000!FxIoQueue::DispatchEvents+0x485 (FPO:
[Non-Fpo])
04 00000000 822c3ba8 82079738 Wdf01000!FxIoQueue::QueueRequest+0x237 (FPO:
[Non-Fpo])
05 82079738 f6453c58 80a21a49 Wdf01000!FxPkgIo::Dispatch+0x377 (FPO:
[Non-Fpo])
06 822c3ba8 82079738 82143230 Wdf01000!FxDevice::Dispatch+0x7f (FPO:
[Non-Fpo])
07 820797f0 82017e08 82079738 nt!IopfCallDriver+0x51 (FPO: [0,0,0])
08 822c3ba8 82079738 82017e08 nt!IopSynchronousServiceTail+0x94 (FPO:
[Non-Fpo])
09 00000770 0000076c 00000000 nt!IopXxxControlFile+0x64f (FPO: [Non-Fpo])
0a 00000770 0000076c 00000000 nt!NtDeviceIoControlFile+0x2a (FPO: [Non-Fpo])
0b 00000770 0000076c 00000000 nt!KiFastCallEntry+0x158 (FPO: [0,3] TrapFrame
@ f6453d64)
0c 7c865aae 00000770 0000076c ntdll!KiFastSystemCallRet (FPO: [0,0,0])
0d 00000770 0000076c 00000000 ntdll!ZwDeviceIoControlFile+0xc (FPO: [10,0,0])
0e 00000770 0012ff30 00000000 kernel32!GetCommState+0x5a (FPO: [Non-Fpo])
WDF log:
86: FxPkgIo::Dispatch - WDFDEVICE 0x7DD38E38 !devobj 0x822C3BA8
0x0000000e(IRP_MJ_DEVICE_CONTROL), IRP_MN 0, IRP 0x82079738
87: FxDevice::AllocateRequestMemory - Allocating FxRequest* 8206F490,
WDFREQUEST 7DF90B68
88: FxIoQueue::QueueRequest - Queuing WDFREQUEST 0x7DF90B68 on WDFQUEUE
0x7DD3DFB0
89: FxIoQueue::DispatchEvents - Thread 82143020 is processing WDFQUEUE
0x7DD3DFB0
90: FxIoQueue::DispatchRequestToDriver - Calling driver EvtIoDeviceControl
for WDFREQUEST 0x7DF90B68
91: imp_WdfRequestGetParameters - Enter: Request 7DF90B68, Parameters F6453B48
92: imp_WdfRequestFormatRequestUsingCurrentType - Enter: WDFREQUEST 7DF90B68
93: FxIoQueue::RequestCompletedCallback - Enter: WDFQUEUE 0x7DD3DFB0,
WDFREQUEST 0x7DF90B68
Unknown( 54): GUID=00000000-0000-0000-0000-000000000000 (No Format
Information found).
---- end of log ----