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


Устранение сбоев драйвера UMDF 2.0

Начиная с версии 2 User-Mode Driver Framework (UMDF) можно использовать подмножество команд расширения отладчика, реализованных в Wdfkd.dll для отладки драйвера UMDF. В этой статье описаны команды, которые можно использовать для устранения неполадок с драйвером UMDF.

Определение причины сбоя драйвера UMDF 2.0

Если хост-процесс драйвера завершается, в вашем драйвере может возникнуть проблема в обратном вызове, что приведет к превышению порогового значения времени ожидания хоста . В данном случае рефлектор завершает процесс выполнения узла драйвера.

Для изучения сначала настройте сеанс отладки в режиме ядра, как описано в разделе Как включить отладку драйвера UMDF. Настоятельно рекомендуется выполнять всю разработку и тестирование драйвера UMDF с подключенным к тестовой системе отладчиком ядра, а также включив средство проверки приложений (AppVerif.exe) на WUDFHost.exe. Используйте следующую команду, подключите отладчик ядра и перезагрузите его.

AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe
  • Если задан HostFailKdDebugBreak, рефлектор входит в отладчик в режиме ядра при превышении порогового значения времени ожидания. В выходных данных отладчика вы увидите несколько предложений о начале работы, включая ссылки, которые можно выбрать. Рассмотрим пример.

    **** Problem detected in UMDF driver "WUDFOsrUsbFx2". !process 0xFFFFE0000495B080 0x1f, !devstack 0xFFFFE000032BFA10, Problem code 3 ****
    **** Dump UMDF driver image name and stack: !wdfkd.wdfumdevstack 0x000000BEBB49AE20
    **** Dump UM Irps for this stack: !wdfkd.wdfumirps 0x000000BEBB49AE20
    **** Dump UMDF trace log: !wmitrace.logdump WUDFTrace
    **** Helpful UMDF debugger extension commands: !wdfkd.wdfhelp
    **** Note that driver host process may get terminated if you go past this break, making it difficult to debug the problem!
    
  • Используйте !анализ для отображения сведений о сбое и других команд расширения UMDF, которые можно попробовать. Эта команда может помочь с ошибками проверяющего средства UMDF или необработанными исключениями UMDF. Его можно использовать для отладки работающего ядра в режиме реального времени или для отладки файлов дампа сбоев пользователей из %ProgramData%\Microsoft\WDF.

  • Используйте !process 0 0x1f wudfhost.exe для перечисления всех процессов узла драйвера Wudfhost.exe, включая сведения о стеке потоков.

    Вы также можете использовать !wdfkd.wdfumtriage и !wdfkd.wdfldr для отображения всех драйверов, привязанных к WDF. При выборе имени образа драйвера UMDF отладчик отображает адрес процесса размещения. Затем можно выбрать адрес процесса, чтобы отобразить сведения, относящиеся к процессу.

  • При необходимости используйте .process /r /p Process для переключения контекста процесса в процесс Wudfhost, на котором размещен драйвер. Используйте .cache forcedecodeuser и lmu, чтобы убедиться, что ваш драйвер размещен в текущем процессе.

  • Проверьте стеки вызовов потоков (!thread address) для определения времени ожидания обратного вызова драйвера. Посмотрите на число галок для потоков. В Windows 8.1 тайм-аут отражателя истекает через одну минуту.

  • Используйте !wdfkd.wdfdriverinfo MyDriver.dll 0x10 для отображения дерева устройств в подробном виде. Затем выберите !wdfdevice. Эта команда отображает подробные сведения о питании, политике управления питанием и состоянии Plug and Play (PnP).

  • Используйте !wdfkd.wdfumirps для поиска ожидающих IRPs.

  • Используйте !wdfkd.wdfdevicequeues, чтобы проверить состояние очередей драйвера.

  • В сеансе отладки в режиме ядра можно использовать !wmitrace.logdump WudfTrace для отображения журнала трассировки.

Отображение регистрационного журнала UMDF 2.0 IFR

В сеансе отладки в режиме ядра можно использовать команду расширения !wdfkd.wdflogdump для отображения записей журнала Windows Driver Frameworks (WDF) In-flight Recorder (IFR), если они доступны.

Поиск файлов дампа памяти

Для получения сведений о поиске дампов в режиме пользователя см. Определение причин завершения процесса узла рефлектором. Чтобы получить информацию о задании значения реестра LogMinidumpType для указания типа информации, хранящейся в мини-файле, см. использование трассировки программного обеспечения WPP в драйверах UMDF.