Expand Minimize

Bug Check 0xE6: DRIVER_VERIFIER_DMA_VIOLATION

The DRIVER_VERIFIER_DMA_VIOLATION bug check has a value of 0x000000E6. This is the bug check code for all Driver Verifier DMA Verification violations.

Important Info If You Have Received a STOP Code

bsod

If you received a blue screen error, or stop code, the computer has shut down abruptly to protect itself from data loss.

For information about how to recover from this error, see Resolving Blue Screen errors in Windows.

DRIVER_VERIFIER_DMA_VIOLATION Parameters

The following parameters are displayed on the blue screen. Parameter 1 is the only parameter of interest. This parameter identifies the exact violation. If a debugger is attached, an informative message is displayed in the debugger.

Parameter 1Cause of Error and Debugger Message

0x00

This code can represent two kinds of errors:

1. The driver tried to flush too many bytes to the end of the map register file. The number of bytes permitted and the number of bytes attempted are displayed.

2. Windows has run out of contiguous map registers. The number of map registers needed and the largest block of contiguous map registers is displayed.

0x01

The performance counter has decreased. The old and new values of the counter are displayed.

0x02

The performance counter has increased too fast. The counter value is displayed in the debugger.

0x03

The driver freed too many DMA common buffers. Usually this means it freed the same buffer two times.

0x04

The driver freed too many DMA adapter channels. Usually this means it freed the same adapter channel two times.

0x05

The driver freed too many DMA map registers. Usually this means it freed the same map register two times. The number of active map registers is displayed.

0x06

The driver freed too many DMA scatter/gather lists. Usually this means it freed the same scatter/gather list two times. The number of lists allocated and the number of lists freed is displayed.

0x07

The driver tried to release the adapter without first freeing all its common buffers. The adapter address and the number of remaining buffers is displayed.

0x08

The driver tried to release the adapter without first freeing all adapter channels, common buffers, or scatter/gather lists. The adapter address and the number of remaining items is displayed.

0x09

The driver tried to release the adapter without first freeing all map registers. The adapter address and the number of remaining map registers is displayed.

0x0A

The driver tried to release the adapter without first freeing all its scatter/gather lists. The adapter address and the number of remaining scatter/gather lists is displayed.

0x0B

HV_TOO_MANY_ADAPTER_CHANNELSThe driver has allocated too many adapter channels at the same time. . (Only one adapter channel is permitted per adapter.)

0x0C

The driver tried to allocate too many map registers at the same time. The number requested and the number allowed are displayed.

0x0D

The driver did not flush its adapter buffers. The number of bytes that the driver tried to map and the maximum number of bytes allowed are displayed.

0x0E

The driver tried a DMA transfer without locking the buffer. The buffer in question was in paged memory. The address of the MDL is displayed.

0x0F

The driver or the hardware wrote outside its allocated DMA buffer. The nature of the error (overrun or underrun) is displayed, as well as the relevant addresses.

0x10

The driver tried to free its map registers while some were still mapped. The number of map registers still mapped is displayed.

0x11

The driver has too many outstanding reference counts for the adapter. The number of reference counts and the adapter address are displayed.

0x13

The driver called a DMA routine at an improper IRQL. The required IRQL and the actual IRQL are displayed.

0x14

The driver called a DMA routine at an improper IRQL. The required IRQL and the actual IRQL are displayed.

0x15

The driver tried to allocate too many map registers. The number requested and the number allowed are displayed.

0x16

The driver tried to flush a buffer that is not mapped. The address of the buffer is displayed.

0x18

The driver tried a DMA operation by using an adapter that was already released and no longer exists. The adapter address is displayed.

0x19

The driver passed a null DMA_ADAPTER value to a HAL routine.

0x1B

The driver passed an address and MDL to a HAL routine. However, this address is not within the bounds of this MDL. The address passed and the address of the MDL are displayed.

0x1D

The driver tried to map an address range that was already mapped. The address range and the current mapping for that range are displayed.

0x1E

The driver called HalGetAdapter. This function is obsolete -- you must use IoGetDmaAdapter instead.

0x1F

HV_BAD_MDLThe driver referenced an invalid system address -- either before the first MDL, or after the end of the first MDL, or by using a transfer length that is longer than the MDL buffer and crosses a page boundary within the MDL. . Either the invalid address and the first MDL address, or the MDL address and the extra transfer length are displayed.

0x20

The driver tried to flush a map register that hasn't been mapped. The map register base, flushing address, and MDL are displayed.

0x21

The driver tried to map a zero-length buffer for transfer.

 

Cause

See the description of each code in the Parameters section for a description of the cause.

Resolution

This bug check can only occur when Driver Verifier has been instructed to monitor one or more drivers. If you did not intend to use Driver Verifier, you should deactivate it. You might also consider removing the driver that caused this problem.

If you are the driver writer, use the information obtained through this bug check to fix the bugs in your code.

The Driver Verifier DMA Verification option is only available in Windows XP and later versions. For full details on Driver Verifier, see the Windows Driver Kit.

 

 

Send comments about this topic to Microsoft

Show:
© 2014 Microsoft