Определение фильтров

Поставщик может определить фильтры, которые сеанс использует для фильтрации событий на основе данных о событиях. С помощью ключевых слов и уровней трассировка событий Windows определяет, записывается ли событие в журнал. Однако при использовании фильтров поставщик использует критерии данных фильтра, которые передает ему управляющий сеанс (см. функцию EnableCallback ), чтобы определить, записывает ли событие в этот сеанс. Фильтры применяются только в том случае, если ваш поставщик включает сеанс трассировки ETW.

Как правило, поставщики просто записывают события, а сеанс определяет типы событий, которые ему нужны, с помощью уровней и ключевых слов. Если поставщик определил фильтр данных для типа событий, сеанс может использовать его для фильтрации событий этого типа на основе данных события (семантика фильтра определяется поставщиком). Например, если поставщик создает события процесса, можно определить фильтр данных, который фильтрует события процесса на основе идентификатора процесса. Затем сеанс может передать идентификатор процесса в качестве данных фильтра поставщику и получать только события процесса для этого идентификатора процесса.

В следующем примере показано, как использовать элемент filter для определения фильтра. Необходимо указать имя и атрибуты значения фильтра; другие атрибуты являются необязательными. Атрибут tid является обязательным, если фильтр требует передачи данных фильтра сеанса.

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