Acessando metadados UMDF em relatórios WER
Este tópico descreve o local e o conteúdo dos relatórios de Relatório de Erros do Windows (WER) que o sistema operacional cria quando um UMDF (User-Mode Driver Framework) falha.
O sistema gera relatórios WER para três tipos de eventos UMDF diferentes: WUDFHostProblem, WUDFUnhandledException e WUDFVerifierFailure.
Quando o refletor encerra o processo de host do driver, às vezes devido ao limite de tempo limite do host ser excedido, o sistema gera um arquivo chamado Report.wer, que contém as informações de WER. Especificamente, Report.wer contém metadados UMDF que podem ser úteis se você estiver tentando depurar um driver UMDF sem acesso a um destino de depuração ao vivo.
Em Windows 8.1, você pode encontrar o arquivo Report.wer no diretório C:\ProgramData\Microsoft\Windows\WER\ReportQueue. Nesse diretório, abra a pasta NonCritical_HostProblem_* mais recente e localize Report.wer.
Você também pode acessar relatórios WER para UMDF usando o seguinte comando do PowerShell:
get-winevent -providername "Windows Error Reporting" | where-object {$_.Message -like "*wudf*"} | format-list | out-file UmdfReports.txt
Relatório de exemplo WUDFHostProblem
Veja a seguir um relatório WER UMDF de exemplo do tipo WUDFHostProblem. Ele foi obtido do diretório ReportQueue descrito acima. Se você usar o PowerShell para recuperar os relatórios, os campos poderão ser rotulados como P0, P1, P2 em vez de Sig[0], Sig[1], Sig[2]. Caso contrário, os campos serão os mesmos e conterão os mesmos valores possíveis. Este exemplo foi gerado de um dos exemplos do WDK que usam a placa de referência de hardware OSR USB-FX2.
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
A tabela a seguir descreve os valores possíveis para os campos em um relatório do tipo WUDFHostProblem.
Índice | Nome | Valores |
---|---|---|
0 | EventClass | A estrutura define esse valor como HostProblem. |
1 | Problema | Esse campo contém um dos seguintes valores:
|
2 | DetectedBy | Contém um dos seguintes valores de enumeração: cpp
WdfComponentInvalid = 0,
WdfComponentPlatform,
WdfComponentReflector,
WdfComponentDriverManager,
WdfComponentHost,
WdfComponentFramework,
WdfComponentTest,
WdfComponentMax
|
3 | UMDFVersion | Especifica a versão das bibliotecas UMDF atualmente em uso. Observe que essa pode ser uma versão posterior do que veio com o sistema operacional se o usuário tomou medidas para atualizar as bibliotecas de estrutura. |
4 | ExitCode | Contém um dos seguintes valores de enumeração: cpp
WdfHostExit_StillActive = 0x103,
WdfHostExit_CodeUnknown = 0x70000000,
WdfHostExit_InternalDriverStopReported,
WdfHostExit_InternalDriverStopReportFailed,
WdfHostExit_ExternalTermination
WdfHostExit_StillActive indica que o processo de host estava em execução no momento em que a estrutura criou o relatório de erros. |
5 | Operação | Contém um dos seguintes valores de enumeração: 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 | Mensagem | O primeiro dígito desse campo é sempre 1, o que indica que um IRP está envolvido na operação. Os pares subsequentes de dígitos indicam a MajorFunction e a MinorFunction do IRP, respectivamente. No relatório de exemplo acima, por exemplo, esse campo contém o valor 11b00. Isso significa que a operação foi um IRP que o refletor lidou em nome do processo de host do driver com um valor de função principal de IRP_MJ_PNP e um valor de função secundária de IRP_MN_START_DEVICE (1 = mensagem IRP, 1b = IRP_MJ_PNP, 00 = IRP_MN_START_DEVICE). |
7 | Status | A estrutura sempre define esse valor como 0xffffffff. |
8 | HardwareId | Esse campo contém a ID de hardware do dispositivo associado ao driver que teve um problema. |
Campos WUDFUnhandledException
A tabela a seguir descreve os valores possíveis para os campos em um relatório do tipo WUDFUnhandledException.
Índice | Nome | Valores |
---|---|---|
0 | EventClass | A estrutura define esse valor como UnhandledException. |
1 | Componente | Esse campo contém um dos seguintes valores:
|
2 | ExceptionCode | O motivo pelo qual a exceção ocorreu. Para obter uma lista de valores, consulte EXCEPTION_RECORD. |
3 | RelativeFaultingAddress | O endereço em que a exceção ocorreu. |
4 | CrashingModuleName | Nome do driver que gerou a exceção. |
5 | CrashingFileVersion | Versão da estrutura do driver. |
6 | LastDriverName | Nome do primeiro componente de driver não UMDF na pilha de driver. |
7 | LastDriverVersion | Número de versão do primeiro componente de driver não UMDF na pilha de driver. |
8 | UMDFVersion | Especifica a versão das bibliotecas UMDF atualmente em uso. Observe que essa pode ser uma versão posterior do que veio com o sistema operacional se o usuário tomou medidas para atualizar as bibliotecas de estrutura. |
9 | HardwareId | A partir do Windows 8, a ID de hardware é fornecida em um arquivo separado. Nesse caso, a estrutura define esse valor como Dumped Separately. |
Campos WUDFVerifierFailure
A tabela a seguir descreve os valores possíveis para os campos em um relatório do tipo WUDFVerifierFailure.
Índice | Nome | Valores |
---|---|---|
0 | EventClass | A estrutura define esse valor como VerifierFailure. |
1 | FoundBy | A estrutura define esse valor como Framework. |
2 | Categoria | Esse campo contém um dos seguintes valores:
|
3 | ErrorNumber | Somente para uso interno. |
4 | Location | Somente para uso interno. |
5 | Driver | O nome do módulo de driver que falhou. |
6 | CallerAddress | O endereço da rotina que iniciou a geração do relatório. |
7 | UMDFVersion | Especifica a versão das bibliotecas UMDF atualmente em uso. Observe que essa pode ser uma versão posterior do que veio com o sistema operacional se o usuário tomou medidas para atualizar as bibliotecas de estrutura. |
8 | HardwareId | A partir do Windows 8, a ID de hardware é fornecida em um arquivo separado. Nesse caso, a estrutura define esse valor como Dumped Separately. |