Definieren von Kanälen

Ereignisse können in Ereignisprotokollkanäle, Ereignisablaufverfolgungsprotokolldateien oder beides geschrieben werden. Ein Kanal ist im Grunde eine Senke, die Ereignisse sammelt. Wenn die Zielgruppe für Ihre Ereignisse Ereigniskonsumenten wie die Windows-Ereignisanzeige verwendet, müssen Sie neue Kanäle definieren, um Ihre Ereignisse zu sammeln oder einen vorhandenen Kanal zu importieren, den ein anderer Anbieter definiert hat.

Um Ihre eigenen Kanäle zu definieren, verwenden Sie das Kanalelement . Verwenden Sie zum Definieren eines importierten Kanals das importChannel-Element . Sie können bis zu acht Kanäle in einer beliebigen Kombination von importierten Kanälen oder Kanälen angeben, die Sie definieren.

Der Kanal muss einen von vier Typen aufweisen: Admin, Operational, Analytic und Debug. Jeder Kanaltyp hat eine beabsichtigte Zielgruppe, die den Typ der Ereignisse bestimmt, die Sie in den Kanal schreiben. Eine Beschreibung der einzelnen Typen finden Sie im komplexen ChannelType-Typ .

Um den Kanal anzugeben, in den ein Ereignis geschrieben wird, legen Sie das Kanalattribute der Ereignisdefinition auf den gleichen Wert wie das chid-Attribut der Kanaldefinition fest. Ereignisse können jeweils nur in einen Kanal geschrieben, aber auch von bis zu 7 anderen ETW-Sitzungen gleichzeitig erfasst werden.

Im folgenden Beispiel wird gezeigt, wie ein Kanal importiert wird. Sie müssen die Attribute "chid" und "name" festlegen. Das chid-Attribut identifiziert den Kanal eindeutig. Jeder Kanalbezeichner in der Liste der Kanäle muss eindeutig sein. Legen Sie das name-Attribut auf denselben Namen fest, den der Anbieter beim Definieren des Kanals verwendet hat.

<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>

Obwohl Winmeta.xml Legacykanäle definiert, die Sie importieren können, sollten Sie sie nur verwenden, wenn Sie ältere Consumer unterstützen, die Ereignisse aus den Legacykanälen nutzen (z. B. Anwendung oder System). Die Winmeta.xml-Datei ist im Windows SDK enthalten.

Das folgende Beispiel zeigt, wie ein Kanal definiert wird. Sie müssen die Attribute chid, name und type festlegen. Das chid-Attribut identifiziert den Kanal eindeutig. Jeder Kanalbezeichner in der Liste der Kanäle muss eindeutig sein. Legen Sie das chid-Attribut auf einen Wert fest, der für die Kanäle eindeutig ist, die Ihr Anbieter auflistet. auf den Kanalbezeichner wird in einer oder mehreren Ihrer Ereignisdefinitionen verwiesen. Die Konvention für die Benennung des Kanals besteht darin, den Anbieternamen und kanaltyp im Format providername/channeltype zu verwenden.

<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>