// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0 > or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT >, at your option.
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms.
use shared::basetsd::{SIZE_T, ULONG32, ULONG64};
use shared::evntprov::PEVENT_FILTER_DESCRIPTOR;
use shared::guiddef::{GUID, LPCGUID, LPGUID};
use shared::minwindef::{DWORD, LPFILETIME, PULONG, UCHAR, UINT, ULONG, USHORT};
use shared::wmistr::{WMIDPREQUESTCODE, WNODE_HEADER};
use um::evntcons::PEVENT_RECORD;
use um::handleapi::INVALID_HANDLE_VALUE;
use um::timezoneapi::TIME_ZONE_INFORMATION;
use um::winnt::{
ANYSIZE_ARRAY, BOOLEAN, HANDLE, LARGE_INTEGER, LONG, LONGLONG, LPCSTR, LPCWSTR, LPSTR, LP
WSTR,
PVOID, ULONGLONG, WCHAR
};
use vc::vadefs::va_list;
DEFINE_GUID!{EventTraceGuid,
0 x68fdd900, 0 x4a3e, 0 x11d1, 0 x84, 0 xf4, 0 x00, 0 x00, 0 xf8, 0 x04, 0 x64, 0 xe3}
DEFINE_GUID!{SystemTraceControlGuid,
0 x9e814aad, 0 x3204, 0 x11d2, 0 x9a, 0 x82, 0 x00, 0 x60, 0 x08, 0 xa8, 0 x69, 0 x39}
DEFINE_GUID!{EventTraceConfigGuid,
0 x01853a65, 0 x418f, 0 x4f36, 0 xae, 0 xfc, 0 xdc, 0 x0f, 0 x1d, 0 x2f, 0 xd2, 0 x35}
DEFINE_GUID!{DefaultTraceSecurityGuid,
0 x0811c1af, 0 x7a07, 0 x4a06, 0 x82, 0 xed, 0 x86, 0 x94, 0 x55, 0 xcd, 0 xf7, 0 x13}
DEFINE_GUID!{PrivateLoggerNotificationGuid,
0 x3595ab5c, 0 x042a, 0 x4c8e, 0 xb9, 0 x42, 0 x2d, 0 x05, 0 x9b, 0 xfe, 0 xb1, 0 xb1}
pub const KERNEL_LOGGER_NAME: &'static str = "NT Kernel Logger";
pub const GLOBAL_LOGGER_NAME: &'static str = "GlobalLogger";
pub const EVENT_LOGGER_NAME: &'static str = "EventLog";
pub const DIAG_LOGGER_NAME: &'static str = "DiagLog";
pub const MAX_MOF_FIELDS: SIZE_T = 16 ;
DECLARE_HANDLE!{TRACEHANDLE, __TRACEHANDLE}
pub type PTRACEHANDLE = *mut TRACEHANDLE;
pub const EVENT_TRACE_TYPE_INFO: DWORD = 0 x00;
pub const EVENT_TRACE_TYPE_START: DWORD = 0 x01;
pub const EVENT_TRACE_TYPE_END: DWORD = 0 x02;
pub const EVENT_TRACE_TYPE_STOP: DWORD = 0 x02;
pub const EVENT_TRACE_TYPE_DC_START: DWORD = 0 x03;
pub const EVENT_TRACE_TYPE_DC_END: DWORD = 0 x04;
pub const EVENT_TRACE_TYPE_EXTENSION: DWORD = 0 x05;
pub const EVENT_TRACE_TYPE_REPLY: DWORD = 0 x06;
pub const EVENT_TRACE_TYPE_DEQUEUE: DWORD = 0 x07;
pub const EVENT_TRACE_TYPE_RESUME: DWORD = 0 x07;
pub const EVENT_TRACE_TYPE_CHECKPOINT: DWORD = 0 x08;
pub const EVENT_TRACE_TYPE_SUSPEND: DWORD = 0 x08;
pub const EVENT_TRACE_TYPE_WINEVT_SEND: DWORD = 0 x09;
pub const EVENT_TRACE_TYPE_WINEVT_RECEIVE: DWORD = 0 xF0;
pub const TRACE_LEVEL_CRITICAL: UCHAR = 1 ;
pub const TRACE_LEVEL_ERROR: UCHAR = 2 ;
pub const TRACE_LEVEL_WARNING: UCHAR = 3 ;
pub const TRACE_LEVEL_INFORMATION: UCHAR = 4 ;
pub const TRACE_LEVEL_VERBOSE: UCHAR = 5 ;
pub const TRACE_LEVEL_RESERVED6: UCHAR = 6 ;
pub const TRACE_LEVEL_RESERVED7: UCHAR = 7 ;
pub const TRACE_LEVEL_RESERVED8: UCHAR = 8 ;
pub const TRACE_LEVEL_RESERVED9: UCHAR = 9 ;
pub const EVENT_TRACE_TYPE_LOAD: DWORD = 0 x0A;
pub const EVENT_TRACE_TYPE_TERMINATE: DWORD = 0 x0B;
pub const EVENT_TRACE_TYPE_IO_READ: DWORD = 0 x0A;
pub const EVENT_TRACE_TYPE_IO_WRITE: DWORD = 0 x0B;
pub const EVENT_TRACE_TYPE_IO_READ_INIT: DWORD = 0 x0C;
pub const EVENT_TRACE_TYPE_IO_WRITE_INIT: DWORD = 0 x0D;
pub const EVENT_TRACE_TYPE_IO_FLUSH: DWORD = 0 x0E;
pub const EVENT_TRACE_TYPE_IO_FLUSH_INIT: DWORD = 0 x0F;
pub const EVENT_TRACE_TYPE_IO_REDIRECTED_INIT: DWORD = 0 x10;
pub const EVENT_TRACE_TYPE_MM_TF: DWORD = 0 x0A;
pub const EVENT_TRACE_TYPE_MM_DZF: DWORD = 0 x0B;
pub const EVENT_TRACE_TYPE_MM_COW: DWORD = 0 x0C;
pub const EVENT_TRACE_TYPE_MM_GPF: DWORD = 0 x0D;
pub const EVENT_TRACE_TYPE_MM_HPF: DWORD = 0 x0E;
pub const EVENT_TRACE_TYPE_MM_AV: DWORD = 0 x0F;
pub const EVENT_TRACE_TYPE_SEND: DWORD = 0 x0A;
pub const EVENT_TRACE_TYPE_RECEIVE: DWORD = 0 x0B;
pub const EVENT_TRACE_TYPE_CONNECT: DWORD = 0 x0C;
pub const EVENT_TRACE_TYPE_DISCONNECT: DWORD = 0 x0D;
pub const EVENT_TRACE_TYPE_RETRANSMIT: DWORD = 0 x0E;
pub const EVENT_TRACE_TYPE_ACCEPT: DWORD = 0 x0F;
pub const EVENT_TRACE_TYPE_RECONNECT: DWORD = 0 x10;
pub const EVENT_TRACE_TYPE_CONNFAIL: DWORD = 0 x11;
pub const EVENT_TRACE_TYPE_COPY_TCP: DWORD = 0 x12;
pub const EVENT_TRACE_TYPE_COPY_ARP: DWORD = 0 x13;
pub const EVENT_TRACE_TYPE_ACKFULL: DWORD = 0 x14;
pub const EVENT_TRACE_TYPE_ACKPART: DWORD = 0 x15;
pub const EVENT_TRACE_TYPE_ACKDUP: DWORD = 0 x16;
pub const EVENT_TRACE_TYPE_GUIDMAP: DWORD = 0 x0A;
pub const EVENT_TRACE_TYPE_CONFIG: DWORD = 0 x0B;
pub const EVENT_TRACE_TYPE_SIDINFO: DWORD = 0 x0C;
pub const EVENT_TRACE_TYPE_SECURITY: DWORD = 0 x0D;
pub const EVENT_TRACE_TYPE_DBGID_RSDS: DWORD = 0 x40;
pub const EVENT_TRACE_TYPE_REGCREATE: DWORD = 0 x0A;
pub const EVENT_TRACE_TYPE_REGOPEN: DWORD = 0 x0B;
pub const EVENT_TRACE_TYPE_REGDELETE: DWORD = 0 x0C;
pub const EVENT_TRACE_TYPE_REGQUERY: DWORD = 0 x0D;
pub const EVENT_TRACE_TYPE_REGSETVALUE: DWORD = 0 x0E;
pub const EVENT_TRACE_TYPE_REGDELETEVALUE: DWORD = 0 x0F;
pub const EVENT_TRACE_TYPE_REGQUERYVALUE: DWORD = 0 x10;
pub const EVENT_TRACE_TYPE_REGENUMERATEKEY: DWORD = 0 x11;
pub const EVENT_TRACE_TYPE_REGENUMERATEVALUEKEY: DWORD = 0 x12;
pub const EVENT_TRACE_TYPE_REGQUERYMULTIPLEVALUE: DWORD = 0 x13;
pub const EVENT_TRACE_TYPE_REGSETINFORMATION: DWORD = 0 x14;
pub const EVENT_TRACE_TYPE_REGFLUSH: DWORD = 0 x15;
pub const EVENT_TRACE_TYPE_REGKCBCREATE: DWORD = 0 x16;
pub const EVENT_TRACE_TYPE_REGKCBDELETE: DWORD = 0 x17;
pub const EVENT_TRACE_TYPE_REGKCBRUNDOWNBEGIN: DWORD = 0 x18;
pub const EVENT_TRACE_TYPE_REGKCBRUNDOWNEND: DWORD = 0 x19;
pub const EVENT_TRACE_TYPE_REGVIRTUALIZE: DWORD = 0 x1A;
pub const EVENT_TRACE_TYPE_REGCLOSE: DWORD = 0 x1B;
pub const EVENT_TRACE_TYPE_REGSETSECURITY: DWORD = 0 x1C;
pub const EVENT_TRACE_TYPE_REGQUERYSECURITY: DWORD = 0 x1D;
pub const EVENT_TRACE_TYPE_REGCOMMIT: DWORD = 0 x1E;
pub const EVENT_TRACE_TYPE_REGPREPARE: DWORD = 0 x1F;
pub const EVENT_TRACE_TYPE_REGROLLBACK: DWORD = 0 x20;
pub const EVENT_TRACE_TYPE_REGMOUNTHIVE: DWORD = 0 x21;
pub const EVENT_TRACE_TYPE_CONFIG_CPU: DWORD = 0 x0A;
pub const EVENT_TRACE_TYPE_CONFIG_PHYSICALDISK: DWORD = 0 x0B;
pub const EVENT_TRACE_TYPE_CONFIG_LOGICALDISK: DWORD = 0 x0C;
pub const EVENT_TRACE_TYPE_CONFIG_NIC: DWORD = 0 x0D;
pub const EVENT_TRACE_TYPE_CONFIG_VIDEO: DWORD = 0 x0E;
pub const EVENT_TRACE_TYPE_CONFIG_SERVICES: DWORD = 0 x0F;
pub const EVENT_TRACE_TYPE_CONFIG_POWER: DWORD = 0 x10;
pub const EVENT_TRACE_TYPE_CONFIG_NETINFO: DWORD = 0 x11;
pub const EVENT_TRACE_TYPE_CONFIG_OPTICALMEDIA: DWORD = 0 x12;
pub const EVENT_TRACE_TYPE_CONFIG_IRQ: DWORD = 0 x15;
pub const EVENT_TRACE_TYPE_CONFIG_PNP: DWORD = 0 x16;
pub const EVENT_TRACE_TYPE_CONFIG_IDECHANNEL: DWORD = 0 x17;
pub const EVENT_TRACE_TYPE_CONFIG_NUMANODE: DWORD = 0 x18;
pub const EVENT_TRACE_TYPE_CONFIG_PLATFORM: DWORD = 0 x19;
pub const EVENT_TRACE_TYPE_CONFIG_PROCESSORGROUP: DWORD = 0 x1A;
pub const EVENT_TRACE_TYPE_CONFIG_PROCESSORNUMBER: DWORD = 0 x1B;
pub const EVENT_TRACE_TYPE_CONFIG_DPI: DWORD = 0 x1C;
pub const EVENT_TRACE_TYPE_CONFIG_CI_INFO: DWORD = 0 x1D;
pub const EVENT_TRACE_TYPE_CONFIG_MACHINEID: DWORD = 0 x1E;
pub const EVENT_TRACE_TYPE_CONFIG_DEFRAG: DWORD = 0 x1F;
pub const EVENT_TRACE_TYPE_CONFIG_MOBILEPLATFORM: DWORD = 0 x20;
pub const EVENT_TRACE_TYPE_CONFIG_DEVICEFAMILY: DWORD = 0 x21;
pub const EVENT_TRACE_TYPE_CONFIG_FLIGHTID: DWORD = 0 x22;
pub const EVENT_TRACE_TYPE_CONFIG_PROCESSOR: DWORD = 0 x23;
pub const EVENT_TRACE_TYPE_OPTICAL_IO_READ: DWORD = 0 x37;
pub const EVENT_TRACE_TYPE_OPTICAL_IO_WRITE: DWORD = 0 x38;
pub const EVENT_TRACE_TYPE_OPTICAL_IO_FLUSH: DWORD = 0 x39;
pub const EVENT_TRACE_TYPE_OPTICAL_IO_READ_INIT: DWORD = 0 x3a;
pub const EVENT_TRACE_TYPE_OPTICAL_IO_WRITE_INIT: DWORD = 0 x3b;
pub const EVENT_TRACE_TYPE_OPTICAL_IO_FLUSH_INIT: DWORD = 0 x3c;
pub const EVENT_TRACE_TYPE_FLT_PREOP_INIT: DWORD = 0 x60;
pub const EVENT_TRACE_TYPE_FLT_POSTOP_INIT: DWORD = 0 x61;
pub const EVENT_TRACE_TYPE_FLT_PREOP_COMPLETION: DWORD = 0 x62;
pub const EVENT_TRACE_TYPE_FLT_POSTOP_COMPLETION: DWORD = 0 x63;
pub const EVENT_TRACE_TYPE_FLT_PREOP_FAILURE: DWORD = 0 x64;
pub const EVENT_TRACE_TYPE_FLT_POSTOP_FAILURE: DWORD = 0 x65;
pub const EVENT_TRACE_FLAG_PROCESS: DWORD = 0 x00000001;
pub const EVENT_TRACE_FLAG_THREAD: DWORD = 0 x00000002;
pub const EVENT_TRACE_FLAG_IMAGE_LOAD: DWORD = 0 x00000004;
pub const EVENT_TRACE_FLAG_DISK_IO: DWORD = 0 x00000100;
pub const EVENT_TRACE_FLAG_DISK_FILE_IO: DWORD = 0 x00000200;
pub const EVENT_TRACE_FLAG_MEMORY_PAGE_FAULTS: DWORD = 0 x00001000;
pub const EVENT_TRACE_FLAG_MEMORY_HARD_FAULTS: DWORD = 0 x00002000;
pub const EVENT_TRACE_FLAG_NETWORK_TCPIP: DWORD = 0 x00010000;
pub const EVENT_TRACE_FLAG_REGISTRY: DWORD = 0 x00020000;
pub const EVENT_TRACE_FLAG_DBGPRINT: DWORD = 0 x00040000;
pub const EVENT_TRACE_FLAG_PROCESS_COUNTERS: DWORD = 0 x00000008;
pub const EVENT_TRACE_FLAG_CSWITCH: DWORD = 0 x00000010;
pub const EVENT_TRACE_FLAG_DPC: DWORD = 0 x00000020;
pub const EVENT_TRACE_FLAG_INTERRUPT: DWORD = 0 x00000040;
pub const EVENT_TRACE_FLAG_SYSTEMCALL: DWORD = 0 x00000080;
pub const EVENT_TRACE_FLAG_DISK_IO_INIT: DWORD = 0 x00000400;
pub const EVENT_TRACE_FLAG_ALPC: DWORD = 0 x00100000;
pub const EVENT_TRACE_FLAG_SPLIT_IO: DWORD = 0 x00200000;
pub const EVENT_TRACE_FLAG_DRIVER: DWORD = 0 x00800000;
pub const EVENT_TRACE_FLAG_PROFILE: DWORD = 0 x01000000;
pub const EVENT_TRACE_FLAG_FILE_IO: DWORD = 0 x02000000;
pub const EVENT_TRACE_FLAG_FILE_IO_INIT: DWORD = 0 x04000000;
pub const EVENT_TRACE_FLAG_DISPATCHER: DWORD = 0 x00000800;
pub const EVENT_TRACE_FLAG_VIRTUAL_ALLOC: DWORD = 0 x00004000;
pub const EVENT_TRACE_FLAG_VAMAP: DWORD = 0 x00008000;
pub const EVENT_TRACE_FLAG_NO_SYSCONFIG: DWORD = 0 x10000000;
pub const EVENT_TRACE_FLAG_JOB: DWORD = 0 x00080000;
pub const EVENT_TRACE_FLAG_DEBUG_EVENTS: DWORD = 0 x00400000;
pub const EVENT_TRACE_FLAG_EXTENSION: DWORD = 0 x80000000;
pub const EVENT_TRACE_FLAG_FORWARD_WMI: DWORD = 0 x40000000;
pub const EVENT_TRACE_FLAG_ENABLE_RESERVE: DWORD = 0 x20000000;
pub const EVENT_TRACE_FILE_MODE_NONE: DWORD = 0 x00000000;
pub const EVENT_TRACE_FILE_MODE_SEQUENTIAL: DWORD = 0 x00000001;
pub const EVENT_TRACE_FILE_MODE_CIRCULAR: DWORD = 0 x00000002;
pub const EVENT_TRACE_FILE_MODE_APPEND: DWORD = 0 x00000004;
pub const EVENT_TRACE_REAL_TIME_MODE: DWORD = 0 x00000100;
pub const EVENT_TRACE_DELAY_OPEN_FILE_MODE: DWORD = 0 x00000200;
pub const EVENT_TRACE_BUFFERING_MODE: DWORD = 0 x00000400;
pub const EVENT_TRACE_PRIVATE_LOGGER_MODE: DWORD = 0 x00000800;
pub const EVENT_TRACE_ADD_HEADER_MODE: DWORD = 0 x00001000;
pub const EVENT_TRACE_USE_GLOBAL_SEQUENCE: DWORD = 0 x00004000;
pub const EVENT_TRACE_USE_LOCAL_SEQUENCE: DWORD = 0 x00008000;
pub const EVENT_TRACE_RELOG_MODE: DWORD = 0 x00010000;
pub const EVENT_TRACE_USE_PAGED_MEMORY: DWORD = 0 x01000000;
pub const EVENT_TRACE_FILE_MODE_NEWFILE: DWORD = 0 x00000008;
pub const EVENT_TRACE_FILE_MODE_PREALLOCATE: DWORD = 0 x00000020;
pub const EVENT_TRACE_NONSTOPPABLE_MODE: DWORD = 0 x00000040;
pub const EVENT_TRACE_SECURE_MODE: DWORD = 0 x00000080;
pub const EVENT_TRACE_USE_KBYTES_FOR_SIZE: DWORD = 0 x00002000;
pub const EVENT_TRACE_PRIVATE_IN_PROC: DWORD = 0 x00020000;
pub const EVENT_TRACE_MODE_RESERVED: DWORD = 0 x00100000;
pub const EVENT_TRACE_NO_PER_PROCESSOR_BUFFERING: DWORD = 0 x10000000;
pub const EVENT_TRACE_SYSTEM_LOGGER_MODE: DWORD = 0 x02000000;
pub const EVENT_TRACE_ADDTO_TRIAGE_DUMP: DWORD = 0 x80000000;
pub const EVENT_TRACE_STOP_ON_HYBRID_SHUTDOWN: DWORD = 0 x00400000;
pub const EVENT_TRACE_PERSIST_ON_HYBRID_SHUTDOWN: DWORD = 0 x00800000;
pub const EVENT_TRACE_INDEPENDENT_SESSION_MODE: DWORD = 0 x08000000;
pub const EVENT_TRACE_COMPRESSED_MODE: DWORD = 0 x04000000;
pub const EVENT_TRACE_CONTROL_QUERY: DWORD = 0 ;
pub const EVENT_TRACE_CONTROL_STOP: DWORD = 1 ;
pub const EVENT_TRACE_CONTROL_UPDATE: DWORD = 2 ;
pub const EVENT_TRACE_CONTROL_FLUSH: DWORD = 3 ;
pub const TRACE_MESSAGE_SEQUENCE: DWORD = 1 ;
pub const TRACE_MESSAGE_GUID: DWORD = 2 ;
pub const TRACE_MESSAGE_COMPONENTID: DWORD = 4 ;
pub const TRACE_MESSAGE_TIMESTAMP: DWORD = 8 ;
pub const TRACE_MESSAGE_PERFORMANCE_TIMESTAMP: DWORD = 16 ;
pub const TRACE_MESSAGE_SYSTEMINFO: DWORD = 32 ;
pub const TRACE_MESSAGE_POINTER32: DWORD = 0 x0040;
pub const TRACE_MESSAGE_POINTER64: DWORD = 0 x0080;
pub const TRACE_MESSAGE_FLAG_MASK: DWORD = 0 xFFFF;
pub const TRACE_MESSAGE_MAXIMUM_SIZE: SIZE_T = 64 * 1024 ;
pub const EVENT_TRACE_USE_PROCTIME: DWORD = 0 x0001;
pub const EVENT_TRACE_USE_NOCPUTIME: DWORD = 0 x0002;
pub const TRACE_HEADER_FLAG_USE_TIMESTAMP: DWORD = 0 x00000200;
pub const TRACE_HEADER_FLAG_TRACED_GUID: DWORD = 0 x00020000;
pub const TRACE_HEADER_FLAG_LOG_WNODE: DWORD = 0 x00040000;
pub const TRACE_HEADER_FLAG_USE_GUID_PTR: DWORD = 0 x00080000;
pub const TRACE_HEADER_FLAG_USE_MOF_PTR: DWORD = 0 x00100000;
ENUM !{enum ETW_COMPRESSION_RESUMPTION_MODE {
EtwCompressionModeRestart = 0 ,
EtwCompressionModeNoDisable = 1 ,
EtwCompressionModeNoRestart = 2 ,
}}
STRUCT !{struct EVENT_TRACE_HEADER_u1_s {
HeaderType: UCHAR,
MarkerFlags: UCHAR,
}}
UNION!{union EVENT_TRACE_HEADER_u1 {
[u16; 1 ],
FieldTypeFlags FieldTypeFlags_mut: USHORT,
s s_mut: EVENT_TRACE_HEADER_u1_s,
}}
STRUCT !{struct EVENT_TRACE_HEADER_u2_CLASS {
Type : UCHAR,
Level: UCHAR,
Version: USHORT,
}}
UNION!{union EVENT_TRACE_HEADER_u2 {
[u32; 1 ],
Version Version_mut: ULONG,
Class Class_mut: EVENT_TRACE_HEADER_u2_CLASS,
}}
UNION!{union EVENT_TRACE_HEADER_u3 {
[u64; 2 ],
Guid Guid_mut: GUID,
GuidPtr GuidPtr_mut: ULONGLONG,
}}
STRUCT !{struct EVENT_TRACE_HEADER_u4_s1 {
ClientContext: ULONG,
Flags: ULONG,
}}
STRUCT !{struct EVENT_TRACE_HEADER_u4_s2 {
KernelTime: ULONG,
UserTime: ULONG,
}}
UNION!{union EVENT_TRACE_HEADER_u4 {
[u64; 1 ],
s1 s1_mut: EVENT_TRACE_HEADER_u4_s1,
s2 s2_mut: EVENT_TRACE_HEADER_u4_s2,
ProcessorTime ProcessorTime_mut: ULONG64,
}}
STRUCT !{struct EVENT_TRACE_HEADER {
Size: USHORT,
u1: EVENT_TRACE_HEADER_u1,
u2: EVENT_TRACE_HEADER_u2,
ThreadId: ULONG,
ProcessId: ULONG,
TimeStamp: LARGE_INTEGER,
u3: EVENT_TRACE_HEADER_u3,
u4: EVENT_TRACE_HEADER_u4,
}}
pub type PEVENT_TRACE_HEADER = *mut EVENT_TRACE_HEADER;
STRUCT !{struct EVENT_INSTANCE_HEADER_u1_s {
HeaderType: UCHAR,
MarkerFlags: UCHAR,
}}
UNION!{union EVENT_INSTANCE_HEADER_u1 {
[u16; 1 ],
FieldTypeFlags FieldTypeFlags_mut: USHORT,
s s_mut: EVENT_INSTANCE_HEADER_u1_s,
}}
STRUCT !{struct EVENT_INSTANCE_HEADER_u2_CLASS {
Type : UCHAR,
Level: UCHAR,
Version: USHORT,
}}
UNION!{union EVENT_INSTANCE_HEADER_u2 {
[u32; 1 ],
Version Version_mut: ULONG,
Class Class_mut: EVENT_INSTANCE_HEADER_u2_CLASS,
}}
STRUCT !{struct EVENT_INSTANCE_HEADER_u3_s1 {
KernelTime: ULONG,
UserTime: ULONG,
}}
STRUCT !{struct EVENT_INSTANCE_HEADER_u3_s2 {
EventId: ULONG,
Flags: ULONG,
}}
UNION!{union EVENT_INSTANCE_HEADER_u3 {
[u64; 1 ],
s1 s1_mut: EVENT_INSTANCE_HEADER_u3_s1,
ProcessorTime ProcessorTime_mut: ULONG64,
s2 s2_mut: EVENT_INSTANCE_HEADER_u3_s2,
}}
STRUCT !{struct EVENT_INSTANCE_HEADER {
Size: USHORT,
u1: EVENT_INSTANCE_HEADER_u1,
u2: EVENT_INSTANCE_HEADER_u2,
ThreadId: ULONG,
ProcessId: ULONG,
TimeStamp: LARGE_INTEGER,
RegHandle: ULONGLONG,
InstanceId: ULONG,
ParentInstanceId: ULONG,
u3: EVENT_INSTANCE_HEADER_u3,
ParentRegHandle: ULONGLONG,
}}
pub type PEVENT_INSTANCE_HEADER = *mut EVENT_INSTANCE_HEADER;
pub const ETW_NULL_TYPE_VALUE: ULONG = 0 ;
pub const ETW_OBJECT_TYPE_VALUE: ULONG = 1 ;
pub const ETW_STRING_TYPE_VALUE: ULONG = 2 ;
pub const ETW_SBYTE_TYPE_VALUE: ULONG = 3 ;
pub const ETW_BYTE_TYPE_VALUE: ULONG = 4 ;
pub const ETW_INT16_TYPE_VALUE: ULONG = 5 ;
pub const ETW_UINT16_TYPE_VALUE: ULONG = 6 ;
pub const ETW_INT32_TYPE_VALUE: ULONG = 7 ;
pub const ETW_UINT32_TYPE_VALUE: ULONG = 8 ;
pub const ETW_INT64_TYPE_VALUE: ULONG = 9 ;
pub const ETW_UINT64_TYPE_VALUE: ULONG = 10 ;
pub const ETW_CHAR_TYPE_VALUE: ULONG = 11 ;
pub const ETW_SINGLE_TYPE_VALUE: ULONG = 12 ;
pub const ETW_DOUBLE_TYPE_VALUE: ULONG = 13 ;
pub const ETW_BOOLEAN_TYPE_VALUE: ULONG = 14 ;
pub const ETW_DECIMAL_TYPE_VALUE: ULONG = 15 ;
pub const ETW_GUID_TYPE_VALUE: ULONG = 101 ;
pub const ETW_ASCIICHAR_TYPE_VALUE: ULONG = 102 ;
pub const ETW_ASCIISTRING_TYPE_VALUE: ULONG = 103 ;
pub const ETW_COUNTED_STRING_TYPE_VALUE: ULONG = 104 ;
pub const ETW_POINTER_TYPE_VALUE: ULONG = 105 ;
pub const ETW_SIZET_TYPE_VALUE: ULONG = 106 ;
pub const ETW_HIDDEN_TYPE_VALUE: ULONG = 107 ;
pub const ETW_BOOL_TYPE_VALUE: ULONG = 108 ;
pub const ETW_COUNTED_ANSISTRING_TYPE_VALUE: ULONG = 109 ;
pub const ETW_REVERSED_COUNTED_STRING_TYPE_VALUE: ULONG = 110 ;
pub const ETW_REVERSED_COUNTED_ANSISTRING_TYPE_VALUE: ULONG = 111 ;
pub const ETW_NON_NULL_TERMINATED_STRING_TYPE_VALUE: ULONG = 112 ;
pub const ETW_REDUCED_ANSISTRING_TYPE_VALUE: ULONG = 113 ;
pub const ETW_REDUCED_STRING_TYPE_VALUE: ULONG = 114 ;
pub const ETW_SID_TYPE_VALUE: ULONG = 115 ;
pub const ETW_VARIANT_TYPE_VALUE: ULONG = 116 ;
pub const ETW_PTVECTOR_TYPE_VALUE: ULONG = 117 ;
pub const ETW_WMITIME_TYPE_VALUE: ULONG = 118 ;
pub const ETW_DATETIME_TYPE_VALUE: ULONG = 119 ;
pub const ETW_REFRENCE_TYPE_VALUE: ULONG = 120 ;
// TODO: DEFINE_TRACE_MOF_FIELD
STRUCT !{struct MOF_FIELD {
DataPtr: ULONG64,
Length: ULONG,
DataType: ULONG,
}}
pub type PMOF_FIELD = *mut MOF_FIELD;
STRUCT !{struct TRACE_LOGFILE_HEADER_u1_VERSIONDETAIL {
MajorVersion: UCHAR,
MinorVersion: UCHAR,
SubVersion: UCHAR,
SubMinorVersion: UCHAR,
}}
UNION!{union TRACE_LOGFILE_HEADER_u1 {
[u32; 1 ],
Version Version_mut: ULONG,
VersionDetail VersionDetail_mut: TRACE_LOGFILE_HEADER_u1_VERSIONDETAIL,
}}
STRUCT !{struct TRACE_LOGFILE_HEADER_u2_s {
StartBuffers: ULONG,
PointerSize: ULONG,
EventsLost: ULONG,
CpuSpeedInMHz: ULONG,
}}
UNION!{union TRACE_LOGFILE_HEADER_u2 {
[u32; 4 ],
LogInstanceGuid LogInstanceGuid_mut: GUID,
s s_mut: TRACE_LOGFILE_HEADER_u2_s,
}}
STRUCT !{struct TRACE_LOGFILE_HEADER {
BufferSize: ULONG,
u1: TRACE_LOGFILE_HEADER_u1,
ProviderVersion: ULONG,
NumberOfProcessors: ULONG,
EndTime: LARGE_INTEGER,
TimerResolution: ULONG,
MaximumFileSize: ULONG,
LogFileMode: ULONG,
BuffersWritten: ULONG,
u2: TRACE_LOGFILE_HEADER_u2,
LoggerName: LPWSTR,
LogFileName: LPWSTR,
TimeZone: TIME_ZONE_INFORMATION,
BootTime: LARGE_INTEGER,
PrefFreq: LARGE_INTEGER,
StartTime: LARGE_INTEGER,
ReservedFlags: ULONG,
BuffersLost: ULONG,
}}
pub type PTRACE_LOGFILE_HEADER = *mut TRACE_LOGFILE_HEADER;
STRUCT !{struct TRACE_LOGFILE_HEADER32 {
BufferSize: ULONG,
u1: TRACE_LOGFILE_HEADER_u1,
ProviderVersion: ULONG,
NumberOfProcessors: ULONG,
EndTime: LARGE_INTEGER,
TimerResolution: ULONG,
MaximumFileSize: ULONG,
LogFileMode: ULONG,
BuffersWritten: ULONG,
u2: TRACE_LOGFILE_HEADER_u2,
LoggerName: ULONG32,
LogFileName: ULONG32,
TimeZone: TIME_ZONE_INFORMATION,
BootTime: LARGE_INTEGER,
PrefFreq: LARGE_INTEGER,
StartTime: LARGE_INTEGER,
ReservedFlags: ULONG,
BuffersLost: ULONG,
}}
pub type PTRACE_LOGFILE_HEADER32 = *mut TRACE_LOGFILE_HEADER32;
STRUCT !{struct TRACE_LOGFILE_HEADER64 {
BufferSize: ULONG,
u1: TRACE_LOGFILE_HEADER_u1,
ProviderVersion: ULONG,
NumberOfProcessors: ULONG,
EndTime: LARGE_INTEGER,
TimerResolution: ULONG,
MaximumFileSize: ULONG,
LogFileMode: ULONG,
BuffersWritten: ULONG,
u2: TRACE_LOGFILE_HEADER_u2,
LoggerName: ULONG64,
LogFileName: ULONG64,
TimeZone: TIME_ZONE_INFORMATION,
BootTime: LARGE_INTEGER,
PrefFreq: LARGE_INTEGER,
StartTime: LARGE_INTEGER,
ReservedFlags: ULONG,
BuffersLost: ULONG,
}}
pub type PTRACE_LOGFILE_HEADER64 = *mut TRACE_LOGFILE_HEADER64;
STRUCT !{struct EVENT_INSTANCE_INFO {
RegHandle: HANDLE,
InstanceId: ULONG,
}}
pub type PEVENT_INSTANCE_INFO = *mut EVENT_INSTANCE_INFO;
UNION!{union EVENT_TRACE_PROPERTIES_u {
[u32; 1 ],
AgeLimit AgeLimit_mut: LONG,
FlushThreshold FlushThreshold_mut: LONG,
}}
STRUCT !{struct EVENT_TRACE_PROPERTIES {
Wnode: WNODE_HEADER,
BufferSize: ULONG,
MinimumBuffers: ULONG,
MaximumBuffers: ULONG,
MaximumFileSize: ULONG,
LogFileMode: ULONG,
FlushTimer: ULONG,
EnableFlags: ULONG,
u: EVENT_TRACE_PROPERTIES_u,
NumberOfBuffers: ULONG,
FreeBuffers: ULONG,
EventsLost: ULONG,
BuffersWritten: ULONG,
LogBuffersLost: ULONG,
RealTimeBuffersLost: ULONG,
LoggerThreadId: HANDLE,
LogFileNameOffset: ULONG,
LoggerNameOffset: ULONG,
}}
pub type PEVENT_TRACE_PROPERTIES = *mut EVENT_TRACE_PROPERTIES;
UNION!{union EVENT_TRACE_PROPERTIES_V2_u1 {
[u32; 1 ],
AgeLimit AgeLimit_mut: LONG,
FlushThreshold FlushThreshold_mut: LONG,
}}
STRUCT !{struct EVENT_TRACE_PROPERTIES_V2_u2_s {
bitfield: ULONG,
}}
BITFIELD!{EVENT_TRACE_PROPERTIES_V2_u2_s bitfield: ULONG [
VersionNumber set_VersionNumber[0 ..8 ],
]}
UNION!{union EVENT_TRACE_PROPERTIES_V2_u2 {
[u32; 1 ],
s s_mut: EVENT_TRACE_PROPERTIES_V2_u2_s,
V2Control V2Control_mut: ULONG,
}}
STRUCT !{struct EVENT_TRACE_PROPERTIES_V2_u3_s {
bitfield: ULONG,
}}
BITFIELD!{EVENT_TRACE_PROPERTIES_V2_u3_s bitfield: ULONG [
Wow set_Wow[0 ..1 ],
]}
UNION!{union EVENT_TRACE_PROPERTIES_V2_u3 {
[u64; 1 ],
s s_mut: EVENT_TRACE_PROPERTIES_V2_u3_s,
V2Options V2Options_mut: ULONG64,
}}
STRUCT !{struct EVENT_TRACE_PROPERTIES_V2 {
Wnode: WNODE_HEADER,
BufferSize: ULONG,
MinimumBuffers: ULONG,
MaximumBuffers: ULONG,
MaximumFileSize: ULONG,
LogFileMode: ULONG,
FlushTimer: ULONG,
EnableFlags: ULONG,
u1: EVENT_TRACE_PROPERTIES_u,
NumberOfBuffers: ULONG,
FreeBuffers: ULONG,
EventsLost: ULONG,
BuffersWritten: ULONG,
LogBuffersLost: ULONG,
RealTimeBuffersLost: ULONG,
LoggerThreadId: HANDLE,
LogFileNameOffset: ULONG,
LoggerNameOffset: ULONG,
u2: EVENT_TRACE_PROPERTIES_V2_u2,
FilterDescCount: ULONG,
FilterDesc: PEVENT_FILTER_DESCRIPTOR,
u3: EVENT_TRACE_PROPERTIES_V2_u3,
}}
pub type PEVENT_TRACE_PROPERTIES_V2 = *mut EVENT_TRACE_PROPERTIES_V2;
STRUCT !{struct TRACE_GUID_REGISTRATION {
Guid: LPCGUID,
RegHandle: HANDLE,
}}
pub type PTRACE_GUID_REGISTRATION = *mut TRACE_GUID_REGISTRATION;
STRUCT !{struct TRACE_GUID_PROPERTIES {
Guid: GUID,
GuidType: ULONG,
LoggerId: ULONG,
EnableLevel: ULONG,
EnableFlags: ULONG,
IsEnable: BOOLEAN,
}}
pub type PTRACE_GUID_PROPERTIES = *mut TRACE_GUID_PROPERTIES;
STRUCT !{struct ETW_BUFFER_CONTEXT_u_s {
ProcessorNumber: UCHAR,
Alignment: UCHAR,
}}
UNION!{union ETW_BUFFER_CONTEXT_u {
[u16; 1 ],
s s_mut: ETW_BUFFER_CONTEXT_u_s,
ProcessorIndex ProcessorIndex_mut: USHORT,
}}
STRUCT !{struct ETW_BUFFER_CONTEXT {
u: ETW_BUFFER_CONTEXT_u,
LoggerId: USHORT,
}}
pub type PETW_BUFFER_CONTEXT = *mut ETW_BUFFER_CONTEXT;
pub const TRACE_PROVIDER_FLAG_LEGACY: ULONG = 0 x00000001;
pub const TRACE_PROVIDER_FLAG_PRE_ENABLE: ULONG = 0 x00000002;
STRUCT !{struct TRACE_ENABLE_INFO {
IsEnabled: ULONG,
Level: UCHAR,
Reserved1: UCHAR,
LoggerId: USHORT,
EnabledProperty: ULONG,
Reserved2: ULONG,
MatchAnyKeyword: ULONGLONG,
MatchAllKeyword: ULONGLONG,
}}
pub type PTRACE_ENABLE_INFO = *mut TRACE_ENABLE_INFO;
STRUCT !{struct TRACE_PROVIDER_INSTANCE_INFO {
NameOffset: ULONG,
EnableCount: ULONG,
Pid: ULONG,
Flags: ULONG,
}}
pub type PTRACE_PROVIDER_INSTANCE_INFO = *mut TRACE_PROVIDER_INSTANCE_INFO;
STRUCT !{struct TRACE_GUID_INFO {
InstanceCount: ULONG,
Reserved: ULONG,
}}
pub type PTRACE_GUID_INFO = *mut TRACE_GUID_INFO;
STRUCT !{struct PROFILE_SOURCE_INFO {
NextEntryOffset: ULONG,
Source: ULONG,
MinInterval: ULONG,
MaxInterval: ULONG,
Reserved: ULONG64,
Description: [WCHAR; ANYSIZE_ARRAY],
}}
pub type PPROFILE_SOURCE_INFO = *mut PROFILE_SOURCE_INFO;
UNION!{union EVENT_TRACE_u {
[u32; 1 ],
ClientContext ClientContext_mut: ULONG,
BufferContext BufferContext_mut: ETW_BUFFER_CONTEXT,
}}
STRUCT !{struct EVENT_TRACE {
Header: EVENT_TRACE_HEADER,
InstanceId: ULONG,
ParentInstanceId: ULONG,
ParentGuid: GUID,
MofData: PVOID,
MofLength: ULONG,
u: EVENT_TRACE_u,
}}
pub type PEVENT_TRACE = *mut EVENT_TRACE;
pub const EVENT_CONTROL_CODE_DISABLE_PROVIDER: ULONG = 0 ;
pub const EVENT_CONTROL_CODE_ENABLE_PROVIDER: ULONG = 1 ;
pub const EVENT_CONTROL_CODE_CAPTURE_STATE: ULONG = 2 ;
FN !{stdcall PEVENT_TRACE_BUFFER_CALLBACKW(
PEVENT_TRACE_LOGFILEW,
) -> ULONG}
FN !{stdcall PEVENT_TRACE_BUFFER_CALLBACKA(
PEVENT_TRACE_LOGFILEA,
) -> ULONG}
FN !{stdcall PEVENT_CALLBACK(
pEvent: PEVENT_TRACE,
) -> ()}
FN !{stdcall PEVENT_RECORD_CALLBACK(
EventRecord: PEVENT_RECORD,
) -> ()}
FN !{stdcall WMIDPREQUEST(
RequestCode: WMIDPREQUESTCODE,
RequestContext: PVOID,
BufferSize: *mut ULONG,
Buffer: PVOID,
) -> ULONG}
UNION!{union EVENT_TRACE_LOGFILE_u1 {
[u32; 1 ],
LogFileMode LogFileMode_mut: ULONG,
ProcessTraceMode ProcessTraceMode_mut: ULONG,
}}
UNION!{union EVENT_TRACE_LOGFILE_u2 {
[u32; 1 ] [u64; 1 ],
EventCallback EventCallback_mut: PEVENT_CALLBACK,
EventRecordCallback EventRecordCallback_mut: PEVENT_RECORD_CALLBACK,
}}
STRUCT !{struct EVENT_TRACE_LOGFILEW {
LogFileName: LPWSTR,
LoggerName: LPWSTR,
CurrentTime: LONGLONG,
BuffersRead: ULONG,
u1: EVENT_TRACE_LOGFILE_u1,
CurrentEvent: EVENT_TRACE,
LogfileHeader: TRACE_LOGFILE_HEADER,
BufferCallback: PEVENT_TRACE_BUFFER_CALLBACKW,
BufferSize: ULONG,
Filled: ULONG,
EventsLost: ULONG,
u2: EVENT_TRACE_LOGFILE_u2,
IsKernelTrace: ULONG,
Context: PVOID,
}}
pub type PEVENT_TRACE_LOGFILEW = *mut EVENT_TRACE_LOGFILEW;
STRUCT !{struct EVENT_TRACE_LOGFILEA {
LogFileName: LPSTR,
LoggerName: LPSTR,
CurrentTime: LONGLONG,
BuffersRead: ULONG,
u1: EVENT_TRACE_LOGFILE_u1,
CurrentEvent: EVENT_TRACE,
LogfileHeader: TRACE_LOGFILE_HEADER,
BufferCallback: PEVENT_TRACE_BUFFER_CALLBACKA,
BufferSize: ULONG,
Filled: ULONG,
EventsLost: ULONG,
u2: EVENT_TRACE_LOGFILE_u2,
IsKernelTrace: ULONG,
Context: PVOID,
}}
pub type PEVENT_TRACE_LOGFILEA = *mut EVENT_TRACE_LOGFILEA;
extern "system" {
pub fn StartTraceW(
SessionHandle: PTRACEHANDLE,
SessionName: LPCWSTR,
Properties: PEVENT_TRACE_PROPERTIES,
) -> ULONG;
pub fn StartTraceA(
SessionHandle: PTRACEHANDLE,
SessionName: LPCSTR,
Properties: PEVENT_TRACE_PROPERTIES,
) -> ULONG;
pub fn StopTraceW(
SessionHandle: TRACEHANDLE,
SessionName: LPCWSTR,
Properties: PEVENT_TRACE_PROPERTIES,
) -> ULONG;
pub fn StopTraceA(
SessionHandle: TRACEHANDLE,
SessionName: LPCSTR,
Properties: PEVENT_TRACE_PROPERTIES,
) -> ULONG;
pub fn QueryTraceW(
SessionHandle: TRACEHANDLE,
SessionName: LPCWSTR,
Properties: PEVENT_TRACE_PROPERTIES,
) -> ULONG;
pub fn QueryTraceA(
SessionHandle: TRACEHANDLE,
SessionName: LPCSTR,
Properties: PEVENT_TRACE_PROPERTIES,
) -> ULONG;
pub fn UpdateTraceW(
SessionHandle: TRACEHANDLE,
SessionName: LPCWSTR,
Properties: PEVENT_TRACE_PROPERTIES,
) -> ULONG;
pub fn UpdateTraceA(
SessionHandle: TRACEHANDLE,
SessionName: LPCSTR,
Properties: PEVENT_TRACE_PROPERTIES,
) -> ULONG;
pub fn FlushTraceW(
SessionHandle: TRACEHANDLE,
SessionName: LPCWSTR,
Properties: PEVENT_TRACE_PROPERTIES,
) -> ULONG;
pub fn FlushTraceA(
SessionHandle: TRACEHANDLE,
SessionName: LPCSTR,
Properties: PEVENT_TRACE_PROPERTIES,
) -> ULONG;
pub fn ControlTraceW(
SessionHandle: TRACEHANDLE,
SessionName: LPCWSTR,
Properties: PEVENT_TRACE_PROPERTIES,
ControlCode: ULONG,
) -> ULONG;
pub fn ControlTraceA(
SessionHandle: TRACEHANDLE,
SessionName: LPCSTR,
Properties: PEVENT_TRACE_PROPERTIES,
ControlCode: ULONG,
) -> ULONG;
pub fn QueryAllTracesW(
PropertyArray: *mut PEVENT_TRACE_PROPERTIES,
PropertyArrayCount: ULONG,
SessionCount: PULONG,
) -> ULONG;
pub fn QueryAllTracesA(
PropertyArray: *mut PEVENT_TRACE_PROPERTIES,
PropertyArrayCount: ULONG,
SessionCount: PULONG,
) -> ULONG;
pub fn EnableTrace(
Enable: ULONG,
EnableFlag: ULONG,
EnableLevel: ULONG,
ControlGuid: LPCGUID,
SessionHandle: TRACEHANDLE,
) -> ULONG;
pub fn EnableTraceEx(
ProviderId: LPCGUID,
SourceId: LPCGUID,
TraceHandle: TRACEHANDLE,
IsEnabled: ULONG,
Level: UCHAR,
MatchAnyKeyword: ULONGLONG,
MatchAllKeyword: ULONGLONG,
EnableProperty: ULONG,
EnableFilterDesc: PEVENT_FILTER_DESCRIPTOR,
) -> ULONG;
}
pub const ENABLE_TRACE_PARAMETERS_VERSION: ULONG = 1 ;
pub const ENABLE_TRACE_PARAMETERS_VERSION_2: ULONG = 2 ;
STRUCT !{struct ENABLE_TRACE_PARAMETERS_V1 {
Version: ULONG,
EnableProperty: ULONG,
ControlFlags: ULONG,
SourceId: GUID,
EnableFilterDesc: PEVENT_FILTER_DESCRIPTOR,
}}
pub type PENABLE_TRACE_PARAMETERS_V1 = *mut ENABLE_TRACE_PARAMETERS_V1;
STRUCT !{struct ENABLE_TRACE_PARAMETERS {
Version: ULONG,
EnableProperty: ULONG,
ControlFlags: ULONG,
SourceId: GUID,
EnableFilterDesc: PEVENT_FILTER_DESCRIPTOR,
FilterDescCount: ULONG,
}}
pub type PENABLE_TRACE_PARAMETERS = *mut ENABLE_TRACE_PARAMETERS;
extern "system" {
pub fn EnableTraceEx2(
TraceHandle: TRACEHANDLE,
ProviderId: LPCGUID,
ControlCode: ULONG,
Level: UCHAR,
MatchAnyKeyword: ULONGLONG,
MatchAllKeyword: ULONGLONG,
Timeout: ULONG,
EnableParameters: PENABLE_TRACE_PARAMETERS,
) -> ULONG;
}
ENUM !{enum TRACE_QUERY_INFO_CLASS {
TraceGuidQueryList,
TraceGuidQueryInfo,
TraceGuidQueryProcess,
TraceStackTracingInfo,
TraceSystemTraceEnableFlagsInfo,
TraceSampledProfileIntervalInfo,
TraceProfileSourceConfigInfo,
TraceProfileSourceListInfo,
TracePmcEventListInfo,
TracePmcCounterListInfo,
TraceSetDisallowList,
TraceVersionInfo,
TraceGroupQueryList,
TraceGroupQueryInfo,
TraceDisallowListQuery,
TraceCompressionInfo,
TracePeriodicCaptureStateListInfo,
TracePeriodicCaptureStateInfo,
TraceProviderBinaryTracking,
TraceMaxLoggersQuery,
MaxTraceSetInfoClass,
}}
pub type TRACE_INFO_CLASS = TRACE_QUERY_INFO_CLASS;
extern "system" {
pub fn EnumerateTraceGuidsEx(
TraceQueryInfoClass: TRACE_QUERY_INFO_CLASS,
InBuffer: PVOID,
InBufferSize: ULONG,
OutBuffer: PVOID,
OutBufferSize: ULONG,
ReturnLength: PULONG,
) -> ULONG;
}
STRUCT !{struct CLASSIC_EVENT_ID {
EventGuid: GUID,
Type : UCHAR,
Reserved: [UCHAR; 7 ],
}}
pub type PCLASSIC_EVENT_ID = *mut CLASSIC_EVENT_ID;
STRUCT !{struct TRACE_PROFILE_INTERVAL {
Source: ULONG,
Interval: ULONG,
}}
pub type PTRACE_PROFILE_INTERVAL = *mut TRACE_PROFILE_INTERVAL;
STRUCT !{struct TRACE_VERSION_INFO {
EtwTraceProcessingVersion: UINT,
Reserved: UINT,
}}
pub type PTRACE_VERSION_INFO = *mut TRACE_VERSION_INFO;
STRUCT !{struct TRACE_PERIODIC_CAPTURE_STATE_INFO {
CaptureStateFrequencyInSeconds: ULONG,
ProviderCount: USHORT,
Reserved: USHORT,
}}
pub type PTRACE_PERIODIC_CAPTURE_STATE_INFO = *mut TRACE_PERIODIC_CAPTURE_STATE_INFO;
extern "system" {
pub fn TraceSetInformation(
SessionHandle: TRACEHANDLE,
InformationClass: TRACE_INFO_CLASS,
TraceInformation: PVOID,
InformationLength: ULONG,
) -> ULONG;
pub fn TraceQueryInformation(
SessionHandle: TRACEHANDLE,
InformationClass: TRACE_QUERY_INFO_CLASS,
TraceInformation: PVOID,
InformationLength: ULONG,
ReturnLength: PULONG,
) -> ULONG;
pub fn CreateTraceInstanceId(
RegHandle: HANDLE,
pInstInfo: PEVENT_INSTANCE_INFO,
) -> ULONG;
pub fn TraceEvent(
SessionHandle: TRACEHANDLE,
EventTrace: PEVENT_TRACE_HEADER,
) -> ULONG;
pub fn TraceEventInstance(
SessionHandle: TRACEHANDLE,
EventTrace: PEVENT_TRACE_HEADER,
pInstInfo: PEVENT_INSTANCE_INFO,
pParentInstInfo: PEVENT_INSTANCE_INFO,
) -> ULONG;
pub fn RegisterTraceGuidsW(
RequestAddress: WMIDPREQUEST,
RequestContext: PVOID,
ControlGuid: LPCGUID,
GuidCount: ULONG,
TraceGuidReg: PTRACE_GUID_REGISTRATION,
MofImagePath: LPCWSTR,
MofResourceName: LPCWSTR,
RegistrationHandle: PTRACEHANDLE,
) -> ULONG;
pub fn RegisterTraceGuidsA(
RequestAddress: WMIDPREQUEST,
RequestContext: PVOID,
ControlGuid: LPCGUID,
GuidCount: ULONG,
TraceGuidReg: PTRACE_GUID_REGISTRATION,
MofImagePath: LPCSTR,
MofResourceName: LPCSTR,
RegistrationHandle: PTRACEHANDLE,
) -> ULONG;
pub fn EnumerateTraceGuids(
GuidPropertiesArray: *mut PTRACE_GUID_PROPERTIES,
PropertyArrayCount: ULONG,
GuidCount: PULONG,
) -> ULONG;
pub fn UnregisterTraceGuids(
RegistrationHandle: TRACEHANDLE,
) -> ULONG;
pub fn GetTraceLoggerHandle(
Buffer: PVOID,
) -> TRACEHANDLE;
pub fn GetTraceEnableLevel(
SessionHandle: TRACEHANDLE,
) -> UCHAR;
pub fn GetTraceEnableFlags(
SessionHandle: TRACEHANDLE,
) -> ULONG;
pub fn OpenTraceW(
Logfile: PEVENT_TRACE_LOGFILEW,
) -> TRACEHANDLE;
pub fn ProcessTrace(
HandleArray: PTRACEHANDLE,
HandleCount: ULONG,
StartTime: LPFILETIME,
EndTime: LPFILETIME,
) -> ULONG;
pub fn CloseTrace(
TraceHandle: TRACEHANDLE,
) -> ULONG;
}
ENUM !{enum ETW_PROCESS_HANDLE_INFO_TYPE {
EtwQueryPartitionInformation = 1 ,
EtwQueryProcessHandleInfoMax,
}}
STRUCT !{struct ETW_TRACE_PARTITION_INFORMATION {
PartitionId: GUID,
ParentId: GUID,
Reserved: ULONG64,
PartitionType: ULONG,
}}
pub type PETW_TRACE_PARTITION_INFORMATION = *mut ETW_TRACE_PARTITION_INFORMATION;
extern "system" {
pub fn QueryTraceProcessingHandle(
ProcessingHandle: TRACEHANDLE,
InformationClass: ETW_PROCESS_HANDLE_INFO_TYPE,
InBuffer: PVOID,
InBufferSize: ULONG,
OutBuffer: PVOID,
OutBufferSize: ULONG,
ReturnLength: PULONG,
) -> ULONG;
pub fn OpenTraceA(
Logfile: PEVENT_TRACE_LOGFILEA,
) -> TRACEHANDLE;
pub fn SetTraceCallback(
pGuid: LPCGUID,
EventCallback: PEVENT_CALLBACK,
) -> ULONG;
pub fn RemoveTraceCallback(
pGuid: LPCGUID,
) -> ULONG;
}
extern "C" {
pub fn TraceMessage(
SessionHandle: TRACEHANDLE,
MessageFlags: ULONG,
MessageGuid: LPGUID,
MessageNumber: USHORT,
...
) -> ULONG;
pub fn TraceMessageVa(
SessionHandle: TRACEHANDLE,
MessageFlags: ULONG,
MessageGuid: LPGUID,
MessageNumber: USHORT,
MessageArgList: va_list,
);
}
pub const INVALID_PROCESSTRACE_HANDLE: TRACEHANDLE = INVALID_HANDLE_VALUE as TRACEHANDLE;
Messung V0.5 in Prozent C=89 H=93 G=90
¤ Dauer der Verarbeitung: 0.20 Sekunden
(vorverarbeitet am 2026-06-20)
¤
*© Formatika GbR, Deutschland