2

winreg.h で公開されている API を介して Perfmon カウンター値を収集するアプリがあります。Perfmon カウンター値を収集するRegQueryValueExWには、関心のある Perfmon カウンターの ID を渡す呼び出しを行う必要があります。その ID Perfmon カウンター名のリストをレジストリに照会し、関心のあるものを探す必要があります。

C++ は私が選んだ言語ではないため、次の例は不安定な例であり、おそらく多くの構文エラーがありますが、おわかりいただけると思います。

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)

問題は、一部のマシン (Windows CE 開発キットがインストールされているマシン) では、"ID Process" という名前の 2 つ目の perfmon カウンターが存在するため、上記で間違ったカウンターの ID が検出されることです。

順序以外に 2 つを区別する方法がわかりません。現時点では、一致する名前で最初に見つけたカウンターを取得するのが最善の策だと思います。より良いオプションはありますか?

(これを .Net などに移行することはできません)

4

2 に答える 2

3

私はこれが古いことを認識していますが、それが役立つ場合:

  1. ティムの言うとおりです。バイナリ データを自分で解析するのは困難です。痛みの世界に備えましょう。PDH (レジストリ アクセスをカプセル化します) をお勧めします。それが失敗する場合は、WMI (ただし、WMI ははるかに遅いことに注意してください)。
  2. ID Processパフォーマンス カウンター ( 、インデックス付き)だけのデータを取得することはできません784Processオブジェクト全体( 、 index 付き)に対して取得する必要があります230
  3. 組み込みオブジェクトの ID は、すべての Windows インストールで同じであることが保証されています。したがって、これが必要な唯一のカウンターである場合は、 を使用して230ください。:)
于 2010-03-22T23:14:22.823 に答える
0

2つを区別する方法がわかりません

彼らは同じ価値を与えていますか?もしそうなら、なぜあなたはあなたがどちらを使うかを気にしますか?

それらが異なる場合、両方を試すことができますか?(例:両方のIDのOpenProcess)

(これを.Netなどに移行することはできません)

PDH API(PdhOpenQueryなど)またはWMIによって公開されているCOMインターフェイスを使用するのはどうですか?ネイティブC++から両方を実行できます。

レジストリを直接読み取ってパフォーマンスカウンターを使用したことはありませんが、何らかの理由で2つの「IDプロセス」カウンターがある可能性があります(WoW16 / 64のアプリのように別々のプロセスIDがありますか?)。同じこと。AdminstrativeTools \ Performance MMCパネルに2つ表示されますか?

于 2009-07-14T00:04:34.117 に答える