Compartilhar via


Definindo tarefas e opcodes

Os provedores usam tarefas e opcodes para agrupar logicamente eventos. O agrupamento de eventos ajuda os consumidores a consultar somente os eventos que contêm combinações específicas de tarefa e opcode. Normalmente, você usa tarefas para identificar um componente principal do provedor, como a rede ou o componente de banco de dados. Em seguida, você pode usar opcodes para identificar as operações executadas pelo componente, como as operações de envio e recebimento de um componente de rede. Se você tivesse apenas um componente, poderia usar a tarefa para refletir uma operação importante no componente, como conectar ou desconectar, e usar opcode para refletir uma atividade dentro da operação, como ler o registro. Você também pode usar opcode sem especificar uma tarefa. A maneira como você usa a tarefa e os opcodes para agrupar eventos para o consumidor cabe a você.

Para definir uma tarefa, use o elemento task . Para definir um opcode, use o elemento opcode . Você pode especificar até 228 opcodes. O valor da tarefa deve ser maior que 0. Os opcodes devem estar no intervalo de 10 a 239. O arquivo Winmeta.xml define operações comuns que você pode usar em vez de definir suas próprias operações.

O exemplo a seguir mostra como definir várias tarefas e opcodes.

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