cntrdata.cpp
上传用户:jinandeyu
上传日期:2007-01-05
资源大小:620k
文件大小:3k
源码类别:

远程控制编程

开发平台:

WINDOWS

  1. /*  Back Orifice 2000 - Remote Administration Suite
  2.     Copyright (C) 1999, Cult Of The Dead Cow
  3.     This program is free software; you can redistribute it and/or modify
  4.     it under the terms of the GNU General Public License as published by
  5.     the Free Software Foundation; either version 2 of the License, or
  6.     (at your option) any later version.
  7.     This program is distributed in the hope that it will be useful,
  8.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.     GNU General Public License for more details.
  11.     You should have received a copy of the GNU General Public License
  12.     along with this program; if not, write to the Free Software
  13.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  14. The author of this program may be contacted at dildog@l0pht.com. */
  15. #include <windows.h> 
  16. #include <winperf.h> 
  17. #include <perfdata.h> 
  18.  
  19.  
  20. // FirstCounter() - Find the first counter in pObject. 
  21. //                  Returns a pointer to the first counter.  If pObject is NULL 
  22. //                  then NULL is returned. 
  23. PPERF_COUNTER FirstCounter (PPERF_OBJECT pObject) 
  24.     if (pObject) 
  25.         return (PPERF_COUNTER)((PCHAR) pObject + pObject->HeaderLength); 
  26.     else 
  27.         return NULL; 
  28.  
  29.  
  30.  
  31.  
  32. // NextCounter() - Find the next counter of pCounter. 
  33. //                 If pCounter is the last counter of an object type, bogus data 
  34. //                 maybe returned.  The caller should do the checking. 
  35. //                 Returns a pointer to a counter.  If pCounter is NULL then 
  36. //                 NULL is returned. 
  37. PPERF_COUNTER NextCounter (PPERF_COUNTER pCounter) 
  38.     if (pCounter) 
  39.         return (PPERF_COUNTER)((PCHAR) pCounter + pCounter->ByteLength); 
  40.     else 
  41.         return NULL; 
  42.  
  43.  
  44.  
  45.  
  46. // FindCounter() - Find a counter specified by TitleIndex. 
  47. //                 Returns a pointer to the counter.  If counter is not found 
  48. //                 then NULL is returned. 
  49. PPERF_COUNTER FindCounter (PPERF_OBJECT pObject, DWORD TitleIndex) 
  50. PPERF_COUNTER pCounter; 
  51. DWORD         i = 0; 
  52.     if (pCounter = FirstCounter (pObject)) 
  53.         while (i < pObject->NumCounters) 
  54.             if (pCounter->CounterNameTitleIndex == TitleIndex) 
  55.                 return pCounter; 
  56.             pCounter = NextCounter (pCounter); 
  57.             i++; 
  58. return NULL; 
  59.  
  60.  
  61.  
  62.  
  63. //  CounterData() - Returns counter data for an object instance.  
  64. //                  If pInst or pCount is NULL then NULL is returned.
  65. PVOID CounterData (PPERF_INSTANCE pInst, PPERF_COUNTER pCount) 
  66. PPERF_COUNTER_BLOCK pCounterBlock; 
  67.     if (pCount && pInst) 
  68.         pCounterBlock = (PPERF_COUNTER_BLOCK)((PCHAR)pInst + pInst->ByteLength); 
  69.         return (PVOID)((PCHAR)pCounterBlock + pCount->CounterOffset); 
  70.     else 
  71.         return NULL; 
  72.