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. Le regroupement d’événements permet 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 principal du fournisseur, tel que le composant de mise en réseau ou de 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 d’un composant réseau. Si vous n’aviez 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, comme 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 vous appartient entièrement.

Pour définir une tâche, utilisez l’élément task . 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 être 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 les vôtres.

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>