/* * evntprov.h * * This file is part of the ReactOS PSDK package. * * Contributors: * Created by Amine Khaldi. * * THIS SOFTWARE IS NOT COPYRIGHTED * * This source code is offered for use in the public domain. You may * use, modify or distribute it freely. * * This code is distributed in the hope that it will be useful but * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY * DISCLAIMED. This includes but is not limited to warranties of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * */ #ifndef _EVNTPROV_H_ #define _EVNTPROV_H_ #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 #include <guiddef.h> #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 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; typedef struct _EVENT_DATA_DESCRIPTOR { ULONGLONG Ptr; ULONG Size; ULONG Reserved; } EVENT_DATA_DESCRIPTOR, *PEVENT_DATA_DESCRIPTOR; struct _EVENT_FILTER_DESCRIPTOR { ULONGLONG Ptr; ULONG Size; ULONG Type; }; #ifndef DEFINED_PEVENT_FILTER_DESC typedef struct _EVENT_FILTER_DESCRIPTOR EVENT_FILTER_DESCRIPTOR, *PEVENT_FILTER_DESCRIPTOR; #define DEFINED_PEVENT_FILTER_DESC 1 #endif /* for evntrace.h */ 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_ /* for wdm.h */ typedef VOID (NTAPI *PENABLECALLBACK)( LPCGUID SourceId, ULONG IsEnabled, UCHAR Level, ULONGLONG MatchAnyKeyword, ULONGLONG MatchAllKeyword, PEVENT_FILTER_DESCRIPTOR FilterData, PVOID CallbackContext); #if (_WIN32_WINNT >= 0x0600) ULONG EVNTAPI EventRegister( LPCGUID ProviderId, PENABLECALLBACK EnableCallback, PVOID CallbackContext, PREGHANDLE RegHandle ); ULONG EVNTAPI EventUnregister( REGHANDLE RegHandle ); BOOLEAN EVNTAPI EventEnabled( REGHANDLE RegHandle, PCEVENT_DESCRIPTOR EventDescriptor ); BOOLEAN EVNTAPI EventProviderEnabled( REGHANDLE RegHandle, UCHAR Level, ULONGLONG Keyword ); ULONG EVNTAPI EventWrite( REGHANDLE RegHandle, PCEVENT_DESCRIPTOR EventDescriptor, ULONG UserDataCount, PEVENT_DATA_DESCRIPTOR UserData ); ULONG EVNTAPI EventWriteTransfer( REGHANDLE RegHandle, PCEVENT_DESCRIPTOR EventDescriptor, LPCGUID ActivityId, LPCGUID RelatedActivityId, ULONG UserDataCount, PEVENT_DATA_DESCRIPTOR UserData ); ULONG EVNTAPI EventWriteString( REGHANDLE RegHandle, UCHAR Level, ULONGLONG Keyword, PCWSTR String ); ULONG EVNTAPI EventActivityIdControl( ULONG ControlCode, LPGUID ActivityId ); #endif /*(_WIN32_WINNT >= 0x0600)*/ #if (_WIN32_WINNT >= 0x0601) ULONG EVNTAPI EventWriteEx( REGHANDLE RegHandle, PCEVENT_DESCRIPTOR EventDescriptor, ULONG64 Filter, ULONG Flags, LPCGUID ActivityId, LPCGUID RelatedActivityId, ULONG UserDataCount, PEVENT_DATA_DESCRIPTOR UserData ); #endif /*(_WIN32_WINNT >= 0x0601)*/ #endif /* _ETW_KM_ */ FORCEINLINE VOID EventDataDescCreate( PEVENT_DATA_DESCRIPTOR EventDataDescriptor, const VOID* DataPtr, ULONG DataSize) { EventDataDescriptor->Ptr = (ULONGLONG)(ULONG_PTR)DataPtr; EventDataDescriptor->Size = DataSize; EventDataDescriptor->Reserved = 0; } FORCEINLINE VOID EventDescCreate( PEVENT_DESCRIPTOR EventDescriptor, USHORT Id, UCHAR Version, UCHAR Channel, UCHAR Level, USHORT Task, UCHAR Opcode, ULONGLONG Keyword) { EventDescriptor->Id = Id; EventDescriptor->Version = Version; EventDescriptor->Channel = Channel; EventDescriptor->Level = Level; EventDescriptor->Task = Task; EventDescriptor->Opcode = Opcode; EventDescriptor->Keyword = Keyword; } FORCEINLINE VOID EventDescZero( PEVENT_DESCRIPTOR EventDescriptor) { memset(EventDescriptor, 0, sizeof(EVENT_DESCRIPTOR)); } FORCEINLINE USHORT EventDescGetId( PCEVENT_DESCRIPTOR EventDescriptor) { return (EventDescriptor->Id); } FORCEINLINE UCHAR EventDescGetVersion( PCEVENT_DESCRIPTOR EventDescriptor) { return (EventDescriptor->Version); } FORCEINLINE USHORT EventDescGetTask( PCEVENT_DESCRIPTOR EventDescriptor) { return (EventDescriptor->Task); } FORCEINLINE UCHAR EventDescGetOpcode( PCEVENT_DESCRIPTOR EventDescriptor) { return (EventDescriptor->Opcode); } FORCEINLINE UCHAR EventDescGetChannel( PCEVENT_DESCRIPTOR EventDescriptor) { return (EventDescriptor->Channel); } FORCEINLINE UCHAR EventDescGetLevel( PCEVENT_DESCRIPTOR EventDescriptor) { return (EventDescriptor->Level); } FORCEINLINE ULONGLONG EventDescGetKeyword( PCEVENT_DESCRIPTOR EventDescriptor) { return (EventDescriptor->Keyword); } FORCEINLINE PEVENT_DESCRIPTOR EventDescSetId( PEVENT_DESCRIPTOR EventDescriptor, USHORT Id) { EventDescriptor->Id = Id; return (EventDescriptor); } FORCEINLINE PEVENT_DESCRIPTOR EventDescSetVersion( PEVENT_DESCRIPTOR EventDescriptor, UCHAR Version) { EventDescriptor->Version = Version; return (EventDescriptor); } FORCEINLINE PEVENT_DESCRIPTOR EventDescSetTask( PEVENT_DESCRIPTOR EventDescriptor, USHORT Task) { EventDescriptor->Task = Task; return (EventDescriptor); } FORCEINLINE PEVENT_DESCRIPTOR EventDescSetOpcode( PEVENT_DESCRIPTOR EventDescriptor, UCHAR Opcode) { EventDescriptor->Opcode = Opcode; return (EventDescriptor); } FORCEINLINE PEVENT_DESCRIPTOR EventDescSetLevel( PEVENT_DESCRIPTOR EventDescriptor, UCHAR Level) { EventDescriptor->Level = Level; return (EventDescriptor); } FORCEINLINE PEVENT_DESCRIPTOR EventDescSetChannel( PEVENT_DESCRIPTOR EventDescriptor, UCHAR Channel) { EventDescriptor->Channel = Channel; return (EventDescriptor); } FORCEINLINE PEVENT_DESCRIPTOR EventDescSetKeyword( PEVENT_DESCRIPTOR EventDescriptor, ULONGLONG Keyword) { EventDescriptor->Keyword = Keyword; return (EventDescriptor); } FORCEINLINE PEVENT_DESCRIPTOR EventDescOrKeyword( PEVENT_DESCRIPTOR EventDescriptor, ULONGLONG Keyword) { EventDescriptor->Keyword |= Keyword; return (EventDescriptor); } #ifdef __cplusplus } #endif #endif /* _EVNTPROV_H_ */