Definieren von Aufgaben und Opcodes
Anbieter verwenden Tasks und Opcodes, um Ereignisse logisch zu gruppieren. Mithilfe von Gruppierungsereignissen können Consumer nur ereignisse abfragen, die bestimmte Aufgaben- und Opcodekombinationen enthalten. In der Regel verwenden Sie Aufgaben, um eine Hauptkomponente des Anbieters zu identifizieren, z. B. die Netzwerk- oder Datenbankkomponente. Sie können dann opcodes verwenden, um die Vorgänge zu identifizieren, die die Komponente ausführt, z. B. die Sende- und Empfangsvorgänge für eine Netzwerkkomponente. Wenn Sie nur über eine Komponente verfügen, können Sie die Aufgabe verwenden, um einen Hauptvorgang in der Komponente widerzuspiegeln, z. B. verbinden oder trennen, und opcode verwenden, um eine Aktivität innerhalb des Vorgangs wie das Lesen der Registrierung widerzuspiegeln. Sie können auch opcode verwenden, ohne eine Aufgabe anzugeben. Wie Sie Aufgaben und Opcodes verwenden, um Ereignisse für den Consumer zu gruppieren, liegt ganz bei Ihnen.
Verwenden Sie zum Definieren einer Aufgabe das task-Element . Verwenden Sie das opcode-Element , um einen Opcode zu definieren. Sie können bis zu 228 Opcodes angeben. Der Vorgangswert muss größer als 0 sein. Die Opcodes müssen im Bereich von 10 bis 239 liegen. Die Winmeta.xml-Datei definiert allgemeine Vorgänge, die Sie verwenden können, anstatt eigene zu definieren.
Im folgenden Beispiel wird gezeigt, wie mehrere Aufgaben und Opcodes definiert werden.
<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>