Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La comprobación de errores de DRIVER_POWER_STATE_FAILURE tiene un valor de 0x0000009F. Esta comprobación de errores indica que el controlador se encuentra en un estado de energía incoherente o no válido.
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.
DRIVER_POWER_STATE_FAILURE Parámetros
El parámetro 1 indica el tipo de infracción.
Parámetro 1 | Parámetro 2 | Parámetro 3 | Parámetro 4 | Causa |
---|---|---|---|---|
0x1 | El objeto de dispositivo | Reservado | Reservado | El objeto de dispositivo que se está liberando todavía tiene una solicitud de energía pendiente que no se ha completado. |
0x2 | El objeto de dispositivo del dispositivo de destino, si está disponible | El objeto de dispositivo | El objeto driver, si está disponible | El objeto de dispositivo completó el paquete de solicitud de E/S (IRP) para la solicitud de estado de energía del sistema, pero no llamó a PoStartNextPowerIrp. |
0x3 | El objeto de dispositivo físico (PDO) de la pila |
nt!_TRIAGE_9F_POWER . |
El IRP bloqueado | Un objeto de dispositivo ha estado bloqueando un IRP durante demasiado tiempo. |
0x4 | Valor de tiempo de espera, en segundos. | El subproceso que actualmente mantiene el bloqueo Plug-and-Play (PnP). |
nt!_TRIAGE_9F_PNP . |
Se agotó el tiempo de espera de la transición de estado de energía para sincronizarse con el subsistema PnP. |
0x5 | Dispositivo físico Objeto de la pila | El objeto POP_FX_DEVICE | Reservado: 0 | El dispositivo no pudo completar una transición de energía dirigida dentro del período de tiempo requerido. |
0x6 | El objeto POP_FX_DEVICE | Indica si se trató de una finalización de Apagado dirigido(1) o Encendido (0). | Reservado: 0 | El dispositivo no completó correctamente su devolución de llamada de transición de energía dirigida. |
0x500 | Reservado | El objeto de dispositivo del dispositivo de destino, si está disponible | Device (objeto) | El objeto de dispositivo completó el IRP para la solicitud de estado de energía del sistema, pero no llamó a PoStartNextPowerIrp. |
Causa
Para obtener una descripción de las posibles causas, consulte la descripción de cada código en la sección Parámetros. Las causas más comunes son:
- Objeto de dispositivo liberado con solicitud de energía pendiente incompleta
- Se agotó el tiempo de espera de la transición de estado de energía
- Objeto de dispositivo que bloquea un IRP
- Se completó el IRP, pero no se llamó a PoStartNextPowerIrp
Resolución
Para determinar la causa específica y crear una corrección de código, se requiere experiencia en programación y acceso al código fuente del módulo de fallas.
Depuración de la comprobación de errores 0x9F cuando el parámetro 1 es igual a 0x3
- En un depurador de kernel, use el comando !analyze -v para realizar el análisis inicial de comprobación de errores. El análisis detallado muestra la dirección del nt! TRIAGE_9F_POWER estructura, que está en Arg3.
kd>!analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
DRIVER_POWER_STATE_FAILURE (9f)
A driver has failed to complete a power IRP within a specific time.
Arguments:
Arg1: 0000000000000003, A device object has been blocking an Irp for too long a time
Arg2: fffffa8007b13440, Physical Device Object of the stack
Arg3: fffff8000386c3d8, nt!_TRIAGE_9F_POWER on Win7 and higher, otherwise the Functional Device Object of the stack
Arg4: fffffa800ab61bd0, The blocked IRP
Si se puede identificar un controlador responsable del error, su nombre se imprime en la pantalla azul y se almacena en la memoria en la ubicación (PUNICODE_STRING) KiBugCheckDriver. Puede usar dx (expresión del modelo de objetos del depurador de pantalla), un comando del depurador, para mostrar lo siguiente: dx KiBugCheckDriver
.
El nt! TRIAGE_9F_POWER estructura proporciona información adicional sobre la comprobación de errores que puede ayudarle a determinar la causa de esta comprobación de errores. La estructura puede proporcionar una lista de todos los IRP de energía pendientes, una lista de todos los subprocesos de trabajo de IRP de energía y un puntero a la cola de trabajo del sistema retrasada.
- Utilice el comando dt (Tipo de visualización) y especifique el comando nt! TRIAGE_9F_POWER estructura utilizando la dirección de Arg3.
0: kd> dt nt!_TRIAGE_9F_POWER fffff8000386c3d8
+0x000 Signature : 0x8000
+0x002 Revision : 1
+0x008 IrpList : 0xfffff800`01c78bd0 _LIST_ENTRY [ 0xfffffa80`09f43620 - 0xfffffa80`0ad00170 ]
+0x010 ThreadList : 0xfffff800`01c78520 _LIST_ENTRY [ 0xfffff880`009cdb98 - 0xfffff880`181f2b98 ]
+0x018 DelayedWorkQueue : 0xfffff800`01c6d2d8 _TRIAGE_EX_WORK_QUEUE
El comando dt (Tipo de visualización) muestra la estructura. Puede usar varios comandos del depurador para seguir los campos LIST_ENTRY para examinar la lista de IRP pendientes y los subprocesos de trabajo de IRP avanzados.
- Use el comando !irp para examinar el IRP que se bloqueó. La dirección de este IRP está en Arg4.
0: kd> !irp fffffa800ab61bd0
Irp is active with 7 stacks 6 is current (= 0xfffffa800ab61e08)
No Mdl: No System Buffer: Thread 00000000: Irp stack trace.
cmd flg cl Device File Completion-Context
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-00000000
Args: 00000000 00000000 00000000 00000000
>[IRP_MJ_POWER(16), IRP_MN_SET_POWER(2)]
0 e1 fffffa800783f060 00000000 00000000-00000000 pending
\Driver\HidUsb
Args: 00016600 00000001 00000004 00000006
[N/A(0), N/A(0)]
0 0 00000000 00000000 00000000-fffffa800ad00170
Args: 00000000 00000000 00000000 00000000
- Utilice el comando !devstack con la dirección PDO en Arg2 para mostrar la información asociada con el controlador de errores.
0: kd> !devstack fffffa8007b13440
!DevObj !DrvObj !DevExt ObjectName
fffffa800783f060 \Driver\HidUsb fffffa800783f1b0 InfoMask field not found for _OBJECT_HEADER at fffffa800783f030
> fffffa8007b13440 \Driver\usbhub fffffa8007b13590 Cannot read info offset from nt!ObpInfoMaskToOffset
!DevNode fffffa8007ac8a00 :
DeviceInst is "USB\VID_04D8&PID_0033\5&46fa7b7&0&1"
ServiceName is "HidUsb"
- Use el comando !poaction para mostrar los subprocesos que controlan las operaciones de energía y los IRP de energía asignados.
3: kd> !poaction
PopAction: fffff801332f3fe0
State..........: 0 - Idle
Updates........: 0
Action.........: None
Lightest State.: Unspecified
Flags..........: 10000003 QueryApps|UIAllowed
Irp minor......: ??
System State...: Unspecified
Hiber Context..: 0000000000000000
Allocated power irps (PopIrpList - fffff801332f44f0)
IRP: ffffe0001d53d8f0 (wait-wake/S0), PDO: ffffe00013cae060
IRP: ffffe0001049a5d0 (wait-wake/S0), PDO: ffffe00012d42050
IRP: ffffe00013d07420 (set/D3,), PDO: ffffe00012daf840, CURRENT: ffffe00012dd5040
IRP: ffffe0001e5ac5d0 (wait-wake/S0), PDO: ffffe00013d33060
IRP: ffffe0001ed3e420 (wait-wake/S0), PDO: ffffe00013c96060
IRP: ffffe000195fe010 (wait-wake/S0), PDO: ffffe00012d32050
Irp worker threads (PopIrpThreadList - fffff801332f3100)
THREAD: ffffe0000ef5d040 (static)
THREAD: ffffe0000ef5e040 (static), IRP: ffffe00013d07420, DEVICE: ffffe00012dd5040
PopAction: fffff801332f3fe0
State..........: 0 - Idle
Updates........: 0
Action.........: None
Lightest State.: Unspecified
Flags..........: 10000003 QueryApps|UIAllowed
Irp minor......: ??
System State...: Unspecified
Hiber Context..: 0000000000000000
Allocated power irps (PopIrpList - fffff801332f44f0)
IRP: ffffe0001d53d8f0 (wait-wake/S0), PDO: ffffe00013cae060
IRP: ffffe0001049a5d0 (wait-wake/S0), PDO: ffffe00012d42050
IRP: ffffe00013d07420 (set/D3,), PDO: ffffe00012daf840, CURRENT: ffffe00012dd5040
IRP: ffffe0001e5ac5d0 (wait-wake/S0), PDO: ffffe00013d33060
IRP: ffffe0001ed3e420 (wait-wake/S0), PDO: ffffe00013c96060
IRP: ffffe000195fe010 (wait-wake/S0), PDO: ffffe00012d32050
Irp worker threads (PopIrpThreadList - fffff801332f3100)
THREAD: ffffe0000ef5d040 (static)
THREAD: ffffe0000ef5e040 (static), IRP: ffffe00013d07420, DEVICE: ffffe00012dd5040
Si está trabajando con un controlador KMDF, use las extensiones de marco de controladores de Windows (!wdfkd) para recopilar información adicional.
Use !wdfkd.wdflogdump<su nombre> de controlador para ver si KMDF está esperando que confirme las solicitudes pendientes.
Use !wdfkd.wdfdevicequeues<su WDFDEVICE> para examinar todas las solicitudes pendientes y el estado en el que se encuentran.
Use la extensión !stacks para examinar el estado de cada subproceso y buscar un subproceso que pueda estar retrasando la transición del estado de energía.
Para ayudarle a determinar la causa del error, considere las siguientes preguntas:
- ¿Cuáles son las características del controlador de objeto de dispositivo físico (PDO) (Arg2)?
- ¿Puedes encontrar el hilo bloqueado? Al examinar el subproceso con el comando !thread debugger, ¿en qué consiste el subproceso?
- ¿Hay E/S asociada con el subproceso que lo está bloqueando? ¿Qué símbolos hay en la pila?
- Cuando examina el IRP de energía bloqueada, ¿qué observa?
- ¿Cuál es el código de función menor PnP del IRP de alimentación?
Comprobación de errores de depuración 0x9F cuando el parámetro 1 es igual a 0x4
- En un depurador de kernel, use el comando !analyze -v para realizar el análisis inicial de comprobación de errores. El análisis detallado muestra la dirección del nt! TRIAGE_9F_PNP estructura, que se encuentra en el parámetro 4 (arg4).
kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
DRIVER_POWER_STATE_FAILURE (9f)
A driver has failed to complete a power IRP within a specific time (usually 10 minutes).
Arguments:
Arg1: 00000004, The power transition timed out waiting to synchronize with the Pnp
subsystem.
Arg2: 00000258, Timeout in seconds.
Arg3: 84e01a70, The thread currently holding on to the Pnp lock.
Arg4: 82931b24, nt!TRIAGE_9F_PNP on Win7
El nt! TRIAGE_9F_PNP estructura proporciona información adicional sobre la comprobación de errores que puede ayudarle a determinar la causa del error. El nt! TRIAGE_9F_PNP estructura proporciona un puntero a una estructura que contiene la lista de IRP PnP distribuidos (pero no completados) y proporciona un puntero a la cola de trabajo del sistema retrasada.
- Utilice el comando dt (Tipo de visualización) y especifique la
nt!_TRIAGE_9F_PNP
estructura y la dirección que encontró en Arg4.
kd> dt nt!_TRIAGE_9F_PNP 82931b24
+0x000 Signature : 0x8001
+0x002 Revision : 1
+0x004 CompletionQueue : 0x82970e20 _TRIAGE_PNP_DEVICE_COMPLETION_QUEUE
+0x008 DelayedWorkQueue : 0x829455bc _TRIAGE_EX_WORK_QUEUE
El comando dt (Tipo de visualización) muestra la estructura. Puede usar los comandos del depurador para seguir los campos LIST_ENTRY para examinar la lista de IRP de PnP pendientes.
Para ayudarle a determinar la causa del error, considere las siguientes preguntas:
¿Hay un IRP asociado con el subproceso?
¿Hay alguna E/S en CompletionQueue?
¿Qué símbolos hay en la pila?
Consulte las técnicas adicionales descritas anteriormente en el parámetro 0x3.
Observaciones
Si no está equipado para depurar este problema mediante las técnicas descritas anteriormente, puede utilizar algunas técnicas básicas de solución de problemas.
Si recientemente se han agregado nuevos controladores de dispositivo o servicios del sistema, pruebe a quitarlos o actualizarlos. Intente determinar qué es lo que ha cambiado en el sistema que ha provocado que aparezca el nuevo código de comprobación de errores.
Busque en el Administrador de dispositivos para ver si algún dispositivo está marcado con el signo de exclamación (!). Revise el registro de eventos que se muestra en las propiedades del controlador para ver si hay algún controlador con errores. Pruebe a actualizar el controlador relacionado.
Consulte el Visor de eventos de registro del sistema para ver si hay mensajes de error adicionales que puedan ayudar a identificar el dispositivo o el controlador que está causando 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.
Para intentar aislar la causa, deshabilite temporalmente el ahorro de energía mediante el panel de control, opciones de energía. Algunos problemas de controladores están relacionados con los distintos estados de hibernación del sistema y la suspensión y reanudación de la energía.
Si ha agregado recientemente hardware al sistema, intente quitarlo o reemplazarlo. O bien, póngase en contacto con el fabricante para ver si hay revisiones disponibles.
Puede intentar ejecutar los diagnósticos del hardware proporcionados por el fabricante del sistema.
Consulte con el fabricante para ver si hay disponible un sistema ACPI/BIOS actualizado u otro firmware.
Consulte también
Análisis de volcado de memoria mediante los depuradores de Windows (WinDbg)
Análisis de un archivo de volcado de Kernel-Mode con WinDbg
Bug Check Code Reference (Referencia de código de comprobación de errores)