Funzione PdhGetFormattedCounterArrayW (pdh.h)
Restituisce una matrice di valori di contatore formattati. Utilizzare questa funzione quando si desidera formattare i valori del contatore di un contatore che contiene un carattere jolly per il nome dell'istanza.
Sintassi
PDH_FUNCTION PdhGetFormattedCounterArrayW(
[in] PDH_HCOUNTER hCounter,
[in] DWORD dwFormat,
[in, out] LPDWORD lpdwBufferSize,
[out] LPDWORD lpdwItemCount,
[out] PPDH_FMT_COUNTERVALUE_ITEM_W ItemBuffer
);
Parametri
[in] hCounter
Handle al contatore il cui valore corrente si desidera formattare. La funzione pdhAddCounter
[in] dwFormat
Determina il tipo di dati del valore formattato. Specificare uno dei valori seguenti.
È possibile usare l'operatore OR inclusivo bit per bit (|) per combinare il tipo di dati con uno dei fattori di ridimensionamento seguenti.
[in, out] lpdwBufferSize
Dimensioni in byte del buffer ItemBuffer
[out] lpdwItemCount
Numero di valori del contatore nel buffer ItemBuffer
[out] ItemBuffer
Buffer allocato dal chiamante che riceve una matrice di strutture PDH_FMT_COUNTERVALUE_ITEM; le strutture contengono i valori del contatore. Impostare su NULL se lpdwBufferSize è zero.
Valore restituito
Se la funzione ha esito positivo, restituisce ERROR_SUCCESS.
Se la funzione ha esito negativo, il valore restituito è un codice di errore di sistema o un codice di errore PDH . Di seguito sono riportati i valori possibili.
Codice restituito | Descrizione |
---|---|
|
Il buffer ItemBuffer |
|
Un parametro non è valido o non è formattato correttamente. Ad esempio, in alcune versioni è possibile ricevere questo errore se la dimensione specificata per l'input è maggiore di zero, ma minore della dimensione richiesta. |
|
L'handle del contatore non è valido. |
Osservazioni
È necessario chiamare questa funzione due volte, la prima volta per ottenere le dimensioni del buffer necessarie (impostare ItemBuffer su NULL e lpdwBufferSize su 0) e la seconda volta per ottenere i dati.
I dati per il contatore vengono bloccati per la durata della chiamata a PdhGetFormattedCounterArray per impedire modifiche durante l'elaborazione della chiamata.
Esempi
Nell'esempio seguente viene illustrato come usare questa funzione.
#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
}
Nota
L'intestazione pdh.h definisce PdhGetFormattedCounterArray come alias che seleziona automaticamente la versione ANSI o Unicode di questa funzione in base alla definizione della costante del preprocessore UNICODE. La combinazione dell'utilizzo dell'alias indipendente dalla codifica con il codice non indipendente dalla codifica può causare mancate corrispondenze che generano errori di compilazione o di runtime. Per altre informazioni, vedere convenzioni di per i prototipi di funzioni.
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Windows XP [solo app desktop] |
server minimo supportato | Windows Server 2003 [solo app desktop] |
piattaforma di destinazione | Finestre |
intestazione |
pdh.h |
libreria |
Pdh.lib |
dll | Pdh.dll |