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