Menentukan Filter

Penyedia dapat menentukan filter yang digunakan sesi untuk memfilter peristiwa berdasarkan data peristiwa. Dengan tingkat dan kata kunci, ETW menentukan apakah peristiwa ditulis ke log. Namun, dengan filter, penyedia menggunakan kriteria data filter yang diteruskan sesi pengontrol ke dalamnya (lihat fungsi EnableCallback ) untuk menentukan apakah ia menulis peristiwa ke sesi tersebut. Filter hanya berlaku ketika sesi pelacakan ETW memungkinkan penyedia Anda.

Biasanya, penyedia hanya menulis peristiwa, dan sesi mengidentifikasi jenis peristiwa yang diinginkannya menggunakan tingkat dan kata kunci. Jika penyedia menentukan filter data untuk jenis peristiwa, sesi dapat menggunakannya untuk memfilter peristiwa untuk jenis peristiwa tersebut berdasarkan data peristiwa (semantik filter ditentukan oleh penyedia). Misalnya, jika penyedia Anda menghasilkan peristiwa proses, Anda dapat menentukan filter data yang memfilter peristiwa proses berdasarkan pengidentifikasi proses. Sesi kemudian dapat meneruskan pengidentifikasi proses sebagai data filter ke penyedia dan hanya menerima peristiwa proses untuk pengidentifikasi proses tersebut.

Contoh berikut menunjukkan cara menggunakan elemen filter untuk menentukan filter. Anda harus menentukan atribut nama dan nilai filter; atribut lainnya bersifat opsional. Atribut tid diperlukan jika filter mengharuskan data filter pass sesi.

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