:py:mod:`dissect.etl.utils`
===========================
.. py:module:: dissect.etl.utils
Module Contents
---------------
Functions
~~~~~~~~~
.. autoapisummary::
:nosignatures:
dissect.etl.utils.lookup_guid
dissect.etl.utils.bytes_left
Attributes
~~~~~~~~~~
.. autoapisummary::
dissect.etl.utils.c_global_def
dissect.etl.utils.c_etl_global
dissect.etl.utils.c_etl_definitions
dissect.etl.utils.c_etl_headers
dissect.etl.utils.BufferType
dissect.etl.utils.BufferFlag
dissect.etl.utils.NullGuid
dissect.etl.utils.EventTraceGuid
dissect.etl.utils.DiskIoGuid
dissect.etl.utils.PageFaultGuid
dissect.etl.utils.ProcessGuid
dissect.etl.utils.FileIoGuid
dissect.etl.utils.ThreadGuid
dissect.etl.utils.TcpIpGuid
dissect.etl.utils.JobGuid
dissect.etl.utils.UdpIpGuid
dissect.etl.utils.RegistryGuid
dissect.etl.utils.DbgPrintGuid
dissect.etl.utils.EventTraceConfigGuid
dissect.etl.utils.EventTraceSpare1
dissect.etl.utils.WnfGuid
dissect.etl.utils.PoolGuid
dissect.etl.utils.PerfinfoGuid
dissect.etl.utils.HeapGuid
dissect.etl.utils.ObjectGuid
dissect.etl.utils.PowerGuid
dissect.etl.utils.ModBoundGuid
dissect.etl.utils.ImageLoadGuid
dissect.etl.utils.DpcGuid
dissect.etl.utils.CcGuid
dissect.etl.utils.CritSecGuid
dissect.etl.utils.StackWalkGuid
dissect.etl.utils.UmsEventGuid
dissect.etl.utils.ALPCGuid
dissect.etl.utils.SplitIoGuid
dissect.etl.utils.ThreadPoolGuid
dissect.etl.utils.HypervisorTraceGuid
dissect.etl.utils.HypervisorXTraceGuid
dissect.etl.utils.GROUP_GUID_MAP
.. py:data:: c_global_def
:value: Multiline-String
.. raw:: html
Show Value
.. code-block:: python
"""
#define EVENT_TRACE_GROUP_HEADER 0x0000
#define EVENT_TRACE_GROUP_IO 0x0100
#define EVENT_TRACE_GROUP_MEMORY 0x0200
#define EVENT_TRACE_GROUP_PROCESS 0x0300
#define EVENT_TRACE_GROUP_FILE 0x0400
#define EVENT_TRACE_GROUP_THREAD 0x0500
#define EVENT_TRACE_GROUP_TCPIP 0x0600
#define EVENT_TRACE_GROUP_JOB 0x0700
#define EVENT_TRACE_GROUP_UDPIP 0x0800
#define EVENT_TRACE_GROUP_REGISTRY 0x0900
#define EVENT_TRACE_GROUP_DBGPRINT 0x0A00
#define EVENT_TRACE_GROUP_CONFIG 0x0B00
#define EVENT_TRACE_GROUP_SPARE1 0x0C00
#define EVENT_TRACE_GROUP_WNF 0x0D00
#define EVENT_TRACE_GROUP_POOL 0x0E00
#define EVENT_TRACE_GROUP_PERFINFO 0x0F00
#define EVENT_TRACE_GROUP_HEAP 0x1000
#define EVENT_TRACE_GROUP_OBJECT 0x1100
#define EVENT_TRACE_GROUP_POWER 0x1200
#define EVENT_TRACE_GROUP_MODBOUND 0x1300
#define EVENT_TRACE_GROUP_IMAGE 0x1400
#define EVENT_TRACE_GROUP_DPC 0x1500
#define EVENT_TRACE_GROUP_CC 0x1600
#define EVENT_TRACE_GROUP_CRITSEC 0x1700
#define EVENT_TRACE_GROUP_STACKWALK 0x1800
#define EVENT_TRACE_GROUP_UMS 0x1900
#define EVENT_TRACE_GROUP_ALPC 0x1A00
#define EVENT_TRACE_GROUP_SPLITIO 0x1B00
#define EVENT_TRACE_GROUP_THREAD_POOL 0x1C00
#define EVENT_TRACE_GROUP_HYPERVISOR 0x1D00
#define EVENT_TRACE_GROUP_HYPERVISORX 0x1E00
#define EVENT_TRACE_TYPE_INFO 0x00 // Info or point event
#define EVENT_TRACE_TYPE_START 0x01 // Start event
#define EVENT_TRACE_TYPE_END 0x02 // End event
#define EVENT_TRACE_TYPE_STOP 0x02 // Stop event (WinEvent compatible)
#define EVENT_TRACE_TYPE_DC_START 0x03 // Collection start marker
#define EVENT_TRACE_TYPE_DC_END 0x04 // Collection end marker
#define EVENT_TRACE_TYPE_EXTENSION 0x05 // Extension/continuation
#define EVENT_TRACE_TYPE_REPLY 0x06 // Reply event
#define EVENT_TRACE_TYPE_DEQUEUE 0x07 // De-queue event
#define EVENT_TRACE_TYPE_RESUME 0x07 // Resume event (WinEvent compatible)
#define EVENT_TRACE_TYPE_CHECKPOINT 0x08 // Generic checkpoint event
#define EVENT_TRACE_TYPE_SUSPEND 0x08 // Suspend event (WinEvent compatible)
#define EVENT_TRACE_TYPE_WINEVT_SEND 0x09 // Send Event (WinEvent compatible)
#define EVENT_TRACE_TYPE_WINEVT_RECEIVE 0xF0 // Receive Event (WinEvent compatible)
"""
.. raw:: html
.. py:data:: c_etl_global
.. py:data:: c_etl_definitions
:value: Multiline-String
.. raw:: html
Show Value
.. code-block:: python
"""
#define TRACE_HEADER_TYPE_SYSTEM32 0x01
#define TRACE_HEADER_TYPE_SYSTEM64 0x02
#define TRACE_HEADER_TYPE_COMPACT32 0x03
#define TRACE_HEADER_TYPE_COMPACT64 0x04
#define TRACE_HEADER_TYPE_FULL_HEADER32 0x0A
#define TRACE_HEADER_TYPE_INSTANCE32 0x0B
#define TRACE_HEADER_TYPE_TIMED 0x0C
#define TRACE_HEADER_TYPE_ERROR 0x0D
#define TRACE_HEADER_TYPE_WNODE_HEADER 0x0E
#define TRACE_HEADER_TYPE_MESSAGE 0x0F
#define TRACE_HEADER_TYPE_PERFINFO32 0x10
#define TRACE_HEADER_TYPE_PERFINFO64 0x11
#define TRACE_HEADER_TYPE_EVENT_HEADER32 0x12
#define TRACE_HEADER_TYPE_EVENT_HEADER64 0x13
#define TRACE_HEADER_TYPE_FULL_HEADER64 0x14
#define TRACE_HEADER_TYPE_INSTANCE64 0x15
struct SYSTEMTIME {
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
};
struct TimeZoneInformation {
LONG Bias;
wchar StandardName[32];
SYSTEMTIME StandardDate;
LONG StandardBias;
wchar DaylightName[32];
SYSTEMTIME DaylightDate;
LONG DaylightBias;
};
flag ETW_BUFFER_FLAG: uint16 {
NORMAL = 0x0000
FLUSH_MARKER = 0x0001
EVENTS_LOST = 0x0002
BUFFER_LOST = 0x0004
RTBACKUP_CORRUPT = 0x0008
RTBACKUP = 0x0010
PROC_INDEX = 0x0020
COMPRESSED = 0x0040
};
enum ETW_BUFFER_TYPE: uint16 {
GENERIC = 0x0000
RUNDOWN = 0x0001
CTX_SWAP = 0x0002
REFTIME = 0x0003
HEADER = 0x0004
BATCHED = 0x0005
EMPTY_MARKER = 0x0006
DBG_INFO = 0x0007
MAXIMUM = 0x0008
};
/* WMI_BUFFER_HEADER (latest)*/
struct BufferHeader {
uint32 BufferSize; /* 0x00 */
uint32 SavedOffset; /* 0x04 */
uint32 CurrentOffset; /* 0x08 */
uint32 ReferenceCounter; /* 0x0C */
uint64 TimeDelta; /* 0x10 */
int64 SequenceNumber; /* 0x18 */
uint64 Defined_1; /* 0x20 */
uint16 ProcessorIndex; /* 0x28 ETW_BUFFER_CONTEXT */
uint16 LoggerId; /* 0x2A ETW_BUFFER_CONTEXT */
uint32 ETW_BUFFER_STATE; /* 0x2C */
uint32 FilledBytes; /* 0x30, Filled bytes inside the buffer. */
ETW_BUFFER_FLAG BufferFlag; /* 0x34 */
ETW_BUFFER_TYPE BufferType; /* 0x36 */
uint32 unk17; /* 0x38 different for multiple iterations*/
uint32 unk18; /* 0x3C different for multiple iterations*/
uint32 unk19; /* 0x40 different for multiple iterations*/
uint32 unk20; /* 0x44 different for multiple iterations*/
};
/* TRACE_HEADER_TYPE_SYSTEM32, TRACE_HEADER_TYPE_SYSTEM64 */
struct SystemHeader {
uint16 Version; /* 0x00 */
uint16 Marker; /* 0x02 */
uint16 Size; /* 0x04 */
uint8 OpCode; /* 0x06 */
uint8 Group; /* 0x07 */
uint32 ThreadId; /* 0x08 */
uint32 ProcessId; /* 0x0c */
uint64 TimeDelta; /* 0x10 */
uint64 ProcessorTime; /* 0x18 */
};
/* TRACE_HEADER_TYPE_COMPACT32, TRACE_HEADER_TYPE_COMPACT64 */
struct CompactSystemHeader {
uint16 Version; /* 0x00 */
uint16 Marker; /* 0x02 */
uint16 Size; /* 0x04 */
uint8 OpCode; /* 0x06 */
uint8 Group; /* 0x07 */
uint32 ThreadId; /* 0x08 */
uint32 ProcessId; /* 0x0c */
uint64 TimeDelta; /* 0x10 */
};
/* TRACE_HEADER_TYPE_PERFINFO32, TRACE_HEADER_TYPE_PERFINFO64 */
struct PerformanceInfoHeader {
uint16 Version; /* 0x00 */
uint16 Marker; /* 0x02 */
uint16 Size; /* 0x04 */
uint8 OpCode; /* 0x06 */
uint8 Group; /* 0x07 */
uint64 TimeDelta; /* 0x10 */
};
/* TRACE_HEADER_TYPE_MESSAGE */
struct MessageHeader {
uint16 Size; /* 0x00 */
uint16 Marker; /* 0x02 */
uint16 Id; /* 0x04 */
uint16 EventProperty; /* 0x06 */
};
/* TRACE_HEADER_TYPE_EVENT_HEADER32, TRACE_HEADER_TYPE_EVENT_HEADER64 */
struct EventHeader {
uint16 Size; /* 0x00 */
uint16 Marker; /* 0x02 */
uint16 Flags; /* 0x04 */
uint16 EventProperty; /* 0x06 */
uint32 ThreadId; /* 0x08 */
uint32 ProcessId; /* 0x0c */
uint64 TimeDelta; /* 0x10 */
char ProviderId[16]; /* 0x18 */
uint16 Id; /* 0x28 */
uint8 Version; /* 0x2a */
uint8 Channel; /* 0x2b */
uint8 Level; /* 0x2c */
uint8 OpCode; /* 0x2d */
uint16 Task; /* 0x2e */
uint64 Keywords; /* 0x30 */
uint64 ProcessorTime; /* 0x38 */
char ActivityId[16]; /* 0x40 */
};
struct EventTraceHeader {
uint16 Size; /* 0x00 */
uint16 Marker; /* 0x02 */
uint32 Version; /* 0x04 */
uint32 ThreadId; /* 0x08 */
uint32 ProcessId; /* 0x0C */
uint64 TimeDelta; /* 0x10 */
char ProviderId[16]; /* 0x18 */
uint32 KernelTime; /* 0x28 */
uint32 UserTime; /* 0x2B*/
};
// An older header not used anymore
struct EventInstanceHeader {
uint16 Size;
uint16 Marker;
uint32 Version;
union {
uint64 ThreadId;
struct {
uint32 ThreadId;
uint32 ProcessId;
} information;
} ids;
uint64 TimeDelta;
uint64 RegHandle;
uint32 InstanceId;
uint32 ParentInstanceId;
union {
struct {
uint32 KernelTime;
uint32 UserTime;
};
uint64 ProcessorTime;
struct {
uint32 EventId;
uint32 Flags;
};
};
uint64 ParentRegHandle;
}
struct EventInstanceGUIDHeader {
uint16 Size;
uint16 Marker;
uint32 Version;
uint32 ThreadId;
uint32 ProcessId;
uint64 TimeDelta;
char ProviderId[16];
union {
struct {
uint32 KernelTime;
uint32 UserTime;
} cpu_time;
uint64 ProcessorTime;
struct {
uint32 EventId;
uint32 Flags;
} event_info;
} event_metadata;
uint32 InstanceId;
uint32 ParentInstanceId;
char ParentGuid[16];
};
struct EventHeaderExtendedDataItemHeader {
uint16 Size;
uint16 ExtType;
uint16 Reserved1;
uint16 DataSize;
char Data[DataSize];
};
struct EVENT_HEADER_EXT_TYPE_ITEM_INSTANCE {
uint32 InstanceId;
uint32 ParentInstanceId;
char ParentGuid[16];
};
struct EVENT_HEADER_EXT_TYPE_STACK_TRACE32 {
uint64 MatchId;
uint32 Address[];
};
struct EVENT_HEADER_EXT_TYPE_STACK_TRACE64 {
uint64 MatchId;
uint64 Address[];
};
struct TRAIT {
uint16 TraitSize; // Size of this individual trait including this field
uint8 Type; // ETW_PROVIDER_TRAIT_TYPE
char Data[TraitSize-3]; // Trait data
};
struct EVENT_HEADER_EXT_TYPE_PROVIDER_TRAIT {
uint16 TraitSize;
char ProviderName[];
};
"""
.. raw:: html
.. py:data:: c_etl_headers
.. py:data:: BufferType
.. py:data:: BufferFlag
.. py:data:: NullGuid
.. py:data:: EventTraceGuid
.. py:data:: DiskIoGuid
.. py:data:: PageFaultGuid
.. py:data:: ProcessGuid
.. py:data:: FileIoGuid
.. py:data:: ThreadGuid
.. py:data:: TcpIpGuid
.. py:data:: JobGuid
.. py:data:: UdpIpGuid
.. py:data:: RegistryGuid
.. py:data:: DbgPrintGuid
.. py:data:: EventTraceConfigGuid
.. py:data:: EventTraceSpare1
.. py:data:: WnfGuid
.. py:data:: PoolGuid
.. py:data:: PerfinfoGuid
.. py:data:: HeapGuid
.. py:data:: ObjectGuid
.. py:data:: PowerGuid
.. py:data:: ModBoundGuid
.. py:data:: ImageLoadGuid
.. py:data:: DpcGuid
.. py:data:: CcGuid
.. py:data:: CritSecGuid
.. py:data:: StackWalkGuid
.. py:data:: UmsEventGuid
.. py:data:: ALPCGuid
.. py:data:: SplitIoGuid
.. py:data:: ThreadPoolGuid
.. py:data:: HypervisorTraceGuid
.. py:data:: HypervisorXTraceGuid
.. py:data:: GROUP_GUID_MAP
.. py:function:: lookup_guid(group, opcode)
.. py:function:: bytes_left(stream: io.BytesIO)
Get number of bytes left in the buffer.