Uso de contadores de rendimiento del modo kernel
Los componentes en modo kernel proporcionan contadores de rendimiento mediante las API contadores de rendimiento para Windows (PCW).
Siga estos pasos para desarrollar nuevos proveedores de datos de contadores:
Escriba un manifiesto de contador que describa el proveedor y sus conjuntos de contadores. El manifiesto del contador es un archivo de formato XML que define el proveedor de contadores de rendimiento y sus conjuntos de contadores.
- Establezca el
applicationIdentity
atributo en el nombre de un binario que se instalará como parte del componente en modo kernel y que contendrá los recursos de cadena necesarios para los consumidores de datos de rendimiento. - Defina el atributo
providerType
akernelMode
. - Defina al menos un
struct
elemento (encounterSet/structs
) con el nombre de una estructura de C/C++ que se usará al pasar valores de contador del componente a las API de PCW. - En cada
counter
, defina yfield
struct
desde el que PCW debe leer el valor del contador.
- Establezca el
Como parte del proceso de compilación del componente, use la herramienta CTRPP para compilar el manifiesto del contador. (La herramienta Preprocesador de contadores (CTRPP) se incluye en el WDK y está disponible en el símbolo del sistema para desarrolladores escribiendo
ctrpp
.) La herramienta CTRPP generará un.rc
archivo y un.h
archivo.- La herramienta Compilador de recursos (RC.exe) debe compilar el archivo generado
.rc
por CTRPP y el archivo resultante.res
debe estar vinculado al binario denominado en elapplicationIdentity
atributo . Puede compilar directamente el archivo generado por.rc
CTRPP o puede#include
el archivo generado por.rc
CTRPP en un archivo existente.rc
que se compila en el binario. - El archivo generado por
.h
CTRPP contiene funciones auxiliares que encapsulan las API de PCW subyacentes. Por ejemplo, el archivo generado por.h
CTRPP contendrá una función RegisterXxx que llamaPcwRegister
a en su nombre. En la mayoría de los casos, llamará a las funciones auxiliares generadas por CTRPP en lugar de llamar directamente a cualquier API de PCW, pero puede consultar la documentación de las API de PCW para comprender lo que hacen las funciones generadas por CTRPP correspondientes. Las funciones auxiliares administran la traducción del diseño de datos del contador del componente alPCW_DATA
diseño esperado por las API de PCW.
- La herramienta Compilador de recursos (RC.exe) debe compilar el archivo generado
En la inicialización de componentes, invoque la función RegisterXxx generada por CTRPP, que llama a PcwRegister. Al apagar el componente, invoque la función UnregisterXxx generada por CTRPP, que llama a PcwUnregister.
Agregue código para proporcionar datos de contador. Esto se hace implementando una función de devolución de llamada PCW_CALLBACK o manteniendo estructuras de datos con valores de contador para cada instancia e invocando las funciones CreateInstanceXxx y CloseInstanceXxx generadas por CTRPP a medida que se crean y destruyen las instancias.
En la instalación de componentes, use
lodctr /m:<CounterManifest> <InstallPath>
para instalar el proveedor. En la desinstalación de componentes, useunlodctr
(con/m
o/g
parámetros) para desinstalar el proveedor. La instalación del proveedor agrega los conjuntos de contadores del proveedor a un repositorio de conjuntos de contadores disponibles para que los consumidores de datos de rendimiento puedan usar los conjuntos de contadores, como perfmon, typeperf o WMI. En concreto, al instalar el proveedor se registra la ruta de acceso completa al archivo binario (DLL, SYS o EXE) que contiene la tabla de cadenas del proveedor. La ruta de acceso completa al archivo binario se determina mediante la combinación del atributo delapplicationIdentity
manifiesto con los<CounterManifest>
valores y<InstallPath>
usados en la línea de comandos de lalodctr
siguiente manera:- Si el
applicationIdentity
atributo es una ruta de acceso completa, se usará. - De lo contrario, si el
<InstallationPath>
parámetro es una ruta de acceso completa, se usará. - De lo contrario, si el
<CounterManifest>
parámetro es una ruta de acceso completa, el directorio de<CounterManifest>
se combinará con el nombre de archivo delapplicationIdentity
atributo . - De lo contrario, el directorio de trabajo actual se combinará con el nombre de archivo del
applicationIdentity
atributo .
- Si el
Para obtener un ejemplo de un proveedor PCW en modo kernel, consulte el ejemplo de contador de kernel (Kcs) en el repositorio de ejemplos de controladores de Windows en GitHub.
Consulte también
Supervisión del rendimiento del modo kernel