Showing posts with label etw. Show all posts
Showing posts with label etw. Show all posts

Thursday, 17 July 2014

USB EVENT TRACING - WINDOWS MESSAGE ANALYZER

WINDOWS MESSAGE ANALYZER:

INTRODUCTION

Windows Message Analyzer is a free tool provided by Microsoft which has combined capablities of event tracing and viewing the trace under one user interface. It is simpler to analyze USB event traces in Windows Message Analyzer.
In the previous method .etl generation is done separately using logman tool and .etl viewing is done separately through event viewer or network monitor or any other tools. So message analyzer combines these discrete steps into a single window and makes the process simpler. You can also use export option to view the same trace using network monitor as well if in case netmon is your prefered trace viewer.

DOWNLOADING WINDOWS MESSAGE ANALYZER

Follow this link Windows message analyzer download to download. The installation process is simple.

STEPS FOR USB TRACING

  • Open the Windows message analyzer and select 'capture/trace' option from the left pane.
  • From the 'trace scenarios' column we can select either USB 2.0 or USB 3.0.

  • As already known USB 3.0 tracing support (for XHCI) will only be provided by windows 8+ pc which has necessary trace providers.
  • Select the necessary trace providers from the list in 'trace scenario configuration' pane.
  • We can select the filter parameters for the particular trace provider using message type(information, error etc.) and keywords (parameters available for particular trace provider) from box below the trace scenario configuration pane.
  • Filters can also be added before starting an event trace in the 'trace filter' pane.
  • After all these configurations are complete, 'start with' button can be pressed to start the trace.
  • After starting the trace a new window with all trace information will open.

  • Restart, stop, pause options are available and can be used according to necessities.
  • There is also a filter option in this window which can be used to filter traced data.
  • Each and every message can be expanded to view the field data which contains the information about data packets and stack data which contains the event id, process id etc.
  • After finishing the tracing part, we can save it for future reference as .matp file for viewing it in message analyzer.
  • If you wish to view a particular trace using any other tools like netmon, export option should be used which saves the traced file as .cap.

TWO METHODS OF FILTERING

  • Right click button can be best utilized for filtering a trace according to particular parameters.
  • Right click can be used in any of the columns of the message window separately or inside the field and stack data.

COLUMN FILTERING

A rightclick in any one of the columns will filter according to data in that column. We can also add columns of our choice and then add a filter with the column data available. For example, we can add a column call usb device and filter messages from a particular usb device connected.



FIELD OR STACK FILTERING

A right click in any data on field or stack information will add the corresponding filter to the view filter box.



Comment and criticize our mistakes !!

-ARUN
Embedded Engineer

USB EVENT TRACING IN WINDOWS - USING LOGMAN AND NETMON

USB EVENT TRACING IS NOT COSTLY !!



Feeling bad about using licensed USB debugger tools ?!?! Actually you don't really have to. To start, we have to admit that microsoft provides best ever support in possible to trace what's happening at device driver levels and the big dark room inside which windows handled its driver activities are slowly thrown some light. Recently they have given many tools to trace at driver levels and debug our USB device and obviously many other device drivers given that your windows version has the particular trace provider. To start with, let us see about LOGMAN which is older yet very powerful tool for USB event tracing. 

LOGMAN:


This topic provides information about using the Logman tool to capture a USB ETW event trace. As a prequesite I request you to have a peep into the USB driver stack article to understand the basics. Logman is a tracing tool that is built into Windows. You can use Logman to capture events into an event trace log file.
Event trace log files can grow very quickly, but a smaller log file is easier to navigate and easier to transmit. Before you start a trace, consider taking the following steps to exclude extraneous events from the log so that you can focus on the device activity that you want to examine.
Remember following steps before using logman.
  • Disconnect any non-critical USB devices that are not the device of interest. Fewer devices result in smaller traces making it easier to read and analyze.
  • If your system has a USB keyboard or mouse, enter the trace commands by using Remote Desktop instead.
  • Narrow the start and the end of the trace as much as possible around the operations of interest.
  • If you are interested in only a certain category of USB events, you can use keywords to filter the events that are recorded.


STEPS TO CREATE .ETL FILE USING COMMAND PROMPT:

The following steps are followed,
  • Open an elevated command prompt ie., right click cmd.exe and run as administrator.
  • On typing logman we get the name of the current data collector set, its type and status if you have already created one. Otherwise the list is empty.
C:\Windows\system32>logman
Data Collector Set Type Status
---------------------------------------------------------------------------
The command completed successfully.
  • Now to start a new trace type the following,
C:\Windows\system32>logman create trace -n usbtrace -o %SystemRoot%\Tracing\usbtrace.etl -nb 128 640 -bs 128
The above command creates a data collector set named as 'usbtrace' with file path 'usbtrace.etl'. '-nb' command is to set minimum and maximum number of buffers and '-bs' is to set the buffer size in kilo bytes. '-h' will help us to understand more about usage of logman for different cases. The commands specified here are typical and works fine for usb event tracing.
  • After creating the data collector set, next step is to specify trace providers for it. The following commands will help.
Trace providers for windows 7 are 'Microsoft-Windows-USB-USBPORT' and 'Microsoft-Windows-USB-USBPORT'. We can trace USB 2.0 or 3.0 device activities at port level or hub level or both.

C:\Windows\system32>logman update trace -n usbtrace -p Microsoft-Windows-USB-USBPORT
C:\Windows\system32>logman update trace -n usbtrace -p Microsoft-Windows-USB-USBHUB

Trace providers for windows 8 are 'Microsoft-Windows-USB-USBXHCI', 
'Microsoft-Windows-USB-UCX' and 'Microsoft-Windows-USB-USBHUB3'. We can 
trace USB 2.0 or 3.0 device activities at extensible host controller 
(XHCI) level or the root hub level or the port level under the XHCI. We 
can still use 'Microsoft-Windows-USB-USBPORT' and 
'Microsoft-Windows-USB-USBPORT' trace providers windows 8 to trace USB 
2.0 devices under host controllers other than XHCI.  


C:\Windows\system32>logman update trace -n usbtrace -p Microsoft-Windows-USB-USBXHCI 
C:\Windows\system32>logman update trace -n usbtrace -p Microsoft-Windows-USB-UCX 
C:\Windows\system32>logman update trace -n usbtrace -p Microsoft-Windows-USB-USBHUB3 
  • Next step is to start the trace,
C:\Windows\system32>logman start -n usbtrace
  • After desired time interval to stop the trace,
C:\Windows\system32>logman stop -n usbtrace
  • To delete the particular trace provider so that we can use the same name next time,
C:\Windows\system32>logman delete -n usbtrace

NOTE: This command only deletes the data collector set and not the 
.etl file which is stored in the location 
"C:\Windows\system32\Tracing\usbtrace000001.etl" which we can move to 
any other location for future reference.


FILTERS FOR USB 3.0 DRIVER STACK EVENTS:

XHCI, HUB3 and UCX trace providers which trace USB 3.0 driver stack can be parameterized and thus can be filtered accordingly. They can hold the following parameters,

Default:
Shows events that are useful for general troubleshooting. The events are similar to USB 2.0 ETW events but do not include any USB transfer events.

StateMachine:
Shows driver-internal state machine transitions. The events are not included in the Default keyword.

Rundown:
Shows device information events at the beginning of the trace and captures the starting state of the USB tree. The device information Rundown events are important to save so that the trace contains details, such as the USB descriptors and USB Device Description, of connected devices. These events are included in the Default keyword. When you don’t use the Default keyword, you should use the Rundown keyword. The remaining Rundown events provide information on recent state transitions of the driver-internal state machines. These events are included in the StateMachine keyword.

Power:
Shows a subset of Default events. Shows device power transition events.

IRP:
Shows a subset of Default events. The events show IRPs from the client driver and IRPs resulting from user-mode requests. However, valid USB transfer (URB) requests are not shown with the IRP keyword, and require HeadersBusTrace, PartialDataBusTrace, orFullDataBusTrace in order to be shown.

HeadersBusTrace:
Shows all USB transfer events but doesn't save data packets.

PartialDataBusTrace:
Shows all USB transfer events and saves a limited payload of bus data.

FullDataBusTrace:
Shows all USB transfer events and saves up to 4 KB of bus data for bulk, interrupt, and control transfers. Note that only the first buffer of a chained MDL is logged. Isochronous bus data is never logged (though the URB_ISOCH_TRANSFER request structure is saved). For more information, see How to send chained MDLs and How to transfer data to USB isochronous endpoints.

HWVerifyHost:
Shows a subset of Default events. The events indicate when an error occurs in the USB host controller hardware.

HWVerifyHub:
Shows a subset of Default events. The events indicate when an error occurs in the USB hub hardware.

HWVerifyDevice:
Shows a subset of Default events. The events indicate when an error occurs in the USB device hardware.

example commands:

 C:\Windows\system32>logman update trace -n usbtrace -p Microsoft-Windows-USB-UCX (Default,PartialDataBusTrace)
 C:\Windows\system32>logman update trace -n usbtrace -p Microsoft-Windows-USB-USBHUB3 (Rundown,Power)

NOTE:

We can do the same process in windows 7 using Windows performance monitor by following these steps,
  • Goto start --> search --> performance monitor.
  • In the list available in the left pane, select 'data collector set' option
  • Right click 'user defined' slect new --> data collector set --> create manually --> event trace data --> finish.
  • A new trace 'datacollector01' will be created and trace providers can be added by right click --> properties.
  • You can start and stop the particular trace event by right clicking it and .etl file is generated and saved in path "C:\PerfLogs\Admin\usbtrace\"

Here is a screenshot of performance monitor window,

                                


ETL FILE VIEWING:

Windows provides 'Event viewer' software with its operating systems windows xp, 7 & 8 which can be used as a basic tool to view .etl files. There are other free tools provided by windows to enhance the .etl file viewing with better details of USB events and advanced filtering options. Network Monitor is one of the best available tools. Follow the link below to find the installation steps.

NETMON 3.4:

Steps for netmon 3.4 installation and loading of parser files for USB event tracing,
  • In the Netmon 3.4 download page and press the download button and for your system type.
  • Select the typical option and finish the installation.
  • Now the next step is to load the necessary parsers provided by microsoft for USB tracing in netmon.
  • In the Windows driver kit 8.1 page you can download "wdk\wdksetup.exe" to get the latest network monitor parsers. NOTE: Windows driver kit 8.1 can be installed in lower versions like windows 8 & 7 too.
  • Now to load the downloaded parsers, goto start --> search --> powershell and open elevated windows powershell (run as administrator).
  • Type the following command in the powershell and close it.
Set-ExecutionPolicy RemoteSigned -Force
  • Open a new PowerShell window (you don't need to Run as administrator) and run the following commands. Adjust the path if you installed the kit to a different location:
cd "C:\Program Files\Windows Kits\8.1\Tools\x86\Network Monitor Parsers\usb"
..\NplAutoProfile.ps1
  • Now open the installed network monitor 3.4 and you will see parsers getting updated automatically and ready for USB 2.0 and 3.0 event tracing.
  • To know more about filtering methods in netmon, which is the vital part of USB tracing, look out for the article on Windows Message Analyzer which has same filtering techniques. 
Please do comment and criticize our mistakes !!

-
ARUN
Embedded Engineer