CUV Debugger Output
CUV reports errors that it discovers in the same that way Driver Verifier reports many of its warnings: through output and prompts from the kernel debugger.
Because CUV is active when a driver is compiled, CUV is aware of file paths, file names, and line numbers. This information is reported when the driver is running, if a suspected error occurs.
CUV error messages begin with the string DDK+ so that you can easily identify them.
Here is a sample CUV error message:
DDK+ Driver Error: Calling InitializeSpinLock(...) at File
c:\projects\linklist.c, Line 225
The Spin lock specified as parameter 1 [0x811abe78]
has been previously initialized and used as
a Listhead for Interlocked operations by this driver.
Break, Ignore, Zap, Remove, Disable all, H for help (bizrdh)?
This message ends with a user prompt. You can respond to this prompt with any of the following values. (These values are not case-sensitive.)
- B
- Break into debugger. CUV calls DbgBreakPoint, stopping execution of your driver so that you can use the debugger to diagnose the cause of the error. Once the debugger is active, you can use the debugger's G (Go) command to continue the driver's execution (and return to the DDK+ prompt).
- I
- Ignore this error for this particular call to a standard driver routine, and continue executing. CUV takes no action, except to continue execution of the driver. Future errors discovered by CUV in this or other calls to standard driver routines will be reported and result in a prompt.
- Z
- Zap (cancel) prompting for this routine. CUV will display future errors that it discovers when validating this routine, but will not provide a user prompt. Zap works on a per-routine (not a per-test) basis. So, for example, entering Z in response to an error that is reported when the driver calls ExInterlockedInsertHeadList will disable prompting for errors that might be discovered when the driver calls ExInterlockedInsertHeadList in the future.
- R
- Remove all tests for this routine. This response causes CUV to skip any tests that are performed for the routine that is named in the message. This differs from the Z command, because after Z is used, CUV continues to test and display any discovered errors for the routine, while R disables all future tests for this routine.
- D
- Disable CUV. This response disables all further checks by CUV for this driver. No errors will be reported.
Each of these responses is valid only for the current run of the driver and will be reset when the driver is reloaded.