1 /** 2 * This file is part of the mingw-w64 runtime package. 3 * No warranty is given; refer to the file DISCLAIMER within this package. 4 */ 5 /* 6 * evntprov.h 7 * 8 * This file is part of the ReactOS PSDK package. 9 * 10 * Contributors: 11 * Created by Amine Khaldi. 12 * Extended by Kai Tietz for mingw-w64 13 * 14 * THIS SOFTWARE IS NOT COPYRIGHTED 15 * 16 * This source code is offered for use in the public domain. You may 17 * use, modify or distribute it freely. 18 * 19 * This code is distributed in the hope that it will be useful but 20 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 21 * DISCLAIMED. This includes but is not limited to warranties of 22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 23 * 24 */ 25 26 #ifndef _EVNTPROV_H_ 27 #define _EVNTPROV_H_ 28 29 #include <winapifamily.h> 30 31 #if !defined (EVNTAPI) && !defined (__WIDL__) && !defined (MIDL_PASS) 32 #ifdef _EVNT_SOURCE_ 33 #ifdef _ARM_ 34 #define EVNTAPI 35 #else 36 #define EVNTAPI __stdcall 37 #endif 38 #else 39 #ifdef _ARM_ 40 #define EVNTAPI DECLSPEC_IMPORT 41 #else 42 #define EVNTAPI DECLSPEC_IMPORT __stdcall 43 #endif 44 #endif 45 #endif 46 47 #define EVENT_MIN_LEVEL (0) 48 #define EVENT_MAX_LEVEL (0xff) 49 50 #define EVENT_ACTIVITY_CTRL_GET_ID (1) 51 #define EVENT_ACTIVITY_CTRL_SET_ID (2) 52 #define EVENT_ACTIVITY_CTRL_CREATE_ID (3) 53 #define EVENT_ACTIVITY_CTRL_GET_SET_ID (4) 54 #define EVENT_ACTIVITY_CTRL_CREATE_SET_ID (5) 55 56 #define EVENT_FILTER_TYPE_SCHEMATIZED (0x80000000) 57 #define EVENT_FILTER_TYPE_SYSTEM_FLAGS (0x80000001) 58 #define EVENT_FILTER_TYPE_TRACEHANDLE (0x80000002) 59 60 #define MAX_EVENT_DATA_DESCRIPTORS (128) 61 #define MAX_EVENT_FILTER_DATA_SIZE (1024) 62 63 #ifdef __cplusplus 64 extern "C" { 65 #endif 66 67 #include <guiddef.h> 68 69 typedef ULONGLONG REGHANDLE,*PREGHANDLE; 70 71 typedef struct _EVENT_DATA_DESCRIPTOR { 72 ULONGLONG Ptr; 73 ULONG Size; 74 ULONG Reserved; 75 } EVENT_DATA_DESCRIPTOR,*PEVENT_DATA_DESCRIPTOR; 76 77 #ifndef EVENT_DESCRIPTOR_DEF 78 #define EVENT_DESCRIPTOR_DEF 79 typedef struct _EVENT_DESCRIPTOR { 80 USHORT Id; 81 UCHAR Version; 82 UCHAR Channel; 83 UCHAR Level; 84 UCHAR Opcode; 85 USHORT Task; 86 ULONGLONG Keyword; 87 } EVENT_DESCRIPTOR,*PEVENT_DESCRIPTOR; 88 typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR; 89 #endif 90 91 struct _EVENT_FILTER_DESCRIPTOR { 92 ULONGLONG Ptr; 93 ULONG Size; 94 ULONG Type; 95 }; 96 97 #ifndef DEFINED_PEVENT_FILTER_DESC 98 #define DEFINED_PEVENT_FILTER_DESC 99 typedef struct _EVENT_FILTER_DESCRIPTOR EVENT_FILTER_DESCRIPTOR,*PEVENT_FILTER_DESCRIPTOR; 100 #endif /* for evntrace.h */ 101 102 typedef struct _EVENT_FILTER_HEADER { 103 USHORT Id; 104 UCHAR Version; 105 UCHAR Reserved[5]; 106 ULONGLONG InstanceId; 107 ULONG Size; 108 ULONG NextOffset; 109 } EVENT_FILTER_HEADER,*PEVENT_FILTER_HEADER; 110 111 #if !defined (_ETW_KM_) && !defined (__WIDL__) /* for wdm.h & widl */ 112 typedef enum _EVENT_INFO_CLASS { 113 EventProviderBinaryTrackInfo, 114 MaxEventInfo 115 } EVENT_INFO_CLASS; 116 117 typedef VOID (NTAPI *PENABLECALLBACK) (LPCGUID SourceId, ULONG IsEnabled, UCHAR Level, ULONGLONG MatchAnyKeyword, ULONGLONG MatchAllKeyword, PEVENT_FILTER_DESCRIPTOR FilterData, PVOID CallbackContext); 118 119 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) 120 #if WINVER >= 0x0600 121 BOOLEAN EVNTAPI EventEnabled (REGHANDLE RegHandle, PCEVENT_DESCRIPTOR EventDescriptor); 122 BOOLEAN EVNTAPI EventProviderEnabled (REGHANDLE RegHandle, UCHAR Level, ULONGLONG Keyword); 123 ULONG EVNTAPI EventWriteTransfer (REGHANDLE RegHandle, PCEVENT_DESCRIPTOR EventDescriptor, LPCGUID ActivityId, LPCGUID RelatedActivityId, ULONG UserDataCount, PEVENT_DATA_DESCRIPTOR UserData); 124 ULONG EVNTAPI EventWriteString (REGHANDLE RegHandle, UCHAR Level, ULONGLONG Keyword, PCWSTR String); 125 ULONG EVNTAPI EventActivityIdControl (ULONG ControlCode, LPGUID ActivityId); 126 #endif 127 #if WINVER >= 0x0601 128 ULONG EVNTAPI EventWriteEx (REGHANDLE RegHandle, PCEVENT_DESCRIPTOR EventDescriptor, ULONG64 Filter, ULONG Flags, LPCGUID ActivityId, LPCGUID RelatedActivityId, ULONG UserDataCount, PEVENT_DATA_DESCRIPTOR UserData); 129 #endif 130 #endif 131 132 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP) 133 #if WINVER >= 0x0600 134 ULONG EVNTAPI EventRegister (LPCGUID ProviderId, PENABLECALLBACK EnableCallback, PVOID CallbackContext, PREGHANDLE RegHandle); 135 ULONG EVNTAPI EventUnregister (REGHANDLE RegHandle); 136 ULONG EVNTAPI EventWrite (REGHANDLE RegHandle, PCEVENT_DESCRIPTOR EventDescriptor, ULONG UserDataCount, PEVENT_DATA_DESCRIPTOR UserData); 137 #endif 138 #if WINVER >= 0x0602 139 ULONG EVNTAPI EventSetInformation (REGHANDLE RegHandle, EVENT_INFO_CLASS InformationClass, PVOID EventInformation, ULONG InformationLength); 140 #endif 141 #endif 142 143 #endif 144 145 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP) EventDataDescCreate(PEVENT_DATA_DESCRIPTOR evp,const VOID * d,ULONG sz)146 FORCEINLINE VOID EventDataDescCreate (PEVENT_DATA_DESCRIPTOR evp, const VOID *d, ULONG sz) { 147 evp->Ptr = (ULONGLONG) (ULONG_PTR) d; 148 evp->Size = sz; 149 evp->Reserved = 0; 150 } 151 #endif 152 153 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) EventDescCreate(PEVENT_DESCRIPTOR ev,USHORT Id,UCHAR ver,UCHAR ch,UCHAR lvl,USHORT t,UCHAR opc,ULONGLONG keyw)154 FORCEINLINE VOID EventDescCreate (PEVENT_DESCRIPTOR ev, USHORT Id, UCHAR ver, UCHAR ch, UCHAR lvl, USHORT t, UCHAR opc, ULONGLONG keyw) { 155 ev->Id = Id; 156 ev->Version = ver; 157 ev->Channel = ch; 158 ev->Level = lvl; 159 ev->Task = t; 160 ev->Opcode = opc; 161 ev->Keyword = keyw; 162 } 163 EventDescGetChannel(PCEVENT_DESCRIPTOR ev)164 FORCEINLINE UCHAR EventDescGetChannel (PCEVENT_DESCRIPTOR ev) { 165 return ev->Channel; 166 } 167 EventDescGetId(PCEVENT_DESCRIPTOR ev)168 FORCEINLINE USHORT EventDescGetId (PCEVENT_DESCRIPTOR ev) { 169 return ev->Id; 170 } 171 EventDescGetKeyword(PCEVENT_DESCRIPTOR ev)172 FORCEINLINE ULONGLONG EventDescGetKeyword (PCEVENT_DESCRIPTOR ev) { 173 return ev->Keyword; 174 } 175 EventDescGetLevel(PCEVENT_DESCRIPTOR ev)176 FORCEINLINE UCHAR EventDescGetLevel (PCEVENT_DESCRIPTOR ev) { 177 return ev->Level; 178 } 179 EventDescGetOpcode(PCEVENT_DESCRIPTOR ev)180 FORCEINLINE UCHAR EventDescGetOpcode (PCEVENT_DESCRIPTOR ev) { 181 return ev->Opcode; 182 } 183 EventDescGetTask(PCEVENT_DESCRIPTOR ev)184 FORCEINLINE USHORT EventDescGetTask (PCEVENT_DESCRIPTOR ev) { 185 return ev->Task; 186 } 187 EventDescOrKeyword(PEVENT_DESCRIPTOR ev,ULONGLONG keyw)188 FORCEINLINE PEVENT_DESCRIPTOR EventDescOrKeyword (PEVENT_DESCRIPTOR ev, ULONGLONG keyw) { 189 ev->Keyword |= keyw; 190 return ev; 191 } 192 EventDescGetVersion(PCEVENT_DESCRIPTOR ev)193 FORCEINLINE UCHAR EventDescGetVersion (PCEVENT_DESCRIPTOR ev) { 194 return ev->Version; 195 } 196 EventDescSetChannel(PEVENT_DESCRIPTOR ev,UCHAR ch)197 FORCEINLINE PEVENT_DESCRIPTOR EventDescSetChannel (PEVENT_DESCRIPTOR ev, UCHAR ch) { 198 ev->Channel = ch; 199 return ev; 200 } 201 EventDescSetId(PEVENT_DESCRIPTOR ev,USHORT Id)202 FORCEINLINE PEVENT_DESCRIPTOR EventDescSetId (PEVENT_DESCRIPTOR ev, USHORT Id) { 203 ev->Id = Id; 204 return ev; 205 } 206 EventDescSetKeyword(PEVENT_DESCRIPTOR ev,ULONGLONG keyw)207 FORCEINLINE PEVENT_DESCRIPTOR EventDescSetKeyword (PEVENT_DESCRIPTOR ev, ULONGLONG keyw) { 208 ev->Keyword = keyw; 209 return ev; 210 } 211 EventDescSetLevel(PEVENT_DESCRIPTOR ev,UCHAR lvl)212 FORCEINLINE PEVENT_DESCRIPTOR EventDescSetLevel (PEVENT_DESCRIPTOR ev, UCHAR lvl) { 213 ev->Level = lvl; 214 return ev; 215 } 216 EventDescSetOpcode(PEVENT_DESCRIPTOR ev,UCHAR opc)217 FORCEINLINE PEVENT_DESCRIPTOR EventDescSetOpcode (PEVENT_DESCRIPTOR ev, UCHAR opc) { 218 ev->Opcode = opc; 219 return ev; 220 } 221 EventDescSetTask(PEVENT_DESCRIPTOR ev,USHORT t)222 FORCEINLINE PEVENT_DESCRIPTOR EventDescSetTask (PEVENT_DESCRIPTOR ev, USHORT t) { 223 ev->Task = t; 224 return ev; 225 } 226 EventDescSetVersion(PEVENT_DESCRIPTOR ev,UCHAR ver)227 FORCEINLINE PEVENT_DESCRIPTOR EventDescSetVersion (PEVENT_DESCRIPTOR ev, UCHAR ver) { 228 ev->Version = ver; 229 return ev; 230 } 231 EventDescZero(PEVENT_DESCRIPTOR ev)232 FORCEINLINE VOID EventDescZero (PEVENT_DESCRIPTOR ev) { 233 memset (ev, 0, sizeof (EVENT_DESCRIPTOR)); 234 } 235 #endif 236 237 #ifdef __cplusplus 238 } 239 #endif 240 241 #endif 242