Hey guys,
I’ve just enabled verifier.exe for my driver using the following settings:
- Special pool
- Pool tracking
I’m encountering this on boot:
kd> !analyze -v
Connected to Windows 7 7601 x64 target at (Wed Sep 9 11:01:51.425 2015 (UTC + 1:00)), ptr64 TRUE
Loading Kernel Symbols
…
…
Loading User Symbols
Loading unloaded module list
.
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
Unknown bugcheck code (0)
Unknown bugcheck description
Arguments:
Arg1: 0000000000000000
Arg2: 0000000000000000
Arg3: 0000000000000000
Arg4: 0000000000000000
Debugging Details:
**ALOT OF INFO ABOUT MISSING SYMBOLS**
FAULTING_IP:
nt!DbgBreakPoint+0
fffff800`028863d0 cc int 3
ERROR_CODE: (NTSTATUS) 0x80000003 - {EXCEPTION} Breakpoint A breakpoint has been reached.
EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) - One or more arguments are invalid
EXCEPTION_PARAMETER1: 0000000000000000
DEFAULT_BUCKET_ID: WIN7_DRIVER_FAULT
BUGCHECK_STR: 0x0
CURRENT_IRQL: 0
ANALYSIS_VERSION: 6.3.9600.17237 (debuggers(dbg).140716-0327) amd64fre
LAST_CONTROL_TRANSFER: from fffff88000f20dfc to fffff800028863d0
STACK_TEXT:
fffff88002fa3f48 fffff880
00f20dfc : fffffa8001bc6ab0 fffffa80
01bc6ab0 0000000000000000 fffff880
00f82610 : nt!DbgBreakPoint
fffff88002fa3f50 fffff880
03f05bb3 : fffffa8001eea980 0000057f
fe01df78 fffff88002fa4270 fffffa80
01ef99c0 : Wdf01000!imp_WdfControlFinishInitializing+0x158
fffff88002fa3fa0 fffff880
03f051b5 : 0000057ffe115678 fffff880
03f0a178 0000000000000000 00000000
0000000a : MYDriver!WdfControlFinishInitializing+0x33 [c:\program files (x86)\windows kits\8.1\include\wdf\kmdf\1.11\wdfcontrol.h @ 143]
fffff88002fa3fe0 fffff880
00f1799a : 0000057ffe01df78 00000000
00000000 0000000000000000 00000000
00000000 : MYDriver!EvtDeviceAdd+0xb5 [d:\wfpprototype0\MYDriver\driver.c @ 128]
fffff88002fa4170 fffff800
0298f7d5 : fffff88002fa4720 fffff880
02fa46e8 0000000000000000 fffff880
02fa45c4 : Wdf01000!FxDriver::AddDevice+0xc6
fffff88002fa45a0 fffff800
02c74365 : 0000000000000000 fffffa80
01ef99c0 0000000000000002 fffffa80
00d2fd90 : nt!PpvUtilCallAddDevice+0x45
fffff88002fa45e0 fffff800
02c77f91 : fffffa8000d2fd90 fffffa80
00d2fd90 0000000000000000 00000000
00000000 : nt!PnpCallAddDevice+0xd5
fffff88002fa4660 fffff800
02c79522 : fffffa8000cf2d90 fffffa80
00d2fd90 0000000000000002 fffffa80
00cf2bb0 : nt!PipCallDriverAddDevice+0x661
fffff88002fa4810 fffff800
02c799bc : fffff80002a96500 00000000
00000000 0000000000000000 00000000
00000000 : nt!PipProcessDevNodeTree+0x2b2
fffff88002fa4a80 fffff800
02990292 : 0000000100000003 00000000
00000000 0000000032706e50 00000000
00000084 : nt!PiProcessStartSystemDevices+0x7c
fffff88002fa4ad0 fffff800
028981b5 : fffff8000298ff90 fffff800
02b84c01 fffffa8000cd3600 00000000
00000000 : nt!PnpDeviceActionWorker+0x302
fffff88002fa4b70 fffff800
02b278e2 : 0000000000000000 fffffa80
00cd3660 0000000000000080 fffffa80
00cb9040 : nt!ExpWorkerThread+0x111
fffff88002fa4c00 fffff800
0287ff46 : fffff80002a0ee80 fffffa80
00cd3660 fffffa8000cd3b50 00000000
00000000 : nt!PspSystemThreadStartup+0x5a
fffff88002fa4c40 00000000
00000000 : fffff88002fa5000 fffff880
02f9f000 fffff88002fa3ab0 00000000
00000000 : nt!KxStartSystemThread+0x16
STACK_COMMAND: kb
FOLLOWUP_IP:
MYDriver!WdfControlFinishInitializing+33 [c:\program files (x86)\windows kits\8.1\include\wdf\kmdf\1.11\wdfcontrol.h @ 143]
fffff880`03f05bb3 4883c438 add rsp,38h
FAULTING_SOURCE_LINE: c:\program files (x86)\windows kits\8.1\include\wdf\kmdf\1.11\wdfcontrol.h
FAULTING_SOURCE_FILE: c:\program files (x86)\windows kits\8.1\include\wdf\kmdf\1.11\wdfcontrol.h
FAULTING_SOURCE_LINE_NUMBER: 143
FAULTING_SOURCE_CODE:
139: WDFDEVICE Device
140: )
141: {
142: ((PFN_WDFCONTROLFINISHINITIALIZING) WdfFunctions[WdfControlFinishInitializingTableIndex])(WdfDriverGlobals, Device);
143: }
144:
145:
146:
147: #endif // (NTDDI_VERSION >= NTDDI_WIN2K)
148:
SYMBOL_STACK_INDEX: 2
SYMBOL_NAME: MYDriver!WdfControlFinishInitializing+33
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: MYDriver
IMAGE_NAME: MYDriver.sys
DEBUG_FLR_IMAGE_TIMESTAMP: 55ef179e
FAILURE_BUCKET_ID: X64_0x0_VRF_MYDriver!WdfControlFinishInitializing+33
BUCKET_ID: X64_0x0_VRF_MYDriver!WdfControlFinishInitializing+33
ANALYSIS_SOURCE: KM
FAILURE_ID_HASH_STRING: km:x64_0x0_vrf_MYDriver!wdfcontrolfinishinitializing+33
FAILURE_ID_HASH: {ee30e0b8-dc3c-4372-2e9e-7828fabed14b}
Followup: MachineOwner
Initially I suspected that I was passing a NULL device or something into WDFControlFinishInitializing, however I don’t see how that is possible given the code:
Function_class(EVT_WDF_DRIVER_DEVICE_ADD) IRQL_requires_same IRQL_requires_max(PASSIVE_LEVEL)
NTSTATUS EvtDeviceAdd(In WDFDRIVER driver, Inout PWDFDEVICE_INIT pDeviceInit)
{
UNREFERENCED_PARAMETER(driver);
/* We are a network device type */
WdfDeviceInitSetDeviceType(pDeviceInit, FILE_DEVICE_NETWORK);
/* We want an auto generated name */
WdfDeviceInitSetCharacteristics(pDeviceInit, FILE_AUTOGENERATED_DEVICE_NAME, TRUE);
/* Associate some context with the device */
WDF_OBJECT_ATTRIBUTES deviceAttribs;
WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&deviceAttribs, DEVICE_CONTEXT);
WDFDEVICE device;
NTSTATUS status = WdfDeviceCreate(&pDeviceInit, &deviceAttribs, &device);
if (NT_SUCCESS(status))
{
status = WdfDeviceCreateDeviceInterface(device, &DEVICE_AGENT_DRIVER_INTERFACE, NULL);
if (NT_SUCCESS(status))
{
/* Inform driver finished initialising. No IRP’s will be sent to this device unless this is called. */
WdfControlFinishInitializing(device);
Any ideas would be appreciated
Jason