Freigeben über


Definieren von Filtern

Ein Anbieter kann Filter definieren, die eine Sitzung verwendet, um Ereignisse basierend auf Ereignisdaten zu filtern. Mit Level und Schlüsselwörtern bestimmt ETW, ob das Ereignis in das Protokoll geschrieben wird. Bei Filtern verwendet der Anbieter jedoch die Filterdatenkriterien, die die steuernde Sitzung an ihn übergibt (siehe Die Funktion EnableCallback ), um zu bestimmen, ob das Ereignis in diese Sitzung geschrieben wird. Die Filter sind nur anwendbar, wenn eine ETW-Ablaufverfolgungssitzung Ihren Anbieter aktiviert.

In der Regel schreiben Anbieter nur Ereignisse, und die Sitzung identifiziert die gewünschten Ereignistypen mithilfe von Ebene und Schlüsselwörtern. Wenn der Anbieter einen Datenfilter für einen Ereignistyp definiert hat, könnte die Sitzung ihn verwenden, um Ereignisse für diesen Ereignistyp basierend auf den Ereignisdaten herauszufiltern (die Semantik des Filters wird vom Anbieter definiert). Wenn Ihr Anbieter beispielsweise Prozessereignisse generiert, können Sie einen Datenfilter definieren, der Prozessereignisse basierend auf einem Prozessbezeichner gefiltert. Die Sitzung könnte dann einen Prozessbezeichner als Filterdaten an den Anbieter übergeben und nur Prozessereignisse für diesen Prozessbezeichner empfangen.

Das folgende Beispiel zeigt, wie sie das filter-Element verwenden, um einen Filter zu definieren. Sie müssen den Namen und die Wertattribute des Filters angeben. die anderen Attribute sind optional. Das tid-Attribut ist erforderlich, wenn der Filter erfordert, dass die Sitzung Filterdaten übergibt.

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

                . . .

                <filters>
                    <filter name="Pid"
                            value="1"
                            tid="t1"
                            symbol="FILTER_PID"/>
                </filters>

                <templates>
                    <template tid="t1">
                        <data name="Pid" inType="win:UInt32"/>
                    </template>
                </templates>

                . . .

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

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

</instrumentationManifest>