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


Использование трассировки программного обеспечения WPP в драйверах UMDF

Программная трассировка WPP позволяет добавлять сообщения трассировки, помогающие отлаживать драйвер. Кроме того, средство ведения журнала событий платформы предоставляет сотни сообщений трассировки, которые можно просматривать.

Сообщения трассировки можно просматривать с помощью TraceView или Tracelog. Сообщения трассировки также можно отправлять в отладчик ядра.

Добавление сообщений трассировки в драйвер

Чтобы добавить сообщения трассировки в драйвер на основе платформы, необходимо:

  • Добавьте директиву #include в каждый исходный файл драйвера, содержащий любой из макросов WPP. Эта директива должна определить файл заголовка сообщения трассировки (TMH). Имя файла должно иметь формат <driver-source-file-name.tmh>.

    Например, если драйвер состоит из двух исходных файлов с именем MyDriver1.c и MyDriver2.c, myDriver1.c должен содержать:

    #include "MyDriver1.tmh"

    и MyDriver2.c должны содержать:

    #include "MyDriver2.tmh"

    При сборке драйвера в Microsoft Visual Studio препроцессор WPP создает TMH-файлы.

  • Определите макрос WPP_CONTROL_GUIDS в файле заголовка. Этот макрос определяет GUID и флаги трассировки для сообщений трассировки драйвера. (Для каждого из примеров драйверов WDK на основе UMDF файл заголовка Internal.h содержит этот макрос.)

  • Включите макрос WPP_INIT_TRACING в подпрограмму DllMain драйвера. Этот макрос активирует трассировку программного обеспечения в драйвере. (Для каждого примера драйверов WDK на основе UMDF файл заголовка DllSup.h содержит этот макрос.)

  • Включите макрос WPP_CLEANUP в подпрограмму DllMain драйвера. Этот макрос отключает трассировку программного обеспечения в драйвере. (Для каждого примера драйверов WDK на основе UMDF файл заголовка DllSup.h содержит этот макрос.)

  • Используйте макрос DoTraceMessage или настраиваемую версию макроса в драйвере для создания сообщений трассировки. (Для каждого из примеров драйверов WDK на основе UMDF файл заголовка Internal.h содержит настраиваемый макрос.)

  • Откройте страницы свойств для проекта драйвера. Щелкните правой кнопкой мыши проект драйвера в Обозреватель решений и выберите Свойства. На страницах свойств драйвера выберите Свойства конфигурации, а затем Wpp. В меню Общие установите для параметра Запуск трассировки WPP значение Да. В меню Параметры файла также следует указать файл шаблона WPP платформы, например:

    {km-WdfDefault.tpl}*.tmh
    

Дополнительные сведения о добавлении сообщений трассировки в драйвер см. в статье Добавление макросов WPP в драйвер.

Примеры драйверов, использующих трассировку программного обеспечения WPP

Все примеры драйверов на основе UMDF в WDK предоставляют файлы DllSup.h, Internal.h и Sources, которые обеспечивают трассировку программного обеспечения WPP. Большинство из этих примеров драйверов также используют настраиваемый макрос для создания сообщений трассировки.

Просмотр сообщений трассировки драйвера

Если вы добавили сообщения трассировки в драйвер, драйвер является поставщиком трассировки. Для управления сеансом трассировки и создания журнала трассировки можно использовать контроллер трассировки, например Tracelog. Для просмотра сообщений можно использовать потребитель трассировки, например Tracefmt.

Дополнительные сведения об использовании средств трассировки программного обеспечения см. в разделе Обзор средств трассировки программного обеспечения.

Просмотр журнала трассировки UMDF

Файл журнала UMDF находится в %ProgramData%*\\Microsoft\\WDF.

Файл журнала UMDF можно просмотреть с помощью TraceView или Tracelog. Для обоих средств требуются файлы формата сообщений трассировки (TMF), которые форматируют сообщения журнала трассировки. Файлы TMF доступны в WDK в подкаталоге \tools\tracing. (В TraceView UMDF отображается как именованный поставщик с именем "Трассировка UMDF-Framework" или "Трассировка платформы" в зависимости от версии UMDF.)

Средство проверки WDF позволяет отправлять сообщения трассировки как в журнал трассировки UMDF, так и в отладчик ядра. (Сообщения трассировки не следует отправлять в отладчик ядра с помощью параметра -kd в Tracelog, так как Tracelog может нарушить ведение журнала трассировки в UMDF.)

Вы также можете использовать расширение отладчика !wmitrace для просмотра сообщений трассировки в отладчике:

  1. В WinDbg подключитесь к экземпляру WUDFHost, на котором размещен драйвер. Дополнительные сведения см. в разделе Включение отладки драйвера UMDF.

  2. Если драйвер использует версию 1.11 или более позднюю, а вы используете отладчик ядра из Windows 8 или более поздней версии, этот шаг можно пропустить. Если драйвер использует версию UMDF более ранней, чем 1.11, используйте !wmitrace.tmffile или !wmitrace.searchpath , чтобы указать формат сообщения трассировки (TMF- файл) для конкретной платформы или путь к TMF-файлу. TMF-файлы находятся в подкаталогах конкретной платформы в WDK.

  3. Используйте команду !wmitrace.logdump , чтобы отобразить содержимое буферов трассировки:

    !wmitrace.logdump WudfTrace
    

Управление сообщениями трассировки

Вы можете управлять сообщениями трассировки UMDF с помощью пользовательского интерфейса, предоставляемого WDF Verifier , или путем изменения значений реестра. По возможности следует использовать интерфейс средства проверки WDF , так как значения реестра могут измениться в будущих версиях UMDF. Кроме того, вы не должны получать доступ к этим значениям в INF-файлах или коде драйвера.

В настоящее время можно изменить следующие значения реестра, которые находятся в разделе реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF:

  • Значение LogEnable определяет, создает ли UMDF журнал трассировки для драйвера. Если это значение равно 1, UMDF создает журнал трассировки.

  • Значение LogLevel определяет объем сведений, содержащихся в сообщениях трассировки UMDF. Значение по умолчанию для LogLevel равно 3, что приводит к тому, что сообщения трассировки UMDF будут содержать сообщения об ошибках и предупреждениях. Задайте для этого значения значение 7, чтобы включить сообщения об ошибках и предупреждениях, а также информационные сообщения без ошибок. Задайте для него значение 15, чтобы включить все сведения трассировки, которые может предоставить UMDF.

  • Значение LogKd определяет, отправляет ли UMDF сообщения трассировки в отладчик ядра. Если параметр LogKd имеет значение 1, UMDF отправляет сообщения трассировки в отладчик ядра.

  • Значение LogFlushPeriodSeconds указывает, как часто в секундах сообщения трассировки записываются в журнал трассировки.

  • Значение LogMinidumpType содержит флаги, указывающие тип сведений, которые будут содержаться в файле мини-дампа, если он создан. Дополнительные сведения об этих флагах см. в перечислении MINIDUMP_TYPE .

Дополнительные значения реестра можно найти в разделе реестра HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF. Эти значения изменять не следует.