Definizione di attività e opcode
I provider usano attività e opcode per raggruppare logicamente gli eventi. Gli eventi di raggruppamento consentono agli utenti di eseguire query solo per gli eventi che contengono combinazioni di attività e opcode specifiche. In genere, si usano attività per identificare un componente principale del provider, ad esempio il componente di rete o di database. È quindi possibile usare opcodes per identificare le operazioni eseguite dal componente, ad esempio le operazioni di invio e ricezione per un componente di rete. Se si dispone di un solo componente, è possibile usare l'attività per riflettere un'operazione principale nel componente, ad esempio connettersi o disconnettersi e usare il codice opcode per riflettere un'attività all'interno dell'operazione, ad esempio la lettura del Registro di sistema. È anche possibile usare opcode senza specificare un'attività. Come si usano attività e opcodes per raggruppare gli eventi per il consumer è completamente disponibile.
Per definire un'attività, usare l'elemento attività . Per definire un opcode, usare l'elemento opcode . È possibile specificare fino a 228 opcode. Il valore dell'attività deve essere maggiore di 0. I codici opcode devono trovarsi nell'intervallo compreso tra 10 e 239. Il file Winmeta.xml definisce operazioni comuni che è possibile usare invece di definire il proprio.
Nell'esempio seguente viene illustrato come definire diverse attività e opcode.
<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>