2 Stimmen

Perfmon-Zähler-ID über winreg finden

Ich habe eine App, die Perfmon Zählerwerte durch die API in winreg.h ausgesetzt sammelt - um Perfmon Zählerwerte zu sammeln, muss ich einen Aufruf zu machen RegQueryValueExW Übergabe der ID des Perfmon-Zählers, an dem ich interessiert bin, und um diese ID zu erhalten, muss ich die Registry nach der Liste der Perfmon-Zählernamen abfragen und nach demjenigen suchen, an dem ich interessiert bin

C++ ist nicht meine bevorzugte Sprache, daher ist das folgende Beispiel etwas wackelig, wahrscheinlich mit vielen Syntaxfehlern, aber Sie verstehen die Idee:

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)

Das Problem ist, dass es auf einigen Rechnern (solche mit installiertem Windows CE Dev Kit) einen zweiten Perfmon-Zähler mit dem Namen "ID Process" gibt, so dass die obige Funktion die ID des falschen Zählers findet.

Ich sehe keine Möglichkeit, zwischen den beiden zu unterscheiden, außer der Reihenfolge, in der sie sind - im Moment denke ich, dass meine beste Wette ist, den ersten Zähler zu nehmen, den ich mit einem passenden Namen finde, gibt es eine bessere Option?

(Es ist nicht möglich, dies auf .Net oder etwas Ähnliches zu migrieren)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X