Comprobación de errores 0xA: IRQL_NOT_LESS_OR_EQUAL

La comprobación de errores IRQL_NOT_LESS_OR_EQUAL tiene un valor de 0x0000000A. Esta comprobación de errores indica que Microsoft Windows o un controlador en modo kernel accedieron a la memoria paginada en una dirección no válida mientras se encontraba en un nivel de solicitud de interrupción elevado (IRQL). La causa suele ser un puntero incorrecto o un problema de paginación.

Importante

Este artículo va dirigido a 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 IRQL_NOT_LESS_OR_EQUAL

Parámetro Descripción
1 Dirección de memoria virtual a la que no se pudo acceder.

Use !pool en esta dirección para ver si es un grupo paginado. Otros comandos que pueden resultar útiles para recopilar información sobre el error son !pte, !address y ln (Enumerar símbolos más cercanos).
2 IRQL en el momento del fallo.

Valores:
2 - El IRQL era DISPATCH_LEVEL en el momento del error.
3 Campo de bits que describe la operación que provocó el error. Tenga en cuenta que el bit 3 solo está disponible en conjuntos de chips que admiten este nivel de informes.

Valores de bit 0:
0 - Operación de lectura
1 - Operación de escritura

Valores de bit 3:
0 - No es una operación de ejecución
1 - Operación de ejecución

Valores combinados de bit 0 y bit 3:
0x0 - Error al intentar leer desde la dirección del parámetro 1
0x1 - Error al intentar escribir en la dirección del parámetro 1
0x8 - Error al intentar ejecutar código desde la dirección del parámetro 1

Este valor se debe a:
  • Llamar a una función que no se puede llamar en DISPATCH_LEVEL mientras se encuentra en DISPATCH_LEVEL.
  • Olvidar liberar un bloqueo por subproceso.
  • Marcar el código como paginable cuando debe ser no paginable. Por ejemplo, si el código adquiere un bloqueo por subproceso o se llama a en una llamada a procedimiento diferido.
4 El puntero de instrucciones en el momento del fallo.

Use el comando ln (Enumerar símbolos más cercanos) en esta dirección para ver el nombre de la función.

Causa

Esta comprobación de errores se debe a controladores de dispositivos en modo kernel que usan direcciones incorrectas.

Esta comprobación de errores indica que se ha intentado acceder a una dirección no válida mientras se encuentra en un nivel de petición de interrupción elevado (IRQL). La causa es un puntero de memoria incorrecto o un problema de paginación con el código del controlador del dispositivo.

Las instrucciones generales que puede usar para clasificar el tipo de error de codificación que provocó la comprobación de errores son las siguientes:

  • Si el parámetro 1 es menor que 0x1000, es probable que el problema sea una desreferencia de puntero NULL.

  • Si !pool informa de que el parámetro 1 es un grupo paginado (u otros tipos de memoria paginable), el IRQL es demasiado alto para acceder a estos datos. Ejecute en un IRQL inferior o asigne los datos en el grupo no paginado.

  • Si el parámetro 3 indica que la comprobación de errores era un intento de ejecutar código paginable, IRQL es demasiado alto para llamar a esta función. Ejecute con un IRQL inferior o no marque el código como paginable.

  • Puede ser un puntero incorrecto causado por el uso después de liberar o girar bits. Investigue la validez del parámetro 1 con !pte, !address e ln (Enumerar símbolos más cercanos).

Solución

Si hay disponible un depurador de kernel, obtenga un seguimiento de pila. Empiece ejecutando la extensión del depurador !analyze para mostrar información sobre la comprobación de errores. La extensión !analyze puede ser útil para determinar la causa raíz. A continuación, escriba uno de los comandos k* (mostrar seguimiento de pila) para ver la pila de llamadas.

Recopilación de información

Examine el nombre del controlador si aparece en la pantalla azul.

Consulte el Registro del sistema en el Visor de eventos para ver otros mensajes de error que puedan ayudarle a identificar el dispositivo o controlador que provoca el error. Busque en el registro del sistema errores críticos que se hayan producido en la misma ventana de tiempo que la pantalla azul.

Comprobador de controladores

El Comprobador de controladores es una herramienta que se ejecuta en tiempo real para examinar el comportamiento de los controladores. Por ejemplo, el Comprobador de controladores comprueba el uso de recursos de memoria, como los grupos de memoria. Si identifica errores en la ejecución del código de controlador, crea proactivamente una excepción para permitir que esa parte del código del controlador se examine aún más. El Administrador del comprobador de controladores está integrado en Windows y está disponible en todos los equipos Windows.

Para iniciar el Administrador del comprobador de controladores, escriba verifier en un símbolo del sistema. Puede configurar qué controladores comprobar. El código que comprueba los controladores añade sobrecarga a medida que se ejecuta, así que intente comprobar el menor número de controladores posible. Para obtener más información, consulte Comprobador de controladores.

En el código siguiente se muestra un ejemplo de depuración:

kd> .bugcheck       [Lists bug check data.]
Bugcheck code 0000000a
Arguments 00000000 0000001c 00000000 00000000

kd> kb [Lists the stack trace.]
ChildEBP RetAddr  Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194

kd> kv [Lists the trap frames.]
ChildEBP RetAddr  Args to Child
8013ed5c 801263ba 00000000 00000000 e12ab000 NT!_DbgBreakPoint (FPO: [0,0,0])
8013eecc 801389ee 0000000a 00000000 0000001c NT!_KeBugCheckEx+0x194
8013eecc 00000000 0000000a 00000000 0000001c NT!_KiTrap0E+0x256 (FPO: [0,0] TrapFrame @ 8013eee8)
8013ed5c 801263ba 00000000 00000000 e12ab000
8013ef64 00000246 fe551aa1 ff690268 00000002 NT!_KeBugCheckEx+0x194

kd> .trap 8013eee8 [Gets the registers for the trap frame at the time of the fault.]
eax=dec80201 ebx=ffdff420 ecx=8013c71c edx=000003f8 esi=00000000 edi=87038e10
eip=00000000 esp=8013ef5c ebp=8013ef64 iopl=0         nv up ei pl nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010202
ErrCode = 00000000
00000000 ???????????????    [The current instruction pointer is NULL.]

kd> kb       [Gives the stack trace before the fault.]
ChildEBP RetAddr  Args to Child
8013ef68 fe551aa1 ff690268 00000002 fe5620d2 NT!_DbgBreakPoint
8013ef74 fe5620d2 fe5620da ff690268 80404690
NDIS!_EthFilterIndicateReceiveComplete+0x31
8013ef64 00000246 fe551aa1 ff690268 00000002 elnkii!_ElnkiiRcvInterruptDpc+0x1d0

Comentarios

El error que genera esta comprobación de errores suele producirse después de la instalación de un controlador de dispositivo, servicio del sistema o BIOS defectuosos.

Si se produce una comprobación de errores 0xA al actualizar a una versión más reciente de Windows, el error podría deberse a un controlador de dispositivo, un servicio del sistema, un detector de virus o una herramienta de copia de seguridad que no es compatible con la nueva versión.

Resolución de un problema de hardware defectuoso: si el hardware se ha agregado recientemente al sistema, quítelo para ver si el error se repite. Si se ha producido un error en el hardware existente, quite o reemplace el componente defectuoso. Ejecute los diagnósticos de hardware que proporciona el fabricante del sistema. Para obtener más información sobre estos procedimientos, consulte el manual del propietario del equipo.

Resolución de un problema de servicio del sistema defectuoso: deshabilite el servicio y confirme que esto resuelve el error. Si es así, póngase en contacto con el fabricante del servicio del sistema sobre una posible actualización. Si el error se produce durante el inicio del sistema, investigue las opciones de reparación de Windows. Para obtener más información, consulte Opciones de recuperación en Windows 10.

Resolución de un problema de software antivirus: deshabilite el programa y confirme que esto resuelve el error. Si lo hace, póngase en contacto con el fabricante del programa sobre una posible actualización.

Para obtener información general sobre cómo solucionar errores, consulte Análisis de los datos de la comprobación de errores de la pantalla azul.

Consulte también

Referencia de código de comprobación de errores