Udostępnij za pośrednictwem


Definiowanie kanałów

Zdarzenia mogą być zapisywane w kanałach dziennika zdarzeń, plikach dziennika śledzenia zdarzeń lub obu tych kanałach. Kanał to w zasadzie ujście, które zbiera zdarzenia. Jeśli docelowi odbiorcy zdarzeń korzystają z odbiorców zdarzeń, takich jak Podgląd zdarzeń systemu Windows, należy zdefiniować nowe kanały do zbierania zdarzeń lub importowania istniejącego kanału zdefiniowanego przez innego dostawcę.

Aby zdefiniować własne kanały, użyj elementu kanału. Aby zdefiniować importowany kanał, użyj elementu importChannel. Możesz określić maksymalnie osiem kanałów w dowolnej kombinacji importowanych kanałów lub kanałów, które definiujesz.

Kanał musi mieć jeden z czterech typów: Administrator, Operacyjny, Analityczny i Debugowanie. Każdy typ kanału ma docelową grupę odbiorców, która określa typ zdarzeń zapisywanych w kanale. Aby uzyskać opis każdego typu, zobacz typ złożony ChannelType.

Aby określić kanał, do którego jest zapisywane zdarzenie, ustaw atrybut definicji zdarzenia na tę samą wartość co atrybut definicji kanału. Zdarzenia mogą być zapisywane tylko w jednym kanale jednocześnie, ale mogą być również zbierane przez maksymalnie 7 innych sesji ETW w tym samym czasie.

W poniższym przykładzie pokazano, jak zaimportować kanał. Należy ustawić atrybuty child i name. Atrybut chid jednoznacznie identyfikuje kanał — każdy identyfikator kanału na liście kanałów musi być unikatowy. Ustaw nazwę atrybutu na taką samą nazwę, która została użyta przez dostawcę podczas definiowania kanału.

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

Mimo że Winmeta.xml definiuje starsze kanały, które można zaimportować, nie należy ich używać, chyba że obsługujesz starszych użytkowników korzystających ze zdarzeń ze starszych kanałów (na przykład aplikacji lub systemu). Plik Winmeta.xml znajduje się w zestawie Windows SDK.

W poniższym przykładzie pokazano, jak zdefiniować kanał. Należy ustawić atrybuty: identyfikator , nazwę i typ . Atrybut chid jednoznacznie identyfikuje kanał — każdy identyfikator kanału na liście kanałów musi być unikatowy. Ustaw atrybut chid na wartość unikatową dla kanałów, które wyświetla dostawca; identyfikator kanału jest przywołyny w co najmniej jednej definicji zdarzeń. Konwencją nazewnictwa kanału jest użycie nazwy dostawcy i typu kanału w formularzu, nazwa dostawcy/typ kanału.

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