J'ai une application qui recueille les valeurs du compteur Perfmon à travers l'API exposée dans winreg.h - afin de collecter des valeurs de compteur Perfmon Je dois faire un appel à RegQueryValueExW
passant dans l'ID du compteur Perfmon I Je suis intéressé, et afin d'obtenir cet ID, je dois interroger le registre pour la liste des noms de compteurs Perfmon et passer par la recherche de celui qui m'intéresseTrouver l'identifiant du compteur perfmon via winreg
C++ n'est pas ma langue de choix, donc ce qui suit est un exemple fragile, probablement avec beaucoup d'erreurs de syntaxe, mais vous obtenez l'idée:
DWORD IdProcessIndex = 0;
WCHAR* RawStrings = new WCHAR[ len ];
WCHAR* pCurrent;
DWORD nLenInChars;
// Get the name id of the "ID Process" counter
RegQueryValueExW(HKEY_PERFORMANCE_DATA, COUNTER009, 0, 0, (PBYTE)RawStrings, &len)
pCurrent = (WCHAR*)RawStrings;
while ((nLenInChars = wcslen(pCurrent)) != 0 && IdProcessIndex == 0)
{
WCHAR* pName;
pName = pCurrent + nLenInChars + 1;
if (wcscmp(pName, L"ID Process") == 0)
{
IdProcessIndex = _wtoi(pCurrent);
}
pCurrent = pName + wcslen(pName) + 1;
}
// Get data for the "ID Process" counter
WCHAR strIdProcessIndex[32];
_itow(nIdProcessIndex, strIdProcessIndex, 10);
RegQueryValueExW(HKEY_PERFORMANCE_DATA, strIdProcessIndex, NULL, NULL, (PBYTE)pData, &len)
Problème est que sur certains mac hines (ceux avec le kit de développement Windows CE installé) il y a un deuxième compteur de perfmon avec le nom "ID Process", et donc ce qui précède trouve l'ID du mauvais compteur.
Je ne vois pas de moyen de différencier les deux autres que l'ordre dans lequel ils sont - en ce moment je pense que mon meilleur pari est de prendre le premier compteur que je trouve avec un nom correspondant, y at-il une meilleure option ?
(Ce ne est pas possible de migrer cela .Net ou quelque chose comme ça)
Merci - Je n'avais pas réalisé que les identifiants étaient garantis pour être corrigés. Cela rend les choses beaucoup plus simples! – Justin
Heureux que c'était utile. Notez que cela n'est vrai que pour les compteurs intégrés et non pour les compteurs installés après Windows, tels que les compteurs SQL Server. –