Compartir a través de


Cómo habilitar la depuración de un controlador UMDF

Puede usar las siguientes configuraciones para depurar un controlador de User-Mode Driver Framework (UMDF) durante el desarrollo. Todas las configuraciones implican dos máquinas, un host y un destino.

  • Copie manualmente el controlador en el destino. Realice la depuración en modo de usuario en el destino. En este escenario, asociará manualmente a una instancia del proceso de host del controlador que se ejecuta en el destino.
  • Copie manualmente el controlador en el destino y, a continuación, realice la depuración en modo kernel desde el host.

Se recomienda realizar todas las pruebas y el desarrollo de controladores umDF con un depurador de kernel asociado.

Procedimientos recomendados

Se recomienda realizar todas las pruebas de controladores umDF con un depurador de kernel asociado.

A continuación se recomienda la configuración. Puede establecerlas manualmente o usar la herramienta Aplicación de control de comprobador de WDF (WDFVerifier.exe) en el WDK para ver o cambiar esta configuración.

  • Habilitar comprobador de aplicaciones en WUDFHost.exe:

    AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe
    

    Si se producen excepciones, Application Verifier envía mensajes de diagnóstico al depurador y se interrumpe.

  • Si usa una sesión de depuración en modo kernel, establezca HostFailKdDebugBreak para que el reflector se divida en el depurador en modo kernel antes de finalizar el proceso de host del controlador. Esta configuración está habilitada de forma predeterminada a partir de Windows 8.

  • Deshabilite la agrupación estableciendo UmdfHostProcessSharing en ProcessSharingDisabled. Para obtener información, consulta Especificar directivas WDF en archivos INF.

  • De forma predeterminada, cuando se produce un error en un dispositivo UMDF, el marco intenta reiniciarlo hasta cinco veces. Puedes desactivar el reinicio automático estableciendo DebugModeFlags en 0x01. Para obtener más información, consulta Valores del Registro para depurar controladores WDF.

  • Reinicie el equipo.

  • Para depurar problemas del controlador UMDF, consulte Determinar por qué el reflector finalizó el proceso de host y ladepuración de bloqueos del controlador UMDF.

Uso de WinDbg para asociar manualmente (depuración en modo de usuario)

En la máquina de destino, puede asociar manualmente WinDbg a la instancia de WUDFHost que hospeda el controlador. Al adjuntar, interrumpa en el depurador y puede establecer puntos de interrupción en el controlador.

Dado que la inicialización del controlador se produce poco después de cargar WUDFHost, no es factible asociar manualmente en el tiempo para depurar el código de inicialización. En su lugar, puede establecer un valor del Registro para que el proceso de host espere un número de segundos durante la inicialización del host o el tiempo de carga del controlador. Este retraso le da tiempo para adjuntar WinDbg a la instancia correcta del proceso WUDFHost.

Siga estos pasos:

  1. En el registro del equipo de destino, establezca HostProcessDbgBreakOnStart o HostProcessDbgBreakOnDriverLoad en un número de segundos y reinicie.
  2. En el equipo de destino, abra WinDbg como administrador.
  3. En el menú Archivo , elija Asociar al proceso. Seleccione Por ejecutable y busque todos los procesos denominados WUDFHost.exe (es posible que no haya ninguno). Si hay procesos denominados WUDFHost.exe, anote sus identificadores de proceso para futuras referencias.
  4. En Administrador de dispositivos, habilite el controlador.
  5. Repita el paso 2 y busque una nueva instancia de WUDFHost.exe. Si no ve una nueva instancia de WUDFHost.exe, haga clic en Cancelar y elija Asociar al proceso de nuevo. Cuando encuentre la nueva instancia de WUDFHost.exe, selecciónela y haga clic en Aceptar.

Si la agrupación de dispositivos está en uso y establece el valor del Registro HostProcessDbgBreakOnDriverLoad , es posible que vea interrupciones del depurador debido a la carga de otros controladores. Puede desactivar la agrupación de dispositivos mediante el modo de depuración de UMDF.

Para usar el modo de depuración, use la opción F5 en Visual Studio o establezca los valores DebugModeFlags y DebugModeBinaries en el Registro.

Para obtener información detallada sobre los valores del Registro UMDF, vea Valores del Registro para depurar controladores de WDF (KMDF y UMDF).

Uso de WinDbg para depurar de forma remota desde una máquina host (depuración en modo kernel)

Desde un host remoto, establezca una sesión de depuración en modo kernel y, a continuación, establezca el proceso actual en la instancia de Wudfhost que hospeda el controlador. Si está depurando desde un depurador de kernel remoto, puede establecer HostProcessDbgBreakOnDriverStart o HostProcessDbgBreakOnDriverLoad en 0x80000000 para especificar ningún tiempo de espera, pero dividir en el depurador de kernel.

Siga estos pasos:

  1. Deshabilite la agrupación. active DebugModeFlags y enumere el controlador en DebugModeBinaries.

  2. Si el controlador usa UMDF 1.11 o posterior, HostFailKdDebugBreak está habilitado de forma predeterminada. Omita este paso.

    Si el controlador usa UMDF 1.9 o versiones anteriores, establezca HostFailKdDebugBreak en 1.

  3. Si está depurando problemas relacionados con los tiempos de espera, desactive HostProcessDbgBreakOnDriverStart y HostProcessDbgBreakOnDriverLoad. (Cuando HostProcessDbgBreakOnDriverStart o HostProcessDbgBreakOnDriverLoad no es cero, el marco deshabilita los tiempos de espera para que el reflector no finalice el host mientras un depurador en modo de usuario está asociado al proceso de host). Si necesita depurar el código de inicialización del controlador, en lugar de usar estos dos valores, intente emitir el siguiente comando en WinDbg antes de que se cargue el controlador: sxe ld:MyDriver.dll (interrupción en la carga del módulo)

  4. Reinicie si realizó algún cambio en el registro.

  5. Según las selecciones que haya realizado anteriormente, el depurador de kernel remoto debe interrumpirse cuando el controlador se cargue o descargue en el destino.