Share via


0x18 de Verificação de Bugs: REFERENCE_BY_POINTER

O bug REFERENCE_BY_POINTER marcar tem um valor de 0x00000018. Isso indica que a contagem de referência de um objeto é ilegal para o estado atual do objeto.

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.

Parâmetros de REFERENCE_BY_POINTER

Parâmetro Descrição

1

Tipo de objeto do objeto cuja contagem de referência está sendo reduzida.

2

Objeto cuja contagem de referência está sendo reduzida.

3

Reservado

4

Reservado

Causa

A contagem de referência de um objeto é inválida para o estado atual do objeto. Cada vez que um driver usa um ponteiro para um objeto , o driver chama uma rotina de kernel para aumentar a contagem de referência do objeto em um. Quando o driver é feito com o ponteiro , o driver chama outra rotina de kernel para diminuir a contagem de referência em um.

Os drivers devem corresponder chamadas às rotinas que aumentam (referência) e diminuem (desreferência) a contagem de referência. Esse bug marcar é causado por uma inconsistência na contagem de referência do objeto. Normalmente, a inconsistência é causada por um driver que diminui a contagem de referência de um objeto muitas vezes, fazendo chamadas extras que desreferenciam o objeto. Esse bug marcar pode ocorrer porque a contagem de referência de um objeto vai para zero enquanto ainda há identificadores abertos para o objeto. Também pode ocorrer quando a contagem de referência do objeto cair abaixo de zero, independentemente de haver ou não identificadores abertos para o objeto.

Resolução

Verifique se o driver corresponde às chamadas às rotinas que aumentam e diminuem a contagem de referência do objeto. Verifique se o driver não faz chamadas extras para rotinas que desreferenciam o objeto (consulte Parâmetro 2).

Você pode usar um depurador para ajudar a analisar esse problema. Para obter mais informações, consulte Análise de despejo de memória usando os depuradores do Windows (WinDbg). A extensão de depuração !analyze exibe informações sobre o bug marcar e pode ser útil para determinar a causa raiz.

Para localizar o identificador e a contagem de ponteiros no objeto , use o comando !object debugger.

kd> ! object address

Onde address é o endereço do objeto fornecido no Parâmetro 2.

Você também pode definir um ponto de interrupção no código que leva a esse código de parada e tentar um único passo adiante no código com falha.

Se você não estiver equipado para usar o depurador do Windows para trabalhar nesse problema, poderá usar algumas técnicas básicas de solução de problemas.

  • Verifique a Visualizador de Eventos de Logon do Sistema para obter mensagens de erro adicionais que possam ajudar a identificar o dispositivo ou driver que está causando esse bug marcar.

  • Se um driver for identificado na mensagem de verificação de bug, desative o driver ou verifique com o fabricante as atualizações de driver.

  • Confirme se qualquer novo hardware instalado é compatível com a versão instalada do Windows. Por exemplo, você pode obter informações sobre o hardware necessário em Especificações do Windows 10.

  • Para obter informações adicionais de solução de problemas gerais, consulte Dados de tela azul.