Compartir a través de


Comprobación de errores 0xE6: DRIVER_VERIFIER_DMA_VIOLATION

La comprobación de errores de DRIVER_VERIFIER_DMA_VIOLATION tiene un valor de 0x000000E6. Este es el código de comprobación de errores para todas las infracciones de comprobación de DMA del comprobador de controladores.

Importante

Este artículo es para programadores. Si es un cliente que ha recibido un código de error de pantalla azul mientras usa el equipo, consulte Solución de errores de pantalla azul.

Nota

El código de comprobación de errores principal E6 se puede observar cuando el comprobador de controladores no está habilitado. Consulte la página Comprobación de DMA para obtener más información si está experimentando este código sin comprobador de controladores habilitado.

parámetros de DRIVER_VERIFIER_DMA_VIOLATION

El parámetro 1 es el único parámetro de interés. Este parámetro identifica la infracción exacta. Si se adjunta un depurador, se muestra un mensaje informativo en el depurador.

Parámetro 1 Causa del error y el mensaje del depurador

0x00: error de DMA varios.

Este código puede representar dos tipos de errores como se indica en el parámetro 2:

0x1: el controlador intentó vaciar demasiados bytes al final del archivo de registro de mapa.

Parámetro 3: número de bytes que quedan en MDL.

Parámetro 4: número de bytes que se han dejado solicitado que se vacian.

0x2: Windows se ha quedado sin registros de mapa contiguos.

Parámetro 3: se necesitan registros de asignación.

Parámetro 4: número de registros de mapa contiguos.

0x01

El contador de rendimiento ha disminuido. Se muestran los valores antiguos y nuevos del contador.

0x02

El contador de rendimiento ha aumentado demasiado rápido. El valor del contador se muestra en el depurador.

0x03

El controlador liberó demasiados búferes comunes de DMA. Normalmente esto significa que liberó el mismo búfer dos veces.

Parámetro 2: número de búferes comunes adicionales liberados.

0x04

El controlador liberó demasiados canales de adaptador DMA. Normalmente esto significa que liberó el mismo canal de adaptador dos veces.

Parámetro 2: número de canales de adaptador adicionales liberados.

0x05

El controlador liberó demasiados registros de mapa DMA. Normalmente esto significa que liberó el mismo registro de mapa dos veces.

Parámetro 2: número de registros de mapa adicionales liberados.

0x06

El controlador liberó demasiadas listas de dispersión o recopilación de DMA. Normalmente esto significa que liberó la misma lista de dispersión o recopilación dos veces.

Parámetro 2: listas de recopilación de dispersión asignadas.

Parámetro 3: listas de recopilación de dispersión libres.

0x07

El controlador intentó liberar el adaptador sin liberar primero todos sus búferes comunes.

Parámetro 2: puntero al adaptador DMA.

Parámetro 3: número de búferes comunes pendientes.

Parámetro 4: puntero a los datos del comprobador interno correspondientes.

0x08

El controlador intentó liberar el adaptador sin liberar primero todos los canales de adaptador, búferes comunes o listas de dispersión o recopilación.

Parámetro 2: puntero al adaptador DMA.

Parámetro 3: número de canales de adaptador pendientes.

Parámetro 4: puntero a los datos del comprobador interno correspondientes.

0x09

El controlador intentó liberar el adaptador sin liberar primero todos los registros de mapa.

Parámetro 2: puntero al adaptador DMA.

Parámetro 3: número de registros de mapa pendientes.

Parámetro 4: puntero a los datos del comprobador interno correspondientes.

0x0A

El controlador intentó liberar el adaptador sin liberar primero todas sus listas de dispersión o recopilación.

Parámetro 2: puntero al adaptador DMA.

Parámetro 3: número de listas de recopilación de dispersión pendientes.

Parámetro 4: puntero a los datos del comprobador interno correspondientes.

0x0B

El controlador ha asignado demasiados canales de adaptador al mismo tiempo (solo se permite un canal de adaptador por adaptador).

Parámetro 2: canales de adaptador pendientes.

0x0C

El controlador intentó asignar demasiados registros de mapa al mismo tiempo.

Parámetro 2: registros de mapa necesarios.

Parámetro 3: número máximo de registros de mapa.

0x0D

El controlador no ha vaciado sus búferes de adaptador.

Parámetro 2: número de bytes asignados.

Parámetro 3: número máximo de bytes que se pueden asignar a la vez.

0x0E

El controlador intentó una transferencia DMA sin bloquear el búfer. El búfer en cuestión estaba en memoria paginada.

Parámetro 2: dirección del MDL del búfer DMA.

0x0F

El controlador o el hardware escribieron fuera de su búfer DMA asignado. El parámetro 2 es el código de infracción.

0x01 : etiqueta antes de que se haya modificado el búfer DMA. La etiqueta esperada es DmaVrfy0.

Parámetro 3: longitud del búfer.

Parámetro 4: inicio del búfer.

0x02 : la etiqueta después de modificar el búfer DMA.

La etiqueta esperada es DmaVrfy0.

Parámetro 3: longitud del búfer.

Parámetro 4: inicio del búfer.

0x03 : se sobrescribió el registro de mapa libre.

Parámetro 3: dirección dañada. El patrón de relleno esperado es 0x0F.

0x04 : relleno antes de que el búfer se haya modificado incorrectamente.

Parámetro 3: inicio del búfer. El relleno esperado es 0x0F.

Parámetro 4: Dirección de daños.

0x05 : relleno después de que el búfer se haya modificado incorrectamente.

Parámetro 3: inicio del búfer.

Parámetro 4: Dirección de daños. El patrón de relleno esperado es 0x0F.

0x10

El conductor intentó liberar sus registros de mapa mientras algunos todavía estaban asignados.

Parámetro 2: número de registros todavía asignados.

0x11

El controlador tiene demasiados recuentos de referencia pendientes para el adaptador.

Parámetro 2: recuento de referencias.

Parámetro 3: puntero al adaptador DMA.

Parámetro 4: puntero a los datos del comprobador interno correspondientes.

0x13

El controlador llamó a una rutina DMA en un IRQL incorrecto. El parámetro 2 es el código de infracción.

0x01 : IRQL actual es diferente de lo esperado.

Parámetro 3: IRQL esperado.

Parámetro 4: IRQL actual.

0x02: IRQL actual es mayor de lo esperado.

Parámetro 3: se esperaba irQL máximo esperado.

Parámetro 4: IRQL actual.

0x14

El controlador llamó a una rutina DMA en un IRQL incorrecto.

0x15

El controlador intentó asignar demasiados registros de mapa.

Parámetro 2: registros de mapa asignados.

Parámetro 3: número máximo de registros de mapa.

0x16

El controlador intentó vaciar un búfer que no está asignado.

Parámetro 2: dirección en el espacio virtual del sistema del registro del mapa.

Parámetro 3: puntero a los datos del comprobador interno correspondientes.

0x18

El controlador intentó una operación DMA mediante un adaptador que ya se ha liberado y ya no existe.

Parámetro 2: puntero al adaptador DMA.

Parámetro 3: puntero a los datos del comprobador interno correspondientes.

0x19

El controlador pasó un valor de DMA_ADAPTER null a una rutina HAL.

0x1B

El controlador pasó una dirección y MDL a una rutina HAL. Sin embargo, esta dirección no está dentro de los límites de este MDL.

Parámetro 2: dirección virtual que está fuera de los límites mdl.

Parámetro 3: MDL.

0x1D

El controlador intentó asignar un intervalo de direcciones que ya estaba asignado.

Parámetro 2: Búfer para asignar el inicio.

Parámetro 3: Búfer que se va a asignar.

Parámetro 4: dirección del sistema en el búfer que ya está asignado.

0x1E

El controlador llamado HalGetAdapter. Esta función está obsoleta; en su lugar, debe usar IoGetDmaAdapter .

0x1F

Búfer DMA no válido. El controlador ha hecho referencia a una dirección del sistema no válida, ya sea antes del primer MDL, o después del final de la primera MDL, o mediante una longitud de transferencia que es más larga que el búfer MDL y cruza un límite de página dentro del MDL.Parameter 2 es el código de infracción.

0x01 : la dirección del búfer virtual es anterior a la primera MDL.

Parámetro 3: dirección virtual del inicio del búfer DMA.

Parámetro 4: puntero al primer MDL que describe el búfer DMA.

0x02: la dirección virtual es posterior a la primera MDL.

Parámetro 3: dirección virtual del inicio del búfer DMA.

Parámetro 4: puntero al primer MDL que describe el búfer DMA.

0x03: la longitud de transferencia adicional cruza un límite de página.

Parámetro 3: puntero a la MDL que describe el búfer DMA.

Parámetro 4: longitud de la transferencia DMA.

0x04: la dirección virtual de un búfer DMA no está alineada en caché.

Parámetro 3: dirección virtual del inicio del búfer DMA.

Parámetro 4: puntero a MDL que describe el búfer DMA.

0x05 : la longitud del búfer DMA no está alineada en caché.

Parámetro 3: longitud del búfer DMA.

Parámetro 4: puntero a MDL que describe el búfer DMA.

0x20

El controlador intentó vaciar un registro de mapa que no se ha asignado.

Parámetro 2: base de registro de mapa.

Parámetro 3: va de inicio del búfer DMA.

Parámetro 4: puntero al MDL que se usa para describir el búfer DMA.

0x21

El controlador intentó asignar un búfer de longitud cero para la transferencia.

Parámetro 2: puntero a los datos del comprobador interno correspondientes.

0x22

Búfer DMA no asignado en va del sistema.

Parámetro 2: MDL

0x23

No se puede vaciar un canal que no se haya completado ni cancelado.

Parámetro 2: código de infracción.

Valor: 0x00 : vaciado de canal no válido

Parámetro 3: id. de controlador.

Parámetro 4: número de canal.

0x24

Búfer insuficiente para la longitud solicitada.

Parámetro 2: longitud no contabilizada.

0x25

Versión de descripción de dispositivo desconocida.

0x26

IOMMU detectó una infracción de DMA.

Parámetro 2: objeto de dispositivo del dispositivo con errores.

Parámetro 3: información de error (normalmente dirección física con errores).

Parámetro 4: tipo de error (específico del hardware).

Causa

Consulte la descripción de cada código en la sección Parámetros para obtener una descripción de la causa.

Resolución

Esta comprobación de errores solo puede producirse cuando se ha indicado al Comprobador de controladores que supervise uno o varios controladores. Si no tenía intención de usar el Comprobador de controladores, debe desactivarlo. También puede considerar la posibilidad de quitar el controlador que causó este problema.

Si es el escritor de controladores, use la información obtenida a través de esta comprobación de errores para corregir los errores en el código.

Para obtener más información sobre el Comprobador de controladores, consulte Comprobador de controladores.