Accès aux métadonnées UMDF dans les rapports WER
Cette rubrique décrit l’emplacement et le contenu des rapports Rapport d'erreurs Windows (WER) que le système d’exploitation crée lorsqu’un User-Mode Driver Framework (UMDF) se bloque.
Le système génère des rapports WER pour trois types d’événements UMDF différents : WUDFHostProblem, WUDFUnhandledException et WUDFVerifierFailure.
Lorsque le réflecteur termine le processus hôte du pilote, parfois en raison du dépassement du seuil de délai d’expiration de l’hôte , le système génère un fichier appelé Report.wer, qui contient les informations WER. Plus précisément, Report.wer contient des métadonnées UMDF qui peuvent être utiles si vous essayez de déboguer un pilote UMDF sans accès à une cible de débogage dynamique.
Dans Windows 8.1, vous trouverez le fichier Report.wer dans le répertoire C:\ProgramData\Microsoft\Windows\WER\ReportQueue. Dans ce répertoire, ouvrez le dossier NonCritical_HostProblem_* le plus récent et recherchez Report.wer.
Vous pouvez également accéder aux rapports WER pour UMDF à l’aide de la commande PowerShell suivante :
get-winevent -providername "Windows Error Reporting" | where-object {$_.Message -like "*wudf*"} | format-list | out-file UmdfReports.txt
Exemple de rapport WUDFHostProblem
Voici un exemple de rapport WER UMDF de type WUDFHostProblem. Il a été obtenu à partir du répertoire ReportQueue décrit ci-dessus. Si vous utilisez PowerShell pour récupérer les rapports, les champs peuvent être étiquetés P0, P1, P2 au lieu de Sig[0], Sig[1], Sig[2]. Sinon, les champs sont identiques et contiennent les mêmes valeurs possibles. Cet exemple a été généré à partir de l’un des exemples WDK qui utilisent la carte de référence matérielle 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
Champs WUDFHostProblem
Le tableau suivant décrit les valeurs possibles pour les champs d’un rapport de type WUDFHostProblem.
Index | Nom | Valeurs |
---|---|---|
0 | EventClass | L’infrastructure définit cette valeur sur HostProblem. |
1 | Problème | Ce champ contient l’une des valeurs suivantes :
|
2 | DetectedBy | Contient l’une des valeurs d’énumération suivantes : cpp
WdfComponentInvalid = 0,
WdfComponentPlatform,
WdfComponentReflector,
WdfComponentDriverManager,
WdfComponentHost,
WdfComponentFramework,
WdfComponentTest,
WdfComponentMax
|
3 | UMDFVersion | Spécifie la version des bibliothèques UMDF actuellement utilisées. Notez qu’il peut s’agir d’une version ultérieure à celle du système d’exploitation si l’utilisateur a pris des mesures pour mettre à jour les bibliothèques du framework. |
4 | ExitCode | Contient l’une des valeurs d’énumération suivantes : cpp
WdfHostExit_StillActive = 0x103,
WdfHostExit_CodeUnknown = 0x70000000,
WdfHostExit_InternalDriverStopReported,
WdfHostExit_InternalDriverStopReportFailed,
WdfHostExit_ExternalTermination
WdfHostExit_StillActive indique que le processus hôte était en cours d’exécution au moment où l’infrastructure a créé le rapport d’erreurs. |
5 | Opération | Contient l’une des valeurs d’énumération suivantes : 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 | Le premier chiffre de ce champ est toujours 1, ce qui indique qu’un IRP est impliqué dans l’opération. Les paires de chiffres suivantes indiquent les valeurs MajorFunction et MinorFunction de l’IRP, respectivement. Dans l’exemple de rapport ci-dessus, par exemple, ce champ contient la valeur 11b00. Cela signifie que l’opération était un IRP que le réflecteur a géré pour le compte du processus hôte du pilote avec une valeur de fonction principale de IRP_MJ_PNP et une valeur de fonction mineure de IRP_MN_START_DEVICE (1 = message IRP, 1b = IRP_MJ_PNP, 00 = IRP_MN_START_DEVICE). |
7 | Statut | L’infrastructure définit toujours cette valeur sur 0xffffffff. |
8 | HardwareId | Ce champ contient l’ID matériel de l’appareil associé au pilote qui a rencontré un problème. |
Champs WUDFUnhandledException
Le tableau suivant décrit les valeurs possibles pour les champs dans un rapport de type WUDFUnhandledException.
Index | Nom | Valeurs |
---|---|---|
0 | EventClass | Le framework définit cette valeur sur UnhandledException. |
1 | Composant | Ce champ contient l’une des valeurs suivantes :
|
2 | ExceptionCode | Raison pour laquelle l’exception s’est produite. Pour obtenir la liste des valeurs, consultez EXCEPTION_RECORD. |
3 | RelativeFaultingAddress | Adresse où l’exception s’est produite. |
4 | CrashingModuleName | Nom du pilote qui a déclenché l’exception. |
5 | CrashingFileVersion | Version framework du pilote. |
6 | LastDriverName | Nom du premier composant de pilote non-UMDF dans la pile de pilotes. |
7 | LastDriverVersion | Numéro de version du premier composant de pilote non-UMDF dans la pile de pilotes. |
8 | UMDFVersion | Spécifie la version des bibliothèques UMDF actuellement utilisées. Notez qu’il peut s’agir d’une version ultérieure à celle du système d’exploitation si l’utilisateur a pris des mesures pour mettre à jour les bibliothèques du framework. |
9 | HardwareId | À compter de Windows 8, l’ID matériel est fourni dans un fichier distinct. Dans ce cas, l’infrastructure définit cette valeur sur Dumped Separately. |
Champs WUDFVerifierFailure
Le tableau suivant décrit les valeurs possibles pour les champs d’un rapport de type WUDFVerifierFailure.
Index | Nom | Valeurs |
---|---|---|
0 | EventClass | L’infrastructure définit cette valeur sur VerifierFailure. |
1 | FoundBy | L’infrastructure définit cette valeur sur Framework. |
2 | Category | Ce champ contient l’une des valeurs suivantes :
|
3 | ErrorNumber | À usage interne uniquement |
4 | Emplacement | À usage interne uniquement |
5 | Pilote | Nom du module de pilote qui a échoué. |
6 | CallerAddress | Adresse de la routine qui a lancé la génération du rapport. |
7 | UMDFVersion | Spécifie la version des bibliothèques UMDF actuellement utilisées. Notez qu’il peut s’agir d’une version ultérieure à celle du système d’exploitation si l’utilisateur a pris des mesures pour mettre à jour les bibliothèques du framework. |
8 | HardwareId | À compter de Windows 8, l’ID matériel est fourni dans un fichier distinct. Dans ce cas, l’infrastructure définit cette valeur sur Dumped Separately. |