PdhGetFormattedCounterArrayA 함수(pdh.h)
서식이 지정된 카운터 값의 배열을 반환합니다. instance 이름의 와일드카드 문자가 포함된 카운터의 카운터 값에 서식을 지정하려면 이 함수를 사용합니다.
구문
PDH_FUNCTION PdhGetFormattedCounterArrayA(
[in] PDH_HCOUNTER hCounter,
[in] DWORD dwFormat,
[in, out] LPDWORD lpdwBufferSize,
[out] LPDWORD lpdwItemCount,
[out] PPDH_FMT_COUNTERVALUE_ITEM_A ItemBuffer
);
매개 변수
[in] hCounter
서식을 지정하려는 현재 값의 카운터에 대한 핸들입니다. PdhAddCounter 함수는 이 핸들을 반환합니다.
[in] dwFormat
형식이 지정된 값의 데이터 형식을 결정합니다. 다음 값 중 하나를 지정합니다.
값 | 의미 |
---|---|
|
데이터를 배정밀도 부동 소수점 실제로 반환합니다. |
|
데이터를 64비트 정수로 반환합니다. |
|
데이터를 긴 정수로 반환합니다. |
비트 포함 OR 연산자(|)를 사용하여 데이터 형식을 다음 크기 조정 요소 중 하나와 결합할 수 있습니다.
[in, out] lpdwBufferSize
ItemBuffer 버퍼의 크기(바이트)입니다. 입력이 0이면 함수는 PDH_MORE_DATA 반환하고 이 매개 변수를 필요한 버퍼 크기로 설정합니다. 버퍼가 필요한 크기보다 큰 경우 함수는 이 매개 변수를 사용된 버퍼의 실제 크기로 설정합니다. 입력에서 지정된 크기가 0보다 크지만 필요한 크기보다 작으면 반환된 크기에 의존하여 버퍼를 다시 할당하면 안 됩니다.
[out] lpdwItemCount
ItemBuffer 버퍼의 카운터 값 수입니다.
[out] ItemBuffer
PDH_FMT_COUNTERVALUE_ITEM 구조의 배열을 수신하는 호출자 할당 버퍼; 구조체에는 카운터 값이 포함됩니다. lpdwBufferSize가 0이면 NULL로 설정합니다.
반환 값
함수가 성공하면 ERROR_SUCCESS 반환합니다.
함수가 실패하면 반환 값은 시스템 오류 코드 또는 PDH 오류 코드입니다. 가능한 값은 다음과 같습니다.
반환 코드 | 설명 |
---|---|
|
ItemBuffer 버퍼가 개체 이름을 포함할 만큼 크지 않습니다. lpdwBufferSize가 입력에서 0이면 이 반환 값이 필요합니다. 입력에서 지정된 크기가 0보다 크지만 필요한 크기보다 작으면 반환된 크기에 의존하여 버퍼를 다시 할당하면 안 됩니다. |
|
매개 변수가 잘못되었거나 형식이 잘못되었습니다. 예를 들어 일부 릴리스에서는 입력에서 지정된 크기가 0보다 크지만 필요한 크기보다 작은 경우 이 오류를 수신할 수 있습니다. |
|
카운터 핸들이 잘못되었습니다. |
설명
필요한 버퍼 크기( ItemBuffer 를 NULL 로 설정하고 lpdwBufferSize 를 0으로 설정)를 처음으로 두 번 호출하고, 두 번째로 데이터를 가져와야 합니다.
카운터의 데이터는 PdhGetFormattedCounterArray 호출 기간 동안 잠겨 호출을 처리하는 동안 변경되는 것을 방지합니다.
예제
다음 예제에서는 이 함수를 사용하는 방법을 보여줍니다.
#include <windows.h>
#include <stdio.h>
#include <pdh.h>
#include <pdhmsg.h>
#pragma comment(lib, "pdh.lib")
CONST PWSTR COUNTER_PATH = L"\\Processor(*)\\% Processor Time";
CONST ULONG SAMPLE_INTERVAL_MS = 1000;
void main()
{
PDH_HQUERY hQuery = NULL;
PDH_STATUS status = ERROR_SUCCESS;
PDH_HCOUNTER hCounter = NULL;
DWORD dwBufferSize = 0; // Size of the pItems buffer
DWORD dwItemCount = 0; // Number of items in the pItems buffer
PDH_FMT_COUNTERVALUE_ITEM *pItems = NULL; // Array of PDH_FMT_COUNTERVALUE_ITEM structures
if (status = PdhOpenQuery(NULL, 0, &hQuery))
{
wprintf(L"PdhOpenQuery failed with 0x%x.\n", status);
goto cleanup;
}
// Specify a counter object with a wildcard for the instance.
if (status = PdhAddCounter(hQuery, COUNTER_PATH, 0, &hCounter))
{
wprintf(L"PdhAddCounter failed with 0x%x.\n", status);
goto cleanup;
}
// Some counters need two sample in order to format a value, so
// make this call to get the first value before entering the loop.
if (status = PdhCollectQueryData(hQuery))
{
wprintf(L"PdhCollectQueryData failed with 0x%x.\n", status);
goto cleanup;
}
for (int i = 0; i < 10; i++)
{
Sleep(SAMPLE_INTERVAL_MS);
if (status = PdhCollectQueryData(hQuery))
{
wprintf(L"PdhCollectQueryData failed with 0x%x.\n", status);
goto cleanup;
}
// Get the required size of the pItems buffer.
status = PdhGetFormattedCounterArray(hCounter, PDH_FMT_DOUBLE, &dwBufferSize, &dwItemCount, pItems);
if (PDH_MORE_DATA == status)
{
pItems = (PDH_FMT_COUNTERVALUE_ITEM *) malloc(dwBufferSize);
if (pItems)
{
status = PdhGetFormattedCounterArray(hCounter, PDH_FMT_DOUBLE, &dwBufferSize, &dwItemCount, pItems);
if (ERROR_SUCCESS == status)
{
// Loop through the array and print the instance name and counter value.
for (DWORD i = 0; i < dwItemCount; i++)
{
wprintf(L"counter: %s, value %.20g\n", pItems[i].szName, pItems[i].FmtValue.doubleValue);
}
}
else
{
wprintf(L"Second PdhGetFormattedCounterArray call failed with 0x%x.\n", status);
goto cleanup;
}
free(pItems);
pItems = NULL;
dwBufferSize = dwItemCount = 0;
}
else
{
wprintf(L"malloc for PdhGetFormattedCounterArray failed.\n");
goto cleanup;
}
}
else
{
wprintf(L"PdhGetFormattedCounterArray failed with 0x%x.\n", status);
goto cleanup;
}
}
cleanup:
if (pItems)
free(pItems);
if (hQuery)
PdhCloseQuery(hQuery); // Closes all counter handles and the query handle
}
참고
pdh.h 헤더는 PdhGetFormattedCounterArray를 유니코드 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows XP [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2003 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | pdh.h |
라이브러리 | Pdh.lib |
DLL | Pdh.dll |