Comprobación de errores 0x10D: WDF_VIOLATION
La comprobación de errores WDF_VIOLATION tiene un valor de 0x0000010D. Esto indica que Kernel-Mode Driver Framework (KMDF) detectó que Windows encontró un error en un controlador basado en el marco.
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 WDF_VIOLATION
El parámetro 1 indica el código de error específico de la comprobación de errores. El parámetro 4 está reservado.
Parámetro 1 | Parámetro 2 | Parámetro 3 | Causa del error |
---|---|---|---|
0x1 |
Puntero a una estructura de WDF_POWER_ROUTINE_TIMED_OUT_DATA |
Reservado |
Un controlador basado en marco ha agotado el tiempo de espera durante una operación de alimentación. Normalmente, esto significa que la pila de dispositivos no estableció el bit de DO_POWER_PAGABLE y un controlador intentó una operación paginable después de que la pila de dispositivos de paginación se apagara. |
0x2 |
Reservado |
Reservado |
Se está intentando adquirir un bloqueo que se está conservando actualmente. |
0x3 |
Controlador WDFREQUEST |
Número de referencias pendientes que permanecen en ambos búferes |
El comprobador de Windows Driver Framework ha encontrado un error irrecuperable. En concreto, se completó una solicitud de E/S, pero no se puede eliminar un objeto de solicitud de marco porque hay referencias pendientes al búfer de entrada, el búfer de salida o ambos. |
0x4 |
Reservado |
Dirección del autor de la llamada |
Se pasó un parámetro NULL a una función que requería un valor distinto de NULL . |
0x5 |
Valor de identificador pasado en |
Reservado |
Se pasó un identificador de objeto de marco del tipo incorrecto a un método de objeto de marco. |
0x6 |
Consulte la tabla siguiente. |
||
0x7 |
Identificador del objeto framework |
Reservado |
Un controlador intentó eliminar un objeto de marco incorrectamente llamando a WdfObjectDereference para eliminar un identificador en lugar de llamar a WdfObjectDelete. |
0x8 |
Identificador del objeto de transacción DMA |
Reservado |
Se produjo una operación en un objeto de transacción DMA mientras no estaba en el estado correcto. |
0x9 |
Actualmente no se usa. |
||
0xA |
Puntero a una estructura de WDF_QUEUE_FATAL_ERROR_DATA |
Reservado |
Se ha producido un error irrecuperable al procesar una solicitud que se encuentra actualmente en la cola. |
0xB |
Consulte la tabla siguiente. |
||
0xC |
Identificador WDFDEVICE |
Puntero al nuevo IRP de PnP |
Un nuevo IRP de PnP que cambia el estado llegó mientras el controlador procesaba otro IRP de PnP que cambiaba el estado. |
0xD |
Identificador WDFDEVICE |
Puntero al IRP de alimentación |
El propietario de la directiva de energía de un dispositivo recibió un IRP de energía que no solicitó. Puede haber varios propietarios de directivas de energía, pero solo se permite uno. Un controlador KMDF puede cambiar la propiedad de la directiva de energía llamando a WdfDeviceInitSetPowerPolicyOwnership. |
0xE |
IRQL en el que se llamó a la función de devolución de llamada de evento. |
IRQL en el que se devolvió la función de devolución de llamada de evento. |
Una función de devolución de llamada de evento no devolvió en el mismo IRQL en el que se llamó. La función de devolución de llamada cambió IRQL directa o indirectamente (por ejemplo, mediante la adquisición de un bloqueo por subproceso, que provoca IRQL a DISPATCH_LEVEL, pero no libera el bloqueo por subproceso). |
0xF |
Dirección de una función de devolución de llamada de eventos. |
Reservado |
Una función de devolución de llamada de eventos entró en una región crítica, pero no dejó la región crítica antes de devolverla. |
El parámetro 1 es igual a 0x6
Si el parámetro 1 es igual a 0x6, se produjo un error irrecuperable al controlar una solicitud WDF. En este caso, el parámetro 2 especifica aún más el tipo de error irrecuperable que se ha realizado, tal como se define en la enumeración WDF_REQUEST_FATAL_ERROR.
Parámetro 2 | Parámetro 3 | Causa del error |
---|---|---|
0x1 |
Dirección del IRP |
No hay más ubicaciones de pila de E/S disponibles para dar formato al IRP subyacente. |
0x2 |
Valor de identificador de solicitud de WDF |
Se intentó dar formato a un objeto de solicitud de marco que no contenía un IRP. |
0x3 |
Valor de identificador de solicitud de WDF |
El controlador intentó enviar una solicitud de marco que ya se ha enviado a un destino de E/S. |
0x4 |
Puntero a una estructura de WDR_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA que contiene un puntero al IRP, un valor de identificador de solicitud WDF, una función principal de IRP y el número de bytes que se intentaron escribir. |
El controlador ha completado una solicitud de marco, pero ha escrito más bytes en el búfer de salida que se especifican en irP. |
El parámetro 1 es igual a 0xB
Si el parámetro 1 es igual a 0xB, un intento de adquirir o liberar un bloqueo no era válido. En este caso, el parámetro 3 especifica aún más el error que se ha realizado.
Parámetro 2 | Parámetro 3 | Causa del error |
---|---|---|
Valor de identificador |
0x0 |
Un identificador pasado a WdfObjectAcquireLock o WdfObjectReleaseLock representa un objeto que no admite bloqueos de sincronización. |
Un controlador de bloqueo de número de WDF |
0x1 |
El bloqueo de número se libera mediante un subproceso que no lo adquirió. |
Causa
Consulte la descripción de cada código en la sección Parámetros para obtener una explicación de la causa.
Resolución
La extensión !analyze debug muestra información sobre la comprobación de errores y puede ser útil para recopilar información, como el módulo de código con errores.
Normalmente, el archivo de volcado de WDF producirá más información sobre el controlador que provocó esta comprobación de errores. Use este comando para examinar el archivo de registro.
kd> !wdfkd.wdflogdump <WDF_Driver_Name>
Si el parámetro 1 es igual a 0x2, examine la pila del autor de la llamada para determinar el bloqueo en cuestión.
Si el parámetro 1 es igual a 0x3, el registro de errores del controlador Kernel-Mode Driver Framework incluirá detalles sobre las referencias pendientes.
Si el parámetro 1 es igual a 0x4, use el comando ln debugger con el valor de Parameter 3 como argumento para determinar qué función requiere un parámetro distinto de NULL .
Si el parámetro 1 es igual a 0x7, use el comando de extensión !wdfkd.wdfhandleParameter 2 para determinar el tipo de identificador.
Si el parámetro 1 es igual a 0xA, la estructura WDF_QUEUE_FATAL_ERROR_DATA indicará la solicitud problemática o el identificador de cola. También indicará ntstatus, si no STATUS_SUCCESS, cuando esté disponible.