Включение отладки драйвера UMDF
Для отладки драйвера User-Mode Driver Framework (UMDF) во время разработки можно использовать следующие конфигурации. Все конфигурации включают два компьютера: узел и целевой объект.
- Вручную скопируйте драйвер в целевой объект. Выполните отладку в пользовательском режиме на целевом объекте. В этом сценарии подключение выполняется вручную к экземпляру хост-процесса драйвера, выполняемого в целевом объекте.
- Вручную скопируйте драйвер в целевой объект, а затем выполните отладку в режиме ядра с узла.
Рекомендуется выполнять все тестирование и разработку драйверов UMDF с подключенным отладчиком ядра.
Рекомендации
Рекомендуется выполнять все тестирование драйвера UMDF с подключенным отладчиком ядра.
Ниже приведены рекомендуемые параметры. Их можно задать вручную или использовать средство WDF Verifier Control Application (WDFVerifier.exe) в WDK для просмотра или изменения этих параметров.
Включение проверки приложений на WUDFHost.exe:
AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe
При возникновении исключений средство проверки приложений отправляет диагностические сообщения отладчику и прерывает работу.
Если вы используете сеанс отладки в режиме ядра, задайте hostFailKdDebugBreak таким образом, чтобы отражатель прервался в отладчик в режиме ядра перед завершением процесса узла драйвера. Этот параметр включен по умолчанию, начиная с Windows 8.
Отключите пулы, задав для UmdfHostProcessSharing значение ProcessSharingDisabled. Дополнительные сведения см. в разделе Указание директив WDF в INF-файлах.
По умолчанию при сбое устройства UMDF платформа пытается перезапустить его до пяти раз. Вы можете отключить автоматический перезапуск, задав для debugModeFlags значение 0x01. Дополнительные сведения см. в разделе Значения реестра для отладки драйверов WDF.
Перезагрузите компьютер.
Сведения об отладке проблем с драйвером UMDF см. в статье Определение причины сбоя драйвера UMDF для отражателя и отладка драйвера UMDF
Использование WinDbg для присоединения вручную (отладка в пользовательском режиме)
На целевом компьютере можно вручную подключить WinDbg к экземпляру WUDFHost, на котором размещен драйвер. При подключении вы врываетесь в отладчик и можете задать точки останова в драйвере.
Так как инициализация драйвера происходит вскоре после загрузки WUDFHost, подключение вручную для отладки кода инициализации невозможно. Вместо этого можно задать значение реестра, чтобы хост-процесс ждал некоторое количество секунд во время инициализации узла или загрузки драйвера. Эта задержка дает время для присоединения WinDbg к правильному экземпляру процесса WUDFHost.
Выполните указанные ниже действия:
- В реестре на целевом компьютере установите для параметра HostProcessDbgBreakOnStart или HostProcessDbgBreakOnDriverLoad определенное количество секунд и перезагрузитесь.
- На целевом компьютере откройте WinDbg с правами администратора.
- В меню Файл выберите присоединиться к процессу. Выберите По исполняемому файлу и найдите все процессы с именами WUDFHost.exe (возможно, их нет). Если есть какие-либо процессы с именем WUDFHost.exe, запишите их идентификаторы для дальнейшего использования.
- В диспетчер устройств включите драйвер.
- Повторите шаг 2 и найдите новый экземпляр WUDFHost.exe. Если новый экземпляр WUDFHost.exe не отображается, нажмите кнопку Отмена и снова выберите присоединиться к процессу . Когда вы найдете новый экземпляр WUDFHost.exe, выберите его и нажмите кнопку ОК.
Если используется пул устройств и задано значение реестра HostProcessDbgBreakOnDriverLoad , могут возникнуть перерывы отладчика из-за загрузки других драйверов. Вы можете отключить пул устройств с помощью режима отладки UMDF.
Чтобы использовать режим отладки, используйте параметр F5 в Visual Studio или задайте значения DebugModeFlags и DebugModeBinaries в реестре .
Подробные сведения о значениях реестра UMDF см. в разделе Значения реестра для отладки драйверов WDF (KMDF и UMDF).
Использование WinDbg для удаленной отладки с хост-компьютера (отладка в режиме ядра)
На удаленном узле установите сеанс отладки в режиме ядра, а затем задайте текущий процесс для экземпляра Wudfhost, на котором размещен драйвер. При отладке из удаленного отладчика ядра можно задать для параметра HostProcessDbgBreakOnDriverStart или HostProcessDbgBreakOnDriverLoad значение 0x80000000, чтобы указать время ожидания, но включиться в отладчик ядра.
Выполните следующие действия.
Отключение пулов. включите DebugModeFlags и перечислите драйвер в DebugModeBinaries
Если драйвер использует UMDF 1.11 или более поздней версии, hostFailKdDebugBreak включен по умолчанию. Пропустите этот шаг.
Если драйвер использует UMDF 1.9 или более ранней версии, задайте для hostFailKdDebugBreak значение 1.
При отладке проблем, связанных с истечением времени ожидания, отключите HostProcessDbgBreakOnDriverStart и HostProcessDbgBreakOnDriverLoad. (Если значение HostProcessDbgBreakOnDriverStart или HostProcessDbgBreakOnDriverLoad не равно нулю, платформа отключает время ожидания, чтобы отражатель не прерывал работу узла, пока отладчик пользовательского режима подключен к хост-процессу.) Если вам нужно отладить код инициализации драйвера, вместо этих двух значений попробуйте выполнить следующую команду в WinDbg перед загрузкой драйвера: sxe ld:MyDriver.dll (прерывание при загрузке модуля).
Перезагрузите компьютер, если вы внесли какие-либо изменения в реестр.
В зависимости от выбранных ранее вариантов удаленный отладчик ядра должен прерываться при загрузке или выгрузке драйвера в целевом объекте.