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:

  1. 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 su kernelMode.
    • Definire almeno un struct elemento (in counterSet/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 e structfield da cui PCW deve leggere il valore del contatore.
  2. 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 chiama PcwRegister 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 nel PCW_DATA layout previsto dalle API PCW.
  3. 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.

  4. 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.

  5. All'installazione del componente, usare lodctr /m:<CounterManifest> <InstallPath> per installare il provider. Al momento della disinstallazione del componente, usare unlodctr (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 nella lodctr riga di applicationIdentity 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'attributo applicationIdentity .
    • In caso contrario, la directory di lavoro corrente verrà combinata con il nome del file dall'attributo applicationIdentity .

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

PcwRegister

PCW_CALLBACK

Schema dei contatori delle prestazioni

Strumento CTRPP