1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _INC_PERFLIB
7 #define _INC_PERFLIB
8 #if (_WIN32_WINNT >= 0x0600)
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 #include <apisetcconv.h>
15 
16 typedef LPVOID (CALLBACK *PERF_MEM_ALLOC)(SIZE_T AllocSize,LPVOID pContext);
17 typedef ULONG (WINAPI *PERFLIBREQUEST)(ULONG RequestCode,PVOID Buffer,ULONG BufferSize);
18 typedef void (CALLBACK *PERF_MEM_FREE)(LPVOID pBuffer,LPVOID pContext);
19 
20 typedef struct _PERF_PROVIDER_CONTEXT {
21   DWORD          ContextSize;
22   DWORD          Reserved;
23   PERFLIBREQUEST ControlCallback;
24   PERF_MEM_ALLOC MemAllocRoutine;
25   PERF_MEM_FREE  MemFreeRoutine;
26   LPVOID         pMemContext;
27 } PERF_PROVIDER_CONTEXT, *PPERF_PROVIDER_CONTEXT;
28 
29 typedef struct _PERF_COUNTER_IDENTITY {
30   GUID  CounterSetGuid;
31   ULONG BufferSize;
32   ULONG CounterId;
33   ULONG InstanceId;
34   ULONG MachineOffset;
35   ULONG NameOffset;
36   ULONG Reserved;
37 } PERF_COUNTER_IDENTITY, *PPERF_COUNTER_IDENTITY;
38 
39 typedef struct _PERF_COUNTER_INFO {
40   ULONG     CounterId;
41   ULONG     Type;
42   ULONGLONG Attrib;
43   ULONG     Size;
44   ULONG     DetailLevel;
45   LONG      Scale;
46   ULONG     Offset;
47 } PERF_COUNTER_INFO, *PPERF_COUNTER_INFO;
48 
49 typedef struct _PERF_COUNTERSET_INFO {
50   GUID  CounterSetGuid;
51   GUID  ProviderGuid;
52   ULONG NumCounters;
53   ULONG InstanceType;
54 } PERF_COUNTERSET_INFO, *PPERF_COUNTERSET_INFO;
55 
56 typedef struct _PERF_COUNTERSET_INSTANCE {
57   GUID  CounterSetGuid;
58   ULONG dwSize;
59   ULONG InstanceId;
60   ULONG InstanceNameOffset;
61   ULONG InstanceNameSize;
62 } PERF_COUNTERSET_INSTANCE, *PPERF_COUNTERSET_INSTANCE;
63 
64 WINADVAPI PPERF_COUNTERSET_INSTANCE WINAPI PerfCreateInstance(
65   HANDLE hProvider,
66   LPCGUID CounterSetGuid,
67   LPCWSTR szInstanceName,
68   ULONG dwInstance
69 );
70 
71 WINADVAPI ULONG WINAPI PerfDecrementULongCounterValue(
72   HANDLE hProvider,
73   PPERF_COUNTERSET_INSTANCE pInstance,
74   ULONG CounterId,
75   ULONG lValue
76 );
77 
78 WINADVAPI ULONG WINAPI PerfDecrementULongLongCounterValue(
79   HANDLE hProvider,
80   PPERF_COUNTERSET_INSTANCE pInstance,
81   ULONG CounterId,
82   ULONGLONG llValue
83 );
84 
85 WINADVAPI ULONG WINAPI PerfDeleteInstance(
86   HANDLE hProvider,
87   PPERF_COUNTERSET_INSTANCE InstanceBlock
88 );
89 
90 WINADVAPI ULONG WINAPI PerfIncrementULongCounterValue(
91   HANDLE hProvider,
92   PPERF_COUNTERSET_INSTANCE pInstance,
93   ULONG CounterId,
94   ULONG lValue
95 );
96 
97 WINADVAPI ULONG WINAPI PerfIncrementULongLongCounterValue(
98   HANDLE hProvider,
99   PPERF_COUNTERSET_INSTANCE pInstance,
100   ULONG CounterId,
101   ULONGLONG llValue
102 );
103 
104 WINADVAPI PPERF_COUNTERSET_INSTANCE WINAPI PerfQueryInstance(
105   HANDLE hProvider,
106   LPCGUID CounterSetGuid,
107   LPCWSTR szInstance,
108   ULONG dwInstance
109 );
110 
111 WINADVAPI ULONG WINAPI PerfSetCounterRefValue(
112   HANDLE hProvider,
113   PPERF_COUNTERSET_INSTANCE pInstance,
114   ULONG CounterId,
115   PVOID lpAddr
116 );
117 
118 WINADVAPI ULONG WINAPI PerfSetCounterSetInfo(
119   HANDLE hProvider,
120   PPERF_COUNTERSET_INFO pTemplate,
121   ULONG dwTemplateSize
122 );
123 
124 WINADVAPI ULONG WINAPI PerfSetULongCounterValue(
125   HANDLE hProvider,
126   PPERF_COUNTERSET_INSTANCE pInstance,
127   ULONG CounterId,
128   ULONG lValue
129 );
130 
131 WINADVAPI ULONG WINAPI PerfSetULongLongCounterValue(
132   HANDLE hProvider,
133   PPERF_COUNTERSET_INSTANCE pInstance,
134   ULONG CounterId,
135   ULONGLONG llValue
136 );
137 
138 WINADVAPI ULONG WINAPI PerfStartProvider(
139   LPGUID ProviderGuid,
140   PERFLIBREQUEST ControlCallback,
141   HANDLE *phProvider
142 );
143 
144 WINADVAPI ULONG WINAPI PerfStartProviderEx(
145   LPGUID ProviderGuid,
146   PPERF_PROVIDER_CONTEXT ProviderContext,
147   HANDLE *phProvider
148 );
149 
150 WINADVAPI ULONG WINAPI PerfStopProvider(
151   HANDLE hProvider
152 );
153 
154 #ifdef __cplusplus
155 }
156 #endif
157 
158 #endif /*(_WIN32_WINNT >= 0x0600)*/
159 #endif /*_INC_PERFLIB*/
160