mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-11 03:09:36 +00:00
1
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user