2 つのプロバイダー モデル
今回から、プロバイダーを作っていきたいと思います。
これまでにも何回か書いていますが、ETW のプロバイダーには、Windows 2000 以来の古いモデルと、Windows Vista 以降の新しいモデルがあります。
古いモデルの方を「Classic Provider」、新しいモデルの方を「Manifest-based Provider」と呼びます。
繰り返しになりますが、この連載では、後者のみを採り上げます。
プロバイダー マニフェスト
さて、新しいプロバイダーは、Manifest-based という名前にも表れていますが、「マニフェスト」に基づきます。
マニフェストとは、プロバイダーがどんなイベントを発行するかということを表した XML ファイルです。
マニフェストの書き方は、Writing an Instrumentation Manifest というページに書かれています。
また、要素ごとの仕様書は、EventManifest Schema にあります。
ただ、このドキュメントを見てマニフェストを手書きするのは大変です。
XML ならせめて、XML スキーマがあれば Visual Studio でインテリセンスやエラー チェックを使うことができます。
プロバイダー マニフェストの XML スキーマは、Windows SDK をインストールすると入手することができます。
標準のインストール パスであれば、C:\Program Files (x86)\Windows Kits\8.1\Include\um\eventman.xsd にあります(他の場所にインストールしたり、違うバージョンをインストールした場合は、適当に読み替えてください)。
なお、同じフォルダーにある winmeta.xml というファイルには、標準的な値がいくつか定義されています。併せて参照してください。
また、Windows SDK に含まれる ecmangen というツールを使うと、マニフェストを GUI で編集することができます。
本連載では使用しませんが、興味があったら使ってみてください。
スキーマを俯瞰する
さて、スキーマはあるのですが、これを読むのもなかなか骨が折れます。
前述の EventManifest Schema のページも、解説が細かいのは、各要素の詳細を把握するにはいいんですが、全体を俯瞰するには向きません。
また、使用しない要素についての説明も混ざっており、見通しが良いとは言えません。
マニフェストの構造をざっくりと把握するには、先ほどの eventman.xsd ファイルを Visual Studio で開いてみるとよいでしょう。
メニューの [ファイル] → [開く] → [ファイル] で、eventman.xsd ファイルを選択します。
XML スキーマ ビューが表示されますので、「コンテンツ モデル ビュー」を選択して、右側のツリーから、instrumentationManifest 要素をドラッグ & ドロップします。
で、表示されたものがこちらです。
大きいので一部しか表示されませんね。はてなの仕様でしょうか。
全体は各自、Visual Studio で開いてみてください。
余談なんですが、XSD ダイアグラムって XPS 形式でしかエクスポートできないんですね。XPS とか久しぶりに目にしました。
今回はとりあえずここまでです。
次回、実際にマニフェストを書いてみます。