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 / instdata.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-05  |  3.8 KB  |  158 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.                             I N S T A N C E   D A T A
  16.  
  17.     Name:       instdata.c
  18.  
  19.     Description:
  20.         This module contains functions that access instances of an object
  21.         type in performance data.
  22.  
  23.     Functions:
  24.         FirstInstance
  25.         NextInstance
  26.         FindInstanceN
  27.         FindInstanceParent
  28.         InstanceName
  29.  
  30.  
  31. ******************************************************************************/
  32.  
  33. #include <windows.h>
  34. #include <winperf.h>
  35. #include "perfdata.h"
  36.  
  37.  
  38.  
  39.  
  40. //*********************************************************************
  41. //
  42. //  FirstInstance
  43. //
  44. //      Returns pointer to the first instance of pObject type.
  45. //      If pObject is NULL then NULL is returned.
  46. //
  47. PPERF_INSTANCE   FirstInstance (PPERF_OBJECT pObject)
  48. {
  49.     if (pObject)
  50.         return (PPERF_INSTANCE)((PCHAR) pObject + pObject->DefinitionLength);
  51.     else
  52.         return NULL;
  53. }
  54.  
  55.  
  56.  
  57.  
  58. //*********************************************************************
  59. //
  60. //  NextInstance
  61. //
  62. //      Returns pointer to the next instance following pInst.
  63. //
  64. //      If pInst is the last instance, bogus data maybe returned.
  65. //      The caller should do the checking.
  66. //
  67. //      If pInst is NULL, then NULL is returned.
  68. //
  69. PPERF_INSTANCE   NextInstance (PPERF_INSTANCE pInst)
  70. {
  71. PERF_COUNTER_BLOCK *pCounterBlock;
  72.  
  73.     if (pInst)
  74.         {
  75.         pCounterBlock = (PERF_COUNTER_BLOCK *)((PCHAR) pInst + pInst->ByteLength);
  76.         return (PPERF_INSTANCE)((PCHAR) pCounterBlock + pCounterBlock->ByteLength);
  77.         }
  78.     else
  79.         return NULL;
  80. }
  81.  
  82.  
  83.  
  84.  
  85. //*********************************************************************
  86. //
  87. //  FindInstanceN
  88. //
  89. //      Returns the Nth instance of pObject type.  If not found, NULL is
  90. //      returned.  0 <= N <= NumInstances.
  91. //
  92.  
  93. PPERF_INSTANCE FindInstanceN (PPERF_OBJECT pObject, DWORD N)
  94. {
  95. PPERF_INSTANCE pInst;
  96. DWORD          i = 0;
  97.  
  98.     if (!pObject)
  99.         return NULL;
  100.     else if (N >= (DWORD)(pObject->NumInstances))
  101.         return NULL;
  102.     else
  103.         {
  104.         pInst = FirstInstance (pObject);
  105.  
  106.         while (i != N)
  107.             {
  108.             pInst = NextInstance (pInst);
  109.             i++;
  110.             }
  111.  
  112.         return pInst;
  113.         }
  114. }
  115.  
  116.  
  117.  
  118.  
  119. //*********************************************************************
  120. //
  121. //  FindInstanceParent
  122. //
  123. //      Returns the pointer to an instance that is the parent of pInst.
  124. //
  125. //      If pInst is NULL or the parent object is not found then NULL is
  126. //      returned.
  127. //
  128. PPERF_INSTANCE FindInstanceParent (PPERF_INSTANCE pInst, PPERF_DATA pData)
  129. {
  130. PPERF_OBJECT    pObject;
  131.  
  132.     if (!pInst)
  133.         return NULL;
  134.     else if (!(pObject = FindObject (pData, pInst->ParentObjectTitleIndex)))
  135.         return NULL;
  136.     else
  137.         return FindInstanceN (pObject, pInst->ParentObjectInstance);
  138. }
  139.  
  140.  
  141.  
  142.  
  143. //*********************************************************************
  144. //
  145. //  InstanceName
  146. //
  147. //      Returns the name of the pInst.
  148. //
  149. //      If pInst is NULL then NULL is returned.
  150. //
  151. LPTSTR  InstanceName (PPERF_INSTANCE pInst)
  152. {
  153.     if (pInst)
  154.         return (LPTSTR) ((PCHAR) pInst + pInst->NameOffset);
  155.     else
  156.         return NULL;
  157. }
  158.