Bagikan melalui


Menentukan Tugas dan Opcodes

Penyedia menggunakan tugas dan opcode untuk mengelompokkan peristiwa secara logis. Peristiwa pengelompokan membantu konsumen mengkueri hanya untuk peristiwa yang berisi kombinasi tugas dan opcode tertentu. Biasanya, Anda menggunakan tugas untuk mengidentifikasi komponen utama penyedia seperti komponen jaringan atau database. Anda kemudian dapat menggunakan opcode untuk mengidentifikasi operasi yang dilakukan komponen, seperti operasi kirim dan terima untuk komponen jaringan. Jika Anda hanya memiliki satu komponen, Anda dapat menggunakan tugas untuk mencerminkan operasi utama dalam komponen, seperti menyambungkan atau memutuskan sambungan, dan menggunakan opcode untuk mencerminkan aktivitas dalam operasi seperti membaca registri. Anda juga dapat menggunakan opcode tanpa menentukan tugas. Cara Anda menggunakan tugas dan opcode untuk mengelompokkan peristiwa untuk konsumen sepenuhnya terserah Anda.

Untuk menentukan tugas, gunakan elemen tugas . Untuk menentukan opcode, gunakan elemen opcode . Anda dapat menentukan hingga 228 opcode. Nilai tugas harus lebih besar dari 0. Opcode harus dalam kisaran 10 hingga 239. File Winmeta.xml menentukan operasi umum yang dapat Anda gunakan alih-alih menentukan operasi Anda sendiri.

Contoh berikut menunjukkan cara menentukan beberapa tugas dan 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>