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
11extern "C" {
12#endif
13
14#include <apisetcconv.h>
15
16typedef LPVOID (CALLBACK *PERF_MEM_ALLOC)(SIZE_T AllocSize,LPVOID pContext);
17typedef ULONG (WINAPI *PERFLIBREQUEST)(ULONG RequestCode,PVOID Buffer,ULONG BufferSize);
18typedef void (CALLBACK *PERF_MEM_FREE)(LPVOID pBuffer,LPVOID pContext);
19
20typedef 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
29typedef 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
39typedef 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
49typedef struct _PERF_COUNTERSET_INFO {
50  GUID  CounterSetGuid;
51  GUID  ProviderGuid;
52  ULONG NumCounters;
53  ULONG InstanceType;
54} PERF_COUNTERSET_INFO, *PPERF_COUNTERSET_INFO;
55
56typedef 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
64WINADVAPI PPERF_COUNTERSET_INSTANCE WINAPI PerfCreateInstance(
65  HANDLE hProvider,
66  LPCGUID CounterSetGuid,
67  LPCWSTR szInstanceName,
68  ULONG dwInstance
69);
70
71WINADVAPI ULONG WINAPI PerfDecrementULongCounterValue(
72  HANDLE hProvider,
73  PPERF_COUNTERSET_INSTANCE pInstance,
74  ULONG CounterId,
75  ULONG lValue
76);
77
78WINADVAPI ULONG WINAPI PerfDecrementULongLongCounterValue(
79  HANDLE hProvider,
80  PPERF_COUNTERSET_INSTANCE pInstance,
81  ULONG CounterId,
82  ULONGLONG llValue
83);
84
85WINADVAPI ULONG WINAPI PerfDeleteInstance(
86  HANDLE hProvider,
87  PPERF_COUNTERSET_INSTANCE InstanceBlock
88);
89
90WINADVAPI ULONG WINAPI PerfIncrementULongCounterValue(
91  HANDLE hProvider,
92  PPERF_COUNTERSET_INSTANCE pInstance,
93  ULONG CounterId,
94  ULONG lValue
95);
96
97WINADVAPI ULONG WINAPI PerfIncrementULongLongCounterValue(
98  HANDLE hProvider,
99  PPERF_COUNTERSET_INSTANCE pInstance,
100  ULONG CounterId,
101  ULONGLONG llValue
102);
103
104WINADVAPI PPERF_COUNTERSET_INSTANCE WINAPI PerfQueryInstance(
105  HANDLE hProvider,
106  LPCGUID CounterSetGuid,
107  LPCWSTR szInstance,
108  ULONG dwInstance
109);
110
111WINADVAPI ULONG WINAPI PerfSetCounterRefValue(
112  HANDLE hProvider,
113  PPERF_COUNTERSET_INSTANCE pInstance,
114  ULONG CounterId,
115  PVOID lpAddr
116);
117
118WINADVAPI ULONG WINAPI PerfSetCounterSetInfo(
119  HANDLE hProvider,
120  PPERF_COUNTERSET_INFO pTemplate,
121  ULONG dwTemplateSize
122);
123
124WINADVAPI ULONG WINAPI PerfSetULongCounterValue(
125  HANDLE hProvider,
126  PPERF_COUNTERSET_INSTANCE pInstance,
127  ULONG CounterId,
128  ULONG lValue
129);
130
131WINADVAPI ULONG WINAPI PerfSetULongLongCounterValue(
132  HANDLE hProvider,
133  PPERF_COUNTERSET_INSTANCE pInstance,
134  ULONG CounterId,
135  ULONGLONG llValue
136);
137
138WINADVAPI ULONG WINAPI PerfStartProvider(
139  LPGUID ProviderGuid,
140  PERFLIBREQUEST ControlCallback,
141  HANDLE *phProvider
142);
143
144WINADVAPI ULONG WINAPI PerfStartProviderEx(
145  LPGUID ProviderGuid,
146  PPERF_PROVIDER_CONTEXT ProviderContext,
147  HANDLE *phProvider
148);
149
150WINADVAPI 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