Поделиться через


Доступ к метаданным 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 Проблема

Это поле содержит одно из следующих значений:

  • HostFailure
  • SendFailure
  • HostTimeout
  • BadRequest
  • BadReply
  • HostFailure
  • Другое
  • HostDisconnect
  • LeakedHandle
  • InvalidInterruptState
  • IsrTimedOut
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 Компонент

Это поле содержит одно из следующих значений:

  • Недопустимо
  • Платформа
  • Reflector
  • DriverManager
  • Узел
  • Инфраструктура
  • Тест
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 Категория

Это поле содержит одно из следующих значений:

  • Внутренние
  • Драйвер
  • Caller
  • Внешняя
  • UnhandledException
3 Номер ошибки Только для внутреннего использования.
4 Расположение Только для внутреннего использования.
5 Драйвер Имя модуля драйвера, который завершился сбоем.
6 CallerAddress Адрес подпрограммы, которая инициировала создание отчета.
7 UMDFVersion

Указывает версию библиотек UMDF, используемых в настоящее время. Обратите внимание, что это может быть более поздняя версия, чем в операционной системе, если пользователь принял меры по обновлению библиотек платформы.

8 HardwareId

Начиная с Windows 8 идентификатор оборудования предоставляется в отдельном файле. В этом случае платформа устанавливает для этого значения значение Dumped Отдельно.