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

В этой статье содержатся сведения об использовании средства Logman для записи трассировки событий USB ETW. 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.

Инструкции

Сбор событий трассировки 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%\Trace\usbtrace.etl (C:\Windows\Trace\usbtrace.etl). Переместите файл в другое расположение или переименуйте его, чтобы избежать перезаписи при записи следующего сеанса.

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

Замечания

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

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

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

Ключевое слово ETW Описание
По умолчанию Показывает события, полезные для общего устранения неполадок. События похожи на события ETW USB 2.0, но не включают события передачи USB.
StateMachine Отображает переходы компьютера с внутренним состоянием драйвера. События не включаются в ключевое слово Default .
Краткий обзор Отображает события информации об устройстве в начале трассировки и записывает начальное состояние USB-дерева. События запуска данных устройства важны для сохранения, чтобы трассировка содержала сведения, такие как дескрипторы USB и описание USB-устройства, подключенных устройств. Эти события включены в ключевое слово Default . Если ключевое слово по умолчанию не используется, следует использовать ключевое слово Rundown . Остальные события "Rundown" предоставляют сведения о последних переходах состояний внутренних конечных автоматов драйвера. Эти события включены в ключевое слово StateMachine .
Энергия Показывает подмножество событий по умолчанию . Показывает события перехода питания устройства.
IRP Показывает подмножество событий по умолчанию . В событиях отображаются IRP из драйвера клиента и IRP, полученные в результате запросов пользовательского режима. Однако допустимые запросы на передачу USB (URB) не отображаются с ключевым словом IRP и они требуют HeadersBusTrace, PartialDataBusTrace или FullDataBusTrace, чтобы они отображались.
HeadersBusTrace Отображает все события передачи USB, но не сохраняет пакеты данных.
PartialDataBusTrace Отображает все события передачи USB и сохраняет ограниченную нагрузку данных шины.
FullDataBusTrace Отображает все события передачи USB и сохраняет до 4 КБ данных шины для пакетной, прерывающей и управляющей передачи. Обратите внимание, что регистрируется только первый буфер цепочки MDL. Данные изохронной шины никогда не записываются (хотя структура запроса URB_ISOCH_TRANSFER сохраняется). Дополнительные сведения см. в статьях "Как отправлять цепочечные MDLs" и "Как передавать данные в изохронные 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-устройств — флаг драйвера USB-порта PowerDiagnostics. При использовании этого ключевого слова драйвер порта записывает информацию о хост-контроллере и конечной точке, но пропускает все события, описывающие передачу. Если вы не хотите видеть события передачи, можно использовать ключевое слово 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 или приостановка работы. Сначала можно записать журнал без событий передачи и проанализировать этот меньший журнал. Затем снова запустите трассировку без фильтрации после того, как у вас есть общее представление о проблемах в сценарии проблемы.