Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Im folgenden Beispiel wird die PdhEnumObjectItems-Funktion aufgerufen, um die Instanzen und Leistungsindikatoren der Prozessobjekte auf dem lokalen Computer aufzählen zu können.
Tipp
Windows 11 und höher enthalten das Process V2-Counterset. Das Process V2-Counterset behebt mehrere Probleme mit dem Process-Counterset und sollte bevorzugt werden, wenn Prozessinformationen von Computern unter Windows 11 oder höher gesammelt werden.
// This program needs only the essential Windows header files.
#define WIN32_LEAN_AND_MEAN 1
#include <windows.h>
#include <malloc.h>
#include <stdio.h>
#include <pdh.h>
#include <pdhmsg.h>
#pragma comment(lib, "pdh.lib")
CONST PWSTR COUNTER_OBJECT = L"Process";
void main(void)
{
PDH_STATUS status = ERROR_SUCCESS;
LPWSTR pwsCounterListBuffer = NULL;
DWORD dwCounterListSize = 0;
LPWSTR pwsInstanceListBuffer = NULL;
DWORD dwInstanceListSize = 0;
LPWSTR pTemp = NULL;
// Determine the required buffer size for the data.
status = PdhEnumObjectItems(
NULL, // real-time source
NULL, // local machine
COUNTER_OBJECT, // object to enumerate
pwsCounterListBuffer, // pass NULL and 0
&dwCounterListSize, // to get required buffer size
pwsInstanceListBuffer,
&dwInstanceListSize,
PERF_DETAIL_WIZARD, // counter detail level
0);
if (status == PDH_MORE_DATA)
{
// Allocate the buffers and try the call again.
pwsCounterListBuffer = (LPWSTR)malloc(dwCounterListSize * sizeof(WCHAR));
pwsInstanceListBuffer = (LPWSTR)malloc(dwInstanceListSize * sizeof(WCHAR));
if (NULL != pwsCounterListBuffer && NULL != pwsInstanceListBuffer)
{
status = PdhEnumObjectItems(
NULL, // real-time source
NULL, // local machine
COUNTER_OBJECT, // object to enumerate
pwsCounterListBuffer,
&dwCounterListSize,
pwsInstanceListBuffer,
&dwInstanceListSize,
PERF_DETAIL_WIZARD, // counter detail level
0);
if (status == ERROR_SUCCESS)
{
wprintf(L"Counters that the Process objects defines:\n\n");
// Walk the counters list. The list can contain one
// or more null-terminated strings. The list is terminated
// using two null-terminator characters.
for (pTemp = pwsCounterListBuffer; *pTemp != 0; pTemp += wcslen(pTemp) + 1)
{
wprintf(L"%s\n", pTemp);
}
wprintf(L"\nInstances of the Process object:\n\n");
// Walk the instance list. The list can contain one
// or more null-terminated strings. The list is terminated
// using two null-terminator characters.
for (pTemp = pwsInstanceListBuffer; *pTemp != 0; pTemp += wcslen(pTemp) + 1)
{
wprintf(L"%s\n", pTemp);
}
}
else
{
wprintf(L"Second PdhEnumObjectItems failed with 0x%x.\n", status);
}
}
else
{
wprintf(L"Unable to allocate buffers.\n");
status = ERROR_OUTOFMEMORY;
}
}
else
{
wprintf(L"\nPdhEnumObjectItems failed with 0x%x.\n", status);
}
if (pwsCounterListBuffer != NULL)
free (pwsCounterListBuffer);
if (pwsInstanceListBuffer != NULL)
free (pwsInstanceListBuffer);
}