チャネルの定義

イベントは、イベント ログ チャネル、イベント トレース ログ ファイル、またはその両方に書き込むことができます。 チャネルは、基本的にイベントを収集するシンクです。 イベントの対象ユーザーが Windows イベント ビューアーなどのイベント コンシューマーを使用する場合は、新しいチャネルを定義してイベントを収集するか、別のプロバイダーが定義した既存のチャネルをインポートする必要があります。

独自のチャネルを定義するには、 channel 要素を使用します。 インポートされたチャネルを定義するには、 importChannel 要素を使用します。 定義したインポートされたチャネルまたはチャネルの任意の組み合わせで、最大 8 つのチャネルを指定できます。

チャネルは、管理、運用、分析、デバッグの 4 種類のいずれかである必要があります。 各チャネルの種類には、チャネルに書き込むイベントの種類を決定する対象ユーザーがあります。 各型の説明については、 ChannelType 複合型に関するページを参照してください。

イベントが書き込まれるチャネルを指定するには、イベント定義のチャネル属性を チャネル 定義の chid 属性と同じ値に設定します。 イベントは一度に 1 つのチャネルにのみ書き込むことができますが、同時に最大 7 つの他の ETW セッションで収集することもできます。

次の例は、チャネルをインポートする方法を示しています。 chid 属性と name 属性を設定する必要があります。 chid 属性はチャネルを一意に識別します。チャネルのリスト内の各チャネル識別子は一意である必要があります。 name 属性を、プロバイダーがチャネルを定義したときに使用した名前と同じ名前に設定します。

<instrumentationManifest
    xmlns="http://schemas.microsoft.com/win/2004/08/events" 
    xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    >

    <instrumentation>
        <events>
            <provider name="Microsoft-Windows-SampleProvider" 
                guid="{1db28f2e-8f80-4027-8c5a-a11f7f10f62d}" 
                symbol="PROVIDER_GUID" 
                resourceFileName="<path to the exe or dll that contains the metadata resources>" 
                messageFileName="<path to the exe or dll that contains the string resources>"
                message="$(string.Provider.Name)">

                <channels>
                    <channel chid="c1"
                             name="Microsoft-Windows-BaseProvider/Admin"
                             symbol="CHANNEL_BASEPROVIDER_ADMIN"
                             type="Admin"/>
                </channels>

                . . .

            </provider>
        </events>
    </instrumentation>

    <localization>
        <resources culture="en-US">
            <stringTable>
                <string id="Provider.Name" value="Microsoft-Windows-SampleProvider"/>
            </stringTable>
        </resources>
    </localization>

</instrumentationManifest>

Winmeta.xmlはインポートできるレガシ チャネルを定義しますが、レガシ チャネルからイベントを使用するレガシ コンシューマー (アプリケーションやシステムなど) をサポートしていない限り、それらを使用しないでください。 Winmeta.xml ファイルは Windows SDK に含まれています。

次の例は、チャネルを定義する方法を示しています。 chidname、および type 属性を設定する必要があります。 chid 属性はチャネルを一意に識別します。チャネルのリスト内の各チャネル識別子は一意である必要があります。 chid 属性を、プロバイダーが一覧表示するチャネルに対して一意の値に設定します。チャネル識別子は、1 つ以上のイベント定義で参照されます。 チャネルに名前を付ける規則は、プロバイダー名とチャネルの種類を providername/channeltype という形式で使用することです。

<instrumentationManifest
    xmlns="http://schemas.microsoft.com/win/2004/08/events" 
    xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    >

    <instrumentation>
        <events>
            <provider name="Microsoft-Windows-SampleProvider"
                guid="{1db28f2e-8f80-4027-8c5a-a11f7f10f62d}"
                symbol="PROVIDER_GUID"
                resourceFileName="<path to the exe or dll that contains the metadata resources>"
                messageFileName="<path to the exe or dll that contains the string resources>"
                message="$(string.Provider.Name)">

                <channels>
                    <importChannel chid="c1"
                                   name="Microsoft-Windows-BaseProvider/Admin"
                                   symbol="CHANNEL_BASEPROVIDER_ADMIN"
                                   />

                    <channel chid="c2"
                             name="Microsoft-Windows-SampleProvider/Operational"
                             type="Operational"
                             enabled="true"
                             />
                </channels>

                . . .

            </provider>
        </events>
    </instrumentation>

    <localization>
        <resources culture="en-US">
            <stringTable>
                <string id="Provider.Name" value="Microsoft-Windows-SampleProvider"/>
            </stringTable>
        </resources>
    </localization>

</instrumentationManifest>