evntrace.h 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975
  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. #include <winapifamily.h>
  6. #ifndef _EVNTRACE_
  7. #define _EVNTRACE_
  8. #if defined (_WINNT_) || defined (WINNT)
  9. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  10. #if !defined (WMIAPI) && !defined (__WIDL__) && !defined (MIDL_PASS)
  11. #ifdef _WMI_SOURCE_
  12. #ifdef _ARM_
  13. #define WMIAPI
  14. #else
  15. #define WMIAPI __stdcall
  16. #endif
  17. #else
  18. #ifdef _ARM_
  19. #define WMIAPI DECLSPEC_IMPORT
  20. #else
  21. #define WMIAPI DECLSPEC_IMPORT __stdcall
  22. #endif
  23. #endif
  24. #endif
  25. #include <guiddef.h>
  26. #if defined (_NTDDK_) || defined (_NTIFS_) || defined (_WMIKM_)
  27. #define _EVNTRACE_KERNEL_MODE
  28. #endif
  29. #ifndef _EVNTRACE_KERNEL_MODE
  30. #include <wmistr.h>
  31. #endif
  32. DEFINE_GUID (EventTraceGuid, 0x68fdd900, 0x4a3e, 0x11d1, 0x84, 0xf4, 0x00, 0x00, 0xf8, 0x04, 0x64, 0xe3);
  33. DEFINE_GUID (SystemTraceControlGuid, 0x9e814aad, 0x3204, 0x11d2, 0x9a, 0x82, 0x00, 0x60, 0x08, 0xa8, 0x69, 0x39);
  34. DEFINE_GUID (EventTraceConfigGuid, 0x01853a65, 0x418f, 0x4f36, 0xae, 0xfc, 0xdc, 0x0f, 0x1d, 0x2f, 0xd2, 0x35);
  35. DEFINE_GUID (DefaultTraceSecurityGuid, 0x0811c1af, 0x7a07, 0x4a06, 0x82, 0xed, 0x86, 0x94, 0x55, 0xcd, 0xf7, 0x13);
  36. #define KERNEL_LOGGER_NAMEW L"NT Kernel Logger"
  37. #define GLOBAL_LOGGER_NAMEW L"GlobalLogger"
  38. #define EVENT_LOGGER_NAMEW L"EventLog"
  39. #define DIAG_LOGGER_NAMEW L"DiagLog"
  40. #define KERNEL_LOGGER_NAMEA "NT Kernel Logger"
  41. #define GLOBAL_LOGGER_NAMEA "GlobalLogger"
  42. #define EVENT_LOGGER_NAMEA "EventLog"
  43. #define DIAG_LOGGER_NAMEA "DiagLog"
  44. #define MAX_MOF_FIELDS 16
  45. #ifndef _TRACEHANDLE_DEFINED
  46. #define _TRACEHANDLE_DEFINED
  47. typedef ULONG64 TRACEHANDLE,*PTRACEHANDLE;
  48. #endif
  49. #define SYSTEM_EVENT_TYPE 1
  50. #define EVENT_TRACE_TYPE_INFO 0x00
  51. #define EVENT_TRACE_TYPE_START 0x01
  52. #define EVENT_TRACE_TYPE_END 0x02
  53. #define EVENT_TRACE_TYPE_STOP 0x02
  54. #define EVENT_TRACE_TYPE_DC_START 0x03
  55. #define EVENT_TRACE_TYPE_DC_END 0x04
  56. #define EVENT_TRACE_TYPE_EXTENSION 0x05
  57. #define EVENT_TRACE_TYPE_REPLY 0x06
  58. #define EVENT_TRACE_TYPE_DEQUEUE 0x07
  59. #define EVENT_TRACE_TYPE_RESUME 0x07
  60. #define EVENT_TRACE_TYPE_CHECKPOINT 0x08
  61. #define EVENT_TRACE_TYPE_SUSPEND 0x08
  62. #define EVENT_TRACE_TYPE_WINEVT_SEND 0x09
  63. #define EVENT_TRACE_TYPE_WINEVT_RECEIVE 0xf0
  64. #define TRACE_LEVEL_NONE 0
  65. #define TRACE_LEVEL_CRITICAL 1
  66. #define TRACE_LEVEL_FATAL 1
  67. #define TRACE_LEVEL_ERROR 2
  68. #define TRACE_LEVEL_WARNING 3
  69. #define TRACE_LEVEL_INFORMATION 4
  70. #define TRACE_LEVEL_VERBOSE 5
  71. #define TRACE_LEVEL_RESERVED6 6
  72. #define TRACE_LEVEL_RESERVED7 7
  73. #define TRACE_LEVEL_RESERVED8 8
  74. #define TRACE_LEVEL_RESERVED9 9
  75. #define EVENT_TRACE_TYPE_LOAD 0x0a
  76. #define EVENT_TRACE_TYPE_TERMINATE 0x0b
  77. #define EVENT_TRACE_TYPE_IO_READ 0x0a
  78. #define EVENT_TRACE_TYPE_IO_WRITE 0x0b
  79. #define EVENT_TRACE_TYPE_IO_READ_INIT 0x0c
  80. #define EVENT_TRACE_TYPE_IO_WRITE_INIT 0x0d
  81. #define EVENT_TRACE_TYPE_IO_FLUSH 0x0e
  82. #define EVENT_TRACE_TYPE_IO_FLUSH_INIT 0x0f
  83. #define EVENT_TRACE_TYPE_MM_TF 0x0a
  84. #define EVENT_TRACE_TYPE_MM_DZF 0x0b
  85. #define EVENT_TRACE_TYPE_MM_COW 0x0c
  86. #define EVENT_TRACE_TYPE_MM_GPF 0x0d
  87. #define EVENT_TRACE_TYPE_MM_HPF 0x0e
  88. #define EVENT_TRACE_TYPE_MM_AV 0x0f
  89. #define EVENT_TRACE_TYPE_SEND 0x0a
  90. #define EVENT_TRACE_TYPE_RECEIVE 0x0b
  91. #define EVENT_TRACE_TYPE_CONNECT 0x0c
  92. #define EVENT_TRACE_TYPE_DISCONNECT 0x0d
  93. #define EVENT_TRACE_TYPE_RETRANSMIT 0x0e
  94. #define EVENT_TRACE_TYPE_ACCEPT 0x0f
  95. #define EVENT_TRACE_TYPE_RECONNECT 0x10
  96. #define EVENT_TRACE_TYPE_CONNFAIL 0x11
  97. #define EVENT_TRACE_TYPE_COPY_TCP 0x12
  98. #define EVENT_TRACE_TYPE_COPY_ARP 0x13
  99. #define EVENT_TRACE_TYPE_ACKFULL 0x14
  100. #define EVENT_TRACE_TYPE_ACKPART 0x15
  101. #define EVENT_TRACE_TYPE_ACKDUP 0x16
  102. #define EVENT_TRACE_TYPE_GUIDMAP 0x0a
  103. #define EVENT_TRACE_TYPE_CONFIG 0x0b
  104. #define EVENT_TRACE_TYPE_SIDINFO 0x0c
  105. #define EVENT_TRACE_TYPE_SECURITY 0x0d
  106. #define EVENT_TRACE_TYPE_DBGID_RSDS 0x40
  107. #define EVENT_TRACE_TYPE_REGCREATE 0x0a
  108. #define EVENT_TRACE_TYPE_REGOPEN 0x0b
  109. #define EVENT_TRACE_TYPE_REGDELETE 0x0c
  110. #define EVENT_TRACE_TYPE_REGQUERY 0x0d
  111. #define EVENT_TRACE_TYPE_REGSETVALUE 0x0e
  112. #define EVENT_TRACE_TYPE_REGDELETEVALUE 0x0f
  113. #define EVENT_TRACE_TYPE_REGQUERYVALUE 0x10
  114. #define EVENT_TRACE_TYPE_REGENUMERATEKEY 0x11
  115. #define EVENT_TRACE_TYPE_REGENUMERATEVALUEKEY 0x12
  116. #define EVENT_TRACE_TYPE_REGQUERYMULTIPLEVALUE 0x13
  117. #define EVENT_TRACE_TYPE_REGSETINFORMATION 0x14
  118. #define EVENT_TRACE_TYPE_REGFLUSH 0x15
  119. #define EVENT_TRACE_TYPE_REGKCBCREATE 0x16
  120. #define EVENT_TRACE_TYPE_REGKCBDELETE 0x17
  121. #define EVENT_TRACE_TYPE_REGKCBRUNDOWNBEGIN 0x18
  122. #define EVENT_TRACE_TYPE_REGKCBRUNDOWNEND 0x19
  123. #define EVENT_TRACE_TYPE_REGVIRTUALIZE 0x1a
  124. #define EVENT_TRACE_TYPE_REGCLOSE 0x1b
  125. #define EVENT_TRACE_TYPE_REGSETSECURITY 0x1c
  126. #define EVENT_TRACE_TYPE_REGQUERYSECURITY 0x1d
  127. #define EVENT_TRACE_TYPE_REGCOMMIT 0x1e
  128. #define EVENT_TRACE_TYPE_REGPREPARE 0x1f
  129. #define EVENT_TRACE_TYPE_REGROLLBACK 0x20
  130. #define EVENT_TRACE_TYPE_REGMOUNTHIVE 0x21
  131. #define EVENT_TRACE_TYPE_CONFIG_CPU 0x0a
  132. #define EVENT_TRACE_TYPE_CONFIG_PHYSICALDISK 0x0b
  133. #define EVENT_TRACE_TYPE_CONFIG_LOGICALDISK 0x0c
  134. #define EVENT_TRACE_TYPE_CONFIG_NIC 0x0d
  135. #define EVENT_TRACE_TYPE_CONFIG_VIDEO 0x0e
  136. #define EVENT_TRACE_TYPE_CONFIG_SERVICES 0x0f
  137. #define EVENT_TRACE_TYPE_CONFIG_POWER 0x10
  138. #define EVENT_TRACE_TYPE_CONFIG_NETINFO 0x11
  139. #define EVENT_TRACE_TYPE_CONFIG_OPTICALMEDIA 0x12
  140. #define EVENT_TRACE_TYPE_CONFIG_IRQ 0x15
  141. #define EVENT_TRACE_TYPE_CONFIG_PNP 0x16
  142. #define EVENT_TRACE_TYPE_CONFIG_IDECHANNEL 0x17
  143. #define EVENT_TRACE_TYPE_CONFIG_NUMANODE 0x18
  144. #define EVENT_TRACE_TYPE_CONFIG_PLATFORM 0x19
  145. #define EVENT_TRACE_TYPE_CONFIG_PROCESSORGROUP 0x1a
  146. #define EVENT_TRACE_TYPE_CONFIG_PROCESSORNUMBER 0x1b
  147. #define EVENT_TRACE_TYPE_CONFIG_DPI 0x1c
  148. #define EVENT_TRACE_TYPE_CONFIG_CI_INFO 0x1d
  149. #define EVENT_TRACE_TYPE_CONFIG_MACHINEID 0x1e
  150. #define EVENT_TRACE_TYPE_CONFIG_DEFRAG 0x1f
  151. #define EVENT_TRACE_TYPE_CONFIG_MOBILEPLATFORM 0x20
  152. #define EVENT_TRACE_TYPE_CONFIG_DEVICEFAMILY 0x21
  153. #define EVENT_TRACE_TYPE_CONFIG_FLIGHTID 0x22
  154. #define EVENT_TRACE_TYPE_CONFIG_PROCESSOR 0x23
  155. #define EVENT_TRACE_TYPE_OPTICAL_IO_READ 0x37
  156. #define EVENT_TRACE_TYPE_OPTICAL_IO_WRITE 0x38
  157. #define EVENT_TRACE_TYPE_OPTICAL_IO_FLUSH 0x39
  158. #define EVENT_TRACE_TYPE_OPTICAL_IO_READ_INIT 0x3a
  159. #define EVENT_TRACE_TYPE_OPTICAL_IO_WRITE_INIT 0x3b
  160. #define EVENT_TRACE_TYPE_OPTICAL_IO_FLUSH_INIT 0x3c
  161. #define EVENT_TRACE_TYPE_FLT_PREOP_INIT 0x60
  162. #define EVENT_TRACE_TYPE_FLT_POSTOP_INIT 0x61
  163. #define EVENT_TRACE_TYPE_FLT_PREOP_COMPLETION 0x62
  164. #define EVENT_TRACE_TYPE_FLT_POSTOP_COMPLETION 0x63
  165. #define EVENT_TRACE_TYPE_FLT_PREOP_FAILURE 0x64
  166. #define EVENT_TRACE_TYPE_FLT_POSTOP_FAILURE 0x65
  167. #define EVENT_TRACE_FLAG_PROCESS 0x00000001
  168. #define EVENT_TRACE_FLAG_THREAD 0x00000002
  169. #define EVENT_TRACE_FLAG_IMAGE_LOAD 0x00000004
  170. #define EVENT_TRACE_FLAG_DISK_IO 0x00000100
  171. #define EVENT_TRACE_FLAG_DISK_FILE_IO 0x00000200
  172. #define EVENT_TRACE_FLAG_MEMORY_PAGE_FAULTS 0x00001000
  173. #define EVENT_TRACE_FLAG_MEMORY_HARD_FAULTS 0x00002000
  174. #define EVENT_TRACE_FLAG_NETWORK_TCPIP 0x00010000
  175. #define EVENT_TRACE_FLAG_REGISTRY 0x00020000
  176. #define EVENT_TRACE_FLAG_DBGPRINT 0x00040000
  177. #define EVENT_TRACE_FLAG_PROCESS_COUNTERS 0x00000008
  178. #define EVENT_TRACE_FLAG_CSWITCH 0x00000010
  179. #define EVENT_TRACE_FLAG_DPC 0x00000020
  180. #define EVENT_TRACE_FLAG_INTERRUPT 0x00000040
  181. #define EVENT_TRACE_FLAG_SYSTEMCALL 0x00000080
  182. #define EVENT_TRACE_FLAG_DISK_IO_INIT 0x00000400
  183. #define EVENT_TRACE_FLAG_ALPC 0x00100000
  184. #define EVENT_TRACE_FLAG_SPLIT_IO 0x00200000
  185. #define EVENT_TRACE_FLAG_DRIVER 0x00800000
  186. #define EVENT_TRACE_FLAG_PROFILE 0x01000000
  187. #define EVENT_TRACE_FLAG_FILE_IO 0x02000000
  188. #define EVENT_TRACE_FLAG_FILE_IO_INIT 0x04000000
  189. #define EVENT_TRACE_FLAG_DISPATCHER 0x00000800
  190. #define EVENT_TRACE_FLAG_VIRTUAL_ALLOC 0x00004000
  191. #define EVENT_TRACE_FLAG_VAMAP 0x00008000
  192. #define EVENT_TRACE_FLAG_NO_SYSCONFIG 0x10000000
  193. #define EVENT_TRACE_FLAG_JOB 0x00080000
  194. #define EVENT_TRACE_FLAG_DEBUG_EVENTS 0x00400000
  195. #define EVENT_TRACE_FLAG_EXTENSION 0x80000000
  196. #define EVENT_TRACE_FLAG_FORWARD_WMI 0x40000000
  197. #define EVENT_TRACE_FLAG_ENABLE_RESERVE 0x20000000
  198. #define EVENT_TRACE_FILE_MODE_NONE 0x00000000
  199. #define EVENT_TRACE_FILE_MODE_SEQUENTIAL 0x00000001
  200. #define EVENT_TRACE_FILE_MODE_CIRCULAR 0x00000002
  201. #define EVENT_TRACE_FILE_MODE_APPEND 0x00000004
  202. #define EVENT_TRACE_REAL_TIME_MODE 0x00000100
  203. #define EVENT_TRACE_DELAY_OPEN_FILE_MODE 0x00000200
  204. #define EVENT_TRACE_BUFFERING_MODE 0x00000400
  205. #define EVENT_TRACE_PRIVATE_LOGGER_MODE 0x00000800
  206. #define EVENT_TRACE_ADD_HEADER_MODE 0x00001000
  207. #define EVENT_TRACE_USE_GLOBAL_SEQUENCE 0x00004000
  208. #define EVENT_TRACE_USE_LOCAL_SEQUENCE 0x00008000
  209. #define EVENT_TRACE_RELOG_MODE 0x00010000
  210. #define EVENT_TRACE_USE_PAGED_MEMORY 0x01000000
  211. #define EVENT_TRACE_FILE_MODE_NEWFILE 0x00000008
  212. #define EVENT_TRACE_FILE_MODE_PREALLOCATE 0x00000020
  213. #define EVENT_TRACE_NONSTOPPABLE_MODE 0x00000040
  214. #define EVENT_TRACE_SECURE_MODE 0x00000080
  215. #define EVENT_TRACE_USE_KBYTES_FOR_SIZE 0x00002000
  216. #define EVENT_TRACE_PRIVATE_IN_PROC 0x00020000
  217. #define EVENT_TRACE_MODE_RESERVED 0x00100000
  218. #define EVENT_TRACE_NO_PER_PROCESSOR_BUFFERING 0x10000000
  219. #define EVENT_TRACE_SYSTEM_LOGGER_MODE 0x02000000
  220. #define EVENT_TRACE_ADDTO_TRIAGE_DUMP 0x80000000
  221. #define EVENT_TRACE_STOP_ON_HYBRID_SHUTDOWN 0x00400000
  222. #define EVENT_TRACE_PERSIST_ON_HYBRID_SHUTDOWN 0x00800000
  223. #define EVENT_TRACE_INDEPENDENT_SESSION_MODE 0x08000000
  224. #define EVENT_TRACE_COMPRESSED_MODE 0x04000000
  225. #define EVENT_TRACE_CONTROL_QUERY 0
  226. #define EVENT_TRACE_CONTROL_STOP 1
  227. #define EVENT_TRACE_CONTROL_UPDATE 2
  228. #define EVENT_TRACE_CONTROL_FLUSH 3
  229. #define EVENT_TRACE_CONTROL_INCREMENT_FILE 4
  230. #define TRACE_MESSAGE_SEQUENCE 1
  231. #define TRACE_MESSAGE_GUID 2
  232. #define TRACE_MESSAGE_COMPONENTID 4
  233. #define TRACE_MESSAGE_TIMESTAMP 8
  234. #define TRACE_MESSAGE_PERFORMANCE_TIMESTAMP 16
  235. #define TRACE_MESSAGE_SYSTEMINFO 32
  236. #define TRACE_MESSAGE_POINTER32 0x0040
  237. #define TRACE_MESSAGE_POINTER64 0x0080
  238. #define TRACE_MESSAGE_FLAG_MASK 0xffff
  239. #define TRACE_MESSAGE_MAXIMUM_SIZE (64 * 1024)
  240. #define EVENT_TRACE_USE_PROCTIME 0x0001
  241. #define EVENT_TRACE_USE_NOCPUTIME 0x0002
  242. #define TRACE_HEADER_FLAG_USE_TIMESTAMP 0x00000200
  243. #define TRACE_HEADER_FLAG_TRACED_GUID 0x00020000
  244. #define TRACE_HEADER_FLAG_LOG_WNODE 0x00040000
  245. #define TRACE_HEADER_FLAG_USE_GUID_PTR 0x00080000
  246. #define TRACE_HEADER_FLAG_USE_MOF_PTR 0x00100000
  247. typedef enum {
  248. EtwCompressionModeRestart = 0,
  249. EtwCompressionModeNoDisable = 1,
  250. EtwCompressionModeNoRestart = 2
  251. } ETW_COMPRESSION_RESUMPTION_MODE;
  252. typedef struct _EVENT_TRACE_HEADER {
  253. USHORT Size;
  254. __C89_NAMELESS union {
  255. USHORT FieldTypeFlags;
  256. __C89_NAMELESS struct {
  257. UCHAR HeaderType;
  258. UCHAR MarkerFlags;
  259. } DUMMYSTRUCTNAME;
  260. } DUMMYUNIONNAME;
  261. __C89_NAMELESS union {
  262. ULONG Version;
  263. struct {
  264. UCHAR Type;
  265. UCHAR Level;
  266. USHORT Version;
  267. } Class;
  268. } DUMMYUNIONNAME2;
  269. ULONG ThreadId;
  270. ULONG ProcessId;
  271. LARGE_INTEGER TimeStamp;
  272. __C89_NAMELESS union {
  273. GUID Guid;
  274. ULONGLONG GuidPtr;
  275. } DUMMYUNIONNAME3;
  276. __C89_NAMELESS union {
  277. __C89_NAMELESS struct {
  278. ULONG KernelTime;
  279. ULONG UserTime;
  280. } DUMMYSTRUCTNAME;
  281. ULONG64 ProcessorTime;
  282. __C89_NAMELESS struct {
  283. ULONG ClientContext;
  284. ULONG Flags;
  285. } DUMMYSTRUCTNAME2;
  286. } DUMMYUNIONNAME4;
  287. } EVENT_TRACE_HEADER,*PEVENT_TRACE_HEADER;
  288. typedef struct _EVENT_INSTANCE_HEADER {
  289. USHORT Size;
  290. __C89_NAMELESS union {
  291. USHORT FieldTypeFlags;
  292. __C89_NAMELESS struct {
  293. UCHAR HeaderType;
  294. UCHAR MarkerFlags;
  295. } DUMMYSTRUCTNAME;
  296. } DUMMYUNIONNAME;
  297. __C89_NAMELESS union {
  298. ULONG Version;
  299. struct {
  300. UCHAR Type;
  301. UCHAR Level;
  302. USHORT Version;
  303. } Class;
  304. } DUMMYUNIONNAME2;
  305. ULONG ThreadId;
  306. ULONG ProcessId;
  307. LARGE_INTEGER TimeStamp;
  308. ULONGLONG RegHandle;
  309. ULONG InstanceId;
  310. ULONG ParentInstanceId;
  311. __C89_NAMELESS union {
  312. __C89_NAMELESS struct {
  313. ULONG KernelTime;
  314. ULONG UserTime;
  315. } DUMMYSTRUCTNAME;
  316. ULONG64 ProcessorTime;
  317. __C89_NAMELESS struct {
  318. ULONG EventId;
  319. ULONG Flags;
  320. } DUMMYSTRUCTNAME2;
  321. } DUMMYUNIONNAME3;
  322. ULONGLONG ParentRegHandle;
  323. } EVENT_INSTANCE_HEADER,*PEVENT_INSTANCE_HEADER;
  324. #define ETW_NULL_TYPE_VALUE 0
  325. #define ETW_OBJECT_TYPE_VALUE 1
  326. #define ETW_STRING_TYPE_VALUE 2
  327. #define ETW_SBYTE_TYPE_VALUE 3
  328. #define ETW_BYTE_TYPE_VALUE 4
  329. #define ETW_INT16_TYPE_VALUE 5
  330. #define ETW_UINT16_TYPE_VALUE 6
  331. #define ETW_INT32_TYPE_VALUE 7
  332. #define ETW_UINT32_TYPE_VALUE 8
  333. #define ETW_INT64_TYPE_VALUE 9
  334. #define ETW_UINT64_TYPE_VALUE 10
  335. #define ETW_CHAR_TYPE_VALUE 11
  336. #define ETW_SINGLE_TYPE_VALUE 12
  337. #define ETW_DOUBLE_TYPE_VALUE 13
  338. #define ETW_BOOLEAN_TYPE_VALUE 14
  339. #define ETW_DECIMAL_TYPE_VALUE 15
  340. #define ETW_GUID_TYPE_VALUE 101
  341. #define ETW_ASCIICHAR_TYPE_VALUE 102
  342. #define ETW_ASCIISTRING_TYPE_VALUE 103
  343. #define ETW_COUNTED_STRING_TYPE_VALUE 104
  344. #define ETW_POINTER_TYPE_VALUE 105
  345. #define ETW_SIZET_TYPE_VALUE 106
  346. #define ETW_HIDDEN_TYPE_VALUE 107
  347. #define ETW_BOOL_TYPE_VALUE 108
  348. #define ETW_COUNTED_ANSISTRING_TYPE_VALUE 109
  349. #define ETW_REVERSED_COUNTED_STRING_TYPE_VALUE 110
  350. #define ETW_REVERSED_COUNTED_ANSISTRING_TYPE_VALUE 111
  351. #define ETW_NON_NULL_TERMINATED_STRING_TYPE_VALUE 112
  352. #define ETW_REDUCED_ANSISTRING_TYPE_VALUE 113
  353. #define ETW_REDUCED_STRING_TYPE_VALUE 114
  354. #define ETW_SID_TYPE_VALUE 115
  355. #define ETW_VARIANT_TYPE_VALUE 116
  356. #define ETW_PTVECTOR_TYPE_VALUE 117
  357. #define ETW_WMITIME_TYPE_VALUE 118
  358. #define ETW_DATETIME_TYPE_VALUE 119
  359. #define ETW_REFRENCE_TYPE_VALUE 120
  360. #define DEFINE_TRACE_MOF_FIELD(M, P, LEN, TYP) (M)->DataPtr = (ULONG64) (ULONG_PTR) P; (M)->Length = (ULONG) LEN; (M)->DataType = (ULONG) TYP;
  361. typedef struct _MOF_FIELD {
  362. ULONG64 DataPtr;
  363. ULONG Length;
  364. ULONG DataType;
  365. } MOF_FIELD,*PMOF_FIELD;
  366. #if !defined (_EVNTRACE_KERNEL_MODE) || defined (_WMIKM_)
  367. typedef struct _TRACE_LOGFILE_HEADER {
  368. ULONG BufferSize;
  369. __C89_NAMELESS union {
  370. ULONG Version;
  371. struct {
  372. UCHAR MajorVersion;
  373. UCHAR MinorVersion;
  374. UCHAR SubVersion;
  375. UCHAR SubMinorVersion;
  376. } VersionDetail;
  377. } DUMMYUNIONNAME;
  378. ULONG ProviderVersion;
  379. ULONG NumberOfProcessors;
  380. LARGE_INTEGER EndTime;
  381. ULONG TimerResolution;
  382. ULONG MaximumFileSize;
  383. ULONG LogFileMode;
  384. ULONG BuffersWritten;
  385. __C89_NAMELESS union {
  386. GUID LogInstanceGuid;
  387. __C89_NAMELESS struct {
  388. ULONG StartBuffers;
  389. ULONG PointerSize;
  390. ULONG EventsLost;
  391. ULONG CpuSpeedInMHz;
  392. } DUMMYSTRUCTNAME;
  393. } DUMMYUNIONNAME2;
  394. #if defined (_WMIKM_)
  395. PWCHAR LoggerName;
  396. PWCHAR LogFileName;
  397. RTL_TIME_ZONE_INFORMATION TimeZone;
  398. #else
  399. LPWSTR LoggerName;
  400. LPWSTR LogFileName;
  401. TIME_ZONE_INFORMATION TimeZone;
  402. #endif
  403. LARGE_INTEGER BootTime;
  404. LARGE_INTEGER PerfFreq;
  405. LARGE_INTEGER StartTime;
  406. ULONG ReservedFlags;
  407. ULONG BuffersLost;
  408. } TRACE_LOGFILE_HEADER,*PTRACE_LOGFILE_HEADER;
  409. typedef struct _TRACE_LOGFILE_HEADER32 {
  410. ULONG BufferSize;
  411. __C89_NAMELESS union {
  412. ULONG Version;
  413. struct {
  414. UCHAR MajorVersion;
  415. UCHAR MinorVersion;
  416. UCHAR SubVersion;
  417. UCHAR SubMinorVersion;
  418. } VersionDetail;
  419. };
  420. ULONG ProviderVersion;
  421. ULONG NumberOfProcessors;
  422. LARGE_INTEGER EndTime;
  423. ULONG TimerResolution;
  424. ULONG MaximumFileSize;
  425. ULONG LogFileMode;
  426. ULONG BuffersWritten;
  427. __C89_NAMELESS union {
  428. GUID LogInstanceGuid;
  429. __C89_NAMELESS struct {
  430. ULONG StartBuffers;
  431. ULONG PointerSize;
  432. ULONG EventsLost;
  433. ULONG CpuSpeedInMHz;
  434. };
  435. };
  436. ULONG32 LoggerName;
  437. ULONG32 LogFileName;
  438. #if defined (_WMIKM_)
  439. RTL_TIME_ZONE_INFORMATION TimeZone;
  440. #else
  441. TIME_ZONE_INFORMATION TimeZone;
  442. #endif
  443. LARGE_INTEGER BootTime;
  444. LARGE_INTEGER PerfFreq;
  445. LARGE_INTEGER StartTime;
  446. ULONG ReservedFlags;
  447. ULONG BuffersLost;
  448. } TRACE_LOGFILE_HEADER32,*PTRACE_LOGFILE_HEADER32;
  449. typedef struct _TRACE_LOGFILE_HEADER64 {
  450. ULONG BufferSize;
  451. __C89_NAMELESS union {
  452. ULONG Version;
  453. __C89_NAMELESS struct {
  454. UCHAR MajorVersion;
  455. UCHAR MinorVersion;
  456. UCHAR SubVersion;
  457. UCHAR SubMinorVersion;
  458. } VersionDetail;
  459. };
  460. ULONG ProviderVersion;
  461. ULONG NumberOfProcessors;
  462. LARGE_INTEGER EndTime;
  463. ULONG TimerResolution;
  464. ULONG MaximumFileSize;
  465. ULONG LogFileMode;
  466. ULONG BuffersWritten;
  467. __C89_NAMELESS union {
  468. GUID LogInstanceGuid;
  469. __C89_NAMELESS struct {
  470. ULONG StartBuffers;
  471. ULONG PointerSize;
  472. ULONG EventsLost;
  473. ULONG CpuSpeedInMHz;
  474. };
  475. };
  476. ULONG64 LoggerName;
  477. ULONG64 LogFileName;
  478. #if defined (_WMIKM_)
  479. RTL_TIME_ZONE_INFORMATION TimeZone;
  480. #else
  481. TIME_ZONE_INFORMATION TimeZone;
  482. #endif
  483. LARGE_INTEGER BootTime;
  484. LARGE_INTEGER PerfFreq;
  485. LARGE_INTEGER StartTime;
  486. ULONG ReservedFlags;
  487. ULONG BuffersLost;
  488. } TRACE_LOGFILE_HEADER64,*PTRACE_LOGFILE_HEADER64;
  489. #endif
  490. typedef struct EVENT_INSTANCE_INFO {
  491. HANDLE RegHandle;
  492. ULONG InstanceId;
  493. } EVENT_INSTANCE_INFO,*PEVENT_INSTANCE_INFO;
  494. #ifndef _EVNTRACE_KERNEL_MODE
  495. typedef struct _EVENT_FILTER_DESCRIPTOR EVENT_FILTER_DESCRIPTOR, *PEVENT_FILTER_DESCRIPTOR;
  496. typedef struct _EVENT_TRACE_PROPERTIES {
  497. WNODE_HEADER Wnode;
  498. ULONG BufferSize;
  499. ULONG MinimumBuffers;
  500. ULONG MaximumBuffers;
  501. ULONG MaximumFileSize;
  502. ULONG LogFileMode;
  503. ULONG FlushTimer;
  504. ULONG EnableFlags;
  505. LONG AgeLimit;
  506. ULONG NumberOfBuffers;
  507. ULONG FreeBuffers;
  508. ULONG EventsLost;
  509. ULONG BuffersWritten;
  510. ULONG LogBuffersLost;
  511. ULONG RealTimeBuffersLost;
  512. HANDLE LoggerThreadId;
  513. ULONG LogFileNameOffset;
  514. ULONG LoggerNameOffset;
  515. } EVENT_TRACE_PROPERTIES,*PEVENT_TRACE_PROPERTIES;
  516. typedef struct _EVENT_TRACE_PROPERTIES_V2 {
  517. WNODE_HEADER Wnode;
  518. ULONG BufferSize;
  519. ULONG MinimumBuffers;
  520. ULONG MaximumBuffers;
  521. ULONG MaximumFileSize;
  522. ULONG LogFileMode;
  523. ULONG FlushTimer;
  524. ULONG EnableFlags;
  525. __C89_NAMELESS union {
  526. LONG AgeLimit;
  527. LONG FlushThreshold;
  528. };
  529. ULONG NumberOfBuffers;
  530. ULONG FreeBuffers;
  531. ULONG EventsLost;
  532. ULONG BuffersWritten;
  533. ULONG LogBuffersLost;
  534. ULONG RealTimeBuffersLost;
  535. HANDLE LoggerThreadId;
  536. ULONG LogFileNameOffset;
  537. ULONG LoggerNameOffset;
  538. __C89_NAMELESS union {
  539. __C89_NAMELESS struct {
  540. ULONG VersionNumber : 8;
  541. };
  542. ULONG V2Control;
  543. };
  544. ULONG FilterDescCount;
  545. PEVENT_FILTER_DESCRIPTOR FilterDesc;
  546. __C89_NAMELESS union {
  547. __C89_NAMELESS struct {
  548. ULONG Wow : 1;
  549. ULONG QpcDeltaTracking : 1;
  550. };
  551. ULONG64 V2Options;
  552. };
  553. } EVENT_TRACE_PROPERTIES_V2, *PEVENT_TRACE_PROPERTIES_V2;
  554. typedef struct _TRACE_GUID_REGISTRATION {
  555. LPCGUID Guid;
  556. HANDLE RegHandle;
  557. } TRACE_GUID_REGISTRATION,*PTRACE_GUID_REGISTRATION;
  558. #endif
  559. typedef struct _TRACE_GUID_PROPERTIES {
  560. GUID Guid;
  561. ULONG GuidType;
  562. ULONG LoggerId;
  563. ULONG EnableLevel;
  564. ULONG EnableFlags;
  565. BOOLEAN IsEnable;
  566. } TRACE_GUID_PROPERTIES,*PTRACE_GUID_PROPERTIES;
  567. #ifndef ETW_BUFFER_CONTEXT_DEF
  568. #define ETW_BUFFER_CONTEXT_DEF
  569. typedef struct _ETW_BUFFER_CONTEXT {
  570. __C89_NAMELESS union {
  571. __C89_NAMELESS struct {
  572. UCHAR ProcessorNumber;
  573. UCHAR Alignment;
  574. } DUMMYSTRUCTNAME;
  575. USHORT ProcessorIndex;
  576. } DUMMYUNIONNAME;
  577. USHORT LoggerId;
  578. } ETW_BUFFER_CONTEXT,*PETW_BUFFER_CONTEXT;
  579. #endif
  580. #define TRACE_PROVIDER_FLAG_LEGACY (0x00000001)
  581. #define TRACE_PROVIDER_FLAG_PRE_ENABLE (0x00000002)
  582. typedef struct _TRACE_ENABLE_INFO {
  583. ULONG IsEnabled;
  584. UCHAR Level;
  585. UCHAR Reserved1;
  586. USHORT LoggerId;
  587. ULONG EnableProperty;
  588. ULONG Reserved2;
  589. ULONGLONG MatchAnyKeyword;
  590. ULONGLONG MatchAllKeyword;
  591. } TRACE_ENABLE_INFO,*PTRACE_ENABLE_INFO;
  592. typedef struct _TRACE_PROVIDER_INSTANCE_INFO {
  593. ULONG NextOffset;
  594. ULONG EnableCount;
  595. ULONG Pid;
  596. ULONG Flags;
  597. } TRACE_PROVIDER_INSTANCE_INFO,*PTRACE_PROVIDER_INSTANCE_INFO;
  598. typedef struct _TRACE_GUID_INFO {
  599. ULONG InstanceCount;
  600. ULONG Reserved;
  601. } TRACE_GUID_INFO,*PTRACE_GUID_INFO;
  602. typedef struct _PROFILE_SOURCE_INFO {
  603. ULONG NextEntryOffset;
  604. ULONG Source;
  605. ULONG MinInterval;
  606. ULONG MaxInterval;
  607. ULONG64 Reserved;
  608. WCHAR Description[ANYSIZE_ARRAY];
  609. } PROFILE_SOURCE_INFO,*PPROFILE_SOURCE_INFO;
  610. typedef struct _EVENT_TRACE {
  611. EVENT_TRACE_HEADER Header;
  612. ULONG InstanceId;
  613. ULONG ParentInstanceId;
  614. GUID ParentGuid;
  615. PVOID MofData;
  616. ULONG MofLength;
  617. __C89_NAMELESS union {
  618. ULONG ClientContext;
  619. ETW_BUFFER_CONTEXT BufferContext;
  620. } DUMMYUNIONNAME;
  621. } EVENT_TRACE,*PEVENT_TRACE;
  622. #define EVENT_CONTROL_CODE_DISABLE_PROVIDER 0
  623. #define EVENT_CONTROL_CODE_ENABLE_PROVIDER 1
  624. #define EVENT_CONTROL_CODE_CAPTURE_STATE 2
  625. #endif
  626. #ifndef _EVNTRACE_KERNEL_MODE
  627. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  628. typedef struct _EVENT_RECORD EVENT_RECORD,*PEVENT_RECORD;
  629. typedef struct _EVENT_TRACE_LOGFILEW EVENT_TRACE_LOGFILEW,*PEVENT_TRACE_LOGFILEW;
  630. typedef struct _EVENT_TRACE_LOGFILEA EVENT_TRACE_LOGFILEA,*PEVENT_TRACE_LOGFILEA;
  631. typedef ULONG (WINAPI *PEVENT_TRACE_BUFFER_CALLBACKW) (PEVENT_TRACE_LOGFILEW Logfile);
  632. typedef ULONG (WINAPI *PEVENT_TRACE_BUFFER_CALLBACKA) (PEVENT_TRACE_LOGFILEA Logfile);
  633. typedef VOID (WINAPI *PEVENT_CALLBACK) (PEVENT_TRACE pEvent);
  634. typedef VOID (WINAPI *PEVENT_RECORD_CALLBACK) (PEVENT_RECORD EventRecord);
  635. typedef ULONG (WINAPI *WMIDPREQUEST) (WMIDPREQUESTCODE RequestCode, PVOID RequestContext, ULONG *BufferSize, PVOID Buffer);
  636. struct _EVENT_TRACE_LOGFILEW {
  637. LPWSTR LogFileName;
  638. LPWSTR LoggerName;
  639. LONGLONG CurrentTime;
  640. ULONG BuffersRead;
  641. __C89_NAMELESS union {
  642. ULONG LogFileMode;
  643. ULONG ProcessTraceMode;
  644. } DUMMYUNIONNAME;
  645. EVENT_TRACE CurrentEvent;
  646. TRACE_LOGFILE_HEADER LogfileHeader;
  647. PEVENT_TRACE_BUFFER_CALLBACKW BufferCallback;
  648. ULONG BufferSize;
  649. ULONG Filled;
  650. ULONG EventsLost;
  651. __C89_NAMELESS union {
  652. PEVENT_CALLBACK EventCallback;
  653. PEVENT_RECORD_CALLBACK EventRecordCallback;
  654. } DUMMYUNIONNAME2;
  655. ULONG IsKernelTrace;
  656. PVOID Context;
  657. };
  658. struct _EVENT_TRACE_LOGFILEA {
  659. LPSTR LogFileName;
  660. LPSTR LoggerName;
  661. LONGLONG CurrentTime;
  662. ULONG BuffersRead;
  663. __C89_NAMELESS union {
  664. ULONG LogFileMode;
  665. ULONG ProcessTraceMode;
  666. } DUMMYUNIONNAME;
  667. EVENT_TRACE CurrentEvent;
  668. TRACE_LOGFILE_HEADER LogfileHeader;
  669. PEVENT_TRACE_BUFFER_CALLBACKA BufferCallback;
  670. ULONG BufferSize;
  671. ULONG Filled;
  672. ULONG EventsLost;
  673. __C89_NAMELESS union {
  674. PEVENT_CALLBACK EventCallback;
  675. PEVENT_RECORD_CALLBACK EventRecordCallback;
  676. } DUMMYUNIONNAME2;
  677. ULONG IsKernelTrace;
  678. PVOID Context;
  679. };
  680. #if defined (_UNICODE) || defined (UNICODE)
  681. #define PEVENT_TRACE_BUFFER_CALLBACK PEVENT_TRACE_BUFFER_CALLBACKW
  682. #define EVENT_TRACE_LOGFILE EVENT_TRACE_LOGFILEW
  683. #define PEVENT_TRACE_LOGFILE PEVENT_TRACE_LOGFILEW
  684. #define KERNEL_LOGGER_NAME KERNEL_LOGGER_NAMEW
  685. #define GLOBAL_LOGGER_NAME GLOBAL_LOGGER_NAMEW
  686. #define EVENT_LOGGER_NAME EVENT_LOGGER_NAMEW
  687. #else
  688. #define PEVENT_TRACE_BUFFER_CALLBACK PEVENT_TRACE_BUFFER_CALLBACKA
  689. #define EVENT_TRACE_LOGFILE EVENT_TRACE_LOGFILEA
  690. #define PEVENT_TRACE_LOGFILE PEVENT_TRACE_LOGFILEA
  691. #define KERNEL_LOGGER_NAME KERNEL_LOGGER_NAMEA
  692. #define GLOBAL_LOGGER_NAME GLOBAL_LOGGER_NAMEA
  693. #define EVENT_LOGGER_NAME EVENT_LOGGER_NAMEA
  694. #endif
  695. #endif
  696. #ifdef __cplusplus
  697. extern "C" {
  698. #endif
  699. #define ENABLE_TRACE_PARAMETERS_VERSION 1
  700. #define ENABLE_TRACE_PARAMETERS_VERSION_2 2
  701. typedef enum _TRACE_QUERY_INFO_CLASS {
  702. TraceGuidQueryList,
  703. TraceGuidQueryInfo,
  704. TraceGuidQueryProcess,
  705. TraceStackTracingInfo,
  706. TraceSystemTraceEnableFlagsInfo,
  707. TraceSampledProfileIntervalInfo,
  708. TraceProfileSourceConfigInfo,
  709. TraceProfileSourceListInfo,
  710. TracePmcEventListInfo,
  711. TracePmcCounterListInfo,
  712. TraceSetDisallowList,
  713. TraceVersionInfo,
  714. TraceGroupQueryList,
  715. TraceGroupQueryInfo,
  716. TraceDisallowListQuery,
  717. TraceCompressionInfo,
  718. TracePeriodicCaptureStateListInfo,
  719. TracePeriodicCaptureStateInfo,
  720. TraceProviderBinaryTracking,
  721. TraceMaxLoggersQuery,
  722. MaxTraceSetInfoClass
  723. } TRACE_QUERY_INFO_CLASS, TRACE_INFO_CLASS;
  724. typedef struct _EVENT_FILTER_DESCRIPTOR EVENT_FILTER_DESCRIPTOR,*PEVENT_FILTER_DESCRIPTOR;
  725. typedef struct _ENABLE_TRACE_PARAMETERS_V1 {
  726. ULONG Version;
  727. ULONG EnableProperty;
  728. ULONG ControlFlags;
  729. GUID SourceId;
  730. PEVENT_FILTER_DESCRIPTOR EnableFilterDesc;
  731. } ENABLE_TRACE_PARAMETERS_V1, *PENABLE_TRACE_PARAMETERS_V1;
  732. typedef struct _ENABLE_TRACE_PARAMETERS {
  733. ULONG Version;
  734. ULONG EnableProperty;
  735. ULONG ControlFlags;
  736. GUID SourceId;
  737. PEVENT_FILTER_DESCRIPTOR EnableFilterDesc;
  738. ULONG FilterDescCount;
  739. } ENABLE_TRACE_PARAMETERS, *PENABLE_TRACE_PARAMETERS;
  740. /*To enable the read event type for disk IO events, set GUID to 3d6fa8d4-fe05-11d0-9dda-00c04fd7ba7c and Type to 10.*/
  741. typedef struct _CLASSIC_EVENT_ID {
  742. GUID EventGuid;
  743. UCHAR Type;
  744. UCHAR Reserved[7];
  745. } CLASSIC_EVENT_ID, *PCLASSIC_EVENT_ID;
  746. typedef struct _TRACE_PROFILE_INTERVAL {
  747. ULONG Source;
  748. ULONG Interval;
  749. } TRACE_PROFILE_INTERVAL, *PTRACE_PROFILE_INTERVAL;
  750. typedef struct _TRACE_VERSION_INFO {
  751. UINT EtwTraceProcessingVersion;
  752. UINT Reserved;
  753. } TRACE_VERSION_INFO, *PTRACE_VERSION_INFO;
  754. typedef struct _TRACE_PERIODIC_CAPTURE_STATE_INFO {
  755. ULONG CaptureStateFrequencyInSeconds;
  756. USHORT ProviderCount;
  757. USHORT Reserved;
  758. } TRACE_PERIODIC_CAPTURE_STATE_INFO, *PTRACE_PERIODIC_CAPTURE_STATE_INFO;
  759. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  760. EXTERN_C ULONG WMIAPI ControlTraceA (TRACEHANDLE TraceHandle, LPCSTR InstanceName, PEVENT_TRACE_PROPERTIES Properties, ULONG ControlCode);
  761. EXTERN_C ULONG WMIAPI FlushTraceA (TRACEHANDLE TraceHandle, LPCSTR InstanceName, PEVENT_TRACE_PROPERTIES Properties); EXTERN_C ULONG WMIAPI QueryTraceA (TRACEHANDLE TraceHandle, LPCSTR InstanceName, PEVENT_TRACE_PROPERTIES Properties); EXTERN_C ULONG WMIAPI StartTraceA (PTRACEHANDLE TraceHandle, LPCSTR InstanceName, PEVENT_TRACE_PROPERTIES Properties);
  762. EXTERN_C ULONG WMIAPI StopTraceA (TRACEHANDLE TraceHandle, LPCSTR InstanceName, PEVENT_TRACE_PROPERTIES Properties);
  763. EXTERN_C ULONG WMIAPI RegisterTraceGuidsA (WMIDPREQUEST RequestAddress, PVOID RequestContext, LPCGUID ControlGuid, ULONG GuidCount, PTRACE_GUID_REGISTRATION TraceGuidReg, LPCSTR MofImagePath, LPCSTR MofResourceName, PTRACEHANDLE RegistrationHandle);
  764. EXTERN_C TRACEHANDLE WMIAPI OpenTraceA (PEVENT_TRACE_LOGFILEA Logfile);
  765. EXTERN_C ULONG WMIAPI CloseTrace (TRACEHANDLE TraceHandle);
  766. EXTERN_C ULONG WMIAPI ProcessTrace (PTRACEHANDLE HandleArray, ULONG HandleCount, LPFILETIME StartTime, LPFILETIME EndTime);
  767. #endif
  768. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
  769. EXTERN_C ULONG WMIAPI UpdateTraceW (TRACEHANDLE TraceHandle, LPCWSTR InstanceName, PEVENT_TRACE_PROPERTIES Properties);
  770. EXTERN_C ULONG WMIAPI UpdateTraceA (TRACEHANDLE TraceHandle, LPCSTR InstanceName, PEVENT_TRACE_PROPERTIES Properties);
  771. EXTERN_C ULONG WMIAPI QueryAllTracesW (PEVENT_TRACE_PROPERTIES *PropertyArray, ULONG PropertyArrayCount, PULONG LoggerCount);
  772. EXTERN_C ULONG WMIAPI QueryAllTracesA (PEVENT_TRACE_PROPERTIES *PropertyArray, ULONG PropertyArrayCount, PULONG LoggerCount);
  773. EXTERN_C ULONG WMIAPI CreateTraceInstanceId (HANDLE RegHandle, PEVENT_INSTANCE_INFO InstInfo);
  774. EXTERN_C ULONG WMIAPI TraceEvent (TRACEHANDLE TraceHandle, PEVENT_TRACE_HEADER EventTrace);
  775. EXTERN_C ULONG WMIAPI TraceEventInstance (TRACEHANDLE TraceHandle, PEVENT_INSTANCE_HEADER EventTrace, PEVENT_INSTANCE_INFO InstInfo, PEVENT_INSTANCE_INFO ParentInstInfo);
  776. EXTERN_C ULONG WMIAPI EnumerateTraceGuids (PTRACE_GUID_PROPERTIES *GuidPropertiesArray, ULONG PropertyArrayCount, PULONG GuidCount);
  777. EXTERN_C ULONG WMIAPI SetTraceCallback (LPCGUID pGuid, PEVENT_CALLBACK EventCallback);
  778. EXTERN_C ULONG WMIAPI RemoveTraceCallback (LPCGUID pGuid);
  779. EXTERN_C ULONG TraceMessageVa (TRACEHANDLE LoggerHandle, ULONG MessageFlags, LPCGUID MessageGuid, USHORT MessageNumber, va_list MessageArgList);
  780. #if WINVER >= 0x0601
  781. EXTERN_C ULONG WMIAPI TraceSetInformation (TRACEHANDLE SessionHandle, TRACE_INFO_CLASS InformationClass, PVOID TraceInformation, ULONG InformationLength);
  782. #endif
  783. #if WINVER >= 0x0602
  784. EXTERN_C ULONG WMIAPI TraceQueryInformation (TRACEHANDLE SessionHandle, TRACE_INFO_CLASS InformationClass, PVOID TraceInformation, ULONG InformationLength, PULONG ReturnLength);
  785. #endif
  786. #endif /* WINAPI_PARTITION_DESKTOP */
  787. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  788. typedef enum _ETW_PROCESS_HANDLE_INFO_TYPE {
  789. EtwQueryPartitionInformation = 1,
  790. EtwQueryProcessHandleInfoMax
  791. } ETW_PROCESS_HANDLE_INFO_TYPE;
  792. typedef struct _ETW_TRACE_PARTITION_INFORMATION {
  793. GUID PartitionId;
  794. GUID ParentId;
  795. LONG64 QpcOffsetFromRoot;
  796. ULONG PartitionType;
  797. } ETW_TRACE_PARTITION_INFORMATION, *PETW_TRACE_PARTITION_INFORMATION;
  798. EXTERN_C TRACEHANDLE WMIAPI OpenTraceW (PEVENT_TRACE_LOGFILEW Logfile);
  799. #if WINVER >= 0x0600
  800. EXTERN_C ULONG WMIAPI EnableTraceEx (LPCGUID ProviderId, LPCGUID SourceId, TRACEHANDLE TraceHandle, ULONG IsEnabled, UCHAR Level, ULONGLONG MatchAnyKeyword, ULONGLONG MatchAllKeyword, ULONG EnableProperty, PEVENT_FILTER_DESCRIPTOR EnableFilterDesc);
  801. EXTERN_C ULONG WMIAPI EnumerateTraceGuidsEx (TRACE_QUERY_INFO_CLASS TraceQueryInfoClass, PVOID InBuffer, ULONG InBufferSize, PVOID OutBuffer, ULONG OutBufferSize, PULONG ReturnLength);
  802. #endif
  803. #if WINVER >= 0x0601
  804. EXTERN_C ULONG WMIAPI EnableTraceEx2 (TRACEHANDLE TraceHandle, LPCGUID ProviderId, ULONG ControlCode, UCHAR Level, ULONGLONG MatchAnyKeyword, ULONGLONG MatchAllKeyword, ULONG Timeout, PENABLE_TRACE_PARAMETERS EnableParameters);
  805. #endif
  806. EXTERN_C ULONG WMIAPI StartTraceA (PTRACEHANDLE TraceHandle, LPCSTR InstanceName, PEVENT_TRACE_PROPERTIES Properties);
  807. EXTERN_C ULONG WMIAPI StartTraceW (PTRACEHANDLE TraceHandle, LPCWSTR InstanceName, PEVENT_TRACE_PROPERTIES Properties);
  808. EXTERN_C ULONG WMIAPI StopTraceW (TRACEHANDLE TraceHandle, LPCWSTR InstanceName, PEVENT_TRACE_PROPERTIES Properties);
  809. EXTERN_C ULONG WMIAPI QueryTraceW (TRACEHANDLE TraceHandle, LPCWSTR InstanceName, PEVENT_TRACE_PROPERTIES Properties);
  810. EXTERN_C ULONG WMIAPI FlushTraceW (TRACEHANDLE TraceHandle, LPCWSTR InstanceName, PEVENT_TRACE_PROPERTIES Properties);
  811. EXTERN_C ULONG WMIAPI ControlTraceW (TRACEHANDLE TraceHandle, LPCWSTR InstanceName, PEVENT_TRACE_PROPERTIES Properties, ULONG ControlCode);
  812. EXTERN_C ULONG WMIAPI EnableTrace (ULONG Enable, ULONG EnableFlag, ULONG EnableLevel, LPCGUID ControlGuid, TRACEHANDLE TraceHandle);
  813. EXTERN_C ULONG WMIAPI RegisterTraceGuidsW (WMIDPREQUEST RequestAddress, PVOID RequestContext, LPCGUID ControlGuid, ULONG GuidCount, PTRACE_GUID_REGISTRATION TraceGuidReg, LPCWSTR MofImagePath, LPCWSTR MofResourceName, PTRACEHANDLE RegistrationHandle);
  814. EXTERN_C ULONG WMIAPI UnregisterTraceGuids (TRACEHANDLE RegistrationHandle);
  815. EXTERN_C TRACEHANDLE WMIAPI GetTraceLoggerHandle (PVOID Buffer);
  816. EXTERN_C UCHAR WMIAPI GetTraceEnableLevel (TRACEHANDLE TraceHandle);
  817. EXTERN_C ULONG WMIAPI GetTraceEnableFlags (TRACEHANDLE TraceHandle);
  818. EXTERN_C ULONG __cdecl TraceMessage (TRACEHANDLE LoggerHandle, ULONG MessageFlags, LPCGUID MessageGuid, USHORT MessageNumber,...);
  819. EXTERN_C ULONG WMIAPI QueryTraceProcessingHandle (TRACEHANDLE ProcessingHandle, ETW_PROCESS_HANDLE_INFO_TYPE InformationClass, PVOID InBuffer, ULONG InBufferSize, PVOID OutBuffer, ULONG OutBufferSize, PULONG ReturnLength);
  820. #endif /* WINAPI_PARTITION_APP */
  821. #ifdef __cplusplus
  822. }
  823. #endif
  824. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  825. #define INVALID_PROCESSTRACE_HANDLE ((TRACEHANDLE)INVALID_HANDLE_VALUE)
  826. #endif
  827. #if defined (UNICODE) || defined (_UNICODE)
  828. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  829. #define RegisterTraceGuids RegisterTraceGuidsW
  830. #define StartTrace StartTraceW
  831. #define ControlTrace ControlTraceW
  832. #ifdef __TRACE_W2K_COMPATIBLE
  833. #define StopTrace(a, b, c) ControlTraceW ((a),(b),(c), EVENT_TRACE_CONTROL_STOP)
  834. #define QueryTrace(a, b, c) ControlTraceW ((a),(b),(c), EVENT_TRACE_CONTROL_QUERY)
  835. #define UpdateTrace(a, b, c) ControlTraceW ((a),(b),(c), EVENT_TRACE_CONTROL_UPDATE)
  836. #else
  837. #define StopTrace StopTraceW
  838. #define QueryTrace QueryTraceW
  839. #define UpdateTrace UpdateTraceW
  840. #endif
  841. #define FlushTrace FlushTraceW
  842. #define QueryAllTraces QueryAllTracesW
  843. #define OpenTrace OpenTraceW
  844. #endif
  845. #else
  846. #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
  847. #define RegisterTraceGuids RegisterTraceGuidsA
  848. #define StartTrace StartTraceA
  849. #define ControlTrace ControlTraceA
  850. #ifdef __TRACE_W2K_COMPATIBLE
  851. #define StopTrace(a, b, c) ControlTraceA ((a),(b),(c), EVENT_TRACE_CONTROL_STOP)
  852. #define QueryTrace(a, b, c) ControlTraceA ((a),(b),(c), EVENT_TRACE_CONTROL_QUERY)
  853. #define UpdateTrace(a, b, c) ControlTraceA ((a),(b),(c), EVENT_TRACE_CONTROL_UPDATE)
  854. #else
  855. #define StopTrace StopTraceA
  856. #define QueryTrace QueryTraceA
  857. #define UpdateTrace UpdateTraceA
  858. #endif
  859. #define FlushTrace FlushTraceA
  860. #define QueryAllTraces QueryAllTracesA
  861. #define OpenTrace OpenTraceA
  862. #endif
  863. #endif
  864. #endif
  865. #endif
  866. #endif