Compartir a través de


Definición de filtros

Un proveedor puede definir filtros que una sesión usa para filtrar eventos en función de los datos de eventos. Con el nivel y las palabras clave, ETW determina si el evento se escribe en el registro. Sin embargo, con filtros, el proveedor usa los criterios de datos de filtro que la sesión de control pasa a ella (consulte la función EnableCallback ) para determinar si escribe el evento en esa sesión. Los filtros solo son aplicables cuando una sesión de seguimiento ETW habilita al proveedor.

Normalmente, los proveedores solo escriben eventos y la sesión identifica los tipos de eventos que desea usar el nivel y las palabras clave. Si el proveedor definió un filtro de datos para un tipo de evento, la sesión podría usarla para filtrar los eventos de ese tipo de evento en función de los datos del evento (la semántica del filtro está definida por el proveedor). Por ejemplo, si el proveedor genera eventos de proceso, puede definir un filtro de datos que filtre los eventos de proceso basados en un identificador de proceso. Después, la sesión podría pasar un identificador de proceso como datos de filtro al proveedor y recibir solo eventos de proceso para ese identificador de proceso.

En el ejemplo siguiente se muestra cómo usar el elemento filter para definir un filtro. Debe especificar los atributos de nombre y valor del filtro; Los demás atributos son opcionales. El atributo tid es necesario si el filtro requiere que los datos de filtro de paso de sesión.

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