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.