Definizione di filtri

Un provider può definire filtri usati da una sessione per filtrare gli eventi in base ai dati degli eventi. Con parole chiave e livello, ETW determina se l'evento viene scritto nel log. Tuttavia, con i filtri, il provider usa i criteri di filtro dei dati passati alla sessione di controllo (vedere la funzione EnableCallback ) per determinare se scrive l'evento in tale sessione. I filtri sono applicabili solo quando una sessione di traccia ETW abilita il provider.

In genere, i provider scrivono solo eventi e la sessione identifica i tipi di eventi che desiderano usare livelli e parole chiave. Se il provider ha definito un filtro dati per un tipo di evento, la sessione potrebbe usarla per filtrare gli eventi per tale tipo di evento in base ai dati dell'evento (la semantica del filtro è definita dal provider). Ad esempio, se il provider genera eventi di elaborazione, è possibile definire un filtro dati che elabora eventi filtrati in base a un identificatore di processo. La sessione potrebbe quindi passare un identificatore di processo come dati di filtro al provider e ricevere solo eventi di processo per tale identificatore di processo.

Nell'esempio seguente viene illustrato come usare l'elemento filtro per definire un filtro. È necessario specificare il nome e gli attributi del valore del filtro; gli altri attributi sono facoltativi. L'attributo tid è necessario se il filtro richiede che i dati del filtro passano la sessione.

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