Driver Verifier: A Controlled Windows Driver Test Workflow
Use Driver Verifier on isolated test systems, target the responsible driver stack, preserve dump evidence, and prepare recovery before stressing kernel code.
Driver Verifier deliberately stresses selected kernel-mode and graphics drivers so that invalid behavior is detected closer to the operation that caused it. That makes it a valuable validation tool and a dangerous production troubleshooting toggle. A verifier violation can trigger a bug check by design; enabling it on a user’s only workstation can turn an intermittent defect into a boot-blocking incident.
Treat Driver Verifier as a test harness with a recovery plan. Use a disposable VM or dedicated test machine, take a checkpoint/image, preserve access to recovery media or the hypervisor console, and identify the exact driver stack to exercise. Verify one driver or a narrowly selected stack before widening coverage. The purpose is to produce a reproducible failure and useful dump, not to leave the machine under maximum stress indefinitely.
Decide whether Verifier is appropriate
Use Verifier when driver development, certification, or a reproducible driver-related failure justifies active fault detection. Do not use it as the first step for any blue screen, on a production server with no maintenance window, or when the recovery path is unknown. First preserve existing minidumps and event records, identify the suspect third-party driver, determine its vendor and version, and check whether a supported update or known compatibility issue already explains the crash.
Verifier can consume scarce Special Pool and tracking resources. Microsoft notes that verifying every installed driver may adversely affect performance and that Special Pool and I/O Verification are more effective when used on one driver at a time. A complete device stack can be appropriate for I/O verification when the fault crosses driver boundaries, but start from the narrowest test that can falsify the hypothesis.
Before enabling it, confirm the system can produce a usable dump, the dump volume has adequate free space, and a debugger is available to the engineer who will analyze the result. Capture the current verifier configuration and installed driver inventory. Record the repro steps and expected workload so the test remains bounded and interpretable.
Configure a narrow, recoverable test
The Driver Verifier Manager GUI is a supported configuration option. The command line makes the chosen target and flags easier to record in a test log. The following is an example for a lab-only test driver; replace the name with the exact .sys image that has already been confirmed as a candidate. It enables standard checks for that driver only:
verifier /standard /driver ExampleDriver.sys
verifier /querysettings
Reboot when prompted and run a focused workload that exercises the suspected code path. Do not use wildcards or assume that a similarly named service is the same thing as its driver image. If several drivers in a stack must be covered, name them deliberately and record why each is included. The command’s successful completion confirms that settings were accepted, not that the driver is correct.
For long-running or hard-to-reproduce tests, set a bounded verification boot mode using the documented /bootmode options and validate the setting with verifier /querysettings. The exact boot policy should fit the lab’s recovery plan. Do not select all drivers just to “be thorough”; broad coverage can increase crash probability and reduce the resources available to identify a single fault.
Reproduce, capture, and analyze
Exercise the minimal operation that triggers the defect: load the device, run the relevant I/O, cancel operations, exercise power transitions if they are implicated, and unload or stop the component if the product supports it. Keep timestamps, driver versions, firmware versions, device IDs, test input, and machine build alongside the dump. If a kernel debugger is attached, preserve its output as well as the crash dump.
Verifier findings commonly lead to bug check 0xC4 (DRIVER_VERIFIER_DETECTED_VIOLATION), but the specific stop and bug-check parameters determine which contract was violated. Analyze the dump with symbols and the relevant debugger extensions. Inspect the current thread, stack, verifier context, driver object, and request lifecycle. Do not infer that the module named in the crash stack is automatically the root cause; memory corruption may have occurred earlier or in an adjacent component.
If no violation occurs, that is not proof that the driver is safe. Confirm the target driver actually loaded under verification, the test reached the intended branch, the relevant checks were enabled, and there was adequate instrumentation coverage. Driver Status in Verifier Manager can distinguish loaded, unloaded, and never-loaded drivers. Extend tests deliberately, not by leaving stress enabled without a plan.
Recover safely if Windows stops booting
Before the first reboot, document how to access Windows Recovery Environment or Safe Mode and how to restore the VM checkpoint. If Verifier creates a boot loop, use the recovery environment or a supported Safe Mode path to run the documented reset operation, then reboot and confirm the settings are cleared. verifier /reset clears Verifier settings for the next restart; it does not repair a faulty driver or undo unrelated system changes.
Once Windows boots normally, query the settings and preserve the resulting dump before making any additional changes. If the test no longer needs Verifier, reset it and reboot as required. Record that the configuration is clear. Do not permanently disable a security or driver protection feature as a workaround for a verifier stop.
Avoid common test design mistakes
- Verifying everything on a production endpoint: broad verification can create excessive resource use and outages. Reproduce in a test environment first.
- Enabling multiple specialized flags without a hypothesis: the resulting failure may be harder to interpret and may impose unnecessary overhead. Use documented option guidance and change one dimension at a time.
- Testing the wrong binary: resolve the driver service’s image path and confirm signature, version, and loaded instance before choosing the target.
- Running a test with no dump plan: a crash without retained evidence wastes the main value of Verifier. Check dump settings, disk capacity, and access to the artifact in advance.
- Assuming a clean run certifies the driver: verification covers the paths and options actually exercised; it does not exhaustively prove correctness.
- Forgetting cleanup: reset settings, reboot, query final state, and remove temporary test artifacts according to retention policy.
Driver Verifier also supports targeted options and volatile operations, but each has specific semantics and restrictions. Consult current option documentation before scripting them. Do not copy numeric flag masks from an old guide: documented /standard behavior can include checks that change across OS generations and WDF integration.
Lab runbook and exit criteria
- Snapshot the test system; save driver inventory, verifier settings, dump configuration, and recovery steps.
- Identify the candidate driver and choose a narrow set of standard or justified custom checks.
- Query settings, reboot, and verify the intended driver is loaded under test.
- Run a focused, timestamped reproduction with debugger/dump capture enabled.
- Analyze the verifier stop and reproduce the fix with the same workload.
- Reset verifier settings, reboot, query final state, and archive artifacts with the test record.
Close the test only after the corrected driver passes the same controlled reproduction without the violation, normal operation is verified with Verifier reset, and all recovery and diagnostic artifacts are accounted for. A successful boot after disabling Verifier is not the same as a repaired driver.
The tool is intentionally strict because kernel-mode faults can corrupt the entire operating system. Its safest use is a small, reproducible experiment with precise driver selection and a recovery path that has already been tested.
Related:
- Reading a Windows BSOD Minidump to Find the Actual Cause
- Diagnosing Live Systems with Sysinternals: Process Explorer and Autoruns
Sources: