Поделиться через


Определение ключевых слов, используемых для классификации типов событий

Ключевое слово трассировки событий Windows — это 64-разрядная битовая маска, используемая для указания членства события в наборе категорий событий. Каждый бит в ключевое слово соответствует категории. Если в ключевое слово события задан бит, событие относится к категории событий, соответствующей этому биту.

Низкие 48 бит ключевое слово (битовая маска 0x0000FFFFFFFFFFFF) определяются поставщиком событий (автором манифеста). Первые 16 бит ключевое слово (0xFFFF000000000000 битовой маски) определяются корпорацией Майкрософт. winmeta.xml Определения ключевых слов, определенных Корпорацией Майкрософт, смwinmeta.h. в папке "Включаемые наборы Windows".

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

Сеанс сбора событий ETW может использовать ключевые слова (так же, как и уровень), чтобы ограничить события, которые служба трассировки событий Windows записывает в свой файл журнала трассировки событий. Сеанс трассировки может включить поставщик, используя два набора ключевое слово битовых масках: битовую маску MatchAnyKeyword, в которой записывается событие, если любой из ключевое слово битов события соответствует любому из битов, заданных в этой маске. и битовая маска MatchAllKeyword, где для тех событий, которые соответствовали регистру MatchAnyKeyword, событие записывается только в том случае, если все биты в маске MatchAllKeyword существуют в событии ключевое слово битовую маску.

Например, если поставщик определяет событие, указывающее ключевое слово чтения (бит 0 = 0x1) и локальный ключевое слово доступа (бит 1 = 0x2), а второе событие, указывающее ключевое слово чтения (бит 0 = 0x1) и ключевое слово удаленного доступа (бит 2 = 0x4), можно задать битовую маску matchAnyKeyword сеанса сбора событий в значение . 0x1 (чтение) и битовая маска 0x0 MatchAllKeyword имеет значение (нет), чтобы получать все события чтения, или можно задать для битовой маски MatchAnyKeyword значение 0x1 , а для битовой маски 0x3 MatchAllKeyword — значение (read + local) для получения только локальных операций чтения.

Чтобы определить ключевое слово для поставщика, используйте элемент ключевое слово. После определения ключевое слово для поставщика можно назначить ключевое слово любому из событий поставщика с помощью атрибута keywords элемента event.

Необходимо указать имя и атрибуты маски ключевое слово. Маска должна быть целым числом с одним набором битов в диапазоне от 0 до бита 47, например mask="256" или mask="0x100" , чтобы задать ключевое слово бит 8. Разряды от 48 до 63 определяются корпорацией Майкрософт (см. winmeta.h или winmeta.xml) и не могут использоваться в элементе ключевое слово.

Атрибуты символа и сообщения являются необязательными.

В следующем примере показано, как определить ключевое слово.

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