tech.guitarrapc.cóm

Technical updates

Event Tracing for Windows (ETW) の トレースプロバイダーリストを取得してみる

ネットワークキャプチャといえば、WiresharkやMicrosoft Message Analyzerが定番です。今回、USBやBluetoothのキャプチャもできることを教わりました。

USBなどの通信ログはETW (Event Tracing for Windows) に流れてくるのでEtwStreamでログをキャプチャできることも教わりました。そこで今回は、USBキャプチャなど各種WindowsのトレースプロバイダーをEtwStreamでキャプチャするために必要なトレースプロバイダー一覧を取得してみましょう。

このプロバイダーさえ把握できれば、USBに限らず自分で任意のトレースイベントをEtwStreamでキャプチャできますからね!

USB キャプチャ

先にキャプチャの様子です。 それぞれTwitterで教わりました。

Wireshark

Wiresharkをダウンロードしてインストールすれば利用できます。

https://www.wireshark.org/download.html

UME-3 (@ume3fmp) January 6, 2016

詳細はWikiやググると豊富にあるので参照しましょう。

https://wiki.wireshark.org/CaptureSetup/USB

Microsoft Message Analyzer

次はMicrosoft Message Analyzerです。WindowsにおけるGUIキャプチャならWiresharkではなくMicrosoft Message Analyzerが便利です。Wiresharkとか何年も触ってません。

Microsoft Message AnalyzerもUSBキャプチャに対応しています。

ダウンロードしてインストールはWiresharkより簡単です。

https://www.microsoft.com/en-us/download/details.aspx?id=44226

Microsoftから詳細動画が公開されているので見てみるといいでしょう。

https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn741264(v=vs.85).aspx

EtwStream

そして、私たち開発者にとって一番うれしいのがEtwStreamでも見られることです。

https://github.com/neuecc/EtwStream

USBに限らずネットワークキャプチャもそうですが、通信にかかわる膨大なログから「狙いを付けて絞りこんで加工してみる」というのは手間です。WiresharkやMicrosoft Message Analyzerの独自クエリは大げさかつだるいのですよね。そのため、EtwStreamのように、自在にRxでグルーピングなどが容易にできてプログラムに組み込めるのは強力な長所といえます。普段Fiddlerをお使いの開発者にとっても思ったことはあるでしょう。

neuecc (@neuecc)January 6, 2016

ETW Trace Provider

さてEtwStreamの.FromTraceEvent(string[] providerNameOrGuid)はとても強力ですが、どのトレースプロバイダーかワカラナイとそもそもトレースできません。そして、トレースプロバイダーの指定はGUID.... ということで、各種プロバイダーの一覧を取得しましょう。

3種類用意しました。

  • logman
  • Get-NetEventProvider : PowerShell 4.0 (Windows 8.1 / Windows Server 2012 R2) から利用可能
  • Get-EtwTraceProvider : PowerShell 5.0 (Windows 10) から利用可能

https://gist.github.com/guitarrapc/35a94b908bad677a7310

ただ、Get-EtwTraceProviderは、Name/GUID共に無効なものが混じっているのでちょっと怪しいです。logmanやGet-NetEventProviderにいらない管理者権限も必要なので、正直使わないです。

まとめ

EtwStream + Rx最高です。Have a happy ETW life。