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 をダウンロードしてインストールすれば利用できます。

Wireshark · Download

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

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 から詳細動画が公開されているので見てみるといいでしょう。

Universal Serial Bus (USB) - Windows drivers | Microsoft Learn

EtwStream

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

github.com

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

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) から利用可能

gist.github.com

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

まとめ

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