Accesso ai metadati di UMDF nei report WER

In questo argomento viene descritto il percorso e il contenuto delle segnalazioni degli errori di Windows (WER) che il sistema operativo crea quando si verifica un crash del User-Mode Driver Framework (UMDF).

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 di WER. 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 più recente NonCritical_HostProblem_* 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 OSR USB-FX2 scheda di riferimento hardware.

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:

  • Errore dell'Host
  • SendFailure
  • HostTimeout
  • Richiesta non valida
  • Risposta Errata
  • Errore dell'Host
  • Altro
  • Disconnessione dell'Host
  • LeakedHandle
  • Stato di Interruzione Non Valido
  • IsrTimedOut
2 RilevatoDa

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 del sistema operativo se l'utente ha adottato un'azione per aggiornare le librerie del framework.

4 Codice di uscita

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 report degli errori da parte 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 Messaggio

La prima cifra di questo campo è sempre 1, che indica che un IRP è coinvolto nell'operazione. Le coppie successive di cifre indicano rispettivamente 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 una funzione maggiore di IRP_MJ_PNP e una funzione minore di IRP_MN_START_DEVICE (1 = messaggio IRP, 1b = IRP_MJ_PNP, 00 = IRP_MN_START_DEVICE).

7 stato

Il framework imposta sempre questo valore a 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
  • Riflettore
  • DriverManager
  • Padrone di casa / Ospitante / Conduttore (depending on the intended context)
  • Struttura
  • Prova
2 ExceptionCode

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

3 Indirizzo di Guasto Relativo

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 dei driver.
8 UMDFVersion

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

9 Id hardware

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

Nella tabella seguente vengono descritti 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 Categoria

Questo campo contiene uno dei valori seguenti:

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

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

8 Identificativo hardware

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.