작업 및 Opcode 정의
공급자는 작업 및 opcode를 사용하여 이벤트를 논리적으로 그룹화합니다. 이벤트를 그룹화하면 소비자가 특정 작업 및 opcode 조합을 포함하는 이벤트만 쿼리할 수 있습니다. 일반적으로 작업을 사용하여 네트워킹 또는 데이터베이스 구성 요소와 같은 공급자의 주요 구성 요소를 식별합니다. 그런 다음 opcode를 사용하여 네트워킹 구성 요소에 대한 송신 및 수신 작업과 같이 구성 요소가 수행하는 작업을 식별할 수 있습니다. 구성 요소가 하나만 있는 경우 작업을 사용하여 연결 또는 연결 끊기와 같은 구성 요소의 주요 작업을 반영하고 opcode를 사용하여 레지스트리 읽기와 같은 작업 내의 작업을 반영할 수 있습니다. 작업을 지정하지 않고 opcode를 사용할 수도 있습니다. 작업 및 opcode를 사용하여 소비자에 대한 이벤트를 그룹화하는 방법은 전적으로 사용자에게 달려 있습니다.
작업을 정의하려면 task 요소를 사용합니다. opcode를 정의하려면 opcode 요소를 사용합니다. 최대 228개의 opcode를 지정할 수 있습니다. 작업 값 은 0보다 커야 합니다. opcode는 10에서 239까지의 범위에 있어야 합니다. Winmeta.xml 파일은 사용자 고유의 작업을 정의하는 대신 사용할 수 있는 일반적인 작업을 정의합니다.
다음 예제에서는 여러 작업 및 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>