1 /* 2 * evntprov.h 3 * 4 * This file is part of the ReactOS PSDK package. 5 * 6 * Contributors: 7 * Created by Amine Khaldi. 8 * 9 * THIS SOFTWARE IS NOT COPYRIGHTED 10 * 11 * This source code is offered for use in the public domain. You may 12 * use, modify or distribute it freely. 13 * 14 * This code is distributed in the hope that it will be useful but 15 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 16 * DISCLAIMED. This includes but is not limited to warranties of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 18 * 19 */ 20 21 #ifndef _EVNTPROV_H_ 22 #define _EVNTPROV_H_ 23 24 #ifndef EVNTAPI 25 #ifndef MIDL_PASS 26 #ifdef _EVNT_SOURCE_ 27 #define EVNTAPI __stdcall 28 #else 29 #define EVNTAPI DECLSPEC_IMPORT __stdcall 30 #endif /* _EVNT_SOURCE_ */ 31 #endif /* MIDL_PASS */ 32 #endif /* EVNTAPI */ 33 34 #ifdef __cplusplus 35 extern "C" { 36 #endif 37 38 #include <guiddef.h> 39 40 #define EVENT_MIN_LEVEL 0 41 #define EVENT_MAX_LEVEL 0xff 42 43 #define EVENT_ACTIVITY_CTRL_GET_ID 1 44 #define EVENT_ACTIVITY_CTRL_SET_ID 2 45 #define EVENT_ACTIVITY_CTRL_CREATE_ID 3 46 #define EVENT_ACTIVITY_CTRL_GET_SET_ID 4 47 #define EVENT_ACTIVITY_CTRL_CREATE_SET_ID 5 48 49 typedef ULONGLONG REGHANDLE, *PREGHANDLE; 50 51 #define MAX_EVENT_DATA_DESCRIPTORS 128 52 #define MAX_EVENT_FILTER_DATA_SIZE 1024 53 54 #define EVENT_FILTER_TYPE_SCHEMATIZED 0x80000000 55 56 typedef struct _EVENT_DESCRIPTOR { 57 USHORT Id; 58 UCHAR Version; 59 UCHAR Channel; 60 UCHAR Level; 61 UCHAR Opcode; 62 USHORT Task; 63 ULONGLONG Keyword; 64 } EVENT_DESCRIPTOR, *PEVENT_DESCRIPTOR; 65 typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR; 66 67 typedef struct _EVENT_DATA_DESCRIPTOR { 68 ULONGLONG Ptr; 69 ULONG Size; 70 ULONG Reserved; 71 } EVENT_DATA_DESCRIPTOR, *PEVENT_DATA_DESCRIPTOR; 72 73 struct _EVENT_FILTER_DESCRIPTOR { 74 ULONGLONG Ptr; 75 ULONG Size; 76 ULONG Type; 77 }; 78 #ifndef DEFINED_PEVENT_FILTER_DESC 79 typedef struct _EVENT_FILTER_DESCRIPTOR EVENT_FILTER_DESCRIPTOR, *PEVENT_FILTER_DESCRIPTOR; 80 #define DEFINED_PEVENT_FILTER_DESC 1 81 #endif /* for evntrace.h */ 82 83 typedef struct _EVENT_FILTER_HEADER { 84 USHORT Id; 85 UCHAR Version; 86 UCHAR Reserved[5]; 87 ULONGLONG InstanceId; 88 ULONG Size; 89 ULONG NextOffset; 90 } EVENT_FILTER_HEADER, *PEVENT_FILTER_HEADER; 91 92 93 #ifndef _ETW_KM_ /* for wdm.h */ 94 95 typedef VOID 96 (NTAPI *PENABLECALLBACK)( 97 LPCGUID SourceId, 98 ULONG IsEnabled, 99 UCHAR Level, 100 ULONGLONG MatchAnyKeyword, 101 ULONGLONG MatchAllKeyword, 102 PEVENT_FILTER_DESCRIPTOR FilterData, 103 PVOID CallbackContext); 104 105 #if (_WIN32_WINNT >= 0x0600) 106 ULONG EVNTAPI EventRegister( 107 LPCGUID ProviderId, 108 PENABLECALLBACK EnableCallback, 109 PVOID CallbackContext, 110 PREGHANDLE RegHandle 111 ); 112 113 ULONG EVNTAPI EventUnregister( 114 REGHANDLE RegHandle 115 ); 116 117 BOOLEAN EVNTAPI EventEnabled( 118 REGHANDLE RegHandle, 119 PCEVENT_DESCRIPTOR EventDescriptor 120 ); 121 122 BOOLEAN EVNTAPI EventProviderEnabled( 123 REGHANDLE RegHandle, 124 UCHAR Level, 125 ULONGLONG Keyword 126 ); 127 128 ULONG EVNTAPI EventWrite( 129 REGHANDLE RegHandle, 130 PCEVENT_DESCRIPTOR EventDescriptor, 131 ULONG UserDataCount, 132 PEVENT_DATA_DESCRIPTOR UserData 133 ); 134 135 ULONG EVNTAPI EventWriteTransfer( 136 REGHANDLE RegHandle, 137 PCEVENT_DESCRIPTOR EventDescriptor, 138 LPCGUID ActivityId, 139 LPCGUID RelatedActivityId, 140 ULONG UserDataCount, 141 PEVENT_DATA_DESCRIPTOR UserData 142 ); 143 144 ULONG EVNTAPI EventWriteString( 145 REGHANDLE RegHandle, 146 UCHAR Level, 147 ULONGLONG Keyword, 148 PCWSTR String 149 ); 150 151 ULONG EVNTAPI EventActivityIdControl( 152 ULONG ControlCode, 153 LPGUID ActivityId 154 ); 155 156 #endif /*(_WIN32_WINNT >= 0x0600)*/ 157 158 #if (_WIN32_WINNT >= 0x0601) 159 ULONG EVNTAPI EventWriteEx( 160 REGHANDLE RegHandle, 161 PCEVENT_DESCRIPTOR EventDescriptor, 162 ULONG64 Filter, 163 ULONG Flags, 164 LPCGUID ActivityId, 165 LPCGUID RelatedActivityId, 166 ULONG UserDataCount, 167 PEVENT_DATA_DESCRIPTOR UserData 168 ); 169 #endif /*(_WIN32_WINNT >= 0x0601)*/ 170 171 #endif /* _ETW_KM_ */ 172 173 FORCEINLINE 174 VOID 175 EventDataDescCreate( 176 PEVENT_DATA_DESCRIPTOR EventDataDescriptor, 177 const VOID* DataPtr, 178 ULONG DataSize) 179 { 180 EventDataDescriptor->Ptr = (ULONGLONG)(ULONG_PTR)DataPtr; 181 EventDataDescriptor->Size = DataSize; 182 EventDataDescriptor->Reserved = 0; 183 } 184 185 FORCEINLINE 186 VOID 187 EventDescCreate( 188 PEVENT_DESCRIPTOR EventDescriptor, 189 USHORT Id, 190 UCHAR Version, 191 UCHAR Channel, 192 UCHAR Level, 193 USHORT Task, 194 UCHAR Opcode, 195 ULONGLONG Keyword) 196 { 197 EventDescriptor->Id = Id; 198 EventDescriptor->Version = Version; 199 EventDescriptor->Channel = Channel; 200 EventDescriptor->Level = Level; 201 EventDescriptor->Task = Task; 202 EventDescriptor->Opcode = Opcode; 203 EventDescriptor->Keyword = Keyword; 204 } 205 206 FORCEINLINE 207 VOID 208 EventDescZero( 209 PEVENT_DESCRIPTOR EventDescriptor) 210 { 211 memset(EventDescriptor, 0, sizeof(EVENT_DESCRIPTOR)); 212 } 213 214 FORCEINLINE 215 USHORT 216 EventDescGetId( 217 PCEVENT_DESCRIPTOR EventDescriptor) 218 { 219 return (EventDescriptor->Id); 220 } 221 222 FORCEINLINE 223 UCHAR 224 EventDescGetVersion( 225 PCEVENT_DESCRIPTOR EventDescriptor) 226 { 227 return (EventDescriptor->Version); 228 } 229 230 FORCEINLINE 231 USHORT 232 EventDescGetTask( 233 PCEVENT_DESCRIPTOR EventDescriptor) 234 { 235 return (EventDescriptor->Task); 236 } 237 238 FORCEINLINE 239 UCHAR 240 EventDescGetOpcode( 241 PCEVENT_DESCRIPTOR EventDescriptor) 242 { 243 return (EventDescriptor->Opcode); 244 } 245 246 FORCEINLINE 247 UCHAR 248 EventDescGetChannel( 249 PCEVENT_DESCRIPTOR EventDescriptor) 250 { 251 return (EventDescriptor->Channel); 252 } 253 254 FORCEINLINE 255 UCHAR 256 EventDescGetLevel( 257 PCEVENT_DESCRIPTOR EventDescriptor) 258 { 259 return (EventDescriptor->Level); 260 } 261 262 FORCEINLINE 263 ULONGLONG 264 EventDescGetKeyword( 265 PCEVENT_DESCRIPTOR EventDescriptor) 266 { 267 return (EventDescriptor->Keyword); 268 } 269 270 FORCEINLINE 271 PEVENT_DESCRIPTOR 272 EventDescSetId( 273 PEVENT_DESCRIPTOR EventDescriptor, 274 USHORT Id) 275 { 276 EventDescriptor->Id = Id; 277 return (EventDescriptor); 278 } 279 280 FORCEINLINE 281 PEVENT_DESCRIPTOR 282 EventDescSetVersion( 283 PEVENT_DESCRIPTOR EventDescriptor, 284 UCHAR Version) 285 { 286 EventDescriptor->Version = Version; 287 return (EventDescriptor); 288 } 289 290 FORCEINLINE 291 PEVENT_DESCRIPTOR 292 EventDescSetTask( 293 PEVENT_DESCRIPTOR EventDescriptor, 294 USHORT Task) 295 { 296 EventDescriptor->Task = Task; 297 return (EventDescriptor); 298 } 299 300 FORCEINLINE 301 PEVENT_DESCRIPTOR 302 EventDescSetOpcode( 303 PEVENT_DESCRIPTOR EventDescriptor, 304 UCHAR Opcode) 305 { 306 EventDescriptor->Opcode = Opcode; 307 return (EventDescriptor); 308 } 309 310 FORCEINLINE 311 PEVENT_DESCRIPTOR 312 EventDescSetLevel( 313 PEVENT_DESCRIPTOR EventDescriptor, 314 UCHAR Level) 315 { 316 EventDescriptor->Level = Level; 317 return (EventDescriptor); 318 } 319 320 FORCEINLINE 321 PEVENT_DESCRIPTOR 322 EventDescSetChannel( 323 PEVENT_DESCRIPTOR EventDescriptor, 324 UCHAR Channel) 325 { 326 EventDescriptor->Channel = Channel; 327 return (EventDescriptor); 328 } 329 330 FORCEINLINE 331 PEVENT_DESCRIPTOR 332 EventDescSetKeyword( 333 PEVENT_DESCRIPTOR EventDescriptor, 334 ULONGLONG Keyword) 335 { 336 EventDescriptor->Keyword = Keyword; 337 return (EventDescriptor); 338 } 339 340 341 FORCEINLINE 342 PEVENT_DESCRIPTOR 343 EventDescOrKeyword( 344 PEVENT_DESCRIPTOR EventDescriptor, 345 ULONGLONG Keyword) 346 { 347 EventDescriptor->Keyword |= Keyword; 348 return (EventDescriptor); 349 } 350 351 #ifdef __cplusplus 352 } 353 #endif 354 355 #endif /* _EVNTPROV_H_ */ 356 357