Home | History | Annotate | Download | only in include
      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