Uso de Driver Verifier para identificar problemas con controladores de Windows para usuarios avanzados

La herramienta Comprobador de controladores se incluye en todas las versiones de Windows desde Windows 2000. Se usa para detectar y solucionar muchos problemas de controladores que se sabe que causan daños en el sistema, errores u otro comportamiento imprevisible. En este artículo se describe cómo usar el comprobador de controladores para aislar y solucionar problemas de un controlador en el sistema.

Se aplica a: Windows Server 2012 Foundation, Windows Server 2012 Essentials, Windows Server 2012 Standard, Windows Server 2012 Datacenter
Número de KB original: 244617

Funcionalidades del comprobador de controladores

Para usar El comprobador de controladores, ejecute Verifier.exe y reinicie el equipo. No es necesario realizar ningún otro cambio para empezar a analizar los controladores en el sistema. La cuenta de usuario requiere privilegios de administrador para ejecutar Verifier.exe.

El comprobador de controladores puede comprobar muchos aspectos diferentes del comportamiento de un conductor. Estas funcionalidades se agrupan en opciones o configuraciones habilitadas por el uso de marcas. (Las opciones de términos, la configuración y las marcas suelen ser intercambiables en la documentación del comprobador de controladores. Representan conceptos similares).

Para obtener información detallada sobre cada marca, vea Opciones del comprobador de controladores y clases de reglas.

Opciones estándar

Las siguientes opciones representan juntos las reglas que no deben infringir todos los controladores del sistema. Estas opciones se habilitan cuando se elige habilitar la configuración estándar en la GUI del comprobador de controladores o cuando se especifica el /standard modificador al configurar El comprobador de controladores mediante la línea de comandos.

Comprobaciones automáticas

Estas comprobaciones siempre se realizan en un controlador que se está comprobando, independientemente de las opciones que se hayan seleccionado.

Ejemplos de comprobaciones automáticas:

  • Comprobaciones de IRQL
    • IrQL generado (lo que significa que el IRQL actual es menor que el IRQL de destino).
    • IrQL inferior (lo que significa que el IRQL actual es más que el IRQL de destino).
  • SpinLocks:
    • Doble liberación de un bloqueo de giro.
    • Las adquisiciones o versiones de bloqueo de giro se realizan en la instancia de IRQL adecuada.
  • Asignaciones de memoria:
    • Las asignaciones o liberaciones de grupos paginados se realizan en el IRQL correcto (APC_LEVEL o a continuación).
    • Las asignaciones o liberaciones de grupos no paginados se realizan en la instancia de IRQL correcta (DISPATCH_LEVEL o a continuación).
    • No se especifican valores aleatorios (sin inicializar) para estas interfaces de programación de aplicaciones (API).
    • Las asignaciones liberadas no apuntan a objetos de temporizador activos.
  • Comprobación de descarga del controlador:
    • Comprueba que el controlador no tiene operaciones pendientes durante la descarga, como dpcs pendientes o subprocesos de trabajo.
  • Otros comportamientos del controlador:
    • Cambio incorrecto de pilas de subprocesos.
    • Intentar llamar a KeWaitXxx en IRQL >= DISPATCH_LEVEL.
    • Desreferenciación de un objeto que ya tiene un recuento de referencias de 0.

Grupo especial

Cuando esta opción está activa, El comprobador de controladores asigna la mayoría de las solicitudes de memoria del controlador desde un grupo especial. Este grupo especial se supervisa para las saturaciones de memoria, las infraesiones de memoria y la memoria a la que se accede después de liberarla.

Forzar la comprobación de IRQL

Cuando esta opción está activa, El comprobador de controladores ejerce una presión de memoria extrema sobre el controlador invalidando el código paginable. Si el controlador intenta acceder a la memoria paginada en el IRQL incorrecto o mientras mantiene un bloqueo de giro, Driver Verifier detecta este comportamiento.

Seguimiento de grupos

Cuando esta opción está activa, El comprobador de controladores comprueba si el controlador ha liberado todas sus asignaciones de memoria cuando se descarga. Revela pérdidas de memoria.

Verificación de E/S

Cuando esta opción está activa, Driver Verifier asigna los IRP del controlador desde un grupo especial y supervisa el control de E/S del controlador. Detecta el uso ilegal o incoherente de rutinas de E/S.

Cuando el comprobador de E/S está habilitado:

  • Todos los IRP asignados a través de IoAllocateIrp se asignan desde un grupo especial, si está disponible.
  • Las comprobaciones se realizan en IoCallDriver, IoCompleteRequest e IoFreeIrp para detectar mensajes de error del controlador.
  • Todos los errores del comprobador de E/S comprueban con el código DRIVER_VERIFIER_IOMANAGER_VIOLATION (0xC9).

Nota:

En Windows 7 y versiones posteriores del sistema operativo Windows, todas las características de verificación de E/S mejorada se incluyen como parte de la verificación de E/S y ya no está disponible ni es necesario seleccionar la opción Verificación mejorada de E/S en el Administrador de comprobadores de controladores o desde la línea de comandos.

Detección de interbloqueos

Cuando esta opción está activa, driver Verifier supervisa el uso del controlador de bloqueos de giro, exclusión mutua y mutuas rápidas. Detecta si el código del controlador tiene la posibilidad de provocar un interbloqueo en algún momento.

Comprobación mejorada de E/S

Cuando esta opción está activa, el comprobador de controladores supervisa las llamadas de varias rutinas del Administrador de E/S y realiza pruebas de esfuerzo de PnP IRP, IRP de energía y WMI.

Nota:

En Windows 7 y versiones posteriores, todas las características de verificación de E/S mejorada se incluyen como parte de la verificación de E/S. Esta opción ya no está disponible ni es necesaria en el Administrador de comprobadores de controladores o desde una línea de comandos.

Verificación de DMA

Cuando esta opción está activa, El comprobador de controladores supervisa el uso que hace el controlador de las rutinas DMA. Detecta el uso incorrecto de búferes DMA, adaptadores y registros de mapa.

Comprobaciones de seguridad

Cuando esta opción está activa, Driver Verifier busca errores comunes que pueden dar lugar a vulnerabilidades de seguridad, como una referencia a las direcciones en modo de usuario por rutinas en modo kernel.

Comprobaciones varios

Cuando esta opción está activa, Driver Verifier busca causas comunes de bloqueos del controlador, como el mal manejo de la memoria liberada.

Comprobación de cumplimiento de DDI

Cuando esta opción está activa, Driver Verifier aplica un conjunto de reglas de interfaz de controlador de dispositivo (DDI) que comprueban la interacción adecuada entre un controlador y la interfaz del kernel del sistema operativo.

La opción de comprobación de cumplimiento de DDI se implementa mediante una biblioteca en modo kernel, denominada VerifierExt.sys. Si se encuentra una infracción de una de las reglas de comprobación de cumplimiento de DDI, VerifierExt.sys será el módulo que llamó para que se produjera la comprobación de errores del sistema.

Opciones adicionales

Estas opciones están diseñadas para pruebas de escenarios específicas o son opciones que insertarán errores o retrasos en determinadas rutinas DDI para simular condiciones de estrés extremas.

Requisitos del comprobador de controladores

El único requisito es que debe instalar Windows Server 2012. Puede habilitar Driver Verifier en versiones comerciales y activadas de Windows. Si Norton Antivirus está instalado, no habilite la detección de interbloqueos del comprobador de controladores.

Habilitación del comprobador de controladores

Puede habilitar Driver Verifier mediante Verifier.exe. Verifier.exe se incluye con cada copia de Windows. Se instala automáticamente en la carpeta System32. Verifier.exe tiene interfaces de interfaz gráfica de usuario (GUI) y de línea de comandos, por lo que puede especificar los controladores y los niveles adecuados de comprobación. También puede ver las estadísticas del comprobador de controladores en tiempo real. Para obtener más información, consulte la sección Administrador de comprobadores de controladores (Verifier.exe).

Depuración de infracciones del comprobador de controladores

Si el comprobador de controladores detecta una infracción, el comportamiento estándar consiste en comprobar el error en el sistema para proporcionar la mayor información posible sobre la depuración del problema. Un sistema conectado a un depurador se detendrá una vez que se haya producido una comprobación de errores.

Todas las infracciones del comprobador de controladores dan lugar a comprobaciones de errores, las más comunes (aunque no necesariamente todas ellas) son:

  • 0xC1: SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION
  • 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION
  • 0xC6: DRIVER_CAUGHT_MODIFYING_FREED_POOL
  • 0xC9: DRIVER_VERIFIER_IOMANAGER_VIOLATION
  • 0xD6: DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCATION
  • 0xE6: DRIVER_VERIFIER_DMA_VIOLATION

!analyze -v es el mejor comando que se debe usar al iniciar una nueva sesión de depuración. Este comando devolverá información útil e intentará identificar el controlador con errores.

Extensiones del depurador específicas del comprobador de controladores:

  • !verifier volcará las estadísticas capturadas del comprobador de controladores. !verifier -? mostrará todas las opciones disponibles.
  • !deadlock descarga información relacionada con bloqueos u objetos cuyo seguimiento realiza la detección de interbloqueos. !deadlock -? mostrará todas las opciones disponibles.
  • !iovirp [address] volcará información relacionada con un IRP al que realiza un seguimiento el comprobador de E/S.
  • !ruleinfo [RuleID] volcará información relacionada con la regla de comprobación de cumplimiento de DDI que se ha infringido (RuleID es siempre el primer argumento de la comprobación de errores, todos los identificadores de regla de comprobación de cumplimiento de DDI tienen el formato 0x200nn).

Controladores de gráficos y comprobador de controladores

Los controladores gráficos en modo kernel de Windows, como archivos DLL de controladores de pantalla y impresora, tienen restringido llamar directamente al punto de entrada del grupo. Las asignaciones de grupos se realizan indirectamente mediante devoluciones de llamada de la interfaz de controlador de dispositivo gráfico (DDI) para Win32k.sys. Por ejemplo, EngAllocMem es la devolución de llamada a la que llama un controlador de gráficos para asignar explícitamente memoria del grupo. Otras devoluciones de llamada especializadas, como EngCreatePalette y EngCreateBitmap, también devuelven memoria del grupo.

Para proporcionar las mismas pruebas automatizadas para los controladores de gráficos, se incorpora compatibilidad con algunas de las funciones de comprobador de controladores en Win32k.sys. Dado que los controladores de gráficos están más restringidos que otros controladores en modo kernel, solo requieren un subconjunto de la funcionalidad comprobador de controladores. En concreto, la comprobación de IRQL y la comprobación de E/S no son necesarias. La otra funcionalidad, es decir, el uso de un grupo especial, un error aleatorio de las asignaciones de grupos y el seguimiento de grupos, se admiten en distintos grados en las diferentes devoluciones de llamada DDI de gráficos.

Se admiten errores aleatorios para las siguientes funciones de devolución de llamada DDI de gráficos:

  • EngAllocMem
  • EngAllocUserMem
  • EngCreateBitmap
  • EngCreateDeviceSurface
  • EngCreateDeviceBitmap
  • EngCreatePalette
  • EngCreateClip
  • EngCreatePath
  • EngCreateWnd
  • EngCreateDriverObj
  • BRUSHOBJ_pvAllocRbrush
  • CLIPOBJ_ppoGetPath

Además, el uso de un grupo especial y el seguimiento de grupos es compatible con EngAllocMem.

La habilitación del comprobador de controladores para los controladores gráficos es idéntica a la de los demás controladores. Para obtener más información, consulte la sección Habilitar comprobador de controladores . Las marcas no admitidas, como la comprobación de IRQL, se omiten. Además, puede usar el comando kernel-debugger para examinar el !gdikdx.verifier estado actual del comprobador de controladores y los seguimientos del grupo de controladores gráficos.

Nota:

Solo debe usar la configuración de error de asignación aleatoria para las pruebas de solidez. El uso de esta configuración puede provocar mensajes de error de representación, por lo que no debe usar esta configuración con pruebas de comprobación para comprobar la exactitud de la implementación del controlador de gráficos (por ejemplo, comparando la salida del controlador de gráficos con una imagen de referencia).

Administrador de comprobadores de controladores (Verifier.exe)

La herramienta Administrador de comprobadores de controladores (Verifier.exe) es la forma preferida de crear y modificar la configuración del comprobador de controladores y recopilar estadísticas del comprobador de controladores. Verifier.exe se encuentra en la carpeta %WinDir%\System32 para cada instalación de Windows.

Driver Verifier Manager es la GUI incluida con Windows para configurar Driver Verifier. Inicie el Administrador de comprobadores de controladores mediante verifier.exe sin ningún otro modificador de línea de comandos. Cada vez que se incluyen los modificadores, se usa la versión basada en la línea de comandos de la utilidad.

Para obtener ayuda con la configuración del comprobador de controladores, ejecute verifier.exe /? desde una ventana CMD de administrador.

Estado del controlador

La página de propiedades Estado del controlador proporciona una imagen del estado actual del comprobador de controladores. Puede ver qué controladores detecta el comprobador. El estado puede ser uno de los siguientes valores:

  • Cargado: el controlador está cargado y comprobado actualmente.
  • Descargado: el controlador no está cargado actualmente, pero se cargó al menos una vez desde que reiniciaste el equipo.
  • Nunca cargado: el controlador nunca se cargó. Este estado puede indicar que el archivo de imagen del controlador está dañado o que especificó un nombre de controlador que falta en el sistema.

Seleccione el encabezado de lista para ordenar la lista por nombres de controlador o estado. En el área superior derecha del cuadro de diálogo, puede ver los tipos actuales de la comprobación que están en vigor. El estado de los controladores se actualiza automáticamente si no cambia al modo de actualización manual. Puede modificar la velocidad de actualización mediante los botones de radio del área inferior izquierda del cuadro de diálogo. Para forzar una actualización del estado, seleccione Actualizar ahora.

Si habilita la marca Grupo especial y menos del 95 % de las asignaciones de grupos se han ido al grupo especial, se muestra un mensaje de advertencia en esta página. Esto significa que debe seleccionar un conjunto más pequeño de controladores para comprobar o agregar más memoria física al equipo para obtener una mejor cobertura de la comprobación de asignaciones de grupos.

Contadores globales

Esta página de propiedades muestra el valor actual de algunos contadores mantenidos por Driver Verifier. Un valor cero para un contador puede indicar que la marca de comprobador de controladores asociada no está habilitada. Por ejemplo, un valor de 0 para el contador Otros o errores indica que la marca de simulación de recursos bajos no está habilitada. Puede supervisar la actividad del comprobador porque los valores de los contadores se actualizan automáticamente de forma predeterminada. Puede cambiar la tasa de actualización, cambiar a actualización manual o forzar una actualización mediante el grupo de controles del área inferior izquierda del cuadro de diálogo.

Seguimiento de grupos

Esta página de propiedades muestra más estadísticas recopiladas del comprobador de controladores. Todos los contadores que se muestran en esta página están relacionados con la marca Pool Tracking del comprobador. La mayoría de ellos son contadores por controlador, como asignaciones actuales, bytes asignados actuales, etc. Debe seleccionar un nombre de controlador en el cuadro de combinación superior para ver los contadores de ese controlador específico.

Configuración

Puede usar esta página para crear y modificar la configuración del comprobador de controladores. La configuración se guarda en el Registro y debe reiniciar el equipo para que la configuración surta efecto. Puede usar la lista para ver los controladores instalados actualmente. Cada controlador puede estar en uno de los siguientes estados:

  • Comprobar habilitado: el controlador está comprobado actualmente.
  • Comprobar deshabilitado: el controlador no se ha comprobado actualmente.
  • Comprobar habilitado (se necesita reiniciar): el controlador solo se comprueba después del siguiente reinicio.
  • Comprobar deshabilitado (reinicio necesario): el controlador está comprobado actualmente, pero no se comprueba después del siguiente reinicio.

Puede seleccionar uno o varios controladores de la lista y cambiar el estado mediante los dos botones de la lista. También puede hacer clic con el botón derecho en un nombre de controlador para mostrar el menú contextual, lo que le permite realizar la alternancia de estado.

En la parte inferior del cuadro de diálogo, puede especificar más controladores (separados por espacios) que quiera comprobar después del siguiente reinicio. Normalmente, este control de edición se usa cuando se desea instalar un controlador nuevo que aún no está cargado.

Si el grupo de botones de radio de la parte superior de la lista está establecido en Comprobar todos los controladores, la lista y los botones Comprobar y No comprobar y el control de edición no están disponibles. Esto significa que después del siguiente reinicio, se comprueban todos los controladores del sistema.

Puede establecer el tipo de verificación mediante las casillas del área superior derecha del cuadro de diálogo. Puede habilitar la verificación de E/S en el nivel 1 o en el nivel 2. La comprobación de nivel 2 es más fuerte que el nivel 1.

Para guardar cualquier modificación en la configuración, seleccione Aplicar. Hay dos botones más en esta página:

  • Configuración preferida: selecciona algunas opciones de configuración usadas habitualmente (con todos los controladores comprobados).
  • Restablecer todo: borra toda la configuración del comprobador de controladores para que no se compruebe ningún controlador.

Después de seleccionar Aplicar, debe reiniciar el equipo para que los cambios surtan efecto.

Configuración volátil

Puede usar esta página de propiedades para cambiar las marcas del comprobador de controladores inmediatamente. Solo puede alternar el estado de algunas de las marcas del comprobador de controladores. Y no puede cambiar la lista de los controladores que se están comprobando. Después de cambiar el estado de algunas casillas, seleccione Aplicar para que los cambios surtan efecto. Los cambios surten efecto inmediatamente. Y duran hasta que realice cambios adicionales o hasta que reinicie el equipo.

Interfaz de la línea de comandos

También puede ejecutar Verifier.exe desde una línea de comandos (para obtener más información, escriba verifier.exe /? en un símbolo del sistema). Se pueden usar varios modificadores en la línea de comandos, por ejemplo:

Verifier.exe /flags 0x209BB /driver MyDriver1.sys MyFilterDriver1.sys

En la lista siguiente se muestran las marcas de línea de comandos más usadas:

Configurar opciones (marcas)

  • verifier.exe valor /flags

    Value es un número hexadecimal (se requiere un prefijo 0x ) que representa el valor colectivo de las marcas que se van a habilitar. El valor de cada marca se muestra en la verifier /? salida.

    Marcas estándar:

    0x00000000: Comprobaciones automáticas
    0x00000001: Grupo especial
    0x00000002: Forzar la comprobación de IRQL
    0x00000008: Seguimiento de grupos
    0x00000010: Comprobación de E/S
    0x00000020: Detección de interbloqueos
    0x00000080: comprobación de DMA
    0x00000100: Comprobaciones de seguridad
    0x00000800: Comprobaciones varias
    0x00020000: comprobación de cumplimiento de DDI

    Más marcas:

    0x00000004: simulación aleatoria de recursos bajos
    0x00000040: Comprobación mejorada de E/S (solo Vista)
    0x00000200: Forzar solicitudes de E/S pendientes
    0x00000400: Registro de IRP
    0x00002000: Comprobación invariable de MDL para la pila
    0x00004000: Comprobación invariable de MDL para driver0x00008000: Retraso de la aproximada de Power Framework

    Por ejemplo, para habilitar solo el grupo especial, la verificación de E/S y las comprobaciones varios:

    verifier.exe /flags 0x811
    

    Para habilitar toda la configuración estándar (cualquiera de los ejemplos funciona):

    verifier.exe /standard
    
    verifier.exe /flags 0x209BB
    
  • Configuración de controladores para comprobar

    verifier.exe /driver driver1.sys [driver2.sys driver3.sys ...]
    

    Este comando especifica el controlador o controladores específicos que se van a comprobar. Proporcione controladores adicionales en una lista separada por espacios.

    verifier.exe /all
    

    Este comando comprueba todos los controladores del sistema.

  • Configuración mediante el modo volátil

    verifier.exe /volatile /flags *value /adddriver MyDriver1.sys*
    

    Este comando cambia las marcas de comprobador inmediatamente y agrega MyDriver1.sys para la comprobación.

  • Consulta de estadísticas del comprobador actual

    verifier /query
    

    Volcado del estado actual del comprobador de controladores y los contadores en la salida estándar.

  • Consulta de la configuración actual del comprobador

    verifier /querysettings
    

    Volcado de la configuración actual del comprobador de controladores en la salida estándar.

  • Borrar configuración del comprobador

    verifier.exe /reset
    

    Este comando borra toda la configuración actual del comprobador de controladores.

Información adicional para desarrolladores de controladores

En las secciones siguientes se describen más detalles sobre la configuración del comprobador de controladores que puede ser de interés para los desarrolladores de controladores. Por lo general, estos valores no son necesarios para los profesionales de TI.

Importante

Esta sección, método o tarea contiene pasos que le indican cómo modificar el Registro. No obstante, pueden producirse problemas graves si modifica el registro de manera incorrecta. En consecuencia, asegúrese de seguir estos pasos cuidadosamente. Para mayor protección, cree una copia de seguridad del registro antes de modificarlo. Después, puede restaurar el registro si se produce un problema. Para obtener más información sobre cómo hacer una copia de seguridad del Registro y cómo restaurarlo, consulte Cómo realizar una copia de seguridad del Registro y restaurarlo en Windows.

Para habilitar Driver Verifier editando el registro, siga estos pasos:

  1. Inicie Editor del Registro (Regedt32).

  2. Busque la clave del registro siguiente:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDrivers

  3. Edite la REG_SZ clave.

Establezca la REG_SZ clave en los nombres que no distinguen mayúsculas de minúsculas de los controladores que desea probar. Puede especificar varios controladores, pero solo usar un controlador. Al hacerlo, puede asegurarse de que los recursos del sistema disponibles no se agoten prematuramente. El agotamiento prematuro de los recursos no causa ningún problema de confiabilidad del sistema, pero puede hacer que se omita la comprobación de controladores.

En la lista siguiente se muestran ejemplos de valores para la REG_SZ clave:

  • Ntfs.sys
  • Win32k.sys ftdisk.sys
  • *.sys

Puede especificar el nivel de comprobación del controlador en la siguiente clave del Registro:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDriverLevel

El valor de la clave es un DWORD que representa la colección de todas las marcas habilitadas.