Condividi tramite


Accesso ai metadati di UMDF nei report WER

In questo argomento vengono descritti il percorso e il contenuto del Segnalazione errori Windows (WER) che il sistema operativo crea quando un User-Mode Driver Framework (UMDF) si arresta in modo anomalo.

Il sistema genera report WER per tre diversi tipi di evento UMDF: WUDFHostProblem, WUDFUnhandledException e WUDFVerifierFailure.

Quando il riflettore termina il processo host del driver, a volte a causa del superamento della soglia di timeout dell'host , il sistema genera un file denominato Report.wer, che contiene le informazioni sul sistema. In particolare, Report.wer contiene metadati UMDF che possono essere utili se si sta tentando di eseguire il debug di un driver UMDF senza accesso a una destinazione di debug in tempo reale.

In Windows 8.1 è possibile trovare il file Report.wer nella directory C:\ProgramData\Microsoft\Windows\WER\ReportQueue. In questa directory aprire la cartella NonCritical_HostProblem_* più recente e individuare Report.wer.

È anche possibile accedere ai report WER per UMDF usando il comando di PowerShell seguente:

get-winevent -providername "Windows Error Reporting" | where-object {$_.Message -like "*wudf*"} | format-list | out-file UmdfReports.txt

Report di esempio WUDFHostProblem

Di seguito è riportato un report WER UMDF di esempio di tipo WUDFHostProblem. È stato ottenuto dalla directory ReportQueue descritta in precedenza. Se si usa PowerShell per recuperare i report, i campi possono essere etichettati P0, P1, P2 anziché Sig[0], Sig[1], Sig[2]. In caso contrario, i campi sono uguali e contengono gli stessi valori possibili. Questo esempio è stato generato da uno degli esempi di WDK che usano la scheda di riferimento 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

Campi WUDFHostProblem

Nella tabella seguente vengono descritti i valori possibili per i campi in un report di tipo WUDFHostProblem.

Indice Nome Valori
0 EventClass

Il framework imposta questo valore su HostProblem.

1 Problema

Questo campo contiene uno dei valori seguenti:

  • HostFailure
  • SendFailure
  • HostTimeout
  • BadRequest
  • BadReply
  • HostFailure
  • Altro
  • HostDisconnect
  • LeakedHandle
  • InvalidInterruptState
  • IsrTimedOut
2 DetectedBy

Contiene uno dei valori di enumerazione seguenti:

cpp WdfComponentInvalid = 0, WdfComponentPlatform, WdfComponentReflector, WdfComponentDriverManager, WdfComponentHost, WdfComponentFramework, WdfComponentTest, WdfComponentMax
3 UMDFVersion

Specifica la versione delle librerie UMDF attualmente in uso. Si noti che potrebbe trattarsi di una versione successiva rispetto a quella fornita con il sistema operativo se l'utente ha adottato un'azione per aggiornare le librerie del framework.

4 ExitCode

Contiene uno dei valori di enumerazione seguenti:

cpp WdfHostExit_StillActive = 0x103, WdfHostExit_CodeUnknown = 0x70000000, WdfHostExit_InternalDriverStopReported, WdfHostExit_InternalDriverStopReportFailed, WdfHostExit_ExternalTermination

WdfHostExit_StillActive indica che il processo host è stato eseguito al momento della creazione del framework.

5 Operazione

Contiene uno dei valori di enumerazione seguenti:

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

La prima cifra è di questo campo è sempre 1, che indica che un IRP è coinvolto nell'operazione. Le coppie successive di cifre indicano rispettivamente l'oggetto MajorFunction e MinorFunction dell'IRP.

Nel report di esempio precedente, ad esempio, questo campo contiene il valore 11b00. Ciò significa che l'operazione era un IRP gestito dal riflettore per conto del processo host del driver con un valore di funzione principale di IRP_MJ_PNP e il valore secondario della funzione di IRP_MN_START_DEVICE (1 = messaggio IRP, 1b = IRP_MJ_PNP, 00 = IRP_MN_START_DEVICE).

7 Stato

Il framework imposta sempre su questo valore su 0xffffffff.

8 HardwareId

Questo campo contiene l'ID hardware del dispositivo associato al driver che ha riscontrato un problema.

Campi WUDFUnhandledException

Nella tabella seguente vengono descritti i valori possibili per i campi in un report di tipo WUDFUnhandledException.

Indice Nome Valori
0 EventClass

Il framework imposta questo valore su UnhandledException.

1 Componente

Questo campo contiene uno dei valori seguenti:

  • Non valido
  • Piattaforma
  • Reflector
  • DriverManager
  • Host
  • Framework
  • Test
2 ExceptionCode

Motivo per cui si è verificata l'eccezione. Per un elenco di valori, vedere EXCEPTION_RECORD.

3 RelativeFaultingAddress

Indirizzo in cui si è verificata l'eccezione.

4 CrashingModuleName Nome del driver che ha generato l'eccezione.
5 CrashingFileVersion Versione framework del driver.
6 LastDriverName Nome del primo componente driver non UMDF nello stack di driver.
7 LastDriverVersion Numero di versione del primo componente driver non UMDF nello stack di driver.
8 UMDFVersion

Specifica la versione delle librerie UMDF attualmente in uso. Si noti che questa potrebbe essere una versione successiva rispetto a quella fornita con il sistema operativo se l'utente ha fatto azione per aggiornare le librerie del framework.

9 HardwareId

A partire da Windows 8, l'ID hardware viene fornito in un file separato. In questo caso, il framework imposta questo valore su Dumped Separatamente.

Campi WUDFVerifierFailure

La tabella seguente descrive i valori possibili per i campi in un report di tipo WUDFVerifierFailure.

Indice Nome Valori
0 EventClass

Il framework imposta questo valore su VerifierFailure.

1 FoundBy

Il framework imposta questo valore su Framework.

2 Category

Questo campo contiene uno dei valori seguenti:

  • Interno
  • Driver
  • Chiamante
  • Esterno
  • UnhandledException
3 ErrorNumber Solo per uso interno.
4 Posizione Solo per uso interno.
5 Driver Nome del modulo driver non riuscito.
6 CallerAddress Indirizzo della routine che ha avviato la generazione del report.
7 UMDFVersion

Specifica la versione delle librerie UMDF attualmente in uso. Si noti che questa potrebbe essere una versione successiva rispetto a quella fornita con il sistema operativo se l'utente ha fatto azione per aggiornare le librerie del framework.

8 HardwareId

A partire da Windows 8, l'ID hardware viene fornito in un file separato. In questo caso, il framework imposta questo valore su Dumped Separatamente.