When you turn on the KMDF verifier(KMDFDV), a whole slew of behaviors are
verified. Unlike the WDM driver verifier (DV) which allows you to select which
behaviors to verify, KMDFDV is nearly an all or nothing affair. Future versions of
KMDFDV will probably expose settings to enable selective verification. After
KMDFDV has been enabled on your driver, certain debugger extensions in the wdfkd
debugger extension can now give additional data. This
on WHDC describes each of the extension’s commands. Enabling KMDFDV is not cheap,
it can slow your driver down by as much as 50% (but DV also has the same affect).
Let’s look at the output from !wdfkd.wdfdriverinfo, which I first presented in
post to get a better insight into what KMDFDV checks for.
1: kd> !wdfdriverinfo wdfrawbusenumtest fff
Default driver image name: wdfrawbusenumtest
WDF Verifier settings for wdfrawbusenumtest.sys is ON
Pool tracking is ON
Handle verification is ON
IO verification is ON
Lock verification is ON
The list is pretty self explanatory from a top level POV. Let's go into
some of the details of each setting:
- Pool tracking: KMDF will track most (allocations that
are near PAGE_SIZE or greater are not tracked) allocations made
on behalf of the driver writer. You can see the tracking information by
running !wdfpoolused on your driver.
- Handle verification: KMDF will perform sanity checks on
each KMDF handle passed to a KMDF DDI.
- IO verification: KMDF will perform state and contract checks on
WDFREQUESTs and WDFQUEUEs. For instance, you can only call
WdfDeviceEnqueueRequest() within the context of your
EvtIoInCallerContext() callback. Verifying that you are following the
this rule in a production environment wastes cycles, so we only make the check
when KMDF DV has been enabled.
- Lock verification: This setting is the least relevant to a KMDF driver
writer. When lock verification is enabled, each lock in KMDF is assigned a
position in a locking hierarchy and upon each lock acquisition, KMDF verifies
that the hierarchy has not been violated. Since you as the driver writer cannot
create an entry into this hierarchy, there is no way for you to plug into