#include #include #include #include #include #define CHECK_STAT(func, end) \ do { \ PDH_STATUS __zz_stat; \ __zz_stat = (func); \ if(__zz_stat != ERROR_SUCCESS) { \ _ftprintf(stderr, "error! 0x%x in line %d\n", __zz_stat, __LINE__); \ } \ } while(0) static void showCounterAndInstance(TCHAR *objName) { TCHAR cntNames[4096]; TCHAR insNames[4096]; TCHAR *p; DWORD cntNameLen = sizeof(cntNames)-2; DWORD insNameLen = sizeof(insNames)-2; _tmemset(cntNames, 0, sizeof(cntNames)); _tmemset(insNames, 0, sizeof(insNames)); CHECK_STAT(PdhEnumObjectItems(NULL, NULL, objName, cntNames, &cntNameLen, insNames, &insNameLen, PERF_DETAIL_WIZARD, 0), end); printf(" Instance(%s):\n", objName); for(p=insNames; *p; p+=_tcslen(p)+1) { _tprintf(" %s\n", p); } printf(" Counter(%s):\n", objName); for(p=cntNames; *p; p+=_tcslen(p)+1) { _tprintf(" %s\n", p); } end: } int main() { TCHAR objNames[4096]; TCHAR *p; DWORD objNameLen = sizeof(objNames)-2; _tmemset(objNames, 0, sizeof(objNames)); CHECK_STAT(PdhEnumObjects(NULL, NULL, objNames, &objNameLen, PERF_DETAIL_WIZARD, TRUE), end); for(p=objNames; *p; p+=_tcslen(p)+1) { _tprintf("%s\n", p); showCounterAndInstance(p); } end: return 0; }