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.