Acceso a metadatos de UMDF en informes WER
En este tema se describe la ubicación y el contenido de los informes de Informe de errores de Windows (WER) que el sistema operativo crea cuando se bloquea un User-Mode Driver Framework (UMDF).
El sistema genera informes WER para tres tipos de eventos UMDF diferentes: WUDFHostProblem, WUDFUnhandledException y WUDFVerifierFailure.
Cuando el reflector finaliza el proceso de host del controlador, a veces debido a que se supera el umbral de tiempo de espera del host , el sistema genera un archivo denominado Report.wer, que contiene la información de WER. En concreto, Report.wer contiene metadatos de UMDF que pueden resultar útiles si está intentando depurar un controlador UMDF sin acceso a un destino de depuración en directo.
En Windows 8.1, puede encontrar el archivo Report.wer en el directorio C:\ProgramData\Microsoft\Windows\WER\ReportQueue. En este directorio, abra la carpeta NonCritical_HostProblem_* más reciente y busque Report.wer.
También puede acceder a los informes WER para UMDF mediante el siguiente comando de PowerShell:
get-winevent -providername "Windows Error Reporting" | where-object {$_.Message -like "*wudf*"} | format-list | out-file UmdfReports.txt
Informe de ejemplo WUDFHostProblem
A continuación se muestra un informe de WER de UMDF de ejemplo de tipo WUDFHostProblem. Se obtuvo del directorio ReportQueue descrito anteriormente. Si usa PowerShell para recuperar los informes, los campos se pueden etiquetar como P0, P1, P2 en lugar de Sig[0], Sig[1], Sig[2]. De lo contrario, los campos son los mismos y contienen los mismos valores posibles. Este ejemplo se generó a partir de uno de los ejemplos de WDK que usan la placa de referencia de hardware USB-FX2 del OSR.
Sig[0].Name=EventClass
Sig[0].Value=HostProblem
Sig[1].Name=Problem
Sig[1].Value=HostTimeout
Sig[2].Name=DetectedBy
Sig[2].Value=2
Sig[3].Name=UMDFVersion
Sig[3].Value=6.3.9600
Sig[4].Name=ExitCode
Sig[4].Value=103
Sig[5].Name=Operation
Sig[5].Value=3
Sig[6].Name=Message
Sig[6].Value=11b00
Sig[7].Name=Status
Sig[7].Value=ffffffff
Sig[8].Name=HardwareId
Sig[8].Value=USB\VID_0547&PID_1002&REV_0000
Campos WUDFHostProblem
En la tabla siguiente se describen los valores posibles para los campos de un informe de tipo WUDFHostProblem.
Índice | Nombre | Valores |
---|---|---|
0 | EventClass (Clase de evento) | El marco establece este valor en HostProblem. |
1 | Problema | Este campo contiene uno de los siguientes valores:
|
2 | DetectedBy | Contiene uno de los siguientes valores de enumeración: cpp
WdfComponentInvalid = 0,
WdfComponentPlatform,
WdfComponentReflector,
WdfComponentDriverManager,
WdfComponentHost,
WdfComponentFramework,
WdfComponentTest,
WdfComponentMax
|
3 | UMDFVersion | Especifica la versión de las bibliotecas de UMDF que se están usando actualmente. Tenga en cuenta que puede tratarse de una versión posterior a la del sistema operativo si el usuario ha realizado una acción para actualizar las bibliotecas del marco. |
4 | ExitCode | Contiene uno de los siguientes valores de enumeración: cpp
WdfHostExit_StillActive = 0x103,
WdfHostExit_CodeUnknown = 0x70000000,
WdfHostExit_InternalDriverStopReported,
WdfHostExit_InternalDriverStopReportFailed,
WdfHostExit_ExternalTermination
WdfHostExit_StillActive indica que el proceso de host se estaba ejecutando en el momento en que el marco creó el informe de errores. |
5 | Operación | Contiene uno de los siguientes valores de enumeración: cpp
WudfOperation_Invalid,
WudfOperation_Init,
WudfOperation_HostShutdown,
WudfOperation_Pnp,
WudfOperation_Cleanup,
WudfOperation_Close,
WudfOperation_Cancel,
WudfOperation_IO,
WudfOperation_Interrupt,
WudfOperation_PoFx,
WudfOperation_Other,
WudfOperation_Max
|
6 | Message | El primer dígito es de este campo es siempre 1, lo que indica que un IRP está implicado en la operación. Los pares posteriores de dígitos indican majorFunction y MinorFunction del IRP, respectivamente. En el informe de ejemplo anterior, por ejemplo, este campo contiene el valor 11b00. Esto significa que la operación era un IRP que el reflector controla en nombre del proceso host del controlador con un valor de función principal de IRP_MJ_PNP y un valor de función secundaria de IRP_MN_START_DEVICE (1 = mensaje IRP, 1b = IRP_MJ_PNP, 00 = IRP_MN_START_DEVICE). |
7 | Estado | El marco siempre establece en este valor en 0xffffffff. |
8 | HardwareId | Este campo contiene el identificador de hardware del dispositivo asociado al controlador que tenía un problema. |
Campos WUDFUnhandledException
En la tabla siguiente se describen los valores posibles para los campos de un informe de tipo WUDFUnhandledException.
Índice | Nombre | Valores |
---|---|---|
0 | EventClass (Clase de evento) | El marco establece este valor en UnhandledException. |
1 | Componente | Este campo contiene uno de los siguientes valores:
|
2 | ExceptionCode | Motivo por el que se produjo la excepción. Para obtener una lista de valores, consulte EXCEPTION_RECORD. |
3 | RelativeFaultingAddress | Dirección donde se produjo la excepción. |
4 | CrashingModuleName | Nombre del controlador que generó la excepción. |
5 | CrashingFileVersion | Versión del marco del controlador. |
6 | LastDriverName | Nombre del primer componente de controlador que no es UMDF en la pila de controladores. |
7 | LastDriverVersion | Número de versión del primer componente de controlador no UMDF de la pila de controladores. |
8 | UMDFVersion | Especifica la versión de las bibliotecas de UMDF que se están usando actualmente. Tenga en cuenta que puede tratarse de una versión posterior a la del sistema operativo si el usuario ha realizado una acción para actualizar las bibliotecas del marco. |
9 | HardwareId | A partir de Windows 8, el identificador de hardware se proporciona en un archivo independiente. En este caso, el marco establece este valor en Volcado por separado. |
Campos WUDFVerifierFailure
En la tabla siguiente se describen los valores posibles para los campos de un informe de tipo WUDFVerifierFailure.
Índice | Nombre | Valores |
---|---|---|
0 | EventClass (Clase de evento) | El marco establece este valor en VerifierFailure. |
1 | FoundBy | El marco establece este valor en Framework. |
2 | Category | Este campo contiene uno de los siguientes valores:
|
3 | ErrorNumber | Exclusivamente para uso interno. |
4 | Location | Solo para uso interno. |
5 | Controlador | Nombre del módulo del controlador que produjo un error. |
6 | CallerAddress | Dirección de la rutina que inició la generación del informe. |
7 | UMDFVersion | Especifica la versión de las bibliotecas de UMDF que se están usando actualmente. Tenga en cuenta que puede tratarse de una versión posterior a la del sistema operativo si el usuario ha realizado una acción para actualizar las bibliotecas del marco. |
8 | HardwareId | A partir de Windows 8, el identificador de hardware se proporciona en un archivo independiente. En este caso, el marco establece este valor en Volcado por separado. |