オブジェクト名から利用可能なカウンタとインスタンスを列挙するにはPdhEnumObjectItems()関数を使います。
この関数で取得した文字列はNULL文字で区切られて最後にはもう一つNULL文字が追加します。
つまり[aaa][\0][bbb][\0][ccc][\0][\0]というイメージになります。(戻る)
プロトタイプ宣言
PDH_STATUS PdhEnumObjectItems( LPCTSTR szDataSource, // ログファイル名 LPCTSTR szMachineName, // コンピュータ名 LPCTSTR szObjectName, // オブジェクト名 LPTSTR mszCounterList, // カウンタ・バッファ領域 LPDWORD pcchCounterListLength, // カウンタ・バッファ容量のポインタ LPTSTR mszInstanceList, // インスタンス・バッファ領域 LPDWORD pcchInstanceListLength, // インスタンス・バッファ容量のポインタ DWORD dwDetailLevel, // 取得する詳細レベル DWORD dwFlags // 形式フラグ(常にゼロ) );
サンプル
#include <stdio.h> #include <windows.h> #include <pdh.h> // Pdh.Lib // メイン関数 int main( void ) { TCHAR szCounter[ 32 * 1024 ]; TCHAR szInstance[ 32 * 1024 ]; DWORD dwCounterSize = sizeof(szCounter); DWORD dwInstanceSize = sizeof(szInstance); LPTSTR lpObject = "Process"; LPTSTR lpString; INT nCount; // オブジェクトのカウンタとインスタンスを取得 PdhEnumObjectItems( NULL, NULL, lpObject, szCounter, &dwCounterSize, szInstance, &dwInstanceSize, PERF_DETAIL_WIZARD, 0 ); // オブジェクトのカウンタを列挙 printf( "\nオブジェクトのカウンタ列挙\n" ); for ( nCount = 0, lpString = szCounter ; *lpString != '\0' ; lpString++ ){ printf( "%3d: [%s]\n", ++nCount, lpString ); lpString += lstrlen( lpString ); } // オブジェクトのインスタンスを列挙 printf( "\nオブジェクトのインスタンス列挙\n" ); for ( nCount = 0, lpString = szInstance ; *lpString != '\0' ; lpString++ ){ printf( "%3d: [%s]\n", ++nCount, lpString ); lpString += lstrlen( lpString ); } return 0; }
- 上記の例ではProcessというオブジェクト名に対して利用できるカウンタとインスタンスを列挙しています。
- 指定可能なオブジェクト名は前回の『オブジェクト名の列挙』で分かります。
- オブジェクトによってはカウンタのみでインスタンスがない場合もあります。
- ヘッダファイルとしてpdh.hをインクルードして下さい。
- インポートライブラリとしてPdh.Libをリンクして下さい。
取得する詳細レベルには次の定数があります。
- 初心者ユーザーのレベル(PERF_DETAIL_NOVICE)
- 上級者ユーザーのレベル(PERF_DETAIL_ADVANCED)
- 専門家ユーザーのレベル(PERF_DETAIL_EXPERT)
- 設計者ユーザーのレベル(PERF_DETAIL_WIZARD)
関連記事
- プロセスIDの列挙
- 全プロセスの列挙
- モジュールの列挙
- 全モジュールの列挙
- デバイスドライバの列挙
- コンピュータ名の列挙
- オブジェクト名の列挙
- カウンタとインスタンスの列挙
※コメント投稿者のブログIDはブログ作成者のみに通知されます