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:
|
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:
|
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:
|
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. |