次の方法で共有


PdhExpandCounterPathA 関数 (pdh.h)

カウンター パス内のワイルドカード文字列と一致するカウンターとカウンターのインスタンスについて、指定されたコンピューター (または指定されていない場合はローカル コンピューター) を調べます。

この関数は、PdhExpandWildCardPath 関数に置き換えられます。
 

構文

PDH_FUNCTION PdhExpandCounterPathA(
  [in]      LPCSTR  szWildCardPath,
  [out]     PZZSTR  mszExpandedPathList,
  [in, out] LPDWORD pcchPathListLength
);

パラメーター

[in] szWildCardPath

展開するカウンター パスを含む null-terminated 文字列を します。 この関数は、パスで指定されたコンピューターを検索して一致を検索します。 パスでコンピューターが指定されていない場合、関数はローカル コンピューターを検索します。 カウンター パスの最大長はPDH_MAX_COUNTER_PATH。

[out] mszExpandedPathList

szWildCardPathのワイルドカード指定に一致する展開されたカウンター パスの一覧 受け取る呼び出し元割り当てバッファー。 このリスト内の各カウンター パスは、null 文字で終了します。 リストは、2 つの NULL 文字で終了します。 pcchPathListLength が 0 の場合 NULLに設定します。

[in, out] pcchPathListLength

mszExpandedPathList バッファーのサイズ (TCHAR)。 入力時に 0 の場合、関数はPDH_MORE_DATAを返し、このパラメーターを必要なバッファー サイズに設定します。 バッファーが必要なサイズより大きい場合、関数はこのパラメーターを使用したバッファーの実際のサイズに設定します。 入力で指定したサイズが 0 より大きく、必要なサイズより小さい場合は、返されたサイズに依存してバッファーを再割り当てしないでください。

Windows XP で必要なサイズに追加する必要があります。
 

戻り値

関数が成功すると、ERROR_SUCCESSが返されます。

関数が失敗した場合、戻り値は システム エラー コード または PDH エラー コードです。

リターン コード 形容
PDH_MORE_DATA
mszExpandedPathList バッファー が小さすぎて、パスの一覧を格納できません。 この戻り値は、pcchPathListLength が入力時 ゼロの場合に予期されます。 入力で指定したサイズが 0 より大きく、必要なサイズより小さい場合は、返されたサイズに依存してバッファーを再割り当てしないでください。
PDH_INVALID_ARGUMENT
パラメーターが無効です。 たとえば、一部のリリースでは、入力で指定されたサイズが 0 より大きく、必要なサイズより小さい場合、このエラーが発生する可能性があります。
PDH_MEMORY_ALLOCATION_FAILURE
この関数をサポートするためにメモリを割り当てることができません。

備考

この関数を 2 回呼び出し、必要なバッファー サイズを取得する場合は 2 回 (mszExpandedPathList NULL を し、pcchPathListLength を 0 に )、2 回目にデータを取得する必要があります。

一般的なカウンター パスの形式は次のとおりです。

\computer\object(parent/instance#index)\counter

カウンター パスの親、インスタンス、インデックス、およびカウンター コンポーネントには、有効な名前またはワイルドカード文字を含めることがあります。 コンピューター、親、インスタンス、インデックスのコンポーネントは、すべてのカウンターに必要なわけではありません。

使用する必要があるカウンター パスは、カウンター自体によって決まります。 たとえば、LogicalDisk オブジェクトにはインスタンス インデックスがあるため、#index またはワイルドカードを指定する必要があります。 そのため、次の形式を使用できます。

\LogicalDisk(/#*)*

これに対し、Process オブジェクトにはインスタンス インデックスは必要ありません。 そのため、次の形式を使用できます。

\Process(*)\ID Process

使用できる形式の一覧を次に示します。

  • \\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
親名にワイルドカード文字が指定されている場合は、指定したインスタンスとカウンター フィールドに一致する指定したオブジェクトのすべてのインスタンスが返されます。

インスタンス名にワイルドカード文字が指定されている場合、指定したインデックスに対応するすべてのインスタンス名がワイルドカード文字と一致する場合、指定したオブジェクトと親オブジェクトのすべてのインスタンスが返されます。

カウンター名にワイルドカード文字が指定されている場合は、指定したオブジェクトのすべてのカウンターが返されます。

部分的なカウンター パス文字列の一致 ("pro*" など) はサポートされていません。

次の例では、この関数の方法を示します。


#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);
    }
}

手記

pdh.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして PdhExpandCounterPath を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリのみ]
サポートされる最小サーバー Windows Server 2003 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー pdh.h
ライブラリ Pdh.lib
DLL Pdh.dll

関連項目

PdhExpandWildCardPath を する

PdhMakeCounterPath の