Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

457 lines
8.2 KiB

/*++
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