Determinar por qué el reflector finalizó el proceso de host
En este tema se describe cómo puede analizar por qué el reflector finalizó el proceso de host del controlador (WUDFHost.exe) o por qué se bloqueó el proceso de host del controlador.
La razón más común para que el reflector finalice el proceso de host es la expiración de los tiempos de espera del proceso de host de UMDF.
Se recomienda encarecidamente realizar todas las pruebas y desarrollo del controlador UMDF con un depurador de kernel asociado al sistema de prueba y habilitar el Comprobador de aplicaciones (AppVerif.exe) en WUDFHost.exe. Use el siguiente comando, adjunte un depurador de kernel y reinicie.
AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe
Usar archivos de volcado de memoria
Cuando el controlador UMDF se bloquea o encuentra un problema, se notificará una interrupción en el depurador de kernel. Estos problemas se deben depurar cuando se notifican excepciones en modo de usuario en el depurador de kernel. Los saltos del depurador de kernel también se notifican mediante WudfRd.sys antes de finalizar un proceso de host de controlador debido a un controlador UMDF problemático (no con capacidad de respuesta). También encontrará registros y volcados de montón notificados en la siguiente ubicación. Para revisar los archivos de volcado capturados por UMDF, siga estos pasos:
Busque el archivo .dmp más reciente en el directorio %ProgramData%\Microsoft\WDF. Antes de UMDF 2.15 que se envió con Windows 10 1507, el directorio de registro se encuentra en %windir%\system32\LogFiles\WUDF.
Cargue el archivo .dmp más reciente en el depurador mediante el comando siguiente:
WinDbg -z <path to the .dmp file>
Examine el estado de los subprocesos en el momento de la finalización.
Si necesita volcados de montón capturados, en el momento de realizar pruebas, establezca los siguientes valores del Registro y vuelva a arrancar el sistema de pruebas antes de ejecutar pruebas. También puede examinar Informe de errores de Windows historial desde el registro de eventos de la aplicación del sistema en %SystemRoot%\System32\Winevt\Logs\Application.evtx
reg add "HKLM\Software\Microsoft\windows NT\CurrentVersion\Wudf" /v LogMinidumpType /t REG_DWORD /d 0x1122
reg add "HKLM\Software\Microsoft\windows NT\CurrentVersion\Wudf" /v LogEnable /t REG_DWORD /d 1
Uso del depurador
En otros casos, es posible que tenga que asociarse a un destino en modo kernel activo para determinar por qué el reflector finalizó el proceso de host. Para configurar la sesión de depuración, siga los pasos descritos en Cómo habilitar la depuración de un controlador UMDF.
Una vez establecida una conexión, use !wdfkd.wdfumtriage para examinar los controladores UMDF, muestre los IRP pendientes mediante la extensión del depurador UMDF !wdfkd.wdfumirps (!wudfext.umirps para UMDF versión 1).
Si hay un IRP de PnP o un IRP de energía pendiente, determine por qué el controlador hace que el IRP se bloquee mediante el examen de subprocesos en el proceso de host.
Puede usar la extensión !process para examinar los subprocesos que se ejecutan en el proceso de host. El valor de marcas 0x1f muestra el seguimiento de la pila para cada subproceso.
!process process <addr> 0x1f
Si el controlador no ha completado un IRP cancelado rápidamente, determine qué IRP se canceló y por qué no se ha completado.
Si hay una limpieza o cierre irP pendiente, determine por qué el IRP tarda mucho tiempo en procesarse.