26,27c26,27 < #include "PDH.h" < #include "PDHMSG.h" --- > #include "pdh.h" > #include "pdhmsg.h" 632c632 < SV* pBox --- > SV* pBox 636a637,683 > DWORD dwCounterListSize; > DWORD dwInstanceListSize; > PDH_STATUS pdhStatus; > char* szCounterListBuffer; > char* szInstanceListBuffer; > char* szThisInstance; > char* szBox; > char* szObject; > STRLEN len; > > PPCODE: > dwCounterListSize = 0; > dwInstanceListSize = 0; > szCounterListBuffer = NULL; > szInstanceListBuffer = NULL; > len = sv_len(pBox); > szBox = SvPV(pBox, len); > len = sv_len(pObject); > szObject = SvPV(pObject, len); > > pdhStatus = PdhEnumObjectItems( NULL, > szBox, > szObject, > szCounterListBuffer, > &dwCounterListSize, > szInstanceListBuffer, > &dwInstanceListSize, > PERF_DETAIL_EXPERT, > 0 ); > > if ( pdhStatus == PDH_MORE_DATA ) > { > Newxz(szCounterListBuffer, (int) dwCounterListSize , char ); > Newxz(szInstanceListBuffer, (int) dwInstanceListSize, char ); > > if (( szCounterListBuffer != NULL ) && > ( szInstanceListBuffer != NULL )) > { > pdhStatus = PdhEnumObjectItems( NULL, > szBox, > szObject, > szCounterListBuffer, > &dwCounterListSize, > szInstanceListBuffer, > &dwInstanceListSize, > PERF_DETAIL_EXPERT, > 0 ); 638,678c685 < DWORD dwSize; < DWORD dwSize1; < PDH_STATUS stat; < char* szBuffer; < char* szBuffer2; < char* szBox; < char* szObject; < char* c; < STRLEN len; < STRLEN len2; < int index; < < PPCODE: < < dwSize = 0; < dwSize1 = 0; < szBuffer = NULL; < szBuffer2 = NULL; < len = sv_len(pBox); < szBox = SvPV(pBox, len); < < len2 = sv_len(pObject); < szObject = SvPV(pObject, len2); < < stat = PdhEnumObjects(NULL, szBox, NULL, &dwSize, PERF_DETAIL_EXPERT, 1); < < dwSize = 0; < < stat = PdhEnumObjectItems(NULL, szBox, szObject, szBuffer, &dwSize, szBuffer2, &dwSize1, PERF_DETAIL_EXPERT, 0); < < dwSize1 += 5; < < Newz(0, szBuffer2, (int)dwSize1, char); < < stat = PdhEnumObjectItems(NULL, szBox, szObject, szBuffer, &dwSize, szBuffer2, &dwSize1, PERF_DETAIL_EXPERT, 0); < < c = szBuffer2; < < for(index=0; index<(int)dwSize1; index++) < { < if(*c == 0x00) --- > if ( pdhStatus == ERROR_SUCCESS ) 680c687,692 < *c = '|'; --- > for ( szThisInstance = szInstanceListBuffer; > *szThisInstance != 0; > szThisInstance += lstrlen(szThisInstance) + 1) > { > XPUSHs (sv_2mortal ( newSVpv(szThisInstance, 0) ) ); > } 682,683d693 < < c++; 685,686c695 < < switch(stat) --- > else 688,718c697,699 < case ERROR_SUCCESS: < < XPUSHs(sv_2mortal(newSVpv(szBuffer2, 0))); < < break; < < case PDH_MORE_DATA: < < printf("There are more entries available to return than there is room in the buffer\n"); < XPUSHs(sv_2mortal(newSViv(-1))); < < break; < < case PDH_MEMORY_ALLOCATION_FAILURE: < < sv_setpv(pError, "A required temporary buffer could not be allocated.\n"); < XPUSHs(sv_2mortal(newSViv(-1))); < < break; < < case PDH_INVALID_ARGUMENT: < < sv_setpv(pError, "A required argument is invalid or a reserved argument is not NULL.\n"); < XPUSHs(sv_2mortal(newSViv(-1))); < < break; < < case PDH_CSTATUS_NO_MACHINE: < < sv_setpv(pError, "The specified computer is offline or unavailable.\n"); < XPUSHs(sv_2mortal(newSViv(-1))); --- > pdhStatus = PDH_MEMORY_ALLOCATION_FAILURE; > } > } 720c701,706 < break; --- > switch(pdhStatus) > { > case PDH_MORE_DATA: > printf("There are more entries available to return than there is room in the buffer\n"); > XPUSHs(sv_2mortal(newSViv(-1))); > break; 722c708,711 < case PDH_CSTATUS_NO_OBJECT: --- > case PDH_MEMORY_ALLOCATION_FAILURE: > sv_setpv(pError, "A required temporary buffer could not be allocated.\n"); > XPUSHs(sv_2mortal(newSViv(-1))); > break; 724,725c713,716 < sv_setpv(pError, "The specified object could not be found on the specified computer.\n"); < XPUSHs(sv_2mortal(newSViv(-1))); --- > case PDH_INVALID_ARGUMENT: > sv_setpv(pError, "A required argument is invalid or a reserved argument is not NULL.\n"); > XPUSHs(sv_2mortal(newSViv(-1))); > break; 727c718,721 < break; --- > case PDH_CSTATUS_NO_MACHINE: > sv_setpv(pError, "The specified computer is offline or unavailable.\n"); > XPUSHs(sv_2mortal(newSViv(-1))); > break; 729c723,726 < default: --- > case PDH_CSTATUS_NO_OBJECT: > sv_setpv(pError, "The specified object could not be found on the specified computer.\n"); > XPUSHs(sv_2mortal(newSViv(-1))); > break; 731,733c728,731 < sv_setpv(pError, "I have no idea what went wrong\n"); < XPUSHs(sv_2mortal(newSViv(-1))); < } --- > default: > sv_setpv(pError, "I have no idea what went wrong\n"); > XPUSHs(sv_2mortal(newSViv(-1))); > } 735c733,734 < Safefree(szBuffer2); --- > Safefree(szCounterListBuffer); > Safefree(szInstanceListBuffer);