Funzione PdhExpandCounterPathW (pdh.h)
Esamina il computer specificato (o il computer locale se non è specificato nessuno) per i contatori e le istanze di contatori che corrispondono alle stringhe con caratteri jolly nel percorso del contatore.
Sintassi
PDH_FUNCTION PdhExpandCounterPathW(
[in] LPCWSTR szWildCardPath,
[out] PZZWSTR mszExpandedPathList,
[in, out] LPDWORD pcchPathListLength
);
Parametri
[in] szWildCardPath
nullstringa con terminazione contenente il percorso del contatore da espandere. La funzione cerca le corrispondenze nel computer specificato nel percorso. Se il percorso non specifica un computer, la funzione cerca nel computer locale. La lunghezza massima di un percorso del contatore è PDH_MAX_COUNTER_PATH.
[out] mszExpandedPathList
Buffer allocato dal chiamante che riceve l'elenco dei percorsi dei contatori espansi che corrispondono alla specifica con caratteri jolly in szWildCardPath. Ogni percorso del contatore in questo elenco viene terminato da un carattere null. L'elenco viene terminato con due caratteri NULL. Impostare su NULL se pcchPathListLength è zero.
[in, out] pcchPathListLength
Dimensioni del buffer di mszExpandedPathList
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 .
Codice restituito | Descrizione |
---|---|
|
Il buffer mszExpandedPathList |
|
Parametro non valido. Ad esempio, in alcune versioni è possibile ricevere questo errore se la dimensione specificata per l'input è maggiore di zero, ma minore della dimensione richiesta. |
|
Impossibile allocare memoria per supportare questa funzione. |
Osservazioni
È necessario chiamare questa funzione due volte, la prima volta per ottenere le dimensioni del buffer necessarie (impostare mszExpandedPathList su null e pcchPathListLength su 0) e la seconda volta per ottenere i dati.
Il formato generale del percorso del contatore è il seguente:
\computer\object(parent/instance#index)\counter
I componenti padre, istanza, indice e contatore del percorso del contatore possono contenere un nome valido o un carattere jolly. I componenti computer, padre, istanza e indice non sono necessari per tutti i contatori.
I percorsi dei contatori che è necessario utilizzare sono determinati dal contatore stesso. Ad esempio, l'oggetto LogicalDisk ha un indice di istanza, pertanto è necessario specificare il #index o un carattere jolly. Pertanto, è possibile usare il formato seguente:
\LogicalDisk(/#*)*
In confronto, l'oggetto Process non richiede un indice di istanza. Pertanto, è possibile usare il formato seguente:
\Process(*)\ID Process
Di seguito è riportato un elenco dei formati possibili:
- \\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
Se nel nome dell'istanza viene specificato un carattere jolly, verranno restituite tutte le istanze dell'oggetto specificato e dell'oggetto padre se tutti i nomi di istanza corrispondenti all'indice specificato corrispondono al carattere jolly.
Se viene specificato un carattere jolly nel nome del contatore, vengono restituiti tutti i contatori dell'oggetto specificato.
Le corrispondenze parziali della stringa di percorso del contatore (ad esempio, "pro*") non sono supportate.
Esempi
Nell'esempio seguente viene illustrato come eseguire questa funzione.
#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);
}
}
Nota
L'intestazione pdh.h definisce PdhExpandCounterPath 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 |