Definindo os Filtros

Um provedor pode definir filtros que uma sessão usa para filtrar eventos com base em dados de evento. Com palavras-chave e nível, o ETW determina se o evento é gravado no log. No entanto, com filtros, o provedor usa os critérios de dados de filtro que a sessão de controle passa para ele (consulte a função EnableCallback ) para determinar se ele grava o evento nessa sessão. Os filtros são aplicáveis somente quando uma sessão de rastreamento etw habilita seu provedor.

Normalmente, os provedores apenas gravam eventos e a sessão identifica os tipos de eventos que deseja usar usando palavras-chave e nível. Se o provedor definiu um filtro de dados para um tipo de evento, a sessão poderá usá-lo para filtrar eventos para esse tipo de evento com base nos dados do evento (a semântica do filtro é definida pelo provedor). Por exemplo, se o provedor gerar eventos de processo, você poderá definir um filtro de dados que filtrava eventos de processo com base em um identificador de processo. Em seguida, a sessão pode passar um identificador de processo como dados de filtro para o provedor e receber apenas eventos de processo para esse identificador de processo.

O exemplo a seguir mostra como usar o elemento de filtro para definir um filtro. Você deve especificar os atributos de nome e valor do filtro; os outros atributos são opcionais. O atributo tid será necessário se o filtro exigir que a sessão passe dados de filtro.

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