Устранение неполадок при сбое драйвера UMDF 2.0
Начиная с User-Mode Driver Framework (UMDF) версии 2, для отладки драйвера UMDF можно использовать подмножество команд расширения отладчика, реализованных в Wdfkd.dll. В этой статье описываются команды, которые можно использовать для устранения неполадок с драйвером 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!
Используйте !analyze , чтобы отобразить сведения о сбое и другие команды расширения UMDF, которые можно попробовать. Эта команда может помочь при сбоях средства проверки UMDF или необработанных исключениях UMDF. Его можно использовать для динамической отладки ядра или отладки файлов аварийного дампа пользователей из %ProgramData%\Microsoft\WDF.
Используйте 0x1f wudfhost.exe!process 0 , чтобы получить список всех процессов узла драйвера Wudfhost.exe, включая сведения о стеке потоков.
Вы также можете использовать !wdfkd.wdfumtriage и !wdfkd.wdfldr для отображения всех драйверов, которые в настоящее время привязаны к WDF. При выборе имени образа драйвера UMDF отладчик отображает адрес процесса размещения. Затем можно выбрать адрес процесса, чтобы отобразить сведения, относящиеся к конкретному процессу.
При необходимости используйте .process /r /p Process , чтобы переключить контекст процесса на контекст процесса Wudfhost, в котором размещается драйвер. Используйте .cache forcedecodeuser и lmu , чтобы убедиться, что драйвер размещен в текущем процессе.
Изучите стеки вызовов потока (!thread Address), чтобы определить, истекло ли время ожидания обратного вызова драйвера. Посмотрите на число тактов для потоков. В Windows 8.1 время ожидания отражателя истекает через одну минуту.
Используйте MyDriver.dll 0x10 !wdfkd.wdfdriverinfo для отображения дерева устройств в подробной форме. Затем выберите !wdfdevice. Эта команда отображает подробные сведения о состоянии питания, политики питания и Plug and Play (PnP).
Используйте !wdfkd.wdfumirps для поиска ожидающих irP.
Используйте !wdfkd.wdfdevicequeues для проверка состояния очередей драйвера.
В сеансе отладки в режиме ядра для отображения журнала трассировки можно использовать .wmitrace.logdump WudfTrace .
Отображение журнала IFR UMDF 2.0
В сеансе отладки в режиме ядра можно использовать команду расширения !wdfkd.wdflogdump , чтобы отобразить записи журнала Windows Driver Frameworks (WDF) In-Flight Recorder (IFR), если они доступны.
Поиск файлов дампа памяти
Сведения о поиске файлов дампа в пользовательском режиме см. в статье Определение причин, по которой отражатель завершил хост-процесс . Сведения о том, как задать значение реестра LogMinidumpType для указания типа сведений, хранящихся в файле минидампа, см. в статье Использование трассировки программного обеспечения WPP в драйверах UMDF.