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


Запись трассировки событий USB с помощью Logman

В этой статье содержатся сведения об использовании средства Logman для записи трассировки событий ТРАССИРОВКИ СОБЫТИЙ WINDOWS ЧЕРЕЗ USB. Logman — это средство трассировки, встроенное в Windows. Logman можно использовать для записи событий в файл журнала трассировки событий.

Предварительные требования

Файлы журналов трассировки событий могут увеличиваться очень быстро, но файл журнала меньшего размера проще в навигации и передаче. Прежде чем начать трассировку, попробуйте выполнить следующие действия, чтобы исключить лишние события из журнала, чтобы вы могли сосредоточиться на действиях устройства, которые вы хотите изучить:

  • Отключите все некритичные USB-устройства, которые не являются интересующими устройствами. Меньшее количество устройств приводит к уменьшению количества трассировок, что упрощает чтение и анализ.
  • Если в системе есть USB-клавиатура или мышь, введите команды трассировки с помощью удаленного рабочего стола.
  • Максимально сузьте начальную и конечную части трассировки вокруг интересующих операций.
  • Если вас интересует только определенная категория событий USB, можно использовать ключевые слова для фильтрации записанных событий. Дополнительные сведения см. в подразделе "Примечания".

Трассировки событий из стека драйверов USB 3.0 аналогичны трассировкам стека драйверов USB 2.0, которые появились в Windows 7. Трассировки событий из стека драйверов USB 2.0 можно записать на Windows 8 компьютере. Способ записи трассировок событий из стеков драйверов USB 2.0 и USB 3.0 аналогичен. Вы можете записывать события из стека драйверов USB 2.0 или USB 3.0 независимо друг от друга. При подключении устройства USB 2.0 к хост-контроллеру USB 3.0 вы получаете трассировки событий из стека драйверов USB 3.0. В этом случае вы увидите новые события стека драйверов USB 3.0 для устройства USB 2.0.

Instructions

Сбор событий трассировки USB

  1. Откройте окно командной строки с правами администратора. Для этого выберите Пуск, введите cmd в поле поиска, выберите и удерживайте (или щелкните правой кнопкой мыши) cmd.exe, а затем выберите Запуск от имени администратора.

  2. В окне командной строки введите следующие команды, чтобы начать сеанс записи:

    logman create trace -n usbtrace -o %SystemRoot%\Tracing\usbtrace.etl -nb 128 640 -bs 128
    logman update trace -n usbtrace -p Microsoft-Windows-USB-USBXHCI (Default,PartialDataBusTrace)
    logman update trace -n usbtrace -p Microsoft-Windows-USB-UCX (Default,PartialDataBusTrace)
    logman update trace -n usbtrace -p Microsoft-Windows-USB-USBHUB3 (Default,PartialDataBusTrace)
    logman update trace -n usbtrace -p Microsoft-Windows-USB-USBPORT
    logman update trace -n usbtrace -p Microsoft-Windows-USB-USBHUB
    logman update trace -n usbtrace -p Microsoft-Windows-Kernel-IoTrace 0 2
    logman start -n usbtrace
    
    

    После выполнения каждой из этих команд отображается logman. The command completed successfully.

  3. Выполните операции, которые необходимо записать. Например, чтобы записать события для перечисления устройств, можно подключить USB-устройство флэш-памяти, которое отображается как "Неизвестное устройство" в диспетчер устройств. Не закрывайте окно командной строки.

  4. Остановите сеанс после завершения сценария. Введите следующие команды, чтобы завершить сеанс записи:

    Вы можете остановить сбор событий USB-концентратора и портов, выполнив следующую команду:

    logman stop -n usbtrace
    logman delete -n usbtrace
    move /Y %SystemRoot%\Tracing\usbtrace_000001.etl %SystemRoot%\Tracing\usbtrace.etl
    
    

Предыдущий сеанс записи создает файл ETL с именем usbtrace.etl. Файл трассировки хранится в папке %SystemRoot%\Tracing\usbtrace.etl (C:\Windows\Tracing\usbtrace.etl). Переместите файл в другое расположение или переименуйте его, чтобы избежать его перезаписи при записи следующего сеанса.

Файл содержит трассировки событий из стеков драйверов USB 3.0 и USB 2.0. Если вы хотите сократить трассировки событий только до одного стека драйверов USB, удалите другой стек драйверов из следующего сеанса трассировки. Это можно сделать, изменив последовательность команд, показанную на шаге 2, чтобы удалить строки logman update, соответствующие стеку драйверов, который требуется удалить из сеанса трассировки.

Комментарии

Фильтры записи для событий стека драйверов USB 3.0

Обратите внимание на ключевые слова ETW, такие как Default и PartialDataBusTrace , в командах записи Logman. Эти слова являются ключевыми словами трассировки событий Windows, которые указывают типы событий, которые требуется просмотреть. Ключевые слова трассировки событий Windows можно использовать для фильтрации событий, записываемых USB-драйверами в журнал трассировки, и настройки объема сведений о событиях, собранных из стека драйверов USB 3.0. Сохраняются события, соответствующие любому из ваших ключевых слов. Обратите внимание, что этот метод фильтрации предназначен для использования во время записи, а не во время анализа.

Вы можете фильтровать события по ключевым словам в зависимости от ваших требований. Ниже приведены ключевые слова для фильтрации событий стека драйверов USB 3.0:

ключевое слово трассировки событий Windows Описание
Default Показывает события, полезные для общего устранения неполадок. События похожи на события ТРАССИРОВКИ СОБЫТИЙ WINDOWS USB 2.0, но не включают события передачи по USB.
StateMachine Показывает переходы между драйвером и внутренним конечным автоматом. События не включаются в ключевое слово по умолчанию.
Изношенном Отображает события сведений об устройстве в начале трассировки и записывает начальное состояние ДЕРЕВА USB. Сведения об устройстве События Rundown важны для сохранения, чтобы трассировка содержала сведения о подключенных устройствах, например о дескрипторах USB и описании USB-устройства. Эти события включены в ключевое слово по умолчанию. Если вы не используете ключевое слово по умолчанию, следует использовать ключевое слово Rundown. Остальные события Rundown предоставляют сведения о последних переходах состояния внутренних компьютеров с драйвером. Эти события включены в ключевое слово StateMachine.
Power Показывает подмножество событий по умолчанию . Показывает события перехода питания устройства.
IRP Показывает подмножество событий по умолчанию . События отображают irp из драйвера клиента и irP, полученные в результате запросов в пользовательском режиме. Однако допустимые запросы передачи по USB (URB) не отображаются с ключевое слово IRP, и для их отображения требуются headersBusTrace, PartialDataBusTrace или FullDataBusTrace.
HeadersBusTrace Отображает все события передачи по USB, но не сохраняет пакеты данных.
PartialDataBusTrace Отображает все события передачи по USB и сохраняет ограниченную полезную нагрузку данных шины.
FullDataBusTrace Отображает все события передачи по USB и сохраняет до 4 КБ данных шины для массовой передачи данных, прерываний и управления. Обратите внимание, что регистрируется только первый буфер цепочки MDL. Данные изохронной шины никогда не регистрируются (хотя структура запроса URB_ISOCH_TRANSFER сохраняется). Дополнительные сведения см. в разделах Отправка цепочек MDL и Передача данных в изохронные конечные точки USB.
HWVerifyHost Показывает подмножество событий по умолчанию . События указывают, когда возникает ошибка на оборудовании контроллера УЗЛА USB.
HWVerifyHub Показывает подмножество событий по умолчанию . События указывают, когда возникает ошибка в оборудовании КОНЦЕНТРАТОРа USB.
HWVerifyDevice Показывает подмножество событий по умолчанию . События указывают, когда происходит ошибка на оборудовании USB-устройства.

В качестве примера ниже приведена последовательность команд, которые запускают сеанс для записи переходов питания USB-устройства. Из-за выбора поставщиков (стек драйверов USB 3.0) события регистрируются только для устройств, подключенных ниже контроллера узла USB 3.0.

logman create trace -n usbtrace -o %SystemRoot%\Tracing\usbtrace.etl -nb 128 640 -bs 128
logman update trace -n usbtrace -p Microsoft-Windows-USB-USBXHCI (Rundown,Power)
logman update trace -n usbtrace -p Microsoft-Windows-USB-UCX (Rundown,Power)
logman update trace -n usbtrace -p Microsoft-Windows-USB-USBHUB3 (Rundown,Power)
logman update trace -n usbtrace -p Microsoft-Windows-Kernel-IoTrace 0 2
logman start -n usbtrace

Отслеживание фильтров для событий питания

Полезным ключевое слово etW для USB-устройств является флаг PowerDiagnostics драйвера USB-порта. При использовании этого ключевое слово драйвер порта регистрирует сведения о контроллере узла и конечной точке, но пропускает все события, описывающие передачу. Если вам не нужно просматривать события передачи, можно использовать ключевое слово PowerDiagnostics, чтобы уменьшить размер журнала трассировки на целых 85 процентов. Укажите ключевое слово PowerDiagnostics при запуске трассировки, как показано в следующем примере:

Logman start Usbtrace -p Microsoft-Windows-USB-USBPORT PowerDiagnostics -o usbtrace.etl -ets -nb 128 640 -bs 128

Logman update Usbtrace -p Microsoft-Windows-USB-USBHUB –ets

Если в отфильтрованном журнале трассировки имеется много событий асинхронного расписания контроллера узла, их можно отфильтровать при просмотре журнала с помощью фильтра Netmon, как показано в следующем примере:

NOT (Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Host Controller Async Schedule Enable"
OR Description == "USBPort_MicrosoftWindowsUSBUSBPORT:Host Controller Async Schedule Disable")

Дополнительные сведения о фильтрах Netmon см. в разделе "Фильтры USB Netmon" статьи Пример. Устранение неполадок с неизвестным USB-устройством с помощью ETW и Netmon.

Иногда бывает полезно включить события передачи в журнал трассировки, например запросы концентратора и запросы устройств, которые приводят к ошибкам, таким как ошибка XACT или приостановка. Сначала можно записать журнал без событий передачи и проанализировать этот журнал меньшего размера. Затем снова запустите трассировку без фильтрации после получения общего представления о проблемах в вашем сценарии проблемы.