Proporcionar datos de contador con la versión 2.0
Los proveedores de datos de rendimiento modernos usan un manifiesto para definir los datos del contador y usar las API del proveedor de contadores de rendimiento para administrar los datos en el contexto del proveedor. Los proveedores implementados mediante las API de proveedor de contadores de rendimiento y manifiesto suelen denominar proveedores V2. Windows admite proveedores V2 en modo de usuario en Windows Vista o en proveedores V2 en modo kernel v2 en Windows 7 o versiones posteriores.
En esta página se describen los proveedores V2 en modo de usuario. Para obtener información sobre los proveedores de modo kernel V2, consulte Supervisión del rendimiento del modo kernel.
En tiempo de ejecución, los proveedores de V2 funcionan de la siguiente manera:
- El proceso de proveedor se registra en el sistema de contadores de rendimiento de Windows mediante una llamada a PerfStartProvider y PerfSetCounterSetInfo. Opcionalmente, el proveedor proporciona una función de devolución de llamada que se notificará sobre las solicitudes de consumidor.
- El proceso de proveedor agrega o quita instancias según corresponda mediante PerfCreateInstance y PerfDeleteInstance. El proveedor actualiza los valores de contador cuando cambian mediante las API PerfSet*** .
- Un consumidor realiza una solicitud de datos de un conjunto de contadores. El sistema comprueba que el autor de la llamada tiene permisos para recopilar los datos. A continuación, el sistema usa un subproceso de trabajo que se ejecuta en el proceso de proveedor para controlar la solicitud, invocando la función de devolución de llamada del proveedor si procede. El subproceso de trabajo copia los datos recopilados en un búfer administrado por el sistema y, a continuación, devuelve los datos al consumidor.
Pasos para crear un proveedor
Escriba un manifiesto que defina los datos de contador que proporcionará el proveedor. Para obtener más información sobre cómo escribir el manifiesto, vea Esquema de contadores de rendimiento.
Use CTRPP para generar el código de plantilla que incluya en el proveedor. El código de plantilla incluye las estructuras que definen los conjuntos de contadores, las funciones CounterInitialize y CounterCleanup y las cadenas de recursos.
El proveedor debe llamar a las funciones CounterInitialize y CounterCleanup . CounterInitialize llama a la función PerfStartProvider para registrar el proveedor y también llama a la función PerfSetCounterSetInfo para inicializar el conjunto de contadores. CounterCleanup llama a la función PerfStopProvider para quitar el registro del proveedor.
Incluya el código de plantilla del paso anterior en el proyecto y complete el proveedor.
Para completar el proveedor, debe llamar a la función PerfCreateInstance para cada instancia del conjunto de contadores que proporcione.
Para establecer los valores de contador, llame a una de las siguientes funciones:
La ventaja de usar PerfSetCounterRefValue es que no es necesario realizar una llamada de función para establecer o actualizar el valor del contador, simplemente actualiza la variable de contador local (la variable a la que los puntos de referencia) y los contadores de rendimiento usan el puntero para tener acceso al valor del contador.
Si no usa PerfSetCounterRefValue, puede usar las siguientes funciones para incrementar o disminuir el valor del contador:
- PerfDecrementULongCounterValue
- PerfDecrementULongLongCounterValue
- PerfIncrementULongCounterValue
- PerfIncrementULongLongCounterValue
Antes de salir del proveedor, debe llamar a PerfDeleteInstance para cada instancia del conjunto de contadores que creó.
Si especificó el atributo de devolución de llamada en el elemento provider del manifiesto o usó el argumento -NotificationCallback al llamar a CTRPP, debe implementar la función de devolución de llamada ControlCallback . La función de devolución de llamada se pasa a CounterInitialize.
Si usó -MemoryRoutines al llamar a CTRPP, debe implementar las funciones de devolución de llamada AllocateMemory y FreeMemory . Las funciones de devolución de llamada se pasan a CounterInitialize.
Al instalar el proveedor, use la herramienta LodCtr para escribir el nombre del archivo binario que contiene las cadenas de recursos localizadas e identificadores de recursos en el registro. Para obtener más información sobre el uso de LodCtr, consulte Esquema de contadores de rendimiento.
Al desinstalar el proveedor, use la herramienta UnlodCtr para quitar la información del proveedor del registro.