Устранение сбоев драйвера 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.