|
|
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.