2 * Copyright (C) 2005 Mike McCormack
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
32 #define WMIAPI DECLSPEC_IMPORT WINAPI
36 #define EVENT_TRACE_CONTROL_QUERY 0
37 #define EVENT_TRACE_CONTROL_STOP 1
38 #define EVENT_TRACE_CONTROL_UPDATE 2
39 #define EVENT_TRACE_CONTROL_FLUSH 3
41 #define TRACE_LEVEL_NONE 0
42 #define TRACE_LEVEL_CRITICAL 1
43 #define TRACE_LEVEL_FATAL 1
44 #define TRACE_LEVEL_ERROR 2
45 #define TRACE_LEVEL_WARNING 3
46 #define TRACE_LEVEL_INFORMATION 4
47 #define TRACE_LEVEL_VERBOSE 5
49 #define EVENT_TRACE_FILE_MODE_NONE 0x00000000
50 #define EVENT_TRACE_FILE_MODE_SEQUENTIAL 0x00000001
51 #define EVENT_TRACE_FILE_MODE_CIRCULAR 0x00000002
52 #define EVENT_TRACE_FILE_MODE_APPEND 0x00000004
53 #define EVENT_TRACE_FILE_MODE_NEWFILE 0x00000008
54 #define EVENT_TRACE_FILE_MODE_PREALLOCATE 0x00000020
55 #define EVENT_TRACE_NONSTOPPABLE_MODE 0x00000040
56 #define EVENT_TRACE_SECURE_MODE 0x00000080
57 #define EVENT_TRACE_REAL_TIME_MODE 0x00000100
58 #define EVENT_TRACE_DELAY_OPEN_FILE_MODE 0x00000200
59 #define EVENT_TRACE_BUFFERING_MODE 0x00000400
60 #define EVENT_TRACE_PRIVATE_LOGGER_MODE 0x00000800
61 #define EVENT_TRACE_ADD_HEADER_MODE 0x00001000
62 #define EVENT_TRACE_USE_KBYTES_FOR_SIZE 0x00002000
63 #define EVENT_TRACE_USE_GLOBAL_SEQUENCE 0x00004000
64 #define EVENT_TRACE_USE_LOCAL_SEQUENCE 0x00008000
65 #define EVENT_TRACE_RELOG_MODE 0x00010000
66 #define EVENT_TRACE_PRIVATE_IN_PROC 0x00020000
67 #define EVENT_TRACE_MODE_RESERVED 0x00100000
68 #define EVENT_TRACE_STOP_ON_HYBRID_SHUTDOWN 0x00400000
69 #define EVENT_TRACE_PERSIST_ON_HYBRID_SHUTDOWN 0x00800000
70 #define EVENT_TRACE_USE_PAGED_MEMORY 0x01000000
71 #define EVENT_TRACE_SYSTEM_LOGGER_MODE 0x02000000
72 #define EVENT_TRACE_INDEPENDENT_SESSION_MODE 0x08000000
73 #define EVENT_TRACE_NO_PER_PROCESSOR_BUFFERING 0x10000000
74 #define EVENT_TRACE_ADDTO_TRIAGE_DUMP 0x80000000
76 DEFINE_GUID (SystemTraceControlGuid
, 0x9e814aad, 0x3204, 0x11d2, 0x9a, 0x82, 0x00, 0x60, 0x08, 0xa8, 0x69, 0x39);
78 typedef ULONG64 TRACEHANDLE
, *PTRACEHANDLE
;
80 struct _EVENT_TRACE_LOGFILEA
;
81 struct _EVENT_TRACE_LOGFILEW
;
83 typedef struct _EVENT_TRACE_LOGFILEA EVENT_TRACE_LOGFILEA
, *PEVENT_TRACE_LOGFILEA
;
84 typedef struct _EVENT_TRACE_LOGFILEW EVENT_TRACE_LOGFILEW
, *PEVENT_TRACE_LOGFILEW
;
86 typedef ULONG (WINAPI
* PEVENT_TRACE_BUFFER_CALLBACKA
)( PEVENT_TRACE_LOGFILEA
);
87 typedef ULONG (WINAPI
* PEVENT_TRACE_BUFFER_CALLBACKW
)( PEVENT_TRACE_LOGFILEW
);
89 typedef ULONG (WINAPI
* WMIDPREQUEST
)( WMIDPREQUESTCODE
, PVOID
, ULONG
*, PVOID
);
91 typedef struct _TRACE_GUID_REGISTRATION
95 } TRACE_GUID_REGISTRATION
, *PTRACE_GUID_REGISTRATION
;
97 typedef struct _TRACE_GUID_PROPERTIES
{
104 } TRACE_GUID_PROPERTIES
, *PTRACE_GUID_PROPERTIES
;
106 typedef struct _EVENT_TRACE_HEADER
111 USHORT FieldTypeFlags
;
130 LARGE_INTEGER TimeStamp
;
149 } EVENT_TRACE_HEADER
, *PEVENT_TRACE_HEADER
;
151 typedef struct _EVENT_TRACE
153 EVENT_TRACE_HEADER Header
;
155 ULONG ParentInstanceId
;
160 } EVENT_TRACE
, *PEVENT_TRACE
;
162 typedef VOID (WINAPI
* PEVENT_CALLBACK
)( PEVENT_TRACE
);
164 typedef struct _TRACE_LOGFILE_HEADER
175 UCHAR SubMinorVersion
;
178 ULONG ProviderVersion
;
179 ULONG NumberOfProcessors
;
180 LARGE_INTEGER EndTime
;
181 ULONG TimerResolution
;
182 ULONG MaximumFileSize
;
184 ULONG BuffersWritten
;
187 GUID LogInstanceGuid
;
198 TIME_ZONE_INFORMATION TimeZone
;
199 LARGE_INTEGER BootTime
;
200 LARGE_INTEGER PerfFreq
;
201 LARGE_INTEGER StartTime
;
204 } TRACE_LOGFILE_HEADER
, *PTRACE_LOGFILE_HEADER
;
206 struct _EVENT_TRACE_LOGFILEW
210 LONGLONG CurrentTime
;
212 EVENT_TRACE CurrentEvent
;
213 TRACE_LOGFILE_HEADER LogfileHeader
;
214 PEVENT_TRACE_BUFFER_CALLBACKW BufferCallback
;
218 PEVENT_CALLBACK EventCallback
;
222 struct _EVENT_TRACE_LOGFILEA
226 LONGLONG CurrentTime
;
228 EVENT_TRACE CurrentEvent
;
229 TRACE_LOGFILE_HEADER LogfileHeader
;
230 PEVENT_TRACE_BUFFER_CALLBACKA BufferCallback
;
234 PEVENT_CALLBACK EventCallback
;
238 typedef struct _EVENT_TRACE_PROPERTIES
242 ULONG MinimumBuffers
;
243 ULONG MaximumBuffers
;
244 ULONG MaximumFileSize
;
249 ULONG NumberOfBuffers
;
252 ULONG BuffersWritten
;
253 ULONG LogBuffersLost
;
254 ULONG RealTimeBuffersLost
;
255 HANDLE LoggerThreadId
;
256 ULONG LogFileNameOffset
;
257 ULONG LoggerNameOffset
;
258 } EVENT_TRACE_PROPERTIES
, *PEVENT_TRACE_PROPERTIES
;
260 typedef struct _ENABLE_TRACE_PARAMETERS
263 ULONG EnableProperty
;
266 struct _EVENT_FILTER_DESCRIPTOR
*EnableFilterDesc
;
267 ULONG FilterDescCount
;
268 } ENABLE_TRACE_PARAMETERS
, *PENABLE_TRACE_PARAMETERS
;
270 typedef enum _TRACE_QUERY_INFO_CLASS
274 TraceGuidQueryProcess
,
275 TraceStackTracingInfo
,
276 TraceSystemTraceEnableFlagsInfo
,
277 TraceSampledProfileIntervalInfo
,
278 TraceProfileSourceConfigInfo
,
279 TraceProfileSourceListInfo
,
280 TracePmcEventListInfo
,
281 TracePmcCounterListInfo
,
282 TraceSetDisallowList
,
286 TraceDisallowListQuery
,
287 TraceCompressionInfo
,
288 TracePeriodicCaptureStateListInfo
,
289 TracePeriodicCaptureStateInfo
,
290 TraceProviderBinaryTracking
,
291 TraceMaxLoggersQuery
,
293 } TRACE_QUERY_INFO_CLASS
, TRACE_INFO_CLASS
;
295 #define INVALID_PROCESSTRACE_HANDLE ((TRACEHANDLE)~(ULONG_PTR)0)
297 ULONG WMIAPI
CloseTrace(TRACEHANDLE
);
298 ULONG WMIAPI
ControlTraceA(TRACEHANDLE
,LPCSTR
,PEVENT_TRACE_PROPERTIES
,ULONG
);
299 ULONG WMIAPI
ControlTraceW(TRACEHANDLE
,LPCWSTR
,PEVENT_TRACE_PROPERTIES
,ULONG
);
300 #define ControlTrace WINELIB_NAME_AW(ControlTrace)
301 ULONG WMIAPI
EnableTrace(ULONG
,ULONG
,ULONG
,LPCGUID
,TRACEHANDLE
);
302 ULONG WMIAPI
EnableTraceEx2(TRACEHANDLE
,LPCGUID
,ULONG
,UCHAR
,ULONGLONG
,ULONGLONG
,ULONG
,PENABLE_TRACE_PARAMETERS
);
303 ULONG WMIAPI
FlushTraceA(TRACEHANDLE
,LPCSTR
,PEVENT_TRACE_PROPERTIES
);
304 ULONG WMIAPI
FlushTraceW(TRACEHANDLE
,LPCWSTR
,PEVENT_TRACE_PROPERTIES
);
305 #define FlushTrace WINELIB_NAME_AW(FlushTrace)
306 ULONG WMIAPI
GetTraceEnableFlags(TRACEHANDLE
);
307 UCHAR WMIAPI
GetTraceEnableLevel(TRACEHANDLE
);
308 TRACEHANDLE WMIAPI
GetTraceLoggerHandle(PVOID
);
309 ULONG WMIAPI
QueryAllTracesA(PEVENT_TRACE_PROPERTIES
*,ULONG
,PULONG
);
310 ULONG WMIAPI
QueryAllTracesW(PEVENT_TRACE_PROPERTIES
*,ULONG
,PULONG
);
311 #define QueryAllTraces WINELIB_NAME_AW(QueryAllTraces)
312 ULONG WMIAPI
RegisterTraceGuidsA(WMIDPREQUEST
,PVOID
,LPCGUID
,ULONG
,PTRACE_GUID_REGISTRATION
,LPCSTR
,LPCSTR
,PTRACEHANDLE
);
313 ULONG WMIAPI
RegisterTraceGuidsW(WMIDPREQUEST
,PVOID
,LPCGUID
,ULONG
,PTRACE_GUID_REGISTRATION
,LPCWSTR
,LPCWSTR
,PTRACEHANDLE
);
314 #define RegisterTraceGuids WINELIB_NAME_AW(RegisterTraceGuids)
315 ULONG WMIAPI
StartTraceA(PTRACEHANDLE
,LPCSTR
,PEVENT_TRACE_PROPERTIES
);
316 ULONG WMIAPI
StartTraceW(PTRACEHANDLE
,LPCWSTR
,PEVENT_TRACE_PROPERTIES
);
317 #define StartTrace WINELIB_NAME_AW(StartTrace)
318 ULONG WMIAPI
TraceEvent(TRACEHANDLE
,PEVENT_TRACE_HEADER
);
319 ULONG WINAPIV
TraceMessage(TRACEHANDLE
,ULONG
,LPGUID
,USHORT
,...);
321 ULONG WMIAPI
TraceMessageVa(TRACEHANDLE
,ULONG
,LPGUID
,USHORT
,__ms_va_list
);
323 ULONG WMIAPI
UnregisterTraceGuids(TRACEHANDLE
);
329 #endif /* _EVNTRACE_ */