Freigeben über


2. Definitionen für System- und Ereignisanbieter

WPR-Aufzeichnungsprofile (Windows Performance Recorder) werden in einer XML-Datei gespeichert, die über eine WPRP-Erweiterung verfügt. Eine Systemanbieterdefinition gibt die Systemschlüsselwörter, Stapel und Speicherpool-Tags in der .wprp-Datei an.

Anbieterdefinition

Elemente in der .wprp-Datei müssen in der folgenden Reihenfolge definiert werden:

  1. Alle Sammler

  2. Systemanbieter

  3. Ereignisanbieter

  4. Heap-Anbieter, wenn vorhanden

  5. Alle Profile

In einigen Fällen können Anbieter anstelle der Profildefinition definiert werden. Zum Beispiel:

<EventCollector Id="Collector1" Name="Sample Event Collector">
   <BufferSize Value="128"/>
   <Buffers Value="64"/>
</EventCollector>

<Profile Id="Sample.Verbose.File" Name="Sample" Description="Sample profile" DetailLevel="Verbose" LoggingMode="File">
   <Collectors>
      <EventCollectorId Value="Collector1">
         <EventProviders>
            <EventProvider Id="EventProvider_Microsoft-Windows-Kernel-Power" Name="Microsoft-Windows-Kernel-Power" NonPagedMemory="true">
               <Keywords>
                  <Keyword Value="0x4"/>
               </Keywords>
            </EventProvider>
         </EventProviders>
      </EventCollectorId>
   </Collectors>
</Profile>

Systemanbieter

Das einzige obligatorische Attribut für eine Systemanbieterdefinition ist Id. Innere XML-Tags geben die Schlüsselwörter, Stapel und Pooltags an, die aktiviert werden müssen. Eine Liste aller unterstützten Schlüsselwörter und Stapel finden Sie unter Stapel und Schlüsselwort (in SystemProvider).

Das folgende Codebeispiel zeigt eine Systemanbieterdefinition.

<SystemProvider
  Id="system-provider">
  <Keywords>
    <Keyword
      Value="ProcessThread"/>
    <Keyword
      Value="Loader"/>
    <Keyword
      Value="CSwitch"/>
  </Keywords>
  <Stacks>
    <Stack
      Value="ThreadCreate"/>
    <Stack
      Value="ReadyThread"/>
    <Stack
      Value="CSwitch"/>
  </Stacks>
  <PoolTags>
    <PoolTag
      Value="a*"/>
    <PoolTag
      Value="b*"/>
    <PoolTag
      Value="c*"/>
    <PoolTag
      Value="d*"/>
  </PoolTags>
</SystemProvider>

Ereignisanbieter

Eine Ereignisanbieterdefinition gibt den Anbieter der Ereignisablaufverfolgung für Windows (ETW) an, der verwendet werden soll, und die Schlüsselwörter und Ebenen, die aktiviert werden sollen. Eine Ereignisanbieterdefinition erfordert ein obligatorisches Name-Attribut und ein obligatorisches ID-Attribut.

Das Name-Attribut gibt einen der folgenden Namen an:

  • Der Name eines registrierten Crimson-Anbieters, z. B. „Microsoft-Windows-Search-Core“.

  • Die Anbieter-GUID, z. B. „49c2c27c-fe2d-40bf-8c4e-c3fb518037e7“.

  • Der Name eines früheren Anbieters, z. B. „IE6“.

  • Der Sonderfallname, z. B. „PerfTrack“ oder „DotNetProvider“.

Sie können die folgenden optionalen Attribute verwenden, um Anbieterparameter zu optimieren:

  • Stapel: Gibt an, ob der Anbieter Stapel erfasst. Die Standardeinstellung ist „false“.

  • Ebene: Gibt die ETW-Protokollierungsebene an. Die Standardeinstellung ist 0xFF.

  • NonPagedMemory: Gibt an, ob WPR für diesen Anbieter nicht ausgelagerten Speicher für den Puffer verwendet. Die Standardeinstellung ist „false“.

    Warnung Einige Windows-Ereignisanbieter erfordern die Verwendung von nicht ausgelagertem Speicher während der Ablaufverfolgungserfassung. Ein Beispiel für einen Ereignisanbieter, der NonPagedMemory erfordert, ist EventProvider_Microsoft-Windows-Win32k.

  • CaptureStateOnly: Wenn auf „true“ gesetzt, zeigt dies an, dass WPR diesen Anbieter nur im angegebenen Erfassungsstatus aktiviert.

  • SID: Gibt an, ob die erweiterten Daten protokollierter Ereignisse die Sicherheits-ID (SID) des Benutzers enthalten.

  • TSID: Wenn auf „true“ gesetzt, wird die Terminalsitzungskennung für erweiterte Daten von protokollierten Ereignissen angegeben.

Optionale interne XML-Tags geben die zu aktivierenden Schlüsselwörter an. Im Gegensatz zu Systemanbietern haben Ereignisanbieter keine definierten Textkonstanten. Daher verfügen Ereignisanbieter über Hexadezimalwerte. Die Syntax ist jedoch identisch mit den Systemanbietern. Wenn Sie keine Schlüsselwörter angeben, ist der Standardwert 0xFFFFFFFFFFFFFFFF.

Heap-Ereignisanbieter

Die Heap-Anbieterdefinition gibt den Prozessbezeichner des Prozesses an, für den WPR Heap-Ereignisse erfasst. Id ist das einzige obligatorische Attribut. Das untergeordnete Element HeapProcessId ist nicht obligatorisch. Dieses Element gibt das Prozess-ID-Attribut des zu analysierenden Prozesses an. Das folgende Beispiel zeigt die erforderliche Vorgehensweise.

<HeapEventProvider
  Id="Base_Heap_Provider">
</HeapEventProvider>
<HeapEventProvider
  Base="Base_Heap_Provider"
  Id="Derived_Heap_Provider">
  <HeapProcessIds Operation="Set">
    <HeapProcessId Value="2314"/>
  </HeapProcessIds>
</HeapEventProvider>

Aufnahmestatusanbieter

Im Gegensatz zu regulären Anbietern, die in der gesamten Ablaufverfolgungssitzung aktiviert sind, werden Aufnahmestatusanbieter nur aktiviert, wenn Sie eine Aufnahmesitzung speichern oder starten. Das folgende Beispiel zeigt sowohl reguläre als auch Aufnahmestatusanbieter.

<EventProvider Id="sample-provider" Name="SampleProvider" NonPagedMemory="true" Level="5">
  <Keywords>
    <Keyword Value="0x98"/> <!-- Provider is enabled with these keywords throughout the tracing session. -->
  </Keywords>
  <CaptureStateOnStart>
    <Keyword Value="0xff4"/> <!-- Provider is enabled with these keywords when tracing is started. -->
  </CaptureStateOnStart>
  <CaptureStateOnSave>
    <Keyword Value="0x118"/> <!-- Provider is enabled with these keywords when tracing is saved. -->
  </CaptureStateOnSave>
</EventProvider>

<EventProvider Id="EventProvider_DWMWin32k_CaptureState" Name="e7ef96be-969f-414f-97d7-3ddb7b558ccc" NonPagedMemory="true" CaptureStateOnly="true" >
  <!-- CaptureStateOnly="true" means provider is not enabled throughout the tracing session. -->
  <CaptureStateOnSave>
    <Keyword Value="0x80000"/> <!-- Provider is enabled with these keywords when tracing is saved. -->
  </CaptureStateOnSave>
</EventProvider>

Beispiel

Im folgenden Codebeispiel werden zwei Ereignisanbieter definiert.

<EventProvider
  Id="Win32K-provider"
  Name="Microsoft-Windows-Win32K"
  NonPagedMemory="true"
  Stack="true">
  <Keywords>
    <Keyword
      Value="0x240000"/>
  </Keywords>
</EventProvider>

<EventProvider
  Id="Search-Core-provider"
  Name="Microsoft-Windows-Search-Core"/>

Erstellen von Aufzeichnungsprofilen

1. Definitionen für Collector

3. Profildefinitionen

SystemProvider

EventProvider

HeapEventProvider

Keyword (in SystemProvider)

Stapel

PoolTag