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:
Alle Sammler
Systemanbieter
Ereignisanbieter
Heap-Anbieter, wenn vorhanden
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"/>