summaryrefslogtreecommitdiff
path: root/public/windowssdk/evntprov.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/windowssdk/evntprov.h')
-rw-r--r--public/windowssdk/evntprov.h457
1 files changed, 457 insertions, 0 deletions
diff --git a/public/windowssdk/evntprov.h b/public/windowssdk/evntprov.h
new file mode 100644
index 0000000..c2283fc
--- /dev/null
+++ b/public/windowssdk/evntprov.h
@@ -0,0 +1,457 @@
+
+/*++
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Module Name:
+
+ evntprov.h
+
+Abstract:
+
+ This defines the unified provider side user mode API.
+
+Revision History:
+
+--*/
+
+#ifndef _EVNTPROV_H_
+#define _EVNTPROV_H_
+
+#pragma once
+
+#ifndef EVNTAPI
+#ifndef MIDL_PASS
+#ifdef _EVNT_SOURCE_
+#define EVNTAPI __stdcall
+#else
+#define EVNTAPI DECLSPEC_IMPORT __stdcall
+#endif // _EVNT_SOURCE_
+#endif // MIDL_PASS
+#endif // EVNTAPI
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define EVENT_MIN_LEVEL (0)
+#define EVENT_MAX_LEVEL (0xff)
+
+#define EVENT_ACTIVITY_CTRL_GET_ID (1)
+#define EVENT_ACTIVITY_CTRL_SET_ID (2)
+#define EVENT_ACTIVITY_CTRL_CREATE_ID (3)
+#define EVENT_ACTIVITY_CTRL_GET_SET_ID (4)
+#define EVENT_ACTIVITY_CTRL_CREATE_SET_ID (5)
+
+typedef ULONGLONG REGHANDLE, *PREGHANDLE;
+
+#define MAX_EVENT_DATA_DESCRIPTORS (128)
+#define MAX_EVENT_FILTER_DATA_SIZE (1024)
+
+#define EVENT_FILTER_TYPE_SCHEMATIZED (0x80000000)
+
+//
+// EVENT_DATA_DESCRIPTOR is used to pass in user data items
+// in events.
+//
+typedef struct _EVENT_DATA_DESCRIPTOR {
+
+ ULONGLONG Ptr; // Pointer to data
+ ULONG Size; // Size of data in bytes
+ ULONG Reserved;
+
+} EVENT_DATA_DESCRIPTOR, *PEVENT_DATA_DESCRIPTOR;
+
+//
+// EVENT_DESCRIPTOR describes and categorizes an event.
+//
+typedef struct _EVENT_DESCRIPTOR {
+
+ USHORT Id;
+ UCHAR Version;
+ UCHAR Channel;
+ UCHAR Level;
+ UCHAR Opcode;
+ USHORT Task;
+ ULONGLONG Keyword;
+
+} EVENT_DESCRIPTOR, *PEVENT_DESCRIPTOR;
+
+typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR;
+
+//
+// EVENT_FILTER_DESCRIPTOR is used to pass in enable filter
+// data item to a user callback function.
+//
+typedef struct _EVENT_FILTER_DESCRIPTOR {
+
+ ULONGLONG Ptr;
+ ULONG Size;
+ ULONG Type;
+
+} EVENT_FILTER_DESCRIPTOR, *PEVENT_FILTER_DESCRIPTOR;
+
+
+typedef struct _EVENT_FILTER_HEADER {
+
+ USHORT Id;
+ UCHAR Version;
+ UCHAR Reserved[5];
+ ULONGLONG InstanceId;
+ ULONG Size;
+ ULONG NextOffset;
+
+} EVENT_FILTER_HEADER, *PEVENT_FILTER_HEADER;
+
+#ifndef _ETW_KM_
+
+//
+// Optional callback function that users provide
+//
+typedef
+VOID
+(NTAPI *PENABLECALLBACK) (
+ __in LPCGUID SourceId,
+ __in ULONG IsEnabled,
+ __in UCHAR Level,
+ __in ULONGLONG MatchAnyKeyword,
+ __in ULONGLONG MatchAllKeyword,
+ __in_opt PEVENT_FILTER_DESCRIPTOR FilterData,
+ __inout_opt PVOID CallbackContext
+ );
+
+//
+// Registration APIs
+//
+
+#if (WINVER >= _WIN32_WINNT_VISTA)
+ULONG
+EVNTAPI
+EventRegister(
+ __in LPCGUID ProviderId,
+ __in_opt PENABLECALLBACK EnableCallback,
+ __in_opt PVOID CallbackContext,
+ __out PREGHANDLE RegHandle
+ );
+#endif
+
+#if (WINVER >= _WIN32_WINNT_VISTA)
+ULONG
+EVNTAPI
+EventUnregister(
+ __in REGHANDLE RegHandle
+ );
+#endif
+
+//
+// Control (Is Enabled) APIs
+//
+
+#if (WINVER >= _WIN32_WINNT_VISTA)
+BOOLEAN
+EVNTAPI
+EventEnabled(
+ __in REGHANDLE RegHandle,
+ __in PCEVENT_DESCRIPTOR EventDescriptor
+ );
+#endif
+
+#if (WINVER >= _WIN32_WINNT_VISTA)
+BOOLEAN
+EVNTAPI
+EventProviderEnabled(
+ __in REGHANDLE RegHandle,
+ __in UCHAR Level,
+ __in ULONGLONG Keyword
+ );
+#endif
+
+//
+// Writing (Publishing/Logging) APIs
+//
+
+#if (WINVER >= _WIN32_WINNT_VISTA)
+ULONG
+EVNTAPI
+EventWrite(
+ __in REGHANDLE RegHandle,
+ __in PCEVENT_DESCRIPTOR EventDescriptor,
+ __in ULONG UserDataCount,
+ __in_ecount_opt(UserDataCount) PEVENT_DATA_DESCRIPTOR UserData
+ );
+#endif
+
+#if (WINVER >= _WIN32_WINNT_VISTA)
+ULONG
+EVNTAPI
+EventWriteTransfer(
+ __in REGHANDLE RegHandle,
+ __in PCEVENT_DESCRIPTOR EventDescriptor,
+ __in_opt LPCGUID ActivityId,
+ __in_opt LPCGUID RelatedActivityId,
+ __in ULONG UserDataCount,
+ __in_ecount_opt(UserDataCount) PEVENT_DATA_DESCRIPTOR UserData
+ );
+#endif
+
+#if (WINVER >= _WIN32_WINNT_WIN7)
+ULONG
+EVNTAPI
+EventWriteEx(
+ __in REGHANDLE RegHandle,
+ __in PCEVENT_DESCRIPTOR EventDescriptor,
+ __in ULONG64 Filter,
+ __in ULONG Flags,
+ __in_opt LPCGUID ActivityId,
+ __in_opt LPCGUID RelatedActivityId,
+ __in ULONG UserDataCount,
+ __in_ecount_opt(UserDataCount) PEVENT_DATA_DESCRIPTOR UserData
+ );
+#endif
+
+#if (WINVER >= _WIN32_WINNT_VISTA)
+ULONG
+EVNTAPI
+EventWriteString(
+ __in REGHANDLE RegHandle,
+ __in UCHAR Level,
+ __in ULONGLONG Keyword,
+ __in PCWSTR String
+ );
+#endif
+
+
+//
+// ActivityId Control APIs
+//
+
+#if (WINVER >= _WIN32_WINNT_VISTA)
+ULONG
+EVNTAPI
+EventActivityIdControl(
+ __in ULONG ControlCode,
+ __inout LPGUID ActivityId
+ );
+#endif
+
+#endif // _ETW_KM_
+
+
+//
+// Macros to create Event and Event Data Descriptors
+//
+
+FORCEINLINE
+VOID
+EventDataDescCreate(
+ __out PEVENT_DATA_DESCRIPTOR EventDataDescriptor,
+ __in const VOID* DataPtr,
+ __in ULONG DataSize
+ )
+{
+ EventDataDescriptor->Ptr = (ULONGLONG)(ULONG_PTR)DataPtr;
+ EventDataDescriptor->Size = DataSize;
+ EventDataDescriptor->Reserved = 0;
+ return;
+}
+
+FORCEINLINE
+VOID
+EventDescCreate(
+ __out PEVENT_DESCRIPTOR EventDescriptor,
+ __in USHORT Id,
+ __in UCHAR Version,
+ __in UCHAR Channel,
+ __in UCHAR Level,
+ __in USHORT Task,
+ __in UCHAR Opcode,
+ __in ULONGLONG Keyword
+ )
+{
+ EventDescriptor->Id = Id;
+ EventDescriptor->Version = Version;
+ EventDescriptor->Channel = Channel;
+ EventDescriptor->Level = Level;
+ EventDescriptor->Task = Task;
+ EventDescriptor->Opcode = Opcode;
+ EventDescriptor->Keyword = Keyword;
+ return;
+}
+
+FORCEINLINE
+VOID
+EventDescZero(
+ __out PEVENT_DESCRIPTOR EventDescriptor
+ )
+{
+ memset(EventDescriptor, 0, sizeof(EVENT_DESCRIPTOR));
+ return;
+}
+
+//
+// Macros to extract info from an Event Descriptor
+//
+
+FORCEINLINE
+USHORT
+EventDescGetId(
+ __in PCEVENT_DESCRIPTOR EventDescriptor
+ )
+{
+ return (EventDescriptor->Id);
+}
+
+FORCEINLINE
+UCHAR
+EventDescGetVersion(
+ __in PCEVENT_DESCRIPTOR EventDescriptor
+ )
+{
+ return (EventDescriptor->Version);
+}
+
+FORCEINLINE
+USHORT
+EventDescGetTask(
+ __in PCEVENT_DESCRIPTOR EventDescriptor
+ )
+{
+ return (EventDescriptor->Task);
+}
+
+FORCEINLINE
+UCHAR
+EventDescGetOpcode(
+ __in PCEVENT_DESCRIPTOR EventDescriptor
+ )
+{
+ return (EventDescriptor->Opcode);
+}
+
+FORCEINLINE
+UCHAR
+EventDescGetChannel(
+ __in PCEVENT_DESCRIPTOR EventDescriptor
+ )
+{
+ return (EventDescriptor->Channel);
+}
+
+FORCEINLINE
+UCHAR
+EventDescGetLevel(
+ __in PCEVENT_DESCRIPTOR EventDescriptor
+ )
+{
+ return (EventDescriptor->Level);
+}
+
+FORCEINLINE
+ULONGLONG
+EventDescGetKeyword(
+ __in PCEVENT_DESCRIPTOR EventDescriptor
+ )
+{
+ return (EventDescriptor->Keyword);
+}
+
+//
+// Macros to set info into an Event Descriptor
+//
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetId(
+ __in PEVENT_DESCRIPTOR EventDescriptor,
+ __in USHORT Id
+ )
+{
+ EventDescriptor->Id = Id;
+ return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetVersion(
+ __in PEVENT_DESCRIPTOR EventDescriptor,
+ __in UCHAR Version
+ )
+{
+ EventDescriptor->Version = Version;
+ return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetTask(
+ __in PEVENT_DESCRIPTOR EventDescriptor,
+ __in USHORT Task
+ )
+{
+ EventDescriptor->Task = Task;
+ return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetOpcode(
+ __in PEVENT_DESCRIPTOR EventDescriptor,
+ __in UCHAR Opcode
+ )
+{
+ EventDescriptor->Opcode = Opcode;
+ return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetLevel(
+ __in PEVENT_DESCRIPTOR EventDescriptor,
+ __in UCHAR Level
+ )
+{
+ EventDescriptor->Level = Level;
+ return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetChannel(
+ __in PEVENT_DESCRIPTOR EventDescriptor,
+ __in UCHAR Channel
+ )
+{
+ EventDescriptor->Channel = Channel;
+ return (EventDescriptor);
+}
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescSetKeyword(
+ __in PEVENT_DESCRIPTOR EventDescriptor,
+ __in ULONGLONG Keyword
+ )
+{
+ EventDescriptor->Keyword = Keyword;
+ return (EventDescriptor);
+}
+
+
+FORCEINLINE
+PEVENT_DESCRIPTOR
+EventDescOrKeyword(
+ __in PEVENT_DESCRIPTOR EventDescriptor,
+ __in ULONGLONG Keyword
+ )
+{
+ EventDescriptor->Keyword |= Keyword;
+ return (EventDescriptor);
+}
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+