다음을 통해 공유


PdhExpandCounterPathA 함수(pdh.h)

카운터 경로의 와일드카드 문자열과 일치하는 카운터 및 카운터 인스턴스에 대해 지정된 컴퓨터(또는 지정되지 않은 경우 로컬 컴퓨터)를 검사합니다.

참고 이 함수는 PdhExpandWildCardPath 함수로 대체됩니다.
 

구문

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

매개 변수

[in] szWildCardPath

확장할 카운터 경로가 포함된 Null로 끝나는 문자열입니다. 함수는 경로에 지정된 컴퓨터에서 일치하는 항목을 검색합니다. 경로가 컴퓨터를 지정하지 않으면 함수는 로컬 컴퓨터를 검색합니다. 카운터 경로의 최대 길이는 PDH_MAX_COUNTER_PATH.

[out] mszExpandedPathList

szWildCardPath의 와일드카드 사양과 일치하는 확장된 카운터 경로 목록을 수신하는 호출자 할당 버퍼입니다. 이 목록의 각 카운터 경로는 null 문자로 종료됩니다. 목록은 두 개의 NULL 문자로 종료됩니다. pcchPathListLength가 0이면 NULL로 설정합니다.

[in, out] pcchPathListLength

TCHAR에서 mszExpandedPathList 버퍼의 크기입니다. 입력이 0이면 함수는 PDH_MORE_DATA 반환하고 이 매개 변수를 필요한 버퍼 크기로 설정합니다. 버퍼가 필요한 크기보다 큰 경우 함수는 이 매개 변수를 사용된 버퍼의 실제 크기로 설정합니다. 입력에서 지정된 크기가 0보다 크지만 필요한 크기보다 작으면 반환된 크기에 의존하여 버퍼를 다시 할당하면 안 됩니다.

참고 Windows XP에서 필요한 크기에 하나를 추가해야 합니다.
 

반환 값

함수가 성공하면 ERROR_SUCCESS 반환합니다.

함수가 실패하면 반환 값은 시스템 오류 코드 또는 PDH 오류 코드입니다.

반환 코드 설명
PDH_MORE_DATA
mszExpandedPathList 버퍼가 너무 작아서 경로 목록을 포함할 수 없습니다. pcchPathListLength가 입력에서 0이면 이 반환 값이 필요합니다. 입력에서 지정된 크기가 0보다 크지만 필요한 크기보다 작으면 반환된 크기에 의존하여 버퍼를 다시 할당하면 안 됩니다.
PDH_INVALID_ARGUMENT
매개 변수가 잘못된 경우 예를 들어 일부 릴리스에서는 입력에서 지정된 크기가 0보다 크지만 필요한 크기보다 작으면 이 오류가 발생할 수 있습니다.
PDH_MEMORY_ALLOCATION_FAILURE
이 함수를 지원하기 위해 메모리를 할당할 수 없습니다.

설명

이 함수를 두 번 호출하여 필요한 버퍼 크기를 처음으로 가져와야 합니다( mszExpandedPathListNULL 로 설정하고 pcchPathListLength 를 0으로 설정). 두 번째로 데이터를 가져옵니다.

일반적인 카운터 경로 형식은 다음과 같습니다.

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

카운터 경로의 부모, instance, 인덱스 및 카운터 구성 요소에는 유효한 이름 또는 와일드카드 문자가 포함될 수 있습니다. 컴퓨터, 부모, 인스턴스 및 인덱스 구성 요소에 대 한 모든 카운터 필요 하지 않습니다.

사용해야 하는 카운터 경로는 카운터 자체에 의해 결정됩니다. 예를 들어 LogicalDisk 개체에는 instance 인덱스가 있으므로 #index 또는 와일드카드를 제공해야 합니다. 따라서 다음 형식을 사용할 수 있습니다.

\LogicalDisk(/#*)*

반면 Process 개체에는 instance 인덱스가 필요하지 않습니다. 따라서 다음 형식을 사용할 수 있습니다.

\Process(*)\ID 프로세스

다음은 가능한 형식의 목록을입니다.

  • \\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 헤더는 PdhExpandCounterPath를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 pdh.h
라이브러리 Pdh.lib
DLL Pdh.dll

추가 정보

PdhExpandWildCardPath

PdhMakeCounterPath