1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _INC_TDH
7 #define _INC_TDH
8 #include <evntprov.h>
9 #include <evntcons.h>
10 #if (_WIN32_WINNT >= 0x0600)
11 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 typedef enum _EVENT_FIELD_TYPE {
17   EventKeywordInformation   = 0,
18   EventLevelInformation     = 1,
19   EventChannelInformation   = 2,
20   EventTaskInformation      = 3,
21   EventOpcodeInformation    = 4,
22   EventInformationMax       = 5
23 } EVENT_FIELD_TYPE;
24 
25 typedef struct _EVENT_MAP_ENTRY {
26   ULONG OutputOffset;
27   __C89_NAMELESS union {
28     ULONG Value;
29     ULONG InputOffset;
30   };
31 } EVENT_MAP_ENTRY, *PEVENT_MAP_ENTRY;
32 
33 typedef enum _MAP_VALUETYPE
34 {
35   EVENTMAP_ENTRY_VALUETYPE_ULONG  = 0,
36   EVENTMAP_ENTRY_VALUETYPE_STRING = 1
37 } MAP_VALUETYPE;
38 
39 typedef enum _MAP_FLAGS {
40   EVENTMAP_INFO_FLAG_MANIFEST_VALUEMAP     = 1,
41   EVENTMAP_INFO_FLAG_MANIFEST_BITMAP       = 2,
42   EVENTMAP_INFO_FLAG_MANIFEST_PATTERNMAP   = 4,
43   EVENTMAP_INFO_FLAG_WBEM_VALUEMAP         = 8,
44   EVENTMAP_INFO_FLAG_WBEM_BITMAP           = 16,
45   EVENTMAP_INFO_FLAG_WBEM_FLAG             = 32,
46   EVENTMAP_INFO_FLAG_WBEM_NO_MAP           = 64
47 } MAP_FLAGS;
48 
49 typedef struct _EVENT_MAP_INFO {
50   ULONG NameOffset;
51   MAP_FLAGS Flag;
52   ULONG EntryCount;
53   __C89_NAMELESS union {
54     MAP_VALUETYPE MapEntryValueType;
55     ULONG FormatStringOffset;
56   };
57   EVENT_MAP_ENTRY MapEntryArray[ANYSIZE_ARRAY];
58 } EVENT_MAP_INFO, *PEVENT_MAP_INFO;
59 
60 typedef enum _PROPERTY_FLAGS {
61   PropertyStruct             = 0x1,
62   PropertyParamLength        = 0x2,
63   PropertyParamCount         = 0x4,
64   PropertyWBEMXmlFragment    = 0x8,
65   PropertyParamFixedLength   = 0x10
66 } PROPERTY_FLAGS;
67 
68 typedef struct _EVENT_PROPERTY_INFO {
69   PROPERTY_FLAGS Flags;
70   ULONG          NameOffset;
71   __C89_NAMELESS union {
72     struct {
73       USHORT InType;
74       USHORT OutType;
75       ULONG  MapNameOffset;
76     } nonStructType;
77     struct {
78       USHORT StructStartIndex;
79       USHORT NumOfStructMembers;
80       ULONG  padding;
81     } structType;
82   };
83   __C89_NAMELESS union {
84     USHORT count;
85     USHORT countPropertyIndex;
86   };
87   __C89_NAMELESS union {
88     USHORT length;
89     USHORT lengthPropertyIndex;
90   };
91   ULONG          Reserved;
92 } EVENT_PROPERTY_INFO;
93 
94 typedef enum _DECODING_SOURCE {
95   DecodingSourceXMLFile   = 0,
96   DecodingSourceWbem      = 1,
97   DecodingSourceWPP       = 2
98 } DECODING_SOURCE;
99 
100 typedef enum _TDH_CONTEXT_TYPE {
101   TDH_CONTEXT_WPP_TMFFILE         = 0,
102   TDH_CONTEXT_WPP_TMFSEARCHPATH   = 1,
103   TDH_CONTEXT_WPP_GMT             = 2,
104   TDH_CONTEXT_POINTERSIZE         = 3,
105   TDH_CONTEXT_MAXIMUM             = 4
106 } TDH_CONTEXT_TYPE;
107 
108 typedef enum _TEMPLATE_FLAGS {
109   TEMPLATE_EVENT_DATA   = 1,
110   TEMPLATE_USER_DATA    = 2
111 } TEMPLATE_FLAGS;
112 
113 typedef struct _TRACE_EVENT_INFO {
114   GUID                ProviderGuid;
115   GUID                EventGuid;
116   EVENT_DESCRIPTOR    EventDescriptor;
117   DECODING_SOURCE     DecodingSource;
118   ULONG               ProviderNameOffset;
119   ULONG               LevelNameOffset;
120   ULONG               ChannelNameOffset;
121   ULONG               KeywordsNameOffset;
122   ULONG               TaskNameOffset;
123   ULONG               OpcodeNameOffset;
124   ULONG               EventMessageOffset;
125   ULONG               ProviderMessageOffset;
126   ULONG               BinaryXMLOffset;
127   ULONG               BinaryXMLSize;
128   ULONG               ActivityIDNameOffset;
129   ULONG               RelatedActivityIDNameOffset;
130   ULONG               PropertyCount;
131   ULONG               TopLevelPropertyCount;
132   TEMPLATE_FLAGS      Flags;
133   EVENT_PROPERTY_INFO EventPropertyInfoArray[ANYSIZE_ARRAY];
134 } TRACE_EVENT_INFO, *PTRACE_EVENT_INFO;
135 
136 typedef struct _PROPERTY_DATA_DESCRIPTOR {
137   ULONGLONG PropertyName;
138   ULONG     ArrayIndex;
139   ULONG     Reserved;
140 } PROPERTY_DATA_DESCRIPTOR, *PPROPERTY_DATA_DESCRIPTOR;
141 
142 typedef struct _TRACE_PROVIDER_INFO {
143   GUID  ProviderGuid;
144   ULONG SchemaSource;
145   ULONG ProviderNameOffset;
146 } TRACE_PROVIDER_INFO;
147 
148 typedef struct _PROVIDER_ENUMERATION_INFO {
149   ULONG               NumberOfProviders;
150   ULONG               Padding;
151   TRACE_PROVIDER_INFO TraceProviderInfoArray[ANYSIZE_ARRAY];
152 } PROVIDER_ENUMERATION_INFO, *PPROVIDER_ENUMERATION_INFO;
153 
154 typedef struct _PROVIDER_FIELD_INFO {
155   ULONG     NameOffset;
156   ULONG     DescriptionOffset;
157   ULONGLONG Value;
158 } PROVIDER_FIELD_INFO;
159 
160 typedef struct _PROVIDER_FIELD_INFOARRAY {
161   ULONG               NumberOfElements;
162   EVENT_FIELD_TYPE    FieldType;
163   PROVIDER_FIELD_INFO FieldInfoArray[ANYSIZE_ARRAY];
164 } PROVIDER_FIELD_INFOARRAY, *PPROVIDER_FIELD_INFOARRAY;
165 
166 typedef struct _TDH_CONTEXT {
167   ULONGLONG        ParameterValue;
168   TDH_CONTEXT_TYPE ParameterType;
169   ULONG            ParameterSize;
170 } TDH_CONTEXT, *PTDH_CONTEXT;
171 
172 ULONG __stdcall TdhEnumerateProviderFieldInformation(
173   LPGUID pGuid,
174   EVENT_FIELD_TYPE EventFieldType,
175   PPROVIDER_FIELD_INFOARRAY pBuffer,
176   ULONG *pBufferSize
177 );
178 
179 ULONG __stdcall TdhEnumerateProviders(
180   PPROVIDER_ENUMERATION_INFO pBuffer,
181   ULONG *pBufferSize
182 );
183 
184 ULONG __stdcall TdhGetEventInformation(
185   PEVENT_RECORD pEvent,
186   ULONG TdhContextCount,
187   PTDH_CONTEXT pTdhContext,
188   PTRACE_EVENT_INFO pBuffer,
189   ULONG *pBufferSize
190 );
191 
192 ULONG __stdcall TdhGetEventMapInformation(
193   PEVENT_RECORD pEvent,
194   LPWSTR pMapName,
195   PEVENT_MAP_INFO pBuffer,
196   ULONG *pBufferSize
197 );
198 
199 ULONG __stdcall TdhGetProperty(
200   PEVENT_RECORD pEvent,
201   ULONG TdhContextCount,
202   PTDH_CONTEXT pTdhContext,
203   ULONG PropertyDataCount,
204   PPROPERTY_DATA_DESCRIPTOR pPropertyData,
205   ULONG BufferSize,
206   PBYTE pBuffer
207 );
208 
209 ULONG __stdcall TdhGetPropertySize(
210   PEVENT_RECORD pEvent,
211   ULONG TdhContextCount,
212   PTDH_CONTEXT pTdhContext,
213   ULONG PropertyDataCount,
214   PPROPERTY_DATA_DESCRIPTOR pPropertyData,
215   ULONG *pPropertySize
216 );
217 
218 ULONG __stdcall TdhQueryProviderFieldInformation(
219   LPGUID pGuid,
220   ULONGLONG EventFieldValue,
221   EVENT_FIELD_TYPE EventFieldType,
222   PPROVIDER_FIELD_INFOARRAY pBuffer,
223   ULONG *pBufferSize
224 );
225 
226 #if (_WIN32_WINNT >= 0x0601)
227 typedef struct _PROVIDER_FILTER_INFO {
228   UCHAR               Id;
229   UCHAR               Version;
230   ULONG               MessageOffset;
231   ULONG               Reserved;
232   ULONG               PropertyCount;
233   EVENT_PROPERTY_INFO EventPropertyInfoArray[ANYSIZE_ARRAY];
234 } PROVIDER_FILTER_INFO, *PPROVIDER_FILTER_INFO;
235 #endif /*(_WIN32_WINNT >= 0x0601)*/
236 
237 #ifdef __cplusplus
238 }
239 #endif
240 
241 #endif /*(_WIN32_WINNT >= 0x0600)*/
242 #endif /*_INC_TDH*/
243