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


Определение задач и кодов операций

Поставщики используют задачи и коды операций для логической группировки событий. События группировки помогают потребителям запрашивать только те события, которые содержат определенные сочетания задач и кода операции. Как правило, задачи используются для определения основного компонента поставщика, например сетевого компонента или компонента базы данных. Затем можно использовать коды операций для определения операций, выполняемых компонентом, таких как операции отправки и получения для сетевого компонента. Если у вас есть только один компонент, можно использовать задачу для отражения основной операции в компоненте, например подключения или отключения, и использовать код операции для отражения действий внутри операции, например чтения реестра. Можно также использовать код операции без указания задачи. Использование кода задач и операций для группировки событий для потребителя полностью за вас.

Чтобы определить задачу, используйте элемент task . Чтобы определить код операции, используйте элемент opcode . Можно указать до 228 кодов операций. Значение задачи должно быть больше 0. Коды операций должны находиться в диапазоне от 10 до 239. Файл 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)">

                . . .

                <tasks>
                    <task name="Disconnect" 
                          symbol="TASK_DISCONNECT"
                          value="1"
                          message="$(string.Task.Disconnect)"/>
 
                    <task name="Connect" 
                          symbol="TASK_CONNECT"
                          value="2"
                          message="$(string.Task.Connect)">
                    </task>

                    <task name="Validate" 
                          symbol="TASK_VALIDATE"
                          value="3"
                          message="$(string.Task.Validate)">
                    </task>
                </tasks>

                <opcodes>
                    <opcode name="Initialize" 
                            symbol="OPCODE_INITIALIZE" 
                            value="12"
                            message="$(string.Opcode.Initialize)"/>

                    <opcode name="Cleanup" 
                            symbol="OPCODE_CLEANUP" 
                            value="13"
                            message="$(string.Opcode.Cleanup)"/>
                 </opcodes>

                . . .

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

    <localization>
        <resources culture="en-US">
            <stringTable>
                <string id="Provider.Name" value="Sample Provider"/>
                <string id="Task.Disconnect" value="Disconnect"/>
                <string id="Task.Connect" value="Connect"/>
                <string id="Task.Connect.ReadRegistry" value="ReadRegistry"/>
                <string id="Task.Validate" value="Connect"/>
                <string id="Task.Validate.GetRules" value="GetRules"/>
                <string id="Opcode.Initialize" value="Initialize"/>
                <string id="Opcode.Cleanup" value="Cleanup"/>
            </stringTable>
        </resources>
    </localization>

</instrumentationManifest>