|
|
1.1 ! root 1: ! 2: /******************************************************************************\ ! 3: * This is a part of the Microsoft Source Code Samples. ! 4: * Copyright (C) 1993 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.