Definizione dei canali

Gli eventi possono essere scritti nei canali del log eventi, nei file di log di traccia eventi o in entrambi i casi. Un canale è fondamentalmente un sink che raccoglie eventi. Se il pubblico di destinazione per gli eventi usa i consumer di eventi, ad esempio windows Visualizzatore eventi, è necessario definire nuovi canali per raccogliere gli eventi o importare un canale esistente definito da un altro provider.

Per definire i propri canali, usare l'elemento del canale . Per definire un canale importato, usare l'elemento importChannel . È possibile specificare fino a otto canali in qualsiasi combinazione di canali o canali importati definiti.

Il canale deve essere di uno dei quattro tipi: Amministrazione, operativo, analitico e debug. Ogni tipo di canale ha un pubblico previsto, che determina il tipo di eventi scritti nel canale. Per una descrizione di ogni tipo, vedere il tipo complesso ChannelType .

Per specificare il canale in cui viene scritto un evento, impostare l'attributo del canale della definizione dell'evento sullo stesso valore dell'attributo chid della definizione del canale. Gli eventi possono essere scritti solo in un canale alla volta, ma possono anche essere raccolti contemporaneamente fino a 7 altre sessioni ETW.

Nell'esempio seguente viene illustrato come importare un canale. È necessario impostare gli attributi chid e name . L'attributo chid identifica in modo univoco il canale: ogni identificatore di canale nell'elenco di canali deve essere univoco. Impostare l'attributo name sullo stesso nome usato dal provider quando è stato definito il canale.

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

Anche se Winmeta.xml definisce i canali legacy che è possibile importare, non è consigliabile usarli a meno che non si supportino i consumer legacy che usano eventi fuori dai canali legacy, ad esempio applicazione o sistema. Il file Winmeta.xml è incluso in Windows SDK.

Nell'esempio seguente viene illustrato come definire un canale. È necessario impostare gli attributi chid, name e type . L'attributo chid identifica in modo univoco il canale: ogni identificatore di canale nell'elenco di canali deve essere univoco. Impostare l'attributo chid su un valore univoco per i canali elencati dal provider; l'identificatore del canale viene fatto riferimento in una o più definizioni di eventi. La convenzione per la denominazione del canale consiste nell'usare il nome del provider e il tipodi canale nel modulo, il canale nome/ provider.

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