Specifica dei dati dei contatori tramite la versione 2.0
I provider di dati delle prestazioni moderni usano un manifesto per definire i dati dei contatori e usare le API del provider di contatori delle prestazioni per gestire i dati all'interno del contesto del provider. I provider implementati usando un manifesto e le API del provider di contatori delle prestazioni sono spesso denominati provider V2. Windows supporta provider V2 in modalità utente in Windows Vista o versioni successive e provider V2 in modalità kernel in Windows 7 o versione successiva.
Questa pagina descrive i provider V2 in modalità utente. Per informazioni sui provider V2 in modalità kernel, vedere Monitoraggio delle prestazioni in modalità kernel.
In fase di esecuzione, i provider V2 funzionano come segue:
- Il processo del provider si registra con il sistema contatore delle prestazioni di Windows chiamando PerfStartProvider e PerfSetCounterSetInfo. Il provider fornisce facoltativamente una funzione di callback che riceverà una notifica sulle richieste consumer.
- Il processo del provider aggiunge o rimuove le istanze in base alle esigenze usando PerfCreateInstance e PerfDeleteInstance. Il provider aggiorna i valori dei contatori quando cambiano usando le API PerfSet%.
- Un consumer effettua una richiesta di dati da un counterset. Il sistema verifica che il chiamante disponga delle autorizzazioni per raccogliere i dati. Il sistema usa quindi un thread di lavoro in esecuzione nel processo del provider per gestire la richiesta, richiamando la funzione di callback del provider, se appropriato. Il thread di lavoro copia i dati raccolti in un buffer gestito dal sistema e quindi restituisce i dati al consumer.
Passaggi per la creazione di un provider
Scrivere un manifesto che definisce i dati del contatore forniti dal provider. Per informazioni dettagliate sulla scrittura del manifesto, vedere Schema dei contatori delle prestazioni.
Usare CTRPP per generare il codice modello incluso nel provider. Il codice del modello include le strutture che definiscono i set di contatori, le funzioni CounterInitialize e CounterCleanup e le stringhe di risorse.
Il provider deve chiamare le funzioni CounterInitialize e CounterCleanup . CounterInitialize chiama la funzione PerfStartProvider per registrare il provider e chiama anche la funzione PerfSetCounterSetInfo per inizializzare il set di contatori. CounterCleanup chiama la funzione PerfStopProvider per rimuovere la registrazione del provider.
Includere il codice del modello del passaggio precedente nel progetto e completare il provider.
Per completare il provider, è necessario chiamare la funzione PerfCreateInstance per ogni istanza del set di contatori specificato.
Per impostare i valori del contatore, chiamare una delle funzioni seguenti:
Il vantaggio dell'uso di PerfSetCounterRefValue è che non è necessario effettuare una chiamata di funzione per impostare o aggiornare il valore del contatore, è sufficiente aggiornare la variabile del contatore locale (la variabile a cui i punti di riferimento) e i contatori delle prestazioni usano il puntatore per accedere al valore del contatore.
Se non si usa PerfSetCounterRefValue, è possibile usare le funzioni seguenti per incrementare o decrementare il valore del contatore:
- PerfDecrementULongCounterValue
- PerfDecrementULongLongCounterValue
- PerfIncrementULongCounterValue
- PerfIncrementULongLongCounterValue
Prima dell'uscita dal provider, deve chiamare PerfDeleteInstance per ogni istanza del set di contatori creata.
Se è stato specificato l'attributo di callback nell'elemento del provider nel manifesto o si è usato l'argomento -NotificationCallback quando si chiama CTRPP, è necessario implementare la funzione di callback ControlCallback . Passare la funzione di callback a CounterInitialize.
Se si usa -MemoryRoutines quando si chiama CTRPP, è necessario implementare le funzioni di callback AllocateMemory e FreeMemory . Le funzioni di callback vengono passate a CounterInitialize.
Quando si installa il provider, usare lo strumento LodCtr per scrivere il nome del file binario contenente le stringhe di risorse localizzate e gli ID risorsa nel Registro di sistema. Per informazioni dettagliate sull'uso di LodCtr, vedere Schema dei contatori delle prestazioni.
Quando si disinstalla il provider, usare lo strumento UnlodCtr per rimuovere le informazioni del provider dal Registro di sistema.