Uso dei contatori delle prestazioni in modalità kernel
I componenti in modalità kernel forniscono contatori delle prestazioni usando le API Performance Counters for Windows (PCW).
Per sviluppare nuovi provider di dati contatori, seguire questa procedura:
Scrivere un manifesto del contatore che descrive il provider e i relativi contatori. Il manifesto del contatore è un file in formato XML che definisce il provider di contatori delle prestazioni e i relativi contatori.
- Impostare l'attributo
applicationIdentity
sul nome di un file binario che verrà installato come parte del componente in modalità kernel e che conterrà le risorse stringa necessarie dai consumer di dati delle prestazioni. - Impostare l'attributo
providerType
sukernelMode
. - Definire almeno un
struct
elemento (incounterSet/structs
) con il nome di una struttura C/C++ che verrà usata durante il passaggio di valori contatori dal componente alle API PCW. - In ogni
counter
, definire estruct
field
da cui PCW deve leggere il valore del contatore.
- Impostare l'attributo
Nell'ambito del processo di compilazione per il componente, usare lo strumento CTRPP per compilare il manifesto del contatore. Lo strumento Counter Preprocessor (CTRPP) è incluso nel WDK ed è disponibile nel prompt dei comandi per sviluppatori digitando
ctrpp
.) Lo strumento CTRPP genererà un.rc
file e un.h
file.- Il file generato da CTRPP deve essere compilato dallo strumento Del compilatore di risorse (RC.exe) e il file risultante
.res
deve essere collegato al file binario.rc
denominato nell'attributoapplicationIdentity
. È possibile compilare direttamente il file generato.rc
da CTRPP oppure è possibile#include
generare il file CTRPP in un file esistente.rc
compilato nel file binario.rc
. - Il file generato da
.h
CTRPP contiene funzioni helper che esegue il wrapping delle API PCW sottostanti. Ad esempio, il file generato.h
da CTRPP conterrà una funzione RegisterXxx che chiamaPcwRegister
per conto dell'utente. Nella maggior parte dei casi, si chiameranno le funzioni helper generate da CTRPP anziché chiamare direttamente le API PCW, ma è possibile fare riferimento alla documentazione per le API PCW per comprendere le funzioni generate da CTRPP corrispondenti. Le funzioni helper gestiscono la conversione del layout dei dati del contatore del componente nelPCW_DATA
layout previsto dalle API PCW.
- Il file generato da CTRPP deve essere compilato dallo strumento Del compilatore di risorse (RC.exe) e il file risultante
All'inizializzazione del componente richiamare la funzione RegisterXxx generata da CTRPP, che chiama PcwRegister. All'arresto del componente richiamare la funzione UnregisterXxx generata da CTRPP, che chiama PcwUnregister.
Aggiungere codice per fornire i dati del contatore. Questa operazione viene eseguita implementando una funzione di callback PCW_CALLBACK o mantenendo strutture di dati con valori di contatore per ogni istanza e richiamando le funzioni CreateInstance Xxx e CloseInstanceXxx generate da CTRPP come istanze vengono create ed eliminate.
All'installazione del componente, usare
lodctr /m:<CounterManifest> <InstallPath>
per installare il provider. Al momento della disinstallazione del componente, usareunlodctr
(con/m
o/g
parametri) per disinstallare il provider. L'installazione del provider aggiunge i contatori del provider a un repository a livello di sistema di contatori disponibili in modo che i contatori possano essere usati dai consumer di dati delle prestazioni, ad esempio perfmon, typeperf o WMI. In particolare, l'installazione del provider registra il percorso completo del file binario (DLL, SYS o EXE) contenente la tabella stringa del provider. Il percorso completo del file binario è determinato combinando l'attributo del manifesto con i<CounterManifest>
valori e<InstallPath>
usati nellalodctr
riga diapplicationIdentity
comando come indicato di seguito:- Se l'attributo
applicationIdentity
è un percorso completo, verrà usato. - In caso contrario, se il
<InstallationPath>
parametro è un percorso completo, verrà usato. - In caso contrario, se il
<CounterManifest>
parametro è un percorso completo, la directory da<CounterManifest>
verrà combinata con il nome del file dall'attributoapplicationIdentity
. - In caso contrario, la directory di lavoro corrente verrà combinata con il nome del file dall'attributo
applicationIdentity
.
- Se l'attributo
Per un esempio di provider PCW in modalità kernel, vedere l'esempio di contatore del kernel nel repository di esempi di driver Windows in GitHub.
Vedi anche
Monitoraggio delle prestazioni in modalità kernel