Files
go-winio/etw/eventmetadata.go
T

45 lines
1.1 KiB
Go

package etw
import (
"bytes"
"encoding/binary"
)
type InType byte
const (
InTypeNull InType = iota
InTypeUnicodeString
InTypeAnsiString
InTypeInt8
InTypeUint8
InTypeInt16
InTypeUint16
InTypeInt32
InTypeUint32
InTypeInt64
InTypeUint64
InTypeFloat
InTypeDouble
InTypeBool32
)
type EventMetadata struct {
buffer bytes.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
}
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
}