PdhExpandCounterPathA, fonction (pdh.h)
Examine l’ordinateur spécifié (ou l’ordinateur local si aucun n’est spécifié) à la recherche de compteurs et d’instances de compteurs qui correspondent aux chaînes génériques dans le chemin du compteur.
Syntaxe
PDH_FUNCTION PdhExpandCounterPathA(
[in] LPCSTR szWildCardPath,
[out] PZZSTR mszExpandedPathList,
[in, out] LPDWORD pcchPathListLength
);
Paramètres
[in] szWildCardPath
Chaîne terminée par null qui contient le chemin du compteur à développer. La fonction recherche des correspondances sur l’ordinateur spécifié dans le chemin d’accès. Si le chemin d’accès ne spécifie pas d’ordinateur, la fonction recherche l’ordinateur local. La longueur maximale d’un chemin de compteur est PDH_MAX_COUNTER_PATH.
[out] mszExpandedPathList
Mémoire tampon allouée à l’appelant qui reçoit la liste des chemins de compteur développés qui correspondent à la spécification de caractères génériques dans szWildCardPath. Chaque chemin de compteur de cette liste est terminé par un caractère null . La liste se termine par deux caractères NULL . Définissez sur NULL si pcchPathListLength est égal à zéro.
[in, out] pcchPathListLength
Taille de la mémoire tampon mszExpandedPathList , en TCHAR. Si la valeur est zéro à l’entrée, la fonction retourne PDH_MORE_DATA et définit ce paramètre sur la taille de mémoire tampon requise. Si la mémoire tampon est supérieure à la taille requise, la fonction définit ce paramètre sur la taille réelle de la mémoire tampon utilisée. Si la taille spécifiée sur l’entrée est supérieure à zéro, mais inférieure à la taille requise, vous ne devez pas vous appuyer sur la taille retournée pour réallouer la mémoire tampon.
Valeur retournée
Si la fonction réussit, elle retourne ERROR_SUCCESS.
Si la fonction échoue, la valeur de retour est un code d’erreur système ou un code d’erreur PDH.
Code de retour | Description |
---|---|
|
La mémoire tampon mszExpandedPathList est trop petite pour contenir la liste des chemins. Cette valeur de retour est attendue si pcchPathListLength est égal à zéro à l’entrée. Si la taille spécifiée sur l’entrée est supérieure à zéro, mais inférieure à la taille requise, vous ne devez pas vous appuyer sur la taille retournée pour réallouer la mémoire tampon. |
|
Un paramètre n'est pas valide. Par exemple, sur certaines versions, vous pouvez recevoir cette erreur si la taille spécifiée sur l’entrée est supérieure à zéro, mais inférieure à la taille requise. |
|
Impossible d’allouer de la mémoire pour prendre en charge cette fonction. |
Remarques
Vous devez appeler cette fonction deux fois, la première fois pour obtenir la taille de mémoire tampon requise ( définissez mszExpandedPathList surNULL et pcchPathListLength sur 0) et la deuxième fois pour obtenir les données.
Le format général du chemin du compteur est le suivant :
\computer\object(parent/instance#index)\counter
Les composants parent, instance, index et compteur du chemin du compteur peuvent contenir un nom valide ou un caractère générique. Les composants ordinateur, parent, instance et index ne sont pas nécessaires pour tous les compteurs.
Les chemins de compteur que vous devez utiliser sont déterminés par le compteur lui-même. Par exemple, l’objet LogicalDisk a un index instance. Vous devez donc fournir le #index ou un caractère générique. Par conséquent, vous pouvez utiliser le format suivant :
\LogicalDisk(/#*)*
En comparaison, l’objet Process ne nécessite pas d’index instance. Par conséquent, vous pouvez utiliser le format suivant :
\Process(*)\ID Process
Voici une liste des formats possibles :
- \\computer\object(parent/instance#index)\counter
- \\computer\object(parent/instance)\counter
- \\computer\object(instance#index)\counter
- \\computer\object(instance)\counter
- \\computer\object\counter
- \object(parent/instance#index)\counter
- \object(parent/instance)\counter
- \object(instance#index)\counter
- \object(instance)\counter
- \object\counter
Si un caractère générique est spécifié dans le nom instance, toutes les instances de l’objet et de l’objet parent spécifiés sont retournées si tous les noms instance correspondant à l’index spécifié correspondent au caractère générique.
Si un caractère générique est spécifié dans le nom du compteur, tous les compteurs de l’objet spécifié sont retournés.
Les correspondances de chaîne de chemin de compteur partiel (par exemple, « pro* ») ne sont pas prises en charge.
Exemples
L’exemple suivant montre comment cette fonction.
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <pdh.h>
#include <pdhmsg.h>
#pragma comment(lib, "pdh.lib")
CONST PWSTR WILDCARD_PATH = L"\\Processor(*)\\*";
void wmain(void)
{
PDH_STATUS Status;
PWSTR EndOfPaths;
PWSTR Paths = NULL;
DWORD BufferSize = 0;
Status = PdhExpandCounterPath(WILDCARD_PATH, Paths, &BufferSize);
while (Status == PDH_MORE_DATA)
{
Paths = (PWSTR)malloc(BufferSize * sizeof(WCHAR));
Status = PdhExpandCounterPath(WILDCARD_PATH, Paths, &BufferSize);
}
if (Status != ERROR_SUCCESS)
{
wprintf(L"\nPdhExpandCounterPath failed with status 0x%x", Status);
goto Cleanup;
}
if (Paths == NULL)
{
wprintf(L"\nThe counter path %s cannot be expanded.", WILDCARD_PATH);
goto Cleanup;
}
EndOfPaths = Paths + BufferSize;
// On Vista and later operating systems, the buffer is terminated with two
// null-terminator characters; however, on earlier systems, the buffer is
// not terminated with two null-terminator characters. This covers both cases.
for (PWSTR p = Paths; ((p != EndOfPaths) && (*p != L'\0')); p += wcslen(p) + 1)
{
wprintf(L"\n%s", p);
}
Cleanup:
if (Paths)
{
free(Paths);
}
}
Notes
L’en-tête pdh.h définit PdhExpandCounterPath en tant qu’alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. La combinaison de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | pdh.h |
Bibliothèque | Pdh.lib |
DLL | Pdh.dll |