Compartilhar via


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:

  • HostFailure
  • SendFailure
  • HostTimeout
  • BadRequest
  • BadReply
  • HostFailure
  • Outros
  • HostDisconnect
  • LeakedHandle
  • InvalidInterruptState
  • IsrTimedOut
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:

  • Inválido
  • Plataforma
  • Reflector
  • Drivermanager
  • Host
  • Estrutura
  • Teste
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:

  • Interna
  • Driver
  • Chamador
  • Externo
  • UnhandledException
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.