Windows System Software -- Consulting, Training, Development -- Unique Expertise, Guaranteed Results

Sept/Oct 2019 Issue of The NT Insider available

Download PDF here:

It’s a particularly BIG issue, too: 40 pages of technical goodness, ranging from WDF to Minifilters. Check it out.
Before Posting...
Please check out the Community Guidelines in the Announcements and Administration Category.

KMDF Verifier fails call to WdfDriverCreate() with 0xC000009A

Joe_MoriartyJoe_Moriarty Member Posts: 14

I know others have run into this problem as well. But, I've read over previous discussions on this topic and I still cannot determine what the fix for my issue is. So, I thought I would ask the experts here. The following code works during DriverEntry of my WDF driver with no problems.

WDF_OBJECT_ATTRIBUTES LDTPITDrvAttributes, LDTPITRegistryPathAttributes;

#if DBG
    // Initialize DbgPrintEx stuff for LDTPIT driver
    sprintf_s(DebugPrintHeader, sizeof(DebugPrintHeader), "%s ", VER_INTERNALNAME_STR);
    strcat_s(DebugPrintHeader, sizeof(DebugPrintHeader), "(%x) ");
#endif /* DBG */

// Initialize the driver configuration structure
LDTPITDrvConfig.EvtDriverUnload = LDTPITDriverUnload;
LDTPITDrvAttributes.ExecutionLevel = WdfExecutionLevelPassive;
LDTPITDrvAttributes.EvtCleanupCallback = LDTPITDriverCleanupCallback;

// Finally, create the driver object
Status = WdfDriverCreate(pDriverObject, pRegistryPath, &LDTPITDrvAttributes, &LDTPITDrvConfig, 
if (!NT_SUCCESS(Status))
    goto end;

But, when KMDF Verifier is enabled. I get the following Status. Status = 0xC000009A

I've enabled "Verbose Logging" on my driver and the following information shown is immediately after the call to WdfDriverCreate() is executed.

!wdfkd.wdflogdump ldtpit.sys
<---------------------------------------------- Verbose Information ----------------------------------------------------->
Trace searchpath is:

Trace format prefix is: %7!u!: %!FUNC! -
Trying to extract TMF information from - c:\users\joe moriarty\symbols\Wdf01000.pdb\11E877268FAE7196F0AA5A416B1A36E01\Wdf01000.pdb
Gather log: Please wait, this may take a moment (reading 4024 bytes).
% read so far ... 10, 100
There are 10 log entries
--- start of log ---
1: FxIFRStart - FxIFR logging started
2: FxInitialize - Initialize globals for \REGISTRY\MACHINE\SYSTEM\ControlSet001\Services\LDTPIT
3: FxPoolInitialize - Initializing Pool 0xFFFFE48AD89AA138, Tracking 1
4: FxPoolAllocator - Allocation Fail Count exceeded
5: FxVerifierLock::AllocateThreadTable - No Memory to allocate thread table
6: LockVerifierSection - Increment Lock counter (1) for Verifier Paged Memory from \REGISTRY\MACHINE\SYSTEM\ControlSet001\Services\LDTPIT from driver globals FFFFE48AD89AA0D0
7: FxPoolAllocator - Allocation Fail Count exceeded
8: FxPoolDestroy - Destroying Pool 0xFFFFE48AD89AA138
9: FxPoolDump - FxPoolDump: NonPagedBytes 0, PagedBytes 0, NonPagedAllocations 0, PagedAllocations 0,PeakNonPagedBytes 0, PeakPagedBytes 0,FxPoolDump: PeakNonPagedAllocations 0, PeakPagedAllocations 0
10: UnlockVerifierSection - Decrement UnLock counter (0) for Verifier Paged Memory with driver globals FFFFE48AD89AA0D0
---- end of log ----

!wdfkd.wdfdriverinfo ldtpit.sys

<------------------------------------------ WDF DriverInfo ------------------------------------------------------------------------>

Default driver image name: ldtpit
WDF library image name:
FxDriverGlobals 0xffffe48ad89aa0d0
WdfBindInfo 0xfffff800bf987090
Version v1.15
Library module 0xffffe48ad5e4e1e0
ServiceName \Registry\Machine\System\CurrentControlSet\Services\Wdf01000

ImageName Wdf01000

Driver Handles is NULL

Any Ideas?

Thanks In Advance for the Help,


  • Scott_Noone_(OSR)Scott_Noone_(OSR) Administrator Posts: 3,173

    You've turned on some low resource simulation option and so the framework is failing memory allocations. Source code for the framework is online:

    Check your KMDF Verifier settings.


  • Joe_MoriartyJoe_Moriarty Member Posts: 14

    This is the current settings. I am not sure which setting corresponds to

    (FxDriverGlobals->WdfVerifierAllocateFailCount != 0xFFFFFFFF))

    I'm guessing FAIL Memory Allocations setting needs to be 0xFFFFFFFF to get by low resource simulation. Am I reading the code in wdfpool.cpp right?

    Also, I currently have the default settings turned on for Driver Verifier as well. Is this okay?


  • Joe_MoriartyJoe_Moriarty Member Posts: 14

    Driver Verifier has "Pool tracking" = Enabled.

    I'm think this line of code in wdfpool.ccp is causing the problem.

    if (FxDriverGlobals->IsPoolTrackingOn()) {

    All I have to do is set "Pool tracking" = Disabled in Driver Verifier and this will get around the KMDF Verifier problem I am running into here. Right?


  • Scott_Noone_(OSR)Scott_Noone_(OSR) Administrator Posts: 3,173

    Is VerifierAllocateFailCount set under your driver's service\Parameters\Wdf key?


  • Joe_MoriartyJoe_Moriarty Member Posts: 14
    edited February 6

    Here is what the WDF settings are when KMDF Verifier fails WdfDriverCreate().

    Post edited by Joe_Moriarty on
  • Joe_MoriartyJoe_Moriarty Member Posts: 14

    I removed the VerifierAllocateFailCount from the registry and the call to WdfDriverCreate() works again. Thanks for the helpful hint. This now leads me to my next question. How do I know when KMDFVerifier is done? Or, is this like DriverVerifier where you put the driver through stress and see if it triggers a BSOD.


  • Peter_Viscarola_(OSR)Peter_Viscarola_(OSR) Administrator Posts: 7,444

    How do I know when KMDFVerifier is done? Or, is this like DriverVerifier where you put the driver through stress and see if it triggers a BSOD.

    Yes, it's like DriverVerifier. KMDF Verifier doesn't TEST your driver, but rather monitors what your driver does to ensure that it's correct... and it also injects some OTHER things (throws a few curve balls... if baseball metaphor works for you) as your driver does its normal work to see if your driver handles these properly.


    Peter Viscarola

Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Upcoming OSR Seminars
Writing WDF Drivers 21 Oct 2019 OSR Seminar Space & ONLINE
Internals & Software Drivers 18 Nov 2019 Dulles, VA
Kernel Debugging 30 Mar 2020 OSR Seminar Space
Developing Minifilters 27 Apr 2020 OSR Seminar Space & ONLINE