Доступ к метаданным UMDF в отчетах WER
В этом разделе описывается расположение и содержимое отчетов отчеты об ошибках Windows (WER), создаваемых операционной системой при сбое User-Mode Driver Framework (UMDF).
Система создает отчеты WER для трех различных типов событий UMDF: WUDFHostProblem, WUDFUnhandledException и WUDFVerifierFailure.
Когда отражатель завершает процесс узла драйвера, иногда из-за превышения порогового значения времени ожидания узла , система создает файл Report.wer, содержащий сведения о WER. В частности, Report.wer содержит метаданные UMDF, которые могут быть полезны при попытке отладки драйвера UMDF без доступа к динамическому целевому объекту отладки.
В Windows 8.1 файл Report.wer можно найти в каталоге C:\ProgramData\Microsoft\Windows\WER\ReportQueue. В этом каталоге откройте последнюю папку NonCritical_HostProblem_* и найдите Report.wer.
Вы также можете получить доступ к отчетам WER для UMDF с помощью следующей команды PowerShell:
get-winevent -providername "Windows Error Reporting" | where-object {$_.Message -like "*wudf*"} | format-list | out-file UmdfReports.txt
Пример отчета WUDFHostProblem
Ниже приведен пример отчета UMDF WER типа WUDFHostProblem. Он был получен из каталога ReportQueue, описанного выше. Если вы используете PowerShell для получения отчетов, поля могут быть помечены как P0, P1, P2 вместо Sig[0], Sig[1], Sig[2]. В противном случае поля будут одинаковыми и содержат одинаковые возможные значения. Этот пример был создан на основе одного из примеров WDK, использующих эталонную плату оборудования 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
Поля WUDFHostProblem
В следующей таблице описаны возможные значения полей в отчете типа WUDFHostProblem.
Индекс | Имя | Значения |
---|---|---|
0 | EventClass | Платформа задает это значение HostProblem. |
1 | Проблема | Это поле содержит одно из следующих значений:
|
2 | DetectedBy | Содержит одно из следующих значений перечисления: cpp
WdfComponentInvalid = 0,
WdfComponentPlatform,
WdfComponentReflector,
WdfComponentDriverManager,
WdfComponentHost,
WdfComponentFramework,
WdfComponentTest,
WdfComponentMax
|
3 | UMDFVersion | Указывает версию библиотек UMDF, используемых в настоящее время. Обратите внимание, что это может быть более поздняя версия, чем в операционной системе, если пользователь принял меры по обновлению библиотек платформы. |
4 | ExitCode | Содержит одно из следующих значений перечисления: cpp
WdfHostExit_StillActive = 0x103,
WdfHostExit_CodeUnknown = 0x70000000,
WdfHostExit_InternalDriverStopReported,
WdfHostExit_InternalDriverStopReportFailed,
WdfHostExit_ExternalTermination
WdfHostExit_StillActive указывает, что хост-процесс выполнялся во время создания отчета об ошибках платформой. |
5 | Операция | Содержит одно из следующих значений перечисления: 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 | Сообщение | Первая цифра этого поля всегда имеет значение 1, что указывает на то, что в операции участвует IRP. Последующие пары цифр обозначают MajorFunction и MinorFunction IRP соответственно. Например, в приведенном выше примере отчета это поле содержит значение 11b00. Это означает, что операция была IRP, которую отражатель обрабатывал от имени ведущего процесса драйвера с основным значением функции IRP_MJ_PNP и дополнительным значением функции IRP_MN_START_DEVICE (1 = сообщение IRP, 1b = IRP_MJ_PNP, 00 = IRP_MN_START_DEVICE). |
7 | Состояние | Платформа всегда задает этому значению значение 0xffffffff. |
8 | HardwareId | Это поле содержит идентификатор оборудования устройства, связанного с драйвером, в котором возникла проблема. |
Поля WUDFUnhandledException
В следующей таблице описаны возможные значения полей в отчете типа WUDFUnhandledException.
Индекс | Имя | Значения |
---|---|---|
0 | EventClass | Платформа задает это значение UnhandledException. |
1 | Компонент | Это поле содержит одно из следующих значений:
|
2 | ExceptionCode | Причина возникновения исключения. Список значений см. в разделе EXCEPTION_RECORD. |
3 | RelativeFaultingAddress | Адрес, по которому возникло исключение. |
4 | CrashingModuleName | Имя драйвера, который вызвал исключение. |
5 | CrashingFileVersion | Версия драйвера платформы. |
6 | LastDriverName | Имя первого компонента драйвера, отличного от UMDF, в стеке драйверов. |
7 | LastDriverVersion | Номер версии первого компонента драйвера, отличного от UMDF, в стеке драйверов. |
8 | UMDFVersion | Указывает версию библиотек UMDF, используемых в настоящее время. Обратите внимание, что это может быть более поздняя версия, чем в операционной системе, если пользователь принял меры по обновлению библиотек платформы. |
9 | HardwareId | Начиная с Windows 8 идентификатор оборудования предоставляется в отдельном файле. В этом случае платформа устанавливает для этого значения значение Dumped Отдельно. |
Поля WUDFVerifierFailure
В следующей таблице описаны возможные значения полей в отчете типа WUDFVerifierFailure.
Индекс | Имя | Значения |
---|---|---|
0 | EventClass | Платформа задает для этого значения значение VerifierFailure. |
1 | FoundBy | Платформа задает для этого значения значение Framework. |
2 | Категория | Это поле содержит одно из следующих значений:
|
3 | Номер ошибки | Только для внутреннего использования. |
4 | Расположение | Только для внутреннего использования. |
5 | Драйвер | Имя модуля драйвера, который завершился сбоем. |
6 | CallerAddress | Адрес подпрограммы, которая инициировала создание отчета. |
7 | UMDFVersion | Указывает версию библиотек UMDF, используемых в настоящее время. Обратите внимание, что это может быть более поздняя версия, чем в операционной системе, если пользователь принял меры по обновлению библиотек платформы. |
8 | HardwareId | Начиная с Windows 8 идентификатор оборудования предоставляется в отдельном файле. В этом случае платформа устанавливает для этого значения значение Dumped Отдельно. |