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


Как включить отладку для драйвера 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. В зависимости от выбранных выше вариантов удаленный отладчик ядра должен останавливаться при загрузке или выгрузке драйвера на целевой системе.