Annotation of mstools/h/winperf.h, revision 1.1

1.1     ! root        1: //
        !             2: //  winperf.h  -   Header file for the Performance Monitor data
        !             3: //
        !             4: //
        !             5: //
        !             6: //  Written by:
        !             7: //
        !             8: //     Russ Blake  11/15/91
        !             9: //
        !            10: //  Revision History:
        !            11: //
        !            12: //     None
        !            13: //     russbl     -   1/22/92    - Add diagrams of data structures
        !            14: //      russbl     -   4/14/92    - Add version/revision, signature,
        !            15: //                                  and pointer fields for titles
        !            16: //                                  strings reserved for analysis
        !            17: //                                  program usage
        !            18: //      russbl     -   5/29/92    - Add default scale to counter
        !            19: //                                  definition, *Pstruct types to
        !            20: //                                  all structure defs, and counter
        !            21: //                                  types ..._MULTI_
        !            22: //
        !            23: 
        !            24: 
        !            25: //
        !            26: //  This file contains the definitions of the data structures returned
        !            27: //  by the Configuration Registry in response to a request for
        !            28: //  performance data.  This file is used by both the Configuration
        !            29: //  Registry and the Performance Monitor to define their interface.
        !            30: //  The complete interface is described here, except for the name
        !            31: //  of the node to query in the registry.  It is
        !            32: //
        !            33: //                 HKEY_PERFORMANCE_DATA.
        !            34: //
        !            35: //  By querying that node with a subkey of "GLOBAL" the caller will
        !            36: //  retrieve the structures described here.
        !            37: //
        !            38: //  There is no need to RegOpenKey the reserved handle HKEY_PERFORMANCE_DATA,
        !            39: //  but the caller should RegCloseKey the handle so that network transports
        !            40: //  and drivers can be removed or installed (which cannot happen while
        !            41: //  they are open for monitoring.)
        !            42: //
        !            43: //
        !            44: 
        !            45: 
        !            46: /*****************************************************************************\
        !            47: 
        !            48: 
        !            49: The basic layout of the data block returned is a header followed by a
        !            50: data area for each type of object under measurement.  Typical object
        !            51: types are processor, disk, and memory. The system being observed
        !            52: defines what objects are under measurement.  Naturally, different
        !            53: systems may measure different types of objects.
        !            54: 
        !            55: 
        !            56:                +-----------------------------------------+
        !            57:                |                                         |
        !            58:                | PERF_DATA_BLOCK                         |
        !            59:                | - - - - - - - - - - - - - - - - - - - - |
        !            60:                | NumObjectTypes                          |
        !            61:                | - - - - - - - - - - - - - - - - - - - - |
        !            62:                |-----------------------------------------|
        !            63:                |                                         |
        !            64:                |                                         |
        !            65:                | PERF_OBJECT_TYPE 0                      |
        !            66:                |                                         |
        !            67:                |                                         |
        !            68:                |-----------------------------------------|
        !            69:                |                                         |
        !            70:                |                                         |
        !            71:                | PERF_OBJECT_TYPE 1                      |
        !            72:                |                                         |
        !            73:                |                                         |
        !            74:                |-----------------------------------------|
        !            75:                |                                         |
        !            76:                |                                         |
        !            77:                | PERF_OBJECT_TYPE 2                      |
        !            78:                |                                         |
        !            79:                |                                         |
        !            80:                |-----------------------------------------|
        !            81:                |                    .                    |
        !            82:                |                    .                    |
        !            83:                |                    .                    |
        !            84:                |-----------------------------------------|
        !            85:                |                                         |
        !            86:                |                                         |
        !            87:                | PERF_OBJECT_TYPE NumObjectTypes-1       |
        !            88:                |                                         |
        !            89:                |                                         |
        !            90:                +-----------------------------------------+
        !            91: 
        !            92: Note that from one call to the next, there may be different object types
        !            93: defined, meaning that PERF_DATA_BLOCK.NumObjectTypes will vary.  As will
        !            94: become clear shortly, the size of the area for each object type may also
        !            95: vary.  You cannot count on the locations of the object type areas from
        !            96: one call to the system to the next.  To help to accomodate this, offsets
        !            97: have been included to help naviagte the structure.  Such offsets are
        !            98: !always! relative to the !beginning! of the structure which contains them.
        !            99: 
        !           100:                +-----------------------------------------+
        !           101:                | PERF_DATA_BLOCK                         |
        !           102:                | - - - - - - - - - - - - - - - - - - - - |
        !           103:                | TotalByteLength                         *--------*
        !           104:                | - - - - - - - - - - - - - - - - - - - - |        |
        !           105:                | HeaderLength                            *----*   |
        !           106:                | - - - - - - - - - - - - - - - - - - - - |    |   |
        !           107:                |                                         |    |   |
        !           108:                |                                         |    |   |
        !           109:                |-----------------------------------------|    |   |
        !           110:                | PERF_OBJECT_TYPE 0                      |<---*   |
        !           111:                | - - - - - - - - - - - - - - - - - - - - |        |
        !           112:                | TotalByteLength                         *----*   |
        !           113:                | - - - - - - - - - - - - - - - - - - - - |    |   |
        !           114:                |                                         |    |   |
        !           115:                |                                         |    |   |
        !           116:                |-----------------------------------------|    |   |
        !           117:                | PERF_OBJECT_TYPE 1                      |<---*   |
        !           118:                | - - - - - - - - - - - - - - - - - - - - |        |
        !           119:                | TotalByteLength                         *----*   |
        !           120:                | - - - - - - - - - - - - - - - - - - - - |    |   |
        !           121:                |                                         |    |   |
        !           122:                |                                         |    |   |
        !           123:                |                                         |    |   |
        !           124:                |                                         |    |   |
        !           125:                |-----------------------------------------|    |   |
        !           126:                | PERF_OBJECT_TYPE 2                      |<---*   |
        !           127:                | - - - - - - - - - - - - - - - - - - - - |        |
        !           128:                | TotalByteLength                         *----*   |
        !           129:                | - - - - - - - - - - - - - - - - - - - - |    |   |
        !           130:                |                                         |    |   |
        !           131:                |                                         |    |   |
        !           132:                |-----------------------------------------|    |   |
        !           133:                |                    .                    |<---*   |
        !           134:                |                    .                    |        .
        !           135:                |                    .                    |. . .   .
        !           136:                |-----------------------------------------|    .   .
        !           137:                | PERF_OBJECT_TYPE NumObjectTypes-1       |<---*   |
        !           138:                |                                         |        |
        !           139:                |                                         |        |
        !           140:                |                                         |        |
        !           141:                |                                         |        |
        !           142:                +-----------------------------------------+<-------*
        !           143: 
        !           144: 
        !           145: Each PERF_OBJECT_TYPE definition is followed by the definitions of all the
        !           146: counters which are defined for that object.  Typical counters for the
        !           147: object of type processor are Processor Time, Interrupts, and Page Faults.
        !           148: 
        !           149:                +-----------------------------------------+
        !           150:                | PERF_OBJECT_TYPE i                      |
        !           151:                |                                         |
        !           152:                | - - - - - - - - - - - - - - - - - - - - |
        !           153:                | DefinitionLength                        *----------*
        !           154:                | - - - - - - - - - - - - - - - - - - - - |          |
        !           155:                | HeaderLength                            *-----*    |
        !           156:                | - - - - - - - - - - - - - - - - - - - - |     |    |
        !           157:                | NumCounters                             |     |    |
        !           158:                | - - - - - - - - - - - - - - - - - - - - |     |    |
        !           159:                |                                         |     |    |
        !           160:                |                                         |     |    |
        !           161:                |-----------------------------------------|     |    |
        !           162:                | PERF_COUNTER_DEFINITION 0               |<----*    |
        !           163:                |                                         |          |
        !           164:                |                                         |          |
        !           165:                |-----------------------------------------|          |
        !           166:                | PERF_COUNTER_DEFINITION 1               |          |
        !           167:                |                                         |          |
        !           168:                |                                         |          |
        !           169:                |-----------------------------------------|          |
        !           170:                | PERF_COUNTER_DEFINITION 2               |          |
        !           171:                |                                         |          |
        !           172:                |                                         |          |
        !           173:                |-----------------------------------------|          |
        !           174:                |                    .                    |          |
        !           175:                |                    .                    |          |
        !           176:                |                    .                    |          |
        !           177:                |-----------------------------------------|          |
        !           178:                | PERF_COUNTER_DEFINITION  NumCounters-1  |          |
        !           179:                |                                         |          |
        !           180:                |                                         |          |
        !           181:                |-----------------------------------------|          |
        !           182:                |                    .                    |<---------*
        !           183:                |                    .                    |
        !           184:                |                    .                    |
        !           185:                +-----------------------------------------+
        !           186: 
        !           187: 
        !           188: Following the counter definitions for the object type are the Instances for
        !           189: that object type.  In a multiprocessor system, for example, there are by
        !           190: definition multiple instances of the object type processor.  The number
        !           191: of instances for an object type like threads may not be the same from
        !           192: one call to get data to the next.
        !           193: 
        !           194:                +-----------------------------------------+
        !           195:                | PERF_OBJECT_TYPE i                      |
        !           196:                |                                         |
        !           197:                | - - - - - - - - - - - - - - - - - - - - |
        !           198:                | TotalByteLength                         *---------------*
        !           199:                | - - - - - - - - - - - - - - - - - - - - |               |
        !           200:                | DefinitionLength                        *----------*    |
        !           201:                | - - - - - - - - - - - - - - - - - - - - |          |    |
        !           202:                | HeaderLength                            *-----*    |    |
        !           203:                | - - - - - - - - - - - - - - - - - - - - |     |    |    |
        !           204:                | NumCounters                             |     |    |    |
        !           205:                | - - - - - - - - - - - - - - - - - - - - |     |    |    |
        !           206:                | NumInstances                            |     |    |    |
        !           207:                | - - - - - - - - - - - - - - - - - - - - |     |    |    |
        !           208:                |                                         |     |    |    |
        !           209:                |                                         |     |    |    |
        !           210:                |-----------------------------------------|     |    |    |
        !           211:                | PERF_COUNTER_DEFINITION 0               |<----*    |    |
        !           212:                |                                         |          |    |
        !           213:                |                                         |          |    |
        !           214:                |-----------------------------------------|          |    |
        !           215:                | PERF_COUNTER_DEFINITION 1               |          |    |
        !           216:                |                                         |          |    |
        !           217:                |                                         |          |    |
        !           218:                |-----------------------------------------|          |    |
        !           219:                |                    .                    |          |    |
        !           220:                |                    .                    |          |    |
        !           221:                |                    .                    |          |    |
        !           222:                |-----------------------------------------|          |    |
        !           223:                | PERF_COUNTER_DEFINITION  NumCounters-1  |          |    |
        !           224:                |                                         |          |    |
        !           225:                |                                         |          |    |
        !           226:                |-----------------------------------------|          |    |
        !           227:                | PERF_INSTANCE_DEFINITION 0              |<---------*    |
        !           228:                |                                         |               |
        !           229:                |                                         |               |
        !           230:                |-----------------------------------------|               |
        !           231:                | PERF_INSTANCE_DEFINITION 1              |               |
        !           232:                |                                         |               |
        !           233:                |                                         |               |
        !           234:                |-----------------------------------------|               |
        !           235:                | PERF_INSTANCE_DEFINITION 2              |               |
        !           236:                |                                         |               |
        !           237:                |                                         |               |
        !           238:                |-----------------------------------------|               |
        !           239:                |                    .                    |               |
        !           240:                |                    .                    |               |
        !           241:                |                    .                    |               |
        !           242:                |-----------------------------------------|               |
        !           243:                | PERF_INSTANCE_DEFINITION NumInstances-1 |               |
        !           244:                |                                         |               |
        !           245:                |                                         |               |
        !           246:                +-----------------------------------------+<--------------*
        !           247: 
        !           248: Each instance definition is followed by the counter data for that instance.
        !           249: This is the actual data for each counter defined for the object type of
        !           250: which the instance is a member.  There are PERF_OBJECT_TYPE.NumCounters
        !           251: such counters for !each! instance.
        !           252: 
        !           253: The size of the various instance definitions is not constant, since each
        !           254: instance definition structure is followed by the null-terminated name of
        !           255: the instance.  Therefore the instance definition contains an offset to
        !           256: its first counter data item, and also to its name.
        !           257: 
        !           258:                +-----------------------------------------+
        !           259:                | PERF_INSTANCE_DEFINITION j              |
        !           260:                |                                         |
        !           261:                | - - - - - - - - - - - - - - - - - - - - |
        !           262:                | ByteLength                              *-----------*
        !           263:                | - - - - - - - - - - - - - - - - - - - - |           |
        !           264:                |                                         |           |
        !           265:                |                                         |           |
        !           266:                | - - - - - - - - - - - - - - - - - - - - |           |
        !           267:                | NameOffset                              *-----*     |
        !           268:                | - - - - - - - - - - - - - - - - - - - - |     |     |
        !           269:                |                                         |     |     |
        !           270:                |                                         |     |     |
        !           271:                | - - - - - - - - - - - - - - - - - - - - |     |     |
        !           272:                | Name of PERF_INSTANCE_DEFINITION j      |<----*     |
        !           273:                |                                         |           |
        !           274:                |                                         |           |
        !           275:                |                                         |           |
        !           276:                |             ...padded to 4 byte boundary|           |
        !           277:                |-----------------------------------------|           |
        !           278:                | PERF_COUNTER_BLOCK                      |<----------*
        !           279:                | - - - - - - - - - - - - - - - - - - - - |
        !           280:                | ByteLength                              *-----*
        !           281:                | - - - - - - - - - - - - - - - - - - - - |     |
        !           282:                | Data for Counter 0                      |     |
        !           283:                | - - - - - - - - - - - - - - - - - - - - |     |
        !           284:                | Data for Counter 1                      |     |
        !           285:                | - - - - - - - - - - - - - - - - - - - - |     |
        !           286:                | Data for Counter 2                      |     |
        !           287:                |                                         |     |
        !           288:                | - - - - - - - - - - - - - - - - - - - - |     |
        !           289:                |                    .                    |     |
        !           290:                |                    .                    |     |
        !           291:                |                    .                    |     |
        !           292:                | - - - - - - - - - - - - - - - - - - - - |     |
        !           293:                | Data for Counter NumCounters-1          |     |
        !           294:                |                                         |     |
        !           295:                +-----------------------------------------+<----*
        !           296: 
        !           297: 
        !           298: \*****************************************************************************/
        !           299: 
        !           300: //  Data structure definitions.
        !           301: 
        !           302: //  In order for data to be returned through the Configuration Registry
        !           303: //  in a system-independent fashion, it must be self-describing.
        !           304: 
        !           305: //  In the following, all offsets are in bytes.
        !           306: 
        !           307: //
        !           308: //  Data is returned through the Configuration Registry in a
        !           309: //  a data block which begins with a _PERF_DATA_BLOCK structure.
        !           310: //
        !           311: 
        !           312: #define PERF_DATA_VERSION   1
        !           313: #define PERF_DATA_REVISION  0
        !           314: 
        !           315: 
        !           316: typedef struct _PERF_DATA_BLOCK {
        !           317:     WCHAR           Signature[4];       // Signature: Unicode "PERF"
        !           318:     DWORD           LittleEndian;       // 0 = Big Endian, 1 = Little Endian
        !           319:     DWORD           Version;            // Version of these data structures
        !           320:                                         // starting at 1
        !           321:     DWORD           Revision;           // Revision of these data structures
        !           322:                                         // starting at 0 for each Version
        !           323:     DWORD          TotalByteLength;    // Total length of data block
        !           324:     DWORD          HeaderLength;       // Length of this structure
        !           325:     DWORD          NumObjectTypes;     // Number of types of objects
        !           326:                                        // being reported
        !           327:     DWORD          DefaultObject;      // Index starting at 0 of default
        !           328:                                        // object to display when data from
        !           329:                                        // this system is retireved (-1 =
        !           330:                                        // none, but this is not expected to
        !           331:                                        // be used)
        !           332:     SYSTEMTIME     SystemTime;         // Time at the system under
        !           333:                                        // measurement
        !           334:     LARGE_INTEGER   PerfTime;          // Performance counter value
        !           335:                                        // at the system under measurement
        !           336:     LARGE_INTEGER   PerfFreq;          // Performance counter frequency
        !           337:                                        // at the system under measurement
        !           338:     LARGE_INTEGER   PerfTime100nSec;    // Performance counter time in 100 nsec
        !           339:                                         // units at the system under measurement
        !           340:     DWORD          SystemNameLength;   // Length of the system name
        !           341:     DWORD          SystemNameOffset;   // Offset, from beginning of this
        !           342:                                        // structure, to name of system
        !           343:                                        // being measured
        !           344: } PERF_DATA_BLOCK, *PPERF_DATA_BLOCK;
        !           345: 
        !           346: 
        !           347: //
        !           348: //  The _PERF_DATA_BLOCK structure is followed by NumObjectTypes of
        !           349: //  data sections, one for each type of object measured.  Each object
        !           350: //  type section begins with a _PERF_OBJECT_TYPE structure.
        !           351: //
        !           352: 
        !           353: 
        !           354: typedef struct _PERF_OBJECT_TYPE {
        !           355:     DWORD          TotalByteLength;    // Length of this object definition
        !           356:                                        // including this structure, the
        !           357:                                        // counter defintions, and the
        !           358:                                        // instance definitions and the
        !           359:                                        // counter blocks for each instance:
        !           360:                                        // This is the offset from this
        !           361:                                        // structure to the next object, if
        !           362:                                        // any
        !           363:     DWORD          DefinitionLength;   // Length of object definition,
        !           364:                                        // which includes this structure
        !           365:                                        // and the counter definition
        !           366:                                        // structures for this object: this
        !           367:                                        // is the offset of the first
        !           368:                                        // instance or of the counters
        !           369:                                        // for this object if there is
        !           370:                                        // no instance
        !           371:     DWORD          HeaderLength;       // Length of this structure: this
        !           372:                                        // is the offset to the first
        !           373:                                        // counter definition for this
        !           374:                                        // object
        !           375:     DWORD          ObjectNameTitleIndex;
        !           376:                                         // Index to name in Title Database
        !           377:     LPWSTR          ObjectNameTitle;    // Initially NULL, for use by
        !           378:                                         // analysis program to point to
        !           379:                                         // retrieved title string
        !           380:     DWORD          ObjectHelpTitleIndex;
        !           381:                                        // Index to Help in Title Database
        !           382:     LPWSTR          ObjectHelpTitle;    // Initially NULL, for use by
        !           383:                                         // analysis program to point to
        !           384:                                         // retrieved title string
        !           385:     DWORD          DetailLevel;        // Object level of detail (for
        !           386:                                        // controlling display complexity);
        !           387:                                        // will be min of detail levels
        !           388:                                        // for all this object's counters
        !           389:     DWORD          NumCounters;        // Number of counters in each
        !           390:                                        // counter block (one counter
        !           391:                                        // block per instance)
        !           392:     DWORD          DefaultCounter;     // Default counter to display when
        !           393:                                        // this object is selected, index
        !           394:                                        // starting at 0 (-1 = none, but
        !           395:                                        // this is not expected to be used)
        !           396:     DWORD          NumInstances;       // Number of object instances
        !           397:                                        // for which counters are being
        !           398:                                        // returned from the system under
        !           399:                                        // measurement
        !           400:     DWORD          CodePage;           // 0 if instance strings are in
        !           401:                                        // UNICODE, else the Code Page of
        !           402:                                        // the instance names
        !           403: } PERF_OBJECT_TYPE, *PPERF_OBJECT_TYPE;
        !           404: 
        !           405: //
        !           406: //  The following types of counters are currently defined.
        !           407: //
        !           408: 
        !           409: #define PERF_COUNTER_COUNTER     1      // 32-bit Counter.  Divide delta
        !           410:                                         // by delta time.
        !           411: 
        !           412:                                         // Display suffix: "/sec"
        !           413: #define PERF_COUNTER_TIMER       2      // 64-bit Timer.  Divide delta by
        !           414:                                         // delta time.
        !           415:                                         // Display suffix: "%"
        !           416: 
        !           417: #define PERF_COUNTER_QUEUELEN    3      // Queue Length Space-Time Product.
        !           418:                                         // Divide delta by delta time.
        !           419:                                         // No Display Suffix.
        !           420: 
        !           421: #define PERF_COUNTER_BULK_COUNT  4      // 64-bit Counter.  Divide delta by
        !           422:                                         // delta time.
        !           423:                                         // Display Suffix: "/sec"
        !           424: 
        !           425: #define PERF_COUNTER_TEXT       5      // Indicates the counter is not a
        !           426:                                         // counter but rather Unicode text
        !           427:                                         // Display as text.
        !           428: 
        !           429: #define PERF_COUNTER_RAWCOUNT   6      // Indicates the data is a
        !           430:                                        // counter  which should not be
        !           431:                                        // time averaged on display (such as
        !           432:                                         // an error counter on a serial line)
        !           433:                                         // Display as is.  No Display Suffix.
        !           434: 
        !           435: #define PERF_SAMPLE_FRACTION    7      // A count which is either 1 or 0 on
        !           436:                                         // each sampling interrupt (% busy)
        !           437:                                         // Divide delta by delta base.
        !           438:                                         // Display Suffix: "%"
        !           439: 
        !           440: #define PERF_SAMPLE_COUNTER     8      // A count which is sampled on each
        !           441:                                         // sampling interrupt (queue length)
        !           442:                                         // Divide delta by delta time.
        !           443:                                         // No Display Suffix.
        !           444: 
        !           445: #define PERF_COUNTER_NODATA     9      // A label: no data is associated
        !           446:                                         // with this counter (it has 0 length)
        !           447:                                         // Do not display.
        !           448: 
        !           449: #define PERF_COUNTER_TIMER_INV  10     // 64-bit Timer inverse (e.g., idle
        !           450:                                         // is measured, but display busy %)
        !           451:                                         // Display 100 - delta divided by
        !           452:                                         // delta time.  Display suffix: "%"
        !           453: 
        !           454: #define PERF_SAMPLE_BASE        11     // The divisor for a sample, used with
        !           455:                                        // the previous counter to form a
        !           456:                                        // sampled %.  You must check for >0
        !           457:                                         // before dividing by this!  This
        !           458:                                         // counter will directly follow the
        !           459:                                         // numerator counter.  It should not
        !           460:                                         // be displayed to the user.
        !           461: 
        !           462: #define PERF_AVERAGE_TIMER       12     // A timer which, when divided by
        !           463:                                         // an average base, produces a time
        !           464:                                         // in seconds which is the average
        !           465:                                         // time of some operation.  This
        !           466:                                         // timer times total operations, and
        !           467:                                         // the base is the number of opera-
        !           468:                                         // tions.  Display Suffix: "sec"
        !           469: 
        !           470: #define PERF_AVERAGE_BASE        13     // Used as the denominator in the
        !           471:                                         // computation of time or count
        !           472:                                         // averages.  Must directly follow
        !           473:                                         // the numerator counter.  Not dis-
        !           474:                                         // played to the user.
        !           475: 
        !           476: #define PERF_AVERAGE_BULK        14     // A bulk count which, when divided
        !           477:                                         // (typically) by the number of
        !           478:                                         // operations, gives (typically) the
        !           479:                                         // number of bytes per operation.
        !           480:                                         // No Display Suffix.
        !           481: 
        !           482: #define PERF_100NSEC_TIMER       15     // 64-bit Timer in 100 nsec units.
        !           483:                                         // Display delta divided by
        !           484:                                         // delta time.  Display suffix: "%"
        !           485: 
        !           486: #define PERF_100NSEC_TIMER_INV   16     // 64-bit Timer inverse (e.g., idle
        !           487:                                         // is measured, but display busy %)
        !           488:                                         // Display 100 - delta divided by
        !           489:                                         // delta time.  Display suffix: "%"
        !           490: 
        !           491: #define PERF_COUNTER_MULTI_TIMER 17     // 64-bit Timer.  Divide delta by
        !           492:                                         // delta time.  Display suffix: "%"
        !           493:                                         // Timer for multiple instances, so
        !           494:                                         // result can exceed 100%.
        !           495: 
        !           496: #define PERF_COUNTER_MULTI_TIMER_INV \
        !           497:                                  18     // 64-bit Timer inverse (e.g., idle
        !           498:                                         // is measured, but display busy %)
        !           499:                                         // Display 100 * _MULTI_BASE -
        !           500:                                         // delta divided by delta time.
        !           501:                                         // Display suffix: "%" Timer for
        !           502:                                         // multiple instances, so result
        !           503:                                         // can exceed 100%.  Followed by
        !           504:                                         // a counter of type _MULTI_BASE.
        !           505: 
        !           506: #define PERF_COUNTER_MULTI_BASE  19     // Number of instances to which the
        !           507:                                         // preceeding _MULTI_..._INV counter
        !           508:                                         // applies.  Used as a factor to get
        !           509:                                         // the percentage.
        !           510: 
        !           511: #define PERF_100NSEC_MULTI_TIMER 20     // 64-bit Timer in 100 nsec units.
        !           512:                                         // Display delta divided by
        !           513:                                         // delta time.  Display suffix: "%"
        !           514:                                         // Timer for multiple instances, so
        !           515:                                         // result can exceed 100%.
        !           516: 
        !           517: #define PERF_100NSEC_MULTI_TIMER_INV \
        !           518:                                  21     // 64-bit Timer inverse (e.g., idle
        !           519:                                         // is measured, but display busy %)
        !           520:                                         // Display 100 * _MULTI_BASE -
        !           521:                                         // delta divided by delta time.
        !           522:                                         // Display suffix: "%" Timer for
        !           523:                                         // multiple instances, so result
        !           524:                                         // can exceed 100%.  Followed by
        !           525:                                         // a counter of type _MULTI_BASE.
        !           526: 
        !           527: //
        !           528: //  The following counter type can be used with the preceeding types to
        !           529: //  define a reange of values to be displayed in a histogram.
        !           530: //
        !           531: 
        !           532: #define PERF_COUNTER_HISTOGRAM  0x80000000
        !           533:                                        // Counter begins or ends a histogram
        !           534: 
        !           535: //
        !           536: //  The following are used to determine the level of detail associated
        !           537: //  with the counter.  The user will be setting the level of detail
        !           538: //  that should be displayed at any given time.
        !           539: //
        !           540: 
        !           541: #define PERF_DETAIL_NOVICE     100     // The uninformed can understand it
        !           542: #define PERF_DETAIL_ADVANCED   200     // For the advanced user
        !           543: #define PERF_DETAIL_EXPERT     300     // For the expert user
        !           544: #define PERF_DETAIL_WIZARD     400     // For the system designer
        !           545: 
        !           546: 
        !           547: //
        !           548: //  There is one of the following for each of the
        !           549: //  PERF_OBJECT_TYPE.NumCounters.  The Unicode names in this structure MUST
        !           550: //  come from a message file.
        !           551: //
        !           552: 
        !           553: typedef struct _PERF_COUNTER_DEFINITION {
        !           554:     DWORD           ByteLength;         // Length in bytes of this structure
        !           555:     DWORD          CounterNameTitleIndex;
        !           556:                                        // Index of Counter name into
        !           557:                                        // Title Database
        !           558:     LPWSTR          CounterNameTitle;   // Initially NULL, for use by
        !           559:                                         // analysis program to point to
        !           560:                                         // retrieved title string
        !           561:     DWORD          CounterHelpTitleIndex;
        !           562:                                        // Index of Counter Help into
        !           563:                                        // Title Database
        !           564:     LPWSTR          CounterHelpTitle;   // Initially NULL, for use by
        !           565:                                         // analysis program to point to
        !           566:                                         // retrieved title string
        !           567:     DWORD           DefaultScale;       // Power of 10 by which to scale
        !           568:                                         // chart line if vertical axis is 100
        !           569:                                         // 0 ==> 1, 1 ==> 10, -1 ==>1/10, etc.
        !           570:     DWORD          DetailLevel;        // Counter level of detail (for
        !           571:                                        // controlling display complexity)
        !           572:     DWORD          CounterType;        // Type of counter
        !           573:     DWORD          CounterSize;        // Size of counter in bytes
        !           574:     DWORD          CounterOffset;      // Offset from the start of the
        !           575:                                        // PERF_COUNTER_BLOCK to the first
        !           576:                                        // byte of this counter
        !           577: } PERF_COUNTER_DEFINITION, *PPERF_COUNTER_DEFINITION;
        !           578: 
        !           579: 
        !           580: //
        !           581: //  There is one of the following for each of the
        !           582: //  PERF_DATA_BLOCK.NumInstances.
        !           583: //
        !           584: 
        !           585: #define PERF_NO_UNIQUE_ID -1
        !           586: 
        !           587: typedef struct _PERF_INSTANCE_DEFINITION {
        !           588:     DWORD          ByteLength;         // Length in bytes of this structure,
        !           589:                                        // including the subsequent name
        !           590:     DWORD           ParentObjectTitleIndex;
        !           591:                                         // Title Index to name of "parent"
        !           592:                                        // object (e.g., if thread, then
        !           593:                                         // process is parent object type);
        !           594:                                         // if logical drive, the physical
        !           595:                                         // drive is parent object type
        !           596:     DWORD          ParentObjectInstance;
        !           597:                                        // Index to instance of parent object
        !           598:                                        // type which is the parent of this
        !           599:                                        // instance.
        !           600:     DWORD          UniqueID;           // A unique ID used instead of
        !           601:                                        // matching the name to identify
        !           602:                                        // this instance, -1 = none
        !           603:     DWORD          NameOffset;         // Offset from beginning of
        !           604:                                        // this struct to the Unicode name
        !           605:                                        // of this instance
        !           606:     DWORD          NameLength;         // Length in bytes of name; 0 = none
        !           607: 
        !           608: } PERF_INSTANCE_DEFINITION, *PPERF_INSTANCE_DEFINITION;
        !           609: 
        !           610: 
        !           611: //
        !           612: //  If .ParentObjectName is 0, there
        !           613: //  is no parent-child hierarcy for this object type.  Otherwise,
        !           614: //   the .ParentObjectInstance is an index, starting at 0, into the
        !           615: //  instances reported for the parent object type.  It is only
        !           616: //  meaningful if .ParentObjectName is not 0.  The purpose of all this
        !           617: //  is to permit reporting/summation of object instances like threads
        !           618: //  within processes, and logical drives within physical drives.
        !           619: //
        !           620: //
        !           621: //  The PERF_INSTANCE_DEFINITION will be followed by a PERF_COUNTER_BLOCK.
        !           622: //
        !           623: 
        !           624: typedef struct _PERF_COUNTER_BLOCK {
        !           625:     DWORD          ByteLength;         // Length in bytes of this structure,
        !           626:                                        // including the following counters
        !           627: } PERF_COUNTER_BLOCK, *PPERF_COUNTER_BLOCK;
        !           628: 
        !           629: //
        !           630: //  The PERF_COUNTER_BLOCK is followed by PERF_OBJECT_TYPE.NumCounters
        !           631: //  number of counters.
        !           632: //

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.