Compartilhar via


0xE6 de Verificação de Bugs: DRIVER_VERIFIER_DMA_VIOLATION

A marcar de bugs DRIVER_VERIFIER_DMA_VIOLATION tem um valor de 0x000000E6. Esse é o bug marcar código para todas as violações de Verificação de DMA do Verificador de Driver.

Importante

Este artigo é para programadores. Se você for um cliente que recebeu um código de erro de tela azul ao usar o computador, consulte Solucionar erros de tela azul.

Observação

O código de verificação de bugs principal do E6 pode ser observado quando o Verificador de Driver não está habilitado. Consulte a página Verificação de DMA para obter mais informações se você estiver experimentando esse código sem o Verificador de Driver habilitado.

Parâmetros de DRIVER_VERIFIER_DMA_VIOLATION

O parâmetro 1 é o único parâmetro de interesse. Esse parâmetro identifica a violação exata. Se um depurador estiver anexado, uma mensagem informativa será exibida no depurador.

Parâmetro 1 Causa do erro e da mensagem do depurador

0x00 – erro de DMA diverso.

Esse código pode representar dois tipos de erros, conforme indicado pelo parâmetro 2:

0x1 - O driver tentou liberar muitos bytes para o final do arquivo de registro do mapa.

Parâmetro 3 – número de bytes restantes no MDL.

Parâmetro 4 – número de bytes restantes solicitados para serem liberados.

0x2 – o Windows ficou sem registros de mapa contíguos.

Parâmetro 3 – Registros de mapa necessários.

Parâmetro 4 – Número de registros de mapa contíguos.

0x01

O contador de desempenho diminuiu. Os valores antigos e novos do contador são exibidos.

0x02

O contador de desempenho aumentou muito rápido. O valor do contador é exibido no depurador.

0x03

O driver liberou muitos buffers comuns de DMA. Normalmente, isso significa que ele liberou o mesmo buffer duas vezes.

Parâmetro 2 – número de buffers comuns extras liberados.

0x04

O driver liberou muitos canais de adaptador de DMA. Normalmente, isso significa que ele liberou o mesmo canal do adaptador duas vezes.

Parâmetro 2 – número de canais de adaptador extras liberados.

0x05

O driver liberou muitos registros de mapa de DMA. Normalmente, isso significa que ele liberou o mesmo registro de mapa duas vezes.

Parâmetro 2 – número de registros de mapa extras liberados.

0x06

O driver liberou muitas listas de dispersão/coleta de DMA. Normalmente, isso significa que ele liberou a mesma lista de dispersão/coleta duas vezes.

Parâmetro 2 – Listas de coleta de dispersão alocadas.

Parâmetro 3 – Listas de coleta de dispersão liberadas.

0x07

O driver tentou liberar o adaptador sem primeiro liberar todos os buffers comuns.

Parâmetro 2 – ponteiro para o adaptador de DMA.

Parâmetro 3 – Número de buffers comuns pendentes.

Parâmetro 4 – ponteiro para os dados do verificador interno correspondentes.

0x08

O driver tentou liberar o adaptador sem primeiro liberar todos os canais do adaptador, buffers comuns ou listas de dispersão/coleta.

Parâmetro 2 – ponteiro para o adaptador de DMA.

Parâmetro 3 – Número de canais de adaptador pendentes.

Parâmetro 4 – ponteiro para os dados do verificador interno correspondentes.

0x09

O driver tentou liberar o adaptador sem primeiro liberar todos os registros de mapa.

Parâmetro 2 – ponteiro para o adaptador de DMA.

Parâmetro 3 – Número de registros de mapa pendentes.

Parâmetro 4 – ponteiro para os dados do verificador interno correspondentes.

0x0A

O driver tentou liberar o adaptador sem primeiro liberar todas as listas de dispersão/coleta.

Parâmetro 2 – ponteiro para o adaptador de DMA.

Parâmetro 3 – Número de listas de coleta de dispersão pendentes.

Parâmetro 4 – ponteiro para os dados do verificador interno correspondentes.

0x0B

O driver alocou muitos canais de adaptador ao mesmo tempo (somente um canal de adaptador é permitido por adaptador).)

Parâmetro 2 – Canais de adaptador pendentes.

0x0C

O driver tentou alocar muitos registros de mapa ao mesmo tempo.

Parâmetro 2 – Registros de mapa necessários.

Parâmetro 3 – Máximo de registros de mapa.

0x0D

O driver não liberou os buffers do adaptador.

Parâmetro 2 – Número de bytes mapeados.

Parâmetro 3 – número máximo de bytes que podem ser mapeados por vez.

0x0E

O driver tentou uma transferência de DMA sem bloquear o buffer. O buffer em questão estava na memória paginada.

Parâmetro 2 – Endereço do MDL do buffer de DMA.

0x0F

O driver ou o hardware escrito fora de seu buffer de DMA alocado. O parâmetro 2 é o código violação.

0x01 : a marca antes da modificação do buffer de DMA. A marca esperada é DmaVrfy0.

Parâmetro 3 – Comprimento do buffer.

Parâmetro 4 – Início do buffer.

0x02 : a marca após a modificação do buffer de DMA.

A marca esperada é DmaVrfy0.

Parâmetro 3 – Comprimento do buffer.

Parâmetro 4 – Início do buffer.

0x03: o registro de mapa gratuito foi substituído.

Parâmetro 3 – Endereço de corrupção. O padrão de preenchimento esperado é 0x0F.

0x04: preenchimento antes que o buffer tenha sido modificado incorretamente.

Parâmetro 3 – Início do buffer. O preenchimento esperado é 0x0F.

Parâmetro 4 – Endereço corrompido.

0x05: preenchimento depois que o buffer tiver sido modificado incorretamente.

Parâmetro 3 – Início do buffer.

Parâmetro 4 – Endereço corrompido. O padrão de preenchimento esperado é 0x0F.

0x10

O motorista tentou liberar seus registros de mapa enquanto alguns ainda estavam mapeados.

Parâmetro 2 – Número de registros ainda mapeados.

0x11

O driver tem muitas contagens de referência pendentes para o adaptador.

Parâmetro 2 – Contagem de referências.

Parâmetro 3 - Ponteiro para o adaptador de DMA.

Parâmetro 4 - Ponteiro para os dados do verificador interno correspondentes.

0x13

O driver chamou uma rotina de AMD em um IRQL inadequado. O parâmetro 2 é o código de violação.

0x01: o IRQL atual é diferente do esperado.

Parâmetro 3 – IRQL esperado.

Parâmetro 4 – IRQL atual.

0x02: o IRQL atual é maior do que o esperado.

Parâmetro 3 – IRQL máximo esperado.

Parâmetro 4 – IRQL atual.

0x14

O driver chamou uma rotina de AMD em um IRQL inadequado.

0x15

O driver tentou alocar muitos registros de mapa.

Parâmetro 2 – Registros de mapa alocados.

Parâmetro 3 – Máximo de registros de mapa.

0x16

O driver tentou liberar um buffer que não está mapeado.

Parâmetro 2 – Endereço no espaço virtual do sistema do registro do mapa.

Parâmetro 3 - Ponteiro para os dados do verificador interno correspondentes.

0x18

O driver tentou uma operação de DMA usando um adaptador que já foi liberado e não existe mais.

Parâmetro 2 - Ponteiro para o adaptador DMA.

Parâmetro 3 - Ponteiro para os dados do verificador interno correspondentes.

0x19

O driver passou um valor DMA_ADAPTER nulo para uma rotina HAL.

0x1B

O driver passou um endereço e MDL para uma rotina HAL. No entanto, esse endereço não está dentro dos limites desse MDL.

Parâmetro 2 – Endereço virtual que está fora dos limites do MDL.

Parâmetro 3 – MDL.

0x1D

O driver tentou mapear um intervalo de endereços que já estava mapeado.

Parâmetro 2 – Buffer para mapear a inicialização.

Parâmetro 3 - Buffer para o final do mapa.

Parâmetro 4 – Endereço do sistema no buffer que já está mapeado.

0x1E

O motorista chamado HalGetAdapter. Essa função é obsoleta– você deve usar IoGetDmaAdapter .

0x1F

Buffer DMA inválido. O driver referenciou um endereço de sistema inválido , antes do primeiro MDL ou após o final do primeiro MDL, ou usando um comprimento de transferência maior que o buffer MDL e cruza um limite de página dentro do MDL.Parameter 2 é o código violação.

0x01: o endereço do buffer virtual é antes do primeiro MDL.

Parâmetro 3 – Endereço virtual do início do buffer de DMA.

Parâmetro 4 - Ponteiro para o primeiro MDL que descreve o buffer de DMA.

0x02: o endereço virtual é após o primeiro MDL.

Parâmetro 3 – Endereço virtual do início do buffer de DMA.

Parâmetro 4 - Ponteiro para o primeiro MDL que descreve o buffer de DMA.

0x03: o comprimento de transferência extra cruza um limite de página.

Parâmetro 3 - Ponteiro para o MDL que descreve o buffer de DMA.

Parâmetro 4 - Comprimento da transferência de AMD.

0x04: o endereço virtual de um buffer de DMA não está alinhado ao cache.

Parâmetro 3 – Endereço virtual do início do buffer de DMA.

Parâmetro 4 - Ponteiro para MDL que descreve o buffer de DMA.

0x05: o tamanho do buffer de DMA não está alinhado ao cache.

Parâmetro 3 - Comprimento do buffer de AMD.

Parâmetro 4 - Ponteiro para MDL que descreve o buffer de DMA.

0x20

O driver tentou liberar um registro de mapa que não foi mapeado.

Parâmetro 2 – Base de registro de mapa.

Parâmetro 3 - O VA do início do buffer de DMA.

Parâmetro 4 - Ponteiro para o MDL usado para descrever o buffer de DMA.

0x21

O driver tentou mapear um buffer de comprimento zero para transferência.

Parâmetro 2 - Ponteiro para os dados do verificador interno correspondentes.

0x22

Buffer de DMA não mapeado no VA do sistema.

Parâmetro 2 – MDL

0x23

Não é possível liberar um canal que não tenha sido concluído ou cancelado.

Parâmetro 2 – Código de violação.

Valor: 0x00: liberação ilegal de canal

Parâmetro 3 – ID do controlador.

Parâmetro 4 – Número do Canal.

0x24

Buffer insuficiente para o comprimento solicitado.

Parâmetro 2 - Comprimento não contabilizado.

0x25

Versão de descrição do dispositivo desconhecida.

0x26

IOMMU detectou violação de DMA.

Parâmetro 2 – Objeto de dispositivo do dispositivo com falha.

Parâmetro 3 – Informações de falha (geralmente falhando no endereço físico).

Parâmetro 4 – Tipo de falha (específico do hardware).

Causa

Consulte a descrição de cada código na seção Parâmetros para obter uma descrição da causa.

Resolução

Esse bug marcar só pode ocorrer quando o Verificador de Driver foi instruído a monitorar um ou mais drivers. Se você não pretende usar o Verificador de Driver, desative-o. Você também pode considerar remover o driver que causou esse problema.

Se você for o gravador de driver, use as informações obtidas por meio desse bug marcar para corrigir os bugs em seu código.

Para obter mais informações sobre o Verificador de Driver, consulte Verificador de Driver.