Partager via


Définition des tâches et des opcodes

Les fournisseurs utilisent des tâches et des opcodes pour regrouper logiquement des événements. Les événements de regroupement permettent aux consommateurs d’interroger uniquement les événements qui contiennent des combinaisons de tâches et d’opcode spécifiques. En règle générale, vous utilisez des tâches pour identifier un composant majeur du fournisseur, tel que le composant réseau ou la base de données. Vous pouvez ensuite utiliser des opcodes pour identifier les opérations effectuées par le composant, telles que les opérations d’envoi et de réception pour un composant réseau. Si vous n’avez qu’un seul composant, vous pouvez utiliser la tâche pour refléter une opération majeure dans le composant, telle que la connexion ou la déconnexion, et utiliser opcode pour refléter une activité au sein de l’opération telle que la lecture du Registre. Vous pouvez également utiliser opcode sans spécifier de tâche. La façon dont vous utilisez des tâches et des opcodes pour regrouper des événements pour le consommateur est entièrement à vous.

Pour définir une tâche, utilisez l’élément tâche. Pour définir un opcode, utilisez l’élément opcode. Vous pouvez spécifier jusqu’à 228 opcodes. La valeur de la tâche doit être supérieure à 0. Les opcodes doivent se trouver dans la plage comprise entre 10 et 239. Le fichier Winmeta.xml définit les opérations courantes que vous pouvez utiliser au lieu de définir vos propres opérations.

L’exemple suivant montre comment définir plusieurs tâches et opcodes.

<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>