PdhExpandCounterPathA 함수(pdh.h)
카운터 경로의 와일드카드 문자열과 일치하는 카운터 및 카운터 인스턴스에 대해 지정된 컴퓨터(또는 지정되지 않은 경우 로컬 컴퓨터)를 검사합니다.
구문
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보다 크지만 필요한 크기보다 작으면 반환된 크기에 의존하여 버퍼를 다시 할당하면 안 됩니다.
반환 값
함수가 성공하면 ERROR_SUCCESS 반환합니다.
함수가 실패하면 반환 값은 시스템 오류 코드 또는 PDH 오류 코드입니다.
반환 코드 | 설명 |
---|---|
|
mszExpandedPathList 버퍼가 너무 작아서 경로 목록을 포함할 수 없습니다. pcchPathListLength가 입력에서 0이면 이 반환 값이 필요합니다. 입력에서 지정된 크기가 0보다 크지만 필요한 크기보다 작으면 반환된 크기에 의존하여 버퍼를 다시 할당하면 안 됩니다. |
|
매개 변수가 잘못된 경우 예를 들어 일부 릴리스에서는 입력에서 지정된 크기가 0보다 크지만 필요한 크기보다 작으면 이 오류가 발생할 수 있습니다. |
|
이 함수를 지원하기 위해 메모리를 할당할 수 없습니다. |
설명
이 함수를 두 번 호출하여 필요한 버퍼 크기를 처음으로 가져와야 합니다( mszExpandedPathList 를 NULL 로 설정하고 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 |