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