Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les fournisseurs peuvent implémenter cette fonction pour recevoir une notification lorsque les consommateurs effectuent certaines actions, telles que l’ajout ou la suppression de compteurs d’une requête. PERFLIB appelle le rappel avant la fin de la demande du consommateur.
Le type PERFLIBREQUEST définit un pointeur vers cette fonction de rappel. La fonction ControlCallback est un espace réservé pour le nom de la fonction définie par l’application.
Syntaxe
PERFLIBREQUEST Perflibrequest;
ULONG Perflibrequest(
[in] ULONG RequestCode,
[in] PVOID Buffer,
[in] ULONG BufferSize
)
{...}
Paramètres
[in] RequestCode
Le code de requête peut être l’une des valeurs suivantes.
| Valeur | Meaning |
|---|---|
|
Le consommateur ajoute un compteur à la requête. PERFLIB appelle le rappel avec ce code de requête pour chaque compteur ajouté à la requête. Le paramètre Buffer contient une structure PERF_COUNTER_IDENTITY qui identifie le compteur en cours d’ajout.
Les fournisseurs peuvent utiliser cette notification pour commencer à compter. |
|
Le consommateur supprime un compteur de la requête. PERFLIB appelle le rappel avec ce code de requête pour chaque compteur supprimé de la requête. Le paramètre Buffer contient une structure PERF_COUNTER_IDENTITY qui identifie le compteur en cours de suppression.
Les fournisseurs peuvent utiliser cette notification pour arrêter le comptage. |
|
Le consommateur énumére les instances du jeu de compteurs. Le paramètre Buffer contient une chaîne Unicode terminée par null qui identifie le nom de l’ordinateur (ou de son adresse IP) à partir duquel le consommateur énumére les instances. |
|
Le consommateur commence à collecter des données de compteur. Le paramètre Buffer contient une chaîne Unicode terminée par null qui identifie le nom de l’ordinateur (ou de son adresse IP) à partir duquel le consommateur collecte des données.
Les fournisseurs peuvent utiliser cette notification si l’état des données brutes est critique (par exemple, les compteurs liés aux transactions où les mises à jour partielles ne sont pas autorisées). Cette notification permet au fournisseur de vider toutes les mises à jour en attente et de verrouiller les futures mises à jour avant le début de la collecte. |
|
La collecte de données de compteur est terminée. Le paramètre Buffer contient une chaîne Unicode terminée par null qui identifie le nom de l’ordinateur (ou de son adresse IP) à partir duquel le consommateur a collecté les données.
Les fournisseurs peuvent utiliser cette notification pour libérer le verrou de mise à jour imposé par la notification de démarrage du regroupement afin que les mises à jour des données du compteur puissent reprendre. |
[in] Buffer
Le contenu de la mémoire tampon dépend de la requête. Pour le contenu possible, consultez le paramètre RequestCode .
[in] BufferSize
Taille, en octets, du paramètre De mémoire tampon .
Valeur retournée
Retournez ERROR_SUCCESS si le rappel réussit.
Si le rappel échoue, PERFLIB retourne le code d’erreur au consommateur si la demande est PERF_ADD_COUNTER, PERF_ENUM_INSTANCES ou PERF_COLLECT_START ; sinon, le code d’erreur est ignoré.
Remarques
Si l’attribut de rappel de l’élément fournisseur est « personnalisé » ou si vous avez utilisé l’argument -NotificationCallback lors de l’appel de CTRPP, vous devez implémenter cette fonction. Vous passez le nom de votre fonction de rappel à CounterInitialize.
Windows Vista : La fonction CounterInitialize est nommée PerfAutoInitialize. L’outil CTRPP génère également un squelette de ce rappel qui inclut tous les codes de requête. Vous ajoutez ensuite du code aux codes de requête que vous souhaitez prendre en charge et supprimer les autres.
Le rappel doit se terminer dans un délai d’une seconde. Si le rappel n’est pas terminé dans le temps, PERFLIB continue avec la demande du consommateur et ignore la valeur de retour du rappel lorsqu’il est terminé.
Examples
L’exemple suivant montre une implémentation simple d’une fonction ControlCallback .
ULONG MyControlCallback(ULONG RequestCode, PVOID pBuffer, ULONG* pBufferSize)
{
ULONG Status = ERROR_SUCCESS;
PWNODE_HEADER Wnode = (PWNODE_HEADER)pBuffer;
LPWSTR pComputerName = NULL;
LPWSTR pInstance = NULL;
PPERF_COUNTER_IDENTITY pCounter;
UNREFERENCED_PARAMETER(pBufferSize);
switch (RequestCode)
{
case PERF_ADD_COUNTER:
pCounter = (PPERF_COUNTER_IDENTITY)(((LPBYTE) Wnode) + sizeof(WNODE_HEADER));
pComputerName = (LPWSTR)(((LPBYTE) pCounter) + pCounter->MachineOffset);
pInstance = (pCounter->NameOffset > 0)
? (LPWSTR) (((LPBYTE) pCounter) + pCounter->NameOffset) : NULL;
break;
case PERF_REMOVE_COUNTER:
pCounter = (PPERF_COUNTER_IDENTITY)(((LPBYTE) Wnode) + sizeof(WNODE_HEADER));
pComputerName = (LPWSTR)(((LPBYTE) pCounter) + pCounter->MachineOffset);
pInstance = (pCounter->NameOffset > 0)
? (LPWSTR) (((LPBYTE) pCounter) + pCounter->NameOffset) : NULL;
break;
case PERF_ENUM_INSTANCES:
pComputerName = (LPWSTR) (((LPBYTE) Wnode) + sizeof(WNODE_HEADER));
break;
case PERF_COLLECT_START:
pComputerName = (LPWSTR) (((LPBYTE) Wnode) + sizeof(WNODE_HEADER));
break;
case PERF_COLLECT_END:
pComputerName = (LPWSTR) (((LPBYTE) Wnode) + sizeof(WNODE_HEADER));
break;
default:
wprintf(L"Unknown request code, %lu\n", RequestCode);
}
return Status;
}
Spécifications
| Requirement | Valeur |
|---|---|
| Client minimum requis | Windows Vista [applications de bureau uniquement] |
| Serveur minimal pris en charge | Windows Server 2008 [applications de bureau uniquement] |
| plateforme cible | Fenêtres |
| Header | perflib.h |