| 1 | #ifndef _WINPERF_H | 
 
 
 
 
 | 2 | #define _WINPERF_H | 
 
 
 
 
 | 3 | #if __GNUC__ >=3 | 
 
 
 
 
 | 4 | #pragma GCC system_header | 
 
 
 
 
 | 5 | #endif | 
 
 
 
 
 | 6 |  | 
 
 
 
 
 | 7 | #ifdef __cplusplus | 
 
 
 
 
 | 8 | extern "C" { | 
 
 
 
 
 | 9 | #endif | 
 
 
 
 
 | 10 | #define PERF_DATA_VERSION 1 | 
 
 
 
 
 | 11 | #define PERF_DATA_REVISION 1 | 
 
 
 
 
 | 12 | #define PERF_NO_INSTANCES -1 | 
 
 
 
 
 | 13 | #define PERF_SIZE_DWORD 0 | 
 
 
 
 
 | 14 | #define PERF_SIZE_LARGE 256 | 
 
 
 
 
 | 15 | #define PERF_SIZE_ZERO 512 | 
 
 
 
 
 | 16 | #define PERF_SIZE_VARIABLE_LEN 768 | 
 
 
 
 
 | 17 | #define PERF_TYPE_NUMBER 0 | 
 
 
 
 
 | 18 | #define PERF_TYPE_COUNTER 1024 | 
 
 
 
 
 | 19 | #define PERF_TYPE_TEXT 2048 | 
 
 
 
 
 | 20 | #define PERF_TYPE_ZERO 0xC00 | 
 
 
 
 
 | 21 | #define PERF_NUMBER_HEX 0 | 
 
 
 
 
 | 22 | #define PERF_NUMBER_DECIMAL 0x10000 | 
 
 
 
 
 | 23 | #define PERF_NUMBER_DEC_1000 0x20000 | 
 
 
 
 
 | 24 | #define PERF_COUNTER_VALUE 0 | 
 
 
 
 
 | 25 | #define PERF_COUNTER_RATE 0x10000 | 
 
 
 
 
 | 26 | #define PERF_COUNTER_FRACTION 0x20000 | 
 
 
 
 
 | 27 | #define PERF_COUNTER_BASE 0x30000 | 
 
 
 
 
 | 28 | #define PERF_COUNTER_ELAPSED 0x40000 | 
 
 
 
 
 | 29 | #define PERF_COUNTER_QUEUELEN 0x50000 | 
 
 
 
 
 | 30 | #define PERF_COUNTER_HISTOGRAM 0x60000 | 
 
 
 
 
 | 31 | #define PERF_TEXT_UNICODE 0 | 
 
 
 
 
 | 32 | #define PERF_TEXT_ASCII 0x10000 | 
 
 
 
 
 | 33 | #define PERF_TIMER_TICK 0 | 
 
 
 
 
 | 34 | #define PERF_TIMER_100NS 0x100000 | 
 
 
 
 
 | 35 | #define PERF_OBJECT_TIMER 0x200000 | 
 
 
 
 
 | 36 | #define PERF_DELTA_COUNTER 0x400000 | 
 
 
 
 
 | 37 | #define PERF_DELTA_BASE 0x800000 | 
 
 
 
 
 | 38 | #define PERF_INVERSE_COUNTER 0x1000000 | 
 
 
 
 
 | 39 | #define PERF_MULTI_COUNTER 0x2000000 | 
 
 
 
 
 | 40 | #define PERF_DISPLAY_NO_SUFFIX 0 | 
 
 
 
 
 | 41 | #define PERF_DISPLAY_PER_SEC 0x10000000 | 
 
 
 
 
 | 42 | #define PERF_DISPLAY_PERCENT 0x20000000 | 
 
 
 
 
 | 43 | #define PERF_DISPLAY_SECONDS 0x30000000 | 
 
 
 
 
 | 44 | #define PERF_DISPLAY_NOSHOW 0x40000000 | 
 
 
 
 
 | 45 | #define PERF_COUNTER_HISTOGRAM_TYPE 0x80000000 | 
 
 
 
 
 | 46 | #define PERF_NO_UNIQUE_ID (-1) | 
 
 
 
 
 | 47 | #define PERF_DETAIL_NOVICE 100 | 
 
 
 
 
 | 48 | #define PERF_DETAIL_ADVANCED 200 | 
 
 
 
 
 | 49 | #define PERF_DETAIL_EXPERT 300 | 
 
 
 
 
 | 50 | #define PERF_DETAIL_WIZARD 400 | 
 
 
 
 
 | 51 | #define PERF_COUNTER_COUNTER (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_PER_SEC) | 
 
 
 
 
 | 52 | #define PERF_COUNTER_TIMER (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_PERCENT) | 
 
 
 
 
 | 53 | #define PERF_COUNTER_QUEUELEN_TYPE (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_QUEUELEN|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_NO_SUFFIX) | 
 
 
 
 
 | 54 | #define PERF_COUNTER_BULK_COUNT (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_PER_SEC) | 
 
 
 
 
 | 55 | #define PERF_COUNTER_TEXT (PERF_SIZE_VARIABLE_LEN|PERF_TYPE_TEXT|PERF_TEXT_UNICODE|PERF_DISPLAY_NO_SUFFIX) | 
 
 
 
 
 | 56 | #define PERF_COUNTER_RAWCOUNT (PERF_SIZE_DWORD|PERF_TYPE_NUMBER|PERF_NUMBER_DECIMAL|PERF_DISPLAY_NO_SUFFIX) | 
 
 
 
 
 | 57 | #define PERF_COUNTER_LARGE_RAWCOUNT (PERF_SIZE_LARGE|PERF_TYPE_NUMBER|PERF_NUMBER_DECIMAL|PERF_DISPLAY_NO_SUFFIX) | 
 
 
 
 
 | 58 | #define PERF_COUNTER_RAWCOUNT_HEX (PERF_SIZE_DWORD|PERF_TYPE_NUMBER|PERF_NUMBER_HEX|PERF_DISPLAY_NO_SUFFIX) | 
 
 
 
 
 | 59 | #define PERF_COUNTER_LARGE_RAWCOUNT_HEX (PERF_SIZE_LARGE|PERF_TYPE_NUMBER|PERF_NUMBER_HEX|PERF_DISPLAY_NO_SUFFIX) | 
 
 
 
 
 | 60 | #define PERF_SAMPLE_FRACTION (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DELTA_COUNTER|PERF_DELTA_BASE|PERF_DISPLAY_PERCENT) | 
 
 
 
 
 | 61 | #define PERF_SAMPLE_COUNTER (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_NO_SUFFIX) | 
 
 
 
 
 | 62 | #define PERF_COUNTER_NODATA (PERF_SIZE_ZERO|PERF_DISPLAY_NOSHOW) | 
 
 
 
 
 | 63 | #define PERF_COUNTER_TIMER_INV (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT) | 
 
 
 
 
 | 64 | #define PERF_SAMPLE_BASE (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_DISPLAY_NOSHOW|1) | 
 
 
 
 
 | 65 | #define PERF_AVERAGE_TIMER (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DISPLAY_SECONDS) | 
 
 
 
 
 | 66 | #define PERF_AVERAGE_BASE (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_DISPLAY_NOSHOW|2) | 
 
 
 
 
 | 67 | #define PERF_AVERAGE_BULK (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DISPLAY_NOSHOW) | 
 
 
 
 
 | 68 | #define PERF_100NSEC_TIMER (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_DELTA_COUNTER|PERF_DISPLAY_PERCENT) | 
 
 
 
 
 | 69 | #define PERF_100NSEC_TIMER_INV (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_DELTA_COUNTER|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT) | 
 
 
 
 
 | 70 | #define PERF_COUNTER_MULTI_TIMER (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_DELTA_COUNTER|PERF_TIMER_TICK|PERF_MULTI_COUNTER|PERF_DISPLAY_PERCENT) | 
 
 
 
 
 | 71 | #define PERF_COUNTER_MULTI_TIMER_INV (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_DELTA_COUNTER|PERF_MULTI_COUNTER|PERF_TIMER_TICK|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT) | 
 
 
 
 
 | 72 | #define PERF_COUNTER_MULTI_BASE (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_MULTI_COUNTER|PERF_DISPLAY_NOSHOW) | 
 
 
 
 
 | 73 | #define PERF_100NSEC_MULTI_TIMER (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_DELTA_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_MULTI_COUNTER|PERF_DISPLAY_PERCENT) | 
 
 
 
 
 | 74 | #define PERF_100NSEC_MULTI_TIMER_INV (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_DELTA_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_MULTI_COUNTER|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT) | 
 
 
 
 
 | 75 | #define PERF_RAW_FRACTION (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DISPLAY_PERCENT) | 
 
 
 
 
 | 76 | #define PERF_RAW_BASE (PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_DISPLAY_NOSHOW|3) | 
 
 
 
 
 | 77 | #define PERF_ELAPSED_TIME (PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_ELAPSED|PERF_OBJECT_TIMER|PERF_DISPLAY_SECONDS) | 
 
 
 
 
 | 78 | typedef struct _PERF_DATA_BLOCK { | 
 
 
 
 
 | 79 | WCHAR Signature[4]; | 
 
 
 
 
 | 80 | DWORD LittleEndian; | 
 
 
 
 
 | 81 | DWORD Version; | 
 
 
 
 
 | 82 | DWORD Revision; | 
 
 
 
 
 | 83 | DWORD TotalByteLength; | 
 
 
 
 
 | 84 | DWORD HeaderLength; | 
 
 
 
 
 | 85 | DWORD NumObjectTypes; | 
 
 
 
 
 | 86 | LONG DefaultObject; | 
 
 
 
 
 | 87 | SYSTEMTIME SystemTime; | 
 
 
 
 
 | 88 | LARGE_INTEGER PerfTime; | 
 
 
 
 
 | 89 | LARGE_INTEGER PerfFreq; | 
 
 
 
 
 | 90 | LARGE_INTEGER PerfTime100nSec; | 
 
 
 
 
 | 91 | DWORD SystemNameLength; | 
 
 
 
 
 | 92 | DWORD SystemNameOffset; | 
 
 
 
 
 | 93 | } PERF_DATA_BLOCK, *PPERF_DATA_BLOCK; | 
 
 
 
 
 | 94 | typedef struct _PERF_OBJECT_TYPE { | 
 
 
 
 
 | 95 | DWORD TotalByteLength; | 
 
 
 
 
 | 96 | DWORD DefinitionLength; | 
 
 
 
 
 | 97 | DWORD HeaderLength; | 
 
 
 
 
 | 98 | DWORD ObjectNameTitleIndex; | 
 
 
 
 
 | 99 | LPWSTR ObjectNameTitle; | 
 
 
 
 
 | 100 | DWORD ObjectHelpTitleIndex; | 
 
 
 
 
 | 101 | LPWSTR ObjectHelpTitle; | 
 
 
 
 
 | 102 | DWORD DetailLevel; | 
 
 
 
 
 | 103 | DWORD NumCounters; | 
 
 
 
 
 | 104 | LONG DefaultCounter; | 
 
 
 
 
 | 105 | LONG NumInstances; | 
 
 
 
 
 | 106 | DWORD CodePage; | 
 
 
 
 
 | 107 | LARGE_INTEGER PerfTime; | 
 
 
 
 
 | 108 | LARGE_INTEGER PerfFreq; | 
 
 
 
 
 | 109 | } PERF_OBJECT_TYPE, *PPERF_OBJECT_TYPE; | 
 
 
 
 
 | 110 | typedef struct _PERF_COUNTER_DEFINITION { | 
 
 
 
 
 | 111 | DWORD ByteLength; | 
 
 
 
 
 | 112 | DWORD CounterNameTitleIndex; | 
 
 
 
 
 | 113 | LPWSTR CounterNameTitle; | 
 
 
 
 
 | 114 | DWORD CounterHelpTitleIndex; | 
 
 
 
 
 | 115 | LPWSTR CounterHelpTitle; | 
 
 
 
 
 | 116 | LONG DefaultScale; | 
 
 
 
 
 | 117 | DWORD DetailLevel; | 
 
 
 
 
 | 118 | DWORD CounterType; | 
 
 
 
 
 | 119 | DWORD CounterSize; | 
 
 
 
 
 | 120 | DWORD CounterOffset; | 
 
 
 
 
 | 121 | } PERF_COUNTER_DEFINITION,*PPERF_COUNTER_DEFINITION; | 
 
 
 
 
 | 122 | typedef struct _PERF_INSTANCE_DEFINITION { | 
 
 
 
 
 | 123 | DWORD ByteLength; | 
 
 
 
 
 | 124 | DWORD ParentObjectTitleIndex; | 
 
 
 
 
 | 125 | DWORD ParentObjectInstance; | 
 
 
 
 
 | 126 | LONG UniqueID; | 
 
 
 
 
 | 127 | DWORD NameOffset; | 
 
 
 
 
 | 128 | DWORD NameLength; | 
 
 
 
 
 | 129 | } PERF_INSTANCE_DEFINITION,*PPERF_INSTANCE_DEFINITION; | 
 
 
 
 
 | 130 | typedef struct _PERF_COUNTER_BLOCK { | 
 
 
 
 
 | 131 | DWORD ByteLength; | 
 
 
 
 
 | 132 | } PERF_COUNTER_BLOCK, *PPERF_COUNTER_BLOCK; | 
 
 
 
 
 | 133 | typedef DWORD(CALLBACK PM_OPEN_PROC)(LPWSTR); | 
 
 
 
 
 | 134 | typedef DWORD(CALLBACK PM_COLLECT_PROC)(LPWSTR,PVOID*,PDWORD,PDWORD); | 
 
 
 
 
 | 135 | typedef DWORD(CALLBACK PM_CLOSE_PROC)(void); | 
 
 
 
 
 | 136 | #ifdef __cplusplus | 
 
 
 
 
 | 137 | } | 
 
 
 
 
 | 138 | #endif | 
 
 
 
 
 | 139 | #endif |