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>