Definindo palavras-chave usadas para classificar tipos de eventos

Um palavra-chave ETW é uma máscara de bits de 64 bits usada para indicar a associação de um evento em um conjunto de categorias de eventos. Cada bit no palavra-chave corresponde a uma categoria. Se o palavra-chave de um evento tiver um bit definido, o evento pertencerá à categoria de evento correspondente a esse bit.

Os 48 bits baixos do palavra-chave (bitmask 0x0000FFFFFFFFFFFF) são definidos pelo provedor de eventos (o autor do manifesto). Os 16 principais bits do palavra-chave (bitmask 0xFFFF000000000000) são definidos pela Microsoft. Confira winmeta.h ou winmeta.xml na pasta Incluir Kits do Windows para obter as definições das palavras-chave definidas pela Microsoft.

Os provedores usam palavras-chave para classificar diferentes tipos de eventos. Por exemplo, você pode definir palavra-chave bit 0 (palavra-chave valor 0x1) como a categoria de leitura e aplicar o palavra-chave de leitura a qualquer evento que execute uma operação de leitura, como leitura de um arquivo ou registro. Em seguida, os consumidores poderiam usar os valores de bits palavra-chave para filtrar diferentes classificações de eventos. Por exemplo, o consumidor pode definir a propriedade MatchAnyKeyword da sessão de coleta de eventos para 0x1 fazer com que a sessão colete apenas os eventos na categoria de leitura .

Uma sessão de coleção de eventos ETW pode usar as palavras-chave (da mesma forma que usa o nível) para limitar os eventos que o serviço ETW grava em seu arquivo de log de rastreamento de eventos. Uma sessão de rastreamento pode habilitar o provedor usando dois conjuntos de bitmasks palavra-chave: uma máscara de bits "MatchAnyKeyword" em que o evento é gravado se qualquer um dos bits palavra-chave do evento corresponder a qualquer um dos bits definidos nesta máscara, e uma máscara de bits "MatchAllKeyword", em que para os eventos que corresponderam ao caso "MatchAnyKeyword", o evento será gravado somente se todos os bits na máscara "MatchAllKeyword" existirem no evento palavra-chave máscara de bits.

Por exemplo, se o provedor definir um evento que especifica um palavra-chave de leitura (bit 0 = 0x1) e um palavra-chave de acesso local (bit 1 = 0x2), e um segundo evento que especifica um palavra-chave de leitura (bit 0 = 0x1) e um acesso remoto palavra-chave (bit 2 = 0x4), você poderá definir a máscara de bits "MatchAnyKeyword" da sessão de coleta de eventos como 0x1 (leia) e a máscara de bits "MatchAllKeyword" como 0x0 (nenhum) para receber todos os eventos de leitura ou você pode definir a máscara de bits 0x1 "MatchAnyKeyword" como e a máscara de bits "MatchAllKeyword" como 0x3 (leitura + local) para receber somente leituras locais.

Para definir um palavra-chave para seu provedor, use o elemento palavra-chave. Depois que um palavra-chave tiver sido definido para o provedor, você poderá atribuir o palavra-chave a qualquer um dos eventos do provedor usando o atributo de palavras-chave do elemento event.

Você deve especificar os atributos de nome e máscara do palavra-chave. A máscara deve ser um inteiro com um bit definido, entre o bit 0 e o bit 47, como mask="256" ou mask="0x100" para definir palavra-chave bit 8. Os bits 48 a 63 são definidos pela Microsoft (ver winmeta.h ou winmeta.xml) e não podem ser usados no elemento palavra-chave.

Os atributos de símbolo e mensagem são opcionais.

O exemplo a seguir mostra como definir um palavra-chave.

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

                . . .

                <keywords>
                    <keyword name="Read" mask="0x1" symbol="READ_KEYWORD"/>
                    <keyword name="Write" mask="0x2" symbol="WRITE_KEYWORD"/>
                    <keyword name="Local" mask="0x4" symbol="LOCAL_KEYWORD"/>
                    <keyword name="Remote" mask="0x8" symbol="REMOTE_KEYWORD"/>
                </keywords>

                . . .

            </provider>
        </events>
    </instrumentation>

    <localization>
        <resources culture="en-US">
            <stringTable>
                <string id="Provider.Name" value="Sample Provider"/>
            </stringTable>
        </resources>
    </localization>

</instrumentationManifest>