タスクとオペコードの定義

プロバイダーは、タスクとオペコードを使用して、イベントを論理的にグループ化します。 イベントをグループ化すると、コンシューマーは、特定のタスクとオペコードの組み合わせを含むイベントについてのみクエリを実行できます。 通常、タスクを使用して、ネットワークやデータベース コンポーネントなどのプロバイダーの主要なコンポーネントを識別します。 その後、オペコードを使用して、ネットワーク コンポーネントの送受信操作など、コンポーネントが実行する操作を識別できます。 コンポーネントが 1 つしかない場合は、タスクを使用して、接続や切断などの主要な操作をコンポーネントに反映し、opcode を使用してレジストリの読み取りなどの操作内のアクティビティを反映できます。 タスクを指定せずにオペコードを使用することもできます。 タスクとオペコードを使用してコンシューマーのイベントをグループ化する方法は、完全に自分次第です。

タスクを定義するには、 task 要素を使用します。 オペコードを定義するには、 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>