Définition de filtres

Un fournisseur peut définir des filtres qu’une session utilise pour filtrer les événements en fonction des données d’événement. Avec le niveau et les mots clés, ETW détermine si l’événement est écrit dans le journal. Toutefois, avec les filtres, le fournisseur utilise les critères de données de filtre que la session de contrôle lui transmet (voir la fonction EnableCallback ) pour déterminer s’il écrit l’événement dans cette session. Les filtres s’appliquent uniquement lorsqu’une session de suivi ETW active votre fournisseur.

En règle générale, les fournisseurs écrivent simplement des événements, et la session identifie les types d’événements souhaités à l’aide du niveau et des mots clés. Si le fournisseur a défini un filtre de données pour un type d’événement, la session peut l’utiliser pour filtrer les événements de ce type d’événement en fonction des données d’événement (la sémantique du filtre est définie par le fournisseur). Par exemple, si votre fournisseur génère des événements de processus, vous pouvez définir un filtre de données qui filtre les événements de processus en fonction d’un identificateur de processus. La session peut ensuite passer un identificateur de processus en tant que données de filtre au fournisseur et recevoir uniquement les événements de processus pour cet identificateur de processus.

L’exemple suivant montre comment utiliser l’élément filter pour définir un filtre. Vous devez spécifier le nom et les attributs de valeur du filtre ; les autres attributs sont facultatifs. L’attribut tid est requis si le filtre nécessite que la session filtre les données.

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