/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _INC_PERFLIB
#define _INC_PERFLIB
#if (_WIN32_WINNT >= 0x0600)

#ifdef __cplusplus
extern "C" {
#endif

#ifndef WINADVAPI
#define WINADVAPI DECLSPEC_IMPORT
#endif

typedef LPVOID (CALLBACK *PERF_MEM_ALLOC)(SIZE_T AllocSize,LPVOID pContext);
typedef ULONG (WINAPI *PERFLIBREQUEST)(ULONG RequestCode,PVOID Buffer,ULONG BufferSize);
typedef void (CALLBACK *PERF_MEM_FREE)(LPVOID pBuffer,LPVOID pContext);

typedef struct _PERF_PROVIDER_CONTEXT {
  DWORD          ContextSize;
  DWORD          Reserved;
  PERFLIBREQUEST ControlCallback;
  PERF_MEM_ALLOC MemAllocRoutine;
  PERF_MEM_FREE  MemFreeRoutine;
  LPVOID         pMemContext;
} PERF_PROVIDER_CONTEXT, *PPERF_PROVIDER_CONTEXT;

typedef struct _PERF_COUNTER_IDENTITY {
  GUID  CounterSetGuid;
  ULONG BufferSize;
  ULONG CounterId;
  ULONG InstanceId;
  ULONG MachineOffset;
  ULONG NameOffset;
  ULONG Reserved;
} PERF_COUNTER_IDENTITY, *PPERF_COUNTER_IDENTITY;

typedef struct _PERF_COUNTER_INFO {
  ULONG     CounterId;
  ULONG     Type;
  ULONGLONG Attrib;
  ULONG     Size;
  ULONG     DetailLevel;
  LONG      Scale;
  ULONG     Offset;
} PERF_COUNTER_INFO, *PPERF_COUNTER_INFO;

typedef struct _PERF_COUNTERSET_INFO {
  GUID  CounterSetGuid;
  GUID  ProviderGuid;
  ULONG NumCounters;
  ULONG InstanceType;
} PERF_COUNTERSET_INFO, *PPERF_COUNTERSET_INFO;

typedef struct _PERF_COUNTERSET_INSTANCE {
  GUID  CounterSetGuid;
  ULONG dwSize;
  ULONG InstanceId;
  ULONG InstanceNameOffset;
  ULONG InstanceNameSize;
} PERF_COUNTERSET_INSTANCE, *PPERF_COUNTERSET_INSTANCE;

WINADVAPI PPERF_COUNTERSET_INSTANCE WINAPI PerfCreateInstance(
  HANDLE hProvider,
  LPCGUID CounterSetGuid,
  LPCWSTR szInstanceName,
  ULONG dwInstance
);

WINADVAPI ULONG WINAPI PerfDecrementULongCounterValue(
  HANDLE hProvider,
  PPERF_COUNTERSET_INSTANCE pInstance,
  ULONG CounterId,
  ULONG lValue
);

WINADVAPI ULONG WINAPI PerfDecrementULongLongCounterValue(
  HANDLE hProvider,
  PPERF_COUNTERSET_INSTANCE pInstance,
  ULONG CounterId,
  ULONGLONG llValue
);

WINADVAPI ULONG WINAPI PerfDeleteInstance(
  HANDLE hProvider,
  PPERF_COUNTERSET_INSTANCE InstanceBlock
);

WINADVAPI ULONG WINAPI PerfIncrementULongCounterValue(
  HANDLE hProvider,
  PPERF_COUNTERSET_INSTANCE pInstance,
  ULONG CounterId,
  ULONG lValue
);

WINADVAPI ULONG WINAPI PerfIncrementULongLongCounterValue(
  HANDLE hProvider,
  PPERF_COUNTERSET_INSTANCE pInstance,
  ULONG CounterId,
  ULONGLONG llValue
);

WINADVAPI PPERF_COUNTERSET_INSTANCE WINAPI PerfQueryInstance(
  HANDLE hProvider,
  LPCGUID CounterSetGuid,
  LPCWSTR szInstance,
  ULONG dwInstance
);

WINADVAPI ULONG WINAPI PerfSetCounterRefValue(
  HANDLE hProvider,
  PPERF_COUNTERSET_INSTANCE pInstance,
  ULONG CounterId,
  PVOID lpAddr
);

WINADVAPI ULONG WINAPI PerfSetCounterSetInfo(
  HANDLE hProvider,
  PPERF_COUNTERSET_INFO pTemplate,
  ULONG dwTemplateSize
);

WINADVAPI ULONG WINAPI PerfSetULongCounterValue(
  HANDLE hProvider,
  PPERF_COUNTERSET_INSTANCE pInstance,
  ULONG CounterId,
  ULONG lValue
);

WINADVAPI ULONG WINAPI PerfSetULongLongCounterValue(
  HANDLE hProvider,
  PPERF_COUNTERSET_INSTANCE pInstance,
  ULONG CounterId,
  ULONGLONG llValue
);

WINADVAPI ULONG WINAPI PerfStartProvider(
  LPGUID ProviderGuid,
  PERFLIBREQUEST ControlCallback,
  HANDLE *phProvider
);

WINADVAPI ULONG WINAPI PerfStartProviderEx(
  LPGUID ProviderGuid,
  PPERF_PROVIDER_CONTEXT ProviderContext,
  HANDLE *phProvider
);

WINADVAPI ULONG WINAPI PerfStopProvider(
  HANDLE hProvider
);

#ifdef __cplusplus
}
#endif

#endif /*(_WIN32_WINNT >= 0x0600)*/
#endif /*_INC_PERFLIB*/
