Comprobación de errores 0x18: REFERENCE_BY_POINTER

La comprobación de errores REFERENCE_BY_POINTER tiene un valor de 0x00000018. Esto indica que el recuento de referencias de un objeto no es válido para el estado actual del objeto.

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.

parámetros de REFERENCE_BY_POINTER

Parámetro Descripción

1

Tipo de objeto del objeto cuyo recuento de referencias se está reduciendo.

2

Objeto cuyo recuento de referencias se está reduciendo.

3

Reservado

4

Reservado

Causa

El recuento de referencias de un objeto no es válido para el estado actual del objeto. Cada vez que un controlador usa un puntero a un objeto, el controlador llama a una rutina de kernel para aumentar el número de referencias del objeto en uno. Cuando el controlador se realiza con el puntero, el controlador llama a otra rutina de kernel para reducir el recuento de referencias por uno.

Los controladores deben coincidir con las llamadas a las rutinas que aumentan (referencia) y reducen (desreferencia) el recuento de referencias. Esta comprobación de errores se debe a una incoherencia en el recuento de referencias del objeto. Normalmente, la incoherencia se debe a que un controlador reduce el recuento de referencias de un objeto demasiadas veces, realizando llamadas adicionales que desreferencian el objeto. Esta comprobación de errores puede producirse porque el recuento de referencias de un objeto va a cero mientras todavía hay identificadores abiertos para el objeto. También puede producirse cuando el recuento de referencias del objeto cae por debajo de cero, independientemente de si hay o no identificadores abiertos para el objeto.

Resolución

Asegúrese de que el controlador coincide con las llamadas a las rutinas que aumentan y reducen el recuento de referencias del objeto. Asegúrese de que el controlador no realiza llamadas adicionales a rutinas que desreferencian el objeto (consulte Parámetro 2).

Puede usar un depurador para ayudar a analizar este problema. Para obtener más información, vea Análisis de volcado de memoria mediante los depuradores de Windows (WinDbg). La extensión de depuración !analyze muestra información sobre la comprobación de errores y puede ser útil para determinar la causa principal.

Para buscar el identificador y el recuento de punteros en el objeto, use el comando !object debugger.

kd> ! object address

Donde address es la dirección del objeto especificado en el parámetro 2.

También puede establecer un punto de interrupción en el código que conduce a este código de detención e intentar avanzar un paso hacia delante en el código de error.

Si no está equipado para usar el depurador de Windows para trabajar con este problema, puede usar algunas técnicas básicas de solución de problemas.

  • Compruebe el inicio de sesión del sistema Visor de eventos si hay mensajes de error adicionales que pueden ayudar a identificar el dispositivo o controlador que está causando esta comprobación de errores.

  • Si un controlador está identificado en el mensaje de comprobación de errores, deshabilita el controlador o ponte en contacto con el fabricante para obtener actualizaciones de controladores.

  • Confirme que cualquier nuevo hardware instalado sea compatible con la versión instalada de Windows. Por ejemplo, puede obtener información sobre el hardware necesario en Windows 10 Especificaciones.

  • Para obtener información adicional sobre la solución de problemas general, consulte Datos de pantalla azul.