2. Definiciones del proveedor de eventos y del sistema
Los perfiles de grabación de Windows Performance Recorder (WPR) se almacenan en un archivo XML que tiene una extensión .wprp. Una definición del proveedor del sistema especifica las palabras clave del sistema, las pilas y las etiquetas del grupo de memoria en el archivo .wprp.
Definición del proveedor
Los elementos del archivo .wprp deben definirse en el orden siguiente:
Todos los recopiladores
Proveedores del sistema
Proveedores de eventos
Proveedores de montón, si están presentes
Todos los perfiles
En algunos casos, los proveedores se pueden definir en, en lugar de antes, la definición del perfil. Por ejemplo:
<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>
Proveedores del sistema
El único atributo obligatorio para una definición del proveedor del sistema es Id. Las etiquetas XML internas especifican las palabras clave, las pilas y las etiquetas de grupo que se van a habilitar. Para obtener listas de todas las palabras clave y pilas admitidas, vea Stack and Keyword (in SystemProvider).
En el ejemplo de código siguiente se muestra una definición del proveedor del sistema.
<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>
Proveedores de eventos
Una definición del proveedor de eventos especifica el proveedor seguimiento de eventos para Windows (ETW) que se usará y las palabras clave y los niveles que se van a habilitar. Una definición del proveedor de eventos requiere un atributo Name obligatorio y un atributo Id obligatorio.
El atributo Name especifica uno de los siguientes nombres:
Nombre de un proveedor de Crimson registrado, como "Microsoft-Windows-Search-Core".
Guid del proveedor, como "49c2c27c-fe2d-40bf-8c4e-c3fb518037e7".
Nombre de un proveedor anterior, como "IE6".
El nombre de mayúsculas y minúsculas especiales, como "PerfTrack" o "DotNetProvider".
Puede usar los siguientes atributos opcionales para ajustar los parámetros del proveedor:
Stack: indica si el proveedor captura las pilas. El valor predeterminado es "false".
Nivel: especifica el nivel de registro etw. El valor predeterminado es 0xFF.
NonPagedMemory: indica si WPR usa memoria no paginada para el búfer para este proveedor. El valor predeterminado es "false".
Advertencia Algunos proveedores de eventos de Windows requieren el uso de memoria no paginada durante la captura de seguimiento. Un ejemplo de proveedor de eventos que requiere NonPagedMemory es
EventProvider_Microsoft-Windows-Win32k
.CaptureStateOnly: si se establece en "true", indica que WPR habilita este proveedor solo en el estado de captura especificado.
SID: especifica si los datos extendidos de los eventos registrados incluyen el identificador de seguridad (SID) del usuario.
TSID: si se establece en "true", especifica el identificador de sesión de terminal para los datos extendidos de los eventos registrados.
Las etiquetas XML internas opcionales especifican las palabras clave que se van a habilitar. A diferencia de los proveedores del sistema, los proveedores de eventos no tienen constantes textuales definidas. Por lo tanto, los proveedores de eventos tienen valores hexadecimales. Sin embargo, la sintaxis es la misma que la de los proveedores del sistema. Si no especifica palabras clave, el valor predeterminado es 0xFFFFFFFFFFFFFFFF.
Proveedores de eventos del montón
La definición del proveedor del montón especifica el identificador de proceso del proceso para el que WPR captura los eventos del montón. Id es el único atributo obligatorio. El elemento secundario HeapProcessId no es obligatorio. Este elemento especifica el atributo process Id del proceso que desea analizar. El ejemplo siguiente muestra cómo hacerlo.
<HeapEventProvider
Id="Base_Heap_Provider">
</HeapEventProvider>
<HeapEventProvider
Base="Base_Heap_Provider"
Id="Derived_Heap_Provider">
<HeapProcessIds Operation="Set">
<HeapProcessId Value="2314"/>
</HeapProcessIds>
</HeapEventProvider>
Proveedores de estado de captura
A diferencia de los proveedores normales que están habilitados en toda la sesión de seguimiento, los proveedores de estado de captura solo se habilitan al guardar o iniciar una sesión de captura. En el ejemplo siguiente se muestran los proveedores normales y de estado de captura.
<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>
Ejemplo
En el ejemplo de código siguiente se definen dos proveedores de eventos.
<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"/>
Temas relacionados
Creación de perfiles de grabación
1. Definiciones del recopilador