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