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.
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, se conecta manualmente a una instancia del proceso de host del controlador que se ejecuta en el destino.
- Copie manualmente el controlador al destino y luego 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 adjunto.
Procedimientos recomendados
Se recomienda realizar todas las pruebas de controladores UMDF con un depurador de kernel adjunto.
Se recomienda la siguiente configuración. Puede establecer esta configuración manualmente o usar la herramienta Aplicación de control de comprobador de WDF (WDFVerifier.exe) en 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.exeSi se producen excepciones, Application Verifier envía mensajes de diagnóstico al depurador y hace una pausa.
Si está utilizando una sesión de depuración en modo kernel, configure HostFailKdDebugBreak para que el reflector interrumpa en el depurador en modo kernel antes de terminar el proceso del 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. Puede desactivar el reinicio automático estableciendo DebugModeFlags en 0x01. Para obtener más información, consulta Valores del Registro para la depuración de controladores WDF.
Reinicie el equipo.
Para depurar problemas del controlador UMDF, consulte Determinar por qué el reflector finalizó el proceso de host y Depurar bloqueos del controlador UMDF
Uso de WinDbg para asociar manualmente (depuración en modo de usuario)
En la máquina de destino, puede adjuntar manualmente WinDbg a la instancia de WUDFHost que hospeda el controlador. Al adjuntar, se interrumpe la ejecución en el depurador y puedes establecer puntos de interrupción en tu controlador.
Dado que la inicialización del controlador se produce poco después de que WUDFHost se cargue, no se puede asociar manualmente a tiempo para depurar el código de inicialización. En su lugar, establezca un valor del registro para que el proceso de host espere un número de segundos durante la inicialización del host o la carga del controlador. Este retraso le da tiempo para adjuntar WinDbg a la instancia correcta del proceso WUDFHost.
Siga estos pasos:
- En el registro del equipo de destino, establezca HostProcessDbgBreakOnStart o HostProcessDbgBreakOnDriverLoad en un número de segundos y reinicie.
- En el equipo de destino, abra WinDbg como administrador.
- 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 algún proceso denominado WUDFHost.exe, anote sus identificadores de proceso para futuras referencias.
- En el Administrador de dispositivos, habilite el controlador.
- Repita el paso 2 y busque una nueva instancia de WUDFHost.exe. Si no ve una nueva instancia de WUDFHost.exe, seleccione Cancelar y elija Asociar al proceso de nuevo. Cuando encuentre la nueva instancia de WUDFHost.exe, selecciónela y seleccione Aceptar.
Si la agrupación de dispositivos está en uso y estableces el valor del registro HostProcessDbgBreakOnDriverLoad, es posible que veas posibles interrupciones del depurador debido a la carga de otros controladores. Puede desactivar la agrupación de dispositivos usando el modo de depuración 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 de UMDF, consulte Valores del Registro para la depuración de 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. A continuación, establezca el proceso actual en la instancia de Wudfhost que hospeda el controlador. Si está depurando desde un depurador remoto de kernel, establezca HostProcessDbgBreakOnDriverStart o HostProcessDbgBreakOnDriverLoad en 0x80000000 para especificar que no haya tiempo de espera y así hacer una interrupción en el depurador de kernel.
Siga estos pasos:
Deshabilite el agrupamiento. Activa DebugModeFlags y lista tu controlador en DebugModeBinaries.
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.
Si está depurando problemas relacionados con el tiempo 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 (interrumpir la carga del módulo)
Reinicie si realizó algún cambio en el registro.
Según las selecciones realizadas en los pasos anteriores, el depurador de kernel remoto se activa cuando el controlador se carga o descarga en el equipo de destino.