Определение задач и опкодов
Поставщики используют задачи и коды операций для логического группирования событий. Группирование событий помогает потребителям запрашивать только те события, которые содержат определенные сочетания задач и опкодов. Как правило, вы используете задачи для идентификации основного компонента поставщика, например сетевого или компонента базы данных. Затем можно использовать опкоды для идентификации операций, выполняемых компонентом, например операций отправки и получения для сетевого компонента. Если у вас есть только один компонент, можно использовать задачу для отражения основной операции в компоненте, например подключения или отключения, и использовать опкод для отражения действия в операции, например чтения реестра. Вы также можете использовать opcode без указания задачи. Вы сами решаете, как использовать задачи и опкоды для группировки событий для потребителя.
Чтобы определить задачу, используйте элемент задачи. Чтобы определить opcode, используйте элемент 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>