Как включить отладку драйвера UMDF

Для отладки драйвера User-Mode Driver Framework (UMDF) во время разработки можно использовать следующие конфигурации. Все конфигурации включают два компьютера, узел и целевой объект.

  • Скопируйте драйвер вручную в целевой объект. Выполните отладку в пользовательском режиме в целевом объекте. В этом сценарии вы вручную подключаетесь к экземпляру процесса узла драйвера, выполняемого в целевом устройстве.
  • Вручную скопируйте драйвер в целевой объект и выполните отладку в режиме ядра с узла.

Рекомендуется выполнять все тестирование и разработку драйверов UMDF с подключенным отладчиком ядра.

Рекомендации

Рекомендуется выполнять все тесты драйверов UMDF с подключенным отладчиком ядра.

Рекомендуется использовать следующие параметры. Эти параметры можно задать вручную или использовать средство управления средствами управления WDF (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

Использование WinDbg для подключения вручную (отладка в пользовательском режиме)

На целевом компьютере можно вручную подключить WinDbg к экземпляру WUDFHost, на котором размещен драйвер. Когда вы подключаетесь, вы входите в отладчик и можете задать точки останова в драйвере.

Так как инициализация драйвера происходит вскоре после загрузки WUDFHost, вы не можете подключиться вручную к отладке кода инициализации. Вместо этого задайте значение реестра, чтобы процесс узла ждал некоторое количество секунд при инициализации узла или времени загрузки драйвера. Эта задержка позволяет подключить WinDbg к правильному экземпляру процесса WUDFHost.

Выполните следующие действия.

  1. В реестре на целевом компьютере установите для HostProcessDbgBreakOnStart или HostProcessDbgBreakOnDriverLoad значение в секундах и перезагрузите компьютер.
  2. На целевом компьютере откройте WinDbg от имени администратора.
  3. В меню "Файл" выберите "Присоединить к процессу". Выберите По исполняемому файлу и найдите все процессы, имеющие имя WUDFHost.exe (их может не быть). Если есть какие-либо процессы с именем WUDFHost.exe, запишите их идентификаторы процесса для последующей ссылки.
  4. В диспетчере устройств включите драйвер.
  5. Повторите шаг 2 и найдите новую инстанцию WUDFHost.exe. Если новый экземпляр WUDFHost.exeне отображается, нажмите кнопку "Отмена" и снова нажмите кнопку "Присоединить к процессу ". При поиске нового экземпляра WUDFHost.exeвыберите его и нажмите кнопку "ОК".

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

Чтобы использовать режим отладки, используйте параметр F5 в Visual Studio или задайте значения DebugModeFlags и DebugModeBinaries в реестре.

Подробные сведения о значениях реестра UMDF см. в разделе "Значения реестра" для отладки драйверов WDF (KMDF и UMDF).

Использование WinDbg для удаленной отладки с хост-компьютера (отладка в режиме ядра)

На удаленном узле установите сеанс отладки в режиме ядра. Затем задайте текущий процесс экземпляру Wudfhost, на котором размещен драйвер. Если вы выполняете отладку из удаленного отладчика ядра, установите HostProcessDbgBreakOnDriverStart или HostProcessDbgBreakOnDriverLoad в 0x80000000, чтобы не указывать время ожидания, но перейти в отладчик ядра.

Необходимые действия:

  1. Отключение пула. Включите DebugModeFlags и укажите драйвер в DebugModeBinaries.

  2. Если драйвер использует UMDF 1.11 или более поздней версии, hostFailKdDebugBreak включен по умолчанию. Пропустите этот шаг.

    Если драйвер использует UMDF 1.9 или более ранней версии, установите для параметра HostFailKdDebugBreak значение 1.

  3. При отладке проблем, связанных с истечением времени ожидания, отключите HostProcessDbgBreakOnDriverStart и HostProcessDbgBreakOnDriverLoad. (Если HostProcessDbgBreakOnDriverStart или HostProcessDbgBreakOnDriverLoad не является нулевым, фреймворк отключает время ожидания, чтобы отражатель не завершает процесс, пока отладчик пользовательского режима подключен к хост-процессу.) Если вам нужно отладить код инициализации драйвера, вместо использования этих двух значений попробуйте выполнить следующую команду в WinDbg перед загрузкой вашего драйвера: sxe ld:MyDriver.dll (разрыв при загрузке модуля)

  4. Перезагрузите, если вы внесли изменения в реестр.

  5. В зависимости от выборов, сделанных на предыдущих шагах, удаленный отладчик ядра останавливается при загрузке или выгрузке драйвера на целевой системе.