home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / sdktools / winnt / pviewer / cntrdata.c next >
C/C++ Source or Header  |  1997-10-05  |  3KB  |  131 lines

  1.  
  2. /******************************************************************************\
  3. *       This is a part of the Microsoft Source Code Samples. 
  4. *       Copyright (C) 1993-1997 Microsoft Corporation.
  5. *       All rights reserved. 
  6. *       This source code is only intended as a supplement to 
  7. *       Microsoft Development Tools and/or WinHelp documentation.
  8. *       See these sources for detailed information regarding the 
  9. *       Microsoft samples programs.
  10. \******************************************************************************/
  11.  
  12.  
  13. /******************************************************************************
  14.  
  15.                             C O U N T E R   D A T A
  16.  
  17.     Name:       cntrdata.c
  18.  
  19.     Description:
  20.         This module contains functions that access counters of an instance
  21.         of object in performance data.
  22.  
  23.     Functions:
  24.         FirstCounter
  25.         NextCounter
  26.         FindCounter
  27.         CounterData
  28.  
  29. ******************************************************************************/
  30.  
  31. #include <windows.h>
  32. #include <winperf.h>
  33. #include "perfdata.h"
  34.  
  35.  
  36.  
  37.  
  38. //*********************************************************************
  39. //
  40. //  FirstCounter
  41. //
  42. //      Find the first counter in pObject.
  43. //
  44. //      Returns a pointer to the first counter.  If pObject is NULL
  45. //      then NULL is returned.
  46. //
  47. PPERF_COUNTER FirstCounter (PPERF_OBJECT pObject)
  48. {
  49.     if (pObject)
  50.         return (PPERF_COUNTER)((PCHAR) pObject + pObject->HeaderLength);
  51.     else
  52.         return NULL;
  53. }
  54.  
  55.  
  56.  
  57.  
  58. //*********************************************************************
  59. //
  60. //  NextCounter
  61. //
  62. //      Find the next counter of pCounter.
  63. //
  64. //      If pCounter is the last counter of an object type, bogus data
  65. //      maybe returned.  The caller should do the checking.
  66. //
  67. //      Returns a pointer to a counter.  If pCounter is NULL then
  68. //      NULL is returned.
  69. //
  70. PPERF_COUNTER NextCounter (PPERF_COUNTER pCounter)
  71. {
  72.     if (pCounter)
  73.         return (PPERF_COUNTER)((PCHAR) pCounter + pCounter->ByteLength);
  74.     else
  75.         return NULL;
  76. }
  77.  
  78.  
  79.  
  80.  
  81. //*********************************************************************
  82. //
  83. //  FindCounter
  84. //
  85. //      Find a counter specified by TitleIndex.
  86. //
  87. //      Returns a pointer to the counter.  If counter is not found
  88. //      then NULL is returned.
  89. //
  90. PPERF_COUNTER FindCounter (PPERF_OBJECT pObject, DWORD TitleIndex)
  91. {
  92. PPERF_COUNTER pCounter;
  93. DWORD         i = 0;
  94.  
  95.     if (pCounter = FirstCounter (pObject))
  96.         while (i < pObject->NumCounters)
  97.             {
  98.             if (pCounter->CounterNameTitleIndex == TitleIndex)
  99.                 return pCounter;
  100.  
  101.             pCounter = NextCounter (pCounter);
  102.             i++;
  103.             }
  104.  
  105.     return NULL;
  106.  
  107. }
  108.  
  109.  
  110.  
  111.  
  112. //*********************************************************************
  113. //
  114. //  CounterData
  115. //
  116. //      Returns counter data for an object instance.  If pInst or pCount
  117. //      is NULL then NULL is returne.
  118. //
  119. PVOID CounterData (PPERF_INSTANCE pInst, PPERF_COUNTER pCount)
  120. {
  121. PPERF_COUNTER_BLOCK pCounterBlock;
  122.  
  123.     if (pCount && pInst)
  124.         {
  125.         pCounterBlock = (PPERF_COUNTER_BLOCK)((PCHAR)pInst + pInst->ByteLength);
  126.         return (PVOID)((PCHAR)pCounterBlock + pCount->CounterOffset);
  127.         }
  128.     else
  129.         return NULL;
  130. }
  131.