定义通道

事件可以写入事件日志通道和/或事件跟踪日志文件。 通道基本上是收集事件的接收器。 如果事件的目标受众使用事件使用者(如 Windows 事件查看器),则必须定义新通道来收集事件或导入其他提供程序定义的现有通道。

若要定义自己的通道,请使用 channel 元素。 若要定义导入的通道,请使用 importChannel 元素。 在导入的通道或定义的通道的任意组合中,最多可以指定八个通道。

通道必须是以下四种类型之一:管理员、操作、分析和调试。 每个频道类型都有一个目标受众,用于确定你写入频道的事件类型。 有关每种类型的说明,请参阅 ChannelType 复杂类型。

若要指定将事件写入到的通道,请将事件定义的 通道 属性设置为与通道定义的 chid 属性相同的值。 事件一次只能写入一个通道,但也可由最多 7 个其他 ETW 会话同时收集。

以下示例演示如何导入通道。 必须设置 chidname 属性。 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 中。

以下示例演示如何定义通道。 必须设置 chidnametype 属性。 chid 属性唯一标识通道 - 通道列表中的每个通道标识符必须是唯一的。 将 chid 属性设置为提供程序列出的通道的唯一值;通道标识符在一个或多个事件定义中引用。 命名通道的约定是使用提供程序名称和通道类型,格式为 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>