evntprov.h 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  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. #ifndef _EVNTPROV_H_
  26. #define _EVNTPROV_H_
  27. #include <winapifamily.h>
  28. #if !defined (EVNTAPI) && !defined (__WIDL__) && !defined (MIDL_PASS)
  29. #ifdef _EVNT_SOURCE_
  30. #ifdef _ARM_
  31. #define EVNTAPI
  32. #else
  33. #define EVNTAPI __stdcall
  34. #endif
  35. #else
  36. #ifdef _ARM_
  37. #define EVNTAPI DECLSPEC_IMPORT
  38. #else
  39. #define EVNTAPI DECLSPEC_IMPORT __stdcall
  40. #endif
  41. #endif
  42. #endif
  43. #define EVENT_MIN_LEVEL (0)
  44. #define EVENT_MAX_LEVEL (0xff)
  45. #define EVENT_ACTIVITY_CTRL_GET_ID (1)
  46. #define EVENT_ACTIVITY_CTRL_SET_ID (2)
  47. #define EVENT_ACTIVITY_CTRL_CREATE_ID (3)
  48. #define EVENT_ACTIVITY_CTRL_GET_SET_ID (4)
  49. #define EVENT_ACTIVITY_CTRL_CREATE_SET_ID (5)
  50. #define EVENT_FILTER_TYPE_SCHEMATIZED (0x80000000)
  51. #define EVENT_FILTER_TYPE_SYSTEM_FLAGS (0x80000001)
  52. #define EVENT_FILTER_TYPE_TRACEHANDLE (0x80000002)
  53. #define MAX_EVENT_DATA_DESCRIPTORS (128)
  54. #define MAX_EVENT_FILTER_DATA_SIZE (1024)
  55. #ifdef __cplusplus
  56. extern "C" {
  57. #endif
  58. #include <guiddef.h>
  59. typedef ULONGLONG REGHANDLE,*PREGHANDLE;
  60. typedef struct _EVENT_DATA_DESCRIPTOR {
  61. ULONGLONG Ptr;
  62. ULONG Size;
  63. ULONG Reserved;
  64. } EVENT_DATA_DESCRIPTOR,*PEVENT_DATA_DESCRIPTOR;
  65. #ifndef EVENT_DESCRIPTOR_DEF
  66. #define EVENT_DESCRIPTOR_DEF
  67. typedef struct _EVENT_DESCRIPTOR {
  68. USHORT Id;
  69. UCHAR Version;
  70. UCHAR Channel;
  71. UCHAR Level;
  72. UCHAR Opcode;
  73. USHORT Task;
  74. ULONGLONG Keyword;
  75. } EVENT_DESCRIPTOR,*PEVENT_DESCRIPTOR;
  76. typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR;
  77. #endif
  78. struct _EVENT_FILTER_DESCRIPTOR {
  79. ULONGLONG Ptr;
  80. ULONG Size;
  81. ULONG Type;
  82. };
  83. #ifndef DEFINED_PEVENT_FILTER_DESC
  84. #define DEFINED_PEVENT_FILTER_DESC
  85. typedef struct _EVENT_FILTER_DESCRIPTOR EVENT_FILTER_DESCRIPTOR,*PEVENT_FILTER_DESCRIPTOR;
  86. #endif /* for evntrace.h */
  87. typedef struct _EVENT_FILTER_HEADER {
  88. USHORT Id;
  89. UCHAR Version;
  90. UCHAR Reserved[5];
  91. ULONGLONG InstanceId;
  92. ULONG Size;
  93. ULONG NextOffset;
  94. } EVENT_FILTER_HEADER,*PEVENT_FILTER_HEADER;
  95. #if !defined (_ETW_KM_) && !defined (__WIDL__) /* for wdm.h & widl */
  96. typedef enum _EVENT_INFO_CLASS {
  97. EventProviderBinaryTrackInfo,
  98. MaxEventInfo
  99. } EVENT_INFO_CLASS;
  100. typedef VOID (NTAPI *PENABLECALLBACK) (LPCGUID SourceId, ULONG IsEnabled, UCHAR Level, ULONGLONG MatchAnyKeyword, ULONGLONG MatchAllKeyword, PEVENT_FILTER_DESCRIPTOR FilterData, PVOID CallbackContext);
  101. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  102. #if WINVER >= 0x0600
  103. BOOLEAN EVNTAPI EventEnabled (REGHANDLE RegHandle, PCEVENT_DESCRIPTOR EventDescriptor);
  104. BOOLEAN EVNTAPI EventProviderEnabled (REGHANDLE RegHandle, UCHAR Level, ULONGLONG Keyword);
  105. ULONG EVNTAPI EventWriteTransfer (REGHANDLE RegHandle, PCEVENT_DESCRIPTOR EventDescriptor, LPCGUID ActivityId, LPCGUID RelatedActivityId, ULONG UserDataCount, PEVENT_DATA_DESCRIPTOR UserData);
  106. ULONG EVNTAPI EventWriteString (REGHANDLE RegHandle, UCHAR Level, ULONGLONG Keyword, PCWSTR String);
  107. ULONG EVNTAPI EventActivityIdControl (ULONG ControlCode, LPGUID ActivityId);
  108. #endif
  109. #if WINVER >= 0x0601
  110. ULONG EVNTAPI EventWriteEx (REGHANDLE RegHandle, PCEVENT_DESCRIPTOR EventDescriptor, ULONG64 Filter, ULONG Flags, LPCGUID ActivityId, LPCGUID RelatedActivityId, ULONG UserDataCount, PEVENT_DATA_DESCRIPTOR UserData);
  111. #endif
  112. #endif
  113. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  114. #if WINVER >= 0x0600
  115. ULONG EVNTAPI EventRegister (LPCGUID ProviderId, PENABLECALLBACK EnableCallback, PVOID CallbackContext, PREGHANDLE RegHandle);
  116. ULONG EVNTAPI EventUnregister (REGHANDLE RegHandle);
  117. ULONG EVNTAPI EventWrite (REGHANDLE RegHandle, PCEVENT_DESCRIPTOR EventDescriptor, ULONG UserDataCount, PEVENT_DATA_DESCRIPTOR UserData);
  118. #endif
  119. #if WINVER >= 0x0602
  120. ULONG EVNTAPI EventSetInformation (REGHANDLE RegHandle, EVENT_INFO_CLASS InformationClass, PVOID EventInformation, ULONG InformationLength);
  121. #endif
  122. #endif
  123. #endif
  124. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  125. FORCEINLINE VOID EventDataDescCreate (PEVENT_DATA_DESCRIPTOR evp, const VOID *d, ULONG sz) {
  126. evp->Ptr = (ULONGLONG) (ULONG_PTR) d;
  127. evp->Size = sz;
  128. evp->Reserved = 0;
  129. }
  130. #endif
  131. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  132. FORCEINLINE VOID EventDescCreate (PEVENT_DESCRIPTOR ev, USHORT Id, UCHAR ver, UCHAR ch, UCHAR lvl, USHORT t, UCHAR opc, ULONGLONG keyw) {
  133. ev->Id = Id;
  134. ev->Version = ver;
  135. ev->Channel = ch;
  136. ev->Level = lvl;
  137. ev->Task = t;
  138. ev->Opcode = opc;
  139. ev->Keyword = keyw;
  140. }
  141. FORCEINLINE UCHAR EventDescGetChannel (PCEVENT_DESCRIPTOR ev) {
  142. return ev->Channel;
  143. }
  144. FORCEINLINE USHORT EventDescGetId (PCEVENT_DESCRIPTOR ev) {
  145. return ev->Id;
  146. }
  147. FORCEINLINE ULONGLONG EventDescGetKeyword (PCEVENT_DESCRIPTOR ev) {
  148. return ev->Keyword;
  149. }
  150. FORCEINLINE UCHAR EventDescGetLevel (PCEVENT_DESCRIPTOR ev) {
  151. return ev->Level;
  152. }
  153. FORCEINLINE UCHAR EventDescGetOpcode (PCEVENT_DESCRIPTOR ev) {
  154. return ev->Opcode;
  155. }
  156. FORCEINLINE USHORT EventDescGetTask (PCEVENT_DESCRIPTOR ev) {
  157. return ev->Task;
  158. }
  159. FORCEINLINE PEVENT_DESCRIPTOR EventDescOrKeyword (PEVENT_DESCRIPTOR ev, ULONGLONG keyw) {
  160. ev->Keyword |= keyw;
  161. return ev;
  162. }
  163. FORCEINLINE UCHAR EventDescGetVersion (PCEVENT_DESCRIPTOR ev) {
  164. return ev->Version;
  165. }
  166. FORCEINLINE PEVENT_DESCRIPTOR EventDescSetChannel (PEVENT_DESCRIPTOR ev, UCHAR ch) {
  167. ev->Channel = ch;
  168. return ev;
  169. }
  170. FORCEINLINE PEVENT_DESCRIPTOR EventDescSetId (PEVENT_DESCRIPTOR ev, USHORT Id) {
  171. ev->Id = Id;
  172. return ev;
  173. }
  174. FORCEINLINE PEVENT_DESCRIPTOR EventDescSetKeyword (PEVENT_DESCRIPTOR ev, ULONGLONG keyw) {
  175. ev->Keyword = keyw;
  176. return ev;
  177. }
  178. FORCEINLINE PEVENT_DESCRIPTOR EventDescSetLevel (PEVENT_DESCRIPTOR ev, UCHAR lvl) {
  179. ev->Level = lvl;
  180. return ev;
  181. }
  182. FORCEINLINE PEVENT_DESCRIPTOR EventDescSetOpcode (PEVENT_DESCRIPTOR ev, UCHAR opc) {
  183. ev->Opcode = opc;
  184. return ev;
  185. }
  186. FORCEINLINE PEVENT_DESCRIPTOR EventDescSetTask (PEVENT_DESCRIPTOR ev, USHORT t) {
  187. ev->Task = t;
  188. return ev;
  189. }
  190. FORCEINLINE PEVENT_DESCRIPTOR EventDescSetVersion (PEVENT_DESCRIPTOR ev, UCHAR ver) {
  191. ev->Version = ver;
  192. return ev;
  193. }
  194. FORCEINLINE VOID EventDescZero (PEVENT_DESCRIPTOR ev) {
  195. memset (ev, 0, sizeof (EVENT_DESCRIPTOR));
  196. }
  197. #endif
  198. #ifdef __cplusplus
  199. }
  200. #endif
  201. #endif