mirror of
https://github.com/rwinkhart/go-winio.git
synced 2026-09-04 08:07:20 -04:00
Rearrange etw packages
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package etw
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
)
|
||||
|
||||
// InType indicates the type of data contained in the ETW event.
|
||||
type InType byte
|
||||
|
||||
// Various InType definitions for TraceLogging.
|
||||
const (
|
||||
InTypeNull InType = iota
|
||||
InTypeUnicodeString
|
||||
InTypeAnsiString
|
||||
InTypeInt8
|
||||
InTypeUint8
|
||||
InTypeInt16
|
||||
InTypeUint16
|
||||
InTypeInt32
|
||||
InTypeUint32
|
||||
InTypeInt64
|
||||
InTypeUint64
|
||||
InTypeFloat
|
||||
InTypeDouble
|
||||
InTypeBool32
|
||||
)
|
||||
|
||||
// EventMetadata maintains a buffer which builds up the metadatadata for an ETW
|
||||
// event. It needs to be paired with EventData which describes the event.
|
||||
type EventMetadata struct {
|
||||
buffer bytes.Buffer
|
||||
}
|
||||
|
||||
// NewEventMetadata returns a new EventMetadata with event name and initial
|
||||
// metadata written to the buffer.
|
||||
func NewEventMetadata(name string) *EventMetadata {
|
||||
em := EventMetadata{}
|
||||
binary.Write(&em.buffer, binary.LittleEndian, uint16(0)) // Length placeholder
|
||||
binary.Write(&em.buffer, binary.LittleEndian, byte(0)) // Tags
|
||||
binary.Write(&em.buffer, binary.LittleEndian, []byte(name)) // Event name
|
||||
binary.Write(&em.buffer, binary.LittleEndian, byte(0)) // Null terminator for name
|
||||
return &em
|
||||
}
|
||||
|
||||
// AddField appends a single field to the end of the event metadata buffer.
|
||||
func (em *EventMetadata) AddField(name string, inType InType) {
|
||||
binary.Write(&em.buffer, binary.LittleEndian, []byte(name)) // Field name
|
||||
binary.Write(&em.buffer, binary.LittleEndian, byte(0)) // Null terminator for name
|
||||
binary.Write(&em.buffer, binary.LittleEndian, byte(inType)) // In type
|
||||
}
|
||||
Reference in New Issue
Block a user