// This program only needs the essential windows header files.
#define WIN32_LEAN_AND_MEAN 1
#include <windows.h>
#include <winperf.h>
#include <malloc.h>
#include <stdio.h>
#include <tchar.h>
#include <pdh.h>
int WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int)
{
PDH_STATUS pdhStatus = ERROR_SUCCESS;
char szCounterListBuffer[20000];
DWORD dwCounterListSize = sizeof(szCounterListBuffer);
char szInstanceListBuffer[20000];
DWORD dwInstanceListSize = sizeof(szInstanceListBuffer);
LPTSTR szThisInstance = NULL;
PPDH_COUNTER_INFO ppdhcounterinfo = NULL;
HANDLE hconsoleInput, hconsoleOutput;
char string[100];
DWORD written;
strcpy(string,"> Console Program started\n");
AllocConsole();
hconsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
hconsoleInput = GetStdHandle(STD_INPUT_HANDLE);
WriteConsole(hconsoleOutput,string,strlen(string),&written,0);
if ((szCounterListBuffer != NULL) &&
(szInstanceListBuffer != NULL))
{
pdhStatus = PdhEnumObjectItems (
NULL, // reserved
NULL, // local machine
"Process", // object to enumerate
szCounterListBuffer, // pass in NULL buffers
&dwCounterListSize, // an 0 length to get
szInstanceListBuffer, // required size
&dwInstanceListSize, // of the buffers in chars
PERF_DETAIL_WIZARD, // counter detail level
0);
if (pdhStatus == ERROR_SUCCESS)
{
sprintf(string, TEXT("- Running Processes:"));
WriteConsole(hconsoleOutput,string,strlen(string),&written,0);
// Walk the return instance list.
for (szThisInstance = szInstanceListBuffer;
*szThisInstance != 0;
szThisInstance += lstrlen(szThisInstance) + 1)
{
sprintf(string, TEXT("\n %s"), szThisInstance);
WriteConsole(hconsoleOutput,string,strlen(string),&written,0);
}
}
}
else
{
sprintf(string, TEXT("\nPROCLIST: unable to allocate buffers"));
WriteConsole(hconsoleOutput,string,strlen(string),&written,0);
}
sprintf(string, "\n> Console Program Ended.");
WriteConsole(hconsoleOutput,string,strlen(string),&written,0);
sprintf(string, "\nPress return to close.\n");
WriteConsole(hconsoleOutput,string,strlen(string),&written,0);
ReadConsole(hconsoleInput,string,1,&written,0);
return 0;
}