鷲ノ巣

C# とか PowerShell とか。当ブログの記事は(特に公開直後は)頻繁に改定される場合があることをご了承ください。

プロバイダー マニフェスト

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 要素をドラッグ & ドロップします。
f:id:aetos382:20140925162005p:plain

で、表示されたものがこちらです。
f:id:aetos382:20140925164504p:plain

大きいので一部しか表示されませんね。はてなの仕様でしょうか。
全体は各自、Visual Studio で開いてみてください。

余談なんですが、XSD ダイアグラムって XPS 形式でしかエクスポートできないんですね。XPS とか久しぶりに目にしました。

今回はとりあえずここまでです。
次回、実際にマニフェストを書いてみます。